Remove Prometheus charm
[osm/devops.git] / installers / charm / grafana / src / pod_spec.py
index 9915a9e..609c466 100644 (file)
@@ -24,6 +24,8 @@ import logging
 from ipaddress import ip_network
 from typing import Any, Dict, List
 from urllib.parse import urlparse
+from pathlib import Path
+from string import Template
 
 logger = logging.getLogger(__name__)
 
@@ -95,10 +97,12 @@ def _validate_data(config_data: Dict[str, Any], relation_data: Dict[str, Any]) -
         else True,
     }
     relation_validators = {
-        "prometheus_host": lambda value, _: isinstance(value, str) and len(value) > 0,
-        "prometheus_port": lambda value, _: isinstance(value, str)
-        and len(value) > 0
-        and int(value) > 0,
+        "prometheus_hostname": lambda value, _: (
+            isinstance(value, str) and len(value) > 0
+        ),
+        "prometheus_port": lambda value, _: (
+            isinstance(value, str) and len(value) > 0 and int(value) > 0
+        ),
     }
     problems = []
 
@@ -115,6 +119,7 @@ def _validate_data(config_data: Dict[str, Any], relation_data: Dict[str, Any]) -
             problems.append(key)
 
     if len(problems) > 0:
+        logger.debug(relation_data)
         raise ValueError("Errors found in: {}".format(", ".join(problems)))
 
     return True
@@ -224,55 +229,71 @@ def _make_pod_ingress_resources(
     return [ingress]
 
 
-def _make_pod_files(relation: Dict[str, Any]) -> List[Dict[str, Any]]:
+def _make_pod_files(
+    config: Dict[str, Any], relation: Dict[str, Any]
+) -> List[Dict[str, Any]]:
     """Generating ConfigMap information
 
     Args:
+        config (Dict[str, Any]): configuration information.
         relation (Dict[str, Any]): relation information.
 
     Returns:
         List[Dict[str, Any]]: ConfigMap information.
     """
+    template_data = {**config, **relation}
+    dashboards = []
+
+    if config.get("osm_dashboards", False):
+        dashboards.extend(
+            [
+                {
+                    "path": "kafka_exporter_dashboard.json",
+                    "content": Path("files/kafka_exporter_dashboard.json").read_text(),
+                },
+                {
+                    "path": "mongodb_exporter_dashboard.json",
+                    "content": Path(
+                        "files/mongodb_exporter_dashboard.json"
+                    ).read_text(),
+                },
+                {
+                    "path": "mysql_exporter_dashboard.json",
+                    "content": Path("files/mysql_exporter_dashboard.json").read_text(),
+                },
+                {
+                    "path": "nodes_exporter_dashboard.json",
+                    "content": Path("files/nodes_exporter_dashboard.json").read_text(),
+                },
+                {
+                    "path": "summary_dashboard.json",
+                    "content": Path("files/summary_dashboard.json").read_text(),
+                },
+            ]
+        )
+
+    dashboards.append(
+        {
+            "path": "dashboard_osm.yaml",
+            "content": Path("files/default_dashboards.yaml").read_text(),
+        }
+    )
+
     files = [
         {
             "name": "dashboards",
             "mountPath": "/etc/grafana/provisioning/dashboards/",
-            "files": [
-                {
-                    "path": "dashboard-osm.yml",
-                    "content": (
-                        "apiVersion: 1\n"
-                        "providers:\n"
-                        "  - name: 'osm'\n"
-                        "    orgId: 1\n"
-                        "    folder: ''\n"
-                        "    type: file\n"
-                        "    options:\n"
-                        "      path: /etc/grafana/provisioning/dashboards/\n"
-                    ),
-                }
-            ],
+            "files": dashboards,
         },
         {
             "name": "datasources",
             "mountPath": "/etc/grafana/provisioning/datasources/",
             "files": [
                 {
-                    "path": "datasource-prometheus.yml",
-                    "content": (
-                        "datasources:\n"
-                        "  - access: proxy\n"
-                        "    editable: true\n"
-                        "    is_default: true\n"
-                        "    name: osm_prometheus\n"
-                        "    orgId: 1\n"
-                        "    type: prometheus\n"
-                        "    version: 1\n"
-                        "    url: http://{}:{}\n".format(
-                            relation.get("prometheus_host"),
-                            relation.get("prometheus_port"),
-                        )
-                    ),
+                    "path": "datasource_prometheus.yaml",
+                    "content": Template(
+                        Path("files/default_dashboards.yaml").read_text()
+                    ).substitute(template_data),
                 }
             ],
         },
@@ -350,7 +371,7 @@ def make_pod_spec(
 
     ports = _make_pod_ports(port)
     env_config = _make_pod_envconfig(config, relation_state)
-    files = _make_pod_files(relation_state)
+    files = _make_pod_files(config, relation_state)
     readiness_probe = _make_readiness_probe(port)
     liveness_probe = _make_liveness_probe(port)
     ingress_resources = _make_pod_ingress_resources(config, app_name, port)