Python时间库time、datetime使用

  • 生产实践

    用于屏蔽指定节点下的机器报警,并添加屏蔽时间和备注

  • 脚本内容:      

python时间库time、datetime使用,用于屏蔽指定节点下的机器报警,并添加屏蔽时间和备注,支持从文本读取机器列表。脚本内容如下:

#!/Users/anzhihe/.pyenv/versions/3.7.4/bin/python3
# -*- coding: utf-8 -*-
# @Time    : 2019-10-29
# @Author  : Anzhihe
# @Site    : https://chegva.com
# @File    : pb.py

import requests
import datetime
import time
import argparse
import json
import hashlib
import sys

# 获取认证token
def get_auth_header_value(caller, skey):
    now = int(time.time())
    now = str(now - now % 300)
    return "Cert caller={},token={}".format(caller, token(caller, skey, now))
    
def token(caller_name, skey, now):
    return hashlib.md5("{}.{}.{}".format(now, caller_name, skey).encode('utf-8')).hexdigest()

# 获取当前时间及时间戳    
def time_now():
    timeNow = datetime.datetime.now()
    begin_ts = int(time.mktime(timeNow.timetuple()))
    return begin_ts
    
def map_time(stime):
    """日期map映射"""
    times = {
        '1h': silence_time({'hours' : 1}),
        '2h': silence_time({'hours' : 2}),
        '6h': silence_time({'hours' : 6}),
        '12h': silence_time({'hours' : 12}),
        '1d': silence_time({'days' : 1}),
        '2d': silence_time({'days' : 2}),
        '7d': silence_time({'days' : 7})
    }
    return times.get(stime, None)

def silence_time(sil_time):
    after_ts = (datetime.datetime.now() + datetime.timedelta(**sil_time))
    end_ts = int(time.mktime(after_ts.timetuple()))
    return end_ts
    
# 将unix时间戳转换为当前时间格式
#strTime = datetime.datetime.fromtimestamp(timeStamp)
#print(strTime)

# 读取机器列表文件
def load_hostfile(hostfile):
    host_list = []
    with open(hostfile,'r') as f:
        for host in f.readlines():
            host = host.strip('\n').strip()
            if host:
                host_list.append(host)
    hosts = ','.join(str(h) for h in host_list)
    return hosts

# 报警屏蔽执行函数    
def slience_host(hostname, begin_ts, end_ts, tree, note, token):
    url = "http://monitor.chegva.com/auth/v1/silence/add"
    if len(tree) == 0:
        tree = "alarm.chegva.com"
    if len(note) == 0:
        note = "报障屏蔽"
    
    #print(hostname,begin_ts,end_ts,tree,note,token)
    payload = {
        "ns": tree,
        "type": "host",
        "begin_ts": begin_ts,
        "end_ts": end_ts,
        "note": note,
        "hosts": hostname
    }
    
    headers = {
        'Accept': "application/json, text/javascript, */*; q=0.01",
        'Referer': "http://monitor.chegva.com/",
        'Origin': "http://monitor.chegva.com",
        'X-Requested-With': "XMLHttpRequest",
        'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36",
        'Content-Type': "application/x-www-form-urlencoded; charset=UTF-8",
        'cache-control': "no-cache",
        'Authorization': token,
        }
        
    response = requests.request("POST", url, data=json.dumps(payload), headers=headers)
    print(response.text)

# 入口函数    
def main(argv):
    parser = argparse.ArgumentParser(description="example:pb [chegva01.bj,chegva02.bj | -f tmp] 7d '报修屏蔽' 'alarm.chegva.com'")
    parser.add_argument('-f', dest='file', default='tmp', help='the name of hostfile')
    parser.add_argument('host', type=str, help='输入屏蔽主机名')
    parser.add_argument('stime', type=str, help='输入屏蔽时间')
    parser.add_argument('note', type=str,  help='输入屏蔽原因(默认报修屏蔽)', default='报修屏蔽')
    parser.add_argument('tree', type=str, nargs='?',  help='屏蔽机器所在节点(默认alarm.chegva.com)', default='alarm.chegva.com')
    args = parser.parse_args()
    token = get_auth_header_value("sys.op-anzhihe", "yourtoken")
    if argv[1] == '-f':
        hosts = load_hostfile(args.file)
        stime = args.host
        begin_ts = time_now()
        end_ts = map_time(stime)
        note, tree = args.stime, args.note
        slience_host(hosts, begin_ts, end_ts, tree, note, token)
    else:
        stime = args.stime
        begin_ts = time_now()
        end_ts = map_time(stime)
        slience_host(args.host, begin_ts, end_ts, args.tree, args.note, token)
        
if __name__ == '__main__':
    main(sys.argv)

◎查看效果

 ~  pb -h                                                                                      
usage: pb [-h] [-f FILE] host stime note [tree]

example:pb [chegva01.bj,chegva02.bj | -f tmp] 7d '报修屏蔽' 'alarm.chegva.com'

positional arguments:
  host        输入屏蔽主机名
  stime       输入屏蔽时间
  note        输入屏蔽原因(默认报修屏蔽)
  tree        屏蔽机器所在节点(默认alarm.didi.com)

optional arguments:
  -h, --help  show this help message and exit
  -f FILE     the name of hostfile

# 直接屏蔽报警机器
pb chegva01.bj,chegva02.bj 2h '机器挂载屏蔽两小时' 'test.alarm.chegva.com'

# 读取文件列表屏蔽
pb -f tmp 7d '下线屏蔽' ''
pb -f tmp 7d '' ''


参考:

anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/4240.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注