def startMonitoringWithRetries(): """ :returns: metricId """ with self.connectionFactory() as conn: with conn.begin(): repository.lockOperationExclusive(conn, repository.OperationLock.METRICS) # Check if the metric is already monitored matchingMetrics = repository.getAutostackMetricsWithMetricName( conn, autostackId, nameColumnValue, fields=[schema.metric.c.uid]) matchingMetric = next(iter(matchingMetrics), None) if matchingMetric: msg = ("monitorMetric: Autostack modelId=%s is already " "monitoring metric=%s on resource=%s; model=%r" % (matchingMetric.uid, nameColumnValue, canonicalResourceName, matchingMetric)) self._log.warning(msg) raise htm-it.app.exceptions.MetricAlreadyMonitored( msg, uid=matchingMetric.uid) # Add a metric row for the requested metric metricDict = repository.addMetric( conn, datasource=self._DATASOURCE, name=nameColumnValue, description=metricDescription, server=canonicalResourceName, location=autostack.region, tag_name=autostack.name, parameters=htmengine.utils.jsonEncode(modelSpec), poll_interval=period, status=MetricStatus.UNMONITORED) metricId = metricDict["uid"] repository.addMetricToAutostack(conn, autostackId, metricId) # Start monitoring scalar_metric_utils.startMonitoring( conn=conn, metricId=metricId, swarmParams=swarmParams, logger=self._log) self._log.info("monitorMetric: monitoring metric=%s, stats=%r", metricId, stats) return metricId
def startMonitoringWithRetries(): """ :returns: metricId """ with self.connectionFactory() as conn: with conn.begin(): repository.lockOperationExclusive(conn, repository.OperationLock.METRICS) # Check if the metric is already monitored matchingMetrics = repository.getCloudwatchMetricsForNameAndServer( conn, nameColumnValue, canonicalResourceName, fields=[schema.metric.c.uid, schema.metric.c.parameters]) for m in matchingMetrics: parameters = htmengine.utils.jsonDecode(m.parameters) if (parameters["metricSpec"]["dimensions"] == metricSpec["dimensions"]): msg = ("monitorMetric: Cloudwatch modelId=%s is already " "monitoring metric=%s on resource=%s; model=%r" % (m.uid, nameColumnValue, canonicalResourceName, m)) self._log.warning(msg) raise htm-it.app.exceptions.MetricAlreadyMonitored(msg, uid=m.uid) # Add a metric row for the requested metric metricDict = repository.addMetric( conn, name=nameColumnValue, description=metricDescription, server=canonicalResourceName, location=resourceLocation, poll_interval=metricPeriod, status=MetricStatus.UNMONITORED, datasource=self._DATASOURCE, parameters=htmengine.utils.jsonEncode(modelSpec), tag_name=resourceName) metricId = metricDict["uid"] self._log.info("monitorMetric: metric=%s, stats=%r", metricId, stats) # Start monitoring scalar_metric_utils.startMonitoring( conn=conn, metricId=metricId, swarmParams=swarmParams, logger=self._log) return metricId