aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Thompson <daniel.thompson@linaro.org>2018-12-11 16:26:32 +0000
committerDaniel Thompson <daniel.thompson@linaro.org>2018-12-11 16:26:32 +0000
commitc4fd896a89fe94e917b407e6a004d9495ca0d84e (patch)
treeba38cee9df92e90ac566f368d753c36c23c9606d
parentf598d3021f875fc84660debbedeb40c13ae471c6 (diff)
ldts: Add triggers sub-command
Allow both raw triggers output and a version pretty-printed in an awk-like language.
-rwxr-xr-xbin/ldtstool115
1 files changed, 115 insertions, 0 deletions
diff --git a/bin/ldtstool b/bin/ldtstool
index 7113ae0..eb60af2 100755
--- a/bin/ldtstool
+++ b/bin/ldtstool
@@ -630,6 +630,117 @@ def do_tags(args):
for t in sorted(tags):
print(t)
+def do_triggers(args):
+ cfg = config.get_config()
+ zd = zdesk.Zendesk(cfg['zendesk']['server'],
+ cfg['zendesk']['username'],
+ config.get_password(cfg, 'zendesk'))
+ trigger_list = zd.triggers_list()
+
+ def lookup_group(id):
+ if id in ('group_id',):
+ return '({})'.format(id.split('_')[0])
+ if id in ('',):
+ return '({})'.format(id)
+
+ try:
+ g = zd.group_show(id=id)
+ return g['group']['name']
+ except:
+ print('# WARNING: Cannot lookup group ' + str(id))
+ return id
+
+ def lookup_user(id):
+ if id in ('assignee_id', 'requester_id', 'current_user', ):
+ return '({})'.format(id.split('_')[0])
+ if id in ('all_agents', ''):
+ return '({})'.format(id)
+ if not id:
+ return '(none)'
+
+ try:
+ u = zd.user_show(id=id)
+ return u['user']['email']
+ except:
+ print('# WARNING: Cannot lookup user ' + str(id))
+ return id
+
+ def lookup_organization(id):
+ if id in ('',):
+ return '({})'.format(id)
+
+ try:
+ o = zd.organization_show(id=id)
+ return o['organization']['name']
+ except:
+ print('# WARNING: Cannot lookup organization ' + str(id))
+ return id
+
+ def lookup_field_value(field, value):
+ z = zd
+ # TODO: we could look this up with zd.ticket_fields_list() but
+ # this look up is OK unless we need to start gold
+ # plating
+ hacks = {
+ 'custom_fields_21611521' : 'severity',
+ 'custom_fields_21694326' : 'category_assigned',
+ }
+ if field in hacks:
+ field = hacks[field]
+
+ if field in ('assignee_id', 'cc', 'requester_id'):
+ value = lookup_user(value)
+ elif field in ('organization_id',):
+ value = lookup_organization(value)
+ elif field in ('group_id',):
+ value = lookup_group(value)
+ elif field in ('notification_group',):
+ value[0] = lookup_group(value[0])
+ elif field in ('notification_user',):
+ value[0] = lookup_user(value[0])
+
+ return (field, value)
+
+ def format_condition(c):
+ (field, value) = lookup_field_value(c['field'], c['value'])
+ operator = c['operator'].upper()
+
+ return '{} {} "{}"'.format(field, operator, value)
+
+ def format_action(a):
+ (field, value) = lookup_field_value(a['field'], a['value'])
+ return 'SET {} "{}"'.format(field, value)
+
+ if args.pretty:
+ triggers = trigger_list['triggers']
+
+ for trigger in triggers:
+ inactive = '' if trigger['active'] else '#'
+
+ print('{}# {}'.format(inactive, trigger['title']))
+
+ all = [ format_condition(c) for c in
+ trigger['conditions']['all'] ]
+ any = [ format_condition(c) for c in
+ trigger['conditions']['any'] ]
+ actions = [ format_action(a) for a in
+ trigger['actions'] ]
+ if len(any):
+ indent = ' ' if len(all) else ''
+ link = ' OR\n{}{}'.format(inactive, indent)
+ all.append(indent + link.join(any))
+ link = ' AND\n{}'.format(inactive)
+ print(inactive + link.join(all))
+ print(inactive + '{')
+ for a in actions:
+ print('{} {}'.format(inactive, a))
+ print(inactive + '}')
+ print('')
+
+ return
+
+ json.dump(trigger_list, sys.stdout, sort_keys=True, indent=2)
+
def do_weekly(args):
wrappers = (
textwrap.TextWrapper(),
@@ -798,6 +909,10 @@ def main(argv):
s.add_argument("json", nargs='?')
s.set_defaults(func=do_tags)
+ s = subparsers.add_parser('triggers')
+ s.add_argument('--pretty', action='store_true')
+ s.set_defaults(func=do_triggers)
+
s = subparsers.add_parser('weekly')
s.add_argument("json", nargs='?')
s.set_defaults(func=do_weekly)