X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/5171f194c7366bc64d7b4f6a7e2a9ca098bdafaf..ebd170a764ab9660adee464588cda1801c7986b4:/projects/stargazer/settings_impl.cpp diff --git a/projects/stargazer/settings_impl.cpp b/projects/stargazer/settings_impl.cpp index 67b4272f..e85a0886 100644 --- a/projects/stargazer/settings_impl.cpp +++ b/projects/stargazer/settings_impl.cpp @@ -23,17 +23,21 @@ #include "stg/logger.h" #include "stg/dotconfpp.h" #include "stg/common.h" +#include "stg/const.h" #include #include #include +using STG::SettingsImpl; +using STG::ParamValue; + 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 toValues(const DOTCONFDocumentNode& node) @@ -48,9 +52,9 @@ std::vector toValues(const DOTCONFDocumentNode& node) return values; } -std::vector toPVS(const DOTCONFDocumentNode& node) +std::vector toPVS(const DOTCONFDocumentNode& node) { - std::vector pvs; + std::vector pvs; const DOTCONFDocumentNode* child = node.getChildNode(); while (child != NULL) @@ -59,9 +63,9 @@ std::vector toPVS(const DOTCONFDocumentNode& node) continue; if (child->getChildNode() == NULL) - pvs.push_back(PARAM_VALUE(child->getName(), toValues(*child))); + pvs.push_back(ParamValue(child->getName(), toValues(*child))); 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(); } @@ -76,21 +80,27 @@ unsigned toPeriod(const char* value) std::string period(value); if (period == "1") - return dsPeriod_1; + return STG::dsPeriod_1; else if (period == "1/2") - return dsPeriod_1_2; + return STG::dsPeriod_1_2; else if (period == "1/4") - return dsPeriod_1_4; + return STG::dsPeriod_1_4; 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'."); } +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), @@ -110,23 +120,18 @@ SETTINGS_IMPL::SETTINGS_IMPL(const std::string & cd) spreadFee(false), freeMbAllowInet(false), dayFeeIsLastDay(false), + stopOnError(true), writeFreeMbTraffCost(false), showFeeInCash(true), messageTimeout(0), feeChargeType(0), reconnectOnTariffChange(false), - logger(GetStgLogger()) -{ -} -//----------------------------------------------------------------------------- -void SETTINGS_IMPL::ErrorCallback(void * data, const char * buf) + disableSessionLog(false) { - printfd(__FILE__, "SETTINGS_IMPL::ErrorCallback() - %s\n", buf); - SETTINGS_IMPL * settings = static_cast(data); - settings->logger("%s", buf); + filterParamsLog.push_back("*"); } //----------------------------------------------------------------------------- -int SETTINGS_IMPL::ReadSettings() +int SettingsImpl::ReadSettings() { const char * requiredOptions[] = { "ModulesPath", @@ -147,7 +152,7 @@ int storeModulesCount = 0; 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"; @@ -157,7 +162,7 @@ if(conf.setContent(confFile.c_str()) != 0) return -1; } -const DOTCONFDocumentNode * node = conf.getFirstNode(); +auto node = conf.getFirstNode(); while (node) { @@ -280,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) @@ -337,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(); @@ -403,7 +433,7 @@ while (node) return -1; } - modulesSettings.push_back(MODULE_SETTINGS(child->getValue(0), toPVS(*child))); + modulesSettings.push_back(ModuleSettings(child->getValue(0), toPVS(*child))); child = child->getNextNode(); } @@ -412,9 +442,7 @@ while (node) if (strcasecmp(node->getName(), "ScriptParams") == 0) { for (int i = 0; node->getValue(i) != NULL; ++i) - { scriptParams.push_back(node->getValue(i)); - } } node = node->getNextNode(); }