]> git.stg.codes - stg.git/blobdiff - projects/stargazer/settings_impl.cpp
Install Boost in GitHub Actions.
[stg.git] / projects / stargazer / settings_impl.cpp
index 8c728fdc9f4d9938dcd68cb77c4861d8a9afb225..e85a08862c780eded802e77661ab2e79c32f304d 100644 (file)
 #include "stg/logger.h"
 #include "stg/dotconfpp.h"
 #include "stg/common.h"
 #include "stg/logger.h"
 #include "stg/dotconfpp.h"
 #include "stg/common.h"
+#include "stg/const.h"
 
 #include <stdexcept>
 #include <cstring>
 #include <cerrno>
 
 
 #include <stdexcept>
 #include <cstring>
 #include <cerrno>
 
+using STG::SettingsImpl;
+using STG::ParamValue;
+
 namespace
 {
 
 struct Error : public std::runtime_error
 {
 namespace
 {
 
 struct Error : public std::runtime_error
 {
-    Error(const std::string& message) : runtime_error(message) {}
+    explicit Error(const std::string& message) : runtime_error(message) {}
 };
 
 std::vector<std::string> toValues(const DOTCONFDocumentNode& node)
 };
 
 std::vector<std::string> toValues(const DOTCONFDocumentNode& node)
@@ -48,9 +52,9 @@ std::vector<std::string> toValues(const DOTCONFDocumentNode& node)
     return values;
 }
 
     return values;
 }
 
-std::vector<PARAM_VALUE> toPVS(const DOTCONFDocumentNode& node)
+std::vector<ParamValue> toPVS(const DOTCONFDocumentNode& node)
 {
 {
-    std::vector<PARAM_VALUE> pvs;
+    std::vector<ParamValue> pvs;
 
     const DOTCONFDocumentNode* child = node.getChildNode();
     while (child != NULL)
 
     const DOTCONFDocumentNode* child = node.getChildNode();
     while (child != NULL)
@@ -59,9 +63,9 @@ std::vector<PARAM_VALUE> toPVS(const DOTCONFDocumentNode& node)
             continue;
 
         if (child->getChildNode() == NULL)
             continue;
 
         if (child->getChildNode() == NULL)
-            pvs.push_back(PARAM_VALUE(child->getName(), toValues(*child)));
+            pvs.push_back(ParamValue(child->getName(), toValues(*child)));
         else
         else
-            pvs.push_back(PARAM_VALUE(child->getName(), toValues(*child), toPVS(*child)));
+            pvs.push_back(ParamValue(child->getName(), toValues(*child), toPVS(*child)));
 
         child = child->getNextNode();
         }
 
         child = child->getNextNode();
         }
@@ -76,21 +80,27 @@ unsigned toPeriod(const char* value)
 
     std::string period(value);
     if (period == "1")
 
     std::string period(value);
     if (period == "1")
-        return dsPeriod_1;
+        return STG::dsPeriod_1;
     else if (period == "1/2")
     else if (period == "1/2")
-        return dsPeriod_1_2;
+        return STG::dsPeriod_1_2;
     else if (period == "1/4")
     else if (period == "1/4")
-        return dsPeriod_1_4;
+        return STG::dsPeriod_1_4;
     else if (period == "1/6")
     else if (period == "1/6")
-        return dsPeriod_1_6;
+        return STG::dsPeriod_1_6;
 
     throw Error("Invalid detail stat period value: '" + period + "'. Should be one of '1', '1/2', '1/4' or '1/6'.");
 }
 
 
     throw Error("Invalid detail stat period value: '" + period + "'. Should be one of '1', '1/2', '1/4' or '1/6'.");
 }
 
+void errorCallback(void* /*data*/, const char* buf)
+{
+    printfd(__FILE__, "SettingsImpl::errorCallback() - %s\n", buf);
+    STG::Logger::get()("%s", buf);
+}
+
 }
 
 //-----------------------------------------------------------------------------
 }
 
 //-----------------------------------------------------------------------------
-SETTINGS_IMPL::SETTINGS_IMPL(const std::string & cd)
+SettingsImpl::SettingsImpl(const std::string & cd)
     : modulesPath("/usr/lib/stg"),
       dirName(DIR_NUM),
       confDir(cd.empty() ? "/etc/stargazer" : cd),
     : modulesPath("/usr/lib/stg"),
       dirName(DIR_NUM),
       confDir(cd.empty() ? "/etc/stargazer" : cd),
@@ -110,128 +120,18 @@ SETTINGS_IMPL::SETTINGS_IMPL(const std::string & cd)
       spreadFee(false),
       freeMbAllowInet(false),
       dayFeeIsLastDay(false),
       spreadFee(false),
       freeMbAllowInet(false),
       dayFeeIsLastDay(false),
