コード例 #1
0
ファイル: __init__.py プロジェクト: bopopescu/what
        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 YOMP.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
コード例 #2
0
ファイル: __init__.py プロジェクト: darian19/what
    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 YOMP.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
コード例 #3
0
        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
コード例 #4
0
ファイル: __init__.py プロジェクト: sergius/numenta-apps
        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 grok.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
コード例 #5
0
    def _startMonitoringWithRetries(self, metricId, modelSpec, swarmParams):
        """ Perform the start-monitoring operation atomically/reliably

    :param metricId: unique identifier of the metric row

    :param modelSpec: same as `modelSpec`` from `monitorMetric`

    :param swarmParams: object returned by
      scalar_metric_utils.generateSwarmParams()

    :raises htmengine.exceptions.ObjectNotFoundError: if referenced metric
      doesn't exist

    :raises htmengine.exceptions.MetricNotSupportedError: if requested metric
      isn't supported

    :raises htmengine.exceptions.MetricAlreadyMonitored: if the metric is
      already being monitored
    """
        with self.connectionFactory() as conn:
            with conn.begin():
                # Lock the metric to synchronize with metric streamer; must be first
                # call at start of transaction
                metricObj = repository.getMetricWithUpdateLock(conn, metricId)

                if metricObj.datasource != self._DATASOURCE:
                    raise TypeError("Not an HTM metric=%r; modelSpec=%r" %
                                    (metricObj, modelSpec))

                if metricObj.status != MetricStatus.UNMONITORED:
                    self._log.info(
                        "monitorMetric: already monitored; metric=%r",
                        metricObj)
                    raise app_exceptions.MetricAlreadyMonitored(
                        ("Custom metric=%s is already monitored by model=%r" %
                         (
                             metricObj.name,
                             metricObj,
                         )),
                        uid=metricId)

                # Save model specification in metric row
                update = {"parameters": htmengine.utils.jsonEncode(modelSpec)}
                instanceName = self.getInstanceNameForModelSpec(modelSpec)
                if instanceName is not None:
                    update["server"] = instanceName
                repository.updateMetricColumns(conn, metricId, update)

                modelStarted = scalar_metric_utils.startMonitoring(
                    conn=conn,
                    metricId=metricId,
                    swarmParams=swarmParams,
                    logger=self._log)

                if modelStarted:
                    scalar_metric_utils.sendBacklogDataToModel(
                        conn=conn, metricId=metricId, logger=self._log)
コード例 #6
0
  def _startMonitoringWithRetries(self, metricId, modelSpec, swarmParams):
    """ Perform the start-monitoring operation atomically/reliably

    :param metricId: unique identifier of the metric row

    :param modelSpec: same as `modelSpec`` from `monitorMetric`

    :param swarmParams: object returned by
      scalar_metric_utils.generateSwarmParams()

    :raises htmengine.exceptions.ObjectNotFoundError: if referenced metric
      doesn't exist

    :raises htmengine.exceptions.MetricNotSupportedError: if requested metric
      isn't supported

    :raises htmengine.exceptions.MetricAlreadyMonitored: if the metric is
      already being monitored
    """
    with self.connectionFactory() as conn:
      with conn.begin():
        # Lock the metric to synchronize with metric streamer; must be first
        # call at start of transaction
        metricObj = repository.getMetricWithUpdateLock(conn, metricId)

        if metricObj.datasource != self._DATASOURCE:
          raise TypeError("Not an HTM metric=%r; modelSpec=%r"
                          % (metricObj, modelSpec))

        if metricObj.status != MetricStatus.UNMONITORED:
          self._log.info("monitorMetric: already monitored; metric=%r",
                         metricObj)
          raise app_exceptions.MetricAlreadyMonitored(
            ("Custom metric=%s is already monitored by model=%r"
             % (metricObj.name, metricObj,)),
            uid=metricId)

        # Save model specification in metric row
        update = {"parameters": htmengine.utils.jsonEncode(modelSpec)}
        instanceName = self.getInstanceNameForModelSpec(modelSpec)
        if instanceName is not None:
          update["server"] = instanceName
        repository.updateMetricColumns(conn, metricId, update)

        modelStarted = scalar_metric_utils.startMonitoring(
          conn=conn,
          metricId=metricId,
          swarmParams=swarmParams,
          logger=self._log)

        if modelStarted:
          scalar_metric_utils.sendBacklogDataToModel(
            conn=conn,
            metricId=metricId,
            logger=self._log)