Пример #1
0
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()
Пример #2
0
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
Пример #3
0
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()
Пример #4
0
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
Пример #5
0
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