监控数据流基准变化python脚本

来源:互联网 发布:淘宝网欧式灯具 编辑:程序博客网 时间:2024/05/21 18:48
#!/usr/bin/env python
# encoding: utf-8
"""
delay base case
"""


from datetime import datetime
import commands


from edulib.util import case_util
from edulib import config
import re
import time


class Delay(case_util.NormalCase):
    """
    数据流延迟
    """
    BASE_FILE = '/home/work/data_service/data/base/vse/0.bid.info.n'
    # 时间间隔阈值
    BASE_SECONDS = 25 * 3600


    def get_file_time(self, host, file):
        """
        get file last modify time
        """
        modify_time = ""
        cmd = "lftp {} -e \"cls -l {} && exit\"".format(host, file)
        output = commands.getoutput(cmd)
        if not re.search(".*\s+work\s+work.*", output):
            return None
        output = output.split()
        cur_year = time.strftime('%Y', time.localtime(time.time()))
        modify_time = cur_year + "-" + output[5] + "-" + output[6] + " " + output[7]
        return modify_time


    def process_host(self, host, file, threshold):
        """
        处理一台机器
        @param host 要处理的机器
        @param files 要监控文件
        @param threshold 阈值
        """
        last_time = self.get_file_time(host, file)
        if last_time is None:
            return


        last_time = time.mktime(time.strptime(last_time, "%Y-%b-%d %H:%M"))
        now = time.time()


        delta = abs(now - last_time)


        if delta > threshold:
            raise Exception('delay {}s > {}s'.format(delta, threshold))


    def process_group(self, group):
        """
        process in group
        """
        ret = {}


        for k, v in group.items():
            if v.get('type') == 'online':
                hosts = v['list']
                for host in hosts:
                    try:
                        # base
                        self.process_host(host=host, file=self.BASE_FILE,
                                threshold=self.BASE_SECONDS)
                    except Exception as e:
                        ret[host] = str(e)


        if len(ret) > 0:
            raise Exception(ret)


    def test_bs_course(self):
        """
        bs_course delay
        """
        group = config.Config.TOPO['sys']['search']['service']['bs_course']['unit']['group']
        self.process_group(group)


    def test_bs_service(self):
        """
        bs_service delay
        """
        group = config.Config.TOPO['sys']['search']['service']['bs_service']['unit']['group']
        self.process_group(group)


    def test_as(self):
        """
        as delay
        """
        group = config.Config.TOPO['sys']['search']['service']['as']['unit']['group']
        self.process_group(group)


    def test_cs_offline_course(self):
        """
        cs_offline_course delay
        """
        group = config.Config.TOPO['sys']['search']['service']['cs_offline_course']['unit']['group']
        self.process_group(group)


    def test_cs_offline_service(self):
        """
        cs_offline_service delay
        """
        group = \
        config.Config.TOPO['sys']['search']['service']['cs_offline_service']['unit']['group']
        self.process_group(group)
0 0
原创粉丝点击