Esempio n. 1
0
def cli(obj, ids, filters):
    """Show raw data for alerts."""
    client = obj['client']
    if ids:
        query = [('id', x) for x in ids]
    else:
        query = build_query(filters)
    alerts = client.search(query)

    headers = {'id': 'ID', 'rawData': 'RAW DATA'}
    click.echo(
        tabulate([{'id': a.id, 'rawData': a.raw_data} for a in alerts], headers=headers, tablefmt=obj['output']))
Esempio n. 2
0
def cli(obj, ids, filters, tags):
    """Add tags to alerts."""
    client = obj['client']
    if ids:
        total = len(ids)
    else:
        query = build_query(filters)
        total, _, _ = client.get_count(query)
        ids = [a.id for a in client.get_alerts(query)]

    with click.progressbar(ids, label='Tagging {} alerts'.format(total)) as bar:
        for id in bar:
            client.tag_alert(id, tags)
Esempio n. 3
0
def cli(obj, ids, filters, text):
    """Set alert status to 'open'."""
    client = obj['client']
    if ids:
        total = len(ids)
    else:
        query = build_query(filters)
        total, _, _ = client.get_count(query)
        ids = [a.id for a in client.get_alerts(query)]

    with click.progressbar(ids, label='Un-shelving {} alerts'.format(total)) as bar:
        for id in bar:
            client.action(id, action='unshelve', text=text or 'status changed using CLI')
Esempio n. 4
0
def cli(obj, ids, filters, attributes):
    """Update alert attributes."""
    client = obj['client']
    if ids:
        total = len(ids)
    else:
        query = build_query(filters)
        total, _, _ = client.get_count(query)
        ids = [a.id for a in client.get_alerts(query)]

    with click.progressbar(ids, label='Updating {} alerts'.format(total)) as bar:
        for id in bar:
            client.update_attributes(id, dict(a.split('=') for a in attributes))
Esempio n. 5
0
def cli(obj, ids, query, filters, text):
    """Set alert status to 'closed'."""
    client = obj['client']
    if ids:
        total = len(ids)
    else:
        if query:
            query = [('q', query)]
        else:
            query = build_query(filters)
        total, _, _ = client.get_count(query)
        ids = [a.id for a in client.get_alerts(query)]

    action_progressbar(client, action='close', ids=ids, label=f'Closing {total} alerts', text=text)
Esempio n. 6
0
def cli(obj, ids, query, filters):
    """Show raw data for alerts."""
    client = obj['client']
    if ids:
        query = [('id', x) for x in ids]
    elif query:
        query = [('q', query)]
    else:
        query = build_query(filters)
    alerts = client.search(query)

    headers = {'id': 'ID', 'rawData': 'RAW DATA'}
    click.echo(
        tabulate([{'id': a.id, 'rawData': a.raw_data} for a in alerts], headers=headers, tablefmt=obj['output']))
Esempio n. 7
0
def cli(obj, ids, query, filters, text):
    """Set alert status to 'open'."""
    client = obj['client']
    if ids:
        total = len(ids)
    else:
        if query:
            query = [('q', query)]
        else:
            query = build_query(filters)
        total, _, _ = client.get_count(query)
        ids = [a.id for a in client.get_alerts(query)]

    action_progressbar(client, 'unshelve', ids, label='Un-shelving {} alerts'.format(total), text=text)
Esempio n. 8
0
def cli(obj, action, ids, query, filters, text):
    """Take action on alert'."""
    client = obj['client']
    if ids:
        total = len(ids)
    else:
        if query:
            query = [('q', query)]
        else:
            query = build_query(filters)
        total, _, _ = client.get_count(query)
        ids = [a.id for a in client.get_alerts(query)]

    label = 'Action ({}) {} alerts'.format(action, total)
    action_progressbar(client, action=action, ids=ids, label=label, text=text)
Esempio n. 9
0
def cli(obj, ids, filters):
    """Delete alerts."""
    client = obj['client']
    if ids:
        total = len(ids)
    else:
        if not filters:
            click.confirm('Deleting all alerts. Do you want to continue?', abort=True)
        query = build_query(filters)
        total, _, _ = client.get_count(query)
        ids = [a.id for a in client.get_alerts(query)]

    with click.progressbar(ids, label='Deleting {} alerts'.format(total)) as bar:
        for id in bar:
            client.delete_alert(id)
