diff --git a/bigtop-manager-server/src/main/resources/stacks/infra/1.0.0/services/grafana/configuration/grafana-dashboard.xml b/bigtop-manager-server/src/main/resources/stacks/infra/1.0.0/services/grafana/configuration/grafana-dashboard.xml index 8bd2d168..96c7a56d 100644 --- a/bigtop-manager-server/src/main/resources/stacks/infra/1.0.0/services/grafana/configuration/grafana-dashboard.xml +++ b/bigtop-manager-server/src/main/resources/stacks/infra/1.0.0/services/grafana/configuration/grafana-dashboard.xml @@ -27,12 +27,13 @@ apiVersion: 1 providers: <#if prometheus_url??> - - name: 'Prometheus Dashboards' +<#list db as dashboards> + - name: '${db.name}' orgId: 1 - folder: '' + folder: '${db.folder}' type: file options: - path: '${prometheus_dashboard_path}' + path: '${db.path}' ]]> diff --git a/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/grafana/GrafanaParams.java b/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/grafana/GrafanaParams.java index b6e9ddf1..ba5a067b 100644 --- a/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/grafana/GrafanaParams.java +++ b/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/grafana/GrafanaParams.java @@ -30,6 +30,8 @@ import lombok.extern.slf4j.Slf4j; import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -49,6 +51,8 @@ public class GrafanaParams extends InfraParams { private String prometheusServer; private String prometheusPort; + List> dashboards; + public GrafanaParams(CommandPayload commandPayload) { super(commandPayload); globalParamsMap.put("port", grafanaPort); @@ -57,7 +61,8 @@ public GrafanaParams(CommandPayload commandPayload) { if (prometheusServer != null) { globalParamsMap.put( "prometheus_url", MessageFormat.format("http://{0}:{1}", prometheusServer, prometheusPort)); - globalParamsMap.put("prometheus_dashboard_path", prometheusDashboardPath); + + globalParamsMap.put("dashboards", dashboards); } } @@ -81,6 +86,15 @@ public String dashboardsDir() { return MessageFormat.format("{0}/dashboards", provisioningDir()); } + public String dashboardConfigDir(String cluster) { + return MessageFormat.format("{0}/{1}", dashboardsDir(), cluster); + } + + /// TODO + public List getClusters() { + return List.of("ALL"); + } + @GlobalParams public Map configs() { Map configuration = LocalSettings.configurations(getServiceName(), "grafana"); @@ -115,11 +129,20 @@ public Map prometheus() { } @GlobalParams - public Map dashboard() { + public Map dashboards() { Map configuration = LocalSettings.configurations(getServiceName(), "grafana-dashboard"); grafanaDashboardContent = (String) configuration.get("content"); bmAgentDashboardConfig = (String) configuration.get("bm_agent_dashboard"); prometheusDashboardPath = MessageFormat.format("{0}/prometheus", dashboardsDir()); + + dashboards = new ArrayList<>(); + for (String cluster : getClusters()) { + Map dashboard = new HashMap<>(); + dashboard.put("name", cluster); + dashboard.put("folder", cluster); + dashboard.put("path", dashboardConfigDir(cluster)); + dashboards.add(dashboard); + } return configuration; } diff --git a/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/grafana/GrafanaSetup.java b/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/grafana/GrafanaSetup.java index f43d07b0..18ec1f42 100644 --- a/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/grafana/GrafanaSetup.java +++ b/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/grafana/GrafanaSetup.java @@ -20,6 +20,7 @@ import org.apache.bigtop.manager.common.constants.Constants; import org.apache.bigtop.manager.common.shell.ShellResult; +import org.apache.bigtop.manager.stack.core.exception.StackException; import org.apache.bigtop.manager.stack.core.spi.param.Params; import org.apache.bigtop.manager.stack.core.utils.linux.LinuxFileUtils; @@ -28,6 +29,7 @@ import lombok.extern.slf4j.Slf4j; import java.text.MessageFormat; +import java.util.Map; @Slf4j @NoArgsConstructor(access = AccessLevel.PRIVATE) @@ -60,22 +62,28 @@ public static ShellResult config(Params params) { LinuxFileUtils.toFileByTemplate( grafanaParams.getGrafanaDashboardContent(), - MessageFormat.format("{0}/prometheus.yaml", grafanaParams.dashboardsDir()), + MessageFormat.format("{0}/bm-dashboards.yaml", grafanaParams.dashboardsDir()), user, group, Constants.PERMISSION_644, grafanaParams.getGlobalParamsMap()); - LinuxFileUtils.createDirectories( - grafanaParams.getPrometheusDashboardPath(), user, group, Constants.PERMISSION_755, true); + for (Map dashboard : grafanaParams.getDashboards()) { + String confPath = (String) dashboard.get("path"); + if (confPath == null) { + throw new StackException("Dashboard path is not set"); + } - LinuxFileUtils.toFileByTemplate( - grafanaParams.getBmAgentDashboardConfig(), - MessageFormat.format("{0}/bm-agent.json", grafanaParams.getPrometheusDashboardPath()), - user, - group, - Constants.PERMISSION_644, - grafanaParams.getGlobalParamsMap()); + LinuxFileUtils.createDirectories(confPath, user, group, Constants.PERMISSION_755, true); + + LinuxFileUtils.toFileByTemplate( + grafanaParams.getBmAgentDashboardConfig(), + MessageFormat.format("{0}/{1}.json", confPath, dashboard.get("name")), + user, + group, + Constants.PERMISSION_644, + grafanaParams.getGlobalParamsMap()); + } } return ShellResult.success("Grafana Configure success!");