Skip to content

Commit 1714270

Browse files
authored
feat: Add a --alert flag to alert keys to alert on expired and expiring key (#274)
1 parent c0e65ee commit 1714270

1 file changed

Lines changed: 67 additions & 1 deletion

File tree

alertaclient/commands/cmd_keys.py

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
import json
2+
from datetime import datetime, timedelta
23

34
import click
45
from tabulate import tabulate
56

7+
from alertaclient.utils import origin
8+
69

710
@click.command('keys', short_help='List API keys')
11+
@click.option('--alert', is_flag=True, help='Alert on expiring and expired keys')
12+
@click.option('--maxage', metavar='DAYS', default=7, type=int, help='Max remaining days before alerting')
13+
@click.option('--timeout', metavar='SECONDS', default=86400, type=int, help='Seconds before expired key alerts will be expired')
14+
@click.option('--severity', '-s', metavar='SEVERITY', default='warning', help='Severity for expiring and expired alerts')
815
@click.pass_obj
9-
def cli(obj):
16+
def cli(obj, alert, maxage, severity, timeout):
1017
"""List API keys."""
1118
client = obj['client']
1219

@@ -20,3 +27,62 @@ def cli(obj):
2027
'expireTime': 'EXPIRES', 'count': 'COUNT', 'lastUsedTime': 'LAST USED', 'customer': 'CUSTOMER'
2128
}
2229
click.echo(tabulate([k.tabular(timezone) for k in client.get_keys()], headers=headers, tablefmt=obj['output']))
30+
31+
if alert:
32+
keys = r['keys']
33+
service = ['Alerta']
34+
group = 'System'
35+
environment = 'Production'
36+
with click.progressbar(keys, label=f'Analysing {len(keys)} keys') as bar:
37+
for b in bar:
38+
if b['status'] == 'expired':
39+
client.send_alert(
40+
resource=b['id'],
41+
event='ApiKeyExpired',
42+
environment=environment,
43+
severity=severity,
44+
correlate=['ApiKeyExpired', 'ApiKeyExpiring', 'ApiKeyOK'],
45+
service=service,
46+
group=group,
47+
value='Expired',
48+
text=f"Key expired on {b['expireTime']}",
49+
origin=origin(),
50+
type='apiKeyAlert',
51+
timeout=timeout,
52+
customer=b['customer']
53+
)
54+
elif b['status'] == 'active':
55+
expiration = datetime.fromisoformat(b['expireTime'].split('.')[0])
56+
remaining_validity = expiration - datetime.now()
57+
if remaining_validity < timedelta(days=maxage):
58+
client.send_alert(
59+
resource=b['id'],
60+
event='ApiKeyExpiring',
61+
environment=environment,
62+
severity=severity,
63+
correlate=['ApiKeyExpired', 'ApiKeyExpiring', 'ApiKeyOK'],
64+
service=service,
65+
group=group,
66+
value=str(remaining_validity),
67+
text=f"Key is active and expires on {b['expireTime']}",
68+
origin=origin(),
69+
type='apiKeyAlert',
70+
timeout=timeout,
71+
customer=b['customer']
72+
)
73+
else:
74+
client.send_alert(
75+
resource=b['id'],
76+
event='ApiKeyOK',
77+
environment=environment,
78+
severity='ok',
79+
correlate=['ApiKeyExpired', 'ApiKeyExpiring', 'ApiKeyOK'],
80+
service=service,
81+
group=group,
82+
value=str(remaining_validity),
83+
text=f"Key is active and expires on {b['expireTime']}",
84+
origin=origin(),
85+
type='apiKeyAlert',
86+
timeout=timeout,
87+
customer=b['customer']
88+
)

0 commit comments

Comments
 (0)