Esempio n. 10
0
def cli(obj, ids, query, filters, tags):
    """Add tags to alerts."""
    client = obj['client']
    if ids:
        total = len(ids)
    else:
        if query:
            query = [('q', query)]
        else:
            query = build_query(filters)
        total, _, _ = client.get_count(query)
        ids = [a.id for a in client.get_alerts(query)]

    with click.progressbar(ids, label='Tagging {} alerts'.format(total)) as bar:
        for id in bar:
            client.tag_alert(id, tags)
Esempio n. 11
0
def cli(obj, ids, query, filters, text):
    """Add note to alerts."""
    client = obj['client']
    if ids:
        total = len(ids)
    else:
        if query:
            query = [('q', query)]
        else:
            query = build_query(filters)
        total, _, _ = client.get_count(query)
        ids = [a.id for a in client.get_alerts(query)]

    with click.progressbar(ids, label='Add note to {} alerts'.format(total)) as bar:
        for id in bar:
            client.add_note(id, note=text)
Esempio n. 12
0
def cli(obj, ids, query, filters, text):
    """Set alert status to 'open'."""
    client = obj['client']
    if ids:
        total = len(ids)
    else:
        if query:
            query = [('q', query)]
        else:
            query = build_query(filters)
        total, _, _ = client.get_count(query)
        ids = [a.id for a in client.get_alerts(query)]

    with click.progressbar(ids, label='Un-acking {} alerts'.format(total)) as bar:
        for id in bar:
            client.action(id, action='unack', text=text or 'status changed using CLI')
Esempio n. 13
0
def cli(obj, ids, query, filters, tags):
    """Remove tags from alerts."""
    client = obj['client']
    if ids:
        total = len(ids)
    else:
        if query:
            query = [('q', query)]
        else:
            query = build_query(filters)
        total, _, _ = client.get_count(query)
        ids = [a.id for a in client.get_alerts(query)]

    with click.progressbar(ids, label=f'Untagging {total} alerts') as bar:
        for id in bar:
            client.untag_alert(id, tags)
Esempio n. 14
0
def cli(obj, action, ids, query, filters, text):
    """Take action on alert'."""
    client = obj['client']
    if ids:
        total = len(ids)
    else:
        if query:
            query = [('q', query)]
        else:
            query = build_query(filters)
        total, _, _ = client.get_count(query)
        ids = [a.id for a in client.get_alerts(query)]

    action_text = re.sub('([A-Z])', r' \1', action).title()  # 'createIssue' => 'Create Issue'
    with click.progressbar(ids, label='Action {} {} alerts'.format(action, total)) as bar:
        for id in bar:
            client.action(id, action=action, text=text or '{} using CLI'.format(action_text))
Esempio n. 15
0
def cli(obj, action, ids, query, filters, text):
    """Take action on alert'."""
    client = obj['client']
    if ids:
        total = len(ids)
    else:
        if query:
            query = [('q', query)]
        else:
            query = build_query(filters)
        total, _, _ = client.get_count(query)
        ids = [a.id for a in client.get_alerts(query)]

    action_text = re.sub('([A-Z])', r' \1',
                         action).title()  # 'createIssue' => 'Create Issue'
    label = 'Action {} {} alerts'.format(action, total)
    text = text or '{} using CLI'.format(action_text)
    action_progressbar(client, action=action, ids=ids, label=label, text=text)
Esempio n. 16
0
def cli(obj, ids, alert_ids, query, filters, text, delete):
    """Add or delete note to alerts."""
    client = obj['client']
    if delete:
        client.delete_alert_note(*delete)
    else:
        if alert_ids:
            total = len(alert_ids)
        else:
            if query:
                query = [('q', query)]
            else:
                query = build_query(filters)
            total, _, _ = client.get_count(query)
            alert_ids = [a.id for a in client.get_alerts(query)]

        with click.progressbar(
                alert_ids, label='Add note to {} alerts'.format(total)) as bar:
            for id in bar:
                client.alert_note(id, text=text)
