diff --git a/holmes/plugins/toolsets/grafana/toolset_grafana.py b/holmes/plugins/toolsets/grafana/toolset_grafana.py index 654dcd335f..491ba743b8 100644 --- a/holmes/plugins/toolsets/grafana/toolset_grafana.py +++ b/holmes/plugins/toolsets/grafana/toolset_grafana.py @@ -72,7 +72,7 @@ def health_check(self) -> Tuple[bool, str]: """Test connectivity by invoking GetDashboardTags tool.""" tool = GetDashboardTags(self) try: - _ = tool._make_grafana_request("/api/dashboards/tags", {}) + _ = tool._make_grafana_request("api/dashboards/tags", {}) return True, "" except Exception as e: return False, f"Failed to connect to Grafana {str(e)}" @@ -106,7 +106,10 @@ def _make_grafana_request( Returns: StructuredToolResult with the API response data """ - url = urljoin(get_base_url(self._toolset.grafana_config), endpoint) + base_url = get_base_url(self._toolset.grafana_config) + if not base_url.endswith("/"): + base_url += "/" + url = urljoin(base_url, endpoint) headers = build_headers( api_key=self._toolset.grafana_config.api_key, additional_headers=self._toolset.grafana_config.headers, @@ -216,7 +219,7 @@ def _invoke(self, params: dict, context: ToolInvokeContext) -> StructuredToolRes if params.get("page"): query_params["page"] = params["page"] - result = self._make_grafana_request("/api/search", params, query_params) + result = self._make_grafana_request("api/search", params, query_params) config = self._toolset.grafana_config search_url = _build_grafana_dashboard_url(config, query_params=query_params) @@ -258,7 +261,7 @@ def __init__(self, toolset: GrafanaToolset): def _invoke(self, params: dict, context: ToolInvokeContext) -> StructuredToolResult: uid = params["uid"] - result = self._make_grafana_request(f"/api/dashboards/uid/{uid}", params) + result = self._make_grafana_request(f"api/dashboards/uid/{uid}", params) dashboard_url = _build_grafana_dashboard_url( self._toolset.grafana_config, uid=uid @@ -282,7 +285,7 @@ def __init__(self, toolset: GrafanaToolset): ) def _invoke(self, params: dict, context: ToolInvokeContext) -> StructuredToolResult: - result = self._make_grafana_request("/api/dashboards/home", params) + result = self._make_grafana_request("api/dashboards/home", params) config = self._toolset.grafana_config dashboard_url = None if isinstance(result.data, dict): @@ -308,7 +311,7 @@ def __init__(self, toolset: GrafanaToolset): ) def _invoke(self, params: dict, context: ToolInvokeContext) -> StructuredToolResult: - result = self._make_grafana_request("/api/dashboards/tags", params) + result = self._make_grafana_request("api/dashboards/tags", params) config = self._toolset.grafana_config tags_url = _build_grafana_dashboard_url(config)