in tools/gmon/gmon/cli.py [0:0]
def cli(parsers, args):
"""Main CLI function.
Args:
parsers (list): List of parsers.
args (Namespace): Argparsed CLI parameters.
"""
setup_logging()
# Print help if no subparser is used
parser = args.parser
if not parser:
parsers['root'].print_help()
sys.exit(1)
# Print help if no command is used
command = getattr(args, 'operation', None)
if not command:
parsers[parser].print_help()
sys.exit(1)
# Parse optional args like limit, filters, fields...
metric_type = getattr(args, 'metric-type', None)
limit = getattr(args, 'limit', None)
fields = getattr(args, 'fields', None)
fields = parse_fields(fields)
filters = getattr(args, 'filters', [])
filters = parse_filters(filters)
response = None
if parser == 'metrics':
client = MetricsClient(args.project)
method = getattr(client, command)
if command in ['get', 'delete']:
response = method(metric_type)
elif command in ['create']:
response = method(metric_type, args.metric_kind, args.value_type,
args.description)
elif command in ['list']:
response = method(pattern=args.regex, fields=fields)
elif command in ['inspect']:
response = method(metric_type, window=args.window, filters=filters)
filters = {} # already using API filters
elif command in ['delete_unused']:
response = method(pattern=args.regex, window=args.window)
# Format, filter and print response
return fmt_response(response, limit, fields, filters)
elif parser == 'accounts':
if 'project' in args:
client = AccountClient(project_id=args.project,
no_poll=args.no_poll)
else:
client = AccountClient()
method = getattr(client, command)
if command in ['get', 'create', 'delete', 'list']:
response = method()
elif command in ['link', 'unlink']:
response = method(project_id=args.project_id)
return response
elif parser == 'services':
client = ServiceMonitoringClient(project_id=args.project)
if command in ['get', 'create', 'delete']:
method = getattr(client, command + '_service')
response = method(args.service_id)
else:
method = getattr(client, command + '_services')
response = method()
return fmt_response(response, limit, fields, filters)
elif parser == 'slos':
client = ServiceMonitoringClient(project_id=args.project)
if command in ['get', 'create', 'delete']:
method = getattr(client, command + '_slo')
response = method(args.service_id, args.slo_id)
else:
method = getattr(client, command + '_slos')
response = method(args.service_id)
return fmt_response(response, limit, fields, filters)