Esempio n. 17
0
def cli(obj, ids, query, filters):
    """Show status and severity changes for alerts."""
    client = obj['client']

    if obj['output'] == 'json':
        r = client.http.get('/alerts/history')
        click.echo(
            json.dumps(r['history'],
                       sort_keys=True,
                       indent=4,
                       ensure_ascii=False))
    else:
        timezone = obj['timezone']
        if ids:
            query = [('id', x) for x in ids]
        elif query:
            query = [('q', query)]
        else:
            query = build_query(filters)
        alerts = client.get_history(query)

        headers = {
            'id': 'ID',
            'updateTime': 'LAST UPDATED',
            'severity': 'SEVERITY',
            'status': 'STATUS',
            'type': 'TYPE',
            'customer': 'CUSTOMER',
            'environment': 'ENVIRONMENT',
            'service': 'SERVICE',
            'resource': 'RESOURCE',
            'group': 'GROUP',
            'event': 'EVENT',
            'value': 'VALUE',
            'text': 'TEXT'
        }
        click.echo(
            tabulate([a.tabular(timezone) for a in alerts],
                     headers=headers,
                     tablefmt=obj['output']))
Esempio n. 18
0
def cli(obj, ids, query, filters):
    """Show status and severity changes for alerts."""
    client = obj['client']

    if obj['output'] == 'json':
        r = client.http.get('/alerts/history')
        click.echo(json.dumps(r['history'], sort_keys=True, indent=4, ensure_ascii=False))
    else:
        timezone = obj['timezone']
        if ids:
            query = [('id', x) for x in ids]
        elif query:
            query = [('q', query)]
        else:
            query = build_query(filters)
        alerts = client.get_history(query)

        headers = {'id': 'ID', 'updateTime': 'LAST UPDATED', 'severity': 'SEVERITY', 'status': 'STATUS',
                   'type': 'TYPE', 'customer': 'CUSTOMER', 'environment': 'ENVIRONMENT', 'service': 'SERVICE',
                   'resource': 'RESOURCE', 'group': 'GROUP', 'event': 'EVENT', 'value': 'VALUE', 'text': 'TEXT'}
        click.echo(
            tabulate([a.tabular(timezone) for a in alerts], headers=headers, tablefmt=obj['output']))
Esempio n. 19
0
def cli(obj, alert_ids, query, filters, text, delete):
    """
    Add or delete note to alerts.

    EXAMPLES

        Add a note to an alert.

            $ alerta note --alert-ids <alert-id> --text <note>

        List notes for an alert.

            $ alerta notes --alert-ids <alert-id>

        Delete a note for an alert.

            $ alerta note -D <alert-id> <note-id>
    """
    client = obj['client']
    if delete:
        client.delete_alert_note(*delete)
    else:
        if alert_ids:
            total = len(alert_ids)
        else:
            if query:
                query = [('q', query)]
            else:
                query = build_query(filters)
            total, _, _ = client.get_count(query)
            alert_ids = [a.id for a in client.get_alerts(query)]

        with click.progressbar(alert_ids,
                               label=f'Add note to {total} alerts') as bar:
            for id in bar:
                client.alert_note(id, text=text)
