grafana+prometheus图片渲染发送

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)


和博主交个朋友吧
    发布篇幅
    • 文章总数:0
    • 原创:0
    • 转载:0
    • 译文:0
    文章分类
      文章存档
      阅读排行