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.4 KiB

12 months ago
12 months ago
8 months ago
12 months ago
8 months ago
8 months ago
8 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
8 months ago
12 months ago
12 months ago
12 months ago
  1. #include <signal.h>
  2. #include <sqlite3.h>
  3. #include "appbase/appbase.hpp"
  4. #include "appconfig/appconfig.hpp"
  5. #include "service/app_core.hpp"
  6. //
  7. #include "appconfig/appconfig.hpp"
  8. #include "appconfig/basic/zappversion.hpp"
  9. using namespace iflytop;
  10. using namespace core;
  11. using namespace std;
  12. namespace iflytop {
  13. using namespace iflytop;
  14. using namespace core;
  15. using namespace std;
  16. class Main {
  17. THISCLASS(Main);
  18. private:
  19. unique_ptr<Thread> thread;
  20. private:
  21. int main(int argc, char *argv[]);
  22. public:
  23. static Main *g_main;
  24. static void _onsignal(int signo) { g_main->onsignal(signo); }
  25. void onsignal(int signo);
  26. public:
  27. Main(/* args */) {}
  28. ~Main() {}
  29. void run(int argc, char *argv[]);
  30. void dosystem(string order, bool dump) {
  31. if (dump) logger->info("{}", order);
  32. system(order.c_str());
  33. }
  34. };
  35. }; // namespace iflytop
  36. /*******************************************************************************
  37. * MAIN => MAIN *
  38. *******************************************************************************/
  39. Main *Main::g_main;
  40. extern "C" {
  41. json build_default_logger_cfg() {
  42. json config = json::array();
  43. json infologger;
  44. infologger["name"] = "infologger";
  45. infologger["type"] = "rotating_file_sink_mt";
  46. infologger["filename"] = "logs/infolog.log";
  47. infologger["max_file_size"] = 10485760; // 10MB
  48. infologger["max_files"] = 30;
  49. infologger["rotate_on_open"] = false;
  50. infologger["level"] = 2; // info level
  51. config.push_back(infologger);
  52. json debuglogger;
  53. debuglogger["name"] = "debuglogger";
  54. debuglogger["type"] = "rotating_file_sink_mt";
  55. debuglogger["filename"] = "logs/debuglog.log";
  56. debuglogger["max_file_size"] = 10485760; // 10MB
  57. debuglogger["max_files"] = 30;
  58. debuglogger["rotate_on_open"] = false;
  59. debuglogger["level"] = 1; // info level
  60. config.push_back(debuglogger);
  61. json terminal;
  62. terminal["name"] = "terminal";
  63. terminal["type"] = "stdout_color_sink_mt";
  64. terminal["level"] = 2;
  65. config.push_back(terminal);
  66. json h2o2SensorDataMgr;
  67. h2o2SensorDataMgr["name"] = "H2O2SensorDataMgr";
  68. h2o2SensorDataMgr["level"] = 1; // info level
  69. config.push_back(h2o2SensorDataMgr);
  70. json zsCanProtocolCom;
  71. zsCanProtocolCom["name"] = "ZSCanProtocolCom";
  72. zsCanProtocolCom["level"] = 1; // info level
  73. config.push_back(zsCanProtocolCom);
  74. json frontMsgProcesser;
  75. frontMsgProcesser["name"] = "FrontMsgProcesser";
  76. frontMsgProcesser["level"] = 1; // info level
  77. config.push_back(frontMsgProcesser);
  78. json iflytopFrontEndService;
  79. iflytopFrontEndService["name"] = "IflytopFrontEndService";
  80. iflytopFrontEndService["level"] = 1; // info level
  81. config.push_back(iflytopFrontEndService);
  82. json root;
  83. root["name"] = "root";
  84. root["type"] = "logger";
  85. root["level"] = 2; // info level
  86. root["sinks"] = json::array();
  87. root["sinks"].push_back("terminal");
  88. root["sinks"].push_back("infologger");
  89. root["sinks"].push_back("debuglogger");
  90. config.push_back(root);
  91. return config;
  92. }
  93. int main(int argc, char *argv[]) {
  94. spdlog::flush_on(spdlog::level::debug);
  95. string config = build_default_logger_cfg().dump(2);
  96. SpdLoggerFactory::Instance().initialize(config);
  97. Main main;
  98. Main::g_main = &main;
  99. main.run(argc, argv);
  100. }
  101. }
  102. namespace iflytop {}
  103. void Main::onsignal(int signo) { exit(0); }
  104. void Main::run(int argc, char *argv[]) {
  105. // ::signal(SIGINT, Main::_onsignal);
  106. thread.reset(new Thread("main", [&]() { exit(main(argc, argv)); }));
  107. while (true) sleep(1000);
  108. }
  109. int Main::main(int argc, char *argv[]) {
  110. /**
  111. * @brief
  112. */
  113. logger->info("system setup start.");
  114. logger->info("#");
  115. logger->info("# company:{}", "ifytop");
  116. logger->info("# version:{}", VERSION);
  117. logger->info("# project:{}", PROJECT_NAME);
  118. logger->info("#");
  119. logger->info("build {}.....", "Config");
  120. // logger->info("VolumeConvertor::largeSpaceParam:{}", VolumeConvertor(VolumeConvertor::largeSpaceParam).getFullVolumeG());
  121. // logger->info("VolumeConvertor::smallSpaceParam:{}", VolumeConvertor(VolumeConvertor::smallSpaceParam).getFullVolumeG());
  122. // logger->info("VolumeConvertor::pipeParam:{}", VolumeConvertor(VolumeConvertor::pipeParam).getFullVolumeG());
  123. // 构造MainControlService
  124. BUILD_AND_REG_SERRVICE(AppCore);
  125. logger->info("system setup end.");
  126. while (true) sleep(1000);
  127. }