Merge "metric: allow to create metric with name and no resource_id"

This commit is contained in:
Jenkins 2015-09-25 13:04:37 +00:00 committed by Gerrit Code Review
commit 45519f8f6a
3 changed files with 42 additions and 28 deletions

View File

@ -19,7 +19,20 @@ class MetricClientTest(base.ClientTestBase):
self.gnocchi("archive-policy", params="create metric-test "
"--back-window 0 -d granularity:1s,points:86400")
# CREATE
# CREATE WITH NAME
result = self.gnocchi(
u'metric', params=u"create"
u" --archive-policy-name metric-test some-name")
metric = self.details_multiple(result)[0]
self.assertIsNotNone(metric["id"])
self.assertEqual(self.clients.project_id,
metric["created_by_project_id"])
self.assertEqual(self.clients.user_id, metric["created_by_user_id"])
self.assertEqual('some-name', metric["name"])
self.assertEqual('None', metric["resource"])
self.assertIn("metric-test", metric["archive_policy/name"])
# CREATE WITHOUT NAME
result = self.gnocchi(
u'metric', params=u"create"
u" --archive-policy-name metric-test")
@ -80,11 +93,11 @@ class MetricClientTest(base.ClientTestBase):
result = self.gnocchi('metric', params="list")
metrics = self.parser.listing(result)
metric_from_list = [p for p in metrics
if p['archive_policy/name'] == 'metric-test'][0]
if p['id'] == metric['id']][0]
for field in ["id", "archive_policy/name", "name"]:
# FIXME(sileht): add "resource_id" or "resource"
# when LP#1497171 is fixed
self.assertEqual(metric[field], metric_from_list[field])
self.assertEqual(metric[field], metric_from_list[field], field)
# DELETE
result = self.gnocchi('metric', params="delete %s" % metric["id"])

View File

@ -54,33 +54,34 @@ class MetricManager(base.Manager):
url = (self.resource_url % resource_id) + metric
return self._get(url).json()
def create(self, metric, resource_id=None, metric_name=None):
def create(self, metric):
"""Create an metric
:param metric: The metric
:type metric: str
:param resource_id: ID of the resource (required
to get a metric by name)
:type resource_id: str
"""
if resource_id is None and metric_name is None:
resource_id = metric.get('resource_id')
if resource_id is None:
metric = self._post(
self.metric_url, headers={'Content-Type': "application/json"},
data=jsonutils.dumps(metric)).json()
# FIXME(sileht): create and get have a
# different output: LP#1497171
return self.get(metric["id"])
elif ((resource_id is None and metric_name is not None) or
(resource_id is not None and metric_name is None)):
raise TypeError("resource_id and metric_name are "
"mutually required")
else:
metric = {metric_name: metric}
metric = self._post(
self.resource_url % resource_id,
headers={'Content-Type': "application/json"},
data=jsonutils.dumps(metric))
return self.get(metric_name, resource_id)
metric_name = metric.get('name')
if metric_name is None:
raise TypeError("metric_name is required if resource_id is set")
del metric['resource_id']
metric = {metric_name: metric}
metric = self._post(
self.resource_url % resource_id,
headers={'Content-Type': "application/json"},
data=jsonutils.dumps(metric))
return self.get(metric_name, resource_id)
def delete(self, metric, resource_id=None):
"""Delete an metric

View File

@ -54,20 +54,20 @@ class CliMetricCreate(show.ShowOne):
parser.add_argument("--archive-policy-name", "-a",
dest="archive_policy_name",
help=("name of the archive policy"))
parser.add_argument("--resource", "-r", nargs=2,
metavar=("RESOURCE_ID", "METRIC_NAME"),
parser.add_argument("--resource-id", "-r",
dest="resource_id",
help="ID of the resource")
parser.add_argument("name", nargs='?',
metavar="METRIC_NAME",
help="Name of the metric")
return parser
def take_action(self, parsed_args):
metric = utils.dict_from_parsed_args(parsed_args,
["archive_policy_name"])
kwds = {'metric': metric}
if parsed_args.resource is not None:
kwds['resource_id'] = parsed_args.resource[0]
kwds['metric_name'] = parsed_args.resource[1]
metric = self.app.client.metric.create(**kwds)
["archive_policy_name",
"name",
"resource_id"])
metric = self.app.client.metric.create(metric)
utils.format_archive_policy(metric["archive_policy"])
utils.format_move_dict_to_root(metric, "archive_policy")
return self.dict2columns(metric)