#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
Агрегирует заданный "главный" сервис (mission_critical) с заданным набором сервисов.
Например:

gen-mission-critical-checks --format=json --regex '^unispace$|^cron$'
{"status": "OK", "description": "aggr_desc: cron;0;OK --- mission_critical;0;autogenerated from nodata_mode", "service": "cron.mission_critical"}
{"status": "OK", "description": "aggr_desc: mission_critical;0;autogenerated from nodata_mode --- unispace;0;OK", "service": "unispace.mission_critical"}
"""

import argparse
import sys
from direct_juggler.juggler import load_events, aggregate_events, filter_events, queue_events, events_to_json

SERVICE = 'mission_critical'

if __name__ == '__main__':
    parser = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter, description=__doc__)
    parser.add_argument('--regex', action='store_true', default=False, help='Интерпретировать набор сервисов для агрегации как regexp (default: False)')
    parser.add_argument('--juggler', action='store_true', default=False, help='Отправить событие в juggler (default: False)')
    parser.add_argument('services', type=str, nargs='+', help='Набор локальных сервисов для агрегации, через пробел')
    args = parser.parse_args()

    jclient_events = load_events()
    events = filter_events(jclient_events, args.services, nodata_mode='force_ok', as_regex=args.regex)

    main_event = filter_events(jclient_events, [SERVICE], nodata_mode='force_ok', as_regex=False)
    # по идее, другие ситуации невозможны с force_ok и строгому поиску по SERVICE
    assert events and len(main_event) == 1
    main_event = main_event[0]

    aggr_events = []
    for event in events:
        event = aggregate_events([event, main_event], 'logic_and', '%s.%s' % (event['service'], main_event['service']))
        aggr_events.append(event)

    if args.juggler:
        queue_events(aggr_events)
    else:
        print events_to_json(aggr_events)