Esempio n. 20
0
def cli(obj, ids, query, filters, display, from_date=None):
    """Query for alerts based on search filter criteria."""
    client = obj['client']
    timezone = obj['timezone']
    if ids:
        query = [('id', x) for x in ids]
    elif query:
        query = [('q', query)]
    else:
        query = build_query(filters)
    if from_date:
        query.append(('from-date', from_date))

    r = client.http.get('/alerts', query, page=1, page_size=1000)

    if obj['output'] == 'json':
        click.echo(json.dumps(r['alerts'], sort_keys=True, indent=4, ensure_ascii=False))
    elif obj['output'] in ['json_lines', 'jsonl', 'ndjson']:
        for alert in r['alerts']:
            click.echo(json.dumps(alert, ensure_ascii=False))
    else:
        alerts = [Alert.parse(a) for a in r['alerts']]
        last_time = r['lastTime']
        auto_refresh = r['autoRefresh']

        if display == 'oneline':
            headers = {'id': 'ID', 'lastReceiveTime': 'LAST RECEIVED', 'severity': 'SEVERITY', 'status': 'STATUS',
                       'duplicateCount': 'DUPL', 'customer': 'CUSTOMER', 'environment': 'ENVIRONMENT', 'service': 'SERVICE',
                       'resource': 'RESOURCE', 'group': 'GROUP', 'event': 'EVENT', 'value': 'VALUE', 'text': 'DESCRIPTION'}

            data = [{k: v for k, v in a.tabular(timezone).items() if k in headers.keys()} for a in alerts]
            click.echo(tabulate(data, headers=headers, tablefmt=obj['output']))

        else:
            for alert in reversed(alerts):
                color = COLOR_MAP.get(alert.severity, {'fg': 'white'})
                click.secho('{}|{}|{}|{:5d}|{}|{:<5s}|{:<10s}|{:<18s}|{:12s}|{:16s}|{:12s}'.format(
                    alert.id[0:8],
                    DateTime.localtime(alert.last_receive_time, timezone),
                    alert.severity,
                    alert.duplicate_count,
                    alert.customer or '-',
                    alert.environment,
                    ','.join(alert.service),
                    alert.resource,
                    alert.group,
                    alert.event,
                    alert.value or 'n/a'), fg=color['fg'])
                click.secho(f'   |{alert.text}', fg=color['fg'])

                if display == 'full':
                    click.secho('    severity   | {} -> {}'.format(alert.previous_severity,
                                                                   alert.severity), fg=color['fg'])
                    click.secho(f'    trend      | {alert.trend_indication}', fg=color['fg'])
                    click.secho(f'    status     | {alert.status}', fg=color['fg'])
                    click.secho(f'    resource   | {alert.resource}', fg=color['fg'])
                    click.secho(f'    group      | {alert.group}', fg=color['fg'])
                    click.secho(f'    event      | {alert.event}', fg=color['fg'])
                    click.secho(f'    value      | {alert.value}', fg=color['fg'])
                    click.secho('    tags       | {}'.format(' '.join(alert.tags)), fg=color['fg'])

                    for key, value in alert.attributes.items():
                        click.secho(f'    {key.ljust(10)} | {value}', fg=color['fg'])

                    latency = alert.receive_time - alert.create_time

                    click.secho('        time created  | {}'.format(
                        DateTime.localtime(alert.create_time, timezone)), fg=color['fg'])
                    click.secho('        time received | {}'.format(
                        DateTime.localtime(alert.receive_time, timezone)), fg=color['fg'])
                    click.secho('        last received | {}'.format(
                        DateTime.localtime(alert.last_receive_time, timezone)), fg=color['fg'])
                    click.secho(f'        latency       | {latency.microseconds / 1000}ms', fg=color['fg'])
                    click.secho(f'        timeout       | {alert.timeout}s', fg=color['fg'])

                    click.secho(f'            alert id     | {alert.id}', fg=color['fg'])
                    click.secho(f'            last recv id | {alert.last_receive_id}', fg=color['fg'])
                    click.secho(f'            customer     | {alert.customer}', fg=color['fg'])
                    click.secho(f'            environment  | {alert.environment}', fg=color['fg'])
                    click.secho('            service      | {}'.format(','.join(alert.service)), fg=color['fg'])
                    click.secho(f'            resource     | {alert.resource}', fg=color['fg'])
                    click.secho(f'            type         | {alert.event_type}', fg=color['fg'])
                    click.secho(f'            repeat       | {alert.repeat}', fg=color['fg'])
                    click.secho(f'            origin       | {alert.origin}', fg=color['fg'])
                    click.secho('            correlate    | {}'.format(','.join(alert.correlate)), fg=color['fg'])

        return auto_refresh, last_time
