CernVM-FS  2.13.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
tracer.h
Go to the documentation of this file.
1 
5 #ifndef CVMFS_TRACER_H_
6 #define CVMFS_TRACER_H_ 1
7 
8 #include <inttypes.h>
9 #include <pthread.h>
10 #include <sys/time.h>
11 
12 #include <cstdio>
13 #include <string>
14 
15 #include "shortstring.h"
16 #include "util/atomic.h"
17 #include "util/single_copy.h"
18 
35 class Tracer : SingleCopy {
36  public:
37  enum TraceEvents {
46  };
47 
48  Tracer();
49  ~Tracer();
50 
51  void Activate(const int buffer_size, const int flush_threshold,
52  const std::string &trace_file);
53  void Spawn();
54  void Flush();
55  void inline __attribute__((used)) Trace(const int event,
56  const PathString &path,
57  const std::string &msg) {
58  if (active_)
59  DoTrace(event, path, msg);
60  }
61 
62  bool inline __attribute__((used)) IsActive() { return active_; }
63 
64  private:
68  static const int kEventStart = -1;
72  static const int kEventStop = -2;
76  static const int kEventFlush = -3;
77 
81  struct BufferEntry {
85  timeval time_stamp;
89  int code;
91  std::string msg;
92  };
93 
94  static void *MainFlush(void *data);
95  void GetTimespecRel(const int64_t ms, timespec *ts);
96  int WriteCsvFile(FILE *fp, const std::string &field);
97  int32_t DoTrace(const int event,
98  const PathString &path,
99  const std::string &msg);
100 
101  bool active_;
102  bool spawned_;
103  std::string trace_file_;
113  pthread_t thread_flush_;
114  pthread_cond_t sig_flush_;
115  pthread_mutex_t sig_flush_mutex_;
116  pthread_cond_t sig_continue_trace_;
117  pthread_mutex_t sig_continue_trace_mutex_;
130 };
131 
132 #endif // CVMFS_TRACER_H_
timeval time_stamp
Definition: tracer.h:85
Tracer()
Definition: tracer.cc:218
PathString path
Definition: tracer.h:90
void Activate(const int buffer_size, const int flush_threshold, const std::string &trace_file)
Definition: tracer.cc:25
void GetTimespecRel(const int64_t ms, timespec *ts)
Definition: tracer.cc:129
void const PathString const std::string & msg
Definition: tracer.h:57
static void * MainFlush(void *data)
Definition: tracer.cc:143
pthread_mutex_t sig_flush_mutex_
Definition: tracer.h:115
atomic_int32 seq_no_
Definition: tracer.h:122
void Spawn()
Definition: tracer.cc:207
std::string msg
Definition: tracer.h:91
int code
Definition: tracer.h:89
void __attribute__((used)) Trace(const int event
int WriteCsvFile(FILE *fp, const std::string &field)
Definition: tracer.cc:263
pthread_cond_t sig_flush_
Definition: tracer.h:114
pthread_cond_t sig_continue_trace_
Definition: tracer.h:116
int buffer_size_
Definition: tracer.h:104
Definition: tracer.h:35
atomic_int32 flush_immediately_
Definition: tracer.h:129
int32_t atomic_int32
Definition: atomic.h:17
int32_t DoTrace(const int event, const PathString &path, const std::string &msg)
Definition: tracer.cc:67
int flush_threshold_
Definition: tracer.h:105
void Flush()
Definition: tracer.cc:102
pthread_t thread_flush_
Definition: tracer.h:113
static const int kEventFlush
Definition: tracer.h:76
~Tracer()
Definition: tracer.cc:233
atomic_int32 terminate_flush_thread_
Definition: tracer.h:128
bool active_
Definition: tracer.h:101
static const int kEventStart
Definition: tracer.h:68
BufferEntry * ring_buffer_
Definition: tracer.h:106
void const PathString & path
Definition: tracer.h:56
static const int kEventStop
Definition: tracer.h:72
bool __attribute__((used)) IsActive()
Definition: tracer.h:62
Definition: tracer.h:81
pthread_mutex_t sig_continue_trace_mutex_
Definition: tracer.h:117
std::string trace_file_
Definition: tracer.h:103
TraceEvents
Definition: tracer.h:37
atomic_int32 flushed_
Definition: tracer.h:127
bool spawned_
Definition: tracer.h:102
atomic_int32 * commit_buffer_
Definition: tracer.h:112