Ejemplo n.º 1
0
    def run(self):
        """threadproc"""
        self.hamon = Hamon()
        self.grid = NZXTGrid()
        print("Controller has started")

        TIME_SLICE = 1000  # sampling period, msec
        MAX_SLEEP = 250  # max sleep interval (sleep in smaller intervals, makes UI more responsive)
        counter = 0
        td = timediff()
        while not self.shutdown:
            td.reset()
            self.dowork()  # do all controller stuff, once per time slice
            td.now()
            exec_time = td.ms
            remaining = TIME_SLICE
            sleep_count = 0
            while remaining > 0:
                if self.shutdown or self.settingsTS < self.appsettings.timestamp:
                    break  # early exit if needed
                td.now()
                remaining = TIME_SLICE - td.ms
                if (remaining > MAX_SLEEP): remaining = MAX_SLEEP
                if (remaining > 0):
                    time.sleep(remaining / 1000.0)
                    sleep_count += 1

            td.now()
            slice_time = td.ms
            #print ("loop={0}, exec={1}, slice={2}, sleep count={3}".format(counter, exec_time, slice_time, sleep_count))
            counter += 1

        self.grid.close()
        self.hamon.close()
        print("Controller has stopped")
Ejemplo n.º 2
0
def tmp():
    av = []
    final_start = datetime.datetime(2012, 5, 1, 0, 0, 0)
    start = final_start
    end = datetime.datetime.now()
    one_day = datetime.timedelta(days=1)
    
    while start < end:
        # 本月(start)的起止时间点
        start_time, end_time = get_start_end_for_month(start)
        alarm = SysAlarm.objects.filter(start_time__gte=start_time, start_time__lte=end_time)
        
        # 本月总时间
        all_min = timediff(start_time, end_time, 'minute')
        # 初始: 本月可用时间=本月总时间
        av_time = all_min
        # 初始: 本月可用时间(因自身原因导致故障)=本月总时间
        av_self_time = all_min
        
        for a in alarm:
            if a.type in c.self_alarm_type:
                av_self_time = av_time - timediff(a.start_time, a.end_time, 'minute')
            av_time = av_time - timediff(a.start_time, a.end_time, 'minute')
                 
        # 全部原因导致的系统可用率
        av_percent = round(((av_time + 0.0000000000001) / all_min), 6)
        # 自身原因导致的系统可用率
        av_self_percent = round(((av_self_time + 0.0000000000001) / all_min), 6)
        
        av_color = c.green if av_percent > 0.9999 else c.red
        av_self_color = c.green if av_self_percent > 0.9999 else c.red
        
        av_percent = to_percent(av_percent)
        av_self_percent = to_percent(av_self_percent)
        
        av.append({'month':start.strftime("%Y-%m-%d"), 'time':av_time, 'self_time':av_self_time, 'percent':av_percent, 'self_percent':av_self_percent,
                   'color':av_color, 'self_color':av_self_color})
        start = end_time + one_day
    return av    
Ejemplo n.º 3
0
def sys_alarm(request, month='2012-05-01'):
    t = loader.get_template('monitor/sys_alarm_table.html')
    d = datetime.datetime.strptime(month, "%Y-%m-%d")
    start_time, end_time = get_start_end_for_month(d)
    a = SysAlarm.objects.filter(start_time__gte=start_time, start_time__lte=end_time)
    alarm = []
    if a:
        for i in a:
            alarm.append({'type':i.type,
                     'start_time':i.start_time.strftime('%Y-%m-%d %H:%M:%S'),
                     'end_time':i.end_time.strftime('%Y-%m-%d %H:%M:%S'),
                     'duration': timediff(i.start_time, i.end_time, 'minute'),
                     'reason':i.reason if i.reason else '',
                     'wiki_url':i.wiki_url if i.wiki_url else '',
                     'comments':i.comments if i.comments else ''})
    
    response = HttpResponse(t.render(Context({'alarm':alarm})))
    
    # 业务监控的系统可用率
    now = datetime.datetime.now()
    expire = (now + datetime.timedelta(hours=8))
    response['Expires'] = expire.strftime('%a, %d %b %Y %H:%M:%S %Z')
    return response
Ejemplo n.º 4
0
def read_alarm_job():
    start_time = datetime.datetime.now() - datetime.timedelta(minutes=36) 
    read_failure_data = AppAvailableData.objects.filter(name='read', result=False, time__gte=start_time).values('time')
    failure_count = len(read_failure_data)
    
    if failure_count >= c.read_alarm_time: 
        try:
            start_time = read_failure_data[0]['time']
            end_time = read_failure_data[failure_count - 1]['time']
            type = 'read_bookmark'
            time = get_date_and_time()[1]
            msg = 'read failure count:%s,%s' % (str(failure_count), time)
            sms(mobile_list=c.mobile_list, message_post=msg)

            # 获取上一次的报警信息
            latest = SysAlarm.objects.filter(type=type).order_by('-gmt_create')
            if latest:
                latest = latest[0]
                # start_time是本次报警的开始时间
                # latest.end_time是上次报警的结束时间
                # 所有在算时间差的时候, start_time应该是时间差的end, latest.end_time应该是时间差的start
                tdiff = timediff(latest.end_time, start_time)
                if (not latest) or start_time > latest.end_time and tdiff > 600:
                    # 一次新的故障
                    alarm = SysAlarm(type=type, start_time=start_time, end_time=end_time)
                    alarm.save()
                else:
                    # 添加-报警的定时任务是每10min执行一次, 如果本次报警的时间和上次开始的时间<10min, 则认为是同一次故障
                    # 同一次故障的持续报警, 只需修改上次的结束时间即可
                    latest.end_time = end_time
                    latest.save()
            else:
                # 以前没有过这样类型的故障
                alarm = SysAlarm(type=type, start_time=start_time, end_time=end_time)
                alarm.save()
        except Exception, e:
            c.logger.error(e)