Esempio n. 1
0
  def getInstanceNameForModelSpec(self, spec):
    """ Get canonical instance name from a model spec

    :param modelSpec: Model specification or import model specification
    :type modelSpec: JSONifiable dict

    :returns: Canonical instance name; None if autostack doesn't exist
    :rtype: str or None
    """
    if "metricSpec" in spec:
      autostackId = spec["metricSpec"]["autostackId"]
    else:
      # Proceed as if for an import-model-spec
      stackSpec = spec["stackSpec"]
      aggSpec = stackSpec["aggSpec"]

      try:
        with self.connectionFactory() as conn:
          autostackObj = repository.getAutostackForNameAndRegion(
            conn,
            stackSpec["name"],
            aggSpec["region"])
      except htm-it.app.exceptions.ObjectNotFoundError:
        return None
      else:
        autostackId = autostackObj.uid

    return self._getCanonicalResourceName(autostackId)
Esempio n. 2
0
  def importModel(self, spec):
    """ Import a model

    :param spec: datasource-specific value created by `exportModel`
    :type spec: dict

    :returns: datasource-specific unique metric identifier
    """
    stackSpec = spec["stackSpec"]
    aggSpec = stackSpec["aggSpec"]

    try:
      with self.connectionFactory() as conn:
        autostackObj = repository.getAutostackForNameAndRegion(
          conn,
          stackSpec["name"],
          aggSpec["region"])
    except htm-it.app.exceptions.ObjectNotFoundError:
      autostackObj = self.createAutostack(stackSpec)

    modelSpec = spec["modelSpec"]
    metricSpec = modelSpec["metricSpec"]
    metricSpec["autostackId"] = autostackObj.uid

    try:
      return self.monitorMetric(modelSpec)
    except htm-it.app.exceptions.MetricAlreadyMonitored as e:
      self._log.warning("importModel: Autostack metric already monitored; "
                        "metricSpec=%s", metricSpec)
      return e.uid