diff --git a/monikerclient/cli/reports.py b/monikerclient/cli/reports.py new file mode 100644 index 00000000..f1c7aa22 --- /dev/null +++ b/monikerclient/cli/reports.py @@ -0,0 +1,71 @@ +# Copyright 2013 Hewlett-Packard Development Company, L.P. All Rights Reserved. +# +# Author: Patrick Galbraith <patg@patg.net> +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +from monikerclient.cli import base + + +class DomainCountCommand(base.GetCommand): + """ Get counts for total domains """ + + def execute(self, parsed_args): + return self.client.reports.count_domains() + + +class RecordCountCommand(base.GetCommand): + """ Get counts for total records """ + + def execute(self, parsed_args): + return self.client.reports.count_records() + + +class TenantCountCommand(base.GetCommand): + """ Get counts for total tenants """ + + def execute(self, parsed_args): + return self.client.reports.count_tenants() + + +class CountsCommand(base.GetCommand): + """ Get count totals for all tenants, domains and records """ + + def execute(self, parsed_args): + return self.client.reports.count_all() + + +class TenantsCommand(base.ListCommand): + """ Get list of tenants and domain count for each """ + + columns = ['domain_count', 'id'] + + def execute(self, parsed_args): + return self.client.reports.tenants_all() + + +class TenantCommand(base.ListCommand): + """ Get a list of domains for given tenant """ + + columns = ['domain'] + + def get_parser(self, prog_name): + parser = super(TenantCommand, self).get_parser(prog_name) + + parser.add_argument('--report-tenant-id', + help="tenant_id being reported on", + required=True) + + return parser + + def execute(self, parsed_args): + return self.client.reports.tenant_domains(parsed_args.report_tenant_id) diff --git a/monikerclient/v1/reports.py b/monikerclient/v1/reports.py new file mode 100644 index 00000000..462fd188 --- /dev/null +++ b/monikerclient/v1/reports.py @@ -0,0 +1,67 @@ +# Copyright 2013 Hewlett-Packard Development Company, L.P. All Rights Reserved. +# +# Author: Patrick Galbraith <patg@patg.net> +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +from monikerclient.v1.base import Controller + + +class ReportsController(Controller): + def count_all(self): + """ + Domain, Records and tenant total count + """ + response = self.client.get('/reports/counts') + + return response.json + + def count_domains(self): + """ + Domain total count + """ + response = self.client.get('/reports/counts/domains') + + return response.json + + def count_tenants(self): + """ + Tenant total count + """ + response = self.client.get('/reports/counts/tenants') + + return response.json + + def count_records(self): + """ + Record total count + """ + response = self.client.get('/reports/counts/records') + + return response.json + + def tenants_all(self): + """ + Per tenant count + """ + response = self.client.get('/reports/tenants') + + return response.json['tenants'] + + def tenant_domains(self, other_tenant_id): + """ + Tenant's domain count + """ + response = self.client.get('/reports/tenants/%s' % + other_tenant_id) + + return [{'domain': d} for d in response.json['domains']] diff --git a/setup.py b/setup.py index 0e75e2ac..0f28bc3b 100755 --- a/setup.py +++ b/setup.py @@ -48,6 +48,7 @@ setup( cmdclass=common_setup.get_cmdclass(), entry_points=textwrap.dedent(""" [monikerclient.v1.controllers] + reports = monikerclient.v1.reports:ReportsController diagnostics = monikerclient.v1.diagnostics:DiagnosticsController domains = monikerclient.v1.domains:DomainsController records = monikerclient.v1.records:RecordsController @@ -80,6 +81,13 @@ setup( :SyncDomainCommand diagnostics-sync-record = monikerclient.cli.diagnostics\ :SyncRecordCommand + + report-count-all = monikerclient.cli.reports:CountsCommand + report-count-domains = monikerclient.cli.reports:DomainCountCommand + report-count-records = monikerclient.cli.reports:RecordCountCommand + report-count-tenants = monikerclient.cli.reports:TenantCountCommand + report-tenants-all = monikerclient.cli.reports:TenantsCommand + report-tenant-domains = monikerclient.cli.reports:TenantCommand """), classifiers=[ 'Development Status :: 3 - Alpha',