+      stopOnError(true),
       writeFreeMbTraffCost(false),
       showFeeInCash(true),
       messageTimeout(0),
       feeChargeType(0),
       reconnectOnTariffChange(false),
       writeFreeMbTraffCost(false),
       showFeeInCash(true),
       messageTimeout(0),
       feeChargeType(0),
       reconnectOnTariffChange(false),
-      logger(GetStgLogger())
-{
-}
-//-----------------------------------------------------------------------------
-SETTINGS_IMPL::SETTINGS_IMPL(const SETTINGS_IMPL & rval)
-    : SETTINGS(),
-      strError(),
-      modulesPath(rval.modulesPath),
-      dirName(rval.dirName),
-      confDir(rval.confDir),
-      scriptsDir(rval.scriptsDir),
-      rules(rval.rules),
-      logFile(rval.logFile),
-      pidFile(rval.pidFile),
-      monitorDir(rval.monitorDir),
-      monitoring(rval.monitoring),
-      detailStatWritePeriod(rval.detailStatWritePeriod),
-      statWritePeriod(rval.statWritePeriod),
-      stgExecMsgKey(rval.stgExecMsgKey),
-      executersNum(rval.executersNum),
-      fullFee(rval.fullFee),
-      dayFee(rval.dayFee),
-      dayResetTraff(rval.dayResetTraff),
-      spreadFee(rval.spreadFee),
-      freeMbAllowInet(rval.freeMbAllowInet),
-      dayFeeIsLastDay(rval.dayFeeIsLastDay),
-      writeFreeMbTraffCost(rval.writeFreeMbTraffCost),
-      showFeeInCash(rval.showFeeInCash),
-      messageTimeout(rval.messageTimeout),
-      feeChargeType(rval.feeChargeType),
-      reconnectOnTariffChange(rval.reconnectOnTariffChange),
-      modulesSettings(rval.modulesSettings),
-      storeModuleSettings(rval.storeModuleSettings),
-      logger(GetStgLogger())
+      disableSessionLog(false)
 {
 {
+    filterParamsLog.push_back("*");
 }
 //-----------------------------------------------------------------------------
 }
 //-----------------------------------------------------------------------------
-SETTINGS_IMPL & SETTINGS_IMPL::operator=(const SETTINGS_IMPL & rhs)
-{
-    modulesPath = rhs.modulesPath;
-    dirName = rhs.dirName;
-    confDir = rhs.confDir;
-    scriptsDir = rhs.scriptsDir;
-    rules = rhs.rules;
-    logFile = rhs.logFile;
-    pidFile = rhs.pidFile;
-    monitorDir = rhs.monitorDir;
-    scriptParams = rhs.scriptParams;
-    monitoring = rhs.monitoring;
-    detailStatWritePeriod = rhs.detailStatWritePeriod;
-    statWritePeriod = rhs.statWritePeriod;
-    stgExecMsgKey = rhs.stgExecMsgKey;
-    executersNum = rhs.executersNum;
-    fullFee = rhs.fullFee;
-    dayFee = rhs.dayFee;
-    dayResetTraff = rhs.dayResetTraff;
-    spreadFee = rhs.spreadFee;
-    freeMbAllowInet = rhs.freeMbAllowInet;
-    dayFeeIsLastDay = rhs.dayFeeIsLastDay;
-    writeFreeMbTraffCost = rhs.writeFreeMbTraffCost;
-    showFeeInCash = rhs.showFeeInCash;
-    messageTimeout = rhs.messageTimeout;
-    feeChargeType = rhs.feeChargeType;
-    reconnectOnTariffChange = rhs.reconnectOnTariffChange;
-
-    modulesSettings = rhs.modulesSettings;
-    storeModuleSettings = rhs.storeModuleSettings;
-    return *this;
-}
-//-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ParseModuleSettings(const DOTCONFDocumentNode * node, std::vector<PARAM_VALUE> * params)
-{
-const DOTCONFDocumentNode * childNode;
-PARAM_VALUE pv;
-const char * value;
-
-pv.param = node->getName();
-
-if (node->getValue(1))
-    {
-    strError = "Unexpected value \'" + std::string(node->getValue(1)) + "\'.";
-    return -1;
-    }
-
-value = node->getValue(0);
-
-if (!value)
-    {
-    strError = "Module name expected.";
-    return -1;
-    }
-
-childNode = node->getChildNode();
-while (childNode)
-    {
-    pv.param = childNode->getName();
-    int i = 0;
-    while ((value = childNode->getValue(i++)) != NULL)
-        {
-        pv.value.push_back(value);
-        }
-    params->push_back(pv);
-    pv.value.clear();
-    childNode = childNode->getNextNode();
-    }
-
-return 0;
-}
-//-----------------------------------------------------------------------------
-void SETTINGS_IMPL::ErrorCallback(void * data, const char * buf)
-{
-    printfd(__FILE__, "SETTINGS_IMPL::ErrorCallback() - %s\n", buf);
-    SETTINGS_IMPL * settings = static_cast<SETTINGS_IMPL *>(data);
-    settings->logger("%s", buf);
-}
-//-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ReadSettings()
+int SettingsImpl::ReadSettings()
 {
 const char * requiredOptions[] = {
     "ModulesPath",
 {
 const char * requiredOptions[] = {
     "ModulesPath",
@@ -252,7 +152,7 @@ int storeModulesCount = 0;
 modulesSettings.clear();
 
 DOTCONFDocument conf(DOTCONFDocument::CASEINSENSITIVE);
 modulesSettings.clear();
 
 DOTCONFDocument conf(DOTCONFDocument::CASEINSENSITIVE);
-conf.setErrorCallback(SETTINGS_IMPL::ErrorCallback, this);
+conf.setErrorCallback(errorCallback, nullptr);
 conf.setRequiredOptionNames(requiredOptions);
 std::string confFile = confDir + "/stargazer.conf";
 
 conf.setRequiredOptionNames(requiredOptions);
 std::string confFile = confDir + "/stargazer.conf";
 
@@ -262,7 +162,7 @@ if(conf.setContent(confFile.c_str()) != 0)
     return -1;
     }
 
     return -1;
     }
 
-const DOTCONFDocumentNode * node = conf.getFirstNode();
+auto node = conf.getFirstNode();
 
 while (node)
     {
 
 while (node)
     {
@@ -385,6 +285,15 @@ while (node)
             }
         }
 
             }
         }
 
