def test_create_monitor_k8s_cluster(self): self.cluster.cluster_template = obj_utils.get_test_cluster_template( self.context, uuid=self.cluster.cluster_template_id, coe='kubernetes') monitor = monitors.create_monitor(self.context, self.cluster) self.assertIsInstance(monitor, k8s_monitor.K8sMonitor)
def _update_health_status(self): monitor = monitors.create_monitor(self.ctx, self.cluster) if monitor is None: return try: monitor.poll_health_status() except Exception as e: LOG.warning( "Skip pulling data from cluster %(cluster)s due to " "error: %(e)s", { 'e': e, 'cluster': self.cluster.uuid }, exc_info=True) # TODO(flwang): Should we mark this cluster's health status as # UNKNOWN if Magnum failed to pull data from the cluster? Because # that basically means the k8s API doesn't work at that moment. return if monitor.data.get('health_status'): self.cluster.health_status = monitor.data.get('health_status') self.cluster.health_status_reason = monitor.data.get( 'health_status_reason') self.cluster.save()
def _send_cluster_metrics(self, ctx): if not CONF.drivers.send_cluster_metrics: LOG.debug('Skip sending cluster metrics') return LOG.debug('Starting to send cluster metrics') for cluster in objects.Cluster.list(ctx): if cluster.status not in ( objects.fields.ClusterStatus.CREATE_COMPLETE, objects.fields.ClusterStatus.UPDATE_COMPLETE): continue monitor = monitors.create_monitor(ctx, cluster) if monitor is None: continue try: monitor.pull_data() except Exception as e: LOG.warning( "Skip pulling data from cluster %(cluster)s due to " "error: %(e)s", { 'e': e, 'cluster': cluster.uuid }, exc_info=True) continue metrics = list() for name in monitor.get_metric_names(): try: metric = { 'name': name, 'value': monitor.compute_metric_value(name), 'unit': monitor.get_metric_unit(name), } metrics.append(metric) except Exception as e: LOG.warning( "Skip adding metric %(name)s due to " "error: %(e)s", { 'e': e, 'name': name }, exc_info=True) message = dict(metrics=metrics, user_id=cluster.user_id, project_id=cluster.project_id, resource_id=cluster.uuid) LOG.debug("About to send notification: '%s'", message) self.notifier.info(ctx, "magnum.cluster.metrics.update", message)
def _send_bay_metrics(self, ctx): LOG.debug('Starting to send bay metrics') for bay in objects.Bay.list(ctx): if bay.status not in [ bay_status.CREATE_COMPLETE, bay_status.UPDATE_COMPLETE ]: continue monitor = monitors.create_monitor(ctx, bay) if monitor is None: continue try: monitor.pull_data() except Exception as e: LOG.warning(_LW("Skip pulling data from bay %(bay)s due to " "error: %(e)s"), { 'e': e, 'bay': bay.uuid }, exc_info=True) continue metrics = list() for name in monitor.get_metric_names(): try: metric = { 'name': name, 'value': monitor.compute_metric_value(name), 'unit': monitor.get_metric_unit(name), } metrics.append(metric) except Exception as e: LOG.warning(_LW("Skip adding metric %(name)s due to " "error: %(e)s"), { 'e': e, 'name': name }, exc_info=True) message = dict(metrics=metrics, user_id=bay.user_id, project_id=bay.project_id, resource_id=bay.uuid) LOG.debug("About to send notification: '%s'", message) self.notifier.info(ctx, "magnum.bay.metrics.update", message)
def _send_cluster_metrics(self, ctx): if not CONF.drivers.send_cluster_metrics: LOG.debug('Skip sending cluster metrics') return LOG.debug('Starting to send cluster metrics') for cluster in objects.Cluster.list(ctx): if cluster.status not in ( objects.fields.ClusterStatus.CREATE_COMPLETE, objects.fields.ClusterStatus.UPDATE_COMPLETE): continue monitor = monitors.create_monitor(ctx, cluster) if monitor is None: continue try: monitor.pull_data() except Exception as e: LOG.warning( "Skip pulling data from cluster %(cluster)s due to " "error: %(e)s", {'e': e, 'cluster': cluster.uuid}, exc_info=True) continue metrics = list() for name in monitor.get_metric_names(): try: metric = { 'name': name, 'value': monitor.compute_metric_value(name), 'unit': monitor.get_metric_unit(name), } metrics.append(metric) except Exception as e: LOG.warning("Skip adding metric %(name)s due to " "error: %(e)s", {'e': e, 'name': name}, exc_info=True) message = dict(metrics=metrics, user_id=cluster.user_id, project_id=cluster.project_id, resource_id=cluster.uuid) LOG.debug("About to send notification: '%s'", message) self.notifier.info(ctx, "magnum.cluster.metrics.update", message)
def _send_bay_metrics(self, ctx): LOG.debug('Starting to send bay metrics') for bay in objects.Bay.list(ctx): if bay.status not in [bay_status.CREATE_COMPLETE, bay_status.UPDATE_COMPLETE]: continue monitor = monitors.create_monitor(ctx, bay) if monitor is None: continue try: monitor.pull_data() except Exception as e: LOG.warn(_LW("Skip pulling data from bay %(bay)s due to " "error: %(e)s"), {'e': e, 'bay': bay.uuid}, exc_info=True) continue metrics = list() for name in monitor.get_metric_names(): try: metric = { 'name': name, 'value': monitor.compute_metric_value(name), 'unit': monitor.get_metric_unit(name), } metrics.append(metric) except Exception as e: LOG.warn(_LW("Skip adding metric %(name)s due to " "error: %(e)s"), {'e': e, 'name': name}, exc_info=True) message = dict(metrics=metrics, user_id=bay.user_id, project_id=bay.project_id, resource_id=bay.uuid) LOG.debug("About to send notification: '%s'" % message) self.notifier.info(ctx, "magnum.bay.metrics.update", message)
def _update_health_status(self): monitor = monitors.create_monitor(self.ctx, self.cluster) if monitor is None: return try: monitor.poll_health_status() except Exception as e: LOG.warning( "Skip pulling data from cluster %(cluster)s due to " "error: %(e)s", {'e': e, 'cluster': self.cluster.uuid}, exc_info=True) # TODO(flwang): Should we mark this cluster's health status as # UNKNOWN if Magnum failed to pull data from the cluster? Because # that basically means the k8s API doesn't work at that moment. return if monitor.data.get('health_status'): self.cluster.health_status = monitor.data.get('health_status') self.cluster.health_status_reason = monitor.data.get( 'health_status_reason') self.cluster.save()
def test_create_monitor_success(self): self.bay.baymodel = obj_utils.get_test_baymodel( self.context, uuid=self.bay.baymodel_id, coe='swarm') monitor = monitors.create_monitor(self.context, self.bay) self.assertIsInstance(monitor, swarm_monitor.SwarmMonitor)
def test_create_monitor_unsupported_coe(self, mock_baymodel_get_by_uuid): baymodel = mock.MagicMock() baymodel.coe = 'unsupported' mock_baymodel_get_by_uuid.return_value = baymodel monitor = monitors.create_monitor(self.context, self.bay) self.assertIsNone(monitor)
def test_create_monitor_success(self, mock_baymodel_get_by_uuid): baymodel = mock.MagicMock() baymodel.coe = 'swarm' mock_baymodel_get_by_uuid.return_value = baymodel monitor = monitors.create_monitor(self.context, self.bay) self.assertTrue(isinstance(monitor, monitors.SwarmMonitor))
def test_create_monitor_mesos_bay(self): self.bay.baymodel = obj_utils.get_test_baymodel( self.context, uuid=self.bay.baymodel_id, coe='mesos') monitor = monitors.create_monitor(self.context, self.bay) self.assertIsInstance(monitor, mesos_monitor.MesosMonitor)
def test_create_monitor_success(self, mock_baymodel_get_by_uuid): baymodel = mock.MagicMock() baymodel.coe = 'swarm' mock_baymodel_get_by_uuid.return_value = baymodel monitor = monitors.create_monitor(self.context, self.bay) self.assertIsInstance(monitor, swarm_monitor.SwarmMonitor)
def test_create_monitor_mesos_cluster(self): self.cluster.cluster_template = obj_utils.get_test_cluster_template( self.context, uuid=self.cluster.cluster_template_id, coe='mesos') monitor = monitors.create_monitor(self.context, self.cluster) self.assertIsInstance(monitor, mesos_monitor.MesosMonitor)
def test_create_monitor_mesos_bay(self, mock_baymodel_get_by_uuid): baymodel = mock.MagicMock() baymodel.coe = 'mesos' mock_baymodel_get_by_uuid.return_value = baymodel monitor = monitors.create_monitor(self.context, self.bay) self.assertIsInstance(monitor, mesos_monitor.MesosMonitor)
def test_create_monitor_k8s_bay(self): self.bay.baymodel = obj_utils.get_test_baymodel( self.context, uuid=self.bay.baymodel_id, coe='kubernetes') monitor = monitors.create_monitor(self.context, self.bay) self.assertIsInstance(monitor, k8s_monitor.K8sMonitor)
def test_create_monitor_success(self): self.cluster.cluster_template = obj_utils.get_test_cluster_template( self.context, uuid=self.cluster.cluster_template_id, coe='swarm') monitor = monitors.create_monitor(self.context, self.cluster) self.assertIsInstance(monitor, swarm_monitor.SwarmMonitor)
def test_create_monitor_k8s_bay(self, mock_baymodel_get_by_uuid): baymodel = mock.MagicMock() baymodel.coe = "kubernetes" mock_baymodel_get_by_uuid.return_value = baymodel monitor = monitors.create_monitor(self.context, self.bay) self.assertIsInstance(monitor, k8s_monitor.K8sMonitor)