• Yearning sql工单系统 自动执行工单python脚本


    Yearning是一个mysql开源sql语句审核平台,工单流程:开发者提交sql工单->主管审核->运维执行

    如果你只是一个工单执行者可以屏蔽一些关键词后自动执行工单

    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    import requests
    import jsonpath
    import time
    import sys
    import json
    
    
    def get_token():
        # 获取认证的token
        data = {
            "username": "",
            "password": ""
        }
        headers = {
            "Accept": "application/json"
        }
        request = requests.post(api_url + "ldapauth", data=data, headers=headers)
        request = request.json()
        token = jsonpath.jsonpath(request, "$.token")[0]
        return token
    
    
    def get_work():
        # 获取工单列表
        headers = {
            "Authorization": "JWT" + " " + token
        }
        request = requests.get(
            api_url + 'audit_sql?page=1&query={"picker":["",""],"user":"","valve":false}',
            headers=headers)
        return request.json()
    
    
    def get_sql():
        # 获取工单里面的sql
        headers = {
            "Accept": "application/json",
            "Authorization": "JWT" + " " + token
        }
        request = requests.get(
            api_url + 'getsql?id=' + str(id) + '&bundle_id=' + str(bundle_id),
            headers=headers)
        return request.json()
    
    
    def audit_sql():
        # 执行工单
        data = {
            "type": 1,
            "to_user": username,
            "id": id
        }
        data = json.dumps(data)
        headers = {
            "Content-Type": "application/json",
            "Authorization": "JWT" + " " + token
        }
        request = requests.put(api_url + 'audit_sql', data=data, headers=headers)
        return request.text
    
    
    if __name__ == "__main__":
        api_url = "https://yearning.example.com/api/v1/"
        token = get_token()
        work_list = get_work()
        for v in work_list['data']:
            id = v['id']
            bundle_id = v['bundle_id']
            status = v['status']
            type = v['type']
            username = v['username']
            work_id = v['work_id']
            if status == 2:           # 工单状态等于2则代表待执行
                sql = get_sql()['sql']
                sql = str.lower(sql)
                keyword = ["drop", "truncate", "grant", "lock"]
                for i in range(0, len(keyword)):
                    key = keyword[i]
                    if key in sql:
                        print("停止执行有敏感词:" + key)
                        sys.exit()
                audit_sql_return = audit_sql()   #执行工单
                now_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
                log = now_time + ' ' + audit_sql_return + ' ' + work_id + ' "' + sql + '"'
                log_file = '/tmp/audit-sql.log'
                print(log)
                f = open(log_file, 'a')
                f.write(log + '
    ')
                f.close()
                time.sleep(2)
  • 相关阅读:
    《C#高级编程》读书笔记(十五):任务、线程和同步之二 任务
    sklearn训练模型的保存与加载
    机器学习中样本不平衡的处理方法
    剑指Offer(四):重建二叉树
    剑指Offer(三):从尾到头打印链表
    机器学习笔记(一)----基本概念
    100 个网络基础知识普及,看完成半个网络高手
    协方差基本概念及公式
    正态分布基本概念及公式
    np.random.multivariate_normal方法浅析
  • 原文地址:https://www.cnblogs.com/37yan/p/12566372.html
Copyright © 2020-2023  润新知