/usr/include/dballe/db/trace.h is in libdballe-dev 7.21-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | /*
* dballe/db/trace - Trace and measure DB queries
*
* Copyright (C) 2015 ARPA-SIM <urpsim@smr.arpa.emr.it>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
* Author: Enrico Zini <enrico@enricozini.com>
*/
#ifndef DBALLE_DB_TRACE_H
#define DBALLE_DB_TRACE_H
#include <dballe/core/json.h>
#include <wreport/varinfo.h>
#include <sys/types.h>
#include <vector>
#include <sstream>
#include <memory>
#include <ctime>
namespace dballe {
struct Query;
namespace db {
class TraceOp;
class Trace
{
protected:
// Command line used to start the current process
std::vector<std::string> argv;
// Process ID of the current process (cached getpid() result)
pid_t pid;
// Database connection URL
std::string db_url;
// JSON output buffer, holding one JSON record
std::stringstream json_buf;
// JSON serializer
core::JSONWriter writer;
// Output file name
std::string out_fname;
// Output file
FILE* out = 0;
// Populate argv
void read_argv();
// Cancel the current output, resetting json_buf
void output_abort();
// Flush the current output, then reset json_buf
void output_flush();
public:
typedef std::unique_ptr<TraceOp> Tracer;
Trace();
~Trace();
Tracer trace_connect(const std::string& url);
Tracer trace_reset(const char* repinfo_file=0);
Tracer trace_remove_station_data(const Query& query);
Tracer trace_remove(const Query& query);
Tracer trace_remove_all();
Tracer trace_vacuum();
Tracer trace_query_stations(const Query& query);
Tracer trace_query_station_data(const Query& query);
Tracer trace_query_data(const Query& query);
Tracer trace_query_summary(const Query& query);
Tracer trace_export_msgs(const Query& query);
friend class TraceOp;
};
class TraceOp
{
protected:
Trace* trace = 0;
clock_t start;
public:
TraceOp();
TraceOp(Trace& trace, const char* operation);
~TraceOp();
void done();
template<typename T>
void add_list(const char* key, const T& val)
{
trace->writer.add(key);
trace->writer.add_list(val);
}
void add_null(const char* key)
{
trace->writer.add(key);
trace->writer.add_null();
}
template<typename T>
void add(const char* key, const T& val)
{
trace->writer.add(key);
trace->writer.add(val);
}
void add_query(const Query& query);
};
}
}
#endif
|