+ def __init__(self, *args) -> NoReturn:
+ """Prometheus Charm constructor."""
+ super().__init__(*args, oci_image="image", mysql_uri=True)
+ # Initialize relation objects
+ self.prometheus_client = PrometheusClient(self, "prometheus")
+ self.grafana_cluster = GrafanaCluster(self, "cluster")
+ self.mysql_client = MysqlClient(self, "db")
+ # Observe events
+ event_observer_mapping = {
+ self.on["prometheus"].relation_changed: self.configure_pod,
+ self.on["prometheus"].relation_broken: self.configure_pod,
+ self.on["db"].relation_changed: self.configure_pod,
+ self.on["db"].relation_broken: self.configure_pod,
+ }
+ for event, observer in event_observer_mapping.items():
+ self.framework.observe(event, observer)
+
+ def _build_dashboard_files(self, config: ConfigModel):
+ files_builder = FilesV3Builder()
+ files_builder.add_file(
+ "dashboard_osm.yaml",
+ Path("templates/default_dashboards.yaml").read_text(),
+ )
+ if config.osm_dashboards:
+ osm_dashboards_mapping = {
+ "kafka_exporter_dashboard.json": "templates/kafka_exporter_dashboard.json",
+ "mongodb_exporter_dashboard.json": "templates/mongodb_exporter_dashboard.json",
+ "mysql_exporter_dashboard.json": "templates/mysql_exporter_dashboard.json",
+ "nodes_exporter_dashboard.json": "templates/nodes_exporter_dashboard.json",
+ "summary_dashboard.json": "templates/summary_dashboard.json",
+ }
+ for file_name, path in osm_dashboards_mapping.items():
+ files_builder.add_file(file_name, Path(path).read_text())
+ return files_builder.build()
+
+ def _build_datasources_files(self):
+ files_builder = FilesV3Builder()
+ prometheus_user = self.prometheus_client.user
+ prometheus_password = self.prometheus_client.password
+ enable_basic_auth = all([prometheus_user, prometheus_password])
+ files_builder.add_file(
+ "datasource_prometheus.yaml",
+ Template(Path("templates/default_datasources.yaml").read_text()).substitute(
+ prometheus_host=self.prometheus_client.hostname,
+ prometheus_port=self.prometheus_client.port,
+ enable_basic_auth=enable_basic_auth,
+ user=f"user: {prometheus_user}" if enable_basic_auth else "",
+ password=f"password: {prometheus_password}"
+ if enable_basic_auth
+ else "",
+ ),
+ )
+ return files_builder.build()