+ 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])
+ kwargs = {
+ "prometheus_host": self.prometheus_client.hostname,
+ "prometheus_port": self.prometheus_client.port,
+ "enable_basic_auth": enable_basic_auth,
+ "user": "",
+ "password": "",
+ }
+ if enable_basic_auth:
+ kwargs["user"] = f"basic_auth_user: {prometheus_user}"
+ kwargs[
+ "password"
+ ] = f"secure_json_data:\n basicAuthPassword: {prometheus_password}"
+ files_builder.add_file(
+ "datasource_prometheus.yaml",
+ Template(Path("templates/default_datasources.yaml").read_text()).substitute(
+ **kwargs
+ ),
+ )
+ return files_builder.build()