|
| 1 | +"""Details of a specific event, and ability to acknowledge event.""" |
| 2 | +# :license: MIT, see LICENSE for more details. |
| 3 | + |
| 4 | +import click |
| 5 | + |
| 6 | +from SoftLayer.CLI import environment |
| 7 | +from SoftLayer.CLI import formatting |
| 8 | +from SoftLayer.managers.account import AccountManager as AccountManager |
| 9 | +from SoftLayer import utils |
| 10 | + |
| 11 | + |
| 12 | +@click.command() |
| 13 | +@click.argument('identifier') |
| 14 | +@click.option('--ack', is_flag=True, default=False, |
| 15 | + help="Acknowledge Event. Doing so will turn off the popup in the control portal") |
| 16 | +@environment.pass_env |
| 17 | +def cli(env, identifier, ack): |
| 18 | + """Details of a specific event, and ability to acknowledge event.""" |
| 19 | + |
| 20 | + # Print a list of all on going maintenance |
| 21 | + manager = AccountManager(env.client) |
| 22 | + event = manager.get_event(identifier) |
| 23 | + |
| 24 | + if ack: |
| 25 | + manager.ack_event(identifier) |
| 26 | + |
| 27 | + env.fout(basic_event_table(event)) |
| 28 | + env.fout(impacted_table(event)) |
| 29 | + env.fout(update_table(event)) |
| 30 | + |
| 31 | + |
| 32 | +def basic_event_table(event): |
| 33 | + """Formats a basic event table""" |
| 34 | + table = formatting.Table(["Id", "Status", "Type", "Start", "End"], |
| 35 | + title=utils.clean_splitlines(event.get('subject'))) |
| 36 | + |
| 37 | + table.add_row([ |
| 38 | + event.get('id'), |
| 39 | + utils.lookup(event, 'statusCode', 'name'), |
| 40 | + utils.lookup(event, 'notificationOccurrenceEventType', 'keyName'), |
| 41 | + utils.clean_time(event.get('startDate')), |
| 42 | + utils.clean_time(event.get('endDate')) |
| 43 | + ]) |
| 44 | + |
| 45 | + return table |
| 46 | + |
| 47 | + |
| 48 | +def impacted_table(event): |
| 49 | + """Formats a basic impacted resources table""" |
| 50 | + table = formatting.Table([ |
| 51 | + "Type", "Id", "Hostname", "PrivateIp", "Label" |
| 52 | + ]) |
| 53 | + for item in event.get('impactedResources', []): |
| 54 | + table.add_row([ |
| 55 | + item.get('resourceType'), |
| 56 | + item.get('resourceTableId'), |
| 57 | + item.get('hostname'), |
| 58 | + item.get('privateIp'), |
| 59 | + item.get('filterLabel') |
| 60 | + ]) |
| 61 | + return table |
| 62 | + |
| 63 | + |
| 64 | +def update_table(event): |
| 65 | + """Formats a basic event update table""" |
| 66 | + update_number = 0 |
| 67 | + for update in event.get('updates', []): |
| 68 | + header = "======= Update #%s on %s =======" % (update_number, utils.clean_time(update.get('startDate'))) |
| 69 | + click.secho(header, fg='green') |
| 70 | + update_number = update_number + 1 |
| 71 | + text = update.get('contents') |
| 72 | + # deals with all the \r\n from the API |
| 73 | + click.secho(utils.clean_splitlines(text)) |
0 commit comments