X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=juju%2Fmodel.py;h=56924cffb9bd0257422dde5d7cba2a92496b40cb;hb=0b9e0ad499afba7c8a3b86a82e3cc5d42da4887d;hp=b7318992351bbf51d2823a167ed9c823129ef35e;hpb=db399019ac73dfb980d48b231d69a267de27dd87;p=osm%2FN2VC.git diff --git a/juju/model.py b/juju/model.py index b731899..56924cf 100644 --- a/juju/model.py +++ b/juju/model.py @@ -1206,6 +1206,36 @@ class Model(object): def charmstore(self): return self._charmstore + async def get_metrics(self, *tags): + """Retrieve metrics. + + :param str \*tags: Tags of entities from which to retrieve metrics. + No tags retrieves the metrics of all units in the model. + """ + log.debug("Retrieving metrics for %s", + ', '.join(tags) if tags else "all units") + + metrics_facade = client.MetricsDebugFacade() + metrics_facade.connect(self.connection) + + entities = [client.Entity(tag) for tag in tags] + metrics_result = await metrics_facade.GetMetrics(entities) + + metrics = collections.defaultdict(list) + + for entity_metrics in metrics_result.results: + error = entity_metrics.error + if error: + if "is not a valid tag" in error: + raise ValueError(error.message) + else: + raise Exception(error.message) + + for metric in entity_metrics.metrics: + metrics[metric.unit].append(metric.to_json()) + + return metrics + class BundleHandler(object): """