X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=installers%2Fcharm%2Fosm-mon%2Fsrc%2Fcharm.py;h=620a9bb119f1f85cfe215f09565aa158ae01b5ca;hb=e886c7c1a7624e76bf5f43246601f27439998c26;hp=21114293b6d267af6546ab99eaed121f668ecf55;hpb=81678fd2864998552a9986ed1516a565dfe12de7;p=osm%2Fdevops.git diff --git a/installers/charm/osm-mon/src/charm.py b/installers/charm/osm-mon/src/charm.py index 21114293..620a9bb1 100755 --- a/installers/charm/osm-mon/src/charm.py +++ b/installers/charm/osm-mon/src/charm.py @@ -42,7 +42,6 @@ from charms.osm_libs.v0.utils import ( check_service_active, ) from charms.osm_vca_integrator.v0.vca import VcaDataChangedEvent, VcaRequires -from charms.prometheus_k8s.v0.prometheus_scrape import MetricsEndpointProvider from lightkube.models.core_v1 import ServicePort from ops.charm import ActionEvent, CharmBase, CharmEvents from ops.framework import EventSource, StoredState @@ -54,7 +53,7 @@ from grafana_datasource_handler import ( GrafanaConfig, GrafanaDataSourceHandler, ) -from legacy_interfaces import KeystoneClient +from legacy_interfaces import KeystoneClient, PrometheusClient HOSTPATHS = [ HostPath( @@ -71,7 +70,6 @@ HOSTPATHS = [ ), ] SERVICE_PORT = 8000 -PROMETHEUS_RELATION = "metrics-endpoint" logger = logging.getLogger(__name__) @@ -95,7 +93,7 @@ class OsmMonCharm(CharmBase): super().__init__(*args) self.kafka = KafkaRequires(self) self.mongodb_client = DatabaseRequires(self, "mongodb", database_name="osm") - self._set_metrics_endpoint_provider() + self.prometheus_client = PrometheusClient(self, "prometheus") self.keystone_client = KeystoneClient(self, "keystone") self.vca = VcaRequires(self) self._observe_charm_events() @@ -103,21 +101,6 @@ class OsmMonCharm(CharmBase): self.debug_mode = DebugMode(self, self._stored, self.container, HOSTPATHS) self._patch_k8s_service() - def _set_metrics_endpoint_provider(self): - prometheus_jobs = [ - { - "job_name": "mon_exporter", - "static_configs": [{"targets": ["*:{}".format(SERVICE_PORT)]}], - } - ] - refresh_events = [ - self.on.mon_pebble_ready, - self.on.update_status, - ] - self.prometheus_metrics_endpoint = MetricsEndpointProvider( - self, jobs=prometheus_jobs, refresh_event=refresh_events - ) - @property def external_hostname(self) -> str: """External hostname property. @@ -163,7 +146,7 @@ class OsmMonCharm(CharmBase): self.unit.status = e.status def _on_required_relation_broken(self, _) -> None: - """Handler for the relation-broken event.""" + """Handler for the kafka-broken event.""" try: check_container_ready(self.container) check_service_active(self.container, self.service_name) @@ -247,8 +230,7 @@ class OsmMonCharm(CharmBase): self.on.list_datasources_action: self._on_list_datasources_action, self.on.delete_datasource_action: self._on_delete_datasource_action, } - - for relation in [self.on[rel_name] for rel_name in [PROMETHEUS_RELATION, "keystone"]]: + for relation in [self.on[rel_name] for rel_name in ["prometheus", "keystone"]]: event_handler_mapping[relation.relation_changed] = self._on_config_changed event_handler_mapping[relation.relation_broken] = self._on_required_relation_broken @@ -268,13 +250,9 @@ class OsmMonCharm(CharmBase): CharmError: if charm configuration is invalid. """ logger.debug("validating charm config") - self._validate_mandatory_config_is_set() - self._validate_urls_in_config() - - def _validate_mandatory_config_is_set(self): missing_configs = [] - mandatory_configs = ["grafana-url", "grafana-user", "grafana-password", "prometheus-url"] - for config in mandatory_configs: + grafana_configs = ["grafana-url", "grafana-user", "grafana-password"] + for config in grafana_configs: if not self.config.get(config): missing_configs.append(config) @@ -284,12 +262,9 @@ class OsmMonCharm(CharmBase): logger.warning(error_msg) raise CharmError(error_msg) - def _validate_urls_in_config(self): - urls_to_validate = ["grafana-url", "prometheus-url"] - for param in urls_to_validate: - url = self.config[param] - if not self._is_valid_url(url): - raise CharmError(f"Invalid value for {param} config: '{url}'") + grafana_url = self.config["grafana-url"] + if not self._is_valid_url(grafana_url): + raise CharmError(f"Invalid value for grafana-url config: '{grafana_url}'") def _is_valid_url(self, url) -> bool: return urlparse(url).hostname is not None @@ -307,7 +282,7 @@ class OsmMonCharm(CharmBase): missing_relations.append("kafka") if not self._is_database_available(): missing_relations.append("mongodb") - if not self.framework.model.get_relation(PROMETHEUS_RELATION): + if self.prometheus_client.is_missing_data_in_app(): missing_relations.append("prometheus") if self.keystone_client.is_missing_data_in_app(): missing_relations.append("keystone") @@ -343,17 +318,15 @@ class OsmMonCharm(CharmBase): "OSMMON_DATABASE_DRIVER": "mongo", "OSMMON_DATABASE_URI": self._get_mongodb_uri(), "OSMMON_DATABASE_COMMONKEY": self.config["database-commonkey"], - # Prometheus configuration - "OSMMON_PROMETHEUS_URL": self.config.get("prometheus-url", ""), - "OSMMON_PROMETHEUS_USER": "", - "OSMMON_PROMETHEUS_PASSWORD": "", - # Grafana configuration + # Prometheus/grafana configuration + "OSMMON_PROMETHEUS_URL": f"http://{self.prometheus_client.hostname}:{self.prometheus_client.port}", + "OSMMON_PROMETHEUS_USER": self.prometheus_client.user, + "OSMMON_PROMETHEUS_PASSWORD": self.prometheus_client.password, "OSMMON_GRAFANA_URL": self.config.get("grafana-url", ""), "OSMMON_GRAFANA_USER": self.config.get("grafana-user", ""), "OSMMON_GRAFANA_PASSWORD": self.config.get("grafana-password", ""), "OSMMON_KEYSTONE_ENABLED": self.config["keystone-enabled"], "OSMMON_KEYSTONE_URL": self.keystone_client.host, - # Keystone configuration "OSMMON_KEYSTONE_DOMAIN_NAME": self.keystone_client.user_domain_name, "OSMMON_KEYSTONE_SERVICE_PROJECT": self.keystone_client.service, "OSMMON_KEYSTONE_SERVICE_USER": self.keystone_client.username,