diff --git a/pkg/services/navtree/models.go b/pkg/services/navtree/models.go
index 74008ff1f82..17ec7ed67fa 100644
--- a/pkg/services/navtree/models.go
+++ b/pkg/services/navtree/models.go
@@ -17,6 +17,7 @@ const (
WeightExplore
WeightAlerting
WeightAlertsAndIncidents
+ WeightTestingAndSynthetics
WeightMonitoring
WeightInfrastructure
WeightApplication
@@ -30,21 +31,22 @@ const (
)
const (
- NavIDRoot = "root"
- NavIDDashboards = "dashboards/browse"
- NavIDExplore = "explore"
- NavIDCfg = "cfg" // NavIDCfg is the id for org configuration navigation node
- NavIDAlertsAndIncidents = "alerts-and-incidents"
- NavIDAlerting = "alerting"
- NavIDAlertingLegacy = "alerting-legacy"
- NavIDMonitoring = "monitoring"
- NavIDInfrastructure = "infrastructure"
- NavIDFrontend = "frontend"
- NavIDReporting = "reports"
- NavIDApps = "apps"
- NavIDCfgGeneral = "cfg/general"
- NavIDCfgPlugins = "cfg/plugins"
- NavIDCfgAccess = "cfg/access"
+ NavIDRoot = "root"
+ NavIDDashboards = "dashboards/browse"
+ NavIDExplore = "explore"
+ NavIDCfg = "cfg" // NavIDCfg is the id for org configuration navigation node
+ NavIDAlertsAndIncidents = "alerts-and-incidents"
+ NavIDTestingAndSynthetics = "testing-and-synthetics"
+ NavIDAlerting = "alerting"
+ NavIDAlertingLegacy = "alerting-legacy"
+ NavIDMonitoring = "monitoring"
+ NavIDInfrastructure = "infrastructure"
+ NavIDFrontend = "frontend"
+ NavIDReporting = "reports"
+ NavIDApps = "apps"
+ NavIDCfgGeneral = "cfg/general"
+ NavIDCfgPlugins = "cfg/plugins"
+ NavIDCfgAccess = "cfg/access"
)
type NavLink struct {
diff --git a/pkg/services/navtree/navtreeimpl/applinks.go b/pkg/services/navtree/navtreeimpl/applinks.go
index 94adb75fb50..ee98dcaa765 100644
--- a/pkg/services/navtree/navtreeimpl/applinks.go
+++ b/pkg/services/navtree/navtreeimpl/applinks.go
@@ -249,6 +249,16 @@ func (s *ServiceImpl) addPluginToSection(c *contextmodel.ReqContext, treeRoot *n
Children: alertsAndIncidentsChildren,
Url: s.cfg.AppSubURL + "/alerts-and-incidents",
})
+ case navtree.NavIDTestingAndSynthetics:
+ treeRoot.AddSection(&navtree.NavLink{
+ Text: "Testing & synthetics",
+ Id: navtree.NavIDTestingAndSynthetics,
+ SubTitle: "Optimize performance with k6 and Synthetic Monitoring insights",
+ Icon: "k6",
+ SortWeight: navtree.WeightTestingAndSynthetics,
+ Children: []*navtree.NavLink{appLink},
+ Url: s.cfg.AppSubURL + "/testing-and-synthetics",
+ })
default:
s.log.Error("Plugin app nav id not found", "pluginId", plugin.ID, "navId", sectionID)
}
@@ -276,6 +286,7 @@ func (s *ServiceImpl) readNavigationSettings() {
appO11yCfg := NavigationAppConfig{SectionID: navtree.NavIDMonitoring, SortWeight: 2, Text: "Application"}
profilesCfg := NavigationAppConfig{SectionID: navtree.NavIDMonitoring, SortWeight: 3, Text: "Profiles"}
frontendCfg := NavigationAppConfig{SectionID: navtree.NavIDMonitoring, SortWeight: 4, Text: "Frontend"}
+ k6Cfg := NavigationAppConfig{SectionID: navtree.NavIDRoot, SortWeight: navtree.WeightAlertsAndIncidents + 1, Text: "Performance testing", Icon: "k6"}
syntheticsCfg := NavigationAppConfig{SectionID: navtree.NavIDMonitoring, SortWeight: 5, Text: "Synthetics"}
if s.features.IsEnabledGlobally(featuremgmt.FlagDockedMegaMenu) {
@@ -288,10 +299,14 @@ func (s *ServiceImpl) readNavigationSettings() {
profilesCfg.SectionID = navtree.NavIDExplore
profilesCfg.SortWeight = 1
- frontendCfg.SectionID = navtree.NavIDFrontend
- frontendCfg.SortWeight = 1
+ frontendCfg.SectionID = navtree.NavIDRoot
+ frontendCfg.SortWeight = navtree.WeightFrontend
- syntheticsCfg.SectionID = navtree.NavIDFrontend
+ k6Cfg.SectionID = navtree.NavIDTestingAndSynthetics
+ k6Cfg.SortWeight = 1
+ k6Cfg.Text = "Performance"
+
+ syntheticsCfg.SectionID = navtree.NavIDTestingAndSynthetics
syntheticsCfg.SortWeight = 2
}
@@ -307,7 +322,7 @@ func (s *ServiceImpl) readNavigationSettings() {
"grafana-cloud-link-app": {SectionID: navtree.NavIDCfg},
"grafana-costmanagementui-app": {SectionID: navtree.NavIDCfg, Text: "Cost management"},
"grafana-easystart-app": {SectionID: navtree.NavIDRoot, SortWeight: navtree.WeightApps + 1, Text: "Connections", Icon: "adjust-circle"},
- "k6-app": {SectionID: navtree.NavIDRoot, SortWeight: navtree.WeightAlertsAndIncidents + 1, Text: "Performance testing", Icon: "k6"},
+ "k6-app": k6Cfg,
}
if s.features.IsEnabledGlobally(featuremgmt.FlagCostManagementUi) {
diff --git a/public/app/core/utils/navBarItem-translations.ts b/public/app/core/utils/navBarItem-translations.ts
index bff076047f5..3c7aae9780e 100644
--- a/public/app/core/utils/navBarItem-translations.ts
+++ b/public/app/core/utils/navBarItem-translations.ts
@@ -1,3 +1,4 @@
+import { config } from '@grafana/runtime';
import { t } from 'app/core/internationalization';
// Maps the ID of the nav item to a translated phrase to later pass to
@@ -126,6 +127,8 @@ export function getNavTitle(navId: string | undefined) {
return t('nav.apps.title', 'Apps');
case 'alerts-and-incidents':
return t('nav.alerts-and-incidents.title', 'Alerts & IRM');
+ case 'testing-and-synthetics':
+ return t('nav.testing-and-synthetics.title', 'Testing & synthetics');
case 'plugin-page-grafana-incident-app':
return t('nav.incidents.title', 'Incidents');
case 'plugin-page-grafana-ml-app':
@@ -133,7 +136,9 @@ export function getNavTitle(navId: string | undefined) {
case 'plugin-page-grafana-slo-app':
return t('nav.slo.title', 'SLO');
case 'plugin-page-k6-app':
- return t('nav.performance-testing.title', 'Performance testing');
+ return config.featureToggles.dockedMegaMenu
+ ? t('nav.k6.title', 'Performance')
+ : t('nav.performance-testing.title', 'Performance testing');
case 'monitoring':
return t('nav.observability.title', 'Observability');
case 'plugin-page-grafana-k8s-app':
@@ -256,6 +261,8 @@ export function getNavSubTitle(navId: string | undefined) {
return t('nav.frontend.subtitle', 'Gain real user monitoring insights');
case 'alerts-and-incidents':
return t('nav.alerts-and-incidents.subtitle', 'Alerting and incident management apps');
+ case 'testing-and-synthetics':
+ return t('nav.testing-and-synthetics.subtitle', 'Optimize performance with k6 and Synthetic Monitoring insights');
case 'connections-add-new-connection':
return t('nav.connections.subtitle', 'Browse and create new connections');
case 'connections-datasources':
diff --git a/public/app/routes/routes.tsx b/public/app/routes/routes.tsx
index ea22c474453..eb131cb7149 100644
--- a/public/app/routes/routes.tsx
+++ b/public/app/routes/routes.tsx
@@ -170,6 +170,10 @@ export function getAppRoutes(): RouteDescriptor[] {
path: '/alerts-and-incidents',
component: () => ,
},
+ {
+ path: '/testing-and-synthetics',
+ component: () => ,
+ },
{
path: '/monitoring',
component: () => ,
diff --git a/public/locales/de-DE/grafana.json b/public/locales/de-DE/grafana.json
index 03878dfc2c0..b2183d09f07 100644
--- a/public/locales/de-DE/grafana.json
+++ b/public/locales/de-DE/grafana.json
@@ -810,6 +810,9 @@
"integrations": {
"title": "Integrationen"
},
+ "k6": {
+ "title": ""
+ },
"kubernetes": {
"title": "Kubernetes"
},
@@ -929,6 +932,10 @@
"subtitle": "Gruppen von Benutzern mit gemeinsamen Dashboards und Benachrichtigungen",
"title": "Teams"
},
+ "testing-and-synthetics": {
+ "subtitle": "",
+ "title": ""
+ },
"upgrading": {
"title": "Statistiken und Lizenz"
},
diff --git a/public/locales/en-US/grafana.json b/public/locales/en-US/grafana.json
index 24320d27405..dfa8029486c 100644
--- a/public/locales/en-US/grafana.json
+++ b/public/locales/en-US/grafana.json
@@ -810,6 +810,9 @@
"integrations": {
"title": "Integrations"
},
+ "k6": {
+ "title": "Performance"
+ },
"kubernetes": {
"title": "Kubernetes"
},
@@ -929,6 +932,10 @@
"subtitle": "Groups of users that have common dashboard and permission needs",
"title": "Teams"
},
+ "testing-and-synthetics": {
+ "subtitle": "Optimize performance with k6 and Synthetic Monitoring insights",
+ "title": "Testing & synthetics"
+ },
"upgrading": {
"title": "Stats and license"
},
diff --git a/public/locales/es-ES/grafana.json b/public/locales/es-ES/grafana.json
index f0cdda2f4c6..92df4a098ef 100644
--- a/public/locales/es-ES/grafana.json
+++ b/public/locales/es-ES/grafana.json
@@ -816,6 +816,9 @@
"integrations": {
"title": "Integraciones"
},
+ "k6": {
+ "title": ""
+ },
"kubernetes": {
"title": "Kubernetes"
},
@@ -935,6 +938,10 @@
"subtitle": "Grupos de usuarios que tienen necesidades comunes de permisos y de panel de control",
"title": "Equipos"
},
+ "testing-and-synthetics": {
+ "subtitle": "",
+ "title": ""
+ },
"upgrading": {
"title": "Estadísticas y licencia"
},
diff --git a/public/locales/fr-FR/grafana.json b/public/locales/fr-FR/grafana.json
index f1939b6c2e2..992a8694dc2 100644
--- a/public/locales/fr-FR/grafana.json
+++ b/public/locales/fr-FR/grafana.json
@@ -816,6 +816,9 @@
"integrations": {
"title": "Intégrations"
},
+ "k6": {
+ "title": ""
+ },
"kubernetes": {
"title": "Kubernetes"
},
@@ -935,6 +938,10 @@
"subtitle": "Groupes d'utilisateurs ayant des besoins communs en matière de tableau de bord et d'autorisations",
"title": "Équipes"
},
+ "testing-and-synthetics": {
+ "subtitle": "",
+ "title": ""
+ },
"upgrading": {
"title": "Statistiques et licence"
},
diff --git a/public/locales/pseudo-LOCALE/grafana.json b/public/locales/pseudo-LOCALE/grafana.json
index 1e361c7addb..6118464aa77 100644
--- a/public/locales/pseudo-LOCALE/grafana.json
+++ b/public/locales/pseudo-LOCALE/grafana.json
@@ -810,6 +810,9 @@
"integrations": {
"title": "Ĩʼnŧęģřäŧįőʼnş"
},
+ "k6": {
+ "title": "Pęřƒőřmäʼnčę"
+ },
"kubernetes": {
"title": "Ķūþęřʼnęŧęş"
},
@@ -929,6 +932,10 @@
"subtitle": "Ğřőūpş őƒ ūşęřş ŧĥäŧ ĥävę čőmmőʼn đäşĥþőäřđ äʼnđ pęřmįşşįőʼn ʼnęęđş",
"title": "Ŧęämş"
},
+ "testing-and-synthetics": {
+ "subtitle": "Øpŧįmįžę pęřƒőřmäʼnčę ŵįŧĥ ĸ6 äʼnđ Ŝyʼnŧĥęŧįč Mőʼnįŧőřįʼnģ įʼnşįģĥŧş",
+ "title": "Ŧęşŧįʼnģ & şyʼnŧĥęŧįčş"
+ },
"upgrading": {
"title": "Ŝŧäŧş äʼnđ ľįčęʼnşę"
},
diff --git a/public/locales/zh-Hans/grafana.json b/public/locales/zh-Hans/grafana.json
index 95e3b972830..c59611769b6 100644
--- a/public/locales/zh-Hans/grafana.json
+++ b/public/locales/zh-Hans/grafana.json
@@ -804,6 +804,9 @@
"integrations": {
"title": "集成"
},
+ "k6": {
+ "title": ""
+ },
"kubernetes": {
"title": "Kubernetes"
},
@@ -923,6 +926,10 @@
"subtitle": "具有共同仪表板和权限需求的用户组",
"title": "团队"
},
+ "testing-and-synthetics": {
+ "subtitle": "",
+ "title": ""
+ },
"upgrading": {
"title": "统计信息和许可证"
},