start.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import json
  2. from MyUtils.ZillionUtil import ZillionUtil
  3. from MyUtils.Dingtalk import send_message
  4. import datetime
  5. import time
  6. # 获取operate_time
  7. def select(hbase_database, buildingid):
  8. Criteria = {
  9. "object_sign": buildingid,
  10. "instance_name": "fjd_0_Acc_Inst_EnumV"
  11. }
  12. data = zillionUtil.select(hbase_database, "ci_status", Criteria)
  13. if data:
  14. operate_time = data[0]["operate_time"]
  15. return operate_time
  16. def datetimenow():
  17. # 当前时间
  18. datetimenow = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  19. datetimenow = datetime.datetime.strptime(datetimenow, "%Y-%m-%d %H:%M:%S")
  20. return datetimenow
  21. #容器里python获取时间少8小时
  22. # tz = pytz.timezone('Asia/Shanghai') #东八区
  23. # datetimenow = datetime.datetime.fromtimestamp(int(time.time()),
  24. # pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S')
  25. # 读取配置文件信息
  26. with open("config.json", "r") as f:
  27. data = json.load(f)
  28. hbase_database = data["metadata"]["database"]
  29. url = data["metadata"]["url"]
  30. buildingid = data["building"]["id"]
  31. dingding = data["building"]["dingding"]
  32. #报警未恢复之前不再报警
  33. alarms = {}
  34. while True:
  35. try:
  36. # #连接hbase
  37. zillionUtil = ZillionUtil(url)
  38. operate_time = select(hbase_database,buildingid)
  39. if operate_time:
  40. operate_time = datetime.datetime.strptime(operate_time,"%Y%m%d%H%M%S")
  41. if datetimenow() > operate_time:
  42. value = (datetimenow() - operate_time).seconds
  43. print(datetimenow(),operate_time,value)
  44. if int(value) > 7200:
  45. if not alarms:
  46. message = "【之江实验室】项目超过2小时未计算, 最新的计算操作时间: %s"%operate_time
  47. print(message)
  48. send_message(message,dingding)
  49. alarms[datetimenow()]=message
  50. else:
  51. print("%s,已经产生报警,报警还未恢复"%datetimenow())
  52. else:
  53. alarms.clear()
  54. print("%s,OK"%datetimenow())
  55. else:
  56. alarms.clear()
  57. print(datetimenow(), operate_time, "............")
  58. print("%s,OK" % datetimenow())
  59. else:
  60. if not alarms:
  61. message = "【之江实验室】计算里没有查到%s的id"%buildingid
  62. print(message)
  63. send_message(message, dingding)
  64. alarms[datetimenow()] = message
  65. else:
  66. print("%s,已经产生报警,报警还未恢复" % datetimenow())
  67. except Exception as e:
  68. print(e)
  69. time.sleep(300)