diff options
author | Daniel Thompson <daniel.thompson@linaro.org> | 2018-12-11 16:26:32 +0000 |
---|---|---|
committer | Daniel Thompson <daniel.thompson@linaro.org> | 2018-12-11 16:26:32 +0000 |
commit | c4fd896a89fe94e917b407e6a004d9495ca0d84e (patch) | |
tree | ba38cee9df92e90ac566f368d753c36c23c9606d | |
parent | f598d3021f875fc84660debbedeb40c13ae471c6 (diff) |
ldts: Add triggers sub-command
Allow both raw triggers output and a version pretty-printed in an
awk-like language.
-rwxr-xr-x | bin/ldtstool | 115 |
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) |