diff --git a/logdoctor/modules/crapview/crapview.cpp b/logdoctor/modules/crapview/crapview.cpp index 6f275deb..a17b035e 100644 --- a/logdoctor/modules/crapview/crapview.cpp +++ b/logdoctor/modules/crapview/crapview.cpp @@ -1,6 +1,8 @@ #include "crapview.h" +#include "globals/db_names.h" + #include "utilities/printables.h" #include "utilities/strings.h" #include "utilities/vectors.h" @@ -30,29 +32,11 @@ void Crapview::setDialogsLevel( const DialogsLevel new_level ) noexcept void Crapview::setDbPath( const std::string& path ) noexcept { - this->dbQuery.setDbPath( path + "/collection.db" ); + this->dbQuery.setDbPath( path + "/" + DatabasesNames::data ); } -QString Crapview::getLogFieldString ( const size_t field_id ) const noexcept -{ - return TR::tr( this->dbQuery.FIELDS.at( field_id ).c_str() ); -} - -int Crapview::getLogFieldID ( const QString& field_str ) const noexcept -{ - int f{ 0 }; - for ( const auto& [id,str] : this->dbQuery.FIELDS ) { - if ( TR::tr(str.c_str()) == field_str ) { - f = id; - break; - } - } - return f; -} - - int Crapview::getMonthNumber( const QString& month_str ) const noexcept { const auto pos{ std::find_if( this->dbQuery.MONTHS.cbegin(), this->dbQuery.MONTHS.cend(), @@ -143,14 +127,38 @@ QStringList Crapview::getHours() const noexcept return hours; } -QStringList Crapview::getFields( const std::string& tab ) const noexcept +QStringList Crapview::getWarnHeaderColumns() const noexcept { - QStringList list; - const auto& f{ this->fields.at( tab ) }; - std::transform( f.cbegin(), f.cend(), - std::back_inserter( list ), - [](const auto& field){ return TR::tr( field.c_str() ); } ); - return list; + return { + TR::tr( FIELDS__WARNING.c_str() ), + TR::tr( WORDS__DATE.c_str() ), + TR::tr( WORDS__TIME.c_str() ), + TR::tr( FIELDS__PROTOCOL.c_str() ), + TR::tr( FIELDS__METHOD.c_str() ), + TR::tr( FIELDS__URI.c_str() ), + TR::tr( FIELDS__QUERY.c_str() ), + TR::tr( FIELDS__RESPONSE_CODE.c_str() ), + TR::tr( FIELDS__USER_AGENT.c_str() ), + TR::tr( FIELDS__CLIENT.c_str() ), + TR::tr( FIELDS__COOKIE.c_str() ), + TR::tr( FIELDS__REFERRER.c_str() ), + TR::tr( FIELDS__BYTES_RECEIVED.c_str() ), + TR::tr( FIELDS__BYTES_SENT.c_str() ), + TR::tr( FIELDS__TIME_TAKEN.c_str() ) + }; +} + +QStringList Crapview::getSpeedHeaderColumns() const noexcept +{ + return { + TR::tr( FIELDS__TIME_TAKEN.c_str() ), + TR::tr( FIELDS__URI.c_str() ), + TR::tr( FIELDS__QUERY.c_str() ), + TR::tr( FIELDS__METHOD.c_str() ), + TR::tr( FIELDS__PROTOCOL.c_str() ), + TR::tr( FIELDS__RESPONSE_CODE.c_str() ), + TR::tr( WORDS__TIME.c_str() ) + }; } @@ -615,7 +623,7 @@ void Crapview::drawCount( QTableWidget* table, QChartView* chart, const QChart:: -void Crapview::drawDay( QChartView* chart, const QChart::ChartTheme& theme, const QString web_server, 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 field , const QString filter ) const +void Crapview::drawDay( QChartView* chart, const QChart::ChartTheme& theme, const QString web_server, 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 field_str, const LogField field, const QString filter ) const { std::optional result; @@ -712,7 +720,7 @@ void Crapview::drawDay( QChartView* chart, const QChart::ChartTheme& theme, cons QChart* b_chart{ new QChart() }; b_chart->setTheme( theme ); b_chart->addSeries( bars ); - b_chart->setTitle( QStringLiteral("%1: %2").arg( TR::tr( "Time of Day Count" ), field ) ); + b_chart->setTitle( QStringLiteral("%1: %2").arg( TR::tr( "Time of Day Count" ), field_str ) ); b_chart->legend()->setVisible( false ); /*b_chart->legend()->setAlignment( Qt::AlignBottom ); b_chart->setAnimationOptions( QChart::SeriesAnimations );*/ @@ -742,7 +750,7 @@ void Crapview::drawDay( QChartView* chart, const QChart::ChartTheme& theme, cons -void Crapview::drawRelat( QChartView* chart, const QChart::ChartTheme& theme, const QString web_server, 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 field_1, const QString filter_1, const QString field_2, const QString filter_2 ) const +void Crapview::drawRelat( QChartView* chart, const QChart::ChartTheme& theme, const QString web_server, 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 field_1_str, const LogField field_1, const QString filter_1, const QString field_2_str, const LogField field_2, const QString filter_2 ) const { const bool period{ from_day != to_day || from_month != to_month || from_year != to_year }; @@ -822,7 +830,7 @@ void Crapview::drawRelat( QChartView* chart, const QChart::ChartTheme& theme, co a_chart->setTheme( theme ); a_chart->addSeries( area ); a_chart->addSeries( area_ ); - a_chart->setTitle( QStringLiteral("%1: %2 -> %3").arg( TR::tr( "Time of Day Count" ), field_1, field_2) ); + a_chart->setTitle( QStringLiteral("%1: %2 -> %3").arg( TR::tr( "Time of Day Count" ), field_1_str, field_2_str) ); a_chart->legend()->setVisible( false ); /*a_chart->legend()->setFont( fonts.at( "main_small" ) ); a_chart->legend()->setAlignment( Qt::AlignBottom );*/ diff --git a/logdoctor/modules/crapview/crapview.h b/logdoctor/modules/crapview/crapview.h index 60eb9a07..769b1a17 100644 --- a/logdoctor/modules/crapview/crapview.h +++ b/logdoctor/modules/crapview/crapview.h @@ -43,22 +43,6 @@ public: void setDbPath( const std::string& path ) noexcept; - //! Returns the printable log field corresponding to the given ID - /*! - The field gets translated to be printable before being returned - \param field_id The ID of the log fiels - \return The printable field - */ - QString getLogFieldString ( const size_t field_id ) const noexcept; - - //! Returns the log field ID corresponding to the given printable field - /*! - \param field_str The log field - \return The ID of the log field - */ - int getLogFieldID ( const QString& field_str ) const noexcept; - - //! Returns the month number corresponding to the given printable month /*! \param month_Str The printable month name @@ -105,12 +89,19 @@ public: QStringList getHours() const noexcept; - //! Returns a list of the fields for the given tab + //! Returns a list of the translated columns /*! - \param tab The stats tab + To be inserted in a header \return The list of fields */ - QStringList getFields( const std::string& tab ) const noexcept; + QStringList getWarnHeaderColumns() const noexcept; + + //! Returns a list of the translated columns + /*! + To be inserted in a header + \return The list of fields + */ + QStringList getSpeedHeaderColumns() const noexcept; //! Draws the chart and fills the table for the Warnings stats @@ -198,7 +189,7 @@ public: const QString web_server, 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 field, const QString filter + const QString field_str, const LogField field, const QString filter ) const; @@ -224,8 +215,8 @@ public: const QString web_server, 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 field_1, const QString filter_1, - const QString field_2, const QString filter_2 + const QString field_1_str, const LogField field_1, const QString filter_1, + const QString field_2_str, const LogField field_2, const QString filter_2 ) const; @@ -269,36 +260,11 @@ private: // { web_server_id : { year : { month : [ days ] } } } database_dates_t dates; - // collection of available fields, for tabs which needs them - // { tab : [ fields ] } - const std::unordered_map> fields{ - {"Daytime", { - this->dbQuery.FIELDS.at(10),this->dbQuery.FIELDS.at(11),this->dbQuery.FIELDS.at(12),this->dbQuery.FIELDS.at(13),this->dbQuery.FIELDS.at(14),this->dbQuery.FIELDS.at(18),this->dbQuery.FIELDS.at(22),this->dbQuery.FIELDS.at(21),this->dbQuery.FIELDS.at(20)} }, - {"Relational", { - this->dbQuery.FIELDS.at(10),this->dbQuery.FIELDS.at(11),this->dbQuery.FIELDS.at(12),this->dbQuery.FIELDS.at(13),this->dbQuery.FIELDS.at(14),this->dbQuery.FIELDS.at(15),this->dbQuery.FIELDS.at(16),this->dbQuery.FIELDS.at(17),this->dbQuery.FIELDS.at(18),this->dbQuery.FIELDS.at(22),this->dbQuery.FIELDS.at(21),this->dbQuery.FIELDS.at(20)} } - }; - // converr Web Servers names to Web Server IDs const QHash WebServer_s2i{ {"apache",11}, {"nginx",12}, {"iis",13} }; - // convert log fields to log fields IDs - const QHash LogFields_s2i{ - {QString::fromStdString(this->dbQuery.FIELDS.at( 0)), 0}, - {QString::fromStdString(this->dbQuery.FIELDS.at(10)), 10}, - {QString::fromStdString(this->dbQuery.FIELDS.at(11)), 11}, - {QString::fromStdString(this->dbQuery.FIELDS.at(12)), 12}, - {QString::fromStdString(this->dbQuery.FIELDS.at(13)), 13}, - {QString::fromStdString(this->dbQuery.FIELDS.at(14)), 14}, - {QString::fromStdString(this->dbQuery.FIELDS.at(15)), 15}, - {QString::fromStdString(this->dbQuery.FIELDS.at(16)), 16}, - {QString::fromStdString(this->dbQuery.FIELDS.at(17)), 17}, - {QString::fromStdString(this->dbQuery.FIELDS.at(18)), 18}, - {QString::fromStdString(this->dbQuery.FIELDS.at(20)), 20}, - {QString::fromStdString(this->dbQuery.FIELDS.at(21)), 21}, - {QString::fromStdString(this->dbQuery.FIELDS.at(22)), 22}}; - // convert months names to months numbers const QHash Months_s2i{ {QString::fromStdString(this->dbQuery.MONTHS.at(1)), 1}, diff --git a/logdoctor/modules/crapview/modules/filters.h b/logdoctor/modules/crapview/modules/filters.h index 827457df..4a15fbec 100644 --- a/logdoctor/modules/crapview/modules/filters.h +++ b/logdoctor/modules/crapview/modules/filters.h @@ -1,5 +1,5 @@ -#ifndef LOGDOCTOR__CRAPVIEW__FILTERS_H -#define LOGDOCTOR__CRAPVIEW__FILTERS_H +#ifndef LOGDOCTOR__CRAPVIEW__MODULES__FILTERS_H +#define LOGDOCTOR__CRAPVIEW__MODULES__FILTERS_H #include @@ -48,4 +48,4 @@ std::optional parseTextualFilter( const QString& filter_str ) noexcept; } -#endif // LOGDOCTOR__CRAPVIEW__FILTERS_H +#endif // LOGDOCTOR__CRAPVIEW__MODULES__FILTERS_H diff --git a/logdoctor/modules/crapview/modules/lib.h b/logdoctor/modules/crapview/modules/lib.h index 573aba03..097ba2bf 100644 --- a/logdoctor/modules/crapview/modules/lib.h +++ b/logdoctor/modules/crapview/modules/lib.h @@ -1,5 +1,5 @@ -#ifndef LOGDOCTOR__CRAPVIEW__LIB_H -#define LOGDOCTOR__CRAPVIEW__LIB_H +#ifndef LOGDOCTOR__CRAPVIEW__MODULES__LIB_H +#define LOGDOCTOR__CRAPVIEW__MODULES__LIB_H #include @@ -65,4 +65,4 @@ struct GlobalsData final Q_DISABLE_COPY(GlobalsData) }; -#endif // LOGDOCTOR__CRAPVIEW__LIB_H +#endif // LOGDOCTOR__CRAPVIEW__MODULES__LIB_H diff --git a/logdoctor/modules/crapview/modules/query.cpp b/logdoctor/modules/crapview/modules/query.cpp index 0e9079ad..b1d32153 100644 --- a/logdoctor/modules/crapview/modules/query.cpp +++ b/logdoctor/modules/crapview/modules/query.cpp @@ -203,11 +203,16 @@ int DbQuery::countMonths( QStringView from_year, QStringView from_month, QString } +const QString& DbQuery::getDbField( const LogField fld ) const +{ + return this->LogFields_to_DbFields.at( fld ); +} + const QString& DbQuery::getDbField( QStringView tr_fld ) const { for ( const auto& [id,str] : this->FIELDS ) { if ( TR::tr(str.c_str()) == tr_fld ) { - return this->LogFields_to_DbFields.at( str ); + return this->LogFields_to_DbFields.at( id ); } } throw DatabaseException( std::move(QStringLiteral("Unexpected DbField: ").append(tr_fld)) ); @@ -603,7 +608,7 @@ void DbQuery::getItemsCount( std::optional& result, QString // get and count items with a 10 minutes gap for every hour of the day -void DbQuery::getDaytimeCounts( std::optional& result, QStringView web_server, QStringView from_year_, QStringView from_month_, QStringView from_day_, QStringView to_year_, QStringView to_month_, QStringView to_day_, QStringView log_field_, QStringView field_filter ) const +void DbQuery::getDaytimeCounts( std::optional& result, QStringView web_server, QStringView from_year_, QStringView from_month_, QStringView from_day_, QStringView to_year_, QStringView to_month_, QStringView to_day_, const LogField log_field_, QStringView field_filter ) const { stats_day_items_t data{ // std::unordered_map> {0, {{0,0},{10,0},{20,0},{30,0},{40,0},{50,0}}}, {1, {{0,0},{10,0},{20,0},{30,0},{40,0},{50,0}}}, @@ -736,7 +741,7 @@ void DbQuery::getDaytimeCounts( std::optional& result, QStrin // get and count how many times a specific item value brought to another -void DbQuery::getRelationalCountsDay( std::optional& result, QStringView web_server, QStringView year_, QStringView month_, QStringView day_, QStringView log_field_1_, QStringView field_filter_1, QStringView log_field_2_, QStringView field_filter_2 ) const +void DbQuery::getRelationalCountsDay( std::optional& result, QStringView web_server, QStringView year_, QStringView month_, QStringView day_, const LogField log_field_1_, QStringView field_filter_1, const LogField log_field_2_, QStringView field_filter_2 ) const { stats_relat_items_t data; // std::vector> int gap = 20; @@ -881,7 +886,7 @@ void DbQuery::getRelationalCountsDay( std::optional& result -void DbQuery::getRelationalCountsPeriod( std::optional& result, QStringView web_server, QStringView from_year_, QStringView from_month_, QStringView from_day_, QStringView to_year_, QStringView to_month_, QStringView to_day_, QStringView log_field_1_, QStringView field_filter_1, QStringView log_field_2_, QStringView field_filter_2 ) const +void DbQuery::getRelationalCountsPeriod( std::optional& result, QStringView web_server, QStringView from_year_, QStringView from_month_, QStringView from_day_, QStringView to_year_, QStringView to_month_, QStringView to_day_, const LogField log_field_1_, QStringView field_filter_1, const LogField log_field_2_, QStringView field_filter_2 ) const { stats_relat_items_t data; // std::vector> diff --git a/logdoctor/modules/crapview/modules/query.h b/logdoctor/modules/crapview/modules/query.h index 7fde492c..4df67811 100644 --- a/logdoctor/modules/crapview/modules/query.h +++ b/logdoctor/modules/crapview/modules/query.h @@ -1,5 +1,5 @@ -#ifndef LOGDOCTOR__CRAPVIEW__QUERY_H -#define LOGDOCTOR__CRAPVIEW__QUERY_H +#ifndef LOGDOCTOR__CRAPVIEW__MODULES__QUERY_H +#define LOGDOCTOR__CRAPVIEW__MODULES__QUERY_H #include "lib.h" @@ -7,6 +7,8 @@ #include "modules/shared.h" +#include "modules/crapview/lib.h" + #include #include @@ -17,14 +19,21 @@ class DbQuery final public: - // convert log fields IDs to log fields - const std::unordered_map FIELDS{ - {0, FIELDS__WARNING}, - {10,FIELDS__PROTOCOL}, {11,FIELDS__METHOD}, - {12,FIELDS__URI}, {13,FIELDS__QUERY}, {14,FIELDS__RESPONSE_CODE}, - {15,FIELDS__TIME_TAKEN}, {16,FIELDS__BYTES_SENT}, {17,FIELDS__BYTES_RECEIVED}, - {18,FIELDS__REFERRER}, {22,FIELDS__COOKIE}, - {20,FIELDS__CLIENT}, {21,FIELDS__USER_AGENT} }; + // log fields enums to log fields strings + const std::unordered_map FIELDS{ + {LogField::Warning, FIELDS__WARNING}, + {LogField::Protocol, FIELDS__PROTOCOL}, + {LogField::Method, FIELDS__METHOD}, + {LogField::Uri, FIELDS__URI}, + {LogField::Query, FIELDS__QUERY}, + {LogField::ResponseCode, FIELDS__RESPONSE_CODE}, + {LogField::TimeTaken, FIELDS__TIME_TAKEN}, + {LogField::BytesSent, FIELDS__BYTES_SENT}, + {LogField::BytesReceived, FIELDS__BYTES_RECEIVED}, + {LogField::Referrer, FIELDS__REFERRER}, + {LogField::Cookie, FIELDS__COOKIE}, + {LogField::Client, FIELDS__CLIENT}, + {LogField::UserAgent, FIELDS__USER_AGENT} }; // convert month numbers to month names const std::unordered_map MONTHS{ @@ -177,7 +186,7 @@ public: QStringView web_server, QStringView from_year_, QStringView from_month_, QStringView from_day_, QStringView to_year_, QStringView to_month_, QStringView to_day_, - QStringView log_field_, QStringView field_filter + const LogField log_field_, QStringView field_filter ) const; @@ -203,8 +212,8 @@ public: std::optional& result, QStringView web_server, QStringView year_, QStringView month_, QStringView day_, - QStringView log_field_1_, QStringView field_filter_1, - QStringView log_field_2_, QStringView field_filter_2 + const LogField log_field_1_, QStringView field_filter_1, + const LogField log_field_2_, QStringView field_filter_2 ) const; //! Retrieves the data needed for the Relational statistics @@ -233,8 +242,8 @@ public: QStringView web_server, QStringView from_year_, QStringView from_month_, QStringView from_day_, QStringView to_year_, QStringView to_month_, QStringView to_day_, - QStringView log_field_1_, QStringView field_filter_1, - QStringView log_field_2_, QStringView field_filter_2 + const LogField log_field_1_, QStringView field_filter_1, + const LogField log_field_2_, QStringView field_filter_2 ) const; @@ -274,22 +283,30 @@ private: QString db_name; // convert log fields to database fields - const std::unordered_map LogFields_to_DbFields{ - {this->FIELDS.at( 0), "warning"}, - {this->FIELDS.at(10), "protocol"}, - {this->FIELDS.at(11), "method"}, - {this->FIELDS.at(12), "uri"}, - {this->FIELDS.at(13), "query"}, - {this->FIELDS.at(14), "response"}, - {this->FIELDS.at(15), "time_taken"}, - {this->FIELDS.at(16), "bytes_sent"}, - {this->FIELDS.at(17), "bytes_received"}, - {this->FIELDS.at(18), "referrer"}, - {this->FIELDS.at(20), "client"}, - {this->FIELDS.at(21), "user_agent"}, - {this->FIELDS.at(22), "cookie"} + const std::unordered_map LogFields_to_DbFields{ + {LogField::Warning, "warning"}, + {LogField::Protocol, "protocol"}, + {LogField::Method, "method"}, + {LogField::Uri, "uri"}, + {LogField::Query, "query"}, + {LogField::ResponseCode, "response"}, + {LogField::TimeTaken, "time_taken"}, + {LogField::BytesSent, "bytes_sent"}, + {LogField::BytesReceived, "bytes_received"}, + {LogField::Referrer, "referrer"}, + {LogField::Client, "client"}, + {LogField::UserAgent, "user_agent"}, + {LogField::Cookie, "cookie"} }; + //! Returns the database field corresponding to the relative log field + /*! + \param fld The log field + \return The database field + \throw CrapviewException + */ + const QString& getDbField( const LogField fld ) const; + //! Returns the database field corresponding to the relative log field /*! \param tr_fld The log field, hendles translated text @@ -359,4 +376,4 @@ private: }; -#endif // LOGDOCTOR__CRAPVIEW__QUERY_H +#endif // LOGDOCTOR__CRAPVIEW__MODULES__QUERY_H