def process_warn_rules(sakuya_db, chart_id, warns): try: cur = {} for row in sakuya_db.query(WarnRules).filter_by(chart_id=chart_id): cur[row.id] = row for item in warns: id = item.pop('id') if id in cur: row = cur.pop(id) row.content = json.dumps(item) else: row = WarnRules() row.chart_id = chart_id row.content = json.dumps(item) sakuya_db.add(row) for row in cur.values(): sakuya_db.delete(row) sakuya_db.commit() for row in sakuya_db.query(Follows).filter_by(cid=chart_id, recv_warning=True): if row.recv_rules == 'all': continue if not row.recv_rules: continue recv_rules = [] for i in row.get_recv_rules(): if i not in cur.keys(): recv_rules.append(i) row.recv_rules = ','.join(str(i) for i in recv_rules) sakuya_db.commit() except Exception, e: traceback.print_exc() sakuya_db.rollback()
def main(): session = sessionmaker(bind=engine_sakuya_db)() for row in session.\ query(Charts).\ filter_by(alert_enable=1): warn = row.get_ext().get('warn') if not warn: row.alert_enable = 0 continue for item in warn: r = WarnRules() r.chart_id = row.id r.content = json.dumps({ 'duration_start': item[0], 'duration_end': item[1], 'type': item[2], 'hwm_warning': item[3], 'hwm_critical': item[4], 'lwm_warning': item[5], 'lwm_critical': item[6], 'latency': item[7], 'interval': item[8] }) session.add(r) print row.id, len(warn) session.commit() cnt = 0 for row in session.\ query(Follows).\ filter_by(recv_warning=1): row.recv_rules = 'all' cnt += 1 session.commit() print 'update %d follows' % cnt
def main(): parser = argparse.ArgumentParser() parser.add_argument('-c', '--chart-id', action='append', type=int, required=True) parser.add_argument('-ds', '--duration-start', default='00:00') parser.add_argument('-de', '--duration-end', default='23:59') parser.add_argument('-t', '--type', choices=('HWM', 'LWM', 'RANGE'), required=True) parser.add_argument('-hw', '--hwm-warning', type=int) parser.add_argument('-hc', '--hwm-critical', type=int) parser.add_argument('-lw', '--lwm-warning', type=int) parser.add_argument('-lc', '--lwm-critical', type=int) parser.add_argument('-l', '--latency', type=int, default=5) parser.add_argument('-i', '--interval', type=int, default=5) args = parser.parse_args() try: duration_start = datetime.datetime.strptime(args.duration_start, '%H:%M') duration_end = datetime.datetime.strptime(args.duration_end, '%H:%M') except Exception: print 'duration start/end error (HH:MM)' return if args.type == 'HWM' and (args.hwm_warning is None or args.hwm_critical is None): print 'hwm warning/critical error' return elif args.type == 'LWM' and (args.lwm_warning is None or args.lwm_critical is None): print 'lwm warning/critical error' return elif args.type == 'RANGE' and (args.hwm_warning is None or args.hwm_critical is None or args.lwm_warning is None or args.lwm_critical is None): print 'lwm/hwm warning/critical error' return if args.latency <= 0 or args.interval <= 0: print 'latency or interval not positive.' return content = { 'duration_start': args.duration_start, 'duration_end': args.duration_end, 'type': args.type, 'hwm_warning': args.hwm_warning, 'hwm_critical': args.hwm_critical, 'lwm_warning': args.lwm_warning, 'lwm_critical': args.lwm_critical, 'latency': args.latency, 'interval': args.interval } session = sessionmaker(bind=engine_sakuya_db)() cnt = 0 for chart_id in args.chart_id: chart = session.query(Charts).get(chart_id) if chart is None: print 'chart %d not found' % chart_id continue chart.alert_enable = 1 row = WarnRules() row.chart_id = chart_id row.content = json.dumps(content) session.add(row) cnt += 1 session.commit() print 'added %d rules' % cnt