diff --git a/pkg/services/navtree/navtreeimpl/applinks.go b/pkg/services/navtree/navtreeimpl/applinks.go index 73b14acec52..37ece2ee8fe 100644 --- a/pkg/services/navtree/navtreeimpl/applinks.go +++ b/pkg/services/navtree/navtreeimpl/applinks.go @@ -163,6 +163,20 @@ func (s *ServiceImpl) processAppPlugin(plugin pluginstore.Plugin, c *contextmode s.addPluginToSection(c, treeRoot, plugin, appLink) + if plugin.ID == "grafana-slo-app" { + // Add Service Center as a standalone nav item under Alerts & IRM + if alertsSection := treeRoot.FindById(navtree.NavIDAlertsAndIncidents); alertsSection != nil { + serviceLink := &navtree.NavLink{ + Text: "Service Center", + Id: "standalone-plugin-page-slo-services", + Url: s.cfg.AppSubURL + "/a/grafana-slo-app/services", + SortWeight: 1, + IsNew: true, + } + alertsSection.Children = append(alertsSection.Children, serviceLink) + } + } + return nil } @@ -242,6 +256,9 @@ func (s *ServiceImpl) addPluginToSection(c *contextmodel.ReqContext, treeRoot *n case navtree.NavIDAlertsAndIncidents: alertsAndIncidentsChildren := []*navtree.NavLink{} for _, alertingNode := range alertingNodes { + if alertingNode.Id == "alerting" { + alertingNode.SortWeight = 2 + } alertsAndIncidentsChildren = append(alertsAndIncidentsChildren, alertingNode) treeRoot.RemoveSection(alertingNode) } @@ -300,11 +317,11 @@ func (s *ServiceImpl) readNavigationSettings() { "grafana-pyroscope-app": {SectionID: navtree.NavIDDrilldown, SortWeight: 4, Text: "Profiles"}, "grafana-kowalski-app": {SectionID: navtree.NavIDRoot, SortWeight: navtree.WeightFrontend, Text: "Frontend", Icon: "frontend-observability"}, "grafana-synthetic-monitoring-app": {SectionID: navtree.NavIDTestingAndSynthetics, SortWeight: 2, Text: "Synthetics"}, - "grafana-irm-app": {SectionID: navtree.NavIDAlertsAndIncidents, SortWeight: 1, Text: "IRM"}, - "grafana-oncall-app": {SectionID: navtree.NavIDAlertsAndIncidents, SortWeight: 2, Text: "OnCall"}, - "grafana-incident-app": {SectionID: navtree.NavIDAlertsAndIncidents, SortWeight: 3, Text: "Incident"}, - "grafana-ml-app": {SectionID: navtree.NavIDAlertsAndIncidents, SortWeight: 4, Text: "Machine Learning"}, - "grafana-slo-app": {SectionID: navtree.NavIDAlertsAndIncidents, SortWeight: 5}, + "grafana-irm-app": {SectionID: navtree.NavIDAlertsAndIncidents, SortWeight: 3, Text: "IRM"}, + "grafana-oncall-app": {SectionID: navtree.NavIDAlertsAndIncidents, SortWeight: 4, Text: "OnCall"}, + "grafana-incident-app": {SectionID: navtree.NavIDAlertsAndIncidents, SortWeight: 5, Text: "Incident"}, + "grafana-ml-app": {SectionID: navtree.NavIDAlertsAndIncidents, SortWeight: 6, Text: "Machine Learning"}, + "grafana-slo-app": {SectionID: navtree.NavIDAlertsAndIncidents, SortWeight: 7}, "grafana-cloud-link-app": {SectionID: navtree.NavIDCfgPlugins, SortWeight: 3}, "grafana-costmanagementui-app": {SectionID: navtree.NavIDCfg, Text: "Cost management"}, "grafana-adaptive-metrics-app": {SectionID: navtree.NavIDCfg, Text: "Adaptive Metrics"},