This file is indexed.

/usr/include/dballe/db/trace.h is in libdballe-dev 7.7-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