-
Notifications
You must be signed in to change notification settings - Fork 1
/
Log2db.cpp
92 lines (76 loc) · 2.13 KB
/
Log2db.cpp
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
#include <QtCore/QFile>
#include <QtCore/QDebug>
#include <QtCore/QDataStream>
#include <QtCore/QCoreApplication>
#include <QtCore/QCommandLineParser>
#include <QtSql/QSqlError>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlDatabase>
#include "Log.h"
void createDB();
using namespace QSqliteProfiler;
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
QCoreApplication::setApplicationName("Log2db");
QCoreApplication::setApplicationVersion("1.0");
QCommandLineParser parser;
parser.setApplicationDescription("Export log to the database");
parser.addHelpOption();
parser.addVersionOption();
parser.addPositionalArgument("source", "Source log");
parser.addPositionalArgument("destination", "Destination database");
parser.process(app);
const auto args = parser.positionalArguments();
if (args.count() != 2)
{
qCritical() << "Incorrect number of arguments";
return 1;
}
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(args[1]);
if (!db.open())
{
qCritical() << "Can not open database:" << db.lastError().text();
exit(2);
}
else
{
createDB();
}
QFile log(args[0]);
if(!log.open(QIODevice::ReadOnly))
{
qCritical() << "Can not open log file:" << log.errorString();
exit(4);
}
QDataStream stream(&log);
QSqlQuery query;
query.prepare("INSERT INTO query "
"VALUES (?, ?, ?)");
db.transaction();
while(!log.atEnd())
{
LogRecord record;
stream>>record;
query.bindValue(0, record.timestamp);
query.bindValue(1, record.duration);
query.bindValue(2, record.query);
query.exec();
}
db.commit();
return 0;
}
void createDB()
{
const QString createTable = "CREATE TABLE IF NOT EXISTS query ("
"timestamp NUMERIC NOT NULL, "
"time NUMERIC NOT NULL, "
"query TEXT NOT NULL)";
QSqlQuery query;
if (!query.exec(createTable))
{
qCritical() << "Can not create table:" << query.lastError().text();
exit(3);
}
}