metric: allow to create metric with name and no resource_id
This is actually valid in the API. This also simplify a bit the handling of the "metric create" syntax. Change-Id: I3a3283f0a19eaf5d651a5f710b052e00883397af
This commit is contained in:
parent
a79f19a32a
commit
ea4358c913
|
@ -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"])
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue