LogDoctor/logdoctor/tools/crapview/modules/query.h

123 lines
5.6 KiB
C++

#ifndef QUERY_H
#define QUERY_H
#include <QMessageBox>
#include <QString>
#include <QHash>
#include <vector>
#include <unordered_map>
const QHash<int, QString>
TYPES = {
{1,QMessageBox::tr("Access")}, {2,QMessageBox::tr("Error")} },
FIELDS = {
{10,QMessageBox::tr("Protocol")}, {11,QMessageBox::tr("Method")},
{12,QMessageBox::tr("URI")}, {13,QMessageBox::tr("Query")}, {14,QMessageBox::tr("Response code")},
{15,QMessageBox::tr("Time taken")}, {16,QMessageBox::tr("Bytes sent")}, {17,QMessageBox::tr("Bytes received")},
{18,QMessageBox::tr("Referrer")}, {22,QMessageBox::tr("Cookie")},
{20,QMessageBox::tr("Client")}, {21,QMessageBox::tr("User-agent")},
{30,QMessageBox::tr("Port")},
{31,QMessageBox::tr("Level")}, {32,QMessageBox::tr("Message")}, {33,QMessageBox::tr("Source file")} },
MONTHS = {
{1, QMessageBox::tr("January")}, {2, QMessageBox::tr("February")}, {3, QMessageBox::tr("March")},
{4, QMessageBox::tr("April")}, {5, QMessageBox::tr("May")}, {6, QMessageBox::tr("June")},
{7, QMessageBox::tr("July")}, {8, QMessageBox::tr("August")}, {9, QMessageBox::tr("September")},
{10,QMessageBox::tr("October")}, {11,QMessageBox::tr("November")}, {12,QMessageBox::tr("December")} };
class DbQuery
{
public:
DbQuery();
void setDialogLevel( const int new_level );
void setDbPath( const std::string& path );
//const std::string getDbPath( const int web_server );
const int getMonthsCount( const QString& from_year, const QString& from_month, const QString& to_year, const QString& to_month );
void refreshDates( std::tuple<bool, std::unordered_map<int, std::unordered_map<int, std::unordered_map<int, std::unordered_map<int, std::vector<int>>>>>>& result );
void getSpeedData(
std::tuple<bool, std::vector<std::tuple<long long, std::vector<QString>>>>& result,
const QString& web_server,
const QString& year_, const QString& month_, const QString& day_,
const QString& protocol_f, const QString& method_f, const QString& uri_f, const QString& query_f, const QString& response_f );
void getItemsCount(
std::tuple<bool, std::vector<std::tuple<QString, int>>>& result,
const QString& web_server, const QString& log_type,
const QString& year, const QString& month, const QString& day,
const QString& log_field );
void getDaytimeCounts(
std::tuple<bool, std::unordered_map<int, std::unordered_map<int, int>>>& result,
const QString& web_server, const QString& log_type,
const QString& from_year_, const QString& from_month_, const QString& from_day_,
const QString& to_year_, const QString& to_month_, const QString& to_day_,
const QString& log_field_, const QString& field_filter );
void getRelationalCountsDay(
std::tuple<bool, std::vector<std::tuple<long long, int>>>& result,
const QString& web_server, const QString& log_type,
const QString& year_, const QString& month_, const QString& day_,
const QString& log_field_1_, const QString& field_filter_1,
const QString& log_field_2_, const QString& field_filter_2 );
void getRelationalCountsPeriod(
std::tuple<bool, std::vector<std::tuple<long long, int>>>& result,
const QString& web_server, const QString& log_type,
const QString& from_year_, const QString& from_month_, const QString& from_day_,
const QString& to_year_, const QString& to_month_, const QString& to_day_,
const QString& log_field_1_, const QString& field_filter_1,
const QString& log_field_2_, const QString& field_filter_2 );
private:
QString MSG_ERR_PROCESSING = QMessageBox::tr("An error occured while processing"),
MSG_ERR_PROCESSING_DATES = QMessageBox::tr("An error occured while processing dates"),
MSG_ERR_UNX_WS = QMessageBox::tr("Unexpected WebServer"),
MSG_ERR_UNX_LT = QMessageBox::tr("Unexpected LogType");
// quantity of informational dialogs to display
int dialog_level = 2; // 0: essential, 1: usefull, 2: explanatory
std::string db_path;
QString db_name;
const QHash<QString, QString>
LogFields_to_DbFields = {
{FIELDS.value(10), "protocol"},
{FIELDS.value(11), "method"},
{FIELDS.value(12), "uri"},
{FIELDS.value(13), "query"},
{FIELDS.value(14), "response"},
{FIELDS.value(15), "time_taken"},
{FIELDS.value(16), "bytes_sent"},
{FIELDS.value(17), "bytes_received"},
{FIELDS.value(18), "referrer"},
{FIELDS.value(20), "client"},
{FIELDS.value(21), "user_agent"},
{FIELDS.value(22), "cookie"},
{FIELDS.value(30), "port"},
{FIELDS.value(31), "level"},
{FIELDS.value(32), "message"},
{FIELDS.value(33), "source_file"}
};
const QHash<QString, int>
Months_s2i = {
{MONTHS.value(1),1}, {MONTHS.value(2),2}, {MONTHS.value(3),3},
{MONTHS.value(4),4}, {MONTHS.value(5),5}, {MONTHS.value(6),6},
{MONTHS.value(7),7}, {MONTHS.value(8),8}, {MONTHS.value(9),9},
{MONTHS.value(10),10}, {MONTHS.value(11),11}, {MONTHS.value(12),12} };
const int getMinuteGap( const int minute, const int gap=10 ),
getMonthDays( const int year, const int month ),
getMonthsCount( const int from_year, const int from_month, const int to_year, const int to_month );
};
#endif // QUERY_H