+    if (strcasecmp(node->getName(), "StopOnError") == 0)
+        {
+        if (ParseYesNo(node->getValue(0), &stopOnError) != 0)
+            {
+            strError = "Incorrect StopOnError value: \'" + std::string(node->getValue(0)) + "\'";
+            return -1;
+            }
+        }
+
     if (strcasecmp(node->getName(), "WriteFreeMbTraffCost") == 0)
         {
         if (ParseYesNo(node->getValue(0), &writeFreeMbTraffCost) != 0)
     if (strcasecmp(node->getName(), "WriteFreeMbTraffCost") == 0)
         {
         if (ParseYesNo(node->getValue(0), &writeFreeMbTraffCost) != 0)
@@ -442,6 +351,22 @@ while (node)
             }
         }
 
             }
         }
 
+    if (strcasecmp(node->getName(), "DisableSessionLog") == 0)
+        {
+        if (ParseYesNo(node->getValue(0), &disableSessionLog) != 0)
+            {
+            strError = "Incorrect DisableSessionLog value: \'" + std::string(node->getValue(0)) + "\'";
+            return -1;
+            }
+        }
+
+    if (strcasecmp(node->getName(), "FilterParamsLog") == 0)
+        {
+        filterParamsLog.clear();
+        for (int i = 0; node->getValue(i) != NULL; ++i)
+            filterParamsLog.push_back(node->getValue(i));
+        }
+
     if (strcasecmp(node->getName(), "DirNames") == 0)
         {
         const DOTCONFDocumentNode * child = node->getChildNode();
     if (strcasecmp(node->getName(), "DirNames") == 0)
         {
         const DOTCONFDocumentNode * child = node->getChildNode();
@@ -508,7 +433,7 @@ while (node)
                 return -1;
                 }
 
                 return -1;
                 }
 
-            modulesSettings.push_back(MODULE_SETTINGS(child->getValue(0), toPVS(*child)));
+            modulesSettings.push_back(ModuleSettings(child->getValue(0), toPVS(*child)));
 
             child = child->getNextNode();
             }
 
             child = child->getNextNode();
             }
@@ -517,9 +442,7 @@ while (node)
     if (strcasecmp(node->getName(), "ScriptParams") == 0)
         {
         for (int i = 0; node->getValue(i) != NULL; ++i)
     if (strcasecmp(node->getName(), "ScriptParams") == 0)
         {
         for (int i = 0; node->getValue(i) != NULL; ++i)
-            {
             scriptParams.push_back(node->getValue(i));
             scriptParams.push_back(node->getValue(i));
-            }
         }
     node = node->getNextNode();
     }
         }
     node = node->getNextNode();
     }