1#ifndef DBALLE_DB_V7_TRACE_H
2#define DBALLE_DB_V7_TRACE_H
4#include <dballe/core/json.h>
5#include <dballe/db/v7/fwd.h>
47 template <
typename T>
void add_sibling(T* step)
58 Step* first_sibling(
const std::string&
name)
60 if (this->name ==
name)
67 Step* last_sibling(
const std::string&
name, Step* last =
nullptr)
69 if (this->name ==
name)
80 void _aggregate(
const std::string&
name, Aggregate& agg)
82 if (this->name ==
name)
95 Step(
const std::string&
name);
96 Step(
const std::string&
name,
const std::string&
detail);
100 unsigned elapsed_usec()
const;
102 void to_json(core::JSONWriter& writer)
const;
111 Aggregate aggregate(
const std::string&
name)
119 Step* first_child(
const std::string&
name)
126 Step* last_child(
const std::string&
name)
133 void add_row(
unsigned amount = 1) {
rows += amount; }
135 template <
typename T> T* add_child(T* step)
143 child->add_sibling(step);
147 Step* trace_select(
const std::string& query,
unsigned rows = 0)
149 Step* res = add_child(
new Step(
"select", query));
154 Step* trace_insert(
const std::string& query,
unsigned rows = 0)
156 Step* res = add_child(
new Step(
"insert", query));
161 Step* trace_update(
const std::string& query,
unsigned rows = 0)
163 Step* res = add_child(
new Step(
"update", query));
168 Step* trace_delete(
const std::string& query,
unsigned rows = 0)
170 Step* res = add_child(
new Step(
"delete", query));
176class Transaction :
public Step
179 Transaction() : Step(
"transaction") {}
185 Tracer<> trace_import(
unsigned count);
187 Tracer<> trace_insert_station_data();
193 Tracer<> trace_remove_station_data_by_id(
int id);
194 Tracer<> trace_remove_data_by_id(
int id);
203 virtual Tracer<> trace_connect(
const std::string& url) = 0;
204 virtual Tracer<> trace_reset(
const char* repinfo_file = 0) = 0;
206 virtual Tracer<> trace_remove_all() = 0;
207 virtual Tracer<> trace_vacuum() = 0;
208 virtual void save() = 0;
210 static bool in_test_suite();
211 static void set_in_test_suite();
216 Tracer<> trace_connect(
const std::string& url)
override
220 Tracer<> trace_reset(
const char* repinfo_file = 0)
override
230 void save()
override {}
233class QuietCollectTrace :
public Trace
236 std::vector<trace::Step*> steps;
239 QuietCollectTrace() =
default;
240 QuietCollectTrace(
const QuietCollectTrace&) =
delete;
241 QuietCollectTrace(QuietCollectTrace&&) =
delete;
242 QuietCollectTrace& operator=(
const QuietCollectTrace&) =
delete;
243 QuietCollectTrace& operator=(QuietCollectTrace&&) =
delete;
244 ~QuietCollectTrace();
246 Tracer<> trace_connect(
const std::string& url)
override;
247 Tracer<> trace_reset(
const char* repinfo_file = 0)
override;
249 Tracer<> trace_remove_all()
override;
252 void save()
override {}
255class CollectTrace :
public QuietCollectTrace
262 CollectTrace(
const std::string& logdir);
264 void save()
override;
Query used to filter DB-All.e data.
Definition query.h:17
Smart pointer for trace::Step objects, which calls done() when going out of scope.
Definition db/v7/fwd.h:45
One operation being traced.
Definition db/v7/trace.h:28
std::string detail
Optional details about the operation.
Definition db/v7/trace.h:39
clock_t start
Timing start.
Definition db/v7/trace.h:43
std::string name
Operation name.
Definition db/v7/trace.h:37
clock_t end
Timing end.
Definition db/v7/trace.h:45
Step * parent
Parent operation in the operation stack.
Definition db/v7/trace.h:31
Step * sibling
Next sibling operation in the operation stack.
Definition db/v7/trace.h:35
Step * child
First child operation in the operation stack.
Definition db/v7/trace.h:33
unsigned rows
Number of database rows affected.
Definition db/v7/trace.h:41
Definition db/v7/trace.h:215
Definition db/v7/trace.h:200
Definition db/v7/trace.h:18