UI: StatisticsPage: Show traffic.

This commit is contained in:
Nodir Temirkhodjaev 2017-12-11 11:05:49 +05:00
parent d050e5e7de
commit 04509a5815
18 changed files with 360 additions and 126 deletions

View File

@ -1,6 +1,9 @@
include(../common/Test.pri)
SOURCES += \
$$UIPATH/conf/addressgroup.cpp \
$$UIPATH/conf/appgroup.cpp \
$$UIPATH/conf/firewallconf.cpp \
$$UIPATH/db/databasemanager.cpp \
$$UIPATH/db/databasesql.cpp \
$$UIPATH/fortcommon.cpp \
@ -8,6 +11,9 @@ SOURCES += \
$$UIPATH/util/fileutil.cpp
HEADERS += \
$$UIPATH/conf/addressgroup.h \
$$UIPATH/conf/appgroup.h \
$$UIPATH/conf/firewallconf.h \
$$UIPATH/db/databasemanager.h \
$$UIPATH/db/databasesql.h \
$$UIPATH/fortcommon.h \

View File

@ -12,6 +12,10 @@ FirewallConf::FirewallConf(QObject *parent) :
m_logStat(false),
m_appBlockAll(true),
m_appAllowAll(false),
m_trafHourKeepDays(DEFAULT_TRAF_HOUR_KEEP_DAYS),
m_trafDayKeepDays(DEFAULT_TRAF_DAY_KEEP_DAYS),
m_trafMonthKeepMonths(DEFAULT_TRAF_MONTH_KEEP_MONTHS),
m_trafUnit(UnitAdaptive),
m_ipInclude(new AddressGroup(this)),
m_ipExclude(new AddressGroup(this))
{
@ -73,6 +77,38 @@ void FirewallConf::setAppAllowAll(bool appAllowAll)
}
}
void FirewallConf::setTrafHourKeepDays(int trafHourKeepDays)
{
if (m_trafHourKeepDays != trafHourKeepDays) {
m_trafHourKeepDays = trafHourKeepDays;
emit trafHourKeepDaysChanged();
}
}
void FirewallConf::setTrafDayKeepDays(int trafDayKeepDays)
{
if (m_trafDayKeepDays != trafDayKeepDays) {
m_trafDayKeepDays = trafDayKeepDays;
emit trafDayKeepDaysChanged();
}
}
void FirewallConf::setTrafMonthKeepMonths(int trafMonthKeepMonths)
{
if (m_trafMonthKeepMonths != trafMonthKeepMonths) {
m_trafMonthKeepMonths = trafMonthKeepMonths;
emit trafMonthKeepMonthsChanged();
}
}
void FirewallConf::setTrafUnit(int trafUnit)
{
if (m_trafUnit != trafUnit) {
m_trafUnit = static_cast<TrafUnit>(trafUnit);
emit trafUnitChanged();
}
}
quint32 FirewallConf::appGroupBits() const
{
quint32 groupBits = 0;
@ -146,14 +182,15 @@ void FirewallConf::copyFlags(const FirewallConf &o)
setAppAllowAll(o.appAllowAll());
setAppGroupBits(o.appGroupBits());
copyImmediateFlags(o);
copyImmediateValues(o);
}
void FirewallConf::copyImmediateFlags(const FirewallConf &o)
void FirewallConf::copyImmediateValues(const FirewallConf &o)
{
setResolveAddress(o.resolveAddress());
setLogBlocked(o.logBlocked());
setLogStat(o.logStat());
setTrafUnit(o.trafUnit());
}
QVariant FirewallConf::toVariant() const

View File