Esempio n. 21
0
def cli(obj, ids, filters, display, from_date=None):
    """Query for alerts based on search filter criteria."""
    client = obj['client']
    timezone = obj['timezone']
    if ids:
        query = [('id', x) for x in ids]
    else:
        query = build_query(filters)
    if from_date:
        query.append(('from-date', from_date))

    r = client.http.get('/alerts', query)

    if obj['output'] == 'json':
        click.echo(
            json.dumps(r['alerts'],
                       sort_keys=True,
                       indent=4,
                       ensure_ascii=False))
    elif obj['output'] in ['json_lines', 'jsonl', 'ndjson']:
        for alert in r['alerts']:
            click.echo(json.dumps(alert, ensure_ascii=False))
    else:
        alerts = [Alert.parse(a) for a in r['alerts']]
        last_time = r['lastTime']
        auto_refresh = r['autoRefresh']

        if display == 'tabular':
            headers = {
                'id': 'ID',
                'lastReceiveTime': 'LAST RECEIVED',
                'severity': 'SEVERITY',
                'status': 'STATUS',
                'duplicateCount': 'DUPL',
                'customer': 'CUSTOMER',
                'environment': 'ENVIRONMENT',
                'service': 'SERVICE',
                'resource': 'RESOURCE',
                'group': 'GROUP',
                'event': 'EVENT',
                'value': 'VALUE',
                'text': 'TEXT'
            }
            click.echo(
                tabulate([a.tabular('summary', timezone) for a in alerts],
                         headers=headers,
                         tablefmt=obj['output']))
        elif display in ['compact', 'details']:
            for alert in reversed(alerts):
                color = COLOR_MAP.get(alert.severity, {'fg': 'white'})
                click.secho(
                    '{0}|{1}|{2}|{3:5d}|{4}|{5:<5s}|{6:<10s}|{7:<18s}|{8:12s}|{9:16s}|{10:12s}'
                    .format(
                        alert.id[0:8],
                        DateTime.localtime(alert.last_receive_time, timezone),
                        alert.severity, alert.duplicate_count, alert.customer
                        or "-", alert.environment, ','.join(alert.service),
                        alert.resource, alert.group, alert.event, alert.value
                        or "n/a"),
                    fg=color['fg'])
                click.secho('   |{}'.format(alert.text), fg=color['fg'])

                if display == 'details':
                    click.secho('    severity   | {} -> {}'.format(
                        alert.previous_severity, alert.severity),
                                fg=color['fg'])
                    click.secho('    trend      | {}'.format(
                        alert.trend_indication),
                                fg=color['fg'])
                    click.secho('    status     | {}'.format(alert.status),
                                fg=color['fg'])
                    click.secho('    resource   | {}'.format(alert.resource),
                                fg=color['fg'])
                    click.secho('    group      | {}'.format(alert.group),
                                fg=color['fg'])
                    click.secho('    event      | {}'.format(alert.event),
                                fg=color['fg'])
                    click.secho('    value      | {}'.format(alert.value),
                                fg=color['fg'])
                    click.secho('    tags       | {}'.format(' '.join(
                        alert.tags)),
                                fg=color['fg'])

                    for key, value in alert.attributes.items():
                        click.secho('    {} | {}'.format(key.ljust(10), value),
                                    fg=color['fg'])

                    latency = alert.receive_time - alert.create_time

                    click.secho('        time created  | {}'.format(
                        DateTime.localtime(alert.create_time, timezone)),
                                fg=color['fg'])
                    click.secho('        time received | {}'.format(
                        DateTime.localtime(alert.receive_time, timezone)),
                                fg=color['fg'])
                    click.secho('        last received | {}'.format(
                        DateTime.localtime(alert.last_receive_time, timezone)),
                                fg=color['fg'])
                    click.secho('        latency       | {}ms'.format(
                        (latency.microseconds / 1000)),
                                fg=color['fg'])
                    click.secho('        timeout       | {}s'.format(
                        alert.timeout),
                                fg=color['fg'])

                    click.secho('            alert id     | {}'.format(
                        alert.id),
                                fg=color['fg'])
                    click.secho('            last recv id | {}'.format(
                        alert.last_receive_id),
                                fg=color['fg'])
                    click.secho('            customer     | {}'.format(
                        alert.customer),
                                fg=color['fg'])
                    click.secho('            environment  | {}'.format(
                        alert.environment),
                                fg=color['fg'])
                    click.secho('            service      | {}'.format(
                        ','.join(alert.service)),
                                fg=color['fg'])
                    click.secho('            resource     | {}'.format(
                        alert.resource),
                                fg=color['fg'])
                    click.secho('            type         | {}'.format(
                        alert.event_type),
                                fg=color['fg'])
                    click.secho('            repeat       | {}'.format(
                        alert.repeat),
                                fg=color['fg'])
                    click.secho('            origin       | {}'.format(
                        alert.origin),
                                fg=color['fg'])
                    click.secho('            correlate    | {}'.format(
                        ','.join(alert.correlate)),
                                fg=color['fg'])

        return auto_refresh, last_time
