LAS.py 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. #!/usr/bin/env python3
  2. from threading import Thread
  3. import configparser
  4. import os
  5. import time
  6. import traceback
  7. import sys
  8. import json
  9. import common.sys_comm as sys_comm
  10. from common.sys_comm import LOGDBG, LOGINFO, LOGWARN, LOGERR
  11. from common.sys_comm import get_utc_time_ms
  12. from common.sys_comm import g_sys_conf, g_sys_conf_mtx, g_log_conf, g_log_conf_mtx
  13. from mqtt import mqtt_process
  14. from mqtt.mqtt_process import MQTTClientThread, MQTTConsumerThread, mqtt_client, mqtt_consumer
  15. import db.db_process as db_process
  16. from db.db_process import db_req_que
  17. from db.db_process import DBRequest
  18. import db.db_sqls as sqls
  19. import device.dev_mng as g_Dev
  20. from device.dev_mng import (
  21. Device, g_dev_mgr, init_dev_mng
  22. )
  23. import core.alarm_plan_manager as ap_mgr
  24. from core.alarm_plan_manager import (
  25. AlarmPlanManager,
  26. init_alarm_plan_mgr,
  27. start_alarm_plan_mgr,
  28. cb_handle_query_all_alarm_plan_info
  29. )
  30. from core.alarm_plan_dispatcher import (
  31. init_alarm_plan_disp,
  32. start_alarm_plan_dispatcher
  33. )
  34. import core.g_LAS as g_las
  35. # 系统初始化
  36. def sys_init():
  37. try:
  38. # 创建日志目录
  39. if not os.path.exists("./log/"):
  40. os.makedirs("./log/")
  41. print("create log dir succeed !")
  42. LOGDBG(f" ================ system init ...")
  43. print(f" ================ system init ...")
  44. # 读取配置文件
  45. config = configparser.ConfigParser()
  46. with open('./conf.ini', 'r', encoding='utf-8') as f:
  47. config.read_file(f)
  48. if not (config.has_option('conf', 'module_name') and
  49. config.has_option('conf', 'platform') and
  50. config.has_option('conf', 'db_host') and
  51. config.has_option('conf', 'log_lvl') and
  52. config.has_option('conf', 'max_log_files') and
  53. config.has_option('conf', 'max_log_files')):
  54. LOGDBG("sys_init failed, invalid conf.ini param")
  55. return 0
  56. if not (config.has_option('conf', 'db_host')):
  57. LOGDBG("sys_init failed, invalid db param")
  58. return 0
  59. if not (config.has_option('linux', 'host_ip') and
  60. config.has_option('windows', 'host_ip') and
  61. config.has_option('windows', 'server_ip') and
  62. config.has_option('windows', 'ssh_host') and
  63. config.has_option('windows', 'ssh_port')):
  64. LOGDBG("sys_init failed, invalid host_ip param")
  65. return 0
  66. LOGDBG("read conf.ini succeed !")
  67. # 初始化日志配置
  68. with g_log_conf_mtx:
  69. g_log_conf["module_name"] = str(config["conf"]["module_name"])
  70. g_log_conf["log_lvl"] = int(config["conf"]["log_lvl"])
  71. g_log_conf["max_log_size"] = int(config["conf"]["max_log_size"]) * 1024 * 1024
  72. g_log_conf["max_log_files"] = int(config["conf"]["max_log_files"])
  73. LOGDBG("log init succeed")
  74. # 初始化系统配置
  75. with g_sys_conf_mtx:
  76. g_sys_conf["module_name"] = str(config["conf"]["module_name"])
  77. g_sys_conf["platform"] = int(config["conf"]["platform"])
  78. g_sys_conf["db_host"] = str(config["conf"]["db_host"])
  79. g_sys_conf["log_lvl"] = int(config["conf"]["log_lvl"])
  80. g_sys_conf["max_log_size"] = int(config["conf"]["max_log_size"]) * 1024 * 1024
  81. g_sys_conf["max_log_files"] = int(config["conf"]["max_log_files"])
  82. # windows 本地
  83. if g_sys_conf["platform"] == 0:
  84. g_sys_conf["host_ip"] = str(config["windows"]["host_ip"])
  85. g_sys_conf["server_ip"] = str(config["windows"]["server_ip"])
  86. g_sys_conf["ssh_host"] = str(config["windows"]["ssh_host"])
  87. g_sys_conf["ssh_port"] = int(config["windows"]["ssh_port"])
  88. mqtt_process.MQTT_BROKER = g_sys_conf["server_ip"]
  89. # linux 服务器
  90. elif g_sys_conf["platform"] == 1:
  91. g_sys_conf["host_ip"] = str(config["linux"]["host_ip"])
  92. mqtt_process.MQTT_BROKER = g_sys_conf["host_ip"]
  93. g_sys_conf["sp_id"] = int(get_utc_time_ms())
  94. # 报警配置
  95. g_sys_conf["alarm_conf"] = sys_comm.alarm_conf
  96. # 启动成功,打印系统信息
  97. module_name = g_sys_conf["module_name"]
  98. platform = g_sys_conf["platform"]
  99. host_ip = g_sys_conf["host_ip"]
  100. max_log_files = g_sys_conf["max_log_files"]
  101. max_log_size = g_sys_conf["max_log_size"]
  102. log_lvl = g_sys_conf["log_lvl"]
  103. sp_id = g_sys_conf["sp_id"]
  104. LOGINFO(f" ================ system init succeed !")
  105. LOGINFO(f" ================ module : {module_name}")
  106. LOGINFO(f" ================ platform : {platform}")
  107. LOGINFO(f" ================ host_ip : {host_ip}")
  108. LOGINFO(f" ================ max_log_files : {max_log_files}")
  109. LOGINFO(f" ================ max_log_size : {max_log_size}")
  110. LOGINFO(f" ================ log_lvl : {log_lvl}")
  111. LOGINFO(f" ================ sp_id : {sp_id}")
  112. LOGINFO(f" ================ version : v B1.0")
  113. print(f" ================ system init succeed !")
  114. print(f" ================ module : {module_name}")
  115. print(f" ================ platform : {platform}")
  116. print(f" ================ host_ip : {host_ip}")
  117. print(f" ================ max_log_files : {max_log_files}")
  118. print(f" ================ max_log_size : {max_log_size}")
  119. print(f" ================ log_lvl : {log_lvl}")
  120. print(f" ================ sp_id : {sp_id}")
  121. print(f" ================ version : v B1.0")
  122. return 0
  123. except json.JSONDecodeError as e:
  124. tb_info = traceback.extract_tb(e.__traceback__)
  125. for frame in tb_info:
  126. LOGERR(f"[{frame.filename}:{frame.lineno}] @{frame.name}(), error:{e}, {e.doc}")
  127. return -1
  128. except Exception as e:
  129. tb_info = traceback.extract_tb(e.__traceback__)
  130. for frame in tb_info:
  131. LOGERR(f"[{frame.filename}:{frame.lineno}] @{frame.name}(), error: {e}")
  132. return -1
  133. # 轮循函数,定期执行一些任务
  134. def run():
  135. # 轮循处理任务
  136. while True:
  137. time.sleep(1)
  138. # 主线程
  139. def main_process():
  140. if not g_las.g_alarm_plan_mgr:
  141. return -1
  142. # 查询所有设备信息
  143. db_req_que.put(DBRequest(sql=sqls.sql_query_all_dev_info,
  144. callback=g_Dev.g_dev_mgr.cb_handle_query_all_dev_info))
  145. # 查询所有告警计划
  146. db_req_que.put(DBRequest(sql=sqls.sql_query_all_alarm_plan,
  147. callback=cb_handle_query_all_alarm_plan_info))
  148. # 轮循函数
  149. run()
  150. def main():
  151. # 初始化
  152. if (0 != sys_init()):
  153. sys.exit(-1)
  154. # 初始化 dev_mng
  155. init_dev_mng()
  156. g_Dev.g_dev_mgr.start()
  157. # 初始化LAS
  158. init_alarm_plan_mgr()
  159. init_alarm_plan_disp()
  160. start_alarm_plan_dispatcher() # 事件分发器
  161. start_alarm_plan_mgr() # 告警计划管理器
  162. # 数据库线程
  163. db_process.create_db_process().start()
  164. # MQTT 消息线程
  165. mqtt_client = MQTTClientThread()
  166. mqtt_client.start()
  167. mqtt_consumer = MQTTConsumerThread()
  168. mqtt_consumer.start()
  169. # 主线程
  170. main_process()
  171. main()