@ -8,6 +8,11 @@
QT_FORWARD_DECLARE_CLASS(AddressGroup)
QT_FORWARD_DECLARE_CLASS(AppGroup)
#define DEFAULT_APP_GROUP_BITS 0xFFFF
#define DEFAULT_TRAF_HOUR_KEEP_DAYS 90 // ~3 months
#define DEFAULT_TRAF_DAY_KEEP_DAYS 356 // ~1 year
#define DEFAULT_TRAF_MONTH_KEEP_MONTHS 360 // ~3 years
class FirewallConf : public QObject
{
Q_OBJECT
@ -18,12 +23,26 @@ class FirewallConf : public QObject
Q_PROPERTY(bool logStat READ logStat WRITE setLogStat NOTIFY logStatChanged)
Q_PROPERTY(bool appBlockAll READ appBlockAll WRITE setAppBlockAll NOTIFY appBlockAllChanged)
Q_PROPERTY(bool appAllowAll READ appAllowAll WRITE setAppAllowAll NOTIFY appAllowAllChanged)
Q_PROPERTY(int trafHourKeepDays READ trafHourKeepDays WRITE setTrafHourKeepDays NOTIFY trafHourKeepDaysChanged)
Q_PROPERTY(int trafDayKeepDays READ trafDayKeepDays WRITE setTrafDayKeepDays NOTIFY trafDayKeepDaysChanged)
Q_PROPERTY(int trafMonthKeepMonths READ trafMonthKeepMonths WRITE setTrafMonthKeepMonths NOTIFY trafMonthKeepMonthsChanged)
Q_PROPERTY(int trafUnit READ trafUnit WRITE setTrafUnit NOTIFY trafUnitChanged)
Q_PROPERTY(AddressGroup *ipInclude READ ipInclude CONSTANT)
Q_PROPERTY(AddressGroup *ipExclude READ ipExclude CONSTANT)
Q_PROPERTY(QQmlListProperty<AppGroup> appGroups READ appGroups NOTIFY appGroupsChanged)
Q_CLASSINFO("DefaultProperty", "appGroups")
public:
enum TrafUnit {
UnitAdaptive = 0,
UnitBytes,
UnitKB,
UnitMB,
UnitGB,
UnitTB
};
Q_ENUM(TrafUnit)
explicit FirewallConf(QObject *parent = nullptr);
bool provBoot() const { return m_provBoot; }
@ -47,6 +66,18 @@ public:
bool appAllowAll() const { return m_appAllowAll; }
void setAppAllowAll(bool appAllowAll);
int trafHourKeepDays() const { return m_trafHourKeepDays; }
void setTrafHourKeepDays(int trafHourKeepDays);
int trafDayKeepDays() const { return m_trafDayKeepDays; }
void setTrafDayKeepDays(int trafDayKeepDays);
int trafMonthKeepMonths() const { return m_trafMonthKeepMonths; }
void setTrafMonthKeepMonths(int trafMonthKeepMonths);
int trafUnit() const { return m_trafUnit; }
void setTrafUnit(int trafUnit);
quint32 appGroupBits() const;
void setAppGroupBits(quint32 groupBits);
@ -57,7 +88,7 @@ public:
QQmlListProperty<AppGroup> appGroups();
void copyFlags(const FirewallConf &o);
void copyImmediateFlags(const FirewallConf &o);
void copyImmediateValues(const FirewallConf &o);
QVariant toVariant() const;
void fromVariant(const QVariant &v);
@ -70,6 +101,10 @@ signals:
void logStatChanged();
void appBlockAllChanged();
void appAllowAllChanged();
void trafHourKeepDaysChanged();
void trafDayKeepDaysChanged();
void trafMonthKeepMonthsChanged();
void trafUnitChanged();
void appGroupsChanged();
public slots:
@ -90,6 +125,12 @@ private:
uint m_appBlockAll : 1;
uint m_appAllowAll : 1;
int m_trafHourKeepDays;
int m_trafDayKeepDays;
int m_trafMonthKeepMonths;
TrafUnit m_trafUnit;
AddressGroup *m_ipInclude;
AddressGroup *m_ipExclude;

View File

@ -1,5 +1,6 @@
#include "databasemanager.h"
#include "../conf/firewallconf.h"
#include "../util/dateutil.h"
#include "../util/fileutil.h"
#include "databasesql.h"
@ -14,6 +15,7 @@ DatabaseManager::DatabaseManager(const QString &filePath,
m_lastTrafDay(0),
m_lastTrafMonth(0),
m_filePath(filePath),
m_conf(nullptr),
m_sqliteDb(new SqliteDb())
{
SqliteEngine::initialize();
@ -28,6 +30,15 @@ DatabaseManager::~DatabaseManager()
SqliteEngine::shutdown();
}
void DatabaseManager::setFirewallConf(const FirewallConf *conf)
{
m_conf = conf;
if (m_conf && !m_conf->logStat()) {
logClear();
}
}
bool DatabaseManager::initialize()
{
const bool fileExists = FileUtil::fileExists(m_filePath);
@ -40,8 +51,11 @@ bool DatabaseManager::initialize()
return fileExists || createTables();
}
void DatabaseManager::logProcNew(const QString &appPath, bool &isNew)
qint64 DatabaseManager::logProcNew(const QString &appPath, bool &isNew)
{
if (m_conf && !m_conf->logStat())
return 0;
qint64 appId = getAppId(appPath);
if (appId == 0) {
appId = createAppId(appPath);
@ -50,6 +64,8 @@ void DatabaseManager::logProcNew(const QString &appPath, bool &isNew)
m_appPaths.prepend(appPath);
m_appIds.prepend(appId);
return appId;
}
void DatabaseManager::logStatTraf(quint16 procCount, const quint8 *procBits,
@ -57,6 +73,9 @@ void DatabaseManager::logStatTraf(quint16 procCount, const quint8 *procBits,
{
Q_ASSERT(procCount == m_appIds.size());
if (m_conf && !m_conf->logStat())
return;
QVector<quint16> delProcIndexes;
const qint64 unixTime = DateUtil::getUnixTime();
@ -78,28 +97,28 @@ void DatabaseManager::logStatTraf(quint16 procCount, const quint8 *procBits,
m_sqliteDb->beginTransaction();
// Insert Statemets
QStmtList insertTrafAppStmts = QStmtList()
<< getTrafficStmt(DatabaseSql::sqlInsertTrafficAppHour, trafHour)
<< getTrafficStmt(DatabaseSql::sqlInsertTrafficAppDay, trafDay)
<< getTrafficStmt(DatabaseSql::sqlInsertTrafficAppMonth, trafMonth)
<< getTrafficStmt(DatabaseSql::sqlUpdateTrafficAppTotal, -1);
const QStmtList insertTrafAppStmts = QStmtList()
<< getTrafficStmt(DatabaseSql::sqlInsertTrafAppHour, trafHour)
<< getTrafficStmt(DatabaseSql::sqlInsertTrafAppDay, trafDay)
<< getTrafficStmt(DatabaseSql::sqlInsertTrafAppMonth, trafMonth)
<< getTrafficStmt(DatabaseSql::sqlUpdateTrafAppTotal, -1);
QStmtList insertTrafStmts = QStmtList()
<< getTrafficStmt(DatabaseSql::sqlInsertTrafficHour, trafHour)
<< getTrafficStmt(DatabaseSql::sqlInsertTrafficDay, trafDay)
<< getTrafficStmt(DatabaseSql::sqlInsertTrafficMonth, trafMonth);
const QStmtList insertTrafStmts = QStmtList()
<< getTrafficStmt(DatabaseSql::sqlInsertTrafHour, trafHour)
<< getTrafficStmt(DatabaseSql::sqlInsertTrafDay, trafDay)
<< getTrafficStmt(DatabaseSql::sqlInsertTrafMonth, trafMonth);
// Update Statemets
QStmtList updateTrafAppStmts = QStmtList()
<< getTrafficStmt(DatabaseSql::sqlUpdateTrafficAppHour, trafHour)
<< getTrafficStmt(DatabaseSql::sqlUpdateTrafficAppDay, trafDay)
<< getTrafficStmt(DatabaseSql::sqlUpdateTrafficAppMonth, trafMonth)
<< getTrafficStmt(DatabaseSql::sqlUpdateTrafficAppTotal, -1);
const QStmtList updateTrafAppStmts = QStmtList()
<< getTrafficStmt(DatabaseSql::sqlUpdateTrafAppHour, trafHour)
<< getTrafficStmt(DatabaseSql::sqlUpdateTrafAppDay, trafDay)
<< getTrafficStmt(DatabaseSql::sqlUpdateTrafAppMonth, trafMonth)
<< getTrafficStmt(DatabaseSql::sqlUpdateTrafAppTotal, -1);
QStmtList updateTrafStmts = QStmtList()
<< getTrafficStmt(DatabaseSql::sqlUpdateTrafficHour, trafHour)
<< getTrafficStmt(DatabaseSql::sqlUpdateTrafficDay, trafDay)
<< getTrafficStmt(DatabaseSql::sqlUpdateTrafficMonth, trafMonth);
const QStmtList updateTrafStmts = QStmtList()
<< getTrafficStmt(DatabaseSql::sqlUpdateTrafHour, trafHour)
<< getTrafficStmt(DatabaseSql::sqlUpdateTrafDay, trafDay)
<< getTrafficStmt(DatabaseSql::sqlUpdateTrafMonth, trafMonth);
for (quint16 i = 0; i < procCount; ++i) {
const bool active = procBits[i / 8] & (1 << (i & 7));
@ -124,6 +143,30 @@ void DatabaseManager::logStatTraf(quint16 procCount, const quint8 *procBits,
}
}
// Delete old data
if (isNewDay) {
const qint32 oldTrafHour = trafHour
- 24 * (m_conf ? m_conf->trafHourKeepDays()
: DEFAULT_TRAF_HOUR_KEEP_DAYS);
const qint32 oldTrafDay = trafHour
- 24 * (m_conf ? m_conf->trafDayKeepDays()
: DEFAULT_TRAF_DAY_KEEP_DAYS);
const qint32 oldTrafMonth = DateUtil::addUnixMonths(
trafHour, -(m_conf ? m_conf->trafMonthKeepMonths()
: DEFAULT_TRAF_MONTH_KEEP_MONTHS));
// Delete Statemets
const QStmtList deleteTrafStmts = QStmtList()
<< getTrafficStmt(DatabaseSql::sqlDeleteTrafAppHour, oldTrafHour)
<< getTrafficStmt(DatabaseSql::sqlDeleteTrafAppDay, oldTrafDay)
<< getTrafficStmt(DatabaseSql::sqlDeleteTrafAppMonth, oldTrafMonth)
<< getTrafficStmt(DatabaseSql::sqlDeleteTrafHour, oldTrafHour)
<< getTrafficStmt(DatabaseSql::sqlDeleteTrafDay, oldTrafDay)
<< getTrafficStmt(DatabaseSql::sqlDeleteTrafMonth, oldTrafMonth);
deleteTrafficList(deleteTrafStmts);
}
m_sqliteDb->commitTransaction();
// Delete inactive processes
@ -237,6 +280,14 @@ bool DatabaseManager::updateTraffic(SqliteStmt *stmt, quint32 inBytes,
&& m_sqliteDb->changes() != 0;
}
void DatabaseManager::deleteTrafficList(const QStmtList &deleteStmtList)
{
foreach (SqliteStmt *stmtDelete, deleteStmtList) {
stmtDelete->step();
stmtDelete->reset();
}
}
qint32 DatabaseManager::getTrafficTime(const char *sql, qint64 appId)
{
qint32 trafTime = 0;

View File

@ -6,6 +6,7 @@
#include <QStringList>
#include <QVector>
QT_FORWARD_DECLARE_CLASS(FirewallConf)
QT_FORWARD_DECLARE_CLASS(SqliteDb)
QT_FORWARD_DECLARE_CLASS(SqliteStmt)
@ -18,11 +19,14 @@ public:
QObject *parent = nullptr);
virtual ~DatabaseManager();
bool initialize();
const FirewallConf *firewallConf() const { return m_conf; }
void setFirewallConf(const FirewallConf *conf);
SqliteDb *sqliteDb() const { return m_sqliteDb; }
void logProcNew(const QString &appPath, bool &isNew);
bool initialize();
qint64 logProcNew(const QString &appPath, bool &isNew);
void logStatTraf(quint16 procCount, const quint8 *procBits,
const quint32 *trafBytes);
void logClear();
@ -56,6 +60,8 @@ private:
bool updateTraffic(SqliteStmt *stmt, quint32 inBytes,
quint32 outBytes, qint64 appId = 0);
void deleteTrafficList(const QStmtList &deleteStmtList);
SqliteStmt *getTrafficStmt(const char *sql, qint32 trafTime);
SqliteStmt *getSqliteStmt(const char *sql);
@ -67,6 +73,8 @@ private:
QString m_filePath;
const FirewallConf *m_conf;
SqliteDb *m_sqliteDb;
QHash<const char *, SqliteStmt *> m_sqliteStmts;

View File

@ -72,79 +72,79 @@ const char * const DatabaseSql::sqlSelectAppPaths =
"SELECT app_id, path FROM app ORDER BY creat_time;"
;
const char * const DatabaseSql::sqlInsertTrafficAppHour =
const char * const DatabaseSql::sqlInsertTrafAppHour =
"INSERT INTO traffic_app_hour(app_id, traf_time, in_bytes, out_bytes)"
" VALUES(?4, ?1, ?2, ?3);"
;
const char * const DatabaseSql::sqlInsertTrafficAppDay =
const char * const DatabaseSql::sqlInsertTrafAppDay =
"INSERT INTO traffic_app_day(app_id, traf_time, in_bytes, out_bytes)"
" VALUES(?4, ?1, ?2, ?3);"
;
const char * const DatabaseSql::sqlInsertTrafficAppMonth =
const char * const DatabaseSql::sqlInsertTrafAppMonth =
"INSERT INTO traffic_app_month(app_id, traf_time, in_bytes, out_bytes)"
" VALUES(?4, ?1, ?2, ?3);"
;
const char * const DatabaseSql::sqlInsertTrafficHour =
const char * const DatabaseSql::sqlInsertTrafHour =
"INSERT INTO traffic_hour(traf_time, in_bytes, out_bytes)"
" VALUES(?1, ?2, ?3);"
;
const char * const DatabaseSql::sqlInsertTrafficDay =
const char * const DatabaseSql::sqlInsertTrafDay =
"INSERT INTO traffic_day(traf_time, in_bytes, out_bytes)"
" VALUES(?1, ?2, ?3);"
;
const char * const DatabaseSql::sqlInsertTrafficMonth =
const char * const DatabaseSql::sqlInsertTrafMonth =
"INSERT INTO traffic_month(traf_time, in_bytes, out_bytes)"
" VALUES(?1, ?2, ?3);"
;
const char * const DatabaseSql::sqlUpdateTrafficAppHour =
const char * const DatabaseSql::sqlUpdateTrafAppHour =
"UPDATE traffic_app_hour"
" SET in_bytes = in_bytes + ?2,"
" out_bytes = out_bytes + ?3"
" WHERE app_id = ?4 and traf_time = ?1;"
;
const char * const DatabaseSql::sqlUpdateTrafficAppDay =
const char * const DatabaseSql::sqlUpdateTrafAppDay =
"UPDATE traffic_app_day"
" SET in_bytes = in_bytes + ?2,"
" out_bytes = out_bytes + ?3"
" WHERE app_id = ?4 and traf_time = ?1;"
;
const char * const DatabaseSql::sqlUpdateTrafficAppMonth =
const char * const DatabaseSql::sqlUpdateTrafAppMonth =
"UPDATE traffic_app_month"
" SET in_bytes = in_bytes + ?2,"
" out_bytes = out_bytes + ?3"
" WHERE app_id = ?4 and traf_time = ?1;"
;
const char * const DatabaseSql::sqlUpdateTrafficAppTotal =
const char * const DatabaseSql::sqlUpdateTrafAppTotal =
"UPDATE app"
" SET in_bytes = in_bytes + ?2,"
" out_bytes = out_bytes + ?3"
" WHERE app_id = ?4 and 0 != ?1;"
;
const char * const DatabaseSql::sqlUpdateTrafficHour =
const char * const DatabaseSql::sqlUpdateTrafHour =
"UPDATE traffic_hour"
" SET in_bytes = in_bytes + ?2,"
" out_bytes = out_bytes + ?3"
" WHERE traf_time = ?1;"
;
const char * const DatabaseSql::sqlUpdateTrafficDay =
const char * const DatabaseSql::sqlUpdateTrafDay =
"UPDATE traffic_day"
" SET in_bytes = in_bytes + ?2,"
" out_bytes = out_bytes + ?3"
" WHERE traf_time = ?1;"
;
const char * const DatabaseSql::sqlUpdateTrafficMonth =
const char * const DatabaseSql::sqlUpdateTrafMonth =
"UPDATE traffic_month"
" SET in_bytes = in_bytes + ?2,"
" out_bytes = out_bytes + ?3"
@ -229,3 +229,33 @@ const char * const DatabaseSql::sqlSelectTrafTotal =
"SELECT sum(in_bytes), sum(out_bytes)"
" FROM app WHERE 0 != ?1;"
;
const char * const DatabaseSql::sqlDeleteTrafAppHour =
"DELETE FROM traffic_app_hour"
" WHERE traf_time < ?1"
" and app_id in (SELECT app_id FROM app);"
;
const char * const DatabaseSql::sqlDeleteTrafAppDay =
"DELETE FROM traffic_app_day"
" WHERE traf_time < ?1"
" and app_id in (SELECT app_id FROM app);"
;
const char * const DatabaseSql::sqlDeleteTrafAppMonth =
"DELETE FROM traffic_app_month"
" WHERE traf_time < ?1"
" and app_id in (SELECT app_id FROM app);"
;
const char * const DatabaseSql::sqlDeleteTrafHour =
"DELETE FROM traffic_hour WHERE traf_time < ?1;"
;
const char * const DatabaseSql::sqlDeleteTrafDay =
"DELETE FROM traffic_day WHERE traf_time < ?1;"
;
const char * const DatabaseSql::sqlDeleteTrafMonth =
"DELETE FROM traffic_month WHERE traf_time < ?1;"
;

View File

@ -12,23 +12,23 @@ public:
static const char * const sqlSelectAppPaths;
static const char * const sqlInsertTrafficAppHour;
static const char * const sqlInsertTrafficAppDay;
static const char * const sqlInsertTrafficAppMonth;
static const char * const sqlInsertTrafAppHour;
static const char * const sqlInsertTrafAppDay;
static const char * const sqlInsertTrafAppMonth;
static const char * const sqlInsertTrafficHour;
static const char * const sqlInsertTrafficDay;
static const char * const sqlInsertTrafficMonth;
static const char * const sqlInsertTrafHour;
static const char * const sqlInsertTrafDay;
static const char * const sqlInsertTrafMonth;
static const char * const sqlUpdateTrafficAppHour;
static const char * const sqlUpdateTrafficAppDay;
static const char * const sqlUpdateTrafficAppMonth;
static const char * const sqlUpdateTrafAppHour;
static const char * const sqlUpdateTrafAppDay;
static const char * const sqlUpdateTrafAppMonth;
static const char * const sqlUpdateTrafficHour;
static const char * const sqlUpdateTrafficDay;
static const char * const sqlUpdateTrafficMonth;
static const char * const sqlUpdateTrafHour;
static const char * const sqlUpdateTrafDay;
static const char * const sqlUpdateTrafMonth;
static const char * const sqlUpdateTrafficAppTotal;
static const char * const sqlUpdateTrafAppTotal;
static const char * const sqlSelectMinTrafAppHour;
static const char * const sqlSelectMinTrafAppDay;
@ -49,6 +49,14 @@ public:
static const char * const sqlSelectTrafDay;
static const char * const sqlSelectTrafMonth;
static const char * const sqlSelectTrafTotal;
static const char * const sqlDeleteTrafAppHour;
static const char * const sqlDeleteTrafAppDay;
static const char * const sqlDeleteTrafAppMonth;
static const char * const sqlDeleteTrafHour;
static const char * const sqlDeleteTrafDay;
static const char * const sqlDeleteTrafMonth;
};
#endif // DATABASESQL_H

View File

@ -245,11 +245,11 @@ bool FortManager::applyConf(bool onlyFlags)
return saveSettings(newConf, onlyFlags);
}
bool FortManager::applyConfImmediateFlags()
bool FortManager::applyConfImmediateValues()
{
Q_ASSERT(m_firewallConfToEdit != nullConf());
m_firewallConf->copyImmediateFlags(*m_firewallConfToEdit);
m_firewallConf->copyImmediateValues(*m_firewallConfToEdit);
return saveSettings(m_firewallConf, true, true);
}
@ -276,9 +276,9 @@ bool FortManager::loadSettings(FirewallConf *conf)
}
bool FortManager::saveSettings(FirewallConf *newConf, bool onlyFlags,
bool immediateFlags)
bool immediateValues)
{
if (!(onlyFlags ? m_fortSettings->writeConfFlags(*newConf)
if (!(onlyFlags ? m_fortSettings->writeConfIni(*newConf)
: m_fortSettings->writeConf(*newConf))) {
showErrorBox("Save Settings: " + m_fortSettings->errorMessage());
return false;
@ -289,7 +289,7 @@ bool FortManager::saveSettings(FirewallConf *newConf, bool onlyFlags,
m_firewallConf = newConf;
}
if (!immediateFlags) {
if (!immediateValues) {
updateTrayMenu();
}
@ -308,7 +308,7 @@ bool FortManager::updateDriverConf(FirewallConf *conf)
return false;
}
updateLogManager(conf);
updateDatabaseManager(conf);
return true;
}
@ -324,19 +324,14 @@ bool FortManager::updateDriverConfFlags(FirewallConf *conf)
return false;
}
updateLogManager(conf);
updateDatabaseManager(conf);
return true;
}
void FortManager::updateLogManager(FirewallConf *conf)
void FortManager::updateDatabaseManager(FirewallConf *conf)
{
if (!conf->logStat()) {
m_databaseManager->logClear();
}
m_logManager->setLogBlockedEnabled(conf->logBlocked());
m_logManager->setLogStatEnabled(conf->logStat());
m_databaseManager->setFirewallConf(conf);
}
void FortManager::setLanguage(int language)
@ -360,7 +355,7 @@ void FortManager::saveTrayFlags()
++i;
}
m_fortSettings->writeConfFlags(*m_firewallConf);
m_fortSettings->writeConfIni(*m_firewallConf);
updateDriverConfFlags(m_firewallConf);
}

View File

@ -54,7 +54,7 @@ public slots:
bool saveOriginConf(const QString &message);
bool saveConf(bool onlyFlags = false);
bool applyConf(bool onlyFlags = false);
bool applyConfImmediateFlags();
bool applyConfImmediateValues();
void setLanguage(int language);
@ -78,12 +78,12 @@ private:
bool loadSettings(FirewallConf *conf);
bool saveSettings(FirewallConf *newConf, bool onlyFlags = false,
bool immediateFlags = false);
bool immediateValues = false);
bool updateDriverConf(FirewallConf *conf);
bool updateDriverConfFlags(FirewallConf *conf);
void updateLogManager(FirewallConf *conf);
void updateDatabaseManager(FirewallConf *conf);
FirewallConf *cloneConf(const FirewallConf &conf);

View File

@ -140,7 +140,7 @@ bool FortSettings::readConf(FirewallConf &conf)
return (!(fileExists || backupFileExists)
|| (fileExists && tryToReadConf(conf, filePath))
|| tryToReadConf(conf, backupFilePath))
&& readConfFlags(conf); // read flags at the end to use correct app groups
&& readConfIni(conf); // read flags at the end to use correct app groups
}
bool FortSettings::tryToReadConf(FirewallConf &conf, const QString &filePath)
@ -165,7 +165,7 @@ bool FortSettings::writeConf(const FirewallConf &conf)
const QString filePath = confFilePath();
const QString backupFilePath = confBackupFilePath();
if (!writeConfFlags(conf)) {
if (!writeConfIni(conf)) {
setErrorMessage(tr("Can't write .ini file"));
return false;
}
@ -204,7 +204,7 @@ bool FortSettings::tryToWriteConf(const FirewallConf &conf, const QString &fileP
return true;
}
bool FortSettings::readConfFlags(FirewallConf &conf) const
bool FortSettings::readConfIni(FirewallConf &conf) const
{
m_ini->beginGroup("confFlags");
conf.setProvBoot(iniBool("provBoot"));
@ -216,13 +216,20 @@ bool FortSettings::readConfFlags(FirewallConf &conf) const
conf.ipExclude()->setUseAll(iniBool("ipExcludeAll"));
conf.setAppBlockAll(iniBool("appBlockAll", true));
conf.setAppAllowAll(iniBool("appAllowAll"));
conf.setAppGroupBits(iniUInt("appGroupBits", 0xFFFF));
conf.setAppGroupBits(iniUInt("appGroupBits", DEFAULT_APP_GROUP_BITS));
m_ini->endGroup();
m_ini->beginGroup("stat");
conf.setTrafHourKeepDays(iniInt("trafHourKeepDays", DEFAULT_TRAF_HOUR_KEEP_DAYS));
conf.setTrafDayKeepDays(iniInt("trafDayKeepDays", DEFAULT_TRAF_DAY_KEEP_DAYS));
conf.setTrafMonthKeepMonths(iniInt("trafMonthKeepMonths", DEFAULT_TRAF_MONTH_KEEP_MONTHS));
conf.setTrafUnit(iniInt("trafUnit"));
m_ini->endGroup();
return true;
}
bool FortSettings::writeConfFlags(const FirewallConf &conf)
bool FortSettings::writeConfIni(const FirewallConf &conf)
{
m_ini->beginGroup("confFlags");
setIniValue("provBoot", conf.provBoot());
@ -234,7 +241,14 @@ bool FortSettings::writeConfFlags(const FirewallConf &conf)
setIniValue("ipExcludeAll", conf.ipExclude()->useAll());
setIniValue("appBlockAll", conf.appBlockAll());
setIniValue("appAllowAll", conf.appAllowAll());
setIniValue("appGroupBits", conf.appGroupBits());
setIniValue("appGroupBits", conf.appGroupBits(), DEFAULT_APP_GROUP_BITS);
m_ini->endGroup();
m_ini->beginGroup("stat");
setIniValue("trafHourKeepDays", conf.trafHourKeepDays(), DEFAULT_TRAF_HOUR_KEEP_DAYS);
setIniValue("trafDayKeepDays", conf.trafDayKeepDays(), DEFAULT_TRAF_DAY_KEEP_DAYS);
setIniValue("trafMonthKeepMonths", conf.trafMonthKeepMonths(), DEFAULT_TRAF_MONTH_KEEP_MONTHS);
setIniValue("trafUnit", conf.trafUnit());
m_ini->endGroup();
return iniSync();
@ -250,7 +264,7 @@ int FortSettings::iniInt(const QString &key, int defaultValue) const
return iniValue(key, defaultValue).toInt();
}
int FortSettings::iniUInt(const QString &key, int defaultValue) const
uint FortSettings::iniUInt(const QString &key, int defaultValue) const
{
return iniValue(key, defaultValue).toUInt();
}

View File

@ -54,8 +54,8 @@ public slots:
bool readConf(FirewallConf &conf);
bool writeConf(const FirewallConf &conf);
bool readConfFlags(FirewallConf &conf) const;
bool writeConfFlags(const FirewallConf &conf);
bool readConfIni(FirewallConf &conf) const;
bool writeConfIni(const FirewallConf &conf);
private:
void processArguments(const QStringList &args);
@ -71,7 +71,7 @@ private:
bool iniBool(const QString &key, bool defaultValue = false) const;
int iniInt(const QString &key, int defaultValue = 0) const;
int iniUInt(const QString &key, int defaultValue = 0) const;
uint iniUInt(const QString &key, int defaultValue = 0) const;
int iniReal(const QString &key, qreal defaultValue = 0) const;
QString iniText(const QString &key, const QString &defaultValue = QString()) const;
QStringList iniList(const QString &key) const;

View File

@ -14,8 +14,6 @@ LogManager::LogManager(DatabaseManager *databaseManager,
QObject *parent) :
QObject(parent),
m_active(false),
m_logBlockedEnabled(false),
m_logStatEnabled(false),
m_driverWorker(driverWorker),
m_appBlockedModel(new AppBlockedModel(this)),
m_appStatModel(new AppStatModel(databaseManager, this))
@ -39,22 +37,6 @@ void LogManager::setActive(bool active)
}
}
void LogManager::setLogBlockedEnabled(bool enabled)
{
if (m_logBlockedEnabled != enabled) {
m_logBlockedEnabled = enabled;
emit logBlockedEnabledChanged();
}
}
void LogManager::setLogStatEnabled(bool enabled)
{
if (m_logStatEnabled != enabled) {
m_logStatEnabled = enabled;
emit logStatEnabledChanged();
}
}
void LogManager::setErrorMessage(const QString &errorMessage)
{
if (m_errorMessage != errorMessage) {
@ -120,26 +102,20 @@ void LogManager::readLogEntries(LogBuffer *logBuffer)
switch (logBuffer->peekEntryType()) {
case LogEntry::AppBlocked: {
logBuffer->readEntryBlocked(&entryBlocked);
if (m_logBlockedEnabled) {
m_appBlockedModel->addLogEntry(entryBlocked);
}
m_appBlockedModel->addLogEntry(entryBlocked);
break;
}
case LogEntry::ProcNew: {
logBuffer->readEntryProcNew(&entryProcNew);
if (m_logStatEnabled) {
m_appStatModel->handleProcNew(entryProcNew.path());
}
m_appStatModel->handleProcNew(entryProcNew.path());
break;
}
case LogEntry::StatTraf: {
logBuffer->readEntryStatTraf(&entryStatTraf);
if (m_logStatEnabled) {
m_appStatModel->handleStatTraf(
entryStatTraf.procCount(),
entryStatTraf.procBits(),
entryStatTraf.trafBytes());
}
m_appStatModel->handleStatTraf(
entryStatTraf.procCount(),
entryStatTraf.procBits(),
entryStatTraf.trafBytes());
break;
}
default:

View File

@ -27,20 +27,12 @@ public:
void setActive(bool active);
bool logBlockedEnabled() const { return m_logBlockedEnabled; }
void setLogBlockedEnabled(bool enabled);
bool logStatEnabled() const { return m_logStatEnabled; }
void setLogStatEnabled(bool enabled);
QString errorMessage() const { return m_errorMessage; }
void initialize();
signals:
void activeChanged();
void logBlockedEnabledChanged();
void logStatEnabledChanged();
void errorMessageChanged();
public slots:
@ -63,8 +55,6 @@ private:
private:
bool m_active;
bool m_logBlockedEnabled;
bool m_logStatEnabled;
DriverWorker *m_driverWorker;
QList<LogBuffer *> m_freeBuffers;

View File

@ -18,8 +18,10 @@ void AppStatModel::initialize()
TrafListModel *AppStatModel::trafListModel(int trafType, int row) const
{
Q_ASSERT(row < m_appIds.size());
m_trafListModel->setType(static_cast<TrafListModel::TrafType>(trafType));
m_trafListModel->setAppId(row == -1 ? 0 : m_appIds.at(row));
m_trafListModel->setAppId(row < 0 ? 0 : m_appIds.at(row));
m_trafListModel->reset();
return m_trafListModel;
@ -46,9 +48,10 @@ void AppStatModel::updateList()
void AppStatModel::handleProcNew(const QString &appPath)
{
bool isNew = false;
m_databaseManager->logProcNew(appPath, isNew);
const qint64 appId = m_databaseManager->logProcNew(appPath, isNew);
if (isNew) {
m_appIds.append(appId);
insert(appPath);
}
}

View File

@ -1,5 +1,8 @@
#include "traflistmodel.h"
#include <QLocale>
#include "../../conf/firewallconf.h"
#include "../../db/databasemanager.h"
#include "../../db/databasesql.h"
#include "../../util/dateutil.h"
@ -65,9 +68,10 @@ QVariant TrafListModel::data(const QModelIndex &index, int role) const
switch (role) {
case DateTimeRole: return formatTrafTime(m_rowCache.trafTime);
case DownloadRole: return m_rowCache.inBytes;
case UploadRole: return m_rowCache.outBytes;
case SumRole: return m_rowCache.inBytes + m_rowCache.outBytes;
case DownloadRole: return formatTrafUnit(m_rowCache.inBytes);
case UploadRole: return formatTrafUnit(m_rowCache.outBytes);
case SumRole: return formatTrafUnit(m_rowCache.inBytes
+ m_rowCache.outBytes);
}
}
return QVariant();
@ -102,6 +106,36 @@ void TrafListModel::updateRowCache(int row) const
m_appId);
}
QString TrafListModel::formatTrafUnit(qint64 bytes) const
{
static const QVector<qint64> unitMults = {
1, // Adaptive
1, // Bytes
1024, // KB
1024 * 1024, // MB
qint64(1024) * 1024 * 1024, // GB
qint64(1024) * 1024 * 1024 * 1024 // TB
};
if (bytes == 0) {
return QLatin1String("0");
}
const FirewallConf *conf = m_databaseManager->firewallConf();
const int trafUnit = conf ? conf->trafUnit() : 0;
const int trafPrec = (trafUnit == FirewallConf::UnitBytes) ? 0 : 2;
QLocale locale;
if (trafUnit == FirewallConf::UnitAdaptive) {
return locale.formattedDataSize(bytes, trafPrec);
}
const qint64 unitMult = unitMults.at(trafUnit);
return locale.toString(qreal(bytes) / unitMult, 'f', trafPrec);
}
QString TrafListModel::formatTrafTime(qint32 trafTime) const
{
const qint64 unixTime = DateUtil::toUnixTime(trafTime);

View File

@ -61,6 +61,7 @@ public slots:
private:
void updateRowCache(int row) const;
QString formatTrafUnit(qint64 bytes) const;
QString formatTrafTime(qint32 trafTime) const;
qint32 getTrafTime(int row) const;

View File

@ -31,6 +31,8 @@ BasePage {
spacing: 10
RowLayout {
spacing: 15
Button {
enabled: appListView.count
text: translationManager.dummyBool
@ -48,7 +50,7 @@ BasePage {
firewallConf.resolveAddress = checked;
fortManager.applyConfImmediateFlags();
fortManager.applyConfImmediateValues();
hostInfoCache.cacheChanged(); // refresh ipListView
}
@ -69,7 +71,7 @@ BasePage {
firewallConf.logBlocked = checked;
fortManager.applyConfImmediateFlags();
fortManager.applyConfImmediateValues();
}
}
}

View File

@ -24,11 +24,24 @@ BasePage {
trafsContainer.width * 0.2
]
readonly property var trafUnitNames:
translationManager.dummyBool
&& [
qsTranslate("qml", "Adaptive"),
qsTranslate("qml", "Bytes"),
qsTranslate("qml", "KiB"),
qsTranslate("qml", "MiB"),
qsTranslate("qml", "GiB"),
qsTranslate("qml", "TiB")
]
ColumnLayout {
anchors.fill: parent
spacing: 10
RowLayout {
spacing: 15
Button {
enabled: appListView.currentIndex >= 0
text: translationManager.dummyBool
@ -36,6 +49,31 @@ BasePage {
onClicked: trafListModel.refresh()
}
Row {
spacing: 5
Label {
anchors.verticalCenter: parent.verticalCenter
text: translationManager.dummyBool
&& qsTranslate("qml", "Units:")
}
ComboBox {
id: comboTrafUnit
currentIndex: firewallConf.trafUnit
model: trafUnitNames
onActivated: {
firewallConf.trafUnit = index;
fortManager.applyConfImmediateValues();
trafListModel.refresh();
}
}
}
Item {
Layout.fillWidth: true
}
@ -52,7 +90,7 @@ BasePage {
firewallConf.logStat = checked;
fortManager.applyConfImmediateFlags();
fortManager.applyConfImmediateValues();
}
}
}