You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

154 lines
4.3 KiB

#include <signal.h>
#include <sqlite3.h>
#include "appbase/appbase.hpp"
#include "appconfig/appconfig.hpp"
#include "service/app_core.hpp"
//
#include "appconfig/appconfig.hpp"
#include "appconfig/basic/zappversion.hpp"
using namespace iflytop;
using namespace core;
using namespace std;
namespace iflytop {
using namespace iflytop;
using namespace core;
using namespace std;
class Main {
THISCLASS(Main);
private:
unique_ptr<Thread> thread;
private:
int main(int argc, char *argv[]);
public:
static Main *g_main;
static void _onsignal(int signo) { g_main->onsignal(signo); }
void onsignal(int signo);
public:
Main(/* args */) {}
~Main() {}
void run(int argc, char *argv[]);
void dosystem(string order, bool dump) {
if (dump) logger->info("{}", order);
system(order.c_str());
}
};
}; // namespace iflytop
/*******************************************************************************
* MAIN => MAIN *
*******************************************************************************/
Main *Main::g_main;
extern "C" {
json build_default_logger_cfg() {
json config = json::array();
json infologger;
infologger["name"] = "infologger";
infologger["type"] = "rotating_file_sink_mt";
infologger["filename"] = "logs/infolog.log";
infologger["max_file_size"] = 10485760; // 10MB
infologger["max_files"] = 30;
infologger["rotate_on_open"] = false;
infologger["level"] = 2; // info level
config.push_back(infologger);
json debuglogger;
debuglogger["name"] = "debuglogger";
debuglogger["type"] = "rotating_file_sink_mt";
debuglogger["filename"] = "logs/debuglog.log";
debuglogger["max_file_size"] = 10485760; // 10MB
debuglogger["max_files"] = 30;
debuglogger["rotate_on_open"] = false;
debuglogger["level"] = 1; // info level
config.push_back(debuglogger);
json terminal;
terminal["name"] = "terminal";
terminal["type"] = "stdout_color_sink_mt";
config.push_back(terminal);
json h2o2SensorDataMgr;
h2o2SensorDataMgr["name"] = "H2O2SensorDataMgr";
h2o2SensorDataMgr["level"] = 1; // info level
config.push_back(h2o2SensorDataMgr);
json zsCanProtocolCom;
zsCanProtocolCom["name"] = "ZSCanProtocolCom";
zsCanProtocolCom["level"] = 1; // info level
config.push_back(zsCanProtocolCom);
json frontMsgProcesser;
frontMsgProcesser["name"] = "FrontMsgProcesser";
frontMsgProcesser["level"] = 1; // info level
config.push_back(frontMsgProcesser);
json iflytopFrontEndService;
iflytopFrontEndService["name"] = "IflytopFrontEndService";
iflytopFrontEndService["level"] = 1; // info level
config.push_back(iflytopFrontEndService);
json root;
root["name"] = "root";
root["type"] = "logger";
root["level"] = 2; // info level
root["sinks"] = json::array();
root["sinks"].push_back("terminal");
root["sinks"].push_back("infologger");
root["sinks"].push_back("debuglogger");
config.push_back(root);
return config;
}
int main(int argc, char *argv[]) {
spdlog::flush_on(spdlog::level::debug);
string config = build_default_logger_cfg().dump(2);
SpdLoggerFactory::Instance().initialize(config);
Main main;
Main::g_main = &main;
main.run(argc, argv);
}
}
namespace iflytop {}
void Main::onsignal(int signo) { exit(0); }
void Main::run(int argc, char *argv[]) {
// ::signal(SIGINT, Main::_onsignal);
thread.reset(new Thread("main", [&]() { exit(main(argc, argv)); }));
while (true) sleep(1000);
}
int Main::main(int argc, char *argv[]) {
/**
* @brief 系统初始化
*/
logger->info("system setup start.");
logger->info("#");
logger->info("# company:{}", "ifytop");
logger->info("# version:{}", VERSION);
logger->info("# project:{}", PROJECT_NAME);
logger->info("#");
logger->info("build {}.....", "Config");
// logger->info("VolumeConvertor::largeSpaceParam:{}", VolumeConvertor(VolumeConvertor::largeSpaceParam).getFullVolumeG());
// logger->info("VolumeConvertor::smallSpaceParam:{}", VolumeConvertor(VolumeConvertor::smallSpaceParam).getFullVolumeG());
// logger->info("VolumeConvertor::pipeParam:{}", VolumeConvertor(VolumeConvertor::pipeParam).getFullVolumeG());
// 构造MainControlService
BUILD_AND_REG_SERRVICE(AppCore);
logger->info("system setup end.");
while (true) sleep(1000);
}