ent_interface_dingtalk_call.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import base64
  2. import hashlib
  3. import hmac
  4. import sys
  5. import re
  6. import os
  7. import urllib
  8. import time
  9. import requests
  10. abspath = os.path.abspath(__file__)
  11. root_path = re.sub(r"tendata-warehouse.*", "tendata-warehouse", abspath)
  12. sys.path.append(root_path)
  13. from dw_base.utils.config_utils import parse_args
  14. from dw_base.spark.spark_sql import SparkSQL
  15. import json
  16. spark = SparkSQL(udf_files=['dw_base/spark/udf/contacts/ctc_common.py',
  17. 'dw_base/spark/udf/spark_id_generate_udf.py'])
  18. def send_dingtalk_notification(msg):
  19. headers = {"Content-Type": "application/json"}
  20. data = {
  21. "msgtype": "text",
  22. "text": {"content": msg}
  23. }
  24. json_data = json.dumps(data)
  25. url = 'https://oapi.dingtalk.com/robot/send?access_token=5183dfe1ecbe06261bcac7b45c1a6b5ae101fec67877d74120a6a95c88d1f917'
  26. # url = 'https://oapi.dingtalk.com/robot/send?access_token=c4086d8ba377fdade2dff869e71063733095bc718d3bafdfbe8be0966aa050d6'
  27. # url = 'https://oapi.dingtalk.com/robot/send?access_token=bee997dbf61e839a17de087830ffef6e864c3109fef62a956703bdfe043b0e10'
  28. response = requests.post(url=url, data=json_data, headers=headers)
  29. response.raise_for_status()
  30. # shh非核心业务调用数
  31. def get_shh_non_core_interface_cnt(dt):
  32. sql = f'''
  33. SELECT sum(cnt) cnt
  34. FROM
  35. (SELECT count(1) cnt
  36. FROM ent_raw.interface_base
  37. WHERE topic = "ent_monitor_interface"
  38. AND dt = "{dt}"
  39. AND GET_JSON_OBJECT(ori_json, "$.type") != "EXPORT"
  40. AND GET_JSON_OBJECT(ori_json, "$.source")= 'CONTACT'
  41. UNION ALL SELECT count(1) cnt
  42. FROM ent_raw.interface_base
  43. WHERE topic = "ent_shh_bizr_interface"
  44. AND dt = "{dt}"
  45. AND GET_JSON_OBJECT(ori_json, "$.type") IN("ROOT",
  46. "COMPANY_COUNT")
  47. AND GET_JSON_OBJECT(ori_json, "$.source")= 'BIZR'
  48. UNION ALL SELECT count(1) cnt
  49. FROM ent_raw.interface_base
  50. WHERE topic = "ent_shh_mecs_interface"
  51. AND dt = "{dt}"
  52. AND GET_JSON_OBJECT(ori_json, "$.type") IN("CORP",
  53. "SITE")
  54. AND GET_JSON_OBJECT(ori_json, "$.source")= 'MECS'
  55. UNION ALL SELECT count(1) cnt
  56. FROM ent_raw.interface_base
  57. WHERE topic = "ent_shh_interface"
  58. AND dt = "{dt}"
  59. AND GET_JSON_OBJECT(ori_json, "$.type")= "BIZR"
  60. AND GET_JSON_OBJECT(ori_json, "$.source")= "BIZR"
  61. )t
  62. '''
  63. return spark.query(sql)[0].collect()[0]['cnt']
  64. def get_shh_company_interface_cnt(dt):
  65. sql = f'select count(1) cnt from ent_ods.ent_shh_api_company_logs where dt = "{dt}" and source != "SCRIPT"'
  66. return spark.query(sql)[0].collect()[0]['cnt']
  67. def get_shh_company_interface_script_cnt(dt):
  68. sql = f'select count(1) cnt from ent_ods.ent_shh_api_company_logs where dt = "{dt}" and source = "SCRIPT"'
  69. return spark.query(sql)[0].collect()[0]['cnt']
  70. def get_shh_contact_interface_cnt(dt):
  71. sql = f'select count(1) cnt from ent_raw.interface_base where topic = "ctc_shh_interface" and dt = "{dt}" and GET_JSON_OBJECT(ori_json, "$.source") != "SCRIPT"'
  72. return spark.query(sql)[0].collect()[0]['cnt']
  73. def get_shh_contact_interface_script_cnt(dt):
  74. sql = f'select count(1) cnt from ent_raw.interface_base where topic = "ctc_shh_interface" and dt = "{dt}" and GET_JSON_OBJECT(ori_json, "$.source") = "SCRIPT"'
  75. return spark.query(sql)[0].collect()[0]['cnt']
  76. def get_snv_contact_interface_cnt(dt):
  77. sql = f'select count(1) cnt from ent_raw.interface_base where topic = "ctc_snovio_interface" and dt = "{dt}" and GET_JSON_OBJECT(ori_json, "$.source") != "MANUAL_CONSUME" '
  78. return spark.query(sql)[0].collect()[0]['cnt']
  79. def get_snv_contact_interface_script_cnt(dt):
  80. sql = f'select count(1) cnt from ent_raw.interface_base where topic = "ctc_snovio_interface" and dt = "{dt}" and GET_JSON_OBJECT(ori_json, "$.source") = "MANUAL_CONSUME" '
  81. return spark.query(sql)[0].collect()[0]['cnt']
  82. if __name__ == '__main__':
  83. CONFIG, _ = parse_args(sys.argv[1:])
  84. dts = CONFIG.get('dt').split(',')
  85. for dt in dts:
  86. format_dt = f'{dt[:4]}-{dt[4:6]}-{dt[6:]}'
  87. shh_company_interface_cnt = get_shh_company_interface_cnt(dt)
  88. shh_company_interface_script_cnt = get_shh_company_interface_script_cnt(dt)
  89. shh_contact_interface_cnt = get_shh_contact_interface_cnt(dt)
  90. shh_contact_interface_script_cnt = get_shh_contact_interface_script_cnt(dt)
  91. snv_contact_interface_cnt = get_snv_contact_interface_cnt(dt)
  92. snv_contact_interface_script_cnt = get_snv_contact_interface_script_cnt(dt)
  93. shh_non_core_interface_cnt = get_shh_non_core_interface_cnt(dt)
  94. msg = f'''【接口调用量统计】------------------------------------------
  95. 统计日期: {format_dt}
  96. 1、单接口调用公司信息次数: {shh_company_interface_cnt + shh_company_interface_script_cnt}
  97. ①自然调用次数: {shh_company_interface_cnt}
  98. ②脚本调用次数: {shh_company_interface_script_cnt}
  99. 2、单接口调用联系人次数: {shh_contact_interface_cnt + shh_contact_interface_script_cnt}
  100. ①自然调用次数: {shh_contact_interface_cnt}
  101. ②脚本调用次数: {shh_contact_interface_script_cnt}
  102. 3、snovio调用联系人次数: {snv_contact_interface_cnt + snv_contact_interface_script_cnt}
  103. ①自然调用次数: {snv_contact_interface_cnt}
  104. ②脚本调用次数: {snv_contact_interface_script_cnt}
  105. 4、单接口非核心业务调用次数:{shh_non_core_interface_cnt}
  106. ---------------------------------------------------------------'''
  107. print(msg)
  108. send_dingtalk_notification(msg)