Exemple #1
0
 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)
Exemple #2
0
    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()
Exemple #3
0
    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)
Exemple #4
0
    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)
Exemple #5
0
    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)
Exemple #6
0
    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)
Exemple #7
0
    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()
Exemple #8
0
 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)
Exemple #9
0
 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)
Exemple #10
0
 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))
Exemple #11
0
 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)
Exemple #12
0
 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)
Exemple #13
0
 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)
Exemple #14
0
 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)
Exemple #15
0
 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)
Exemple #16
0
 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)
Exemple #17
0
 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)
Exemple #18
0
 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)
Exemple #19
0
 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)
Exemple #20
0
 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)
Exemple #21
0
 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)
Exemple #22
0
 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)
Exemple #23
0
 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)
Exemple #24
0
 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_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)