summaryrefslogtreecommitdiffstats
path: root/src/CRSMStats.hpp
diff options
context:
space:
mode:
authorMarkus Mittendrein <git@maxmitti.tk>2015-10-27 12:42:19 +0100
committerMarkus Mittendrein <git@maxmitti.tk>2015-10-27 12:42:19 +0100
commit4e30841039bb7c3efe5558e40cba8375baad30f7 (patch)
tree40850a3816e537a60e1037eff29f54245cae23fc /src/CRSMStats.hpp
parentb5f799707482bee75bcf1f32c9aa509c96b6d1a7 (diff)
downloadmanager-4e30841039bb7c3efe5558e40cba8375baad30f7.tar.gz
manager-4e30841039bb7c3efe5558e40cba8375baad30f7.zip
Begin adding basic stats
Diffstat (limited to 'src/CRSMStats.hpp')
-rw-r--r--src/CRSMStats.hpp234
1 files changed, 227 insertions, 7 deletions
diff --git a/src/CRSMStats.hpp b/src/CRSMStats.hpp
index 5eb7ed0..595c58b 100644
--- a/src/CRSMStats.hpp
+++ b/src/CRSMStats.hpp
@@ -1,15 +1,235 @@
-#ifndef CRSMSTATS_HPP
-#define CRSMSTATS_HPP
+#pragma once
+#include "ConfigBase.hpp"
+#include "ClientInfo.hpp"
+#include "CmdFunctionRef.hpp"
+
+struct WishStartStats { // TODO: Implement stats-gathering
+ int WishCount = 0;
+ int StartCount = 0;
+};
+
+struct ScenarioStats {
+ WishStartStats Sum;
+ QString FileName = "";
+ QMap<ClientInfo, WishStartStats> Wishers;
+};
+
+struct CommandUseStats {
+ int UseCount = 0;
+ int SuccessCount = 0;
+ int RightsFailCount = 0;
+ int SyntaxFailCount = 0;
+};
+
+struct UserStats {
+ WishStartStats WishSum;
+ ClientInfo Client;
+ QMap<QString, WishStartStats> ScenarioWishes;
+ CommandUseStats CommandSum;
+ QMap<QString, CommandUseStats> Commands;
+ QMap<QString, int> FailCommands;
+};
+
+struct CommandStats {
+ CommandUseStats Sum;
+ QString Command = "";
+ QMap<ClientInfo, CommandUseStats> Users;
+};
+
+struct FailCommandStats {
+ int Sum = 0;
+ QString Command = "";
+ QMap<ClientInfo, int> Users;
+};
+
+template<>
+class ConfigValue<WishStartStats> : public ConfigValueBase {
+ WishStartStats& config;
+ ConfigValue<int> wishConfig;
+ ConfigValue<int> startConfig;
+public:
+ ConfigValue(WishStartStats& config) : config(config), wishConfig(config.WishCount), startConfig(config.StartCount) {}
+ void setValue(const QString& value)
+ {
+ QStringList parts = value.split(',', QString::KeepEmptyParts);
+ if(parts.length() != 2)
+ {
+ throw ConfigException("Can not parse corrupt WishStartStats");
+ }
+ wishConfig.setValue(parts.first());
+ startConfig.setValue(parts.at(1));
+ }
+
+ QString value()
+ {
+ return wishConfig.value() + ',' + startConfig.value();
+ }
+};
+
+template<>
+class ConfigValue<CommandUseStats> : public ConfigValueBase {
+ CommandUseStats& config;
+ ConfigValue<int> useConfig;
+ ConfigValue<int> successConfig;
+ ConfigValue<int> rightsFailConfig;
+ ConfigValue<int> syntaxFailConfig;
+public:
+ ConfigValue(CommandUseStats& config) : config(config), useConfig(config.UseCount), successConfig(config.SuccessCount), rightsFailConfig(config.RightsFailCount), syntaxFailConfig(config.SyntaxFailCount) {}
+ void setValue(const QString& value)
+ {
+ QStringList parts = value.split(',', QString::KeepEmptyParts);
+ if(parts.length() != 4)
+ {
+ throw ConfigException("Can not parse corrupt CommandUseStats");
+ }
+ useConfig.setValue(parts.first());
+ successConfig.setValue(parts.at(1));
+ rightsFailConfig.setValue(parts.at(2));
+ syntaxFailConfig.setValue(parts.at(3));
+ }
+
+ QString value()
+ {
+ return useConfig.value() + ',' + successConfig.value() + ',' + rightsFailConfig.value() + ',' + syntaxFailConfig.value();
+ }
+};
+
+template<>
+class ConfigValue<ScenarioStats> : public ConfigValueBase {
+ ScenarioStats& config;
+ ConfigValue<WishStartStats> sumConfig;
+ ConfigValue<QString> fileNameConfig;
+ ConfigValue<QMap<ClientInfo, WishStartStats>> wishersConfig;
+public:
+ ConfigValue(ScenarioStats& config) : config(config), sumConfig(config.Sum), fileNameConfig(config.FileName), wishersConfig(config.Wishers) {}
+ void setValue(const QString& value)
+ {
+ QStringList parts = Util::splitEscaped(value, '|');
+ if(parts.length() != 3)
+ {
+ throw ConfigException("Can not parse corrupt ScenarioStats");
+ }
+ sumConfig.setValue(parts.first());
+ fileNameConfig.setValue(parts.at(1));
+ wishersConfig.setValue(parts.at(2));
+ }
+
+ QString value()
+ {
+ return Util::joinEscape({sumConfig.value(), fileNameConfig.value(), wishersConfig.value()}, '|');
+ }
+};
+
+template<>
+class ConfigValue<UserStats> : public ConfigValueBase {
+ UserStats& config;
+ ConfigValue<WishStartStats> wishSumConfig;
+ ConfigValue<ClientInfo> clientConfig;
+ ConfigValue<QMap<QString, WishStartStats>> scenarioWishesConfig;
+ ConfigValue<CommandUseStats> commandSumConfig;
+ ConfigValue<QMap<QString, CommandUseStats>> commandsConfig;
+ ConfigValue<QMap<QString, int>> failCommandsConfig;
+
+public:
+ ConfigValue(UserStats& config) : config(config), wishSumConfig(config.WishSum), clientConfig(config.Client), scenarioWishesConfig(config.ScenarioWishes), commandSumConfig(config.CommandSum), commandsConfig(config.Commands), failCommandsConfig(config.FailCommands) {}
+
+ void setValue(const QString& value)
+ {
+ QStringList parts = Util::splitEscaped(value, '|');
+ if(parts.length() != 6)
+ {
+ throw ConfigException("Can not parse corrupt UserStats");
+ }
+ wishSumConfig.setValue(parts.first());
+ clientConfig.setValue(parts.at(1));
+ scenarioWishesConfig.setValue(parts.at(2));
+ commandSumConfig.setValue(parts.at(3));
+ commandsConfig.setValue(parts.at(4));
+ failCommandsConfig.setValue(parts.at(5));
+ }
+
+ QString value()
+ {
+ return Util::joinEscape({wishSumConfig.value(), clientConfig.value(), scenarioWishesConfig.value(), commandSumConfig.value(), commandsConfig.value(), failCommandsConfig.value()}, '|');
+ }
+};
+
+template<>
+class ConfigValue<CommandStats> : public ConfigValueBase {
+ CommandStats& config;
+ ConfigValue<CommandUseStats> sumConfig;
+ ConfigValue<QString> commandConfig;
+ ConfigValue<QMap<ClientInfo, CommandUseStats>> usersConfig;
+
+public:
+ ConfigValue(CommandStats& config) : config(config), sumConfig(config.Sum), commandConfig(config.Command), usersConfig(config.Users) {}
+
+ void setValue(const QString &value)
+ {
+ QStringList parts = Util::splitEscaped(value, '|');
+ if(parts.length() != 3)
+ {
+ throw ConfigException("Can not parse corrupt CommandStats");
+ }
+ sumConfig.setValue(parts.first());
+ commandConfig.setValue(parts.at(1));
+ usersConfig.setValue(parts.at(2));
+ }
+
+ QString value()
+ {
+ return Util::joinEscape({sumConfig.value(), commandConfig.value(), usersConfig.value()}, '|');
+ }
+
+};
+
+template<>
+class ConfigValue<FailCommandStats> : public ConfigValueBase {
+ FailCommandStats& config;
+ ConfigValue<int> sumConfig;
+ ConfigValue<QString> commandConfig;
+ ConfigValue<QMap<ClientInfo, int>> usersConfig;
+
+public:
+ ConfigValue(FailCommandStats& config) : config(config), sumConfig(config.Sum), commandConfig(config.Command), usersConfig(config.Users) {}
+
+ void setValue(const QString &value)
+ {
+ QStringList parts = Util::splitEscaped(value, '|');
+ if(parts.length() != 3)
+ {
+ throw ConfigException("Can not parse corrupt CommandStats");
+ }
+ sumConfig.setValue(parts.first());
+ commandConfig.setValue(parts.at(1));
+ usersConfig.setValue(parts.at(2));
+ }
+
+ QString value()
+ {
+ return Util::joinEscape({sumConfig.value(), commandConfig.value(), usersConfig.value()}, '|');
+ }
+
+};
class CRSMStats : public ConfigBase
{
+ QString curFileName;
public:
- CRSMStats();
+ Map(String, ScenarioStats) Scenarios;
+ Map(ClientInfo, UserStats) Users;
+ Map(String, CommandStats) Commands;
+ Map(String, FailCommandStats) FailCommands;
-signals:
+ CRSMStats() : ConfigBase({
+ ConfigVal(Scenarios),
+ ConfigVal(Users),
+ ConfigVal(Commands),
+ ConfigVal(FailCommands)
+ }) {}
-public slots:
+ void AddScenarioWish(const ClientInfo& client, const QString& scenarioFileName);
+ void AddScenarioStart(const ClientInfo& client, const QString& scenarioFileName);
+ void AddCommandResult(const ClientInfo& client, const QString& cmd, CmdResult result);
};
-
-#endif // CRSMSTATS_HPP