Esempio n. 22
0
def cli(obj, ids, query, filters, display, from_date=None):
    """Query for alerts based on search filter criteria."""
    client = obj['client']
    timezone = obj['timezone']
    if ids:
        query = [('id', x) for x in ids]
    elif query:
        query = [('q', query)]
    else:
        query = build_query(filters)
    if from_date:
        query.append(('from-date', from_date))

    r = client.http.get('/alerts', query, page=1, page_size=1000)

    if obj['output'] == 'json':
        click.echo(json.dumps(r['alerts'], sort_keys=True, indent=4, ensure_ascii=False))
    elif obj['output'] in ['json_lines', 'jsonl', 'ndjson']:
        for alert in r['alerts']:
            click.echo(json.dumps(alert, ensure_ascii=False))
    else:
        alerts = [Alert.parse(a) for a in r['alerts']]
        last_time = r['lastTime']
        auto_refresh = r['autoRefresh']

        if display == 'tabular':
            headers = {'id': 'ID', 'lastReceiveTime': 'LAST RECEIVED', 'severity': 'SEVERITY', 'status': 'STATUS',
                       'duplicateCount': 'DUPL', 'customer': 'CUSTOMER', 'environment': 'ENVIRONMENT', 'service': 'SERVICE',
                       'resource': 'RESOURCE', 'group': 'GROUP', 'event': 'EVENT', 'value': 'VALUE', 'text': 'TEXT'}
            click.echo(tabulate([a.tabular('summary', timezone)
                                 for a in alerts], headers=headers, tablefmt=obj['output']))
        elif display in ['compact', 'details']:
            for alert in reversed(alerts):
                color = COLOR_MAP.get(alert.severity, {'fg': 'white'})
                click.secho('{}|{}|{}|{:5d}|{}|{:<5s}|{:<10s}|{:<18s}|{:12s}|{:16s}|{:12s}'.format(
                    alert.id[0:8],
                    DateTime.localtime(alert.last_receive_time, timezone),
                    alert.severity,
                    alert.duplicate_count,
                    alert.customer or '-',
                    alert.environment,
                    ','.join(alert.service),
                    alert.resource,
                    alert.group,
                    alert.event,
                    alert.value or 'n/a'), fg=color['fg'])
                click.secho('   |{}'.format(alert.text), fg=color['fg'])

                if display == 'details':
                    click.secho('    severity   | {} -> {}'.format(alert.previous_severity,
                                                                   alert.severity), fg=color['fg'])
                    click.secho('    trend      | {}'.format(alert.trend_indication), fg=color['fg'])
                    click.secho('    status     | {}'.format(alert.status), fg=color['fg'])
                    click.secho('    resource   | {}'.format(alert.resource), fg=color['fg'])
                    click.secho('    group      | {}'.format(alert.group), fg=color['fg'])
                    click.secho('    event      | {}'.format(alert.event), fg=color['fg'])
                    click.secho('    value      | {}'.format(alert.value), fg=color['fg'])
                    click.secho('    tags       | {}'.format(' '.join(alert.tags)), fg=color['fg'])

                    for key, value in alert.attributes.items():
                        click.secho('    {} | {}'.format(key.ljust(10), value), fg=color['fg'])

                    latency = alert.receive_time - alert.create_time

                    click.secho('        time created  | {}'.format(
                        DateTime.localtime(alert.create_time, timezone)), fg=color['fg'])
                    click.secho('        time received | {}'.format(
                        DateTime.localtime(alert.receive_time, timezone)), fg=color['fg'])
                    click.secho('        last received | {}'.format(
                        DateTime.localtime(alert.last_receive_time, timezone)), fg=color['fg'])
                    click.secho('        latency       | {}ms'.format((latency.microseconds / 1000)), fg=color['fg'])
                    click.secho('        timeout       | {}s'.format(alert.timeout), fg=color['fg'])

                    click.secho('            alert id     | {}'.format(alert.id), fg=color['fg'])
                    click.secho('            last recv id | {}'.format(alert.last_receive_id), fg=color['fg'])
                    click.secho('            customer     | {}'.format(alert.customer), fg=color['fg'])
                    click.secho('            environment  | {}'.format(alert.environment), fg=color['fg'])
                    click.secho('            service      | {}'.format(','.join(alert.service)), fg=color['fg'])
                    click.secho('            resource     | {}'.format(alert.resource), fg=color['fg'])
                    click.secho('            type         | {}'.format(alert.event_type), fg=color['fg'])
                    click.secho('            repeat       | {}'.format(alert.repeat), fg=color['fg'])
                    click.secho('            origin       | {}'.format(alert.origin), fg=color['fg'])
                    click.secho('            correlate    | {}'.format(','.join(alert.correlate)), fg=color['fg'])

        return auto_refresh, last_time