#include "stg/logger.h"
#include "stg/dotconfpp.h"
#include "stg/common.h"
+#include "stg/const.h"
#include <stdexcept>
#include <cstring>
#include <cerrno>
+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<std::string> toValues(const DOTCONFDocumentNode& node)
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)
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();
}
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),
spreadFee(false),
freeMbAllowInet(false),
dayFeeIsLastDay(false),
+ stopOnError(true),
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())
-{
-}
-//-----------------------------------------------------------------------------
-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;
-}
-//-----------------------------------------------------------------------------
-void SETTINGS_IMPL::ErrorCallback(void * data, const char * buf)
+ disableSessionLog(false)
{
- printfd(__FILE__, "SETTINGS_IMPL::ErrorCallback() - %s\n", buf);
- SETTINGS_IMPL * settings = static_cast<SETTINGS_IMPL *>(data);
- settings->logger("%s", buf);
+ filterParamsLog.push_back("*");
}
//-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ReadSettings()
+int SettingsImpl::ReadSettings()
{
const char * requiredOptions[] = {
"ModulesPath",
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";
return -1;
}
-const DOTCONFDocumentNode * node = conf.getFirstNode();
+auto node = conf.getFirstNode();
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(), "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();
return -1;
}
- modulesSettings.push_back(MODULE_SETTINGS(child->getValue(0), toPVS(*child)));
+ modulesSettings.push_back(ModuleSettings(child->getValue(0), toPVS(*child)));
child = child->getNextNode();
}
if (strcasecmp(node->getName(), "ScriptParams") == 0)
{
for (int i = 0; node->getValue(i) != NULL; ++i)
- {
scriptParams.push_back(node->getValue(i));
- }
}
node = node->getNextNode();
}