X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/818d51d18f8960f2e63ffcdd91481fca0118d17c..bfb8d7685e998fbcafcb5315b3c50a77760b7e48:/projects/stargazer/main.cpp?ds=inline diff --git a/projects/stargazer/main.cpp b/projects/stargazer/main.cpp index 7a225ce5..5b4a06fc 100644 --- a/projects/stargazer/main.cpp +++ b/projects/stargazer/main.cpp @@ -24,38 +24,40 @@ $Author: faust $ */ -#include -#include -#include -#include -#include #include #include #include -#include +#include #include -#include -#include -#include +#include // S_IRUSR +#include // create +#include +#include +#include +#include // srandom, exit #include #include #include #include -#include "settings.h" -#include "user.h" -#include "users.h" -#include "admins.h" -#include "common.h" -#include "traffcounter.h" -#include "base_plugin.h" -#include "stg_logger.h" +#include "stg/user.h" +#include "stg/common.h" +#include "stg/plugin.h" +#include "stg/logger.h" +#include "stg/scriptexecuter.h" +#include "stg/conffiles.h" +#include "stg/version.h" +#include "stg/pinger.h" #include "stg_timer.h" +#include "settings_impl.h" +#include "users_impl.h" +#include "admins_impl.h" +#include "tariffs_impl.h" +#include "services_impl.h" +#include "corps_impl.h" +#include "traffcounter_impl.h" #include "plugin_runner.h" -#include "script_executer.h" -#include "conffiles.h" -#include "version.h" #include "store_loader.h" #include "pidfile.h" #include "eventloop.h" @@ -76,7 +78,6 @@ static bool childExited = false; set executersPid; static pid_t stgChildPid; -#include "pinger.h" //----------------------------------------------------------------------------- bool StartModCmp(const PLUGIN_RUNNER & lhs, const PLUGIN_RUNNER & rhs) @@ -92,8 +93,8 @@ return lhs.GetStopPosition() > rhs.GetStopPosition(); class STG_STOPPER { public: - STG_STOPPER() { nonstop = true; } - bool GetStatus() const { return nonstop; }; + STG_STOPPER() : nonstop(true) {} + bool GetStatus() const { return nonstop; } #ifdef NO_DAEMON void Stop(const char * __file__, int __line__) #else @@ -307,7 +308,7 @@ sigaction(SIGSEGV, &newsa, &oldsa);*/ return; } //----------------------------------------------------------------------------- -int StartScriptExecuter(char * procName, int msgKey, int * msgID, SETTINGS * settings) +int StartScriptExecuter(char * procName, int msgKey, int * msgID, SETTINGS_IMPL * settings) { STG_LOGGER & WriteServLog = GetStgLogger(); @@ -315,7 +316,6 @@ if (*msgID == -11) // If msgID == -11 - first call. Create queue { for (int i = 0; i < 2; i++) { - //WriteServLog("Creating queue with key=%d ...", msgKey); *msgID = msgget(msgKey, IPC_CREAT | IPC_EXCL | 0600); if (*msgID == -1) @@ -329,7 +329,6 @@ if (*msgID == -11) // If msgID == -11 - first call. Create queue else { msgctl(*msgID, IPC_RMID, NULL); - //printfd(__FILE__, "Queue removed!"); } } else @@ -344,22 +343,18 @@ pid_t executerPid = fork(); switch (executerPid) { - case -1: // ìÁÖÁ + case -1: WriteServLog("Fork error!"); return -1; - case 0: // ðÏÔÏÍÏË - //close(0); - //close(1); - //close(2); - //setsid(); + case 0: delete settings; - Executer(msgKey, *msgID, executerPid, procName); + Executer(*msgID, executerPid, procName); return 1; - default: // ïÓÎÏ×ÎÏÊ ÐÒÏÃÅÓÓ + default: if (executersPid.empty()) { - Executer(msgKey, *msgID, executerPid, NULL); + Executer(*msgID, executerPid, NULL); } executersPid.insert(executerPid); } @@ -379,23 +374,22 @@ unlink(startFile.c_str()); switch (stgChildPid) { - case -1: // ìÁÖÁ + case -1: return -1; break; - case 0: // ðÏÔÏÍÏË - //close(0); + case 0: close(1); close(2); setsid(); break; - default: // ïÓÎÏ×ÎÏÊ ÐÒÏÃÅÓÓ + default: + struct timespec ts = {0, 200000000}; for (int i = 0; i < 120 * 5; i++) { if (access(startFile.c_str(), F_OK) == 0) { - //printf("Fork successfull. Exit.\n"); unlink(startFile.c_str()); exit(0); } @@ -405,7 +399,7 @@ switch (stgChildPid) unlink(startFile.c_str()); exit(1); } - usleep(200000); + nanosleep(&ts, NULL); } unlink(startFile.c_str()); exit(1); @@ -448,12 +442,14 @@ int main(int argc, char * argv[]) - Fork and exit * */ -SETTINGS * settings = NULL; -BASE_STORE * dataStore = NULL; -TARIFFS * tariffs = NULL; -ADMINS * admins = NULL; -USERS * users = NULL; -TRAFFCOUNTER * traffCnt = NULL; +SETTINGS_IMPL * settings = NULL; +STORE * dataStore = NULL; +TARIFFS_IMPL * tariffs = NULL; +ADMINS_IMPL * admins = NULL; +USERS_IMPL * users = NULL; +TRAFFCOUNTER_IMPL * traffCnt = NULL; +SERVICES_IMPL * services = NULL; +CORPORATIONS_IMPL * corps = NULL; int msgID = -11; { @@ -473,13 +469,12 @@ if (getuid()) } if (argc == 2) - settings = new SETTINGS(argv[1]); + settings = new SETTINGS_IMPL(argv[1]); else - settings = new SETTINGS(); + settings = new SETTINGS_IMPL(); if (settings->ReadSettings()) { - //printfd(__FILE__, "ReadSettings error.\n"); STG_LOGGER & WriteServLog = GetStgLogger(); if (settings->GetLogFileName() != "") @@ -493,7 +488,6 @@ if (settings->ReadSettings()) string startFile(settings->GetConfDir() + START_FILE); #endif -//SetSignalHandlers(); if (ForkAndWait(settings->GetConfDir()) < 0) { STG_LOGGER & WriteServLog = GetStgLogger(); @@ -505,14 +499,13 @@ STG_LOGGER & WriteServLog = GetStgLogger(); WriteServLog.SetLogFileName(settings->GetLogFileName()); WriteServLog("Stg v. %s", SERVER_VERSION); -for (int i = 0; i < settings->GetExecutersNum(); i++) +for (size_t i = 0; i < settings->GetExecutersNum(); i++) { int ret = StartScriptExecuter(argv[0], settings->GetExecMsgKey(), &msgID, settings); if (ret < 0) { STG_LOGGER & WriteServLog = GetStgLogger(); WriteServLog("Start Script Executer error!"); - //goto exitLbl; return 1; } if (ret == 1) @@ -550,16 +543,17 @@ if (loop.Start()) dataStore = storeLoader.GetStore(); WriteServLog("Storage plugin: %s. Loading successfull.", dataStore->GetVersion().c_str()); -tariffs = new TARIFFS(dataStore); -admins = new ADMINS(dataStore); -users = new USERS(settings, dataStore, tariffs, admins->GetSysAdmin()); -traffCnt = new TRAFFCOUNTER(users, tariffs, settings->GetRulesFileName()); +tariffs = new TARIFFS_IMPL(dataStore); +admins = new ADMINS_IMPL(dataStore); +users = new USERS_IMPL(settings, dataStore, tariffs, admins->GetSysAdmin()); +traffCnt = new TRAFFCOUNTER_IMPL(users, settings->GetRulesFileName()); +services = new SERVICES_IMPL(dataStore); +corps = new CORPORATIONS_IMPL(dataStore); traffCnt->SetMonitorDir(settings->GetMonitorDir()); -//tariffs->SetUsers(users); modSettings = settings->GetModulesSettings(); -for (unsigned i = 0; i < modSettings.size(); i++) +for (size_t i = 0; i < modSettings.size(); i++) { string modulePath = settings->GetModulesPath(); modulePath += "/mod_"; @@ -572,6 +566,8 @@ for (unsigned i = 0; i < modSettings.size(); i++) admins, tariffs, users, + services, + corps, traffCnt, dataStore, settings) @@ -618,8 +614,7 @@ while (modIter != modules.end()) //printfd(__FILE__, "Error: %s\n", capRunner.GetStrError().c_str()); goto exitLbl; } - WriteServLog("Module: \'%s\'. Start successfull. %d", modIter->GetPlugin()->GetVersion().c_str(), - modIter->GetPlugin()->GetStartPosition()); + WriteServLog("Module: '%s'. Start successfull.", modIter->GetPlugin()->GetVersion().c_str()); ++modIter; } SetSignalHandlers(); @@ -634,11 +629,11 @@ srandom(stgTime); * * (c) man 2 nice */ -errno = 0; +/*errno = 0; if (nice(-19) && errno) { printfd(__FILE__, "nice failed: '%s'\n", strerror(errno)); WriteServLog("nice failed: '%s'", strerror(errno)); -} +}*/ WriteServLog("Stg started successfully."); WriteServLog("+++++++++++++++++++++++++++++++++++++++++++++"); @@ -647,8 +642,6 @@ WriteServLog("+++++++++++++++++++++++++++++++++++++++++++++"); creat(startFile.c_str(), S_IRUSR); #endif -//*a_kill_it = 0; - while (nonstop.GetStatus()) { if (needRulesReloading) @@ -702,7 +695,7 @@ if (loop.Stop()) exitLblNotStarted: -/*modIter = modules.begin(); +modIter = modules.begin(); while (modIter != modules.end()) { std::string name = modIter->GetFileName(); @@ -715,7 +708,7 @@ while (modIter != modules.end()) printfd(__FILE__, "Failed to unload module '%s'\n", name.c_str()); } ++modIter; - }*/ + } if (traffCnt) { @@ -736,32 +729,22 @@ if (res) else WriteServLog("Queue removed successfully."); -/*struct sigaction newsa, oldsa; -sigset_t sigmask; -sigemptyset(&sigmask); -sigaddset(&sigmask, SIGCHLD); -newsa.sa_handler = SIG_IGN; -newsa.sa_mask = sigmask; -newsa.sa_flags = 0; -sigaction(SIGCHLD, &newsa, &oldsa);*/ - KillExecuters(); StopStgTimer(); WriteServLog("StgTimer: Stop successfull."); -WriteServLog("Stg stopped successfully."); -sleep(1); -WriteServLog("---------------------------------------------"); - +delete corps; +delete services; delete traffCnt; delete users; delete admins; delete tariffs; delete settings; +WriteServLog("Stg stopped successfully."); +WriteServLog("---------------------------------------------"); + return 0; } //----------------------------------------------------------------------------- - -