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")
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
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
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)