1 #ifndef DBALLE_DB_V7_TRACE_H 2 #define DBALLE_DB_V7_TRACE_H 4 #include <dballe/fwd.h> 5 #include <dballe/db/v7/fwd.h> 6 #include <dballe/core/json.h> 49 void add_sibling(T* step)
57 sibling->add_sibling(step);
60 Step* first_sibling(
const std::string& name)
62 if (this->name == name)
return this;
63 if (!sibling)
return nullptr;
64 return sibling->first_sibling(name);
67 Step* last_sibling(
const std::string& name,
Step* last=
nullptr)
69 if (this->name == name)
71 if (!sibling)
return this;
72 return sibling->last_sibling(name,
this);
74 if (!sibling)
return last;
75 return sibling->last_sibling(name, last);
78 void _aggregate(
const std::string& name,
Aggregate& agg)
80 if (this->name == name)
84 agg.ticks += end - start;
86 if (sibling) sibling->_aggregate(name, agg);
87 if (child) child->_aggregate(name, agg);
91 Step(
const std::string& name);
92 Step(
const std::string& name,
const std::string& detail);
96 unsigned elapsed_usec()
const;
107 Aggregate aggregate(
const std::string& name)
110 if (child) child->_aggregate(name, res);
114 Step* first_child(
const std::string& name)
116 if (!child)
return nullptr;
117 return child->first_sibling(name);
120 Step* last_child(
const std::string& name)
122 if (!child)
return nullptr;
123 return child->last_sibling(name);
126 void add_row(
unsigned amount=1) { rows += amount; }
129 T* add_child(T* step)
137 child->add_sibling(step);
141 Step* trace_select(
const std::string& query,
unsigned rows=0)
143 Step* res = add_child(
new Step(
"select", query));
148 Step* trace_insert(
const std::string& query,
unsigned rows=0)
150 Step* res = add_child(
new Step(
"insert", query));
155 Step* trace_update(
const std::string& query,
unsigned rows=0)
157 Step* res = add_child(
new Step(
"update", query));
162 Step* trace_delete(
const std::string& query,
unsigned rows=0)
164 Step* res = add_child(
new Step(
"delete", query));
180 Tracer<> trace_import(
unsigned count);
182 Tracer<> trace_insert_station_data();
185 Tracer<> trace_func(
const std::string& name);
188 Tracer<> trace_remove_station_data_by_id(
int id);
189 Tracer<> trace_remove_data_by_id(
int id);
198 virtual Tracer<> trace_connect(
const std::string& url) = 0;
199 virtual Tracer<> trace_reset(
const char* repinfo_file=0) = 0;
201 virtual Tracer<> trace_remove_all() = 0;
202 virtual Tracer<> trace_vacuum() = 0;
203 virtual void save() = 0;
205 static bool in_test_suite();
206 static void set_in_test_suite();
211 Tracer<> trace_connect(
const std::string& url)
override {
return Tracer<>(
nullptr); }
212 Tracer<> trace_reset(
const char* repinfo_file=0)
override {
return Tracer<>(
nullptr); }
216 void save()
override {}
222 std::vector<trace::Step*> steps;
232 Tracer<> trace_connect(
const std::string& url)
override;
233 Tracer<> trace_reset(
const char* repinfo_file=0)
override;
235 Tracer<> trace_remove_all()
override;
238 void save()
override {}
250 void save()
override;
One operation being traced.
Definition: db/v7/trace.h:28
std::string detail
Optional details about the operation.
Definition: db/v7/trace.h:40
Definition: db/v7/trace.h:241
Definition: db/v7/trace.h:171
unsigned rows
Number of database rows affected.
Definition: db/v7/trace.h:42
Step * parent
Parent operation in the operation stack.
Definition: db/v7/trace.h:32
Definition: db/v7/trace.h:194
std::string name
Operation name.
Definition: db/v7/trace.h:38
Definition: db/v7/trace.h:209
Definition: db/v7/trace.h:219
Smart pointer for trace::Step objects, which calls done() when going out of scope.
Definition: db/v7/fwd.h:45
Query used to filter DB-All.e data.
Definition: query.h:14
JSON serializer.
Definition: json.h:29
Definition: db/v7/trace.h:17