|
@@ -0,0 +1,334 @@
|
|
|
+from flask import Flask,Response
|
|
|
+from DBSession import session_maker
|
|
|
+from model import *
|
|
|
+from sqlalchemy.sql import func
|
|
|
+
|
|
|
+from utils import *
|
|
|
+import atexit
|
|
|
+from aliyunsdkcore.client import AcsClient
|
|
|
+from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest
|
|
|
+from apscheduler.schedulers.background import BackgroundScheduler
|
|
|
+import json
|
|
|
+from model_longvideo import produce_video_task,produce_video_project
|
|
|
+from DBSession_longvideo import session_maker_longvideo
|
|
|
+from prometheus_client import Gauge,Counter, generate_latest
|
|
|
+from prometheus_client.core import CollectorRegistry
|
|
|
+from scheduler_jobs import interface_info_count
|
|
|
+from ex_response import ex_response
|
|
|
+import time
|
|
|
+import threading
|
|
|
+app = Flask(__name__)
|
|
|
+registry = CollectorRegistry(auto_describe=False)
|
|
|
+
|
|
|
+
|
|
|
+# # 定义后台执行调度器
|
|
|
+# scheduler = BackgroundScheduler()
|
|
|
+# scheduler.add_job(func=interface_info_count, trigger="interval", seconds=120)
|
|
|
+# scheduler.start()
|
|
|
+# atexit.register(lambda: scheduler.shutdown())
|
|
|
+
|
|
|
+client = AcsClient('LTAI4GBWbFvvXoXsSVBe1o9f', 'kRAikWitb4kDxaAyBqNrmLmllMEDO3', 'cn-hangzhou')
|
|
|
+
|
|
|
+
|
|
|
+healthcheck_status = Gauge("healthcheck_status", "ipaddress", ['instance_id','server_name', 'ipaddress'], registry=registry)
|
|
|
+url_http_avgtime = Gauge("url_http_times_avgs", "url of avgs", ['appType', 'url'], registry=registry)
|
|
|
+url_http_qps = Gauge("url_http_qps", "url of qps", ['appType','url'], registry=registry)
|
|
|
+url_http_expendtime_summary = Gauge("url_http_expendtime_summary", "expendtime summary", ['appType', 'url', 'duration'], registry=registry)
|
|
|
+probe_http_status_code = Gauge("http_status_code", 'h5',['server_name'], registry=registry)
|
|
|
+probe_http_total_time = Gauge("http_total_time", 'h5',['server_name'], registry=registry)
|
|
|
+probe_http_dns_time = Gauge("http_dns_time", 'h5',['server_name'], registry=registry)
|
|
|
+probe_http_connect_time = Gauge("http_connect_time", 'h5',['server_name'], registry=registry)
|
|
|
+probe_http_pretransfer_time = Gauge("http_pretransfer_time", 'h5',['server_name'], registry=registry)
|
|
|
+probe_http_first_byte_time = Gauge("http_first_byte_time", 'h5',['server_name'], registry=registry)
|
|
|
+slb_http_status_code = Gauge("slb_http_status_code", 'slb', ['server_name', 'status'], registry=registry)
|
|
|
+produce_video_task_count = Gauge("produce_video_task_count", 'success_status_count', ['status_count'], registry=registry)
|
|
|
+produce_video_task_rate = Gauge("produce_video_task_rate", 'produce_video_rate', ['produce_video_rate'], registry=registry)
|
|
|
+produce_video_tts_count = Gauge("tts_aliyun_azure", 'success', ['tts_channel'], registry=registry)
|
|
|
+logs_app_recommend_log_cnt_300 = Gauge("logs_app_recommend_log_null_cnt_300", "null cnt", ['cnt'], registry=registry)
|
|
|
+logs_app_recommend_log_cnt_all = Counter("logs_app_recommend_log_null_cnt_all", "all cnt", ['cnt'], registry=registry)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+@app.route('/update')
|
|
|
+def update():
|
|
|
+ request = DescribeInstancesRequest()
|
|
|
+ request.set_accept_format('json')
|
|
|
+ request.set_PageSize(100)
|
|
|
+ # request.set_InstanceNetworkType("vpc")
|
|
|
+ request.set_Tags([
|
|
|
+ {
|
|
|
+ "Key": "ecs"
|
|
|
+ }
|
|
|
+ ])
|
|
|
+
|
|
|
+ response = client.do_action_with_exception(request)
|
|
|
+ instance_info = json.loads(response)
|
|
|
+ intances_list_del()
|
|
|
+ count = len(instance_info["Instances"]["Instance"])
|
|
|
+ for i in range(len(instance_info["Instances"]["Instance"])):
|
|
|
+ instance_id = instance_info["Instances"]["Instance"][i]["InstanceId"]
|
|
|
+ if instance_info["Instances"]["Instance"][i]["InstanceNetworkType"] == "vpc":
|
|
|
+ ipaddr = instance_info["Instances"]["Instance"][i]["VpcAttributes"]["PrivateIpAddress"]["IpAddress"][0]
|
|
|
+ if instance_info["Instances"]["Instance"][i]["InstanceNetworkType"] == "classic":
|
|
|
+ ipaddr = instance_info["Instances"]["Instance"][i]["InnerIpAddress"]["IpAddress"][0]
|
|
|
+
|
|
|
+ server_name = instance_info["Instances"]["Instance"][i]["Tags"]["Tag"][0]["TagValue"]
|
|
|
+ status = instance_info["Instances"]["Instance"][i]["Status"]
|
|
|
+ instance_name = instance_info["Instances"]["Instance"][i]["HostName"]
|
|
|
+
|
|
|
+ if status == "Running":
|
|
|
+ status = 1
|
|
|
+ instance_insert(instance_id, ipaddr, instance_name, server_name, status)
|
|
|
+
|
|
|
+
|
|
|
+ return "更新完成"
|
|
|
+@app.route('/app/healthcheck/metrics')
|
|
|
+def app_healthcheck():
|
|
|
+ threads = []
|
|
|
+ with session_maker() as session:
|
|
|
+ instance_infos = session.query(InstanceList).filter(InstanceList.server_name=="longvideoapi.prod").all()
|
|
|
+ for index in range(len(instance_infos)):
|
|
|
+ ipaddr = instance_infos[index].ipadd
|
|
|
+ server_name = instance_infos[index].server_name
|
|
|
+ http_code = healthcheck(ipaddr, server_name)
|
|
|
+ instance_id = instance_infos[index].instance_id
|
|
|
+ healthcheck_status.labels(instance_id, server_name, ipaddr).set(http_code)
|
|
|
+
|
|
|
+ return Response(generate_latest(registry),mimetype="text/plain")
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+@app.route('/app/qps/metrics')
|
|
|
+def qps_avgtime_count():
|
|
|
+ threads = []
|
|
|
+ with session_maker() as session:
|
|
|
+ intface_infos = session.query(IntfaceList.interface_url).all()
|
|
|
+ app_type = session.query(app_info.app_type).all()
|
|
|
+ for i in range(len(intface_infos)):
|
|
|
+ for index in range(len(app_type)):
|
|
|
+
|
|
|
+ url = intface_infos[i].interface_url
|
|
|
+ appType = app_type[index].app_type
|
|
|
+
|
|
|
+ url_avgtime = count_avg_time(appType, url)
|
|
|
+ url_qps = count_qps(appType, url)
|
|
|
+ url_http_avgtime.labels(appType, url).set(url_avgtime)
|
|
|
+ url_http_qps.labels(appType, url).set(url_qps)
|
|
|
+ return Response(generate_latest(registry),mimetype="text/plain")
|
|
|
+
|
|
|
+
|
|
|
+@app.route('/h5/metrics')
|
|
|
+def h5_healthcheck():
|
|
|
+
|
|
|
+
|
|
|
+ # curl_respon = ex_response(
|
|
|
+ share_h5 = "share_h5"
|
|
|
+ download_h5 = "download_h5"
|
|
|
+ share_h5_url = "https://longvideoh5.piaoquantv.com/core/share?shareSource=customerMessage&fromAppType=0&qrAppType=0&versionCode=321&shareUid=12463024&shareMachineCode=weixin_openid_o0w175fPwp8yrtOGihYJhvnT9Ag4&h5WxrootPageSource=vlog-pages___category&videoId=2689415&isRecommendShare=1&h5ShareId=backend493cd67dd28f4ee395781d59881567211625976055926&shareDepth=0&state=#"
|
|
|
+ download_h5_url = "https://longvideoh5.piaoquantv.com/dist_1_3_4/upload?accessToken=fe8914eb2e99d1fe8ddaa2f753f5ec613eb2dfbb&versionCode=323&galleryId=0&fileType=2&machineCode=weixin_openid_o0w175fPwp8yrtOGihYJhvnT9Ag4&platform=devtools&system=iOS%2010.0.1&appType=0&appId=wx89e7eb06478361d7&pageSource=vlog-pages%2Fwebview&loginUid=12463024&machineInfo=%7B%22sdkVersion%22%3A%222.4.1%22,%22brand%22%3A%22devtools%22,%22language%22%3A%22zh_CN%22,%22model%22%3A%22iPhone%20X%22,%22platform%22%3A%22devtools%22,%22system%22%3A%22iOS%2010.0.1%22,%22weChatVersion%22%3A%228.0.5%22,%22screenHeight%22%3A812,%22screenWidth%22%3A375,%22windowHeight%22%3A730,%22windowWidth%22%3A375,%22softVersion%22%3A%224.1.168%22%7D&wxHelpPagePath=%2Fpackage-my%2Fhelp-feedback%2Fhelp-feedback&transaction=2065ff98-6f27-4f09-c9eb-d366c99dd5d5&videoBarrageSwitch=true&addMusic=1&eventId=0&fromActivityId=0&sessionId=1626833289618-583a312d-81cd-62f9-cdd4-cf914c682d55&subSessionId=1626833289618-583a312d-81cd-62f9-cdd4-cf914c682d55&projectId=&entranceType=#wechat_redirec"
|
|
|
+ shar_h5_curl_response = ex_response(share_h5_url)
|
|
|
+ share_h5_url_info = shar_h5_curl_response.getinfo()
|
|
|
+ download_h5_curl_response = ex_response(download_h5_url)
|
|
|
+ download_h5_url_info = download_h5_curl_response.getinfo()
|
|
|
+
|
|
|
+ probe_http_status_code.labels(share_h5).set(share_h5_url_info["http_code"])
|
|
|
+ probe_http_status_code.labels(download_h5).set(download_h5_url_info["http_code"])
|
|
|
+
|
|
|
+ probe_http_total_time.labels("share_h5").set(share_h5_url_info["total_time"]*1000)
|
|
|
+ probe_http_total_time.labels("download_h5").set(download_h5_url_info["total_time"]*1000)
|
|
|
+
|
|
|
+ probe_http_dns_time.labels("share_h5").set(share_h5_url_info["dns_time"]*1000)
|
|
|
+ probe_http_dns_time.labels("download_h5").set(download_h5_url_info["dns_time"]*1000)
|
|
|
+
|
|
|
+ probe_http_connect_time.labels("share_h5").set(share_h5_url_info["dns_time"]*1000)
|
|
|
+ probe_http_connect_time.labels("download_h5").set(download_h5_url_info["dns_time"]*1000)
|
|
|
+
|
|
|
+
|
|
|
+ probe_http_pretransfer_time.labels("share_h5").set(share_h5_url_info["pretransfer_time"]*1000)
|
|
|
+ probe_http_pretransfer_time.labels("download_h5").set(download_h5_url_info["pretransfer_time"]*1000)
|
|
|
+
|
|
|
+ probe_http_first_byte_time.labels("share_h5").set(share_h5_url_info["first_byte_time"]*1000)
|
|
|
+ probe_http_first_byte_time.labels("download_h5").set(download_h5_url_info["first_byte_time"]*1000)
|
|
|
+
|
|
|
+ return Response(generate_latest(registry), mimetype="text/plain")
|
|
|
+
|
|
|
+
|
|
|
+@app.route('/slbStatusCode/metrics')
|
|
|
+def slb_request_status_metric():
|
|
|
+ svc_name = {'longvideoapi', 'clip', 'speed'}
|
|
|
+ for name in svc_name:
|
|
|
+ res = slb_status_code_count(name)
|
|
|
+ if res:
|
|
|
+ for i in range(len(res)):
|
|
|
+ status = res[i]['status']
|
|
|
+ cnt = float(res[i]['cnt'])
|
|
|
+ slb_http_status_code.labels(name, status).set(cnt)
|
|
|
+
|
|
|
+
|
|
|
+ return Response(generate_latest(registry), mimetype="text/plain")
|
|
|
+
|
|
|
+@app.route('/metrics')
|
|
|
+def all_metric():
|
|
|
+ with session_maker_longvideo() as session:
|
|
|
+
|
|
|
+ # video_progress_count = session.query(produce_video_task).filter(produce_video_task.task_status == 1).count()
|
|
|
+ # video_success_count = session.query(produce_video_task).filter(produce_video_task.task_status == 2).count()
|
|
|
+ # video_fail_count = session.query(produce_video_task).filter(produce_video_task.task_status == 3).count()
|
|
|
+ # video_produce_speed = session.query(produce_video_task).filter(produce_video_task.submit_timestamp)
|
|
|
+ # #视频合成成功率
|
|
|
+ # produce_video_task_count.labels("video_sucess").set(video_success_count)
|
|
|
+ # produce_video_task_count.labels("video_fail").set(video_fail_count)
|
|
|
+ # produce_video_task_count.labels("video_progress").set(video_progress_count)
|
|
|
+ # #合成速度
|
|
|
+ # end_time = int(time.time())
|
|
|
+ # start_time = end_time - (end_time - time.timezone) % 86400
|
|
|
+ # res = session.query(produce_video_task).filter(produce_video_task.task_status==2).order_by(produce_video_task.id.desc()).first()
|
|
|
+ # if res:
|
|
|
+ # duration = res.duration
|
|
|
+ # submit_timestamp = res.submit_timestamp
|
|
|
+ # complete_timestamp = res.complete_timestamp
|
|
|
+ # rate = (duration / (complete_timestamp - submit_timestamp) / 1000)
|
|
|
+ # produce_video_task_rate.labels("produce_video_task_rate").set(round(rate, 3))
|
|
|
+ # else:
|
|
|
+ # produce_video_task_rate.labels("produce_video_task_rate").set(0)
|
|
|
+ start_time = int(time.strftime("%Y%m%d%H%M", time.localtime())) * 100000000000
|
|
|
+ end_time = (int(time.strftime("%Y%m%d%H%M", time.localtime())) + 5) * 100000000000
|
|
|
+ sql = "select round(successCount/totalCount * 100,2) as 成功率 from (select count(*) as totalCount, sum(case when produce_status != 99 then 1 else 0 end) as successCount from produce_video_project where project_id > {} and project_id < {} and app_type not in (13,15)) t1".format(start_time, end_time)
|
|
|
+ res = db_query(sql)
|
|
|
+ if res[0] is not None:
|
|
|
+ produce_video_task_rate.labels("produce_video_task_rate").set(res[0])
|
|
|
+ else:
|
|
|
+ produce_video_task_rate.labels("produce_video_task_rate").set(100)
|
|
|
+
|
|
|
+ sql = "select v1 as 平均合成耗时,v2 as 平均视频时长, round(v2/v1,1) as 时长耗时比 from (select avg(produce_done_timestamp - submit_timestamp) as v1, avg(video_duration/1000) as v2 from produce_video_project where project_id > {} and project_id < {} and app_type not in (13,15) and produce_status in (5,6,7,8)) as t1".format(start_time, end_time)
|
|
|
+ #tts
|
|
|
+ res = db_query(sql)
|
|
|
+ if res[2] is not None:
|
|
|
+ produce_video_task_count.labels("video_progress").set(res[2])
|
|
|
+ else:
|
|
|
+ produce_video_task_count.labels("video_progress").set(0)
|
|
|
+
|
|
|
+ res = logs_tts_count("aliyun",1)
|
|
|
+ if res is not None:
|
|
|
+ produce_video_tts_count.labels("aliyun_success").set(res[0]["count"])
|
|
|
+ else:
|
|
|
+ produce_video_tts_count.labels("aliyun_success").set(0)
|
|
|
+ res = logs_tts_count("aliyun", 0)
|
|
|
+ if res is not None:
|
|
|
+ produce_video_tts_count.labels("aliyun_fail").set(res[0]["count"])
|
|
|
+ else:
|
|
|
+ produce_video_tts_count.labels("aliyun_fail").set(0)
|
|
|
+ res = logs_tts_count("azure", 1)
|
|
|
+ if res is not None:
|
|
|
+ produce_video_tts_count.labels("azure_success").set(res[0]["count"])
|
|
|
+ else:
|
|
|
+ produce_video_tts_count.labels("azure_success").set(0)
|
|
|
+ res = logs_tts_count("aliyun", 0)
|
|
|
+ if res is not None:
|
|
|
+ produce_video_tts_count.labels("azure_fail").set(res[0]["count"])
|
|
|
+ else:
|
|
|
+ produce_video_tts_count.labels("azure_fail").set(0)
|
|
|
+ #接口qps与返回时长
|
|
|
+ # with session_maker() as session:
|
|
|
+ # intface_infos = session.query(IntfaceList).filter(IntfaceList.app_type == "1").all()
|
|
|
+ # for i in range(len(intface_infos)):
|
|
|
+ # url = intface_infos[i].interface_url
|
|
|
+ # url_qps = intface_infos[i].qps
|
|
|
+ # url_avg_time = intface_infos[i].avg_time
|
|
|
+ # url_http_avgtime.labels(url).set(url_avg_time)
|
|
|
+ # url_http_qps.labels(url).set(url_qps)
|
|
|
+
|
|
|
+ #当日负载均衡http_code
|
|
|
+ svc_name = {'longvideoapi', 'clip', 'speed', 'commonapi'}
|
|
|
+ for name in svc_name:
|
|
|
+ res = slb_status_code_count(name)
|
|
|
+ if res:
|
|
|
+ for i in range(len(res)):
|
|
|
+ status = res[i]['status']
|
|
|
+ cnt = float(res[i]['cnt'])
|
|
|
+ print(cnt)
|
|
|
+ slb_http_status_code.labels(name, status).set(cnt)
|
|
|
+
|
|
|
+ #h5 healthcheck
|
|
|
+ share_h5 = "share_h5"
|
|
|
+ download_h5 = "download_h5"
|
|
|
+ share_h5_url = "https://longvideoh5.piaoquantv.com/core/share?shareSource=customerMessage&fromAppType=0&qrAppType=0&versionCode=321&shareUid=12463024&shareMachineCode=weixin_openid_o0w175fPwp8yrtOGihYJhvnT9Ag4&h5WxrootPageSource=vlog-pages___category&videoId=2689415&isRecommendShare=1&h5ShareId=backend493cd67dd28f4ee395781d59881567211625976055926&shareDepth=0&state=#"
|
|
|
+ download_h5_url = "https://longvideoh5.piaoquantv.com/dist_1_3_4/upload?accessToken=fe8914eb2e99d1fe8ddaa2f753f5ec613eb2dfbb&versionCode=323&galleryId=0&fileType=2&machineCode=weixin_openid_o0w175fPwp8yrtOGihYJhvnT9Ag4&platform=devtools&system=iOS%2010.0.1&appType=0&appId=wx89e7eb06478361d7&pageSource=vlog-pages%2Fwebview&loginUid=12463024&machineInfo=%7B%22sdkVersion%22%3A%222.4.1%22,%22brand%22%3A%22devtools%22,%22language%22%3A%22zh_CN%22,%22model%22%3A%22iPhone%20X%22,%22platform%22%3A%22devtools%22,%22system%22%3A%22iOS%2010.0.1%22,%22weChatVersion%22%3A%228.0.5%22,%22screenHeight%22%3A812,%22screenWidth%22%3A375,%22windowHeight%22%3A730,%22windowWidth%22%3A375,%22softVersion%22%3A%224.1.168%22%7D&wxHelpPagePath=%2Fpackage-my%2Fhelp-feedback%2Fhelp-feedback&transaction=2065ff98-6f27-4f09-c9eb-d366c99dd5d5&videoBarrageSwitch=true&addMusic=1&eventId=0&fromActivityId=0&sessionId=1626833289618-583a312d-81cd-62f9-cdd4-cf914c682d55&subSessionId=1626833289618-583a312d-81cd-62f9-cdd4-cf914c682d55&projectId=&entranceType=#wechat_redirec"
|
|
|
+ shar_h5_curl_response = ex_response(share_h5_url)
|
|
|
+ share_h5_url_info = shar_h5_curl_response.getinfo()
|
|
|
+ download_h5_curl_response = ex_response(download_h5_url)
|
|
|
+ download_h5_url_info = download_h5_curl_response.getinfo()
|
|
|
+
|
|
|
+ probe_http_status_code.labels(share_h5).set(share_h5_url_info["http_code"])
|
|
|
+ probe_http_status_code.labels(download_h5).set(download_h5_url_info["http_code"])
|
|
|
+
|
|
|
+ probe_http_total_time.labels("share_h5").set(share_h5_url_info["total_time"]*1000)
|
|
|
+ probe_http_total_time.labels("download_h5").set(download_h5_url_info["total_time"]*1000)
|
|
|
+
|
|
|
+ probe_http_dns_time.labels("share_h5").set(share_h5_url_info["dns_time"]*1000)
|
|
|
+ probe_http_dns_time.labels("download_h5").set(download_h5_url_info["dns_time"]*1000)
|
|
|
+
|
|
|
+ probe_http_connect_time.labels("share_h5").set(share_h5_url_info["dns_time"]*1000)
|
|
|
+ probe_http_connect_time.labels("download_h5").set(download_h5_url_info["dns_time"]*1000)
|
|
|
+
|
|
|
+
|
|
|
+ probe_http_pretransfer_time.labels("share_h5").set(share_h5_url_info["pretransfer_time"]*1000)
|
|
|
+ probe_http_pretransfer_time.labels("download_h5").set(download_h5_url_info["pretransfer_time"]*1000)
|
|
|
+
|
|
|
+ probe_http_first_byte_time.labels("share_h5").set(share_h5_url_info["first_byte_time"]*1000)
|
|
|
+ probe_http_first_byte_time.labels("download_h5").set(download_h5_url_info["first_byte_time"]*1000)
|
|
|
+
|
|
|
+ #推荐业务
|
|
|
+ res_null_cnt = count_recommend_null()
|
|
|
+ logs_app_recommend_log_cnt_300.labels("recommend").set(res_null_cnt)
|
|
|
+ # # logs_app_recommend_log_cnt_all.labels("recommend").inc(1)
|
|
|
+ # logs_app_recommend_log_cnt_all.inc(res_null_cnt)
|
|
|
+
|
|
|
+ return Response(generate_latest(registry), mimetype="text/plain")
|
|
|
+@app.route('/qps_avgtime/metrics')
|
|
|
+def qps_avgtime_metrics():
|
|
|
+ app_type = ['1', '0', '4', '5', '6', '12', '13']
|
|
|
+ for i in range(len(app_type)):
|
|
|
+ appType = app_type[i]
|
|
|
+ res = count_qps_avgtime(appType)
|
|
|
+ for i in range(len(res.body)):
|
|
|
+ url = res.body[i]["requestUri"]
|
|
|
+
|
|
|
+ qps = int(res.body[i]["cnt"])
|
|
|
+ avgtime = int(float(res.body[i]["avg_time"]))
|
|
|
+ url_http_qps.labels(appType, url).set(qps)
|
|
|
+ url_http_avgtime.labels(appType, url).set(avgtime)
|
|
|
+
|
|
|
+ res = count_rt_less_time_count(appType, 0, 200)
|
|
|
+ for i in range(len(res.body)):
|
|
|
+ url = res.body[i]["requestUri"]
|
|
|
+ count = res.body[i]["cnt"]
|
|
|
+ url_http_expendtime_summary.labels(appType, url, "0-200").set(count)
|
|
|
+
|
|
|
+ res = count_rt_less_time_count(appType, 200, 500)
|
|
|
+ for i in range(len(res.body)):
|
|
|
+ url = res.body[i]["requestUri"]
|
|
|
+ count = res.body[i]["cnt"]
|
|
|
+ url_http_expendtime_summary.labels(appType, url, "200-300").set(count)
|
|
|
+
|
|
|
+ res = count_rt_less_time_count(appType, 500, 1000)
|
|
|
+ for i in range(len(res.body)):
|
|
|
+ url = res.body[i]["requestUri"]
|
|
|
+ count = res.body[i]["cnt"]
|
|
|
+ url_http_expendtime_summary.labels(appType, url, "500-1000").set(count)
|
|
|
+
|
|
|
+ res = count_rt_less_time_count(appType, 1000, 10000)
|
|
|
+ for i in range(len(res.body)):
|
|
|
+ url = res.body[i]["requestUri"]
|
|
|
+ count = res.body[i]["cnt"]
|
|
|
+ url_http_expendtime_summary.labels(appType, url, ">1000").set(count)
|
|
|
+
|
|
|
+ return Response(generate_latest(registry), mimetype="text/plain")
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == '__main__':
|
|
|
+ # app.run()
|
|
|
+ app.run(host='192.168.201.1', port=9091)
|