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']))
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)
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')
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))
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)
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']))
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)
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)
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)
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)
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)
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')
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)
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))
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)
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)
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']))
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']))
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)
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
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
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