grafana+prometheus图片渲染发送
2023-06-01 09:14
305 人阅读

import requests import os from datetime import datetime, date, time, timedelta import time as Time import telepot from telepot.loop import MessageLoop from apscheduler.schedulers.background import BackgroundScheduler import pytz def last_seven_day(): """ 返回unix时间戳 :return: """ t = datetime.now() t1 = t.strftime('%Y-%m-%d %H:%M:%S') ts1 = Time.mktime(Time.strptime(t1, '%Y-%m-%d %H:%M:%S')) end_time = int(str(ts1 * 1000).split(".")[0]) t2 = (t - timedelta(hours=1)).strftime("%Y-%m-%d %H:%M:%S") ts2 = Time.mktime(Time.strptime(t2, '%Y-%m-%d %H:%M:%S')) start_time = int(str(ts2 * 1000).split(".")[0]) return str(start_time), str(end_time) def download_img(img_url, api_token, millis, project_name): """ 请求并下载图片 :param img_url: :param api_token: :param millis: :param project_name: :return: """ header = {"Authorization": "Bearer " + api_token} request = requests.get(img_url, headers=header) try: img_name = "%s_%s.png" % (project_name, millis) filename = img_dir + img_name print(request.status_code) if request.status_code == 200: with open(filename, "wb") as f: f.write(request.content) return filename else: return request.status_code except Exception as e: print(e) return e def send_message(message): """ 发送图片 :param path: :return: """ data = {'chat_id': meaage_id, 'text': message} p = requests.post( 'https://api.telegram.org/bot%s/sendMessage' % TOKEN, data=data) def send_img(path): """ 发送消息 :param path: :return: """ files = {'document': open(path, 'rb')} r = requests.post('https://api.telegram.org/bot%s/sendDocument' % TOKEN, data={'chat_id': meaage_id}, files=files) def tasks(cron=None): """ Grafana 配置信息 :param cron: :return: """ # grafana网址 grafana_server = 'http://127.0.0.1/' # grafana token api_token = "emNSem82MjQiLCJuIjoiaW1hZ2VfZG93bmxvYWQiLCJpZCI6MX0yJrIjoieU1RY3BTWHRnR0s1UkFKdkRLVFlrRUhkQ" # 项目名称与uid dict格式 projects = [ {'name': 'prome-ying-wen-ban', 'dbuid': 'xfpJB9FGz'}, # {'name': 'cod-monitor-dashboard-cn-v2021419', 'dbuid': 'CDO-9CWBz0bik'}, # {'name': 'ctp-qts-dashboard-cn-v2021419', 'dbuid': 'CTP-QTS-9CWBz0bik'}, # {'name': 'three-monitor-dashboard-cn-v2021419', 'dbuid': '9CWBz0bik43'}, ] for project in projects: if cron: img_url = ( grafana_server + 'render/d-solo/' + project['dbuid'] + '/' + project['name'] + '?orgId=1' + '&from=' + last_seven_day()[0] + '&to=' + last_seven_day()[1] + '&panelId=185&width=1400&height=700&tz=Asia%2FShanghai' ) else: img_url = ( grafana_server + 'render/d-solo/' + project['dbuid'] + '/' + project['name'] + '?orgId=1' + '&from=' + last_seven_day()[1] + '&to=' + last_seven_day()[1] + '&panelId=185&width=1400&height=700&tz=Asia%2FShanghai' ) result = download_img(img_url, api_token, last_seven_day()[1], project['name']) if os.path.exists(result): send_img(result) else: send_message(result) def handle(msg): """ 纸飞机监听 :param msg: :return: """ content_type, chat_type, chat_id = telepot.glance(msg) try: cmd = msg['text'] if cmd == command: send_message('开始拉取') tasks() else: send_message('指令错误,应为 %s' % command) except: send_message('指令错误,应为 %s' % command) # 下载文件保存路径 img_dir = 'D:\\' # 触发指令 command = '/start' # 纸飞机token TOKEN = '1111111111:12JvloTGNbW8R75R4AAHv7kzrKbP7lQPTTN' # 纸飞机群组id meaage_id = '-1111111111111' bot = telepot.Bot(TOKEN) MessageLoop(bot, handle).run_as_thread() print('Listening ...') timez = pytz.timezone('Asia/Shanghai') scheduler = BackgroundScheduler(timezone=timez) # 定时时间 scheduler.add_job(tasks, "cron", hour=9, minute=1, args=[True]) scheduler.add_job(tasks, "cron", hour=21, minute=1, args=[True]) scheduler.start() print('crontab start') while True: Time.sleep(10)
和博主交个朋友吧
