in tools/gmon/gmon/cli.py [0:0]
def parse_args(args):
"""Parse CLI arguments.
Args:
args (list): List of args passed from CLI.
Returns:
tuple: A tuple (parser, args) after parsing with ArgumentParser.
"""
# Main parser
parser = argparse.ArgumentParser(prog='gmon',
description='Cloud Operations CLI')
subparsers = parser.add_subparsers(title='Endpoints', dest='parser')
# Accounts parser
accounts = subparsers.add_parser('accounts',
help='Cloud Operations Account operations')
accounts_sub = accounts.add_subparsers(dest='operation')
accounts_get = accounts_sub.add_parser(
'get', help='Get a Cloud Operations Account details')
accounts_create = accounts_sub.add_parser(
'create', help='Create a Cloud Operations Account')
accounts_link = accounts_sub.add_parser(
'link', help='Link a project to a Cloud Operations Account')
# accounts_sub.add_parser('list', help='List Cloud Operations Accounts')
# TODO: Uncomment this when `delete` and `projects.delete`
# operations are available.
# accounts_delete = accounts_sub.add_parser(
# 'delete', help='Delete a Cloud Operations Account')
# accounts_unlink = accounts_sub.add_parser(
# 'unlink', help='Unlink a project from a SD Account')
# accounts_unlink.add_argument('project', help='Project id to unlink')
accounts_link.add_argument('project_id', help='Project id to link')
for p in [accounts_get, accounts_create, accounts_link]:
p.add_argument('--project',
'-p',
help='Cloud Monitoring host project id.',
required=True)
p.add_argument('--no-poll',
help='Do not poll operations to completion',
action='store_true',
required=False)
# Metrics parser
metrics = subparsers.add_parser('metrics',
help='Cloud Monitoring metrics operations')
metrics_sub = metrics.add_subparsers(dest='operation')
metrics_list = metrics_sub.add_parser('list',
help='List Cloud Monitoring metrics')
metrics_get = metrics_sub.add_parser(
'get', help='Get Cloud Monitoring metric descriptor')
metrics_inspect = metrics_sub.add_parser(
'inspect', help='Inspect Cloud Monitoring metrics (last timeseries)')
metrics_create = metrics_sub.add_parser(
'create', help='Create a Cloud Monitoring metric descriptor')
metrics_delete = metrics_sub.add_parser(
'delete', help='Delete a Cloud Monitoring metric descriptor')
metrics_delete_unused = metrics_sub.add_parser(
'delete_unused', help='Delete unused Cloud Monitoring metrics')
metrics_create.add_argument('--description',
help='Metric description',
required=False)
metrics_create.add_argument('--metric-kind',
help='Metric metric-kind',
default='GAUGE',
required=False)
metrics_create.add_argument('--value-type',
help='Metric value-type',
default='DOUBLE',
required=False)
metrics_inspect.add_argument('--window',
'-w',
type=int,
help='Window to query (in seconds)',
required=False,
default=60)
metrics_inspect.add_argument('--filters',
'-f',
nargs='+',
help='Filter on nested fields.',
required=False,
default=[])
metrics_inspect.add_argument('--fields',
type=str,
nargs='+',
help='Fields to keep in response.',
required=False,
default=[])
metrics_list.add_argument('--fields',
type=str,
nargs='+',
help='Fields to keep in response.',
required=False,
default=['type'])
metrics_list.add_argument('--limit',
'-n',
type=int,
help='Number of results to show.',
required=False,
default=None)
metrics_list.add_argument('--filters',
'-f',
nargs='+',
help='Filter on nested fields.',
required=False,
default=[])
metrics_delete_unused.add_argument('--window',
'-w',
type=int,
help='Window to query (in days)',
required=False,
default=1)
for p in [metrics_list, metrics_delete_unused]:
p.add_argument('regex',
nargs='?',
type=str,
help='Filter metric descriptors using a regex.',
default=None)
for p in [
metrics_list, metrics_get, metrics_create, metrics_inspect,
metrics_delete, metrics_delete_unused
]:
p.add_argument('--project',
'-p',
help='Cloud Monitoring host project id.',
required=True)
for p in [metrics_get, metrics_create, metrics_inspect, metrics_delete]:
p.add_argument(
'metric-type',
help='Metric descriptor type (e.g: "{SAMPLE_METRIC_TYPE}") or '
'partial match')
# Service Monitoring
# Services
sm_service = subparsers.add_parser(
'services', help='Cloud Monitoring Service Monitoring services')
sm_service_sub = sm_service.add_subparsers(dest='operation')
sm_service_get = sm_service_sub.add_parser(
'get', help='Get a Cloud Monitoring Service Monitoring service')
sm_service_create = sm_service_sub.add_parser(
'create', help='Create a Cloud Monitoring Service Monitoring service')
sm_service_update = sm_service_sub.add_parser(
'update', help='Update a Cloud Monitoring Service Monitoring service')
sm_service_delete = sm_service_sub.add_parser(
'delete', help='Delete a Cloud Monitoring Service Monitoring service')
sm_service_list = sm_service_sub.add_parser(
'list', help='List a Cloud Monitoring Service Monitoring service')
for p in [
sm_service_list, sm_service_get, sm_service_create,
sm_service_update, sm_service_delete
]:
p.add_argument('--project',
'-p',
help='Cloud Monitoring host project id.',
required=True)
for p in [sm_service_get, sm_service_create, sm_service_delete]:
p.add_argument('service_id', help='Cloud Monitoring service id')
sm_service_create.add_argument('--config',
help='Path to service config.',
required=True)
# SLOs
sm_slo = subparsers.add_parser(
'slos', help='Cloud Monitoring Service Monitoring SLOs')
sm_slo_sub = sm_slo.add_subparsers(dest='operation')
sm_slo_get = sm_slo_sub.add_parser(
'get', help='Get a Cloud Monitoring Service Monitoring SLO')
sm_slo_create = sm_slo_sub.add_parser(
'create', help='Create a Cloud Monitoring Service Monitoring SLO')
sm_slo_update = sm_slo_sub.add_parser(
'update', help='Update a Cloud Monitoring Service Monitoring SLO')
sm_slo_delete = sm_slo_sub.add_parser(
'delete', help='Delete a Cloud Monitoring Service Monitoring SLO')
sm_slo_list = sm_slo_sub.add_parser(
'list', help='List Cloud Monitoring Service Monitoring SLOs')
for p in [
sm_slo_list, sm_slo_get, sm_slo_update, sm_slo_create, sm_slo_delete
]:
p.add_argument('--project',
'-p',
help='Cloud Monitoring host project id.',
required=True)
p.add_argument('service_id', help='Cloud Monitoring service id')
for p in [sm_slo_get, sm_slo_update, sm_slo_delete]:
p.add_argument('slo_id', help='SLO id.')
sm_slo_create.add_argument('--config',
help='Path to service config.',
required=True)
parsers = {
'root': parser,
'accounts': accounts,
'metrics': metrics,
'services': sm_service,
'slos': sm_slo
}
return parsers, parser.parse_args(args)