Skip to content

Commit 096f10e

Browse files
authored
Lots of general fixes to commands (#119)
1 parent 24cc476 commit 096f10e

17 files changed

Lines changed: 98 additions & 63 deletions

alertaclient/api.py

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import requests
88
from requests.auth import AuthBase
99

10-
from alertaclient.exceptions import AuthError, UnknownError
10+
from alertaclient.exceptions import UnknownError
1111
from alertaclient.models.alert import Alert
1212
from alertaclient.models.blackout import Blackout
1313
from alertaclient.models.customer import Customer
@@ -126,14 +126,15 @@ def get_services(self, query=None):
126126
return counts['services']
127127

128128
# Blackouts
129-
def create_blackout(self, environment, service=None, resource=None, event=None, group=None, tags=None, start=None, duration=None):
129+
def create_blackout(self, environment, service=None, resource=None, event=None, group=None, tags=None, customer=None, start=None, duration=None):
130130
data = {
131131
'environment': environment,
132132
'service': service or list(),
133133
'resource': resource,
134134
'event': event,
135135
'group': group,
136136
'tags': tags or list(),
137+
'customer': customer,
137138
'startTime': start,
138139
'duration': duration
139140
}
@@ -221,16 +222,25 @@ def delete_perm(self, id):
221222
return self.http.delete('/perm/%s' % id)
222223

223224
# Users
225+
def create_user(self, name, email, password, status, roles=None, attributes=None, text='', email_verified=False):
226+
data = {
227+
'name': name,
228+
'email': email,
229+
'password': password,
230+
'status': status,
231+
'roles': roles or list(),
232+
'attributes': attributes or dict(),
233+
'text': text,
234+
'email_verified': email_verified
235+
}
236+
return self.http.post('/auth/signup', data)
237+
224238
def login(self, username, password):
225239
data = {
226240
'username': username,
227241
'password': password
228242
}
229-
r = self.http.post('/auth/login', data)
230-
if 'token' in r:
231-
return r['token']
232-
else:
233-
raise AuthError
243+
return self.http.post('/auth/login', data)
234244

235245
def get_users(self, query=None):
236246
r = self.http.get('/users', query)

alertaclient/commands/cmd_blackout.py

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,37 @@
44

55

66
@click.command('blackout', short_help='Suppress alerts')
7-
@click.option('--environment', '-E', metavar='ENVIRONMENT')
8-
@click.option('--service', '-S', metavar='SERVICE', multiple=True)
9-
@click.option('--resource', '-r', metavar='RESOURCE')
10-
@click.option('--event', '-e', metavar='EVENT')
11-
@click.option('--group', '-g', metavar='GROUP')
12-
@click.option('--tag', '-T', 'tags', metavar='TAG', multiple=True)
13-
@click.option('--start', metavar='DATETIME')
14-
@click.option('--duration', metavar='EXPIRES')
7+
@click.option('--environment', '-E', metavar='ENVIRONMENT', help='Environment eg. Production, Development')
8+
@click.option('--service', '-S', metavar='SERVICE', multiple=True, help='List of affected services eg. app name, Web, Network, Storage, Database, Security')
9+
@click.option('--resource', '-r', metavar='RESOURCE', help='Resource under alarm')
10+
@click.option('--event', '-e', metavar='EVENT', help='Event name')
11+
@click.option('--group', '-g', metavar='GROUP', help='Group event by type eg. OS, Performance')
12+
@click.option('--tag', '-T', 'tags', multiple=True, metavar='TAG', help='List of tags eg. London, os:linux, AWS/EC2')
13+
@click.option('--customer', metavar='STRING', help='Customer (Admin only)')
14+
@click.option('--start', metavar='DATETIME', help='Start time in ISO8601 eg. 2018-02-01T12:00:00.000Z')
15+
@click.option('--duration', metavar='SECONDS', type=int, help='Blackout period in seconds')
1516
@click.option('--delete', '-D', help='Delete blackout using ID')
1617
@click.pass_obj
17-
def cli(obj, environment, service, resource, event, group, tags, start, duration, delete):
18+
def cli(obj, environment, service, resource, event, group, tags, customer, start, duration, delete):
1819
"""Suppress alerts for specified duration based on alert attributes."""
1920
client = obj['client']
2021
if delete:
21-
if environment or service or resource or event or group or tags or start or duration:
22-
raise click.UsageError('Option "--delete" is mutually exclusive.')
2322
client.delete_blackout(delete)
2423
else:
2524
if not environment:
2625
raise click.UsageError('Missing option "--environment" / "-E".')
2726
try:
28-
blackout = client.create_blackout(environment, service, resource, event, group, tags, start, duration)
27+
blackout = client.create_blackout(
28+
environment=environment,
29+
service=service,
30+
resource=resource,
31+
event=event,
32+
group=group,
33+
tags=tags,
34+
customer=customer,
35+
start=start,
36+
duration=duration
37+
)
2938
except Exception as e:
3039
click.echo('ERROR: {}'.format(e))
3140
sys.exit(1)

alertaclient/commands/cmd_close.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
@click.command('ack', short_help='Close alerts')
77
@click.option('--ids', '-i', metavar='UUID', multiple=True, help='List of alert IDs (can use short 8-char id)')
88
@click.option('--filter', '-f', 'filters', metavar='FILTER', multiple=True, help='KEY=VALUE eg. serverity=warning resource=web')
9-
@click.option('--text')
9+
@click.option('--text', help='Message associated with status change')
1010
@click.pass_obj
1111
def cli(obj, ids, filters, text):
1212
"""Set alert status to 'closed'."""

alertaclient/commands/cmd_customer.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,12 @@
66
@click.command('customer', short_help='Add customer lookup')
77
@click.option('--customer', help='customer name')
88
@click.option('--org', '--group', '--domain', '--role', 'match', help='Used to lookup customer')
9-
@click.option('--delete', '-D', metavar='ID', help='Delete customer lookup')
9+
@click.option('--delete', '-D', metavar='ID', help='Delete customer lookup using ID')
1010
@click.pass_obj
1111
def cli(obj, customer, match, delete):
1212
"""Add group/org/domain/role-to-customer or delete lookup entry."""
1313
client = obj['client']
1414
if delete:
15-
if customer or match:
16-
raise click.UsageError('Option "--delete" is mutually exclusive.')
1715
client.delete_customer(delete)
1816
else:
1917
if not customer:

alertaclient/commands/cmd_heartbeat.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,14 @@
1010
@click.command('heartbeat', short_help='Send a heartbeat')
1111
@click.option('--origin', '-O', metavar='ORIGIN', default='{}/{}'.format(prog, platform.uname()[1]), help='Origin of heartbeat.')
1212
@click.option('--tag', '-T', 'tags', multiple=True, metavar='TAG', help='List of tags eg. London, os:linux, AWS/EC2')
13-
@click.option('--timeout', metavar='EXPIRES', type=int, help='Seconds before heartbeat is stale')
13+
@click.option('--timeout', metavar='SECONDS', type=int, help='Seconds before heartbeat is stale')
1414
@click.option('--customer', metavar='STRING', help='Customer (Admin only)')
15-
@click.option('--delete', '-D', metavar='ID', help='Delete hearbeat')
15+
@click.option('--delete', '-D', metavar='ID', help='Delete hearbeat using ID')
1616
@click.pass_obj
1717
def cli(obj, origin, tags, timeout, customer, delete):
1818
"""Send or delete a heartbeat."""
1919
client = obj['client']
2020
if delete:
21-
if origin or tags or timeout:
22-
raise click.UsageError('Option "--delete" is mutually exclusive.')
2321
client.delete_heartbeat(delete)
2422
else:
2523
try:

alertaclient/commands/cmd_heartbeats.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77

88

99
@click.command('heartbeats', short_help='List heartbeats')
10-
@click.option('--alert', is_flag=True, help='Send alerts on stale or slow heartbeats')
11-
@click.option('--severity', '-s', metavar='SEVERITY', default='major', help='Set the severity for stale heartbeat alerts')
12-
@click.option('--purge', is_flag=True, help='Delete stale heartbeats')
10+
@click.option('--alert', is_flag=True, help='Alert on stale or slow heartbeats')
11+
@click.option('--severity', '-s', metavar='SEVERITY', default='major', help='Severity for stale heartbeat alerts')
12+
@click.option('--purge', is_flag=True, help='Delete all stale heartbeats')
1313
@click.pass_obj
1414
def cli(obj, alert, severity, purge):
1515
"""List heartbeats."""

alertaclient/commands/cmd_key.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,16 @@
55

66

77
@click.command('key', short_help='Create API key')
8-
@click.option('--username', '-u')
8+
@click.option('--username', '-u', help='User (Admin only)')
99
@click.option('--scope', 'scopes', multiple=True, help='List of permissions eg. admin:keys, write:alerts')
10-
@click.option('--duration', type=int)
11-
@click.option('--text')
12-
@click.option('--delete', '-D', metavar='ID', help='Delete API key')
10+
@click.option('--duration', metavar='SECONDS', type=int, help='Duration API key is valid')
11+
@click.option('--text', help='Description of API key use')
12+
@click.option('--delete', '-D', metavar='ID', help='Delete API key using ID or KEY')
1313
@click.pass_obj
1414
def cli(obj, username, scopes, duration, text, delete):
1515
"""Create or delete an API key."""
1616
client = obj['client']
1717
if delete:
18-
if username or scopes or duration or text:
19-
raise click.UsageError('Option "--delete" is mutually exclusive.')
2018
client.delete_key(delete)
2119
else:
2220
try:

alertaclient/commands/cmd_keys.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from tabulate import tabulate
66

77

8-
@click.command('customers', short_help='List API keys')
8+
@click.command('keys', short_help='List API keys')
99
@click.pass_obj
1010
def cli(obj):
1111
"""List API keys."""

alertaclient/commands/cmd_login.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import click
33

44
from alertaclient.auth import save_token
5+
from alertaclient.exceptions import AuthError
56

67

78
@click.command('login', short_help='Login with user credentials')
@@ -11,6 +12,10 @@
1112
def cli(obj, username, password):
1213
"""Use this tool with username/password instead of API key."""
1314
client = obj['client']
14-
token = client.login(username, password)
15+
r = client.login(username, password)
16+
if 'token' in r:
17+
token = r['token']
18+
else:
19+
raise AuthError
1520
save_token(client.endpoint, username, token)
1621
click.echo('Logged in as {}'.format(username))

alertaclient/commands/cmd_perm.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,14 @@
44

55

66
@click.command('perm', short_help='Add role-permission lookup')
7-
@click.option('--role', help='role name')
7+
@click.option('--role', help='Role name')
88
@click.option('--scope', 'scopes', multiple=True, help='List of permissions eg. admin:keys, write:alerts')
9-
@click.option('--delete', '-D', metavar='ID', help='Delete role')
9+
@click.option('--delete', '-D', metavar='ID', help='Delete role using ID')
1010
@click.pass_obj
1111
def cli(obj, role, scopes, delete):
1212
"""Add or delete role-to-permission lookup entry."""
1313
client = obj['client']
1414
if delete:
15-
if role or scopes:
16-
raise click.UsageError('Option "--delete" is mutually exclusive.')
1715
client.delete_perm(delete)
1816
else:
1917
if not role:

0 commit comments

Comments
 (0)