From bf4940f6770621aa82d91a69eec1446e01ab6087 Mon Sep 17 00:00:00 2001
From: "grafana-pr-automation[bot]"
<140550294+grafana-pr-automation[bot]@users.noreply.github.com>
Date: Fri, 18 Jul 2025 00:39:17 +0000
Subject: [PATCH 01/46] I18n: Download translations from Crowdin (#108285)
New Crowdin translations by GitHub Action
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
---
.../src/locales/de-DE/grafana-prometheus.json | 386 ++--
.../src/locales/hu-HU/grafana-prometheus.json | 386 ++--
.../src/locales/id-ID/grafana-prometheus.json | 384 ++--
.../src/locales/ja-JP/grafana-prometheus.json | 384 ++--
.../src/locales/de-DE/grafana-sql.json | 108 +-
.../src/locales/hu-HU/grafana-sql.json | 108 +-
.../src/locales/id-ID/grafana-sql.json | 108 +-
.../src/locales/ja-JP/grafana-sql.json | 108 +-
.../grafana-azure-monitor-datasource.json | 2 +-
.../grafana-azure-monitor-datasource.json | 2 +-
.../grafana-azure-monitor-datasource.json | 2 +-
.../grafana-azure-monitor-datasource.json | 2 +-
public/locales/cs-CZ/grafana.json | 5 +
public/locales/de-DE/grafana.json | 1913 ++++++++--------
public/locales/es-ES/grafana.json | 5 +
public/locales/fr-FR/grafana.json | 5 +
public/locales/hu-HU/grafana.json | 1917 +++++++++--------
public/locales/id-ID/grafana.json | 1917 +++++++++--------
public/locales/it-IT/grafana.json | 5 +
public/locales/ja-JP/grafana.json | 1917 +++++++++--------
public/locales/ko-KR/grafana.json | 5 +
public/locales/nl-NL/grafana.json | 5 +
public/locales/pl-PL/grafana.json | 5 +
public/locales/pt-BR/grafana.json | 5 +
public/locales/pt-PT/grafana.json | 5 +
public/locales/ru-RU/grafana.json | 5 +
public/locales/sv-SE/grafana.json | 5 +
public/locales/tr-TR/grafana.json | 5 +
public/locales/zh-Hans/grafana.json | 5 +
public/locales/zh-Hant/grafana.json | 5 +
30 files changed, 4902 insertions(+), 4812 deletions(-)
diff --git a/packages/grafana-prometheus/src/locales/de-DE/grafana-prometheus.json b/packages/grafana-prometheus/src/locales/de-DE/grafana-prometheus.json
index b34304ade03..5e9aa8833cd 100644
--- a/packages/grafana-prometheus/src/locales/de-DE/grafana-prometheus.json
+++ b/packages/grafana-prometheus/src/locales/de-DE/grafana-prometheus.json
@@ -2,201 +2,201 @@
"grafana-prometheus": {
"components": {
"annotation-query-editor": {
- "annotation-data-load-error": "",
- "aria-label-lower-limit-parameter": "",
- "label-min-step": "",
- "label-series-value-as-timestamp": "",
+ "annotation-data-load-error": "Fehler beim Laden der Anmerkungsdaten!",
+ "aria-label-lower-limit-parameter": "Untergrenze für den Schrittparameter festlegen",
+ "label-min-step": "Min. Schritt",
+ "label-series-value-as-timestamp": "Reihenwert als Zeitstempel",
"label-tags": "Tags",
- "label-text": "",
+ "label-text": "Text",
"label-title": "Titel",
- "placeholder-auto": "",
- "tooltip-either-pattern-example-instance-replaced-label": "",
- "tooltip-min-step": "",
- "tooltip-timestamp-milliseconds-series-value-seconds-multiply": ""
+ "placeholder-auto": "Auto",
+ "tooltip-either-pattern-example-instance-replaced-label": "Verwenden Sie entweder den Namen oder ein Muster. Ein Beispiel: {{labelTemplate}} wird durch den Label-Wert für das Label {{labelName}} ersetzt.",
+ "tooltip-min-step": "Eine zusätzliche Untergrenze für den Schrittparameter der Prometheus-Abfrage und für die Variablen <2>{{intervalVar}}2> und <4>{{rateIntervalVar}}4>.",
+ "tooltip-timestamp-milliseconds-series-value-seconds-multiply": "Die Einheit des Zeitstempels ist Millisekunden. Wenn die Einheit des Reihenwerts Sekunden ist, multiplizieren Sie den Bereichsvektor mit 1000."
},
"get-query-type-options": {
"description": {
- "instant-query-range": ""
+ "instant-query-range": "Eine Instant-Abfrage und eine Bereichsabfrage ausführen"
},
"label": {
- "both": ""
+ "both": "Beides"
},
"range-options": {
"description": {
- "query-range": ""
+ "query-range": "Abfrage über einen bestimmten Zeitraum ausführen"
},
"label": {
- "instant": "",
- "range": ""
+ "instant": "Instant",
+ "range": "Bereich"
}
}
},
"label-selector": {
- "aria-label-filter-expression-for-label": "",
- "description-select-labels": "",
- "select-labels-to-search-in": ""
+ "aria-label-filter-expression-for-label": "Filterausdruck für Label",
+ "description-select-labels": "Sobald die Label-Werte ausgewählt sind, werden nur mögliche Label-Kombinationen angezeigt.",
+ "select-labels-to-search-in": "2. Wählen Sie Labels aus, in denen gesucht werden soll"
},
"metric-selector": {
- "aria-label-filter-expression-for-metric": "",
- "aria-label-limit-results-from-series-endpoint": "",
- "description-series-limit": "",
- "label-select-metric": "",
- "select-a-metric": "",
- "series-limit": ""
+ "aria-label-filter-expression-for-metric": "Filterausdruck für Metrik",
+ "aria-label-limit-results-from-series-endpoint": "Ergebnisse vom Reihenendpunkt begrenzen",
+ "description-series-limit": "Die Grenze gilt für alle Metriken, Labels und Werte. Wenn Sie das Feld leer lassen, wird die Standardgrenze verwendet. Durch eine Einstellung auf 0 wird die Grenze deaktiviert und alles abgerufen – dies kann zu Leistungsproblemen führen.",
+ "label-select-metric": "Sobald eine Metrik ausgewählt ist, werden nur mögliche Labels angezeigt. Labels werden durch die folgende Reihengrenze begrenzt.",
+ "select-a-metric": "1. Metrik auswählen",
+ "series-limit": "Reihengrenze"
},
"prom-cheat-sheet": {
- "prom-ql-cheat-sheet": ""
+ "prom-ql-cheat-sheet": "PromQL Cheat Sheet"
},
"prom-exemplar-field": {
- "exemplars": "",
- "tooltip-disable-query": "",
- "tooltip-enable-query": ""
+ "exemplars": "Exemplare",
+ "tooltip-disable-query": "Abfrage mit Exemplaren deaktivieren",
+ "tooltip-enable-query": "Abfrage mit Exemplaren aktivieren"
},
"prom-explore-extra-field": {
- "aria-label-prometheus-extra-field": "",
- "aria-label-query-type-field": "",
- "aria-label-step-field": "",
- "min-step": "",
- "query-type": "",
- "tooltip-units-builtin-variables-example-interval-rateinterval": ""
+ "aria-label-prometheus-extra-field": "Zusätzliches Feld in Prometheus",
+ "aria-label-query-type-field": "Abfragetyp-Feld",
+ "aria-label-step-field": "Schrittfeld",
+ "min-step": "Min. Schritt",
+ "query-type": "Abfragetyp",
+ "tooltip-units-builtin-variables-example-interval-rateinterval": "Hier können Zeiteinheiten und integrierte Variablen verwendet werden, zum Beispiel: {{example1}}, {{example2}}, {{example3}}, {{example4}}, {{example5}}, {{example6}}, {{example7}} (Standardwert bei fehlender Einheit: {{default}})"
},
"prom-query-field": {
- "placeholder-enter-a-prom-ql-query": ""
+ "placeholder-enter-a-prom-ql-query": "Geben Sie eine PromQL-Abfrage ein …"
},
"prom-variable-query-editor": {
- "aria-label-classic-query": "",
- "aria-label-metric-regex": "",
- "aria-label-metric-selector": "",
- "aria-label-prometheus-query": "",
- "aria-label-query-type": "",
- "aria-label-series-query": "",
- "label-classic-query": "",
+ "aria-label-classic-query": "Klassische Abfrage",
+ "aria-label-metric-regex": "Metrik-Regex",
+ "aria-label-metric-selector": "Metrik-Selektor",
+ "aria-label-prometheus-query": "Prometheus-Abfrage",
+ "aria-label-query-type": "Abfragetyp",
+ "aria-label-series-query": "Reihenabfrage",
+ "label-classic-query": "Klassische Abfrage",
"label-label": "Label",
- "label-metric-regex": "",
+ "label-metric-regex": "Metrik-RegEx",
"label-query": "Abfrage",
- "label-query-type": "",
- "label-series-query": "",
- "placeholder-classic-query": "",
- "placeholder-metric-regex": "",
- "placeholder-prometheus-query": "",
+ "label-query-type": "Abfragetyp",
+ "label-series-query": "Reihenabfrage",
+ "placeholder-classic-query": "Klassische Abfrage",
+ "placeholder-metric-regex": "Metrik-Regex",
+ "placeholder-prometheus-query": "Prometheus-Abfrage",
"placeholder-select-query-type": "Abfragetyp auswählen",
- "placeholder-series-query": "",
- "returns-metrics-matching-specified-metric-regex": "",
- "tooltip-classic-query": "",
- "tooltip-label": "",
- "tooltip-metric-regex": "",
- "tooltip-query": "",
- "tooltip-query-type": "",
- "tooltip-series-query": ""
+ "placeholder-series-query": "Reihenabfrage",
+ "returns-metrics-matching-specified-metric-regex": "Gibt eine Liste von Metriken zurück, die mit dem angegebenen Metrik-Regex übereinstimmen.",
+ "tooltip-classic-query": "Die ursprüngliche Implementierung des Prometheus-Variablen-Abfrageeditors. Geben Sie eine Zeichenfolge mit dem richtigen Abfragetyp und den richtigen Parametern ein, wie in diesen Dokumenten beschrieben. Zum Beispiel: {{exampleQuery}}.",
+ "tooltip-label": "Gibt eine Liste von Label-Werten für den Label-Namen in allen Metriken zurück, es sei denn, die Metrik ist angegeben.",
+ "tooltip-metric-regex": "Gibt eine Liste von Label-Namen zurück, die optional gemäß dem angegebenen Metrik-Regex gefiltert werden.",
+ "tooltip-query": "Gibt eine Liste der Prometheus-Abfrageergebnisse für die Abfrage zurück. Dies kann Prometheus-Funktionen umfassen, z. B. {{exampleQuery}}.",
+ "tooltip-query-type": "Das Prometheus-Datenquellen-Plugin bietet die folgenden Abfragetypen für Vorlagenvariablen.",
+ "tooltip-series-query": "Geben Sie eine Metrik mit Labels ein, nur eine Metrik oder nur Labels, z. B. {{example1}}, {{example2}} oder {{example3}}. Gibt eine Liste der Zeitreihen zurück, die den eingegebenen Daten zugeordnet sind."
},
"selector-actions": {
- "aria-label-selector": "",
- "aria-label-selector-clear-button": "",
- "aria-label-use-selector-as-metrics-button": "",
- "aria-label-use-selector-for-query-button": "",
- "aria-label-validate-submit-button": "",
+ "aria-label-selector": "Selektor",
+ "aria-label-selector-clear-button": "Löschen-Schaltfläche des Selektors",
+ "aria-label-use-selector-as-metrics-button": "Schaltfläche zur Verwendung des Selektors als Metrik",
+ "aria-label-use-selector-for-query-button": "Schaltfläche zur Verwendung des Selektors für die Abfrage",
+ "aria-label-validate-submit-button": "Validieren und Absenden-Schaltfläche",
"clear": "Löschen",
- "resulting-selector": "",
- "use-as-rate-query": "",
- "use-query": "",
- "validate-selector": ""
+ "resulting-selector": "4. Resultierender Selektor",
+ "use-as-rate-query": "Als Bewertungsabfrage verwenden",
+ "use-query": "Abfrage verwenden",
+ "validate-selector": "Selektor validieren"
},
"value-selector": {
- "aria-label-filter-expression-for-label-values": "",
- "aria-label-values-for": "",
- "description-search-field-values-across-selected-labels": "",
- "select-multiple-values-for-your-labels": ""
+ "aria-label-filter-expression-for-label-values": "Filterausdruck für Label-Werte",
+ "aria-label-values-for": "Werte für {{labelKey}}",
+ "description-search-field-values-across-selected-labels": "Verwenden Sie das Suchfeld, um Werte über mehrere ausgewählte Labels zu finden.",
+ "select-multiple-values-for-your-labels": "3. Wählen Sie (mehrere) Werte für Ihre Labels aus"
}
},
"configuration": {
"alerting-settings-overhaul": {
- "label-allow-as-recording-rules-target": "",
- "label-manage-alerts-via-alerting-ui": "",
+ "label-allow-as-recording-rules-target": "Als Ziel für Aufnahmeregeln zulassen",
+ "label-manage-alerts-via-alerting-ui": "Benachrichtigungen über Alerting-UI verwalten",
"title-alerting": "Meldungen",
- "tooltip-allow-as-recording-rules-target": "",
+ "tooltip-allow-as-recording-rules-target": "Erlauben, dass diese Datenquelle als Ziel für das Schreiben von Aufnahmeregeln ausgewählt wird.",
"tooltip-manage-alerts-via-alerting-ui": "Verwalten Sie Warnregeln für diese Datenquelle. Fügen Sie eine Altermanager-Datenquelle hinzu, um andere Warnressourcen zu verwalten."
},
"config-editor": {
- "browser-access-mode-error": "",
- "description-advanced-settings": "",
+ "browser-access-mode-error": "Der Browserzugriffsmodus in der Prometheus-Datenquelle ist nicht mehr verfügbar. Wechseln Sie in den Serverzugriffsmodus.",
+ "description-advanced-settings": "Zusätzliche Einstellungen sind optionale Einstellungen, die für mehr Kontrolle über Ihre Datenquelle konfiguriert werden können.",
"title-advanced-settings": "Erweiterte Einstellungen",
"title-error": "Fehler"
},
"data-source-http-settings-overhaul": {
"tooltip-browser-access-mode": "Ihre Zugriffsmethode ist <1>Browser1>, d. h. die URL muss über den Browser zugänglich sein.",
- "tooltip-http-url": "",
+ "tooltip-http-url": "Geben Sie eine vollständige HTTP-URL an (z. B. {{exampleURL}})",
"tooltip-server-access-mode": "Ihre Zugriffsmethode ist <1>Server1>, d. h. die URL muss über das Grafana-Backend/den Grafana-Server zugänglich sein."
},
"docs-tip": {
- "visit-docs-for-more-details-here": ""
+ "visit-docs-for-more-details-here": "Weitere Details finden Sie hier in der Dokumentation."
},
"exemplar-setting": {
"label-data-source": "Datenquelle",
- "label-internal-link": "",
+ "label-internal-link": "Interner Link",
"label-label-name": "Label-Name",
- "label-remove-exemplar-link": "",
+ "label-remove-exemplar-link": "Exemplar-Link entfernen",
"label-url": "URL",
- "label-url-label": "",
- "placeholder-go-to-examplecom": "",
- "placeholder-httpsexamplecomvalueraw": "",
- "placeholder-trace-id": "",
- "title-remove-exemplar-link": "",
- "tooltip-data-source": "",
- "tooltip-internal-link": "",
- "tooltip-label-name": "",
- "tooltip-url": "",
- "tooltip-url-label": ""
+ "label-url-label": "URL-Label",
+ "placeholder-go-to-examplecom": "Zu example.com",
+ "placeholder-httpsexamplecomvalueraw": "https://example.com/${__value.raw}",
+ "placeholder-trace-id": "traceID",
+ "title-remove-exemplar-link": "Exemplar-Link entfernen",
+ "tooltip-data-source": "Die Datenquelle, zu der das Exemplar navigiert.",
+ "tooltip-internal-link": "Aktivieren Sie diese Option, wenn Sie einen internen Link haben. Wenn dies aktiviert ist, wird der Datenquellen-Selektor angezeigt. Wählen Sie den Backend-Tracing-Datenspeicher für Ihre Exemplar-Daten aus.",
+ "tooltip-label-name": "Der Name des Felds im Label-Objekt, das für den Erhalt der TraceID verwendet werden soll.",
+ "tooltip-url": "Die URL des Trace-Backends, die der Nutzer zur Ansicht des Trace aufrufen würde",
+ "tooltip-url-label": "Damit können Sie das Schaltflächen-Label im Feld der Exemplar-TraceID überschreiben."
},
"exemplars-settings": {
"add": "Hinzufügen",
- "no-exemplars-configurations": "",
- "title-exemplars": ""
+ "no-exemplars-configurations": "Keine Exemplar-Konfigurationen",
+ "title-exemplars": "Exemplare"
},
"prom-settings": {
- "aria-label-default-editor": "",
- "aria-label-prom-type-type": "",
- "aria-label-prometheus-type": "",
- "aria-label-select-http-method": "",
+ "aria-label-default-editor": "Standard-Editor (Code oder Builder)",
+ "aria-label-prom-type-type": "{{promType}} Typ",
+ "aria-label-prometheus-type": "Prometheus-Typ",
+ "aria-label-select-http-method": "HTTP-Methode auswählen",
"editor-options": {
"label-builder": "",
"label-code": ""
},
- "label-cache-level": "",
- "label-custom-query-parameters": "",
- "label-default-editor": "",
- "label-disable-metrics-lookup": "",
- "label-disable-recording-rules-beta": "",
- "label-http-method": "",
- "label-incremental-querying-beta": "",
- "label-metric-names-suggestion-limit": "",
- "label-prom-type-version": "",
- "label-prometheus-type": "",
- "label-query-overlap-window": "",
- "label-query-timeout": "",
- "label-scrape-interval": "",
- "label-series-limit": "",
- "label-use-series-endpoint": "",
- "more-info": "",
- "placeholder-example-maxsourceresolutionmtimeout": "",
- "title-interval-behaviour": "",
- "title-other": "",
+ "label-cache-level": "Cache-Level",
+ "label-custom-query-parameters": "Benutzerdefinierte Abfrageparameter",
+ "label-default-editor": "Standard-Editor",
+ "label-disable-metrics-lookup": "Metrik-Suche deaktivieren",
+ "label-disable-recording-rules-beta": "Aufnahmeregeln deaktivieren (Beta)",
+ "label-http-method": "HTTP-Methode",
+ "label-incremental-querying-beta": "Inkrementelle Abfrage (Beta)",
+ "label-metric-names-suggestion-limit": "Begrenzung der Vorschläge für Metriknamen",
+ "label-prom-type-version": "{{promType}} Version",
+ "label-prometheus-type": "Prometheus-Typ",
+ "label-query-overlap-window": "Fenster der Abfrage-Überschneidung",
+ "label-query-timeout": "Abfrage-Timeout",
+ "label-scrape-interval": "Scrape-Intervall",
+ "label-series-limit": "Reihengrenze",
+ "label-use-series-endpoint": "Reihenendpunkt verwenden",
+ "more-info": "Weitere Informationen zur Konfiguration des Typs und der Version von Prometheus in Datenquellen finden Sie in der <2>Bereitstellungsdokumentation2>.",
+ "placeholder-example-maxsourceresolutionmtimeout": "Beispiel: {{example}}",
+ "title-interval-behaviour": "Intervallverhalten",
+ "title-other": "Sonstiges",
"title-performance": "Leistung",
- "title-query-editor": "",
- "tooltip-cache-level": "",
- "tooltip-custom-query-parameters": "",
- "tooltip-default-editor": "",
- "tooltip-disable-metrics-lookup": "",
- "tooltip-disable-recording-rules-beta": "",
- "tooltip-http-method": "",
- "tooltip-incremental-querying-beta": "",
- "tooltip-metric-names-suggestion-limit": "",
- "tooltip-prom-type-version": "",
- "tooltip-prometheus-type": "",
- "tooltip-query-overlap-window": "",
- "tooltip-query-timeout": "",
- "tooltip-scrape-interval": "",
- "tooltip-series-limit": "",
- "tooltip-use-series-endpoint": ""
+ "title-query-editor": "Abfrage-Editor",
+ "tooltip-cache-level": "Legt die Browser-Cache-Level für Editor-Abfragen fest. Für Datenquellen mit hoher Kardinalität werden höhere Cache-Einstellungen empfohlen.",
+ "tooltip-custom-query-parameters": "Fügen Sie der URL der Prometheus-Abfrage benutzerdefinierte Parameter hinzu. Zum Beispiel {{example1}}, {{example2}}, {{example3}} oder {{example4}}. Mehrere Parameter sollten mit {{concatenationChar}} verknüpft werden.",
+ "tooltip-default-editor": "Legen Sie die Standard-Editoroption für alle Nutzer dieser Datenquelle fest.",
+ "tooltip-disable-metrics-lookup": "Wenn diese Option aktiviert ist, werden die Metrikauswahl und die Unterstützung für Metriken/Labels im Rahmen der Autovervollständigung des Abfragefelds deaktiviert. Dies hilft, wenn Sie Leistungsprobleme mit größeren Prometheus-Instanzen haben. ",
+ "tooltip-disable-recording-rules-beta": "Diese Funktion deaktiviert die Aufnahmeregeln. Wenn Sie dies aktivieren, wird die Dashboard-Leistung verbessert",
+ "tooltip-http-method": "Sie können entweder die HTTP-Methode POST oder GET für die Abfrage Ihrer Prometheus-Datenquelle verwenden. POST ist die empfohlene Methode, da sie größere Abfragen ermöglicht. Ändern Sie dies zu GET, wenn Ihre Prometheus-Version älter als 2.1 ist oder POST-Abfragen in Ihrem Netzwerk beschränkt sind.",
+ "tooltip-incremental-querying-beta": "Diese Funktion ändert das Standardverhalten von relativen Abfragen, sodass immer neue Daten von der Prometheus-Instanz abgefragt werden. Stattdessen werden Abfrageergebnisse zwischengespeichert und nur neue Datensätze abgefragt. Wenn Sie dies aktivieren, wird die Datenbank- und Netzwerklast reduziert.",
+ "tooltip-metric-names-suggestion-limit": "Die maximale Anzahl an Metriknamen, die im Code-Modus des Abfrage-Editors als Vorschläge im Rahmen der Autovervollständigung angezeigt werden können.",
+ "tooltip-prom-type-version": "Nutzen Sie diese Option, um die Version Ihrer Instanz von {{promType}} festzulegen, wenn sie nicht automatisch konfiguriert wird.",
+ "tooltip-prometheus-type": "Stellen Sie dies auf den Typ Ihrer Prometheus-Datenbank ein, z. B. Prometheus, Cortex, Mimir oder Thanos. Wenn Sie dieses Feld ändern, werden Ihre aktuellen Einstellungen gespeichert. Bestimmte Typen von Prometheus unterstützen entweder verschiedene APIs oder nicht. Zum Beispiel unterstützen manche Typen Regex-Matching für Label-Abfragen, um die Leistung zu verbessern. Manche Typen haben eine API für Metadaten. Wenn Sie dies falsch einstellen, kann es bei der Abfrage von Metriken und Labels zu einem ungewöhnlichen Verhalten kommen. Bitte prüfen Sie Ihre Prometheus-Dokumentation, um sicherzugehen, dass Sie den richtigen Typ eingeben.",
+ "tooltip-query-overlap-window": "Stellen Sie eine Dauer ein, zum Beispiel {{example1}} oder {{example2}} oder {{example3}}. Standardwert: {{default}}. Diese Dauer wird zur Dauer jeder inkrementellen Abfrage hinzugefügt.",
+ "tooltip-query-timeout": "Legen Sie das Prometheus-Abfrage-Timeout fest.",
+ "tooltip-scrape-interval": "Dieses Intervall gibt an, wie oft Prometheus ein Scraping für Ziele durchführt. Stellen Sie dies auf das typische Scrape- und Bewertungsintervall ein, das in Ihrer Prometheus-Konfigurationsdatei konfiguriert ist. Wenn Sie dies auf einen größeren Wert als das Intervall Ihrer Prometheus-Konfigurationsdatei einstellen, wertet Grafana die Daten gemäß diesem Intervall aus und Sie sehen weniger Datenpunkte. Standardmäßig {{default}}.",
+ "tooltip-series-limit": "Die Grenze gilt für alle Ressourcen (Metriken, Labels und Werte) für beide Endpunkte (Reihen und Labels). Wenn Sie das Feld leer lassen, wird die Standardgrenze verwendet (40.000). Durch eine Einstellung auf 0 wird die Grenze deaktiviert und alles abgerufen – dies kann zu Leistungsproblemen führen. Die Standardgrenze beträgt 40.000.",
+ "tooltip-use-series-endpoint": "Wenn diese Option aktiviert ist, wird der Reihenendpunkt mit dem Parameter {{exampleParameter}} gegenüber dem Endpunkt der Label-Werte mit dem Parameter {{exampleParameter}} bevorzugt. Obwohl der Endpunkt der Label-Werte als leistungsfähiger gilt, könnten manche Nutzer die Reihe bevorzugen, da sie über eine POST-Methode verfügt, während der Endpunkt der Label-Werte nur über eine GET-Methode verfügt."
}
},
"prom-query-legend-editor": {
@@ -211,12 +211,12 @@
},
"querybuilder": {
"additional-settings": {
- "content-filter-metric-names-regex-search-using": "",
- "disable-text-wrap": ""
+ "content-filter-metric-names-regex-search-using": "Filtern Sie Metriknamen per Regex-Suche und nutzen Sie dabei einen zusätzlichen Aufruf der Prometheus-API.",
+ "disable-text-wrap": "Textumbruch deaktivieren"
},
"feedback-link": {
"give-feedback": "Feedback geben",
- "title-give-feedback": ""
+ "title-give-feedback": "Der Metrik-Explorer ist neu. Bitte teilen Sie uns mit, wie wir ihn verbessern können."
},
"get-collapsed-info": {
"exemplars": "",
@@ -250,18 +250,18 @@
},
"handle-function": {
"text": {
- "query-parsing-is-ambiguous": ""
+ "query-parsing-is-ambiguous": "Das Abfrage-Parsing ist unklar."
}
},
"label-filter-item": {
- "aria-label-remove": "",
- "placeholder-select-label": "",
+ "aria-label-remove": "Entfernen von {{name}}",
+ "placeholder-select-label": "Label auswählen",
"placeholder-select-value": "Wert auswählen"
},
"label-filters": {
- "label-filters": "",
- "label-label-filters": "",
- "tooltip-label-filters": ""
+ "label-filters": "Label-Filter",
+ "label-label-filters": "Label-Filter",
+ "tooltip-label-filters": "Optional: wird verwendet, um die Metrikauswahl für diesen Abfragetyp zu filtern."
},
"label-param-editor": {
"loadingMessage-loading-labels": "",
@@ -269,92 +269,92 @@
},
"metric-combobox": {
"async-select": {
- "aria-label-open-metrics-explorer": "",
- "placeholder-select-metric": "",
- "tooltip-open-metrics-explorer": ""
+ "aria-label-open-metrics-explorer": "Metrik-Explorer öffnen",
+ "placeholder-select-metric": "Metrik auswählen",
+ "tooltip-open-metrics-explorer": "Metrik-Explorer öffnen"
},
"label-metric": "Metrik",
- "tooltip-metric": ""
+ "tooltip-metric": "Optional: gibt eine Liste von Label-Werten für den Label-Namen in der angegebenen Metrik zurück."
},
"metrics-modal": {
- "additional-settings": "",
+ "additional-settings": "Zusätzliche Einstellungen",
"aria-label-additional-settings": "Zusätzliche Einstellungen",
- "aria-label-browse-metrics": "",
- "currently-selected": "",
- "metrics-pre-filtered": "",
- "placeholder-results-per-page": "",
- "results-per-page": "",
- "title-metrics-explorer": "",
- "results-amount_one": "",
- "results-amount_other": ""
+ "aria-label-browse-metrics": "Metriken durchsuchen",
+ "currently-selected": "Aktuell ausgewählt: {{selected}}",
+ "metrics-pre-filtered": "Diese Metriken wurden anhand der Labels, die in den Label-Filtern ausgewählt wurden, vorgefiltert.",
+ "placeholder-results-per-page": "Ergebnisse pro Seite",
+ "results-per-page": "Ergebnisse pro Seite",
+ "title-metrics-explorer": "Metrik-Explorer",
+ "results-amount_one": "{{num}} von {{count}} Ergebnissen werden angezeigt",
+ "results-amount_other": "{{num}} von {{count}} Ergebnissen werden angezeigt"
},
"nested-query": {
"label": {
- "ignoring": "",
+ "ignoring": "Ignorieren",
"on": "Aktiviert"
},
"operator": "Bediener",
- "tooltip-remove-match": "",
- "vector-matches": ""
+ "tooltip-remove-match": "Übereinstimmung entfernen",
+ "vector-matches": "Vektorübereinstimmungen"
},
"operation-editor": {
- "not-found": "",
- "title-remove": ""
+ "not-found": "Vorgang {{id}} nicht gefunden",
+ "title-remove": "Entfernen von {{name}}"
},
"operation-header": {
"placeholder-replace-with": "Ersetzen mit",
- "title-click-to-view-alternative-operations": "",
- "title-remove-operation": ""
+ "title-click-to-view-alternative-operations": "Klicken Sie zur Anzeige alternativer Vorgänge",
+ "title-remove-operation": "Vorgang entfernen"
},
"operation-info-button": {
- "title-click-to-show-description": "",
- "title-remove-operation": ""
+ "title-click-to-show-description": "Klicken Sie zur Ansicht der Beschreibung",
+ "title-remove-operation": "Operation entfernen"
},
"operation-list": {
- "operations": "",
+ "operations": "Vorgänge",
"placeholder-search": "Suche",
- "title-add-operation": ""
+ "title-add-operation": "Vorgang hinzufügen"
},
"operation-param-editor": {
- "title-add": "",
- "title-remove": ""
+ "title-add": "{{name}} hinzufügen",
+ "title-remove": "{{name}} entfernen"
},
"prom-query-builder-options": {
- "aria-label-lower-limit-parameter": "",
- "aria-label-select-resolution": "",
+ "aria-label-lower-limit-parameter": "Untergrenze für den Schrittparameter festlegen",
+ "aria-label-select-resolution": "Auflösung auswählen",
"format-options": {
"label-heatmap": "",
"label-table": "",
"label-time-series": ""
},
- "label-exemplars": "",
+ "label-exemplars": "Exemplare",
"label-format": "Format",
- "label-min-step": "",
- "label-resolution": "",
+ "label-min-step": "Min. Schritt",
+ "label-resolution": "Auflösung",
"label-type": "Typ",
- "placeholder-auto": "",
+ "placeholder-auto": "Auto",
"title-options": "Optionen",
- "tooltip-min-step": ""
+ "tooltip-min-step": "Eine zusätzliche Untergrenze für den Schrittparameter der Prometheus-Abfrage und für die Variablen <2>{{interval}}2> und <4>{{rateInterval}}4>."
},
"prom-query-code-editor-autocomplete-info": {
- "autocomplete-suggestions-limited": "",
- "tooltip-autocomplete-suggestions-limited": ""
+ "autocomplete-suggestions-limited": "Vorschläge der Autovervollständigung begrenzt",
+ "tooltip-autocomplete-suggestions-limited": "Die Anzahl der Metriknamen überschreitet die Grenze der Autovervollständigung. Es werden nur die für {{autocompleteLimit}} relevantesten Metriken angezeigt. Sie können die Grenze in den Datenquelleneinstellungen anpassen."
},
"prom-query-editor-selector": {
"body-syntax-error": "",
"confirmText-continue": "",
"kick-start-your-query": "Starten Sie Ihre Abfrage",
- "label-explain": "",
- "run-queries": "",
- "title-parsing-error-switch-builder": ""
+ "label-explain": "Erklären",
+ "run-queries": "Abfragen ausführen",
+ "title-parsing-error-switch-builder": "Parsing-Fehler: In den Builder-Modus wechseln?"
},
"prom-query-legend-editor": {
- "label-legend": "",
- "placeholder-select-legend-mode": "",
- "tooltip-legend": ""
+ "label-legend": "Legende",
+ "placeholder-select-legend-mode": "Legendenmodus auswählen",
+ "tooltip-legend": "Überschreibung des Reihennamens oder Vorlage. Beispiel: {{templateExample}} wird durch den Label-Wert für {{labelName}} ersetzt."
},
"query-builder-hints": {
- "hint-details": ""
+ "hint-details": "Hinweis: {{hintDetails}}"
},
"query-editor-mode-toggle": {
"editor-modes": {
@@ -363,30 +363,30 @@
}
},
"query-pattern": {
- "apply-query": "",
- "aria-label-apply-query-starter-button": "",
- "aria-label-back-button": "",
- "aria-label-create-new-query-button": "",
- "aria-label-raw-query": "",
- "aria-label-use-this-query-button": "",
+ "apply-query": "Abfrage anwenden",
+ "aria-label-apply-query-starter-button": "Schaltfläche zur Anwendung des Abfrage-Starters",
+ "aria-label-back-button": "Zurück-Schaltfläche",
+ "aria-label-create-new-query-button": "Schaltfläche zur Erstellung einer neuen Abfrage",
+ "aria-label-raw-query": "{{patternName}} Rohabfrage",
+ "aria-label-use-this-query-button": "Schaltfläche zum Nutzen dieser Abfrage",
"back": "Zurück",
- "create-new-query": "",
+ "create-new-query": "Neue Abfrage erstellen",
"use-this-query": "Diese Abfrage nutzen"
},
"query-patterns-modal": {
- "aria-label-close-kick-start-your-query-modal": "",
+ "aria-label-close-kick-start-your-query-modal": "Modal zum Starten Ihrer Abfrage schließen",
"aria-label-kick-start-your-query-modal": "Starten Sie Ihr Abfrage-Modal",
- "aria-label-toggle-query-starter": "",
+ "aria-label-toggle-query-starter": "Öffnen und Schließen der {{patternType}} Abfrage-Starter-Karte",
"close": "Schließen",
- "description-kick-start-your-query": "",
- "label-toggle-query-starter": "",
+ "description-kick-start-your-query": "Starten Sie Ihre Abfrage, indem Sie eine dieser Abfragen auswählen. Sie können dann mit dem Abschluss Ihrer Abfrage fortfahren.",
+ "label-toggle-query-starter": "{{patternType}} Abfrage-Starter",
"title-kick-start-your-query": "Starten Sie Ihre Abfrage"
},
"raw-query": {
- "aria-label-selector": ""
+ "aria-label-selector": "Selektor"
},
"results-table": {
- "content-descriptive-type": "",
+ "content-descriptive-type": "Bei der Erstellung von {{descriptiveType}} zeigt Prometheus mehrere Reihen mit dem Typ Counter. ",
"description": "Beschreibung",
"message-expand-label-filters": "",
"message-expand-search": "",
@@ -397,7 +397,7 @@
},
"update-function-args": {
"text": {
- "query-parsing-is-ambiguous": ""
+ "query-parsing-is-ambiguous": "Das Abfrage-Parsing ist unklar."
}
}
}
diff --git a/packages/grafana-prometheus/src/locales/hu-HU/grafana-prometheus.json b/packages/grafana-prometheus/src/locales/hu-HU/grafana-prometheus.json
index 80848ade77a..1dd2ee85be0 100644
--- a/packages/grafana-prometheus/src/locales/hu-HU/grafana-prometheus.json
+++ b/packages/grafana-prometheus/src/locales/hu-HU/grafana-prometheus.json
@@ -2,201 +2,201 @@
"grafana-prometheus": {
"components": {
"annotation-query-editor": {
- "annotation-data-load-error": "",
- "aria-label-lower-limit-parameter": "",
- "label-min-step": "",
- "label-series-value-as-timestamp": "",
+ "annotation-data-load-error": "Hiba a jegyzetadatok betöltése során.",
+ "aria-label-lower-limit-parameter": "Állítsa be a léptékparaméter alsó határát",
+ "label-min-step": "Min. lépték",
+ "label-series-value-as-timestamp": "Sorozatérték időbélyegként",
"label-tags": "Címkék",
- "label-text": "",
+ "label-text": "Szöveg",
"label-title": "Cím",
- "placeholder-auto": "",
- "tooltip-either-pattern-example-instance-replaced-label": "",
- "tooltip-min-step": "",
- "tooltip-timestamp-milliseconds-series-value-seconds-multiply": ""
+ "placeholder-auto": "automatikus",
+ "tooltip-either-pattern-example-instance-replaced-label": "Használja a nevet vagy egy mintázatot. Például a(z) {{labelTemplate}} helyébe a(z) {{labelName}} címke címkeértéke lép.",
+ "tooltip-min-step": "További alsó határérték a Prometheus-lekérdezés lépésparaméteréhez, valamint a(z) <2>{{intervalVar}}2> és <4>{{rateIntervalVar}}4> változóhoz.",
+ "tooltip-timestamp-milliseconds-series-value-seconds-multiply": "Az időbélyeg mértékegysége az ezredmásodperc. Ha a sorozatérték mértékegysége a másodperc, szorozza meg a tartományvektorát 1000-rel."
},
"get-query-type-options": {
"description": {
- "instant-query-range": ""
+ "instant-query-range": "Azonnali lekérdezés és tartománylekérdezés futtatása"
},
"label": {
- "both": ""
+ "both": "Mindkettő"
},
"range-options": {
"description": {
- "query-range": ""
+ "query-range": "Lekérdezés futtatása egy időtartományban"
},
"label": {
- "instant": "",
- "range": ""
+ "instant": "Azonnali",
+ "range": "Tartomány"
}
}
},
"label-selector": {
- "aria-label-filter-expression-for-label": "",
- "description-select-labels": "",
- "select-labels-to-search-in": ""
+ "aria-label-filter-expression-for-label": "Szűrőkifejezés címkéhez",
+ "description-select-labels": "A címkeértékek kiválasztása után csak a lehetséges címkekombinációk jelennek meg.",
+ "select-labels-to-search-in": "2. Válassza ki a kereséshez használni kívánt címkéket"
},
"metric-selector": {
- "aria-label-filter-expression-for-metric": "",
- "aria-label-limit-results-from-series-endpoint": "",
- "description-series-limit": "",
- "label-select-metric": "",
- "select-a-metric": "",
- "series-limit": ""
+ "aria-label-filter-expression-for-metric": "Szűrőkifejezés a metrikához",
+ "aria-label-limit-results-from-series-endpoint": "A sorozat végpontjáról származó eredmények korlátozása",
+ "description-series-limit": "A korlát minden metrikára, címkére és értékre vonatkozik. Hagyja üresen a mezőt az alapértelmezett korlát használatához. Állítsa 0-ra a korlát letiltásához és az összes lekéréséhez – ez teljesítményproblémákat okozhat.",
+ "label-select-metric": "A metrika kiválasztása után csak a lehetséges címkék jelennek meg. A címkéket az alábbi sorozatkorlát korlátozza.",
+ "select-a-metric": "1. Válasszon egy metrikát",
+ "series-limit": "Sorozatkorlát"
},
"prom-cheat-sheet": {
- "prom-ql-cheat-sheet": ""
+ "prom-ql-cheat-sheet": "PromQL-puska"
},
"prom-exemplar-field": {
- "exemplars": "",
- "tooltip-disable-query": "",
- "tooltip-enable-query": ""
+ "exemplars": "Mintapéldányok",
+ "tooltip-disable-query": "Mintapéldányokkal rendelkező lekérdezések letiltása",
+ "tooltip-enable-query": "Mintapéldányokkal rendelkező lekérdezések engedélyezése"
},
"prom-explore-extra-field": {
- "aria-label-prometheus-extra-field": "",
- "aria-label-query-type-field": "",
- "aria-label-step-field": "",
- "min-step": "",
- "query-type": "",
- "tooltip-units-builtin-variables-example-interval-rateinterval": ""
+ "aria-label-prometheus-extra-field": "Prometheus extra mező",
+ "aria-label-query-type-field": "Lekérdezéstípus mező",
+ "aria-label-step-field": "Lépték mező",
+ "min-step": "Min. lépték",
+ "query-type": "Lekérdezés típusa",
+ "tooltip-units-builtin-variables-example-interval-rateinterval": "Itt időegységek és beépített változók használhatók, például: {{example1}}, {{example2}}, {{example3}}, {{example4}}, {{example5}}, {{example6}}, {{example7}} (alapértelmezett, ha nincs megadva mértékegység: {{default}})"
},
"prom-query-field": {
- "placeholder-enter-a-prom-ql-query": ""
+ "placeholder-enter-a-prom-ql-query": "Írjon be egy PromQL-lekérdezést…"
},
"prom-variable-query-editor": {
- "aria-label-classic-query": "",
- "aria-label-metric-regex": "",
- "aria-label-metric-selector": "",
- "aria-label-prometheus-query": "",
- "aria-label-query-type": "",
- "aria-label-series-query": "",
- "label-classic-query": "",
+ "aria-label-classic-query": "Klasszikus lekérdezés",
+ "aria-label-metric-regex": "Metrika reguláris kifejezése",
+ "aria-label-metric-selector": "Metrikaválasztó",
+ "aria-label-prometheus-query": "Prometheus-lekérdezés",
+ "aria-label-query-type": "Lekérdezés típusa",
+ "aria-label-series-query": "Sorozatlekérdezés",
+ "label-classic-query": "Klasszikus lekérdezés",
"label-label": "Címke",
- "label-metric-regex": "",
+ "label-metric-regex": "Metrika reguláris kifejezése",
"label-query": "Lekérdezés",
- "label-query-type": "",
- "label-series-query": "",
- "placeholder-classic-query": "",
- "placeholder-metric-regex": "",
- "placeholder-prometheus-query": "",
+ "label-query-type": "Lekérdezés típusa",
+ "label-series-query": "Sorozatlekérdezés",
+ "placeholder-classic-query": "Klasszikus lekérdezés",
+ "placeholder-metric-regex": "Metrika reguláris kifejezése",
+ "placeholder-prometheus-query": "Prometheus-lekérdezés",
"placeholder-select-query-type": "Lekérdezéstípus kiválasztása",
- "placeholder-series-query": "",
- "returns-metrics-matching-specified-metric-regex": "",
- "tooltip-classic-query": "",
- "tooltip-label": "",
- "tooltip-metric-regex": "",
- "tooltip-query": "",
- "tooltip-query-type": "",
- "tooltip-series-query": ""
+ "placeholder-series-query": "Sorozatlekérdezés",
+ "returns-metrics-matching-specified-metric-regex": "A megadott metrikai reguláris kifejezésnek megfelelő metrikák listáját adja vissza.",
+ "tooltip-classic-query": "A Prometheus változólekérdezés-szerkesztő eredeti implementációja. Adjon meg egy karakterláncot a megfelelő lekérdezéstípussal és paraméterekkel, a jelen dokumentumokban leírtak szerint. Például: {{exampleQuery}}.",
+ "tooltip-label": "A címke nevéhez tartozó címkeértékek listáját adja vissza az összes metrikában, kivéve, ha a metrika meg van adva.",
+ "tooltip-metric-regex": "A címkenevek listáját adja vissza, opcionálisan a megadott metrikai reguláris kifejezés szerint szűrve.",
+ "tooltip-query": "A lekérdezéshez a Prometheus-lekérdezési eredmények listáját adja vissza. Ez magában foglalhatja a Prometheus-funkciókat, azaz {{exampleQuery}}.",
+ "tooltip-query-type": "A Prometheus adatforrás-beépülőmodul a következő lekérdezéstípusokat biztosítja a sablonváltozókhoz.",
+ "tooltip-series-query": "Adjon meg egy metrikát címkékkel, csak egy metrikát vagy csak címkéket: {{example1}}, {{example2}} vagy {{example3}}. A bevitt adatokhoz társított idősorok listáját adja vissza."
},
"selector-actions": {
- "aria-label-selector": "",
- "aria-label-selector-clear-button": "",
- "aria-label-use-selector-as-metrics-button": "",
- "aria-label-use-selector-for-query-button": "",
- "aria-label-validate-submit-button": "",
+ "aria-label-selector": "választó",
+ "aria-label-selector-clear-button": "Választó törlése gomb",
+ "aria-label-use-selector-as-metrics-button": "Választó használata metrikaként gomb",
+ "aria-label-use-selector-for-query-button": "Választó használata lekérdezéshez gomb",
+ "aria-label-validate-submit-button": "Küldés érvényesítése gomb",
"clear": "Törlés",
- "resulting-selector": "",
- "use-as-rate-query": "",
- "use-query": "",
- "validate-selector": ""
+ "resulting-selector": "4. Eredményként kapott választó",
+ "use-as-rate-query": "Használat értékeléses lekérdezésként",
+ "use-query": "Lekérdezés használata",
+ "validate-selector": "Választó érvényesítése"
},
"value-selector": {
- "aria-label-filter-expression-for-label-values": "",
- "aria-label-values-for": "",
- "description-search-field-values-across-selected-labels": "",
- "select-multiple-values-for-your-labels": ""
+ "aria-label-filter-expression-for-label-values": "Szűrőkifejezés címkeértékekhez",
+ "aria-label-values-for": "Értékek a következőhöz: {{labelKey}}",
+ "description-search-field-values-across-selected-labels": "A keresőmező segítségével kereshet értékeket a kiválasztott címkék között.",
+ "select-multiple-values-for-your-labels": "3. Válasszon (több) értéket a címkéihez"
}
},
"configuration": {
"alerting-settings-overhaul": {
- "label-allow-as-recording-rules-target": "",
- "label-manage-alerts-via-alerting-ui": "",
+ "label-allow-as-recording-rules-target": "Engedélyezés felvételkészítési szabályok céljaként",
+ "label-manage-alerts-via-alerting-ui": "Riasztások kezelése az Alerting kezelőfelületén keresztül",
"title-alerting": "Riasztás",
- "tooltip-allow-as-recording-rules-target": "",
+ "tooltip-allow-as-recording-rules-target": "Engedélyezze, hogy ez az adatforrás célként legyen kiválasztva a felvételkészítési szabályok írásához.",
"tooltip-manage-alerts-via-alerting-ui": "Riasztási szabályok kezelése ehhez az adatforráshoz. Más Alerting-erőforrások kezeléséhez adjon hozzá egy Alertmanager-adatforrást."
},
"config-editor": {
- "browser-access-mode-error": "",
- "description-advanced-settings": "",
+ "browser-access-mode-error": "A Prometheus-adatforrás böngészős hozzáférési módja már nem érhető el. Váltás kiszolgáló-hozzáférési módra.",
+ "description-advanced-settings": "A további beállítások olyan opcionális beállítások, amelyek konfigurálhatók az adatforrás nagyobb mértékű ellenőrzése érdekében.",
"title-advanced-settings": "Speciális beállítások",
"title-error": "Hiba"
},
"data-source-http-settings-overhaul": {
"tooltip-browser-access-mode": "Az Ön hozzáférési módja <1>Böngésző1>, ez azt jelenti, hogy az URL-címnek elérhetőnek kell lennie a böngészőből.",
- "tooltip-http-url": "",
+ "tooltip-http-url": "Adjon meg egy teljes HTTP URL-címet (például: {{exampleURL}})",
"tooltip-server-access-mode": "Az Ön hozzáférési módja <1>Kiszolgáló1>, ez azt jelenti, hogy az URL-címnek elérhetőnek kell lennie a Grafana-háttérrendszerből/-kiszolgálóról."
},
"docs-tip": {
- "visit-docs-for-more-details-here": ""
+ "visit-docs-for-more-details-here": "További részletekért tekintse meg a dokumentumokat itt."
},
"exemplar-setting": {
"label-data-source": "Adatforrás",
- "label-internal-link": "",
+ "label-internal-link": "Belső hivatkozás",
"label-label-name": "Címkenév",
- "label-remove-exemplar-link": "",
+ "label-remove-exemplar-link": "Mintapéldány-hivatkozás eltávolítása",
"label-url": "URL-cím",
- "label-url-label": "",
- "placeholder-go-to-examplecom": "",
- "placeholder-httpsexamplecomvalueraw": "",
- "placeholder-trace-id": "",
- "title-remove-exemplar-link": "",
- "tooltip-data-source": "",
- "tooltip-internal-link": "",
- "tooltip-label-name": "",
- "tooltip-url": "",
- "tooltip-url-label": ""
+ "label-url-label": "URL-címke",
+ "placeholder-go-to-examplecom": "Tovább az example.com webhelyre",
+ "placeholder-httpsexamplecomvalueraw": "https://example.com/${__value.raw}",
+ "placeholder-trace-id": "traceID",
+ "title-remove-exemplar-link": "Mintapéldány-hivatkozás eltávolítása",
+ "tooltip-data-source": "A mintapéldány ehhez az adatforráshoz fog navigálni.",
+ "tooltip-internal-link": "Engedélyezze ezt a lehetőséget, ha van belső hivatkozása. Ha engedélyezve van, megjeleníti az adatforrás-választót. Válassza ki a háttérrendszeri követési adattárat a mintapéldány-adatokhoz.",
+ "tooltip-label-name": "A címkeobjektum azon mezőjének neve, amelyet a traceID lekéréséhez kell használni.",
+ "tooltip-url": "A nyomkövetési háttérrendszer URL-címe, ahová a felhasználó menne, hogy lássa a nyomkövetést",
+ "tooltip-url-label": "Használja a gombcímke felülbírálásához a mintapéldány traceID mezőjén."
},
"exemplars-settings": {
"add": "Hozzáadás",
- "no-exemplars-configurations": "",
- "title-exemplars": ""
+ "no-exemplars-configurations": "Nincsenek mintapéldány-konfigurációk",
+ "title-exemplars": "Mintapéldányok"
},
"prom-settings": {
- "aria-label-default-editor": "",
- "aria-label-prom-type-type": "",
- "aria-label-prometheus-type": "",
- "aria-label-select-http-method": "",
+ "aria-label-default-editor": "Alapértelmezett szerkesztő (kód vagy építő)",
+ "aria-label-prom-type-type": "{{promType}} típusa",
+ "aria-label-prometheus-type": "Prometheus-típus",
+ "aria-label-select-http-method": "HTTP-módszer kiválasztása",
"editor-options": {
"label-builder": "",
"label-code": ""
},
- "label-cache-level": "",
- "label-custom-query-parameters": "",
- "label-default-editor": "",
- "label-disable-metrics-lookup": "",
- "label-disable-recording-rules-beta": "",
- "label-http-method": "",
- "label-incremental-querying-beta": "",
- "label-metric-names-suggestion-limit": "",
- "label-prom-type-version": "",
- "label-prometheus-type": "",
- "label-query-overlap-window": "",
- "label-query-timeout": "",
- "label-scrape-interval": "",
- "label-series-limit": "",
- "label-use-series-endpoint": "",
- "more-info": "",
- "placeholder-example-maxsourceresolutionmtimeout": "",
- "title-interval-behaviour": "",
- "title-other": "",
+ "label-cache-level": "Gyorsítótár szintje",
+ "label-custom-query-parameters": "Egyéni lekérdezési paraméterek",
+ "label-default-editor": "Alapértelmezett szerkesztő",
+ "label-disable-metrics-lookup": "Metrikák keresésének letiltása",
+ "label-disable-recording-rules-beta": "Felvételkészítési szabályok letiltása (béta)",
+ "label-http-method": "HTTP-metódus",
+ "label-incremental-querying-beta": "Növekményes lekérdezés (béta)",
+ "label-metric-names-suggestion-limit": "Metrikanevek javaslatának korlátja",
+ "label-prom-type-version": "{{promType}} verziója",
+ "label-prometheus-type": "Prometheus-típus",
+ "label-query-overlap-window": "Lekérdezésátfedési ablak",
+ "label-query-timeout": "Lekérdezési időtúllépés",
+ "label-scrape-interval": "Adatgyűjtési intervallum",
+ "label-series-limit": "Sorozatkorlát",
+ "label-use-series-endpoint": "Sorozat végpontjának használata",
+ "more-info": "A Prometheus-típus és -verzió adatforrásokban történő konfigurálásával kapcsolatos további információkért tekintse meg a <2>kiépítési dokumentációt2>.",
+ "placeholder-example-maxsourceresolutionmtimeout": "Példa: {{example}}",
+ "title-interval-behaviour": "Intervallum viselkedése",
+ "title-other": "Egyéb",
"title-performance": "Teljesítmény",
- "title-query-editor": "",
- "tooltip-cache-level": "",
- "tooltip-custom-query-parameters": "",
- "tooltip-default-editor": "",
- "tooltip-disable-metrics-lookup": "",
- "tooltip-disable-recording-rules-beta": "",
- "tooltip-http-method": "",
- "tooltip-incremental-querying-beta": "",
- "tooltip-metric-names-suggestion-limit": "",
- "tooltip-prom-type-version": "",
- "tooltip-prometheus-type": "",
- "tooltip-query-overlap-window": "",
- "tooltip-query-timeout": "",
- "tooltip-scrape-interval": "",
- "tooltip-series-limit": "",
- "tooltip-use-series-endpoint": ""
+ "title-query-editor": "Lekérdezésszerkesztő",
+ "tooltip-cache-level": "Beállítja a böngésző gyorsítótárának szintjét a szerkesztői lekérdezésekhez. A magasabb számossági adatforrásokhoz magasabb gyorsítótár-beállítások ajánlottak.",
+ "tooltip-custom-query-parameters": "Egyéni paraméterek hozzáadása a Prometheus lekérdezési URL-jéhez. Például: {{example1}}, {{example2}}, {{example3}} vagy {{example4}}. Több paramétert a következővel kell összefűzni: {{concatenationChar}}.",
+ "tooltip-default-editor": "Beállítja az alapértelmezett szerkesztőopciót az adatforrás minden felhasználója számára.",
+ "tooltip-disable-metrics-lookup": "Ennek az opciónak a bejelölése letiltja a metrikaválasztót és a metrika-/címketámogatást a lekérdezési mező automatikus kitöltésében. Ez segít, ha a nagyobb Prometheus-példányokkal teljesítményproblémái vannak. ",
+ "tooltip-disable-recording-rules-beta": "Ez a funkció letiltja a felvételkészítési szabályokat. Kapcsolja be az irányítópult teljesítményének javítása érdekében",
+ "tooltip-http-method": "A Prometheus-adatforrás lekérdezéséhez használhatja a POST- vagy a GET HTTP-metódust. A POST az ajánlott metódus, mivel nagyobb lekérdezéseket tesz lehetővé. Módosítsa ezt GET-re, ha a Prometheus-verziója régebbi, mint a 2.1-es, vagy ha a POST-kérések korlátozva vannak a hálózatában.",
+ "tooltip-incremental-querying-beta": "Ez a funkció megváltoztatja a relatív lekérdezések azon alapértelmezett viselkedését, hogy mindig friss adatokat kérjenek le a Prometheus-példányból, ehelyett a lekérdezési eredményeket a rendszer gyorsítótárazza, és csak új rekordok lesznek lekérve. Kapcsolja be az adatbázis és a hálózat terhelésének csökkentése érdekében.",
+ "tooltip-metric-names-suggestion-limit": "Azon metrikanevek maximális száma, amelyek automatikus kitöltési javaslatként jelenhetnek meg a lekérdezésszerkesztő Kód módjában.",
+ "tooltip-prom-type-version": "Ezzel állíthatja be a(z) {{promType}}-példány verzióját, ha nincs automatikusan konfigurálva.",
+ "tooltip-prometheus-type": "Állítsa be a Prometheus-adatbázis típusára, pl.: Prometheus, Cortex, Mimir vagy Thanos. A mező módosításával menti az aktuális beállításokat. A Prometheus bizonyos típusai támogatják vagy nem támogatják a különböző API-kat. Például egyes típusok támogatják a reguláris kifejezéses egyeztetést a címkelekérdezésekhez a teljesítmény javítása érdekében. Egyes típusok rendelkeznek API-val a metaadatokhoz. Ha ezt helytelenül állítja be, furcsa viselkedést tapasztalhat a metrikák és címkék lekérdezésekor. Ellenőrizze a Prometheus dokumentációját, hogy biztosan a megfelelő típust adja meg.",
+ "tooltip-query-overlap-window": "Állítson be egy időtartamot, például: {{example1}}, vagy {{example2}}, vagy {{example3}}. A(z) {{default}} alapértelmezése. Ez az időtartam hozzáadódik az egyes növekményes kérések időtartamához.",
+ "tooltip-query-timeout": "Állítsa be a Prometheus lekérdezési időtúllépését.",
+ "tooltip-scrape-interval": "Ez az intervallum azt mutatja, hogy a Prometheus milyen gyakran gyűjt adatokat a célokról. Állítsa be a Prometheus konfigurációs fájljában konfigurált tipikus adatgyűjtési és értékelési intervallumra. Ha ezt nagyobb értékre állítja, mint a Prometheus konfigurációs fájljának intervalluma, a Grafana ennek az intervallumnak megfelelően értékeli az adatokat, és kevesebb adatpontot fog látni. Alapértelmezett érték: {{default}}.",
+ "tooltip-series-limit": "A korlát minden erőforrásra (metrikára, címkére és értékre) vonatkozik mindkét végpont (sorozatok és címkék) esetében. Hagyja üresen a mezőt az alapértelmezett korlát (40 000) használatához. Állítsa 0-ra a korlát letiltásához és az összes lekéréséhez – ez teljesítményproblémákat okozhat. Az alapértelmezett korlát 40 000.",
+ "tooltip-use-series-endpoint": "Ennek az opciónak a bejelölésével előnyben részesíti a sorozat végpontját {{exampleParameter}} paraméterrel a címkeértékek végpontjához képest {{exampleParameter}} paraméterrel. Bár a címkeértékek végpontja hatékonyabbnak tekinthető, egyes felhasználók előnyben részesíthetik a sorozatot, mert rendelkezik POST-metódussal, míg a címkeértékek végpontja csak GET-metódussal rendelkezik."
}
},
"prom-query-legend-editor": {
@@ -211,12 +211,12 @@
},
"querybuilder": {
"additional-settings": {
- "content-filter-metric-names-regex-search-using": "",
- "disable-text-wrap": ""
+ "content-filter-metric-names-regex-search-using": "A metrikanevek szűrése reguláris kifejezéses kereséssel, a Prometheus API további hívásával.",
+ "disable-text-wrap": "Sortörés letiltása"
},
"feedback-link": {
"give-feedback": "Visszajelzés küldése",
- "title-give-feedback": ""
+ "title-give-feedback": "A metrikaböngésző új, és számítunk az építő jellegű visszajelzésére"
},
"get-collapsed-info": {
"exemplars": "",
@@ -250,18 +250,18 @@
},
"handle-function": {
"text": {
- "query-parsing-is-ambiguous": ""
+ "query-parsing-is-ambiguous": "A lekérdezés elemzése nem egyértelmű."
}
},
"label-filter-item": {
- "aria-label-remove": "",
- "placeholder-select-label": "",
+ "aria-label-remove": "{{name}} eltávolítása",
+ "placeholder-select-label": "Címke kiválasztása",
"placeholder-select-value": "Érték kijelölése"
},
"label-filters": {
- "label-filters": "",
- "label-label-filters": "",
- "tooltip-label-filters": ""
+ "label-filters": "Címkeszűrők",
+ "label-label-filters": "Címkeszűrők",
+ "tooltip-label-filters": "Opcionális: a lekérdezéstípushoz kiválasztott metrika szűrésére szolgál."
},
"label-param-editor": {
"loadingMessage-loading-labels": "",
@@ -269,92 +269,92 @@
},
"metric-combobox": {
"async-select": {
- "aria-label-open-metrics-explorer": "",
- "placeholder-select-metric": "",
- "tooltip-open-metrics-explorer": ""
+ "aria-label-open-metrics-explorer": "Metrikaböngésző megnyitása",
+ "placeholder-select-metric": "Metrika kiválasztása",
+ "tooltip-open-metrics-explorer": "Metrikaböngésző megnyitása"
},
"label-metric": "Metrika",
- "tooltip-metric": ""
+ "tooltip-metric": "Opcionális: a megadott metrikában a címke nevéhez tartozó címkeértékek listáját adja vissza."
},
"metrics-modal": {
- "additional-settings": "",
+ "additional-settings": "További beállítások",
"aria-label-additional-settings": "További beállítások",
- "aria-label-browse-metrics": "",
- "currently-selected": "",
- "metrics-pre-filtered": "",
- "placeholder-results-per-page": "",
- "results-per-page": "",
- "title-metrics-explorer": "",
- "results-amount_one": "",
- "results-amount_other": ""
+ "aria-label-browse-metrics": "Metrikák böngészése",
+ "currently-selected": "Jelenleg kiválasztott: {{selected}}",
+ "metrics-pre-filtered": "Ezek a metrikák előszűrtek a címkeszűrőkben kiválasztott címkék alapján.",
+ "placeholder-results-per-page": "találat oldalanként",
+ "results-per-page": "Találatok száma oldalanként",
+ "title-metrics-explorer": "Metrikaböngésző",
+ "results-amount_one": "{{count}}/{{num}} találat megjelenítése",
+ "results-amount_other": "{{count}}/{{num}} találat megjelenítése"
},
"nested-query": {
"label": {
- "ignoring": "",
+ "ignoring": "Mellőzés",
"on": "Be"
},
"operator": "Műveleti jel",
- "tooltip-remove-match": "",
- "vector-matches": ""
+ "tooltip-remove-match": "Egyezés eltávolítása",
+ "vector-matches": "Vektoregyezések"
},
"operation-editor": {
- "not-found": "",
- "title-remove": ""
+ "not-found": "A(z) {{id}} művelet nem található",
+ "title-remove": "{{name}} eltávolítása"
},
"operation-header": {
"placeholder-replace-with": "Csere ezzel:",
- "title-click-to-view-alternative-operations": "",
- "title-remove-operation": ""
+ "title-click-to-view-alternative-operations": "Kattintson az alternatív műveletek megtekintéséhez",
+ "title-remove-operation": "Művelet eltávolítása"
},
"operation-info-button": {
- "title-click-to-show-description": "",
- "title-remove-operation": ""
+ "title-click-to-show-description": "Kattintson a leírás megjelenítéséhez",
+ "title-remove-operation": "Művelet eltávolítása"
},
"operation-list": {
- "operations": "",
+ "operations": "Műveletek",
"placeholder-search": "Keresés",
- "title-add-operation": ""
+ "title-add-operation": "Művelet hozzáadása"
},
"operation-param-editor": {
- "title-add": "",
- "title-remove": ""
+ "title-add": "{{name}} hozzáadása",
+ "title-remove": "{{name}} eltávolítása"
},
"prom-query-builder-options": {
- "aria-label-lower-limit-parameter": "",
- "aria-label-select-resolution": "",
+ "aria-label-lower-limit-parameter": "Állítsa be a léptékparaméter alsó határát",
+ "aria-label-select-resolution": "Felbontás kiválasztása",
"format-options": {
"label-heatmap": "",
"label-table": "",
"label-time-series": ""
},
- "label-exemplars": "",
+ "label-exemplars": "Mintapéldányok",
"label-format": "Formátum",
- "label-min-step": "",
- "label-resolution": "",
+ "label-min-step": "Min. lépték",
+ "label-resolution": "Felbontás",
"label-type": "Típus",
- "placeholder-auto": "",
+ "placeholder-auto": "automatikus",
"title-options": "Beállítások",
- "tooltip-min-step": ""
+ "tooltip-min-step": "További alsó határérték a Prometheus-lekérdezés léptékparaméteréhez, valamint a(z) <2>{{interval}}2> és <4>{{rateInterval}}4> változóhoz."
},
"prom-query-code-editor-autocomplete-info": {
- "autocomplete-suggestions-limited": "",
- "tooltip-autocomplete-suggestions-limited": ""
+ "autocomplete-suggestions-limited": "Automatikus kitöltési javaslatok korlátozva",
+ "tooltip-autocomplete-suggestions-limited": "A metrikanevek száma meghaladja az automatikus kitöltés korlátját. Csak a(z) {{autocompleteLimit}} legrelevánsabb metrika jelenik meg. A küszöbértéket az adatforrás beállításai között módosíthatja."
},
"prom-query-editor-selector": {
"body-syntax-error": "",
"confirmText-continue": "",
"kick-start-your-query": "Előbeállításos lekérdezés",
- "label-explain": "",
- "run-queries": "",
- "title-parsing-error-switch-builder": ""
+ "label-explain": "Magyarázat",
+ "run-queries": "Lekérdezések futtatása",
+ "title-parsing-error-switch-builder": "Elemzési hiba: Váltás építő módba?"
},
"prom-query-legend-editor": {
- "label-legend": "",
- "placeholder-select-legend-mode": "",
- "tooltip-legend": ""
+ "label-legend": "Jelmagyarázat",
+ "placeholder-select-legend-mode": "Jelmagyarázat mód kiválasztása",
+ "tooltip-legend": "Sorozatnév felülbírálása vagy sablon. Például a(z) {{templateExample}} helyébe a(z) {{labelName}} címkeértéke lép."
},
"query-builder-hints": {
- "hint-details": ""
+ "hint-details": "tipp: {{hintDetails}}"
},
"query-editor-mode-toggle": {
"editor-modes": {
@@ -363,30 +363,30 @@
}
},
"query-pattern": {
- "apply-query": "",
- "aria-label-apply-query-starter-button": "",
- "aria-label-back-button": "",
- "aria-label-create-new-query-button": "",
- "aria-label-raw-query": "",
- "aria-label-use-this-query-button": "",
+ "apply-query": "Lekérdezés alkalmazása",
+ "aria-label-apply-query-starter-button": "lekérdezés-előbeállító alkalmazása gomb",
+ "aria-label-back-button": "vissza gomb",
+ "aria-label-create-new-query-button": "új lekérdezés létrehozása gomb",
+ "aria-label-raw-query": "{{patternName}} nyers lekérdezés",
+ "aria-label-use-this-query-button": "használja ezt a lekérdezést gomb",
"back": "Vissza",
- "create-new-query": "",
+ "create-new-query": "Új lekérdezés létrehozása",
"use-this-query": "Használja ezt a lekérdezést"
},
"query-patterns-modal": {
- "aria-label-close-kick-start-your-query-modal": "",
+ "aria-label-close-kick-start-your-query-modal": "előbeállításos lekérdezés modális ablakának bezárása",
"aria-label-kick-start-your-query-modal": "Előbeállításos lekérdezés modális ablak",
- "aria-label-toggle-query-starter": "",
+ "aria-label-toggle-query-starter": "{{patternType}} lekérdezés-előbeállító kártya megnyitása és bezárása",
"close": "Bezárás",
- "description-kick-start-your-query": "",
- "label-toggle-query-starter": "",
+ "description-kick-start-your-query": "Kezdje el létrehozni a lekérdezést előbeállításokkal az alábbi lekérdezések egyikének kiválasztásával. Ezután folytathatja a lekérdezés befejezését.",
+ "label-toggle-query-starter": "{{patternType}} lekérdezés-előbeállítók",
"title-kick-start-your-query": "Előbeállításos lekérdezés"
},
"raw-query": {
- "aria-label-selector": ""
+ "aria-label-selector": "választó"
},
"results-table": {
- "content-descriptive-type": "",
+ "content-descriptive-type": "{{descriptiveType}} létrehozásakor a Prometheus több, számláló típusú sorozatot jelenít meg. ",
"description": "Leírás",
"message-expand-label-filters": "",
"message-expand-search": "",
@@ -397,7 +397,7 @@
},
"update-function-args": {
"text": {
- "query-parsing-is-ambiguous": ""
+ "query-parsing-is-ambiguous": "A lekérdezés elemzése nem egyértelmű."
}
}
}
diff --git a/packages/grafana-prometheus/src/locales/id-ID/grafana-prometheus.json b/packages/grafana-prometheus/src/locales/id-ID/grafana-prometheus.json
index 51f85b929bb..9a7b8f0a52d 100644
--- a/packages/grafana-prometheus/src/locales/id-ID/grafana-prometheus.json
+++ b/packages/grafana-prometheus/src/locales/id-ID/grafana-prometheus.json
@@ -2,201 +2,201 @@
"grafana-prometheus": {
"components": {
"annotation-query-editor": {
- "annotation-data-load-error": "",
- "aria-label-lower-limit-parameter": "",
- "label-min-step": "",
- "label-series-value-as-timestamp": "",
+ "annotation-data-load-error": "Terjadi kesalahan pemuatan data anotasi!",
+ "aria-label-lower-limit-parameter": "Tetapkan batas bawah untuk parameter langkah",
+ "label-min-step": "Langkah minimum",
+ "label-series-value-as-timestamp": "Nilai data seri sebagai stempel waktu",
"label-tags": "Tag",
- "label-text": "",
+ "label-text": "Teks",
"label-title": "Judul",
- "placeholder-auto": "",
- "tooltip-either-pattern-example-instance-replaced-label": "",
- "tooltip-min-step": "",
- "tooltip-timestamp-milliseconds-series-value-seconds-multiply": ""
+ "placeholder-auto": "auto",
+ "tooltip-either-pattern-example-instance-replaced-label": "Gunakan nama atau pola. Misalnya, {{labelTemplate}} diganti dengan nilai label untuk label {{labelName}}.",
+ "tooltip-min-step": "Batas bawah tambahan untuk parameter langkah kueri Prometheus dan untuk variabel <2>{{intervalVar}}2> dan <4>{{rateIntervalVar}}4>.",
+ "tooltip-timestamp-milliseconds-series-value-seconds-multiply": "Unit stempel waktu adalah milidetik. Jika satuan nilai data seri adalah detik, kalikan vektor rentangnya dengan 1000."
},
"get-query-type-options": {
"description": {
- "instant-query-range": ""
+ "instant-query-range": "Jalankan kueri Instan dan kueri Rentang"
},
"label": {
- "both": ""
+ "both": "Keduanya"
},
"range-options": {
"description": {
- "query-range": ""
+ "query-range": "Jalankan kueri selama rentang waktu tertentu"
},
"label": {
- "instant": "",
- "range": ""
+ "instant": "Instan",
+ "range": "Rentang"
}
}
},
"label-selector": {
- "aria-label-filter-expression-for-label": "",
- "description-select-labels": "",
- "select-labels-to-search-in": ""
+ "aria-label-filter-expression-for-label": "Filter persamaan berdasarkan label",
+ "description-select-labels": "Setelah nilai label dipilih, hanya kombinasi label yang mungkin yang ditampilkan.",
+ "select-labels-to-search-in": "2. Pilih label untuk pencarian"
},
"metric-selector": {
- "aria-label-filter-expression-for-metric": "",
- "aria-label-limit-results-from-series-endpoint": "",
- "description-series-limit": "",
- "label-select-metric": "",
- "select-a-metric": "",
- "series-limit": ""
+ "aria-label-filter-expression-for-metric": "Filter persamaan berdasarkan metrik",
+ "aria-label-limit-results-from-series-endpoint": "Batasi hasil dari titik akhir data seri",
+ "description-series-limit": "Batas ini berlaku untuk semua metrik, label, dan nilai. Biarkan bidang kosong untuk menggunakan batas default. Atur ke 0 untuk menonaktifkan batas dan mengambil semuanya — ini dapat menyebabkan masalah kinerja.",
+ "label-select-metric": "Setelah metrik dipilih, hanya label yang mungkin yang ditampilkan. Label dibatasi oleh batas data seri di bawah ini.",
+ "select-a-metric": "1. Pilih metrik",
+ "series-limit": "Batas data seri"
},
"prom-cheat-sheet": {
- "prom-ql-cheat-sheet": ""
+ "prom-ql-cheat-sheet": "Lembar Ringkasan PromQL"
},
"prom-exemplar-field": {
- "exemplars": "",
- "tooltip-disable-query": "",
- "tooltip-enable-query": ""
+ "exemplars": "Contoh",
+ "tooltip-disable-query": "Nonaktifkan kueri dengan contoh",
+ "tooltip-enable-query": "Aktifkan kueri dengan contoh"
},
"prom-explore-extra-field": {
- "aria-label-prometheus-extra-field": "",
- "aria-label-query-type-field": "",
- "aria-label-step-field": "",
- "min-step": "",
- "query-type": "",
- "tooltip-units-builtin-variables-example-interval-rateinterval": ""
+ "aria-label-prometheus-extra-field": "Bidang tambahan Prometheus",
+ "aria-label-query-type-field": "Bidang jenis kueri",
+ "aria-label-step-field": "Bidang langkah",
+ "min-step": "Langkah minimum",
+ "query-type": "Jenis kueri",
+ "tooltip-units-builtin-variables-example-interval-rateinterval": "Unit waktu dan variabel bawaan dapat digunakan di sini, misalnya: {{example1}}, {{example2}}, {{example3}}, {{example4}}, {{example5}}, {{example6}}, {{example7}} (Default jika tidak ada unit yang ditentukan: {{default}})"
},
"prom-query-field": {
- "placeholder-enter-a-prom-ql-query": ""
+ "placeholder-enter-a-prom-ql-query": "Masukkan kueri PromQL…"
},
"prom-variable-query-editor": {
- "aria-label-classic-query": "",
- "aria-label-metric-regex": "",
- "aria-label-metric-selector": "",
- "aria-label-prometheus-query": "",
- "aria-label-query-type": "",
- "aria-label-series-query": "",
- "label-classic-query": "",
+ "aria-label-classic-query": "Kueri Klasik",
+ "aria-label-metric-regex": "Ekspresi reguler metrik",
+ "aria-label-metric-selector": "Selektor metrik",
+ "aria-label-prometheus-query": "Kueri Prometheus",
+ "aria-label-query-type": "Jenis kueri",
+ "aria-label-series-query": "Kueri Data Seri",
+ "label-classic-query": "Kueri Klasik",
"label-label": "Label",
- "label-metric-regex": "",
+ "label-metric-regex": "Ekspresi reguler metrik",
"label-query": "Kueri",
- "label-query-type": "",
- "label-series-query": "",
- "placeholder-classic-query": "",
- "placeholder-metric-regex": "",
- "placeholder-prometheus-query": "",
+ "label-query-type": "Jenis kueri",
+ "label-series-query": "Kueri Data Seri",
+ "placeholder-classic-query": "Kueri Klasik",
+ "placeholder-metric-regex": "Ekspresi reguler metrik",
+ "placeholder-prometheus-query": "Kueri Prometheus",
"placeholder-select-query-type": "Pilih jenis kueri",
- "placeholder-series-query": "",
- "returns-metrics-matching-specified-metric-regex": "",
- "tooltip-classic-query": "",
- "tooltip-label": "",
- "tooltip-metric-regex": "",
- "tooltip-query": "",
- "tooltip-query-type": "",
- "tooltip-series-query": ""
+ "placeholder-series-query": "Kueri Data Seri",
+ "returns-metrics-matching-specified-metric-regex": "Mengembalikan daftar metrik yang sesuai dengan regex metrik yang ditentukan.",
+ "tooltip-classic-query": "Implementasi awal dari editor kueri variabel Prometheus. Masukkan string dengan jenis kueri dan parameter yang benar seperti yang dijelaskan dalam dokumen ini. Misalnya, {{exampleQuery}}.",
+ "tooltip-label": "Mengembalikan daftar nilai label untuk nama label di semua metrik kecuali metrik tersebut ditentukan.",
+ "tooltip-metric-regex": "Mengembalikan daftar nama label, secara opsional menyaring berdasarkan regex metrik yang ditentukan.",
+ "tooltip-query": "Mengembalikan daftar hasil kueri Prometheus untuk kueri tersebut. Ini dapat mencakup fungsi Prometheus, yaitu {{exampleQuery}}.",
+ "tooltip-query-type": "Plugin sumber data Prometheus menyediakan jenis kueri berikut untuk variabel templat.",
+ "tooltip-series-query": "Masukkan metrik dengan label, hanya metrik atau hanya label, yaitu {{example1}}, {{example2}}, atau {{example3}}. Mengembalikan daftar deret waktu yang terkait dengan data yang dimasukkan."
},
"selector-actions": {
- "aria-label-selector": "",
- "aria-label-selector-clear-button": "",
- "aria-label-use-selector-as-metrics-button": "",
- "aria-label-use-selector-for-query-button": "",
- "aria-label-validate-submit-button": "",
+ "aria-label-selector": "selektor",
+ "aria-label-selector-clear-button": "Tombol hapus selektor",
+ "aria-label-use-selector-as-metrics-button": "Gunakan selektor sebagai tombol metrik",
+ "aria-label-use-selector-for-query-button": "Gunakan selektor untuk tombol kueri",
+ "aria-label-validate-submit-button": "Validasi tombol kirim",
"clear": "Hapus",
- "resulting-selector": "",
- "use-as-rate-query": "",
- "use-query": "",
- "validate-selector": ""
+ "resulting-selector": "4. Selektor yang dihasilkan",
+ "use-as-rate-query": "Gunakan sebagai kueri rate",
+ "use-query": "Gunakan kueri",
+ "validate-selector": "Validasi selektor"
},
"value-selector": {
- "aria-label-filter-expression-for-label-values": "",
- "aria-label-values-for": "",
- "description-search-field-values-across-selected-labels": "",
- "select-multiple-values-for-your-labels": ""
+ "aria-label-filter-expression-for-label-values": "Filter persamaan berdasarkan nilai label",
+ "aria-label-values-for": "Nilai untuk {{labelKey}}",
+ "description-search-field-values-across-selected-labels": "Gunakan bidang pencarian untuk menemukan nilai di seluruh label yang dipilih.",
+ "select-multiple-values-for-your-labels": "3. Pilih (beberapa) nilai untuk label Anda"
}
},
"configuration": {
"alerting-settings-overhaul": {
- "label-allow-as-recording-rules-target": "",
- "label-manage-alerts-via-alerting-ui": "",
+ "label-allow-as-recording-rules-target": "Izinkan sebagai target aturan perekaman",
+ "label-manage-alerts-via-alerting-ui": "Kelola peringatan melalui UI Peringatan",
"title-alerting": "Alerting",
- "tooltip-allow-as-recording-rules-target": "",
+ "tooltip-allow-as-recording-rules-target": "Izinkan sumber data ini dipilih sebagai target untuk menulis aturan perekaman.",
"tooltip-manage-alerts-via-alerting-ui": "Kelola aturan peringatan untuk sumber data ini. Untuk mengelola sumber daya alerting lainnya, tambahkan sumber data Alertmanager."
},
"config-editor": {
- "browser-access-mode-error": "",
- "description-advanced-settings": "",
+ "browser-access-mode-error": "Mode akses browser di sumber data Prometheus tidak lagi tersedia. Beralih ke mode akses server.",
+ "description-advanced-settings": "Pengaturan tambahan adalah pengaturan opsional yang dapat dikonfigurasi agar memiliki kendali lebih besar atas sumber data Anda.",
"title-advanced-settings": "Pengaturan lanjutan",
"title-error": "Kesalahan"
},
"data-source-http-settings-overhaul": {
"tooltip-browser-access-mode": "Metode akses Anda adalah <1>Browser1>, ini berarti URL harus dapat diakses dari browser.",
- "tooltip-http-url": "",
+ "tooltip-http-url": "Tentukan URL HTTP lengkap (misalnya {{exampleURL}})",
"tooltip-server-access-mode": "Metode akses Anda adalah <1>Server1>, ini berarti URL harus dapat diakses dari backend/server grafana."
},
"docs-tip": {
- "visit-docs-for-more-details-here": ""
+ "visit-docs-for-more-details-here": "Kunjungi dokumen untuk detail selengkapnya di sini."
},
"exemplar-setting": {
"label-data-source": "Sumber data",
- "label-internal-link": "",
+ "label-internal-link": "Tautan internal",
"label-label-name": "Nama label",
- "label-remove-exemplar-link": "",
+ "label-remove-exemplar-link": "Hapus tautan contoh",
"label-url": "URL",
- "label-url-label": "",
- "placeholder-go-to-examplecom": "",
- "placeholder-httpsexamplecomvalueraw": "",
- "placeholder-trace-id": "",
- "title-remove-exemplar-link": "",
- "tooltip-data-source": "",
- "tooltip-internal-link": "",
- "tooltip-label-name": "",
- "tooltip-url": "",
- "tooltip-url-label": ""
+ "label-url-label": "Label URL",
+ "placeholder-go-to-examplecom": "Buka example.com",
+ "placeholder-httpsexamplecomvalueraw": "https://example.com/${__value.raw}",
+ "placeholder-trace-id": "traceID",
+ "title-remove-exemplar-link": "Hapus tautan contoh",
+ "tooltip-data-source": "Sumber data yang akan dinavigasi oleh contoh.",
+ "tooltip-internal-link": "Aktifkan opsi ini jika Anda memiliki tautan internal. Saat diaktifkan, ini akan menampilkan selektor sumber data. Pilih penyimpanan data pelacakan backend untuk data contoh Anda.",
+ "tooltip-label-name": "Nama bidang dalam objek label yang harus digunakan untuk mendapatkan traceID.",
+ "tooltip-url": "URL backend jejak yang akan digunakan pengguna untuk melihat jejaknya",
+ "tooltip-url-label": "Gunakan untuk mengganti label tombol pada bidang traceID contoh."
},
"exemplars-settings": {
"add": "Tambahkan",
- "no-exemplars-configurations": "",
- "title-exemplars": ""
+ "no-exemplars-configurations": "Tidak ada konfigurasi contoh",
+ "title-exemplars": "Contoh"
},
"prom-settings": {
- "aria-label-default-editor": "",
- "aria-label-prom-type-type": "",
- "aria-label-prometheus-type": "",
- "aria-label-select-http-method": "",
+ "aria-label-default-editor": "Editor Default (Kode atau Pembuat)",
+ "aria-label-prom-type-type": "Jenis {{promType}}",
+ "aria-label-prometheus-type": "Jenis Prometheus",
+ "aria-label-select-http-method": "Pilih metode HTTP",
"editor-options": {
"label-builder": "",
"label-code": ""
},
- "label-cache-level": "",
- "label-custom-query-parameters": "",
- "label-default-editor": "",
- "label-disable-metrics-lookup": "",
- "label-disable-recording-rules-beta": "",
- "label-http-method": "",
- "label-incremental-querying-beta": "",
- "label-metric-names-suggestion-limit": "",
- "label-prom-type-version": "",
- "label-prometheus-type": "",
- "label-query-overlap-window": "",
- "label-query-timeout": "",
- "label-scrape-interval": "",
- "label-series-limit": "",
- "label-use-series-endpoint": "",
- "more-info": "",
- "placeholder-example-maxsourceresolutionmtimeout": "",
- "title-interval-behaviour": "",
- "title-other": "",
+ "label-cache-level": "Level cache",
+ "label-custom-query-parameters": "Parameter kueri kustom",
+ "label-default-editor": "Editor default",
+ "label-disable-metrics-lookup": "Nonaktifkan pencarian metrik",
+ "label-disable-recording-rules-beta": "Nonaktifkan aturan perekaman (beta)",
+ "label-http-method": "Metode HTTP",
+ "label-incremental-querying-beta": "Kueri inkremental (beta)",
+ "label-metric-names-suggestion-limit": "Batas saran nama metrik",
+ "label-prom-type-version": "Versi {{promType}}",
+ "label-prometheus-type": "Jenis Prometheus",
+ "label-query-overlap-window": "Jendela kueri tumpang tindih",
+ "label-query-timeout": "Batas waktu kueri habis",
+ "label-scrape-interval": "Interval scrape",
+ "label-series-limit": "Batas data seri",
+ "label-use-series-endpoint": "Gunakan titik akhir data seri",
+ "more-info": "Untuk informasi lengkap tentang mengonfigurasi jenis dan versi prometheus dalam sumber data, lihat <2>dokumentasi penyediaan2>.",
+ "placeholder-example-maxsourceresolutionmtimeout": "Contoh: {{example}}",
+ "title-interval-behaviour": "Perilaku interval",
+ "title-other": "Lainnya",
"title-performance": "Kinerja",
- "title-query-editor": "",
- "tooltip-cache-level": "",
- "tooltip-custom-query-parameters": "",
- "tooltip-default-editor": "",
- "tooltip-disable-metrics-lookup": "",
- "tooltip-disable-recording-rules-beta": "",
- "tooltip-http-method": "",
- "tooltip-incremental-querying-beta": "",
- "tooltip-metric-names-suggestion-limit": "",
- "tooltip-prom-type-version": "",
- "tooltip-prometheus-type": "",
- "tooltip-query-overlap-window": "",
- "tooltip-query-timeout": "",
- "tooltip-scrape-interval": "",
- "tooltip-series-limit": "",
- "tooltip-use-series-endpoint": ""
+ "title-query-editor": "Editor kueri",
+ "tooltip-cache-level": "Mengatur level cache peramban untuk kueri editor. Pengaturan cache yang lebih tinggi disarankan untuk sumber data dengan kardinalitas tinggi.",
+ "tooltip-custom-query-parameters": "Tambahkan parameter kustom ke URL kueri Prometheus. Misalnya {{example1}}, {{example2}}, {{example3}}, atau {{example4}}. Beberapa parameter harus digabungkan bersama dengan {{concatenationChar}}.",
+ "tooltip-default-editor": "Atur opsi editor default untuk semua pengguna sumber data ini.",
+ "tooltip-disable-metrics-lookup": "Memeriksa opsi ini akan menonaktifkan pemilih metrik dan dukungan metrik/label dalam pelengkapan otomatis bidang kueri. Ini membantu jika Anda memiliki masalah kinerja dengan instans Prometheus yang lebih besar. ",
+ "tooltip-disable-recording-rules-beta": "Fitur ini akan menonaktifkan aturan perekaman. Aktifkan ini untuk meningkatkan kinerja dasbor",
+ "tooltip-http-method": "Anda dapat menggunakan metode HTTP POST atau GET untuk melakukan kueri sumber data Prometheus Anda. POST adalah metode yang disarankan karena memungkinkan kueri yang lebih besar. Ubah ini menjadi GET jika Anda memiliki versi Prometheus yang lebih lama dari 2.1 atau jika permintaan POST dibatasi di jaringan Anda.",
+ "tooltip-incremental-querying-beta": "Fitur ini akan mengubah perilaku default kueri relatif: alih-alih selalu meminta data terbaru dari instans Prometheus, hasil kueri akan disimpan sementara, dan hanya data baru yang akan diminta. Aktifkan ini untuk mengurangi beban basis data dan jaringan.",
+ "tooltip-metric-names-suggestion-limit": "Jumlah maksimum nama metrik yang mungkin muncul sebagai saran pelengkapan otomatis dalam mode Kode editor kueri.",
+ "tooltip-prom-type-version": "Gunakan ini untuk mengatur versi instans {{promType}} Anda jika tidak dikonfigurasi secara otomatis.",
+ "tooltip-prometheus-type": "Atur ini ke jenis basis data prometheus Anda, misalnya Prometheus, Cortex, Mimir, atau Thanos. Mengubah bidang ini akan menyimpan pengaturan Anda saat ini. Jenis Prometheus tertentu mendukung atau tidak mendukung berbagai API. Misalnya, beberapa jenis mendukung pencocokan regex bagi kueri label untuk meningkatkan kinerja. Beberapa jenis memiliki API untuk metadata. Jika Anda mengatur ini secara tidak benar, Anda mungkin mengalami perilaku tidak biasa saat melakukan kueri metrik dan label. Periksa dokumentasi Prometheus Anda untuk memastikan Anda memasukkan jenis yang benar.",
+ "tooltip-query-overlap-window": "Tetapkan durasi seperti {{example1}} atau {{example2}} atau {{example3}}. Default {{default}}. Durasi ini akan ditambahkan ke durasi setiap permintaan tambahan.",
+ "tooltip-query-timeout": "Atur batas waktu kueri Prometheus.",
+ "tooltip-scrape-interval": "Interval ini adalah seberapa sering Prometheus melakukan scrape pada target. Atur ini ke interval scrape dan evaluasi umum yang dikonfigurasi dalam file konfigurasi Prometheus Anda. Jika Anda mengatur ini ke nilai yang lebih besar dari interval file konfigurasi Prometheus Anda, Grafana akan mengevaluasi data sesuai dengan interval ini dan Anda akan melihat lebih sedikit titik data. Default ke {{default}}.",
+ "tooltip-series-limit": "Batas ini berlaku untuk semua sumber daya (metrik, label, dan nilai) untuk kedua endpoint (deret dan label). Biarkan bidang kosong untuk menggunakan batas default (40000). Atur ke 0 untuk menonaktifkan batas dan mengambil semuanya — ini dapat menyebabkan masalah kinerja. Batas default adalah 40000.",
+ "tooltip-use-series-endpoint": "Memeriksa opsi ini akan mengutamakan titik akhir data seri dengan {{exampleParameter}} parameter daripada titik akhir nilai label dengan {{exampleParameter}} parameter. Meskipun titik akhir nilai label dianggap memiliki kinerja yang lebih baik, beberapa pengguna mungkin lebih menyukai data seri karena memiliki metode POST, sementara titik akhir nilai label hanya memiliki metode GET."
}
},
"prom-query-legend-editor": {
@@ -211,12 +211,12 @@
},
"querybuilder": {
"additional-settings": {
- "content-filter-metric-names-regex-search-using": "",
- "disable-text-wrap": ""
+ "content-filter-metric-names-regex-search-using": "Filter nama metrik dengan pencarian regex, menggunakan panggilan tambahan pada API Prometheus.",
+ "disable-text-wrap": "Nonaktifkan pemenggalan teks otomatis"
},
"feedback-link": {
"give-feedback": "Berikan umpan balik",
- "title-give-feedback": ""
+ "title-give-feedback": "Penjelajah metrik ini masih baru, beri tahu kami cara untuk meningkatkannya"
},
"get-collapsed-info": {
"exemplars": "",
@@ -250,18 +250,18 @@
},
"handle-function": {
"text": {
- "query-parsing-is-ambiguous": ""
+ "query-parsing-is-ambiguous": "Penguraian kueri mengalami masalah ketidakjelasan."
}
},
"label-filter-item": {
- "aria-label-remove": "",
- "placeholder-select-label": "",
+ "aria-label-remove": "Hapus {{name}}",
+ "placeholder-select-label": "Pilih label",
"placeholder-select-value": "Pilih nilai"
},
"label-filters": {
- "label-filters": "",
- "label-label-filters": "",
- "tooltip-label-filters": ""
+ "label-filters": "Filter label",
+ "label-label-filters": "Filter label",
+ "tooltip-label-filters": "Opsional: digunakan untuk menyaring metrik yang dipilih untuk jenis kueri ini."
},
"label-param-editor": {
"loadingMessage-loading-labels": "",
@@ -269,91 +269,91 @@
},
"metric-combobox": {
"async-select": {
- "aria-label-open-metrics-explorer": "",
- "placeholder-select-metric": "",
- "tooltip-open-metrics-explorer": ""
+ "aria-label-open-metrics-explorer": "Buka penjelajah metrik",
+ "placeholder-select-metric": "Pilih metrik",
+ "tooltip-open-metrics-explorer": "Buka penjelajah metrik"
},
"label-metric": "Metrik",
- "tooltip-metric": ""
+ "tooltip-metric": "Opsional: mengembalikan daftar nilai label untuk nama label dalam metrik yang ditentukan."
},
"metrics-modal": {
- "additional-settings": "",
+ "additional-settings": "Pengaturan Tambahan",
"aria-label-additional-settings": "Pengaturan tambahan",
- "aria-label-browse-metrics": "",
- "currently-selected": "",
- "metrics-pre-filtered": "",
- "placeholder-results-per-page": "",
- "results-per-page": "",
- "title-metrics-explorer": "",
- "results-amount_other": ""
+ "aria-label-browse-metrics": "Telusuri metrik",
+ "currently-selected": "Sedang dipilih: {{selected}}",
+ "metrics-pre-filtered": "Metrik ini telah difilter sebelumnya berdasarkan label yang dipilih di filter label.",
+ "placeholder-results-per-page": "hasil per halaman",
+ "results-per-page": "Hasil per halaman",
+ "title-metrics-explorer": "Penjelajah metrik",
+ "results-amount_other": "Menampilkan {{num}} dari {{count}} hasil"
},
"nested-query": {
"label": {
- "ignoring": "",
+ "ignoring": "Mengabaikan",
"on": "Aktif"
},
"operator": "Operator",
- "tooltip-remove-match": "",
- "vector-matches": ""
+ "tooltip-remove-match": "Hapus kecocokan",
+ "vector-matches": "Kecocokan vektor"
},
"operation-editor": {
- "not-found": "",
- "title-remove": ""
+ "not-found": "Operasi {{id}} tidak ditemukan",
+ "title-remove": "Hapus {{name}}"
},
"operation-header": {
"placeholder-replace-with": "Ganti dengan",
- "title-click-to-view-alternative-operations": "",
- "title-remove-operation": ""
+ "title-click-to-view-alternative-operations": "Klik untuk melihat operasi alternatif",
+ "title-remove-operation": "Hapus operasi"
},
"operation-info-button": {
- "title-click-to-show-description": "",
- "title-remove-operation": ""
+ "title-click-to-show-description": "Klik untuk menampilkan deskripsi",
+ "title-remove-operation": "Hapus operasi"
},
"operation-list": {
- "operations": "",
+ "operations": "Operasi",
"placeholder-search": "Cari",
- "title-add-operation": ""
+ "title-add-operation": "Tambah operasi"
},
"operation-param-editor": {
- "title-add": "",
- "title-remove": ""
+ "title-add": "Tambahkan {{name}}",
+ "title-remove": "Hapus {{name}}"
},
"prom-query-builder-options": {
- "aria-label-lower-limit-parameter": "",
- "aria-label-select-resolution": "",
+ "aria-label-lower-limit-parameter": "Tetapkan batas bawah untuk parameter langkah",
+ "aria-label-select-resolution": "Pilih resolusi",
"format-options": {
"label-heatmap": "",
"label-table": "",
"label-time-series": ""
},
- "label-exemplars": "",
+ "label-exemplars": "Contoh",
"label-format": "Format",
- "label-min-step": "",
- "label-resolution": "",
+ "label-min-step": "Langkah minimum",
+ "label-resolution": "Resolusi",
"label-type": "Jenis",
- "placeholder-auto": "",
+ "placeholder-auto": "auto",
"title-options": "Opsi",
- "tooltip-min-step": ""
+ "tooltip-min-step": "Batas bawah tambahan untuk parameter langkah kueri Prometheus dan untuk variabel <2>{{interval}}2> dan <4>{{rateInterval}}4>."
},
"prom-query-code-editor-autocomplete-info": {
- "autocomplete-suggestions-limited": "",
- "tooltip-autocomplete-suggestions-limited": ""
+ "autocomplete-suggestions-limited": "Saran pelengkapan otomatis dibatasi",
+ "tooltip-autocomplete-suggestions-limited": "Jumlah nama metrik melebihi batas pelengkapan otomatis. Hanya {{autocompleteLimit}} metrik yang paling relevan yang ditampilkan. Anda dapat menyesuaikan ambang batas dalam pengaturan sumber data."
},
"prom-query-editor-selector": {
"body-syntax-error": "",
"confirmText-continue": "",
"kick-start-your-query": "Mulai kueri Anda",
- "label-explain": "",
- "run-queries": "",
- "title-parsing-error-switch-builder": ""
+ "label-explain": "Penjelasan",
+ "run-queries": "Jalankan kueri",
+ "title-parsing-error-switch-builder": "Terjadi kesalahan penguraian: Beralih ke mode pembuat?"
},
"prom-query-legend-editor": {
- "label-legend": "",
- "placeholder-select-legend-mode": "",
- "tooltip-legend": ""
+ "label-legend": "Legenda",
+ "placeholder-select-legend-mode": "Pilih mode legenda",
+ "tooltip-legend": "Mengganti nama seri atau templat. Misalnya, {{templateExample}} akan diganti dengan nilai label untuk {{labelName}}."
},
"query-builder-hints": {
- "hint-details": ""
+ "hint-details": "petunjuk: {{hintDetails}}"
},
"query-editor-mode-toggle": {
"editor-modes": {
@@ -362,30 +362,30 @@
}
},
"query-pattern": {
- "apply-query": "",
- "aria-label-apply-query-starter-button": "",
- "aria-label-back-button": "",
- "aria-label-create-new-query-button": "",
- "aria-label-raw-query": "",
- "aria-label-use-this-query-button": "",
+ "apply-query": "Terapkan kueri",
+ "aria-label-apply-query-starter-button": "tombol mulai terapkan kueri",
+ "aria-label-back-button": "tombol kembali",
+ "aria-label-create-new-query-button": "tombol buat kueri baru",
+ "aria-label-raw-query": "Kueri {{patternName}} mentah",
+ "aria-label-use-this-query-button": "tombol gunakan kueri ini",
"back": "Kembali",
- "create-new-query": "",
+ "create-new-query": "Buat kueri baru",
"use-this-query": "Gunakan kueri ini"
},
"query-patterns-modal": {
- "aria-label-close-kick-start-your-query-modal": "",
+ "aria-label-close-kick-start-your-query-modal": "tutup modal untuk memulai kueri Anda",
"aria-label-kick-start-your-query-modal": "Mulai modal kueri Anda",
- "aria-label-toggle-query-starter": "",
+ "aria-label-toggle-query-starter": "buka dan tutup kartu pemula kueri {{patternType}}",
"close": "Tutup",
- "description-kick-start-your-query": "",
- "label-toggle-query-starter": "",
+ "description-kick-start-your-query": "Mulai kueri Anda dengan memilih salah satu kueri ini. Anda kemudian dapat melanjutkan untuk menyelesaikan kueri Anda.",
+ "label-toggle-query-starter": "kueri awal {{patternType}}",
"title-kick-start-your-query": "Mulai kueri Anda"
},
"raw-query": {
- "aria-label-selector": ""
+ "aria-label-selector": "selektor"
},
"results-table": {
- "content-descriptive-type": "",
+ "content-descriptive-type": "Saat membuat {{descriptiveType}}, Prometheus mengekspos beberapa data seri dengan penghitung jenis. ",
"description": "Deskripsi",
"message-expand-label-filters": "",
"message-expand-search": "",
@@ -396,7 +396,7 @@
},
"update-function-args": {
"text": {
- "query-parsing-is-ambiguous": ""
+ "query-parsing-is-ambiguous": "Penguraian kueri mengalami masalah ketidakjelasan."
}
}
}
diff --git a/packages/grafana-prometheus/src/locales/ja-JP/grafana-prometheus.json b/packages/grafana-prometheus/src/locales/ja-JP/grafana-prometheus.json
index 13c91887eab..618b313fa90 100644
--- a/packages/grafana-prometheus/src/locales/ja-JP/grafana-prometheus.json
+++ b/packages/grafana-prometheus/src/locales/ja-JP/grafana-prometheus.json
@@ -2,201 +2,201 @@
"grafana-prometheus": {
"components": {
"annotation-query-editor": {
- "annotation-data-load-error": "",
- "aria-label-lower-limit-parameter": "",
- "label-min-step": "",
- "label-series-value-as-timestamp": "",
+ "annotation-data-load-error": "注釈データの読み込みエラー!",
+ "aria-label-lower-limit-parameter": "ステップパラメーターの下限を設定",
+ "label-min-step": "最小ステップ",
+ "label-series-value-as-timestamp": "タイムスタンプとしての系列値",
"label-tags": "タグ",
- "label-text": "",
+ "label-text": "テキスト",
"label-title": "タイトル",
- "placeholder-auto": "",
- "tooltip-either-pattern-example-instance-replaced-label": "",
- "tooltip-min-step": "",
- "tooltip-timestamp-milliseconds-series-value-seconds-multiply": ""
+ "placeholder-auto": "自動",
+ "tooltip-either-pattern-example-instance-replaced-label": "名前またはパターンのいずれかを使用します。例えば、{{labelTemplate}}はラベル{{labelName}}のラベル値に置き換えられます。",
+ "tooltip-min-step": "Prometheusクエリのステップパラメーターと<2>{{intervalVar}}2>および<4>{{rateIntervalVar}}4>変数の追加下限。",
+ "tooltip-timestamp-milliseconds-series-value-seconds-multiply": "タイムスタンプの単位はミリ秒です。系列値の単位が秒の場合、その範囲ベクトルに1000を掛けます。"
},
"get-query-type-options": {
"description": {
- "instant-query-range": ""
+ "instant-query-range": "インスタントクエリと範囲クエリを実行"
},
"label": {
- "both": ""
+ "both": "両方"
},
"range-options": {
"description": {
- "query-range": ""
+ "query-range": "時間範囲にわたってクエリを実行"
},
"label": {
- "instant": "",
- "range": ""
+ "instant": "インスタント",
+ "range": "範囲"
}
}
},
"label-selector": {
- "aria-label-filter-expression-for-label": "",
- "description-select-labels": "",
- "select-labels-to-search-in": ""
+ "aria-label-filter-expression-for-label": "ラベルのフィルター式",
+ "description-select-labels": "ラベル値を選択すると、可能なラベルの組み合わせのみが表示されます。",
+ "select-labels-to-search-in": "2. 検索するラベルを選択"
},
"metric-selector": {
- "aria-label-filter-expression-for-metric": "",
- "aria-label-limit-results-from-series-endpoint": "",
- "description-series-limit": "",
- "label-select-metric": "",
- "select-a-metric": "",
- "series-limit": ""
+ "aria-label-filter-expression-for-metric": "メトリックのフィルター式",
+ "aria-label-limit-results-from-series-endpoint": "系列エンドポイントからの結果を制限",
+ "description-series-limit": "制限はすべてのメトリック、ラベル、値に適用されます。デフォルトの制限を使用するには、フィールドを空のままにしてください。制限を無効にしてすべてを取得するには0に設定します。これによりパフォーマンスの問題が発生する可能性があります。",
+ "label-select-metric": "メトリックを選択すると、可能なラベルのみが表示されます。ラベルには以下の系列制限が適用されます。",
+ "select-a-metric": "メトリックを選択",
+ "series-limit": "系列制限"
},
"prom-cheat-sheet": {
- "prom-ql-cheat-sheet": ""
+ "prom-ql-cheat-sheet": "PromQLチートシート"
},
"prom-exemplar-field": {
- "exemplars": "",
- "tooltip-disable-query": "",
- "tooltip-enable-query": ""
+ "exemplars": "エグゼンプラー",
+ "tooltip-disable-query": "エグゼンプラーを使用したクエリを無効化",
+ "tooltip-enable-query": "エグゼンプラーを使用したクエリを有効化"
},
"prom-explore-extra-field": {
- "aria-label-prometheus-extra-field": "",
- "aria-label-query-type-field": "",
- "aria-label-step-field": "",
- "min-step": "",
- "query-type": "",
- "tooltip-units-builtin-variables-example-interval-rateinterval": ""
+ "aria-label-prometheus-extra-field": "Prometheus追加フィールド",
+ "aria-label-query-type-field": "クエリタイプフィールド",
+ "aria-label-step-field": "ステップフィールド",
+ "min-step": "最小ステップ",
+ "query-type": "クエリタイプ",
+ "tooltip-units-builtin-variables-example-interval-rateinterval": "ここでは時間単位と組み込み変数を使用できます。例: {{example1}}、{{example2}}、{{example3}}、{{example4}}、{{example5}}、{{example6}}、{{example7}}(単位が指定されていない場合のデフォルト: {{default}})"
},
"prom-query-field": {
- "placeholder-enter-a-prom-ql-query": ""
+ "placeholder-enter-a-prom-ql-query": "PromQLクエリを入力…"
},
"prom-variable-query-editor": {
- "aria-label-classic-query": "",
- "aria-label-metric-regex": "",
- "aria-label-metric-selector": "",
- "aria-label-prometheus-query": "",
- "aria-label-query-type": "",
- "aria-label-series-query": "",
- "label-classic-query": "",
+ "aria-label-classic-query": "クラシッククエリ",
+ "aria-label-metric-regex": "メトリック正規表現",
+ "aria-label-metric-selector": "メトリックセレクター",
+ "aria-label-prometheus-query": "Prometheusクエリ",
+ "aria-label-query-type": "クエリタイプ",
+ "aria-label-series-query": "系列クエリ",
+ "label-classic-query": "クラシッククエリ",
"label-label": "ラベル",
- "label-metric-regex": "",
+ "label-metric-regex": "メトリック正規表現",
"label-query": "クエリ",
- "label-query-type": "",
- "label-series-query": "",
- "placeholder-classic-query": "",
- "placeholder-metric-regex": "",
- "placeholder-prometheus-query": "",
+ "label-query-type": "クエリタイプ",
+ "label-series-query": "系列クエリ",
+ "placeholder-classic-query": "クラシッククエリ",
+ "placeholder-metric-regex": "メトリック正規表現",
+ "placeholder-prometheus-query": "Prometheusクエリ",
"placeholder-select-query-type": "クエリタイプを選択",
- "placeholder-series-query": "",
- "returns-metrics-matching-specified-metric-regex": "",
- "tooltip-classic-query": "",
- "tooltip-label": "",
- "tooltip-metric-regex": "",
- "tooltip-query": "",
- "tooltip-query-type": "",
- "tooltip-series-query": ""
+ "placeholder-series-query": "系列クエリ",
+ "returns-metrics-matching-specified-metric-regex": "指定された正規表現に一致するメトリックのリストを返します。",
+ "tooltip-classic-query": "Prometheus変数クエリエディターの元の実装。これらのドキュメントに記載されているように、正しいクエリタイプとパラメーターを含む文字列を入力してください。例: {{exampleQuery}}。",
+ "tooltip-label": "メトリックが指定されていない限り、すべてのメトリックのラベル名に対するラベル値のリストを返します。",
+ "tooltip-metric-regex": "ラベル名のリストを返します。オプションで、指定されたメトリック正規表現でフィルタリングすることも可能です。",
+ "tooltip-query": "クエリのPrometheusクエリ結果のリストを返します。これには、Prometheus関数を含めることもできます。例: {{exampleQuery}}。",
+ "tooltip-query-type": "Prometheusデータソースプラグインは、テンプレート変数に以下のクエリタイプを入力します。",
+ "tooltip-series-query": "ラベル付きメトリック、メトリックのみ、またはラベルのみを入力します。例: {{example1}}、{{example2}}、または{{example3}}。入力されたデータに関連する時系列のリストを返します。"
},
"selector-actions": {
- "aria-label-selector": "",
- "aria-label-selector-clear-button": "",
- "aria-label-use-selector-as-metrics-button": "",
- "aria-label-use-selector-for-query-button": "",
- "aria-label-validate-submit-button": "",
+ "aria-label-selector": "セレクター",
+ "aria-label-selector-clear-button": "セレクタークリアボタン",
+ "aria-label-use-selector-as-metrics-button": "メトリックボタンにセレクターを使用",
+ "aria-label-use-selector-for-query-button": "クエリボタンにセレクターを使用",
+ "aria-label-validate-submit-button": "送信ボタンを検証",
"clear": "消去",
- "resulting-selector": "",
- "use-as-rate-query": "",
- "use-query": "",
- "validate-selector": ""
+ "resulting-selector": "4. 結果セレクター",
+ "use-as-rate-query": "レートクエリとして使用",
+ "use-query": "このクエリを使用",
+ "validate-selector": "セレクターを検証"
},
"value-selector": {
- "aria-label-filter-expression-for-label-values": "",
- "aria-label-values-for": "",
- "description-search-field-values-across-selected-labels": "",
- "select-multiple-values-for-your-labels": ""
+ "aria-label-filter-expression-for-label-values": "ラベル値のフィルター式",
+ "aria-label-values-for": "{{labelKey}}の値",
+ "description-search-field-values-across-selected-labels": "検索フィールドを使用して選択したラベル全体の値を検索します。",
+ "select-multiple-values-for-your-labels": "3. ラベルの値を(複数)選択"
}
},
"configuration": {
"alerting-settings-overhaul": {
- "label-allow-as-recording-rules-target": "",
- "label-manage-alerts-via-alerting-ui": "",
+ "label-allow-as-recording-rules-target": "記録ルールのターゲットとして許可",
+ "label-manage-alerts-via-alerting-ui": "アラートUIでアラートを管理",
"title-alerting": "アラート",
- "tooltip-allow-as-recording-rules-target": "",
+ "tooltip-allow-as-recording-rules-target": "このデータソースを記録ルール書き込みのターゲットとして選択できるようにします。",
"tooltip-manage-alerts-via-alerting-ui": "このデータソースのアラートルールを管理します。他のアラートリソースを管理するには、Alertmanagerデータソースを追加します。"
},
"config-editor": {
- "browser-access-mode-error": "",
- "description-advanced-settings": "",
+ "browser-access-mode-error": "Prometheusデータソースのブラウザアクセスモードは利用できなくなりました。サーバーアクセスモードに切り替えてください。",
+ "description-advanced-settings": "追加設定は、データソースをより詳細に制御するために指定できるオプション設定です。",
"title-advanced-settings": "詳細設定",
"title-error": "エラー"
},
"data-source-http-settings-overhaul": {
"tooltip-browser-access-mode": "アクセス方法は<1>ブラウザ1>です。つまり、URLにブラウザからアクセスできる必要があります。",
- "tooltip-http-url": "",
+ "tooltip-http-url": "完全なHTTP URLを指定してください(例: {{exampleURL}})",
"tooltip-server-access-mode": "アクセス方法は<1>サーバー1>です。つまり、URLにGrafanaバックエンド/サーバーからアクセスできる必要があります。"
},
"docs-tip": {
- "visit-docs-for-more-details-here": ""
+ "visit-docs-for-more-details-here": "詳細についてはこちらのドキュメントをご覧ください。"
},
"exemplar-setting": {
"label-data-source": "データソース",
- "label-internal-link": "",
+ "label-internal-link": "内部リンク",
"label-label-name": "ラベル名",
- "label-remove-exemplar-link": "",
+ "label-remove-exemplar-link": "エグゼンプラーリンクを削除",
"label-url": "URL",
- "label-url-label": "",
- "placeholder-go-to-examplecom": "",
- "placeholder-httpsexamplecomvalueraw": "",
- "placeholder-trace-id": "",
- "title-remove-exemplar-link": "",
- "tooltip-data-source": "",
- "tooltip-internal-link": "",
- "tooltip-label-name": "",
- "tooltip-url": "",
- "tooltip-url-label": ""
+ "label-url-label": "URLラベル",
+ "placeholder-go-to-examplecom": "example.comに移動",
+ "placeholder-httpsexamplecomvalueraw": "https://example.com/${__value.raw}",
+ "placeholder-trace-id": "traceID",
+ "title-remove-exemplar-link": "エグゼンプラーリンクを削除",
+ "tooltip-data-source": "エグゼンプラーによる移動先のデータソース。",
+ "tooltip-internal-link": "内部リンクがある場合は、このオプションを有効にしてください。有効にすると、データソースセレクターが表示されます。エグゼンプラーデータのバックエンドトレーシングデータストアを選択してください。",
+ "tooltip-label-name": "traceIDを取得するために使用されるラベルオブジェクト内のフィールド名。",
+ "tooltip-url": "ユーザーがトレースを確認するためにアクセスするトレースバックエンドのURL",
+ "tooltip-url-label": "エグゼンプラーのtraceIDフィールドのボタンラベルを上書きするために使用します。"
},
"exemplars-settings": {
"add": "追加",
- "no-exemplars-configurations": "",
- "title-exemplars": ""
+ "no-exemplars-configurations": "エグゼンプラー設定がありません",
+ "title-exemplars": "エグゼンプラー"
},
"prom-settings": {
- "aria-label-default-editor": "",
- "aria-label-prom-type-type": "",
- "aria-label-prometheus-type": "",
- "aria-label-select-http-method": "",
+ "aria-label-default-editor": "デフォルトエディター(コードまたはビルダー)",
+ "aria-label-prom-type-type": "{{promType}}タイプ",
+ "aria-label-prometheus-type": "Prometheusタイプ",
+ "aria-label-select-http-method": "HTTPメソッドを選択",
"editor-options": {
"label-builder": "",
"label-code": ""
},
- "label-cache-level": "",
- "label-custom-query-parameters": "",
- "label-default-editor": "",
- "label-disable-metrics-lookup": "",
- "label-disable-recording-rules-beta": "",
- "label-http-method": "",
- "label-incremental-querying-beta": "",
- "label-metric-names-suggestion-limit": "",
- "label-prom-type-version": "",
- "label-prometheus-type": "",
- "label-query-overlap-window": "",
- "label-query-timeout": "",
- "label-scrape-interval": "",
- "label-series-limit": "",
- "label-use-series-endpoint": "",
- "more-info": "",
- "placeholder-example-maxsourceresolutionmtimeout": "",
- "title-interval-behaviour": "",
- "title-other": "",
+ "label-cache-level": "キャッシュレベル",
+ "label-custom-query-parameters": "カスタムクエリパラメーター",
+ "label-default-editor": "デフォルトエディター",
+ "label-disable-metrics-lookup": "メトリック検索を無効化",
+ "label-disable-recording-rules-beta": "記録ルールを無効化(ベータ版)",
+ "label-http-method": "HTTPメソッド",
+ "label-incremental-querying-beta": "増分クエリ(ベータ版)",
+ "label-metric-names-suggestion-limit": "メトリック名提案制限",
+ "label-prom-type-version": "{{promType}}バージョン",
+ "label-prometheus-type": "Prometheusタイプ",
+ "label-query-overlap-window": "クエリ重複ウィンドウ",
+ "label-query-timeout": "クエリタイムアウト",
+ "label-scrape-interval": "スクレイプ間隔",
+ "label-series-limit": "系列制限",
+ "label-use-series-endpoint": "系列エンドポイントを使用",
+ "more-info": "データソースでのPrometheusタイプとバージョンの設定の詳細については、<2>プロビジョニングドキュメント2>をご覧ください。",
+ "placeholder-example-maxsourceresolutionmtimeout": "例: {{example}}",
+ "title-interval-behaviour": "間隔の動作",
+ "title-other": "その他",
"title-performance": "パフォーマンス",
- "title-query-editor": "",
- "tooltip-cache-level": "",
- "tooltip-custom-query-parameters": "",
- "tooltip-default-editor": "",
- "tooltip-disable-metrics-lookup": "",
- "tooltip-disable-recording-rules-beta": "",
- "tooltip-http-method": "",
- "tooltip-incremental-querying-beta": "",
- "tooltip-metric-names-suggestion-limit": "",
- "tooltip-prom-type-version": "",
- "tooltip-prometheus-type": "",
- "tooltip-query-overlap-window": "",
- "tooltip-query-timeout": "",
- "tooltip-scrape-interval": "",
- "tooltip-series-limit": "",
- "tooltip-use-series-endpoint": ""
+ "title-query-editor": "クエリエディター",
+ "tooltip-cache-level": "エディタークエリのブラウザーキャッシュレベルを設定します。高カーディナリティデータソースには、より高いキャッシュ設定を推奨します。",
+ "tooltip-custom-query-parameters": "PrometheusクエリURLにカスタムパラメーターを追加します。例: {{example1}}、{{example2}}、{{example3}}、または{{example4}}。複数のパラメーターは{{concatenationChar}}で連結する必要があります。",
+ "tooltip-default-editor": "このデータソースのすべてのユーザーにデフォルトエディターオプションを設定します。",
+ "tooltip-disable-metrics-lookup": "このオプションをオンにすると、クエリフィールドのオートコンプリートでメトリック選択とメトリック/ラベルサポートが無効になります。これは、大規模なPrometheusインスタンスをご利用でパフォーマンスの問題がある場合に役立ちます。",
+ "tooltip-disable-recording-rules-beta": "この機能は記録ルールを無効にします。ダッシュボードのパフォーマンスを向上させるには、この機能をオンにしてください",
+ "tooltip-http-method": "PrometheusデータソースをクエリするにはPOSTまたはGET HTTPメソッドのいずれかを使用できます。POSTメソッドだと、より大きなクエリを実行できるため、推奨される方法です。Prometheusのバージョンが2.1より古い場合、またはネットワークでPOSTリクエストが制限されている場合は、これをGETに変更してください。",
+ "tooltip-incremental-querying-beta": "この機能は相対クエリのデフォルト動作が変更され、常にPrometheusインスタンスから新しいデータをリクエストする代わりに、クエリ結果をキャッシュして新しいレコードのみをリクエストするようになります。データベースとネットワークの負荷を軽減するには、これをオンにしてください。",
+ "tooltip-metric-names-suggestion-limit": "クエリエディターのコードモードでオートコンプリート候補として表示される可能性のあるメトリック名の最大数。",
+ "tooltip-prom-type-version": "自動設定されていない場合、これを使用して{{promType}}インスタンスのバージョンを設定してください。",
+ "tooltip-prometheus-type": "Prometheus、Cortex、Mimir、Thanosなど、Prometheusデータベースのタイプに設定してください。このフィールドを変更すると、現在の設定が保存されます。一部のPrometheusのタイプでは、さまざまなAPIがサポートされているか、またはサポートされていない場合があります。例えば、一部のタイプではパフォーマンス向上のためにラベルクエリの正規表現マッチングをサポートしています。また、タイプによってはメタデータ用のAPIがあります。これを正しく設定しないと、メトリックとラベルのクエリ時に異常な動作が発生する可能性があります。正しいタイプを入力するために、Prometheusのドキュメントを確認してください。",
+ "tooltip-query-overlap-window": "{{example1}}や{{example2}}または{{example3}}のような期間を設定してください。デフォルトは{{default}}です。この期間は、各増分リクエストの期間に追加されます。",
+ "tooltip-query-timeout": "Prometheusクエリタイムアウトを設定します。",
+ "tooltip-scrape-interval": "この間隔は、Prometheusがターゲットをスクレイプする頻度です。Prometheus設定ファイルで指定された一般的なスクレイプと評価間隔に設定してください。これをPrometheus設定ファイルの間隔より大きな値に設定すると、Grafanaはこの間隔に従ってデータを評価するため、データポイントが少なくなります。デフォルトは{{default}}です。",
+ "tooltip-series-limit": "制限は両方のエンドポイント(系列とラベル)のすべてのリソース(メトリック、ラベル、値)に適用されます。デフォルトの制限(40000)を使用するには、フィールドを空のままにしてください。制限を無効にしてすべてを取得するには0に設定します。これによりパフォーマンスの問題が発生する可能性があります。デフォルトの制限は40000です。",
+ "tooltip-use-series-endpoint": "このオプションをオンにすると、{{exampleParameter}}パラメーターを持つラベル値エンドポイントより、{{exampleParameter}}パラメーターを持つ系列エンドポイントが優先されます。ラベル値エンドポイントの方がパフォーマンスが高いと考えられていますが、ラベル値エンドポイントにはGETメソッドしかないのに対し、系列にはPOSTメソッドがあるため、系列を好むユーザーもいます。"
}
},
"prom-query-legend-editor": {
@@ -211,12 +211,12 @@
},
"querybuilder": {
"additional-settings": {
- "content-filter-metric-names-regex-search-using": "",
- "disable-text-wrap": ""
+ "content-filter-metric-names-regex-search-using": "Prometheus APIの追加呼び出しを使用して、正規表現検索でメトリック名をフィルタリングします。",
+ "disable-text-wrap": "テキストの折り返しを無効化"
},
"feedback-link": {
"give-feedback": "フィードバックを送信",
- "title-give-feedback": ""
+ "title-give-feedback": "メトリックエクスプローラーは新機能です。改善点についてお聞かせください"
},
"get-collapsed-info": {
"exemplars": "",
@@ -250,18 +250,18 @@
},
"handle-function": {
"text": {
- "query-parsing-is-ambiguous": ""
+ "query-parsing-is-ambiguous": "クエリ解析が曖昧です。"
}
},
"label-filter-item": {
- "aria-label-remove": "",
- "placeholder-select-label": "",
+ "aria-label-remove": "{{name}}を削除",
+ "placeholder-select-label": "ラベルを選択",
"placeholder-select-value": "値を選択"
},
"label-filters": {
- "label-filters": "",
- "label-label-filters": "",
- "tooltip-label-filters": ""
+ "label-filters": "ラベルフィルター",
+ "label-label-filters": "ラベルフィルター",
+ "tooltip-label-filters": "オプション: このクエリタイプのメトリック選択をフィルタリングするために使用します。"
},
"label-param-editor": {
"loadingMessage-loading-labels": "",
@@ -269,91 +269,91 @@
},
"metric-combobox": {
"async-select": {
- "aria-label-open-metrics-explorer": "",
- "placeholder-select-metric": "",
- "tooltip-open-metrics-explorer": ""
+ "aria-label-open-metrics-explorer": "メトリックエクスプローラーを開く",
+ "placeholder-select-metric": "メトリックを選択",
+ "tooltip-open-metrics-explorer": "メトリックエクスプローラーを開く"
},
"label-metric": "メトリック",
- "tooltip-metric": ""
+ "tooltip-metric": "オプション: 指定されたメトリックのラベル名に対するラベル値のリストを返します。"
},
"metrics-modal": {
- "additional-settings": "",
+ "additional-settings": "追加設定",
"aria-label-additional-settings": "追加設定",
- "aria-label-browse-metrics": "",
- "currently-selected": "",
- "metrics-pre-filtered": "",
- "placeholder-results-per-page": "",
- "results-per-page": "",
- "title-metrics-explorer": "",
- "results-amount_other": ""
+ "aria-label-browse-metrics": "メトリックを参照",
+ "currently-selected": "現在選択中: {{selected}}",
+ "metrics-pre-filtered": "これらのメトリックは、ラベルフィルターで選択されたラベルによって事前にフィルタリングされています。",
+ "placeholder-results-per-page": "1ページあたりの結果数",
+ "results-per-page": "1ページあたりの結果数",
+ "title-metrics-explorer": "メトリックエクスプローラー",
+ "results-amount_other": "{{count}}件中{{num}}件の結果を表示"
},
"nested-query": {
"label": {
- "ignoring": "",
+ "ignoring": "無視",
"on": "オン"
},
"operator": "オペレーター",
- "tooltip-remove-match": "",
- "vector-matches": ""
+ "tooltip-remove-match": "一致を削除",
+ "vector-matches": "ベクトル一致"
},
"operation-editor": {
- "not-found": "",
- "title-remove": ""
+ "not-found": "操作{{id}}が見つかりません",
+ "title-remove": "{{name}}を削除"
},
"operation-header": {
"placeholder-replace-with": "次で置き換え",
- "title-click-to-view-alternative-operations": "",
- "title-remove-operation": ""
+ "title-click-to-view-alternative-operations": "クリックして代わりの操作を表示",
+ "title-remove-operation": "操作を削除"
},
"operation-info-button": {
- "title-click-to-show-description": "",
- "title-remove-operation": ""
+ "title-click-to-show-description": "クリックして説明を表示",
+ "title-remove-operation": "操作を削除"
},
"operation-list": {
- "operations": "",
+ "operations": "操作",
"placeholder-search": "検索",
- "title-add-operation": ""
+ "title-add-operation": "操作を追加"
},
"operation-param-editor": {
- "title-add": "",
- "title-remove": ""
+ "title-add": "{{name}}を追加",
+ "title-remove": "{{name}}を削除"
},
"prom-query-builder-options": {
- "aria-label-lower-limit-parameter": "",
- "aria-label-select-resolution": "",
+ "aria-label-lower-limit-parameter": "ステップパラメーターの下限を設定",
+ "aria-label-select-resolution": "解像度を選択",
"format-options": {
"label-heatmap": "",
"label-table": "",
"label-time-series": ""
},
- "label-exemplars": "",
+ "label-exemplars": "エグゼンプラー",
"label-format": "形式",
- "label-min-step": "",
- "label-resolution": "",
+ "label-min-step": "最小ステップ",
+ "label-resolution": "解像度",
"label-type": "種類",
- "placeholder-auto": "",
+ "placeholder-auto": "自動",
"title-options": "オプション",
- "tooltip-min-step": ""
+ "tooltip-min-step": "Prometheusクエリのステップパラメーターと<2>{{interval}}2>および<4>{{rateInterval}}4>変数の追加下限。"
},
"prom-query-code-editor-autocomplete-info": {
- "autocomplete-suggestions-limited": "",
- "tooltip-autocomplete-suggestions-limited": ""
+ "autocomplete-suggestions-limited": "オートコンプリート候補が制限されています",
+ "tooltip-autocomplete-suggestions-limited": "メトリック名の数がオートコンプリート制限を超えています。最も関連性の高い{{autocompleteLimit}}個のメトリックのみが表示されます。データソース設定で閾値を調整できます。"
},
"prom-query-editor-selector": {
"body-syntax-error": "",
"confirmText-continue": "",
"kick-start-your-query": "クエリを開始",
- "label-explain": "",
- "run-queries": "",
- "title-parsing-error-switch-builder": ""
+ "label-explain": "説明",
+ "run-queries": "クエリを実行",
+ "title-parsing-error-switch-builder": "解析エラー: ビルダーモードに切り替えますか?"
},
"prom-query-legend-editor": {
- "label-legend": "",
- "placeholder-select-legend-mode": "",
- "tooltip-legend": ""
+ "label-legend": "凡例",
+ "placeholder-select-legend-mode": "凡例モードを選択",
+ "tooltip-legend": "系列名の上書きまたはテンプレート。例: {{templateExample}}は{{labelName}}のラベル値に置き換えられます。"
},
"query-builder-hints": {
- "hint-details": ""
+ "hint-details": "ヒント: {{hintDetails}}"
},
"query-editor-mode-toggle": {
"editor-modes": {
@@ -362,30 +362,30 @@
}
},
"query-pattern": {
- "apply-query": "",
- "aria-label-apply-query-starter-button": "",
- "aria-label-back-button": "",
- "aria-label-create-new-query-button": "",
- "aria-label-raw-query": "",
- "aria-label-use-this-query-button": "",
+ "apply-query": "クエリを適用",
+ "aria-label-apply-query-starter-button": "クエリ適用開始ボタン",
+ "aria-label-back-button": "戻るボタン",
+ "aria-label-create-new-query-button": "新しいクエリ作成ボタン",
+ "aria-label-raw-query": "{{patternName}}の生クエリ",
+ "aria-label-use-this-query-button": "このクエリボタンを使用",
"back": "戻る",
- "create-new-query": "",
+ "create-new-query": "新しいクエリを作成",
"use-this-query": "このクエリを使用"
},
"query-patterns-modal": {
- "aria-label-close-kick-start-your-query-modal": "",
+ "aria-label-close-kick-start-your-query-modal": "クエリを開始モーダルを閉じる",
"aria-label-kick-start-your-query-modal": "クエリモーダルを開始",
- "aria-label-toggle-query-starter": "",
+ "aria-label-toggle-query-starter": "{{patternType}}クエリ開始カードを開いて閉じる",
"close": "閉じる",
- "description-kick-start-your-query": "",
- "label-toggle-query-starter": "",
+ "description-kick-start-your-query": "これらのクエリの1つを選択してクエリを開始してください。その後、クエリを完了できます。",
+ "label-toggle-query-starter": "{{patternType}}クエリスターター",
"title-kick-start-your-query": "クエリを開始"
},
"raw-query": {
- "aria-label-selector": ""
+ "aria-label-selector": "セレクター"
},
"results-table": {
- "content-descriptive-type": "",
+ "content-descriptive-type": "{{descriptiveType}}を作成する際、Prometheusはタイプカウンターで複数の系列を公開します。",
"description": "説明",
"message-expand-label-filters": "",
"message-expand-search": "",
@@ -396,7 +396,7 @@
},
"update-function-args": {
"text": {
- "query-parsing-is-ambiguous": ""
+ "query-parsing-is-ambiguous": "クエリ解析が曖昧です。"
}
}
}
diff --git a/packages/grafana-sql/src/locales/de-DE/grafana-sql.json b/packages/grafana-sql/src/locales/de-DE/grafana-sql.json
index 5f921f12dba..152cc9af15b 100644
--- a/packages/grafana-sql/src/locales/de-DE/grafana-sql.json
+++ b/packages/grafana-sql/src/locales/de-DE/grafana-sql.json
@@ -2,26 +2,26 @@
"grafana-sql": {
"components": {
"confirm-modal": {
- "builder-mode": "",
+ "builder-mode": "Im Builder-Modus werden keine am Code vorgenommenen Änderungen angezeigt. Der Abfrage-Builder zeigt Ihre letzten Änderungen im Builder-Modus an.",
"cancel": "Abbrechen",
- "clipboard": "",
- "copy-code-and-switch": "",
- "discard-code-and-switch": "",
+ "clipboard": "Möchten Sie Ihren Code in die Zwischenablage kopieren?",
+ "copy-code-and-switch": "Code kopieren und wechseln",
+ "discard-code-and-switch": "Code verwerfen und wechseln",
"warning": "Warnung"
},
"connection-limits": {
- "auto-max-idle": "",
- "content-auto-max-idle": "",
- "content-max-idle": "",
- "content-max-lifetime": "",
- "content-max-open": "",
- "max-idle": "",
- "max-lifetime": "",
- "max-open": "",
- "title-connection-limits": ""
+ "auto-max-idle": "Auto. max. inaktiv",
+ "content-auto-max-idle": "Wenn dies aktiviert ist, wird die Anzahl der <1>Maximalen inaktiven Verbindungen1> automatisch auf den gleichen Wert der<3> Maximalen offenen Verbindungen3> festgelegt. Wenn die Anzahl der maximalen offenen Verbindungen nicht festgelegt ist, wird sie auf den Standardwert ({{defaultMaxIdle}}) eingestellt.",
+ "content-max-idle": "Die maximale Anzahl der Verbindungen im Pool der inaktiven Verbindungen. Wenn <1>Maximale offene Verbindungen1> größer ist als 0, aber kleiner als die Anzahl der <3>Maximalen inaktiven Verbindungen3>, werden die <5>Maximalen inaktiven Verbindungen5> verringert, um der Grenze für die Anzahl der <8>Maximalen offenen Verbindungen8> zu entsprechen. Wenn der Wert auf 0 eingestellt ist, werden keine inaktiven Verbindungen beibehalten.",
+ "content-max-lifetime": "Die maximale Zeitdauer der Wiederverwendung einer Verbindung in Sekunden. Bei einer Einstellung auf 0 werden Verbindungen immer wiederverwendet.",
+ "content-max-open": "Die maximale Anzahl offener Verbindungen zur Datenbank. Wenn <1>Maximale inaktive Verbindungen1> größer als 0 ist und die Anzahl der <3>Maximalen offenen Verbindungen3> kleiner als die Anzahl der <5>Maximalen inaktiven Verbindungen5> ist, werden die <7>Maximalen inaktiven Verbindungen7> bis zur Grenze für <9>Maximale offene Verbindungen9> verringert. Wenn 0 festgelegt ist, gibt es keine Begrenzung der Anzahl offener Verbindungen.",
+ "max-idle": "Max. inaktiv",
+ "max-lifetime": "Max. Lebensdauer",
+ "max-open": "Max. offen",
+ "title-connection-limits": "Verbindungsbegrenzungen"
},
"dataset-selector": {
- "aria-label-dataset-selector": ""
+ "aria-label-dataset-selector": "Datensatz-Selektor"
},
"error-boundary": {
"fall-back": {
@@ -31,21 +31,21 @@
"get-custom-operators": {
"custom-operators": {
"label": {
- "macros": ""
+ "macros": "Macros"
}
}
},
"make-render-column": {
"render-column": {
"aria-label-group-by": "Gruppieren nach",
- "title-remove-group-by-column": ""
+ "title-remove-group-by-column": "Nach Spalte gruppieren entfernen"
}
},
"order-by-row": {
- "aria-label-order-by": "",
+ "aria-label-order-by": "Sortieren nach",
"label-limit": "Limit",
- "label-offset": "",
- "label-order-by": ""
+ "label-offset": "Offset",
+ "label-order-by": "Sortieren nach"
},
"preview": {
"label-element": {
@@ -54,100 +54,100 @@
}
},
"query-header": {
- "content-invalid-query": "",
+ "content-invalid-query": "Ihre Abfrage ist ungültig. Weitere Informationen finden Sie unten. <1>1>Sie können diese Abfrage aber trotzdem ausführen.",
"editor-modes": {
"label-builder": "",
"label-code": ""
},
- "label-dataset": "",
+ "label-dataset": "Datensatz",
"label-filter": "Filter",
"label-format": "Format",
"label-group": "Gruppe",
- "label-order": "",
+ "label-order": "Reihenfolge",
"label-preview": "Vorschau",
"label-table": "Tabelle",
- "placeholder-select-format": "",
+ "placeholder-select-format": "Format auswählen",
"run-query": "Abfrage ausführen"
},
"query-toolbox": {
- "content-hit-ctrlcmdreturn-to-run-query": "",
- "tooltip-collapse": "",
- "tooltip-expand": "",
- "tooltip-format-query": ""
+ "content-hit-ctrlcmdreturn-to-run-query": "Drücken Sie STRG/CMD+Eingabe, um die Abfrage auszuführen",
+ "tooltip-collapse": "Editor einklappen",
+ "tooltip-expand": "Editor ausklappen",
+ "tooltip-format-query": "Formatabfrage"
},
"query-validator": {
- "query-will-process": "",
- "validating-query": ""
+ "query-will-process": "<0>0> Diese Abfrage verarbeitet <2>{{bytes}}2>, wenn sie ausgeführt wird.",
+ "validating-query": "Abfrage wird validiert …"
},
"raw-editor": {
"render-placeholder": {
- "editing-in-expanded-code-editor": ""
+ "editing-in-expanded-code-editor": "Bearbeitung im ausgeklappten Code-Editor"
},
- "title-query-num": ""
+ "title-query-num": "Abfrage {{queryNum}}"
},
"select-column": {
"label-column": "Spalte"
},
"select-custom-function-parameters": {
- "aria-label-parameter": "",
+ "aria-label-parameter": "Parameter {{index}} für Spalte {{columnIndex}}",
"render-parameters": {
"params": {
- "title-remove-parameter": ""
+ "title-remove-parameter": "Parameter entfernen"
}
},
- "title-add-parameter": ""
+ "title-add-parameter": "Parameter hinzufügen"
},
"select-row": {
"aggregate-options": {
"options": {
"label": {
- "aggregations": "",
- "macros": ""
+ "aggregations": "Aggregationen",
+ "macros": "Macros"
}
}
},
"label": {
- "time": "",
+ "time": "Zeit",
"value": "Wert"
},
"label-alias": "Alias",
- "label-data-operations": "",
- "title-add-column": "",
- "title-remove-column": ""
+ "label-data-operations": "Datenoperationen",
+ "title-add-column": "Spalte hinzufügen",
+ "title-remove-column": "Spalte entfernen"
},
"settings": {
- "aria-label-conjunction": "",
+ "aria-label-conjunction": "Konjunktion",
"aria-label-field": "Feld",
"aria-label-operator": "Bediener",
- "title-button-filter": ""
+ "title-button-filter": "{{ buttonLabel }} Filter"
},
"sql-query-editor-lazy": {
"text-loading-editor": "Editor wird geladen"
},
"table-selector": {
- "aria-label-table-selector": "",
- "placeholder-loading": "",
- "placeholder-select-table": ""
+ "aria-label-table-selector": "Tabellenselektor",
+ "placeholder-loading": "Tabellen werden geladen",
+ "placeholder-select-table": "Tabelle auswählen"
},
"tlssecrets-config": {
- "content-tlsssl-client-certificate": "",
- "content-tlsssl-client-key": "",
- "content-tlsssl-root-certificate": "",
- "tlsssl-client-certificate": "",
- "tlsssl-client-key": "",
+ "content-tlsssl-client-certificate": "Stellen Sie zur Authentifizierung mit einem TLS/SSL-Client-Zertifikat bitte hier das Client-Zertifikat bereit.",
+ "content-tlsssl-client-key": "Stellen Sie zur Authentifizierung mit einem Client-TLS/SSL-Zertifikat bitte hier den Schlüssel bereit.",
+ "content-tlsssl-root-certificate": "Wenn der ausgewählte TLS/SSL-Modus ein Server-Root-Zertifikat erfordert, stellen Sie es bitte hier bereit",
+ "tlsssl-client-certificate": "TLS/SSL-Client-Zertifikat",
+ "tlsssl-client-key": "TLS/SSL-Clientschlüssel",
"tlsssl-root-certificate": "TLS/SSL-Root-Zertifikat"
},
"visual-editor": {
- "label-filter-by-column-value": "",
- "label-group-by-column": ""
+ "label-filter-by-column-value": "Nach Spaltenwert filtern",
+ "label-group-by-column": "Nach Spalte gruppieren"
},
"widgets": {
- "aria-label-macros-value-selector": ""
+ "aria-label-macros-value-selector": "Macros-Wert-Selektor"
}
},
"utils": {
"get-columns-width-indices": {
- "label-selected-columns": ""
+ "label-selected-columns": "Ausgewählte Spalten"
}
}
}
diff --git a/packages/grafana-sql/src/locales/hu-HU/grafana-sql.json b/packages/grafana-sql/src/locales/hu-HU/grafana-sql.json
index 0c1803084cb..bb168d14c87 100644
--- a/packages/grafana-sql/src/locales/hu-HU/grafana-sql.json
+++ b/packages/grafana-sql/src/locales/hu-HU/grafana-sql.json
@@ -2,26 +2,26 @@
"grafana-sql": {
"components": {
"confirm-modal": {
- "builder-mode": "",
+ "builder-mode": "Az építő mód nem jeleníti meg a kódban végzett módosításokat. A lekérdezésépítő megjeleníti az utolsó módosításokat, amelyeket az építő módban végzett.",
"cancel": "Mégse",
- "clipboard": "",
- "copy-code-and-switch": "",
- "discard-code-and-switch": "",
+ "clipboard": "Szeretné a kódot a vágólapra másolni?",
+ "copy-code-and-switch": "Kód másolása és váltás",
+ "discard-code-and-switch": "Kód elvetése és váltás",
"warning": "Figyelmeztetés"
},
"connection-limits": {
- "auto-max-idle": "",
- "content-auto-max-idle": "",
- "content-max-idle": "",
- "content-max-lifetime": "",
- "content-max-open": "",
- "max-idle": "",
- "max-lifetime": "",
- "max-open": "",
- "title-connection-limits": ""
+ "auto-max-idle": "Inaktív automatikus maximális száma",
+ "content-auto-max-idle": "Ha engedélyezve van, automatikusan beállítja az <1>Inaktív kapcsolatok maximális száma1> értéket a <3>Megnyitott kapcsolatok maximális száma3> értékére. Ha a nyitott kapcsolatok maximális száma nincs beállítva, akkor az alapértelmezett értékre lesz beállítva ({{defaultMaxIdle}}).",
+ "content-max-idle": "Az inaktív kapcsolatok készletében lévő kapcsolatok maximális száma. Ha a <1>Megnyitott kapcsolatok maximális száma1> nagyobb, mint 0, de kisebb, mint az <3>Inaktív kapcsolatok maximális száma3>, akkor az <5>Inaktív kapcsolatok maximális száma5> csökken, hogy megfeleljen a <8>Megnyitott kapcsolatok maximális száma8> határértékének. Ha 0-ra van állítva, akkor egyetlen inaktív kapcsolat sem marad meg.",
+ "content-max-lifetime": "A csatlakozás újrafelhasználásának maximális időtartama másodpercben. Ha 0-ra van állítva, a kapcsolatok újrafelhasználása végtelen.",
+ "content-max-open": "Az adatbázishoz irányuló nyitott kapcsolatok maximális száma. Ha az <1>Inaktív kapcsolatok maximális száma1> nagyobb, mint 0, és a <3>Megnyitott kapcsolatok maximális száma3> kisebb, mint az <5>Inaktív kapcsolatok maximális száma5>, akkor az <7>Inaktív kapcsolatok maximális száma7> csökken, hogy megfeleljen a <9>Megnyitott kapcsolatok maximális száma9> határértékének. Ha 0-ra van állítva, akkor nincs korlátozva a nyitott kapcsolatok száma.",
+ "max-idle": "Max. inaktív",
+ "max-lifetime": "Max. élettartam",
+ "max-open": "Max. nyitott",
+ "title-connection-limits": "Kapcsolati korlátozások"
},
"dataset-selector": {
- "aria-label-dataset-selector": ""
+ "aria-label-dataset-selector": "Adatkészlet-választó"
},
"error-boundary": {
"fall-back": {
@@ -31,21 +31,21 @@
"get-custom-operators": {
"custom-operators": {
"label": {
- "macros": ""
+ "macros": "Makrók"
}
}
},
"make-render-column": {
"render-column": {
"aria-label-group-by": "Csoportosítási szempont",
- "title-remove-group-by-column": ""
+ "title-remove-group-by-column": "Csoport eltávolítása oszlop szerint"
}
},
"order-by-row": {
- "aria-label-order-by": "",
+ "aria-label-order-by": "Rendezési szempont",
"label-limit": "Korlát",
- "label-offset": "",
- "label-order-by": ""
+ "label-offset": "Eltolás",
+ "label-order-by": "Rendezési szempont"
},
"preview": {
"label-element": {
@@ -54,100 +54,100 @@
}
},
"query-header": {
- "content-invalid-query": "",
+ "content-invalid-query": "A lekérdezés érvénytelen. A részleteket tekintse meg alább. <1>1>Ezt a lekérdezést azonban továbbra is futtathatja.",
"editor-modes": {
"label-builder": "",
"label-code": ""
},
- "label-dataset": "",
+ "label-dataset": "Adatkészlet",
"label-filter": "Szűrő",
"label-format": "Formátum",
"label-group": "Csoport",
- "label-order": "",
+ "label-order": "Sorrend",
"label-preview": "Előnézet",
"label-table": "Táblázat",
- "placeholder-select-format": "",
+ "placeholder-select-format": "Formátum kiválasztása",
"run-query": "Lekérdezés"
},
"query-toolbox": {
- "content-hit-ctrlcmdreturn-to-run-query": "",
- "tooltip-collapse": "",
- "tooltip-expand": "",
- "tooltip-format-query": ""
+ "content-hit-ctrlcmdreturn-to-run-query": "A lekérdezés futtatásához nyomja le a CTRL/CMD+Enter billentyűkombinációt",
+ "tooltip-collapse": "Szerkesztő összecsukása",
+ "tooltip-expand": "Szerkesztő kibontása",
+ "tooltip-format-query": "Lekérdezés formázása"
},
"query-validator": {
- "query-will-process": "",
- "validating-query": ""
+ "query-will-process": "<0>0> Ez a lekérdezés <2>{{bytes}}2> feldolgozását végzi futtatáskor.",
+ "validating-query": "Lekérdezés érvényesítése…"
},
"raw-editor": {
"render-placeholder": {
- "editing-in-expanded-code-editor": ""
+ "editing-in-expanded-code-editor": "Szerkesztés kibontott kódszerkesztőben"
},
- "title-query-num": ""
+ "title-query-num": "{{queryNum}}. lekérdezés"
},
"select-column": {
"label-column": "Oszlop"
},
"select-custom-function-parameters": {
- "aria-label-parameter": "",
+ "aria-label-parameter": "{{columnIndex}}. oszlop {{index}}. paramétere",
"render-parameters": {
"params": {
- "title-remove-parameter": ""
+ "title-remove-parameter": "Paraméter eltávolítása"
}
},
- "title-add-parameter": ""
+ "title-add-parameter": "Paraméter hozzáadása"
},
"select-row": {
"aggregate-options": {
"options": {
"label": {
- "aggregations": "",
- "macros": ""
+ "aggregations": "Összegzések",
+ "macros": "Makrók"
}
}
},
"label": {
- "time": "",
+ "time": "idő",
"value": "érték"
},
"label-alias": "Alias",
- "label-data-operations": "",
- "title-add-column": "",
- "title-remove-column": ""
+ "label-data-operations": "Adatműveletek",
+ "title-add-column": "Oszlop hozzáadása",
+ "title-remove-column": "Oszlop eltávolítása"
},
"settings": {
- "aria-label-conjunction": "",
+ "aria-label-conjunction": "Összekötés",
"aria-label-field": "Mező",
"aria-label-operator": "Műveleti jel",
- "title-button-filter": ""
+ "title-button-filter": "{{ buttonLabel }} szűrő"
},
"sql-query-editor-lazy": {
"text-loading-editor": "Szerkesztő betöltése"
},
"table-selector": {
- "aria-label-table-selector": "",
- "placeholder-loading": "",
- "placeholder-select-table": ""
+ "aria-label-table-selector": "Táblázatválasztó",
+ "placeholder-loading": "Táblázatok betöltése",
+ "placeholder-select-table": "Táblázat kiválasztása"
},
"tlssecrets-config": {
- "content-tlsssl-client-certificate": "",
- "content-tlsssl-client-key": "",
- "content-tlsssl-root-certificate": "",
- "tlsssl-client-certificate": "",
- "tlsssl-client-key": "",
+ "content-tlsssl-client-certificate": "A TLS-/SSL-klienstanúsítvánnyal történő hitelesítéshez adja meg itt a klienstanúsítványt.",
+ "content-tlsssl-client-key": "A TLS-/SSL-klienstanúsítvánnyal történő hitelesítéshez adja meg itt a kulcsot.",
+ "content-tlsssl-root-certificate": "Ha a kiválasztott TLS-/SSL-módhoz kiszolgáló-gyökértanúsítvány szükséges, adja meg itt",
+ "tlsssl-client-certificate": "TLS-/SSL-klienstanúsítvány",
+ "tlsssl-client-key": "TLS-/SSL-klienskulcs",
"tlsssl-root-certificate": "TLS-/SSL-gyökértanúsítvány"
},
"visual-editor": {
- "label-filter-by-column-value": "",
- "label-group-by-column": ""
+ "label-filter-by-column-value": "Szűrés oszlopérték szerint",
+ "label-group-by-column": "Csoportosítás oszlop szerint"
},
"widgets": {
- "aria-label-macros-value-selector": ""
+ "aria-label-macros-value-selector": "Makróérték-választó"
}
},
"utils": {
"get-columns-width-indices": {
- "label-selected-columns": ""
+ "label-selected-columns": "Kijelölt oszlopok"
}
}
}
diff --git a/packages/grafana-sql/src/locales/id-ID/grafana-sql.json b/packages/grafana-sql/src/locales/id-ID/grafana-sql.json
index e6c977bca22..e4344f3ee68 100644
--- a/packages/grafana-sql/src/locales/id-ID/grafana-sql.json
+++ b/packages/grafana-sql/src/locales/id-ID/grafana-sql.json
@@ -2,26 +2,26 @@
"grafana-sql": {
"components": {
"confirm-modal": {
- "builder-mode": "",
+ "builder-mode": "Mode pembuat tidak menampilkan perubahan yang dibuat dalam kode. Pembuat kueri akan menampilkan perubahan terakhir yang Anda buat dalam mode pembuat.",
"cancel": "Batalkan",
- "clipboard": "",
- "copy-code-and-switch": "",
- "discard-code-and-switch": "",
+ "clipboard": "Ingin menyalin kode Anda ke papan klip?",
+ "copy-code-and-switch": "Salin kode dan beralih",
+ "discard-code-and-switch": "Buang kode dan beralih",
"warning": "PERINGATAN"
},
"connection-limits": {
- "auto-max-idle": "",
- "content-auto-max-idle": "",
- "content-max-idle": "",
- "content-max-lifetime": "",
- "content-max-open": "",
- "max-idle": "",
- "max-lifetime": "",
- "max-open": "",
- "title-connection-limits": ""
+ "auto-max-idle": "Nonaktif maksimum otomatis",
+ "content-auto-max-idle": "Jika diaktifkan, secara otomatis atur jumlah <1>Koneksi nonaktif maksimum1> ke nilai yang sama dengan<3> Koneksi terbuka maksimum3>. Jika jumlah maksimum koneksi terbuka tidak diatur, jumlah tersebut akan diatur ke default ({{defaultMaxIdle}}).",
+ "content-max-idle": "Jumlah maksimum koneksi dalam pool koneksi nonaktif. Jika <1>Koneksi terbuka maksimum1> lebih besar dari 0 tetapi kurang dari <3>Koneksi nonaktif maksimum3>, maka <5>Koneksi nonaktif maksimum5> akan dikurangi agar sesuai dengan batas <8>Koneksi terbuka maksimum8>. Jika diatur ke 0, tidak ada koneksi nonaktif yang dipertahankan.",
+ "content-max-lifetime": "Jumlah waktu maksimum dalam detik untuk menggunakan koneksi lagi. Jika diatur ke 0, koneksi digunakan kembali terus-menerus tanpa batas waktu.",
+ "content-max-open": "Jumlah koneksi terbuka maksimum ke basis data. Jika <1>Koneksi nonaktif maksimum1> lebih besar dari 0 dan <3>Koneksi terbuka maksimum3> kurang dari <5>Koneksi nonaktif maksimum5>, maka <7>Koneksi nonaktif maksimum7> akan dikurangi agar sesuai dengan batas <9>Koneksi terbuka maksimum9>. Jika diatur ke 0, tidak ada batasan jumlah koneksi terbuka.",
+ "max-idle": "Nonaktif maks",
+ "max-lifetime": "Periode maks",
+ "max-open": "Terbuka maks",
+ "title-connection-limits": "Batas koneksi"
},
"dataset-selector": {
- "aria-label-dataset-selector": ""
+ "aria-label-dataset-selector": "Selektor kumpulan data"
},
"error-boundary": {
"fall-back": {
@@ -31,21 +31,21 @@
"get-custom-operators": {
"custom-operators": {
"label": {
- "macros": ""
+ "macros": "Makro"
}
}
},
"make-render-column": {
"render-column": {
"aria-label-group-by": "Kelompokkan berdasarkan",
- "title-remove-group-by-column": ""
+ "title-remove-group-by-column": "Hapus grup berdasarkan kolom"
}
},
"order-by-row": {
- "aria-label-order-by": "",
+ "aria-label-order-by": "Urutkan Berdasarkan",
"label-limit": "Batas",
- "label-offset": "",
- "label-order-by": ""
+ "label-offset": "Offset",
+ "label-order-by": "Urutkan Berdasarkan"
},
"preview": {
"label-element": {
@@ -54,100 +54,100 @@
}
},
"query-header": {
- "content-invalid-query": "",
+ "content-invalid-query": "Kueri Anda tidak valid. Periksa di bawah ini untuk detailnya. <1>1>Namun, Anda masih dapat menjalankan kueri ini.",
"editor-modes": {
"label-builder": "",
"label-code": ""
},
- "label-dataset": "",
+ "label-dataset": "Kumpulan data",
"label-filter": "Filter",
"label-format": "Format",
"label-group": "Grup",
- "label-order": "",
+ "label-order": "Pesanan",
"label-preview": "Pratinjau",
"label-table": "Tabel",
- "placeholder-select-format": "",
+ "placeholder-select-format": "Pilih format",
"run-query": "Jalankan kueri"
},
"query-toolbox": {
- "content-hit-ctrlcmdreturn-to-run-query": "",
- "tooltip-collapse": "",
- "tooltip-expand": "",
- "tooltip-format-query": ""
+ "content-hit-ctrlcmdreturn-to-run-query": "Tekan CTRL/CMD+Return untuk menjalankan kueri",
+ "tooltip-collapse": "Ciutkan editor",
+ "tooltip-expand": "Perluas editor",
+ "tooltip-format-query": "Format kueri"
},
"query-validator": {
- "query-will-process": "",
- "validating-query": ""
+ "query-will-process": "<0>0> Kueri ini akan memproses <2>{{bytes}}2> saat dijalankan.",
+ "validating-query": "Memvalidasi kueri..."
},
"raw-editor": {
"render-placeholder": {
- "editing-in-expanded-code-editor": ""
+ "editing-in-expanded-code-editor": "Mengedit di editor kode yang diperluas"
},
- "title-query-num": ""
+ "title-query-num": "Kueri {{queryNum}}"
},
"select-column": {
"label-column": "Kolom"
},
"select-custom-function-parameters": {
- "aria-label-parameter": "",
+ "aria-label-parameter": "Parameter {{index}} untuk kolom {{columnIndex}}",
"render-parameters": {
"params": {
- "title-remove-parameter": ""
+ "title-remove-parameter": "Hapus parameter"
}
},
- "title-add-parameter": ""
+ "title-add-parameter": "Tambahkan parameter"
},
"select-row": {
"aggregate-options": {
"options": {
"label": {
- "aggregations": "",
- "macros": ""
+ "aggregations": "Agregasi",
+ "macros": "Makro"
}
}
},
"label": {
- "time": "",
+ "time": "waktu",
"value": "nilai"
},
"label-alias": "Alias",
- "label-data-operations": "",
- "title-add-column": "",
- "title-remove-column": ""
+ "label-data-operations": "Operasi data",
+ "title-add-column": "Tambah kolom",
+ "title-remove-column": "Hapus kolom"
},
"settings": {
- "aria-label-conjunction": "",
+ "aria-label-conjunction": "Kata Penghubung",
"aria-label-field": "Bidang",
"aria-label-operator": "Operator",
- "title-button-filter": ""
+ "title-button-filter": "Filter {{ buttonLabel }}"
},
"sql-query-editor-lazy": {
"text-loading-editor": "Memuat editor"
},
"table-selector": {
- "aria-label-table-selector": "",
- "placeholder-loading": "",
- "placeholder-select-table": ""
+ "aria-label-table-selector": "Selektor tabel",
+ "placeholder-loading": "Memuat tabel",
+ "placeholder-select-table": "Pilih tabel"
},
"tlssecrets-config": {
- "content-tlsssl-client-certificate": "",
- "content-tlsssl-client-key": "",
- "content-tlsssl-root-certificate": "",
- "tlsssl-client-certificate": "",
- "tlsssl-client-key": "",
+ "content-tlsssl-client-certificate": "Untuk mengautentikasi dengan sertifikat klien TLS/SSL, berikan sertifikat klien di sini.",
+ "content-tlsssl-client-key": "Untuk mengautentikasi dengan sertifikat TLS/SSL klien, berikan kunci di sini.",
+ "content-tlsssl-root-certificate": "Jika mode TLS/SSL yang dipilih memerlukan sertifikat root server, berikan di sini",
+ "tlsssl-client-certificate": "Sertifikat Klien TLS/SSL",
+ "tlsssl-client-key": "Kunci Klien TLS",
"tlsssl-root-certificate": "Sertifikat Root TLS/SSL"
},
"visual-editor": {
- "label-filter-by-column-value": "",
- "label-group-by-column": ""
+ "label-filter-by-column-value": "Filter berdasarkan nilai kolom",
+ "label-group-by-column": "Kelompokkan berdasarkan kolom"
},
"widgets": {
- "aria-label-macros-value-selector": ""
+ "aria-label-macros-value-selector": "Selektor nilai makro"
}
},
"utils": {
"get-columns-width-indices": {
- "label-selected-columns": ""
+ "label-selected-columns": "Kolom yang dipilih"
}
}
}
diff --git a/packages/grafana-sql/src/locales/ja-JP/grafana-sql.json b/packages/grafana-sql/src/locales/ja-JP/grafana-sql.json
index 4340b874c6e..8c6668317e3 100644
--- a/packages/grafana-sql/src/locales/ja-JP/grafana-sql.json
+++ b/packages/grafana-sql/src/locales/ja-JP/grafana-sql.json
@@ -2,26 +2,26 @@
"grafana-sql": {
"components": {
"confirm-modal": {
- "builder-mode": "",
+ "builder-mode": "ビルダーモードではコードに加えられた変更は反映されません。クエリビルダーはビルダーモードで加えられた最後の変更を表示します。",
"cancel": "キャンセル",
- "clipboard": "",
- "copy-code-and-switch": "",
- "discard-code-and-switch": "",
+ "clipboard": "コードをクリップボードにコピーしますか?",
+ "copy-code-and-switch": "コードをコピーして切り替え",
+ "discard-code-and-switch": "コードを破棄して切り替え",
"warning": "警告"
},
"connection-limits": {
- "auto-max-idle": "",
- "content-auto-max-idle": "",
- "content-max-idle": "",
- "content-max-lifetime": "",
- "content-max-open": "",
- "max-idle": "",
- "max-lifetime": "",
- "max-open": "",
- "title-connection-limits": ""
+ "auto-max-idle": "自動最大アイドル",
+ "content-auto-max-idle": "有効にすると、<1>最大アイドル接続数1>が<3>最大オープン接続数3>と同じ値に自動設定されます。最大オープン接続数が設定されていない場合、デフォルト({{defaultMaxIdle}})に設定されます。",
+ "content-max-idle": "アイドル接続プールの最大接続数。<1>最大オープン接続数1>が0より大きく<3>最大アイドル接続数3>より小さい場合、<5>最大アイドル接続数5>は<8>最大オープン接続数8>の制限に合わせて削減されます。0に設定すると、アイドル接続は保持されません。",
+ "content-max-lifetime": "接続を再利用できる最大時間(秒)。0に設定すると、接続は永続的に再利用されます。",
+ "content-max-open": "データベースへの最大オープン接続数。<1>最大アイドル接続数1>が0より大きく<3>最大オープン接続数3>が<5>最大アイドル接続数5>より小さい場合、<7>最大アイドル接続数7>は<9>最大オープン接続数9>の制限に合わせて削減されます。0に設定すると、オープン接続数に制限はありません。",
+ "max-idle": "最大アイドル",
+ "max-lifetime": "最大有効期間",
+ "max-open": "最大オープン",
+ "title-connection-limits": "接続制限"
},
"dataset-selector": {
- "aria-label-dataset-selector": ""
+ "aria-label-dataset-selector": "データセットセレクター"
},
"error-boundary": {
"fall-back": {
@@ -31,21 +31,21 @@
"get-custom-operators": {
"custom-operators": {
"label": {
- "macros": ""
+ "macros": "マクロ"
}
}
},
"make-render-column": {
"render-column": {
"aria-label-group-by": "グループ化",
- "title-remove-group-by-column": ""
+ "title-remove-group-by-column": "グループ化列を削除"
}
},
"order-by-row": {
- "aria-label-order-by": "",
+ "aria-label-order-by": "並び順",
"label-limit": "制限",
- "label-offset": "",
- "label-order-by": ""
+ "label-offset": "オフセット",
+ "label-order-by": "並び順"
},
"preview": {
"label-element": {
@@ -54,100 +54,100 @@
}
},
"query-header": {
- "content-invalid-query": "",
+ "content-invalid-query": "クエリが無効です。詳細は下記をご確認ください。<1>1>ただし、このクエリは引き続き実行できます。",
"editor-modes": {
"label-builder": "",
"label-code": ""
},
- "label-dataset": "",
+ "label-dataset": "データセット",
"label-filter": "フィルタリング",
"label-format": "形式",
"label-group": "グループ",
- "label-order": "",
+ "label-order": "順番",
"label-preview": "プレビュー",
"label-table": "テーブル",
- "placeholder-select-format": "",
+ "placeholder-select-format": "フォーマットを選択",
"run-query": "クエリの実行"
},
"query-toolbox": {
- "content-hit-ctrlcmdreturn-to-run-query": "",
- "tooltip-collapse": "",
- "tooltip-expand": "",
- "tooltip-format-query": ""
+ "content-hit-ctrlcmdreturn-to-run-query": "CTRL/CMD+Returnでクエリを実行",
+ "tooltip-collapse": "エディターを折りたたむ",
+ "tooltip-expand": "エディターを展開",
+ "tooltip-format-query": "クエリをフォーマット"
},
"query-validator": {
- "query-will-process": "",
- "validating-query": ""
+ "query-will-process": "<0>0>このクエリは実行時に<2>{{bytes}}2>を処理します。",
+ "validating-query": "クエリを検証中..."
},
"raw-editor": {
"render-placeholder": {
- "editing-in-expanded-code-editor": ""
+ "editing-in-expanded-code-editor": "展開されたコードエディターで編集中"
},
- "title-query-num": ""
+ "title-query-num": "{{queryNum}}個のクエリ"
},
"select-column": {
"label-column": "列"
},
"select-custom-function-parameters": {
- "aria-label-parameter": "",
+ "aria-label-parameter": "列{{columnIndex}}のパラメーター{{index}}",
"render-parameters": {
"params": {
- "title-remove-parameter": ""
+ "title-remove-parameter": "パラメーターを削除"
}
},
- "title-add-parameter": ""
+ "title-add-parameter": "パラメーターを追加"
},
"select-row": {
"aggregate-options": {
"options": {
"label": {
- "aggregations": "",
- "macros": ""
+ "aggregations": "集計",
+ "macros": "マクロ"
}
}
},
"label": {
- "time": "",
+ "time": "時間",
"value": "値"
},
"label-alias": "エイリアス",
- "label-data-operations": "",
- "title-add-column": "",
- "title-remove-column": ""
+ "label-data-operations": "データ操作",
+ "title-add-column": "列を追加",
+ "title-remove-column": "列を削除"
},
"settings": {
- "aria-label-conjunction": "",
+ "aria-label-conjunction": "結合",
"aria-label-field": "フィールド",
"aria-label-operator": "オペレーター",
- "title-button-filter": ""
+ "title-button-filter": "{{ buttonLabel }}フィルター"
},
"sql-query-editor-lazy": {
"text-loading-editor": "エディタを読み込んでいます"
},
"table-selector": {
- "aria-label-table-selector": "",
- "placeholder-loading": "",
- "placeholder-select-table": ""
+ "aria-label-table-selector": "テーブルセレクター",
+ "placeholder-loading": "テーブルを読み込み中...",
+ "placeholder-select-table": "テーブルを選択"
},
"tlssecrets-config": {
- "content-tlsssl-client-certificate": "",
- "content-tlsssl-client-key": "",
- "content-tlsssl-root-certificate": "",
- "tlsssl-client-certificate": "",
- "tlsssl-client-key": "",
+ "content-tlsssl-client-certificate": "TLS/SSLクライアント証明書で認証するには、ここにクライアント証明書を入力します。",
+ "content-tlsssl-client-key": "クライアントTLS/SSL証明書で認証するには、ここにキーを入力します。",
+ "content-tlsssl-root-certificate": "選択したTLS/SSLモードでサーバールート証明書が必要な場合は、ここに入力します",
+ "tlsssl-client-certificate": "TLS/SSLクライアント証明書",
+ "tlsssl-client-key": "TLS/SSLクライアントキー",
"tlsssl-root-certificate": "TLS/SSLルート証明書"
},
"visual-editor": {
- "label-filter-by-column-value": "",
- "label-group-by-column": ""
+ "label-filter-by-column-value": "列の値でフィルタリング",
+ "label-group-by-column": "列でグループ化"
},
"widgets": {
- "aria-label-macros-value-selector": ""
+ "aria-label-macros-value-selector": "マクロ値セレクター"
}
},
"utils": {
"get-columns-width-indices": {
- "label-selected-columns": ""
+ "label-selected-columns": "選択された列"
}
}
}
diff --git a/public/app/plugins/datasource/azuremonitor/locales/de-DE/grafana-azure-monitor-datasource.json b/public/app/plugins/datasource/azuremonitor/locales/de-DE/grafana-azure-monitor-datasource.json
index 7b5adf4401a..70586891c3d 100644
--- a/public/app/plugins/datasource/azuremonitor/locales/de-DE/grafana-azure-monitor-datasource.json
+++ b/public/app/plugins/datasource/azuremonitor/locales/de-DE/grafana-azure-monitor-datasource.json
@@ -233,7 +233,7 @@
"title-error-occurred": "Bei der Anforderung von Ressourcen von Azure Monitor ist ein Fehler aufgetreten"
},
"scope-selector": {
- "label": ""
+ "label": "Bereich"
},
"search": {
"aria-label-resource-search": "Ressourcensuche",
diff --git a/public/app/plugins/datasource/azuremonitor/locales/hu-HU/grafana-azure-monitor-datasource.json b/public/app/plugins/datasource/azuremonitor/locales/hu-HU/grafana-azure-monitor-datasource.json
index 4ccef7bbbfe..99def013e2c 100644
--- a/public/app/plugins/datasource/azuremonitor/locales/hu-HU/grafana-azure-monitor-datasource.json
+++ b/public/app/plugins/datasource/azuremonitor/locales/hu-HU/grafana-azure-monitor-datasource.json
@@ -233,7 +233,7 @@
"title-error-occurred": "Hiba történt az erőforrások Azure Monitor szolgáltatásból történő lekérése során"
},
"scope-selector": {
- "label": ""
+ "label": "Hatókör"
},
"search": {
"aria-label-resource-search": "Erőforrás keresése",
diff --git a/public/app/plugins/datasource/azuremonitor/locales/id-ID/grafana-azure-monitor-datasource.json b/public/app/plugins/datasource/azuremonitor/locales/id-ID/grafana-azure-monitor-datasource.json
index 3ab6b7e9853..5de934ad671 100644
--- a/public/app/plugins/datasource/azuremonitor/locales/id-ID/grafana-azure-monitor-datasource.json
+++ b/public/app/plugins/datasource/azuremonitor/locales/id-ID/grafana-azure-monitor-datasource.json
@@ -233,7 +233,7 @@
"title-error-occurred": "Terjadi kesalahan saat meminta sumber daya dari Azure Monitor"
},
"scope-selector": {
- "label": ""
+ "label": "Ruang Lingkup"
},
"search": {
"aria-label-resource-search": "Pencarian sumber daya",
diff --git a/public/app/plugins/datasource/azuremonitor/locales/ja-JP/grafana-azure-monitor-datasource.json b/public/app/plugins/datasource/azuremonitor/locales/ja-JP/grafana-azure-monitor-datasource.json
index 165a50a63bc..c876ebe62f2 100644
--- a/public/app/plugins/datasource/azuremonitor/locales/ja-JP/grafana-azure-monitor-datasource.json
+++ b/public/app/plugins/datasource/azuremonitor/locales/ja-JP/grafana-azure-monitor-datasource.json
@@ -233,7 +233,7 @@
"title-error-occurred": "Azure Monitorからリソースをリクエスト中にエラーが発生しました"
},
"scope-selector": {
- "label": ""
+ "label": "スコープ"
},
"search": {
"aria-label-resource-search": "リソース検索",
diff --git a/public/locales/cs-CZ/grafana.json b/public/locales/cs-CZ/grafana.json
index 495f3ed7840..820c5ece0c6 100644
--- a/public/locales/cs-CZ/grafana.json
+++ b/public/locales/cs-CZ/grafana.json
@@ -3282,6 +3282,11 @@
"id-token-attribute-name-label": "Název atributu ID tokenu",
"login-attribute-path-description": "Výraz JMESPath, který se použije pro vyhledání přihlašovacích údajů uživatele z tokenu ID uživatele.",
"login-attribute-path-label": "Cesta atributu přihlášení",
+ "login-prompt-consent": "",
+ "login-prompt-description": "",
+ "login-prompt-label": "",
+ "login-prompt-login": "",
+ "login-prompt-select-account": "",
"managed-identity-client-id-description": "ID klienta spravované identity federovaných identifikačních údajů vaší aplikace OAuth2.",
"managed-identity-client-id-label": "ID klienta spravované identity FIC",
"name-attribute-path-description": "Výraz JMESPath, který se použije pro vyhledání uživatelského jména z tokenu ID uživatele.\nToto jméno bude použito jako zobrazované jméno uživatele.",
diff --git a/public/locales/de-DE/grafana.json b/public/locales/de-DE/grafana.json
index d93a1b78971..df6eaab33af 100644
--- a/public/locales/de-DE/grafana.json
+++ b/public/locales/de-DE/grafana.json
@@ -119,10 +119,10 @@
"users-heading": "Benutzer in der Organisation"
},
"enterprise-auth-features-card": {
- "dismiss": "",
- "heading": "",
- "learn-more-link": "",
- "text": ""
+ "dismiss": "Schließen",
+ "heading": "Enterprise-Authentifizierung",
+ "learn-more-link": "Mehr erfahren",
+ "text": "Verwalten Sie Nutzer, Teams und Berechtigungen automatisch mit <1>SAML1>, <3>SCIM3>, <6>LDAP6> und <8>RBAC8> – verfügbar in Grafana Cloud und Grafana Enterprise."
},
"feature-listing": {
"title-auditing": "Auditing",
@@ -374,8 +374,8 @@
"am-active-timing-select-label-active-timings": "Aktive Zeitvorgaben"
},
"ad": {
- "close": "",
- "learn-more": ""
+ "close": "Schließen",
+ "learn-more": "Mehr erfahren"
},
"add-button": {
"add-more": "Weitere hinzufügen"
@@ -404,12 +404,12 @@
"missing-series-resolve": "Fehlende Reihenbewertungen zu beheben",
"no-annotations": "Keine Anmerkungen",
"notification-configuration": {
- "active-timings": "",
+ "active-timings": "Aktive Zeitintervalle",
"contact-point": "Kontaktpunkt",
"group-by": "Gruppiert nach",
- "group-title": "",
+ "group-title": "Benachrichtigungskonfiguration",
"mute-timings": "Stummschaltung",
- "timing-options": ""
+ "timing-options": "Timings"
},
"pending-period": "Wartezeit",
"rule": "Regel",
@@ -963,7 +963,7 @@
},
"contactPoints": {
"validation": {
- "notFound": ""
+ "notFound": "Kontaktpunkt „{{contactPoint}}“ konnte nicht gefunden werden"
}
},
"continue-matching-indicator": {
@@ -972,7 +972,7 @@
"copy-to-clipboard": "„{{label}}“ in die Zwischenablage kopieren",
"create-metadata": {
"label": {
- "contact-point": "",
+ "contact-point": "Benachrichtigungen werden übermittelt an",
"dashboard": "Dashboard",
"dashboard-and-panel": "Dashboard und Panel",
"evaluation-interval": "Evaluierungsintervall",
@@ -1120,7 +1120,7 @@
"content-show-all-errors": "Alle Fehler anzeigen"
},
"errors": {
- "failedWith": ""
+ "failedWith": "{{-config}} fehlgeschlagen mit {{status}}: {{-message}}"
},
"evaluate-every-validation-options": {
"message": {
@@ -1568,20 +1568,20 @@
}
},
"home": {
- "irm-card-description": "",
- "irm-card-item-1": "",
- "irm-card-item-2": "",
- "irm-card-item-3": "",
- "irm-card-item-4": "",
- "irm-card-title": "",
+ "irm-card-description": "Vereinheitlichen Sie die Bereitschaft, Alarmierung und Vorfallreaktion mit Grafana Cloud IRM.",
+ "irm-card-item-1": "Verwalten Sie Bereitschaftspläne mit Ihrem Kalender oder Terraform.",
+ "irm-card-item-2": "Reagieren Sie auf Vorfälle über Web, App, Slack oder andere Kanäle.",
+ "irm-card-item-3": "Identifizieren Sie die Ursachen mit dem KI-gestützten Grafana SIFT.",
+ "irm-card-item-4": "Analysieren Sie vergangene Vorfälle, um die Reaktion und Resilienz zu verbessern.",
+ "irm-card-title": "Vorfallreaktion und Vorfallmanagement",
"label-get-started": "Erste Schritte",
"label-insights": "Insights",
- "synthetic-monitoring-card-description": "",
- "synthetic-monitoring-card-item-1": "",
- "synthetic-monitoring-card-item-2": "",
- "synthetic-monitoring-card-item-3": "",
- "synthetic-monitoring-card-item-4": "",
- "synthetic-monitoring-card-title": "",
+ "synthetic-monitoring-card-description": "Überwachen Sie kritische Nutzerflows, Websites und APIs extern von globalen Standorten aus.",
+ "synthetic-monitoring-card-item-1": "Simulieren Sie End-to-End-Nutzer-Journeys mit Browser-Prüfungen.",
+ "synthetic-monitoring-card-item-2": "Führen Sie auf jeder Netzwerkebene Ping-, DNS-, HTTP/S- und TCP-Prüfungen durch.",
+ "synthetic-monitoring-card-item-3": "Nutzen Sie mehr als 20 globale Tests oder private Tests hinter Ihrer Firewall.",
+ "synthetic-monitoring-card-item-4": "Verfolgen Sie SLOs mit integrierten Warnungen im Stil von Prometheus – direkt über die Benutzeroberfläche.",
+ "synthetic-monitoring-card-title": "Synthetisches Monitoring",
"title-alerting": "Meldungen"
},
"import-to-gma": {
@@ -1596,7 +1596,7 @@
"no-rules-body-yaml": "Es gibt keine Regeln, die importiert werden könnten. Bitte wählen Sie eine andere YAML-Datei.",
"no-rules-title": "Keine Regeln zum Importieren",
"not-using-rules-managed-by-integrations-or-plugins": {
- "text": "",
+ "text": "Regeln, die von Integrationen oder Plugins verwaltet werden, sollten nicht zu Regeln importiert werden, die von Grafana verwaltet werden.",
"title": "Informationen"
},
"plugin-rules-warning": {
@@ -1976,7 +1976,7 @@
},
"notification-policies-filter": {
"label-search-by-contact-point": "Suche nach Kontaktpunkt",
- "placeholder-search-by-contact-point": "",
+ "placeholder-search-by-contact-point": "Wählen Sie einen Kontaktpunkt",
"search-query-input-placeholder-search": "Suche"
},
"notification-policies-list": {
@@ -2487,7 +2487,7 @@
"new-badge": "Neu!",
"text": "Importieren zu von Grafana verwalteten Regeln"
},
- "loading-more-groups": "",
+ "loading-more-groups": "Weitere Gruppen werden geladen …",
"more": "Mehr",
"new-alert-rule": "Neue Warnregel",
"new-datasource-recording-rule": "Neue Datenquelle-Aufnahmeregel",
@@ -3038,51 +3038,51 @@
}
},
"alertlist": {
- "category-alert-state-filter": "",
- "category-filter": "",
- "category-options": "",
- "descriptino-alerts-linked-to-dashboard": "",
- "description-alert-instance-label": "",
- "description-alert-name": "",
- "description-datasource": "",
- "description-folder": "",
- "description-group-by": "",
- "description-group-mode": "",
- "description-max-items": "",
- "description-show-inactive-alerts": "",
- "description-sort-order": "",
- "description-view-mode": "",
+ "category-alert-state-filter": "Warnzustandsfilter",
+ "category-filter": "Filter",
+ "category-options": "Optionen",
+ "descriptino-alerts-linked-to-dashboard": "Nur mit diesem Dashboard verknüpfte Warnungen anzeigen",
+ "description-alert-instance-label": "Filtern Sie Warnungsinstanzen mithilfe von Label-Abfragen wie: {severity=\"critical\", instance=~\"cluster-us-.+\"}",
+ "description-alert-name": "Filtern Sie nach Warnungen, die diesen Text enthalten",
+ "description-datasource": "Filtern Sie nach der Warnungsquelle",
+ "description-folder": "Filtern Sie nach Warnungen im ausgewählten Ordner (nur für Warnregeln, die von Grafana verwaltet werden)",
+ "description-group-by": "Filtern Sie Warnungen mithilfe von Label-Abfragen",
+ "description-group-mode": "Wie Warnungsinstanzen gruppiert werden sollten",
+ "description-max-items": "Maximale Anzahl der anzuzeigenden Warnungen",
+ "description-show-inactive-alerts": "Warnregeln mit 0 (null) Instanzen einbeziehen. Da diese Regeln keine Instanzen haben, bleiben sie ausgeblendet, wenn der Label-Filter für Warnungsinstanzen konfiguriert ist.",
+ "description-sort-order": "Sortierreihenfolge von Warnungen und Warnungsinstanzen",
+ "description-view-mode": "Zwischen Listenansicht und Statistikansicht wechseln",
"group-by": {
"aria-label-group-by-label-keys": "Nach Label-Keys gruppieren",
"placeholder-group-by": "Gruppieren nach"
},
"group-mode-options": {
- "label-custom-grouping": "",
- "label-default-grouping": ""
- },
- "name-alert-instance-label": "",
- "name-alert-name": "",
- "name-alerts-linked-to-dashboard": "",
- "name-datasource": "",
- "name-error": "",
- "name-firing": "",
- "name-folder": "",
- "name-group-by": "",
- "name-group-mode": "",
- "name-max-items": "",
- "name-no-data": "",
- "name-normal": "",
- "name-pending": "",
- "name-recovering": "",
- "name-show-inactive-alerts": "",
- "name-sort-order": "",
- "name-view-mode": "",
+ "label-custom-grouping": "Benutzerdefinierte Gruppierung",
+ "label-default-grouping": "Standardgruppierung"
+ },
+ "name-alert-instance-label": "Warnungsinstanz-Label",
+ "name-alert-name": "Name der Warnung",
+ "name-alerts-linked-to-dashboard": "Mit diesem Dashboard verknüpfte Warnungen",
+ "name-datasource": "Datenquelle",
+ "name-error": "Fehler",
+ "name-firing": "Warnung/Auslösung",
+ "name-folder": "Ordner",
+ "name-group-by": "Gruppieren nach",
+ "name-group-mode": "Gruppenmodus",
+ "name-max-items": "Max. Elemente",
+ "name-no-data": "Keine Daten",
+ "name-normal": "Normal",
+ "name-pending": "Ausstehend",
+ "name-recovering": "Wird wiederhergestellt",
+ "name-show-inactive-alerts": "Warnungen mit 0 Instanzen anzeigen",
+ "name-sort-order": "Sortierreihenfolge",
+ "name-view-mode": "Ansichtsmodus",
"sort-order-options": {
- "label-alphabetical-asc": "",
- "label-alphabetical-desc": "",
- "label-importance": "",
- "label-time-asc": "",
- "label-time-desc": ""
+ "label-alphabetical-asc": "Alphabetisch (aufsteigend)",
+ "label-alphabetical-desc": "Alphabetisch (absteigend)",
+ "label-importance": "Relevanz",
+ "label-time-asc": "Zeit (aufsteigend)",
+ "label-time-desc": "Zeit (absteigend)"
},
"ungrouped-mode-view": {
"active-for": "<1>{{duration}}1> lang",
@@ -3098,8 +3098,8 @@
"title-permission-required": "Berechtigung erforderlich"
},
"view-mode-options": {
- "label-list": "",
- "label-stat": ""
+ "label-list": "Liste",
+ "label-stat": "Stat."
}
},
"annolist": {
@@ -3112,31 +3112,31 @@
"annotation-list-item": {
"tooltip-created-by": "Erstellt von:<1>1> {{email}}"
},
- "category-annotation-query": "",
- "category-display": "",
- "category-link-behaviour": "",
- "description-tags": "",
+ "category-annotation-query": "Annotationsabfrage",
+ "category-display": "Display",
+ "category-link-behaviour": "Link-Verhalten",
+ "description-tags": "Annotations-Tags abgleichen",
"link-target-options": {
- "label-dashboard": "",
- "label-panel": ""
- },
- "name-limit": "",
- "name-link-target": "",
- "name-query-filter": "",
- "name-show-tags": "",
- "name-show-time": "",
- "name-show-user": "",
- "name-tags": "",
- "name-time-after": "",
- "name-time-before": "",
- "name-time-range": "",
+ "label-dashboard": "Dashboard",
+ "label-panel": "Panel"
+ },
+ "name-limit": "Grenze",
+ "name-link-target": "Linkziel",
+ "name-query-filter": "Abfragefilter",
+ "name-show-tags": "Tags anzeigen",
+ "name-show-time": "Zeit anzeigen",
+ "name-show-user": "Nutzer anzeigen",
+ "name-tags": "Tags",
+ "name-time-after": "Zeitraum danach",
+ "name-time-before": "Zeitraum davor",
+ "name-time-range": "Zeitbereich",
"query-filter-options": {
- "label-all-dashboards": "",
- "label-this-dashboard": ""
+ "label-all-dashboards": "Alle Dashboards",
+ "label-this-dashboard": "Dieses Dashboard"
},
"time-range-options": {
- "label-none": "",
- "label-this-dashboard": ""
+ "label-none": "Keine",
+ "label-this-dashboard": "Dieses Dashboard"
}
},
"annotations": {
@@ -3256,6 +3256,11 @@
"id-token-attribute-name-label": "ID-Token-Attributname",
"login-attribute-path-description": "JMESPath-Ausdruck, der für die Nutzer-Login-Suche aus dem Nutzer-ID-Token verwendet wird.",
"login-attribute-path-label": "Anmeldeattributpfad",
+ "login-prompt-consent": "",
+ "login-prompt-description": "",
+ "login-prompt-label": "",
+ "login-prompt-login": "",
+ "login-prompt-select-account": "",
"managed-identity-client-id-description": "Die Client-ID zur verwalteten Identität der Verbundidentitäts-Anmeldedaten Ihrer OAuth2-App.",
"managed-identity-client-id-label": "Client-ID der FIC-verwalteten Identität",
"name-attribute-path-description": "JMESPath-Ausdruck, der für die Nutzername-Suche aus dem Nutzer-ID-Token verwendet wird. \nDieser Name wird als Anzeigename des Nutzers verwendet.",
@@ -3326,8 +3331,8 @@
}
},
"provider-card": {
- "saml-learn-more": "",
- "scim-learn-more": "",
+ "saml-learn-more": "Einmalanmeldung (SSO) mit SAML.",
+ "scim-learn-more": " Synchronisieren Sie Nutzer und Teams mit SCIM.",
"text-badge-enabled": "Aktiviert",
"text-badge-not-enabled": "Nicht aktiviert"
},
@@ -3364,99 +3369,99 @@
},
"bar-chart": {
"warn": {
- "missing-numeric": "",
- "missing-series": ""
+ "missing-numeric": "Keine numerischen Felder gefunden",
+ "missing-series": "Balkendiagramme erfordern ein String- oder Zeitfeld"
}
},
"barchart": {
"config": {
- "category-thresholds": "",
- "description-color-by-field": "",
- "description-x-label-max-length": "",
- "name-bar-radius": "",
- "name-bar-width": "",
- "name-color-by-field": "",
- "name-fill-opacity": "",
- "name-full-highlight": "",
- "name-gradient-mode": "",
- "name-group-width": "",
- "name-line-width": "",
- "name-orientation": "",
- "name-rotate-x-labels": "",
- "name-show-thresholds": "",
- "name-show-values": "",
- "name-stacking": "",
- "name-transform": "",
- "name-x-axis": "",
- "name-x-label-max-length": "",
- "name-x-label-min-spacing": "",
+ "category-thresholds": "Schwellenwerte",
+ "description-color-by-field": "Verwenden Sie den Farbwert für ein gleichrangiges Feld, um jeden Balkenwert zu färben.",
+ "description-x-label-max-length": "X-Achsen-Labels werden auf die angegebene Länge gekürzt",
+ "name-bar-radius": "Balkenradius",
+ "name-bar-width": "Balkenbreite",
+ "name-color-by-field": "Farbe nach Feld",
+ "name-fill-opacity": "Fülldeckkraft",
+ "name-full-highlight": "Beim Hovern vollständigen Bereich hervorheben",
+ "name-gradient-mode": "Farbverlaufsmodus",
+ "name-group-width": "Gruppenbreite",
+ "name-line-width": "Linienbreite",
+ "name-orientation": "Ausrichtung",
+ "name-rotate-x-labels": "X-Achsen-Teilstrich-Labels drehen",
+ "name-show-thresholds": "Schwellenwerte anzeigen",
+ "name-show-values": "Werte anzeigen",
+ "name-stacking": "Stapeln",
+ "name-transform": "Transformieren",
+ "name-x-axis": "X-Achse",
+ "name-x-label-max-length": "Maximale Länge der X-Achsen-Teilstrich-Labels",
+ "name-x-label-min-spacing": "Mindestabstand der X-Achsen-Labels",
"orientation-options": {
- "label-auto": "",
- "label-horizontal": "",
- "label-line-vertical": ""
+ "label-auto": "Auto",
+ "label-horizontal": "Horizontal",
+ "label-line-vertical": "Vertikal"
},
- "placeholder-x-axis": "",
- "placeholder-x-label-max-length": "",
+ "placeholder-x-axis": "Erstes String- oder Zeitfeld",
+ "placeholder-x-label-max-length": "Keine",
"show-values-options": {
- "label-always": "",
- "label-auto": "",
- "label-never": ""
+ "label-always": "Immer",
+ "label-auto": "Auto",
+ "label-never": "Nie"
},
"transform-options": {
- "description-constant": "",
- "description-negative-y": "",
- "label-constant": "",
- "label-negative-y": ""
+ "description-constant": "Der erste Wert wird als konstante Linie angezeigt",
+ "description-negative-y": "Ergebnisse auf der Y-Achse auf negative Werte umkehren",
+ "label-constant": "Konstant",
+ "label-negative-y": "Negativ Y"
}
},
"tick-spacing-editor": {
"content-require-space-from-the-right-side": "Leerzeichen von der rechten Seite erforderlich",
"gaps-options": {
- "description-large": "",
- "description-medium": "",
- "description-none": "",
- "description-small": "",
- "label-large": "",
- "label-medium": "",
- "label-none": "",
- "label-small": ""
+ "description-large": "Abstand von {{spacing}} erforderlich",
+ "description-medium": "Abstand von {{spacing}} erforderlich",
+ "description-none": "Alle Teilstriche anzeigen",
+ "description-small": "Abstand von {{spacing}} erforderlich",
+ "label-large": "Groß",
+ "label-medium": "Mittel",
+ "label-none": "Keine",
+ "label-small": "Klein"
},
"label-rtl": "RTL"
}
},
"bargauge": {
"bar-size-options": {
- "label-auto": "",
- "label-manual": ""
- },
- "category-bar-gauge": "",
- "description-max-height": "",
- "description-min-height": "",
- "description-min-width": "",
- "description-show-unfilled-area": "",
+ "label-auto": "Auto",
+ "label-manual": "Manuell"
+ },
+ "category-bar-gauge": "Balkenanzeige",
+ "description-max-height": "Maximale Zeilenhöhe (horizontale Ausrichtung)",
+ "description-min-height": "Minimale Zeilenhöhe (horizontale Ausrichtung)",
+ "description-min-width": "Minimale Spaltenbreite (vertikale Ausrichtung)",
+ "description-show-unfilled-area": "Wenn diese Option aktiviert ist, wird der ungefüllte Bereich grau dargestellt",
"display-mode-options": {
- "label-basic": "",
- "label-gradient": "",
- "label-retro": ""
- },
- "name-bar-size": "",
- "name-display-mode": "",
- "name-max-height": "",
- "name-min-height": "",
- "name-min-width": "",
- "name-name-placement": "",
+ "label-basic": "Einfach",
+ "label-gradient": "Farbverlauf",
+ "label-retro": "Retro-LCD"
+ },
+ "name-bar-size": "Balkengröße",
+ "name-display-mode": "Anzeigemodus",
+ "name-max-height": "Max. Höhe",
+ "name-min-height": "Min. Höhe",
+ "name-min-width": "Min. Breite",
+ "name-name-placement": "Namensplatzierung",
"name-placement-options": {
- "label-auto": "",
- "label-hidden": "",
- "label-left": "",
- "label-top": ""
+ "label-auto": "Auto",
+ "label-hidden": "Ausgeblendet",
+ "label-left": "Links",
+ "label-top": "Oben"
},
- "name-show-unfilled-area": "",
- "name-value-display": "",
+ "name-show-unfilled-area": "Ungefüllten Bereich anzeigen",
+ "name-value-display": "Wertanzeige",
"value-display-options": {
- "label-hidden": "",
- "label-text-color": "",
- "label-value-color": ""
+ "label-hidden": "Ausgeblendet",
+ "label-text-color": "Textfarbe",
+ "label-value-color": "Wertfarbe"
}
},
"bookmarks-page": {
@@ -3481,7 +3486,7 @@
"delete-modal-restore-dashboards-text": "Durch diese Aktion werden die ausgewählten Ordner sofort gelöscht, aber die ausgewählten Dashboards werden innerhalb von 30 Tagen zur Löschung markiert. Der Administrator Ihrer Organisation kann die Dashboards jederzeit vor Ablauf der 30 Tage wiederherstellen. Ordner können nicht wiederhergestellt werden.",
"delete-modal-text": "Diese Aktion wird folgenden Inhalt löschen:",
"delete-modal-title": "Löschen",
- "delete-provisioned-folder": "",
+ "delete-provisioned-folder": "Bereitgestellten Ordner löschen",
"deleting": "Löschen...",
"manage-permissions-button": "Berechtigungen verwalten",
"move-button": "Verschieben",
@@ -3525,12 +3530,12 @@
"tags-column": "Tags"
},
"delete-provisioned-folder-form": {
- "alert-folder-deleted-successfully": "",
- "api-error": "",
- "button-cancel": "",
- "button-delete": "",
- "button-deleting": "",
- "delete-warning": ""
+ "alert-folder-deleted-successfully": "Ordner erfolgreich gelöscht",
+ "api-error": "Ordner konnte nicht gelöscht werden",
+ "button-cancel": "Abbrechen",
+ "button-delete": "Löschen",
+ "button-deleting": "Wird gelöscht …",
+ "delete-warning": "Dadurch werden dieser und alle untergeordneten Ordner gelöscht. Insgesamt betrifft dies:"
},
"descendant-count": {
"title-unable-to-retrieve-descendant-information": "Nachfolgerinformationen können nicht abgerufen werden"
@@ -3589,52 +3594,52 @@
"text": "Keine Ergebnisse für deine Abfrage gefunden"
},
"restore": {
- "success": ""
+ "success": "Dashboard {{name}} wiederhergestellt"
},
"text-this-repository-is-read-only": "Wenn Sie direkten Zugriff auf das Ziel haben, kopieren Sie den JSON und fügen Sie ihn dort ein.",
"trash-state-manager": {
"label": {
- "alphabetically-az": "",
- "alphabetically-za": ""
+ "alphabetically-az": "Alphabetisch (A–Z)",
+ "alphabetically-za": "Alphabetisch (Z–A)"
}
}
},
"candlestick": {
"additional-fields-options": {
- "label-ignore": "",
- "label-include": ""
+ "label-ignore": "Ignorieren",
+ "label-include": "Einschließen"
},
"candle-style-options": {
- "label-candles": "",
- "label-ohlc-bars": ""
+ "label-candles": "Kerzen",
+ "label-ohlc-bars": "OHLC-Balken"
},
- "category-candlestick": "",
+ "category-candlestick": "Candlestick",
"color-strategy-options": {
- "label-since-open": "",
- "label-since-prior-close": ""
- },
- "description-additional-fields": "",
- "description-close": "",
- "description-high": "",
- "description-low": "",
- "description-open": "",
- "description-volume": "",
+ "label-since-open": "Seit dem Öffnen",
+ "label-since-prior-close": "Seit dem letzten Schließen"
+ },
+ "description-additional-fields": "Verwenden Sie standardmäßige Zeitreihen-Optionen, um oben nicht zugeordnete Felder zu konfigurieren",
+ "description-close": "Wert am Ende des Zeitraums",
+ "description-high": "Maximalwert innerhalb des Zeitraums",
+ "description-low": "Minimalwert innerhalb des Zeitraums",
+ "description-open": "Wert zu Beginn des Zeitraums",
+ "description-volume": "Probenzahl innerhalb des Zeitraums",
"mode-options": {
- "label-both": "",
- "label-candles": "",
- "label-volume": ""
- },
- "name-additional-fields": "",
- "name-candle-style": "",
- "name-close": "",
- "name-color-strategy": "",
- "name-down-color": "",
- "name-high": "",
- "name-low": "",
- "name-mode": "",
- "name-open": "",
- "name-up-color": "",
- "name-volume": ""
+ "label-both": "Beides",
+ "label-candles": "Kerzen",
+ "label-volume": "Volumen"
+ },
+ "name-additional-fields": "Zusätzliche Felder",
+ "name-candle-style": "Kerzenstil",
+ "name-close": "Schließen",
+ "name-color-strategy": "Farbstrategie",
+ "name-down-color": "Farbe unten",
+ "name-high": "Hoch",
+ "name-low": "Niedrig",
+ "name-mode": "Modus",
+ "name-open": "Öffnen",
+ "name-up-color": "Farbe oben",
+ "name-volume": "Volumen"
},
"canvas": {
"apieditor": {
@@ -3649,18 +3654,18 @@
}
},
"button-item": {
- "category-button": "",
+ "category-button": "Schaltfläche",
"label": {
"center": "Mitte",
"left": "Links",
"right": "Rechts"
},
- "name-align-text": "",
- "name-api": "",
- "name-style": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
+ "name-align-text": "Text ausrichten",
+ "name-api": "API",
+ "name-style": "Stil",
+ "name-text": "Text",
+ "name-text-color": "Textfarbe",
+ "name-text-size": "Textgröße",
"placeholder": {
"auto": "Auto"
}
@@ -3687,20 +3692,20 @@
}
}
},
- "category-arrow-direction": "",
- "category-background": "",
- "category-border": "",
- "category-canvas": "",
- "category-color": "",
- "category-data-links": "",
- "category-line-style": "",
- "category-metric-value": "",
- "category-radius": "",
- "category-selected-connection": "",
- "category-selected-element": "",
- "category-size": "",
+ "category-arrow-direction": "Pfeilrichtung",
+ "category-background": "Hintergrund",
+ "category-border": "Rahmen",
+ "category-canvas": "Leinwand",
+ "category-color": "Farbe",
+ "category-data-links": "Datenlinks und Aktionen",
+ "category-line-style": "Linienstil",
+ "category-metric-value": "Metrikwert",
+ "category-radius": "Radius",
+ "category-selected-connection": "Ausgewählte Verbindung",
+ "category-selected-element": "Ausgewähltes Element ({{element}})",
+ "category-size": "Größe",
"cloud-item": {
- "category-cloud": "",
+ "category-cloud": "Cloud",
"label": {
"bottom": "Unten",
"center": "Mitte",
@@ -3709,48 +3714,48 @@
"right": "Rechts",
"top": "Oben"
},
- "name-align-text": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "Text ausrichten",
+ "name-text": "Text",
+ "name-text-color": "Textfarbe",
+ "name-text-size": "Textgröße",
+ "name-vertical-align": "Vertikale Ausrichtung",
"placeholder": {
"auto": "Auto"
}
},
- "description-experimental-types": "",
- "description-infinite-panning": "",
- "description-inline-editing": "",
- "description-pan-zoom": "",
+ "description-experimental-types": "Auswahl experimenteller Elementtypen aktivieren",
+ "description-infinite-panning": "Unbegrenztes Schwenken aktivieren – nützlich für umfangreiche Leinwände. Warnung: Dies ist eine experimentelle Funktion und funktioniert momentan nur mit Elementen gut, die oben/links eingeschränkt sind",
+ "description-inline-editing": "Direkte Bearbeitung des Panels aktivieren",
+ "description-pan-zoom": "Schwenken und Zoomen aktivieren",
"direction-options": {
- "label-both": "",
- "label-forward": "",
- "label-none": "",
- "label-reverse": ""
+ "label-both": "Beides",
+ "label-forward": "Vorwärts",
+ "label-none": "Keine",
+ "label-reverse": "Rückwärts"
},
"drone-front-item": {
- "category-drone-front": "",
- "name-roll-angle": ""
+ "category-drone-front": "Drohne vorne",
+ "name-roll-angle": "Rollwinkel"
},
"drone-side-item": {
- "category-drone-side": "",
- "name-pitch-angle": ""
+ "category-drone-side": "Drohne Seite",
+ "name-pitch-angle": "Steigungswinkel"
},
"drone-top-item": {
- "category-drone-top": "",
- "name-back-left-rotor-rpm": "",
- "name-back-right-rotor-rpm": "",
- "name-front-left-rotor-rpm": "",
- "name-front-right-rotor-rpm": "",
- "name-yaw-angle": ""
+ "category-drone-top": "Drohne oben",
+ "name-back-left-rotor-rpm": "Drehzahl des linken hinteren Rotors",
+ "name-back-right-rotor-rpm": "Drehzahl des rechten hinteren Rotors",
+ "name-front-left-rotor-rpm": "Drehzahl des linken vorderen Rotors",
+ "name-front-right-rotor-rpm": "Drehzahl des rechten vorderen Rotors",
+ "name-yaw-angle": "Gierwinkel"
},
"element-editor": {
- "category-layout": "",
- "description-unsupported": "",
- "name-quick-placement": ""
+ "category-layout": "Layout",
+ "description-unsupported": "Der ausgewählte Elementtyp wird von den aktuellen Einstellungen nicht unterstützt. Bitte aktivieren Sie erweiterte Elementtypen.",
+ "name-quick-placement": "Schnelle Platzierung"
},
"ellipse-item": {
- "category-ellipse": "",
+ "category-ellipse": "Ellipse",
"label": {
"bottom": "Unten",
"center": "Mitte",
@@ -3759,50 +3764,50 @@
"right": "Rechts",
"top": "Oben"
},
- "name-align-text": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "Text ausrichten",
+ "name-text": "Text",
+ "name-text-color": "Textfarbe",
+ "name-text-size": "Textgröße",
+ "name-vertical-align": "Vertikale Ausrichtung",
"placeholder": {
"auto": "Auto"
}
},
"icon-item": {
- "category-icon": "",
- "name-fill-color": "",
- "name-svg-path": ""
+ "category-icon": "Symbol",
+ "name-fill-color": "Füllfarbe",
+ "name-svg-path": "SVG Path"
},
"inline-edit": {
"canvas-inline-editor": "Canvas-Inline-Editor",
"tooltip-close-inline-editor": "Inline-Editor schließen"
},
"inline-edit-body": {
- "category-selected-element": "",
+ "category-selected-element": "Ausgewähltes Element ({{element}})",
"label-add-item": "Element hinzufügen",
"please-select-an-element": "Bitte wählen Sie ein Element"
},
- "label-actions": "",
- "label-color": "",
- "label-direction": "",
- "label-image": "",
- "label-image-size": "",
- "label-line-style": "",
- "label-links": "",
- "label-radius": "",
- "label-size": "",
- "label-width": "",
+ "label-actions": "Aktionen",
+ "label-color": "Farbe",
+ "label-direction": "Richtung",
+ "label-image": "Bild",
+ "label-image-size": "Bildgröße",
+ "label-line-style": "Linienstil",
+ "label-links": "Links",
+ "label-radius": "Radius",
+ "label-size": "Größe",
+ "label-width": "Breite",
"layer-editor": {
- "category-layer": "",
- "category-layout": "",
- "name-constraints": "",
- "name-elements": ""
+ "category-layer": "Layer",
+ "category-layout": "Layout",
+ "name-constraints": "Beschränkungen",
+ "name-elements": "Elemente"
},
"line-style-editor": {
"label-animate": "Animieren"
},
"line-style-options": {
- "label-solid": ""
+ "label-solid": "Durchgezogen"
},
"metric-value-item": {
"label": {
@@ -3817,15 +3822,15 @@
"auto": "Auto"
}
},
- "name-align-text": "",
- "name-color": "",
- "name-experimental-types": "",
- "name-infinite-panning": "",
- "name-inline-editing": "",
- "name-pan-zoom": "",
- "name-text": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "Text ausrichten",
+ "name-color": "Textfarbe",
+ "name-experimental-types": "Experimentelle Elementtypen",
+ "name-infinite-panning": "Unbegrenztes Schwenken",
+ "name-inline-editing": "Inline-Bearbeitung",
+ "name-pan-zoom": "Schwenken und Zoomen",
+ "name-text": "Text",
+ "name-text-size": "Textgröße",
+ "name-vertical-align": "Vertikale Ausrichtung",
"not-found-display": {
"not-found": "<0>Nicht gefunden: 0>"
},
@@ -3838,7 +3843,7 @@
"zoom-scroll-wheel": "Zoomen: Scrollrad"
},
"parallelogram-item": {
- "category-parallelogram": "",
+ "category-parallelogram": "Parallelogramm",
"label": {
"bottom": "Unten",
"center": "Mitte",
@@ -3847,11 +3852,11 @@
"right": "Rechts",
"top": "Oben"
},
- "name-align-text": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "Text ausrichten",
+ "name-text": "Text",
+ "name-text-color": "Textfarbe",
+ "name-text-size": "Textgröße",
+ "name-vertical-align": "Vertikale Ausrichtung",
"placeholder": {
"auto": "Auto"
}
@@ -3864,21 +3869,21 @@
},
"placement-editor": {
"horizontal-options": {
- "label-center": "",
- "label-left": "",
- "label-left-and-right": "",
- "label-right": "",
- "label-scale": ""
+ "label-center": "Mitte",
+ "label-left": "Links",
+ "label-left-and-right": "Links und rechts",
+ "label-right": "Rechts",
+ "label-scale": "Skalieren"
},
"label-constraints": "Beschränkungen",
"label-position": "Position",
"loading": "Wird geladen ...",
"vertical-options": {
- "label-bottom": "",
- "label-center": "",
- "label-scale": "",
- "label-top": "",
- "label-top-and-bottom": ""
+ "label-bottom": "Unten",
+ "label-center": "Mitte",
+ "label-scale": "Skalieren",
+ "label-top": "Oben",
+ "label-top-and-bottom": "Oben und unten"
}
},
"quick-positioning": {
@@ -3890,7 +3895,7 @@
"tooltip-align-vertical-centers": "Vertikale mittig ausrichten"
},
"rectangle-item": {
- "category-rectangle": "",
+ "category-rectangle": "Rechteck",
"label": {
"bottom": "Unten",
"center": "Mitte",
@@ -3899,33 +3904,33 @@
"right": "Rechts",
"top": "Oben"
},
- "name-align-text": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "Text ausrichten",
+ "name-text": "Text",
+ "name-text-color": "Textfarbe",
+ "name-text-size": "Textgröße",
+ "name-vertical-align": "Vertikale Ausrichtung",
"placeholder": {
"auto": "Auto"
}
},
"server-item": {
- "category-server": "",
- "name-blink-rate": "",
- "name-bulb-color": "",
- "name-status-color": "",
- "name-type": "",
+ "category-server": "Server",
+ "name-blink-rate": "Blinkfrequenz [hz] (0 = aus)",
+ "name-bulb-color": "Birnen-Farbe",
+ "name-status-color": "Status-Farbe",
+ "name-type": "Typ",
"type-options": {
- "label-database": "",
- "label-single": "",
- "label-stack": "",
- "label-terminal": ""
+ "label-database": "Datenbank",
+ "label-single": "Einzeln",
+ "label-stack": "Stapel",
+ "label-terminal": "Terminal"
}
},
"text-display": {
"double-click-to-set": "Klicken Sie doppelt, um Text festzulegen"
},
"text-item": {
- "category-text": "",
+ "category-text": "Text",
"label": {
"bottom": "Unten",
"center": "Mitte",
@@ -3934,11 +3939,11 @@
"right": "Rechts",
"top": "Oben"
},
- "name-align-text": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "Text ausrichten",
+ "name-text": "Text",
+ "name-text-color": "Textfarbe",
+ "name-text-size": "Textgröße",
+ "name-vertical-align": "Vertikale Ausrichtung",
"placeholder": {
"auto": "Auto"
}
@@ -3960,7 +3965,7 @@
"tooltip-remove": "Entfernen"
},
"triangle-item": {
- "category-triangle": "",
+ "category-triangle": "Dreieck",
"label": {
"bottom": "Unten",
"center": "Mitte",
@@ -3969,18 +3974,18 @@
"right": "Rechts",
"top": "Oben"
},
- "name-align-text": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "Text ausrichten",
+ "name-text": "Text",
+ "name-text-color": "Textfarbe",
+ "name-text-size": "Textgröße",
+ "name-vertical-align": "Vertikale Ausrichtung",
"placeholder": {
"auto": "Auto"
}
},
"wind-turbine-item": {
- "category-wind-turbine": "",
- "name-rpm": ""
+ "category-wind-turbine": "Windturbine",
+ "name-rpm": "Drehzahl"
}
},
"carousel": {
@@ -3997,8 +4002,8 @@
"close-button": {
"tooltip": "Schließen"
},
- "cloud-enterprise-feature-badge": "",
- "cloud-feature-badge": "",
+ "cloud-enterprise-feature-badge": "Cloud und Enterprise",
+ "cloud-feature-badge": "Cloud",
"combobox": {
"async": {
"error": "Beim Laden der Optionen ist ein Fehler aufgetreten."
@@ -4528,7 +4533,7 @@
}
},
"description": {
- "action": ""
+ "action": "Dashboard-Beschreibung ändern"
},
"dynamic-config-value-editor": {
"render-label": {
@@ -4537,12 +4542,12 @@
},
"edit-actions": {
"add": "{{typeName}} hinzufügen",
- "move": "",
+ "move": "Verschieben von {{typeName}}",
"panel-background": "Panel-Hintergrund ändern",
"panel-description": "Panel-Beschreibung ändern",
- "panel-max-repeats-per-row": "",
+ "panel-max-repeats-per-row": "Max. Wiederholungen pro Zeile",
"panel-repeat-direction": "Richtung wiederholen",
- "panel-repeat-variable": "",
+ "panel-repeat-variable": "Panel-Wiederholung durch",
"panel-title": "Panel-Titel ändern",
"paste-panel": "Panel einfügen",
"remove": "{{typeName}} entfernen",
@@ -4676,7 +4681,7 @@
"get-field-override-categories": {
"label-add-field-override": "Feldüberschreibung hinzufügen",
"label-add-override-property": "Überschreibungseigenschaft hinzufügen",
- "override-name": "",
+ "override-name": "Überschreiben von {{overrideNum}}",
"title": {
"add-button": "Hinzufügen-Schaltfläche"
}
@@ -4901,7 +4906,7 @@
"title-matched_other": "Übereinstimmend {{count}}/{{totalCount}} Optionen"
},
"outline": {
- "repeated-item": "",
+ "repeated-item": "Wiederholen",
"tree-item": {
"empty": "(leer)",
"no-title": ""
@@ -5059,8 +5064,8 @@
"label-changes": "Änderungen",
"label-details": "Details",
"title": "Dashboard speichern",
- "title-copy": "",
- "title-provisioned": ""
+ "title-copy": "Dashboard-Kopie speichern",
+ "title-provisioned": "Bereitgestelltes Dashboard"
},
"save-dashboard-error-proxy": {
"body-name-exists": "Ein Dashboard mit demselben Namen im ausgewählten Ordner existiert bereits.<1>1><2>Möchten Sie dieses Dashboard trotzdem speichern?2>",
@@ -5137,7 +5142,7 @@
}
},
"title": {
- "action": ""
+ "action": "Dashboard-Titel ändern"
},
"toolbar": {
"add": "Hinzufügen",
@@ -5572,12 +5577,12 @@
}
},
"delete-provisioned-dashboard-form": {
- "api-error": "",
+ "api-error": "Das Dashboard konnte nicht gelöscht werden",
"cancel-action": "Abbrechen",
"delete-action": "Dashboard löschen",
- "delete-read-only-file-message": "",
+ "delete-read-only-file-message": "Dieses Dashboard kann nicht direkt von Grafana aus gelöscht werden, da das Repository schreibgeschützt ist. Um dieses Dashboard zu löschen, entfernen Sie bitte die Datei aus Ihrem Git-Repository.",
"deleting": "Löschen...",
- "drawer-title": "",
+ "drawer-title": "Bereitgestelltes Dashboard löschen",
"title-this-repository-is-read-only": "Dieses Repository ist schreibgeschützt"
},
"description-label": {
@@ -5591,7 +5596,7 @@
}
},
"edit-provisioned-dashboard-form": {
- "success": ""
+ "success": "Dashboard-Änderungen erfolgreich gespeichert"
},
"email-list": {
"aria-label-emailmenu": "E-Mail-Menü umschalten"
@@ -5785,7 +5790,7 @@
}
},
"panel-data-alerting-tab": {
- "tab-label": ""
+ "tab-label": "Warnung"
},
"panel-data-alerting-tab-rendered": {
"alert": {
@@ -5796,14 +5801,14 @@
"title-dashboard-not-saved": "Dashboard nicht gespeichert"
},
"panel-data-queries-tab": {
- "tab-label": ""
+ "tab-label": "Abfragen"
},
"panel-data-queries-tab-rendered": {
"add-query": "Abfrage hinzufügen",
"expression": "Ausdruck "
},
"panel-data-transformations-tab": {
- "tab-label": ""
+ "tab-label": "Transformationen"
},
"panel-data-transformations-tab-rendered": {
"add-another-transformation": "Weitere Transformation hinzufügen",
@@ -5906,8 +5911,8 @@
"label-changes": "Änderungen",
"label-details": "Details",
"title": "Dashboard speichern",
- "title-copy": "",
- "title-provisioned": ""
+ "title-copy": "Dashboard-Kopie speichern",
+ "title-provisioned": "Bereitgestelltes Dashboard"
}
},
"save-dashboard-form": {
@@ -6231,18 +6236,18 @@
}
},
"dashlist": {
- "category-dashboard-list": "",
- "name-folder": "",
- "name-include-current-template-variables": "",
- "name-include-current-time-range": "",
- "name-max-items": "",
- "name-query": "",
- "name-recently-viewed": "",
- "name-search": "",
- "name-show-folder-names": "",
- "name-show-headings": "",
- "name-starred": "",
- "name-tags": ""
+ "category-dashboard-list": "Dashboard-Liste",
+ "name-folder": "Ordner",
+ "name-include-current-template-variables": "Aktuelle Vorlagenvariablenwerte einbeziehen",
+ "name-include-current-time-range": "Aktuellen Zeitbereich einbeziehen",
+ "name-max-items": "Max. Elemente",
+ "name-query": "Abfrage",
+ "name-recently-viewed": "Zuletzt angesehen",
+ "name-search": "Suchen",
+ "name-show-folder-names": "Ordnernamen anzeigen",
+ "name-show-headings": "Überschriften anzeigen",
+ "name-starred": "Mit Stern versehen",
+ "name-tags": "Tags"
},
"data-source-list": {
"empty-state": {
@@ -6504,15 +6509,15 @@
"dimensions": {
"background-size-editor": {
"options": {
- "label-contain": "",
- "label-cover": "",
- "label-fill": "",
- "label-original": "",
- "label-tile": ""
+ "label-contain": "Contain",
+ "label-cover": "Cover",
+ "label-fill": "Fill",
+ "label-original": "Original",
+ "label-tile": "Tile"
}
},
"color-dimension-editor": {
- "label-fixed-color": "",
+ "label-fixed-color": "Feste Farbe",
"noOptionsMessage-no-fields-found": ""
},
"file-dropzone-custom-children": {
@@ -6527,10 +6532,10 @@
"placeholder-search": "Suche"
},
"resource-dimension-editor": {
- "description-field": "",
- "description-fixed": "",
+ "description-field": "Ein String-Feld-Ergebnis verwenden",
+ "description-fixed": "Fester Wert",
"label-field": "Feld",
- "label-fixed": "",
+ "label-fixed": "Fest",
"label-mappings": "Mappings",
"label-source": "Quelle"
},
@@ -6547,16 +6552,16 @@
},
"scalar-dimension-editor": {
"fixed-value-options": {
- "label-fixed-values": ""
+ "label-fixed-values": "Fester Wert"
},
"label-limit": "Limit",
"label-value": "Wert",
"noOptionsMessage-no-fields-found": "",
"scalar-options": {
- "description-clamped": "",
- "description-mod": "",
- "label-clamped": "",
- "label-mod": ""
+ "description-clamped": "Feldwerte verwenden, auf max. und min. begrenzt",
+ "description-mod": "Feldwerte verwenden, Modulo von max.",
+ "label-clamped": "Begrenzt",
+ "label-mod": "Modulo"
}
},
"scale-dimension-editor": {
@@ -6571,10 +6576,10 @@
"noOptionsMessage-no-fields-found": ""
},
"text-dimension-editor": {
- "description-field": "",
- "description-fixed": "",
+ "description-field": "Feldwert anzeigen",
+ "description-fixed": "Fester Wert",
"label-field": "Feld",
- "label-fixed": "",
+ "label-fixed": "Fest",
"label-source": "Quelle",
"label-template": "Vorlage",
"label-value": "Wert"
@@ -6588,16 +6593,16 @@
"description-percentage-means-thresholds-relative": "Prozent bedeutet Schwellenwerte relativ zu min. und max.",
"modes": {
"description": {
- "threshold-based-percent-between-minmax": "",
- "thresholds-based-absolute-values": ""
+ "threshold-based-percent-between-minmax": "Wählen Sie den Schwellenwert basierend auf dem Prozentsatz zwischen min/max",
+ "thresholds-based-absolute-values": "Wählen Sie Schwellenwerte basierend auf den absoluten Werten"
},
"label": {
- "absolute": "",
- "percentage": ""
+ "absolute": "Absolut",
+ "percentage": "Prozentsatz"
}
},
"thresholds-mode": "Schwellenwertmodus",
- "value-base": ""
+ "value-base": "Base"
},
"urlpicker-tab": {
"label-preview": "Vorschau"
@@ -7398,23 +7403,23 @@
"title": "Seite verlassen?"
},
"gauge": {
- "category-gauge": "",
- "description-min-height": "",
- "description-min-width": "",
- "description-neutral": "",
- "description-show-threshold-labels": "",
- "description-show-threshold-markers": "",
+ "category-gauge": "Anzeige",
+ "description-min-height": "Minimale Zeilenhöhe (horizontale Ausrichtung)",
+ "description-min-width": "Minimale Spaltenbreite (vertikale Ausrichtung)",
+ "description-neutral": "Leer lassen, um Min. als neutralen Punkt zu verwenden",
+ "description-show-threshold-labels": "Schwellenwerte um den Anzeigebalken rendern",
+ "description-show-threshold-markers": "Rendert die Schwellenwerte als äußeren Balken",
"gauge-size-options": {
- "label-auto": "",
- "label-manual": ""
+ "label-auto": "Auto",
+ "label-manual": "Manuell"
},
- "name-gauge-size": "",
- "name-min-height": "",
- "name-min-width": "",
- "name-neutral": "",
- "name-show-threshold-labels": "",
- "name-show-threshold-markers": "",
- "placeholder-neutral": ""
+ "name-gauge-size": "Anzeigegröße",
+ "name-min-height": "Min. Höhe",
+ "name-min-width": "Min. Breite",
+ "name-neutral": "Neutral",
+ "name-show-threshold-labels": "Schwellenwert-Labels anzeigen",
+ "name-show-threshold-markers": "Schwellenwert-Markierungen anzeigen",
+ "placeholder-neutral": "auto"
},
"gen-ai": {
"apply-suggestion": "Anwenden",
@@ -7748,85 +7753,85 @@
},
"builder": {
"axis": {
- "category-axis": "",
- "color-label": "",
+ "category-axis": "Achse",
+ "color-label": "Farbe",
"color-options": {
- "label-series": "",
- "label-text": ""
+ "label-series": "Reihe",
+ "label-text": "Text"
},
"grid-line-options": {
- "label-auto": "",
- "label-off": "",
- "label-on": ""
+ "label-auto": "Auto",
+ "label-off": "Ausgeschaltet",
+ "label-on": "Eingeschaltet"
},
- "name-centered-zero": "",
- "name-grid-lines": "",
- "name-label": "",
- "name-placement": "",
- "name-scale": "",
- "name-show-border": "",
- "name-soft-max": "",
- "name-soft-min": "",
- "name-width": "",
- "placeholder-label": "",
- "placeholder-soft-max": "",
- "placeholder-soft-min": "",
- "placeholder-width": "",
+ "name-centered-zero": "Zentrierte Null",
+ "name-grid-lines": "Gitterlinien anzeigen",
+ "name-label": "Label",
+ "name-placement": "Platzierung",
+ "name-scale": "Skalieren",
+ "name-show-border": "Rand anzeigen",
+ "name-soft-max": "Soft max.",
+ "name-soft-min": "Soft min.",
+ "name-width": "Breite",
+ "placeholder-label": "Optionaler Text",
+ "placeholder-soft-max": "Siehe: Standardoptionen > Max.",
+ "placeholder-soft-min": "Siehe: Standardoptionen > Min.",
+ "placeholder-width": "Auto",
"scale-distribution-editor": {
"distribution-options": {
- "label-linear": "",
- "label-log": "",
- "label-symlog": ""
+ "label-linear": "Linear",
+ "label-log": "Logarithmisch",
+ "label-symlog": "Symlog"
}
}
},
"legend": {
- "category": "",
- "description-values": "",
+ "category": "Legende",
+ "description-values": "Wählen Sie Werte oder Berechnungen, die in der Legende angezeigt werden sollen",
"mode-options": {
- "label-list": "",
- "label-table": ""
+ "label-list": "Liste",
+ "label-table": "Tabelle"
},
- "name-mode": "",
- "name-placement": "",
- "name-values": "",
- "name-visibility": "",
- "name-width": "",
+ "name-mode": "Modus",
+ "name-placement": "Platzierung",
+ "name-values": "Werte",
+ "name-visibility": "Sichtbarkeit",
+ "name-width": "Breite",
"placement-options": {
- "label-bottom": "",
- "label-right": ""
+ "label-bottom": "Unten",
+ "label-right": "Rechts"
}
},
"stacking": {
- "name-stack-series": ""
+ "name-stack-series": "Reihen stapeln"
},
"text": {
- "category-text-size": "",
- "name-percent-change": "",
- "name-title": "",
- "name-value": "",
- "placeholder-percent-change": "",
- "placeholder-title": "",
- "placeholder-value": ""
+ "category-text-size": "Textgröße",
+ "name-percent-change": "Prozentuale Veränderung",
+ "name-title": "Titel",
+ "name-value": "Wert",
+ "placeholder-percent-change": "Auto",
+ "placeholder-title": "Auto",
+ "placeholder-value": "Auto"
},
"tooltip": {
- "category": "",
- "description-hover-proximity": "",
+ "category": "Tooltip",
+ "description-hover-proximity": "Wie nah der Cursor an einem Punkt sein muss, um den Tooltip auszulösen, in Pixeln",
"modeOptions": {
- "label-all": "",
- "label-hidden": "",
- "label-single": ""
+ "label-all": "Alles",
+ "label-hidden": "Ausgeblendet",
+ "label-single": "Einzeln"
},
- "name-hide-zeros": "",
- "name-hover-proximity": "",
- "name-max-height": "",
- "name-max-width": "",
- "name-tooltip-mode": "",
- "name-values-sort-order": "",
+ "name-hide-zeros": "Nullen ausblenden",
+ "name-hover-proximity": "Hover-Nähe",
+ "name-max-height": "Max. Höhe",
+ "name-max-width": "Max. Breite",
+ "name-tooltip-mode": "Tooltip-Modus",
+ "name-values-sort-order": "Sortierreihenfolge der Werte",
"sortOptions": {
- "label-ascending": "",
- "label-descending": "",
- "label-none": ""
+ "label-ascending": "Aufsteigend",
+ "label-descending": "Absteigend",
+ "label-none": "Keine"
}
}
},
@@ -7988,19 +7993,19 @@
"tooltip-expand-all": "Alle Zeilen erweitern"
},
"matchers-ui": {
- "description-field-name-by-regex-matcher": "",
- "description-fields-by-query": "",
- "description-fields-with-name": "",
- "description-fields-with-type": "",
- "description-fields-with-value": "",
+ "description-field-name-by-regex-matcher": "Eigenschaften für Felder festlegen, deren Namen einem Regex entsprechen",
+ "description-fields-by-query": "Eigenschaften für Felder von einer bestimmten Abfrage festlegen",
+ "description-fields-with-name": "Eigenschaften für ein bestimmtes Feld festlegen",
+ "description-fields-with-type": "Eigenschaften für Felder eines bestimmten Typs festlegen (Zahl, String, Boolescher Wert)",
+ "description-fields-with-value": "Eigenschaften für Felder mit Reduzierbedingung festlegen",
"field-name-picker": {
- "placeholder": ""
+ "placeholder": "Feld auswählen"
},
- "name-field-name-by-regex-matcher": "",
- "name-fields-by-query": "",
- "name-fields-with-name": "",
- "name-fields-with-type": "",
- "name-fields-with-value": ""
+ "name-field-name-by-regex-matcher": "Felder mit Namen, die Regex entsprechen",
+ "name-fields-by-query": "Von der Abfrage zurückgegebene Felder",
+ "name-fields-with-name": "Felder mit Name",
+ "name-fields-with-type": "Felder mit Typ",
+ "name-fields-with-value": "Felder mit Werten"
},
"menu-item": {
"keyboard-shortcut-label": "Tastenkombination"
@@ -8124,55 +8129,55 @@
"config": {
"get-graph-field-options": {
"axis-placement": {
- "description-auto": "",
- "label-auto": "",
- "label-hidden": "",
- "label-left": "",
- "label-right": ""
+ "description-auto": "Erstes Feld links, alles andere rechts",
+ "label-auto": "Auto",
+ "label-hidden": "Ausgeblendet",
+ "label-left": "Links",
+ "label-right": "Rechts"
},
"bar-alignment": {
- "description-after": "",
- "description-before": "",
- "description-center": ""
+ "description-after": "Danach",
+ "description-before": "Vorher",
+ "description-center": "Mitte"
},
"draw-style": {
- "label-bars": "",
- "label-lines": "",
- "label-points": ""
+ "label-bars": "Balken",
+ "label-lines": "Linien",
+ "label-points": "Punkte"
},
"fill-gradient": {
- "description-hue": "",
- "description-opacity": "",
- "description-scheme": "",
- "label-hue": "",
- "label-none": "",
- "label-opacity": "",
- "label-scheme": ""
+ "description-hue": "Kleiner Farbverlauf",
+ "description-opacity": "Fülldeckkraftverlauf aktivieren",
+ "description-scheme": "Farbschema zur Festlegung des Farbverlaufs verwenden",
+ "label-hue": "Farbton",
+ "label-none": "Keine",
+ "label-opacity": "Deckkraft",
+ "label-scheme": "Schema"
},
"line-interpolation": {
- "description-linear": "",
- "description-smooth": "",
- "description-step-after": "",
- "description-step-before": ""
+ "description-linear": "Linear",
+ "description-smooth": "Glatt",
+ "description-step-after": "Schritt danach",
+ "description-step-before": "Schritt davor"
},
"show-points": {
- "description-auto": "",
- "label-always": "",
- "label-auto": "",
- "label-never": ""
+ "description-auto": "Punkte anzeigen, wenn die Dichte niedrig ist",
+ "label-always": "Immer",
+ "label-auto": "Auto",
+ "label-never": "Nie"
},
"stacking": {
- "label-100": "",
- "label-normal": "",
- "label-off": ""
+ "label-100": "100 %",
+ "label-normal": "Normal",
+ "label-off": "Ausgeschaltet"
},
"thresholds-display-mode": {
- "label-dashed-lines": "",
- "label-filled-regions": "",
- "label-filled-regions-and-dashed-lines": "",
- "label-filled-regions-and-lines": "",
- "label-lines": "",
- "label-off": ""
+ "label-dashed-lines": "Als Linien (gestrichelt)",
+ "label-filled-regions": "Als gefüllte Bereiche",
+ "label-filled-regions-and-dashed-lines": "Als gefüllte Bereiche und Linien (gestrichelt)",
+ "label-filled-regions-and-lines": "Als gefüllte Bereiche und Linien",
+ "label-lines": "Als Linien",
+ "label-off": "Ausgeschaltet"
}
}
}
@@ -8219,78 +8224,78 @@
},
"heatmap": {
"calculate-from-data-options": {
- "label-no": "",
- "label-yes": ""
- },
- "category-cell-display": "",
- "category-colors": "",
- "category-exemplars": "",
- "category-heatmap": "",
- "category-legend": "",
- "category-tooltip": "",
- "category-y-axis": "",
+ "label-no": "Nein",
+ "label-yes": "Ja"
+ },
+ "category-cell-display": "Zellenanzeige",
+ "category-colors": "Farben",
+ "category-exemplars": "Exemplare",
+ "category-heatmap": "Heatmap",
+ "category-legend": "Legende",
+ "category-tooltip": "Tooltip",
+ "category-y-axis": "Y-Achse",
"mode-options": {
- "label-opacity": "",
- "label-scheme": ""
- },
- "name-axis-label": "",
- "name-axis-width": "",
- "name-calculate-from-data": "",
- "name-cell-gap": "",
- "name-color": "",
- "name-decimals": "",
- "name-end-color-at-value": "",
- "name-exponent": "",
- "name-hide-cells-gt": "",
- "name-hide-cells-lt": "",
- "name-max-height": "",
- "name-max-value": "",
- "name-max-width": "",
- "name-min-value": "",
- "name-mode": "",
- "name-placement": "",
- "name-reverse": "",
- "name-scale": "",
- "name-scheme": "",
- "name-show-color-scale": "",
- "name-show-histogram": "",
- "name-show-legend": "",
- "name-start-color-from-value": "",
- "name-steps": "",
- "name-tick-alignment": "",
- "name-tooltip-mode": "",
- "name-unit": "",
- "name-value-name": "",
- "name-y-axis-scale": "",
- "placeholder-axis-label": "",
- "placeholder-axis-width": "",
- "placeholder-decimals": "",
- "placeholder-end-color-at-value": "",
- "placeholder-hide-cells-gt": "",
- "placeholder-hide-cells-lt": "",
- "placeholder-max-value": "",
- "placeholder-min-value": "",
- "placeholder-start-color-from-value": "",
- "placeholder-value-name": "",
+ "label-opacity": "Deckkraft",
+ "label-scheme": "Schema"
+ },
+ "name-axis-label": "Achsenlabel",
+ "name-axis-width": "Achsenbreite",
+ "name-calculate-from-data": "Aus Daten berechnen",
+ "name-cell-gap": "Zellenlücke",
+ "name-color": "Farbe",
+ "name-decimals": "Dezimalstellen",
+ "name-end-color-at-value": "Farbskala bei folgendem Wert beenden",
+ "name-exponent": "Exponent",
+ "name-hide-cells-gt": "Ausblenden von Zellen mit Werten >=",
+ "name-hide-cells-lt": "Ausblenden von Zellen mit Werten <=",
+ "name-max-height": "Max. Höhe",
+ "name-max-value": "Max. Wert",
+ "name-max-width": "Max. Breite",
+ "name-min-value": "Min. Wert",
+ "name-mode": "Modus",
+ "name-placement": "Platzierung",
+ "name-reverse": "Rückwärts",
+ "name-scale": "Skalieren",
+ "name-scheme": "Schema",
+ "name-show-color-scale": "Farbskala anzeigen",
+ "name-show-histogram": "Histogramm anzeigen (Y-Achse)",
+ "name-show-legend": "Legende anzeigen",
+ "name-start-color-from-value": "Farbskala ab folgendem Wert beginnen",
+ "name-steps": "Schritte",
+ "name-tick-alignment": "Teilstrich-Ausrichtung",
+ "name-tooltip-mode": "Tooltip-Modus",
+ "name-unit": "Einheit",
+ "name-value-name": "Wertname",
+ "name-y-axis-scale": "Y-Achsenskala",
+ "placeholder-axis-label": "Auto",
+ "placeholder-axis-width": "Auto",
+ "placeholder-decimals": "Auto",
+ "placeholder-end-color-at-value": "Auto (max.)",
+ "placeholder-hide-cells-gt": "Keine",
+ "placeholder-hide-cells-lt": "Keine",
+ "placeholder-max-value": "Auto",
+ "placeholder-min-value": "Auto",
+ "placeholder-start-color-from-value": "Auto (min.)",
+ "placeholder-value-name": "Wert",
"placement-options": {
- "label-hidden": "",
- "label-left": "",
- "label-right": ""
+ "label-hidden": "Ausgeblendet",
+ "label-left": "Links",
+ "label-right": "Rechts"
},
"scale-options": {
- "label-exponential": "",
- "label-linear": ""
+ "label-exponential": "Exponentiell",
+ "label-linear": "Linear"
},
"tick-alignment-options": {
- "label-auto": "",
- "label-bottom": "",
- "label-middle": "",
- "label-top": ""
+ "label-auto": "Auto",
+ "label-bottom": "Unten (GE)",
+ "label-middle": "Mitte",
+ "label-top": "Oben (LE)"
},
"tooltip-mode-options": {
- "label-all": "",
- "label-hidden": "",
- "label-single": ""
+ "label-all": "Alles",
+ "label-hidden": "Ausgeblendet",
+ "label-single": "Einzeln"
}
},
"help-modal": {
@@ -8350,14 +8355,14 @@
"troubleshooting-help": "Um Hilfe bei der Fehlerbehebung anzufordern, senden Sie bitte einen Screenshot dieses Panels an den technischen Support von Grafana Labs. Der Snapshot enthält Abfrageantwortdaten und Panel-Einstellungen."
},
"histogram": {
- "category-histogram": "",
+ "category-histogram": "Histogramm",
"histogram-panel": {
"no-histogram-found-in-response": "Kein Histogramm in der Antwort gefunden"
},
- "name-fill-opacity": "",
- "name-gradient-mode": "",
- "name-line-width": "",
- "name-stacking": ""
+ "name-fill-opacity": "Fülldeckkraft",
+ "name-gradient-mode": "Farbverlaufsmodus",
+ "name-line-width": "Linienbreite",
+ "name-stacking": "Stapeln"
},
"inspector": {
"inspect-data-tab": {
@@ -8738,16 +8743,16 @@
}
},
"logs": {
- "category-logs": "",
+ "category-logs": "Logs",
"deduplication-options": {
- "label-exact": "",
- "label-none": "",
- "label-numbers": "",
- "label-signature": ""
- },
- "description-enable-infinite-scrolling": "",
- "description-enable-syntax-highlighting": "",
- "description-show-controls": "",
+ "label-exact": "Exakt",
+ "label-none": "Keine",
+ "label-numbers": "Zahlen",
+ "label-signature": "Signatur"
+ },
+ "description-enable-infinite-scrolling": "Experimentell. Fordern Sie weitere Ergebnisse an, indem Sie zum Ende der Logs-Liste scrollen.",
+ "description-enable-syntax-highlighting": "Verwenden Sie eine vordefinierte Syntax-Farbgrammatik, um relevante Teile der Log-Linien hervorzuheben",
+ "description-show-controls": "Anzeige von Steuerelementen für den Sprung zur letzten oder ersten Log-Linie und Filtern nach Log-Ebene",
"fields": {
"type": {
"loki": {
@@ -8761,8 +8766,8 @@
}
},
"font-size-options": {
- "label-default": "",
- "label-small": ""
+ "label-default": "Standard",
+ "label-small": "Klein"
},
"get-dataframe-fields": {
"vars": {
@@ -8809,40 +8814,40 @@
"tooltip-error": "Fehler: {{errorMessage}}"
},
"log-line-details": {
- "clear-search": "",
- "close": "",
- "copy-shortlink": "",
- "copy-to-clipboard": "",
+ "clear-search": "Löschen",
+ "close": "Logdetails schließen",
+ "copy-shortlink": "Shortlink kopieren",
+ "copy-to-clipboard": "In die Zwischenablage kopieren",
"displayed-fields-section": "",
"fields": {
- "adhoc-statistics": "",
- "copy-value-to-clipboard": "",
- "filter-out": "",
- "filter-out-query": "",
+ "adhoc-statistics": "Ad-hoc-Statistiken",
+ "copy-value-to-clipboard": "Wert in die Zwischenablage kopieren",
+ "filter-out": "Wert herausfiltern",
+ "filter-out-query": "Wert in Abfrage {{query}} herausfiltern",
"toggle-field-button": {
- "field-instead-message": "",
- "hide-this-field": ""
+ "field-instead-message": "Dieses Feld anstelle der Nachricht anzeigen",
+ "hide-this-field": "Dieses Feld ausblenden"
}
},
- "fields-section": "",
- "hide-log-line": "",
+ "fields-section": "Felder",
+ "hide-log-line": "Log-Linie ausblenden",
"inline-mode": "",
- "links-section": "",
+ "links-section": "Links",
"log-line-field": "",
- "log-line-section": "",
+ "log-line-section": "Log-Linie",
"move-displayed-field-down": "",
"move-displayed-field-up": "",
- "no-details": "",
- "pin-line": "",
+ "no-details": "Keine anzuzeigenden Felder.",
+ "pin-line": "Log anheften",
"remove-displayed-field": "",
"search": {
- "no-results": ""
+ "no-results": "Keine anzuzeigenden Ergebnisse."
},
- "search-placeholder": "",
- "show-context": "",
- "show-log-line": "",
+ "search-placeholder": "Feldnamen und Werte durchsuchen",
+ "show-context": "Kontext anzeigen",
+ "show-log-line": "Log-Linie anzeigen",
"sidebar-mode": "",
- "unpin-line": ""
+ "unpin-line": "Log nicht mehr anheften"
},
"log-line-menu": {
"copy-link": "Link zur Protokollzeile kopieren",
@@ -8855,12 +8860,12 @@
"unpin-from-outline": "Protokoll nicht mehr anheften"
},
"log-list-search": {
- "close": "",
- "filter": "",
- "info": "",
- "input-placeholder": "",
- "next": "",
- "prev": ""
+ "close": "Suche schließen",
+ "filter": "Entsprechende Logs filtern",
+ "info": "Clientseitige Suche nach Strings innerhalb der angezeigten Logs. Nicht zu verwechseln mit Abfragefiltern. Verwenden Sie diese Komponente, um bestimmte Strings in Ihren Log-Ergebnissen zu suchen.",
+ "input-placeholder": "In Logs suchen",
+ "next": "Nächstes Ergebnis",
+ "prev": "Vorheriges Ergebnis"
},
"log-row-context-modal": {
"error-loading-log-more-logs": "Fehler beim Laden weiterer Logs.",
@@ -8915,7 +8920,7 @@
"escape-newlines": "Falsch dargestellte Zeilenumbrüche und Tab-Sequenzen in Log-Zeilen korrigieren",
"font-size-default": "Kleine Schriftgröße verwenden",
"font-size-small": "Standardschriftgröße verwenden",
- "hide-search": "",
+ "hide-search": "Suche schließen",
"hide-timestamps": "Zeitstempel ausblenden",
"hide-unique-labels": "Eindeutige Labels ausblenden",
"newest-first": "Sortiert nach neuesten Logs zuerst – klicken Sie, um die ältesten zuerst anzuzeigen",
@@ -8924,7 +8929,7 @@
"remove-escaping": "Escaping entfernen",
"scroll-bottom": "Nach unten scrollen",
"scroll-top": "Nach oben scrollen",
- "show-search": "",
+ "show-search": "Ergebnis der Suche in Logs",
"show-timestamps": "Zeitstempel anzeigen",
"show-unique-labels": "Eindeutige Labels anzeigen",
"unwrap-lines": "Zeilenumbruch aufheben",
@@ -8942,26 +8947,26 @@
"common-labels": "Allgemeine Labels:"
}
},
- "name-common-labels": "",
- "name-deduplication": "",
+ "name-common-labels": "Allgemeine Labels",
+ "name-deduplication": "Deduplizierung",
"name-details-mode": "",
"name-details-options": {
"label-inline": "",
"label-sidebar": ""
},
- "name-enable-infinite-scrolling": "",
- "name-enable-log-details": "",
- "name-enable-syntax-highlighting": "",
- "name-font-size": "",
- "name-order": "",
- "name-prettify-json": "",
- "name-show-controls": "",
- "name-time": "",
- "name-unique-labels": "",
- "name-wrap-lines": "",
+ "name-enable-infinite-scrolling": "Unbegrenztes Scrollen aktivieren",
+ "name-enable-log-details": "Log-Details aktivieren",
+ "name-enable-syntax-highlighting": "Syntaxhervorhebung aktivieren",
+ "name-font-size": "Schriftgröße",
+ "name-order": "Reihenfolge",
+ "name-prettify-json": "JSON formatieren",
+ "name-show-controls": "Steuerelemente anzeigen",
+ "name-time": "Zeit",
+ "name-unique-labels": "Eindeutige Labels",
+ "name-wrap-lines": "Zeilen umbrechen",
"order-options": {
- "label-newest-first": "",
- "label-oldest-first": ""
+ "label-newest-first": "Neueste zuerst",
+ "label-oldest-first": "Älteste zuerst"
},
"out-of-range-message": {
"end-of-the-selected-time-range": "Ende des ausgewählten Zeitbereichs."
@@ -8975,7 +8980,7 @@
"un-themed-log-details": {
"aria-label-data-links": "Datenlinks",
"aria-label-fields": "Felder",
- "aria-label-line": "",
+ "aria-label-line": "Log-Linie",
"aria-label-log-level": "Log-Stufe",
"aria-label-no-details": "Keine Angaben"
},
@@ -8996,27 +9001,27 @@
}
},
"logs-new": {
- "category-logs": "",
+ "category-logs": "Logs",
"deduplication-options": {
- "label-exact": "",
- "label-none": "",
- "label-numbers": "",
- "label-signature": ""
- },
- "description-infinite-scrolling": "",
- "description-show-controls": "",
- "description-syntax-highlighting": "",
- "name-deduplication": "",
- "name-enable-log-details": "",
- "name-infinite-scrolling": "",
- "name-order": "",
- "name-show-controls": "",
- "name-syntax-highlighting": "",
- "name-time": "",
- "name-wrap-lines": "",
+ "label-exact": "Exakt",
+ "label-none": "Keine",
+ "label-numbers": "Zahlen",
+ "label-signature": "Signatur"
+ },
+ "description-infinite-scrolling": "Experimentell. Fordern Sie weitere Ergebnisse an, indem Sie zum Ende der Logs-Liste scrollen.",
+ "description-show-controls": "Anzeige von Steuerelementen für den Sprung zur letzten oder ersten Log-Linie und Filtern nach Log-Ebene",
+ "description-syntax-highlighting": "Verwenden Sie eine vordefinierte Syntax-Farbgrammatik, um relevante Teile der Log-Linien hervorzuheben",
+ "name-deduplication": "Deduplizierung",
+ "name-enable-log-details": "Log-Details aktivieren",
+ "name-infinite-scrolling": "Unbegrenztes Scrollen aktivieren",
+ "name-order": "Reihenfolge",
+ "name-show-controls": "Steuerelemente anzeigen",
+ "name-syntax-highlighting": "Syntaxhervorhebung aktivieren",
+ "name-time": "Zeit",
+ "name-wrap-lines": "Zeilen umbrechen",
"order-options": {
- "label-newest-first": "",
- "label-oldest-first": ""
+ "label-newest-first": "Neueste zuerst",
+ "label-oldest-first": "Älteste zuerst"
}
},
"manage-dashbaords": {
@@ -9714,12 +9719,12 @@
"rss-button": "Das Neueste aus dem Blog"
},
"news": {
- "category-news": "",
- "description-show-image": "",
- "description-url": "",
+ "category-news": "Nachrichten",
+ "description-show-image": "Steuert, ob das Social-Media-Bild (og:image) des Nachrichtenelements über dem Textinhalt angezeigt wird",
+ "description-url": "Unterstützt RSS- und Atom-Feeds",
"link-title": "Zum Grafana-Labs-Blog",
- "name-show-image": "",
- "name-url": "",
+ "name-show-image": "Bild anzeigen",
+ "name-url": "URL",
"news-panel": {
"body-error-loading-rss-feed": "Achten Sie darauf, dass die Feed-URL korrekt ist und CORS auf dem Server richtig konfiguriert ist. Weitere Informationen finden Sie in der <2>Dokumentation zum Nachrichten-Panel.2>",
"loading": "Wird geladen ...",
@@ -9728,27 +9733,27 @@
"title": "Das Neueste aus dem Blog"
},
"node-graph": {
- "category-edges": "",
- "category-node-graph": "",
- "category-nodes": "",
+ "category-edges": "Ränder",
+ "category-node-graph": "Knotendiagramm",
+ "category-nodes": "Knoten",
"layout-algorithm-options": {
- "description-force": "",
- "description-grid": "",
- "description-layered": "",
- "label-force": "",
- "label-grid": "",
- "label-layered": ""
- },
- "name-arc-sections": "",
- "name-layout-algorithm": "",
- "name-main-stat-unit": "",
- "name-secondary-stat-unit": "",
- "name-zoom-mode": "",
+ "description-force": "Kraftgesteuertes Layout verwenden",
+ "description-grid": "Rasterlayout verwenden",
+ "description-layered": "Geschichtetes Layout verwenden",
+ "label-force": "Kraft",
+ "label-grid": "Raster",
+ "label-layered": "Geschichtet"
+ },
+ "name-arc-sections": "Bogenabschnitte",
+ "name-layout-algorithm": "Layout-Algorithmus",
+ "name-main-stat-unit": "Einheit für Hauptstatistik",
+ "name-secondary-stat-unit": "Einheit für Sekundärstatistik",
+ "name-zoom-mode": "Zoom-Modus",
"zoom-mode-options": {
- "description-cooperative": "",
- "description-greedy": "",
- "label-cooperative": "",
- "label-greedy": ""
+ "description-cooperative": "Ermöglicht Ihnen das normale Scrollen der Seite",
+ "description-greedy": "Reagiert auf alle Zoom-Gesten",
+ "label-cooperative": "Kooperativ",
+ "label-greedy": "Greedy"
}
},
"nodeGraph": {
@@ -9827,40 +9832,40 @@
},
"registry": {
"get-all-option-editors": {
- "description-time-zone": "",
- "name-time-zone": ""
+ "description-time-zone": "Auswahl der Zeitzone",
+ "name-time-zone": "Zeitzone"
},
"standard-field-condigs": {
- "category-data-links": ""
+ "category-data-links": "Datenlinks und Aktionen"
},
"standard-field-configs": {
- "category": "",
- "category-thresholds": "",
- "category-value-mappings": "",
- "description-display-name": "",
- "description-field-min-max": "",
- "description-max": "",
- "description-min": "",
- "description-no-value": "",
- "description-value-mappings": "",
- "name-actions": "",
- "name-ad-hoc": "",
- "name-color-scheme": "",
- "name-data-links": "",
- "name-decimals": "",
- "name-display-name": "",
- "name-field-min-max": "",
- "name-max": "",
- "name-min": "",
- "name-no-value": "",
- "name-thresholds": "",
- "name-unit": "",
- "name-value-mappings": "",
- "placeholder-decimals": "",
- "placeholder-display-name": "",
- "placeholder-max": "",
- "placeholder-min": "",
- "placeholder-unit": ""
+ "category": "Standardoptionen",
+ "category-thresholds": "Schwellenwerte",
+ "category-value-mappings": "Wertezuordnungen",
+ "description-display-name": "Feld- oder Reihenname ändern",
+ "description-field-min-max": "Min. Max. pro Feld berechnen",
+ "description-max": "Leer lassen, um anhand aller Werte zu berechnen",
+ "description-min": "Leer lassen, um anhand aller Werte zu berechnen",
+ "description-no-value": "Was angezeigt wird, wenn kein Wert vorhanden ist",
+ "description-value-mappings": "Ändern Sie den Anzeigetext je nach Eingabewert",
+ "name-actions": "Aktionen",
+ "name-ad-hoc": "Ad-hoc filterbar",
+ "name-color-scheme": "Farbschema",
+ "name-data-links": "Datenlinks",
+ "name-decimals": "Dezimalstellen",
+ "name-display-name": "Anzeigename",
+ "name-field-min-max": "Feld Min./Max.",
+ "name-max": "Max.",
+ "name-min": "Min.",
+ "name-no-value": "Kein Wert",
+ "name-thresholds": "Schwellenwerte",
+ "name-unit": "Einheit",
+ "name-value-mappings": "Wertezuordnungen",
+ "placeholder-decimals": "auto",
+ "placeholder-display-name": "keine",
+ "placeholder-max": "auto",
+ "placeholder-min": "auto",
+ "placeholder-unit": "keine"
}
},
"units": {
@@ -9969,13 +9974,13 @@
},
"panel-data-error-view": {
"missing-value": {
- "number": "",
- "string": "",
- "time": "",
- "unknown": ""
+ "number": "In den Daten fehlt ein Zahlenfeld",
+ "string": "In den Daten fehlt ein String-Feld",
+ "time": "In den Daten fehlt ein Zeitfeld",
+ "unknown": "Daten können nicht visualisiert werden"
},
"no-value": {
- "default": ""
+ "default": "Keine Daten"
},
"open-visualization-suggestions": "Visualisierungsvorschläge öffnen",
"switch-to-table": "Zur Tabelle wechseln"
@@ -10015,25 +10020,25 @@
"select-placeholder": "Nach Typ filtern"
},
"piechart": {
- "category-legend": "",
- "category-pie-chart": "",
- "description-labels": "",
- "description-pie-chart-type": "",
+ "category-legend": "Legende",
+ "category-pie-chart": "Kreisdiagramm",
+ "description-labels": "Wählen Sie die Labels aus, die im Kreisdiagramm angezeigt werden sollen",
+ "description-pie-chart-type": "Wie das Kreisdiagramm gerendert werden soll",
"labels-options": {
- "label-name": "",
- "label-percent": "",
- "label-value": ""
+ "label-name": "Name",
+ "label-percent": "Prozent",
+ "label-value": "Wert"
},
"legend-values-options": {
- "label-percent": "",
- "label-value": ""
+ "label-percent": "Prozent",
+ "label-value": "Wert"
},
- "name-labels": "",
- "name-legend-values": "",
- "name-pie-chart-type": "",
+ "name-labels": "Labels",
+ "name-legend-values": "Legendenwerte",
+ "name-pie-chart-type": "Kreisdiagrammtyp",
"pie-chart-type-options": {
- "label-donut": "",
- "label-pie": ""
+ "label-donut": "Donut",
+ "label-pie": "Kreis"
}
},
"playlist": {
@@ -10271,7 +10276,7 @@
},
"install-controls-warning": {
"body-not-published": "Dieses Plugin wird nicht bei <2>grafana.com/plugins2> veröffentlicht und kann nicht über den Katalog verwaltet werden.",
- "enterprise-plugin-info": "",
+ "enterprise-plugin-info": "Dieses Plugin ist nur in Grafana Cloud und Grafana Enterprise verfügbar.",
"learn-more": "Mehr erfahren",
"no-valid-grafana-enterprise-license-detected": "Keine gültige Lizenz für Grafana Enterprise erkannt.",
"title-dev-alert": "Dies ist ein Development-Build des Plugins und kann nicht deinstalliert werden.",
@@ -10429,13 +10434,13 @@
},
"provisioned-resource-form": {
"save-or-delete-resource-shared-fields": {
- "comment-placeholder-describe-changes-optional": "",
- "description-branch-name-in-git-hub": "",
+ "comment-placeholder-describe-changes-optional": "Fügen Sie eine Notiz hinzu, um Ihre Änderungen zu beschreiben (optional)",
+ "description-branch-name-in-git-hub": "Branch-Name in GitHub",
"description-inside-repository": "",
- "label-branch": "",
- "label-comment": "",
- "label-path": "",
- "label-workflow": ""
+ "label-branch": "Branch",
+ "label-comment": "Kommentar",
+ "label-path": "Pfad",
+ "label-workflow": "Workflow"
}
},
"provisioned-resource-preview-banner": {
@@ -11715,112 +11720,112 @@
},
"stat": {
"add-orientation-option": {
- "description-orientation": "",
- "name-orientation": "",
+ "description-orientation": "Layout-Ausrichtung",
+ "name-orientation": "Ausrichtung",
"orientation-options": {
- "label-auto": "",
- "label-horizontal": "",
- "label-vertical": ""
+ "label-auto": "Auto",
+ "label-horizontal": "Horizontal",
+ "label-vertical": "Vertikal"
}
},
"add-standard-data-reduce-options": {
- "category-value-options": "",
- "description-calculation": "",
- "description-fields": "",
- "description-limit": "",
- "description-show": "",
+ "category-value-options": "Wertoptionen",
+ "description-calculation": "Wählen Sie eine Reduktionsfunktion/Berechnung",
+ "description-fields": "Wählen Sie die Felder aus, die im Panel enthalten sein sollen",
+ "description-limit": "Maximale Anzahl der anzuzeigenden Zeilen",
+ "description-show": "Berechnen Sie einen einzelnen Wert pro Spalte oder Reihe oder zeigen Sie jede Zeile an",
"fields-options": {
- "label-all-fields": "",
- "label-numeric-fields": ""
+ "label-all-fields": "Alle Felder",
+ "label-numeric-fields": "Numerische Felder"
},
- "name-calculation": "",
- "name-fields": "",
- "name-limit": "",
- "name-show": "",
+ "name-calculation": "Berechnung",
+ "name-fields": "Felder",
+ "name-limit": "Grenze",
+ "name-show": "Anzeigen",
"show-options": {
- "label-all-values": "",
- "label-calculate": ""
+ "label-all-values": "Alle Werte",
+ "label-calculate": "Berechnen"
}
},
- "category-stat-styles": "",
+ "category-stat-styles": "Statistikstile",
"color-mode-options": {
- "label-background-gradient": "",
- "label-background-solid": "",
- "label-none": "",
- "label-value": ""
+ "label-background-gradient": "Hintergrundfabverlauf",
+ "label-background-solid": "Hintergrund einfarbig",
+ "label-none": "Keine",
+ "label-value": "Wert"
},
- "description-graph-mode": "",
- "description-text-mode": "",
+ "description-graph-mode": "Modus für Statistik-Panel-Diagramm/Sparkline",
+ "description-text-mode": "Legen Sie fest, ob Name und Wert angezeigt werden oder nur der Name",
"graph-mode": {
"options": {
- "label-area": "",
- "label-none": ""
+ "label-area": "Bereich",
+ "label-none": "Keine"
}
},
"name-color-modcolor-mode-options": {
- "label": ""
- },
- "name-graph-mode": "",
- "name-show-percent-change": "",
- "name-text-alignment": "",
- "name-text-mode": "",
- "name-wide-layout": "",
- "percent-change-color-mode": "",
+ "label": "Farbmodus"
+ },
+ "name-graph-mode": "Diagrammmodus",
+ "name-show-percent-change": "Prozentuale Veränderung anzeigen",
+ "name-text-alignment": "Textausrichtung",
+ "name-text-mode": "Textmodus",
+ "name-wide-layout": "Breites Layout",
+ "percent-change-color-mode": "Farbmodus für prozentuale Veränderung",
"percent-change-color-mode-options": {
- "label-inverted": "",
- "label-same-as-value": "",
- "label-standard": ""
+ "label-inverted": "Invertiert",
+ "label-same-as-value": "Identisch mit Wert",
+ "label-standard": "Standard"
},
"text-alignment-options": {
- "label-auto": "",
- "label-center": ""
+ "label-auto": "Auto",
+ "label-center": "Mitte"
},
"text-mode-options": {
- "label-auto": "",
- "label-name": "",
- "label-none": "",
- "label-value": "",
- "label-value-and-name": ""
+ "label-auto": "Auto",
+ "label-name": "Name",
+ "label-none": "Keine",
+ "label-value": "Wert",
+ "label-value-and-name": "Wert und Name"
},
"wide-layout-options": {
- "label-off": "",
- "label-on": ""
+ "label-off": "Ausgeschaltet",
+ "label-on": "Eingeschaltet"
}
},
"state-timeline": {
"align-values-options": {
- "label-center": "",
- "label-left": "",
- "label-right": ""
- },
- "category-state-timeline": "",
- "name-align-values": "",
- "name-connect-null-values": "",
- "name-disconnect-values": "",
- "name-fill-opacity": "",
- "name-line-width": "",
- "name-merge-equal-consecutive-values": "",
- "name-page-size": "",
- "name-row-height": "",
- "name-show-values": "",
+ "label-center": "Mitte",
+ "label-left": "Links",
+ "label-right": "Rechts"
+ },
+ "category-state-timeline": "Statuszeitleiste",
+ "name-align-values": "Werte ausrichten",
+ "name-connect-null-values": "Nullwerte verbinden",
+ "name-disconnect-values": "Werte trennen",
+ "name-fill-opacity": "Fülldeckkraft",
+ "name-line-width": "Linienbreite",
+ "name-merge-equal-consecutive-values": "Gleiche aufeinanderfolgende Werte verbinden",
+ "name-page-size": "Seitengröße (Seitennummerierung aktivieren)",
+ "name-row-height": "Zeilenhöhe",
+ "name-show-values": "Werte anzeigen",
"show-values-options": {
- "label-always": "",
- "label-auto": "",
- "label-never": ""
+ "label-always": "Immer",
+ "label-auto": "Auto",
+ "label-never": "Nie"
}
},
"status-history": {
- "category-status-history": "",
- "name-column-width": "",
- "name-fill-opacity": "",
- "name-line-width": "",
- "name-page-size": "",
- "name-row-height": "",
- "name-show-values": "",
+ "category-status-history": "Statusverlauf",
+ "name-column-width": "Spaltenbreite",
+ "name-fill-opacity": "Fülldeckkraft",
+ "name-line-width": "Linienbreite",
+ "name-page-size": "Seitengröße (Seitennummerierung aktivieren)",
+ "name-row-height": "Zeilenhöhe",
+ "name-show-values": "Werte anzeigen",
"show-values-options": {
- "label-always": "",
- "label-auto": "",
- "label-never": ""
+ "label-always": "Immer",
+ "label-auto": "Auto",
+ "label-never": "Nie"
},
"status-history-panel": {
"too-many-points_one": "Zu viele Punkte, um sie richtig darzustellen. <1>1>Aktualisieren Sie die Abfrage, damit weniger Punkte zurückgegeben werden. <3>3>({{count}} Punkte erhalten)",
@@ -11860,13 +11865,13 @@
"label-gauge-display-mode": "Messanzeigemodus",
"label-value-display": "Wertanzeige"
},
- "category-cell-options": "",
- "category-table": "",
- "category-table-footer": "",
+ "category-cell-options": "Zellenoptionen",
+ "category-table": "Tabelle",
+ "category-table-footer": "Tabellenfußzeile",
"cell-height-options": {
- "label-large": "",
- "label-medium": "",
- "label-small": ""
+ "label-large": "Groß",
+ "label-medium": "Mittel",
+ "label-small": "Klein"
},
"color-background-cell-options-editor": {
"description-apply-to-entire-row": "Wenn dies ausgewählt ist, wird die gesamte Zeile so eingefärbt, wie es diese Zelle wäre.",
@@ -11880,22 +11885,22 @@
"wrap-text": "Text umbrechen"
},
"column-alignment-options": {
- "label-auto": "",
- "label-center": "",
- "label-left": "",
- "label-right": ""
+ "label-auto": "Auto",
+ "label-center": "Mitte",
+ "label-left": "Links",
+ "label-right": "Rechts"
},
"container": {
"content": "Wenn zu viele Spalten in einer Tabelle angezeigt werden, kann dies die Leistung beeinträchtigen und die Daten können schwieriger zu lesen sein. Präzisieren Sie, sofern möglich, Ihre Abfragen.",
"show-all-series": "Alle Spalten anzeigen",
"show-only-series": "Nur {{MAX_NUMBER_OF_COLUMNS}} Spalten werden angezeigt"
},
- "description-calculation": "",
- "description-cell-value-inspect": "",
- "description-column-filter": "",
- "description-count-rows": "",
- "description-fields": "",
- "description-min-column-width": "",
+ "description-calculation": "Wählen Sie eine Reduktionsfunktion/Berechnung",
+ "description-cell-value-inspect": "Zellwertprüfung in einem modalen Fenster aktivieren",
+ "description-column-filter": "Aktiviert/deaktiviert Feldfilter in der Tabelle",
+ "description-count-rows": "Eine einzelne Anzahl für alle Datenzeilen anzeigen",
+ "description-fields": "Wählen Sie die Felder aus, die berechnet werden sollen",
+ "description-min-column-width": "Die Mindestbreite für die automatische Größenänderung der Spalte",
"description-wrap-header-text": "",
"image-cell-options-editor": {
"description-alt-text": "Alternativer Text, der angezeigt wird, wenn ein Bild nicht angezeigt werden kann, oder für Nutzer, die einen Screenreader verwenden",
@@ -11903,61 +11908,61 @@
"label-alt-text": "Alt-Text",
"label-title-text": "Titeltext"
},
- "name-calculation": "",
- "name-cell-height": "",
- "name-cell-type": "",
- "name-cell-value-inspect": "",
- "name-column-alignment": "",
- "name-column-filter": "",
- "name-column-width": "",
- "name-count-rows": "",
- "name-enable-paginations": "",
- "name-fields": "",
- "name-hide-in-table": "",
- "name-min-column-width": "",
- "name-show-table-footer": "",
- "name-show-table-header": "",
- "name-wrap-header-text": "",
- "placeholder-column-width": "",
- "placeholder-fields": ""
+ "name-calculation": "Berechnung",
+ "name-cell-height": "Zellenhöhe",
+ "name-cell-type": "Zellentyp",
+ "name-cell-value-inspect": "Zellenwert prüfen",
+ "name-column-alignment": "Spaltenausrichtung",
+ "name-column-filter": "Spaltenfilter",
+ "name-column-width": "Spaltenbreite",
+ "name-count-rows": "Zeilen zählen",
+ "name-enable-paginations": "Seitennummerierung aktivieren",
+ "name-fields": "Felder",
+ "name-hide-in-table": "In Tabelle ausblenden",
+ "name-min-column-width": "Minimale Spaltenbreite",
+ "name-show-table-footer": "Tabellenfußzeile anzeigen",
+ "name-show-table-header": "Tabellenüberschirft anzeigen",
+ "name-wrap-header-text": "Kopfzeilentext umbrechen",
+ "placeholder-column-width": "auto",
+ "placeholder-fields": "Alle numerischen Felder"
},
"table-new": {
- "category-cell-options": "",
- "category-table": "",
- "category-table-footer": "",
+ "category-cell-options": "Zellenoptionen",
+ "category-table": "Tabelle",
+ "category-table-footer": "Tabellenfußzeile",
"cell-height-options": {
- "label-large": "",
- "label-medium": "",
- "label-small": ""
+ "label-large": "Groß",
+ "label-medium": "Mittel",
+ "label-small": "Klein"
},
"column-alignment-options": {
- "label-auto": "",
- "label-center": "",
- "label-left": "",
- "label-right": ""
- },
- "description-calculation": "",
- "description-cell-value-inspect": "",
- "description-column-filter": "",
- "description-count-rows": "",
- "description-fields": "",
- "description-min-column-width": "",
- "name-calculation": "",
- "name-cell-height": "",
- "name-cell-type": "",
- "name-cell-value-inspect": "",
- "name-column-alignment": "",
- "name-column-filter": "",
- "name-column-width": "",
- "name-count-rows": "",
- "name-enable-pagination": "",
- "name-fields": "",
- "name-hide-in-table": "",
- "name-min-column-width": "",
- "name-show-table-footer": "",
- "name-show-table-header": "",
- "placeholder-column-width": "",
- "placeholder-fields": ""
+ "label-auto": "Auto",
+ "label-center": "Mitte",
+ "label-left": "Links",
+ "label-right": "Rechts"
+ },
+ "description-calculation": "Wählen Sie eine Reduktionsfunktion/Berechnung",
+ "description-cell-value-inspect": "Zellwertprüfung in einem modalen Fenster aktivieren",
+ "description-column-filter": "Aktiviert/deaktiviert Feldfilter in der Tabelle",
+ "description-count-rows": "Eine einzelne Anzahl für alle Datenzeilen anzeigen",
+ "description-fields": "Wählen Sie die Felder aus, die berechnet werden sollen",
+ "description-min-column-width": "Die Mindestbreite für die automatische Größenänderung der Spalte",
+ "name-calculation": "Berechnung",
+ "name-cell-height": "Zellenhöhe",
+ "name-cell-type": "Zellentyp",
+ "name-cell-value-inspect": "Zellenwert prüfen",
+ "name-column-alignment": "Spaltenausrichtung",
+ "name-column-filter": "Spaltenfilter",
+ "name-column-width": "Spaltenbreite",
+ "name-count-rows": "Zeilen zählen",
+ "name-enable-pagination": "Seitennummerierung aktivieren",
+ "name-fields": "Felder",
+ "name-hide-in-table": "In Tabelle ausblenden",
+ "name-min-column-width": "Minimale Spaltenbreite",
+ "name-show-table-footer": "Tabellenfußzeile anzeigen",
+ "name-show-table-header": "Tabellenüberschirft anzeigen",
+ "placeholder-column-width": "auto",
+ "placeholder-fields": "Alle numerischen Felder"
},
"tag-filter": {
"clear-button": "Tags löschen",
@@ -12042,17 +12047,17 @@
}
},
"text": {
- "category-text": "",
+ "category-text": "Text",
"mode-options": {
- "label-code": "",
- "label-html": "",
- "label-markdown": ""
+ "label-code": "Code",
+ "label-html": "HTML",
+ "label-markdown": "Markdown"
},
- "name-content": "",
- "name-language": "",
- "name-mode": "",
- "name-show-line-numbers": "",
- "name-show-mini-map": ""
+ "name-content": "Inhalt",
+ "name-language": "Sprache",
+ "name-mode": "Modus",
+ "name-show-line-numbers": "Zeilennummern anzeigen",
+ "name-show-mini-map": "Minikarte anzeigen"
},
"theme-preview": {
"breadcrumbs": {
@@ -12100,7 +12105,7 @@
"apply-button": "Zeitbereich anwenden",
"default-error": "Bitte geben Sie ein vergangenes Datum oder „{{now}}“ ein",
"fiscal-year": "Geschäftsjahr: {{from}}–{{to}}",
- "from-input": "",
+ "from-input": "Ab",
"open-input-calendar": "Kalender öffnen",
"range-error": "„Von“ darf nicht nach „Bis“ sein",
"to-input": "Bis"
@@ -12131,8 +12136,8 @@
},
"timeline": {
"missing-field": {
- "all": "",
- "time": ""
+ "all": "Keine grafischen Felder",
+ "time": "Daten haben kein Zeitfeld"
}
},
"timeseries": {
@@ -12150,54 +12155,54 @@
"tooltip-delete": "Löschen",
"tooltip-edit": "Bearbeiten"
},
- "category-axis": "",
+ "category-axis": "Achse",
"config": {
"get-graph-field-config": {
- "aria-label-bar-width-factor": "",
- "aria-label-fill-opacity": "",
- "aria-label-line-width": "",
- "aria-label-point-size": "",
- "category-graph-styles": "",
- "category-thresholds": "",
- "name-bar-alignment": "",
- "name-bar-width-factor": "",
- "name-connect-nulls": "",
- "name-disconnect-values": "",
- "name-fill-below-to": "",
- "name-fill-opacity": "",
- "name-gradient-mode": "",
- "name-line-interpolation": "",
- "name-line-style": "",
- "name-line-width": "",
- "name-point-size": "",
- "name-show-points": "",
- "name-show-thresholds": "",
- "name-style": "",
- "name-transform": "",
+ "aria-label-bar-width-factor": "Balkenbreitenfaktor",
+ "aria-label-fill-opacity": "Fülldeckkraft",
+ "aria-label-line-width": "Linienbreite",
+ "aria-label-point-size": "Punktgröße",
+ "category-graph-styles": "Diagrammstile",
+ "category-thresholds": "Schwellenwerte",
+ "name-bar-alignment": "Balkenausrichtung",
+ "name-bar-width-factor": "Balkenbreitenfaktor",
+ "name-connect-nulls": "Nullwerte verbinden",
+ "name-disconnect-values": "Werte trennen",
+ "name-fill-below-to": "Unten ausfüllen bis",
+ "name-fill-opacity": "Fülldeckkraft",
+ "name-gradient-mode": "Farbverlaufsmodus",
+ "name-line-interpolation": "Linieninterpolation",
+ "name-line-style": "Linienstil",
+ "name-line-width": "Linienbreite",
+ "name-point-size": "Punktgröße",
+ "name-show-points": "Punkte zeigen",
+ "name-show-thresholds": "Schwellenwerte anzeigen",
+ "name-style": "Stil",
+ "name-transform": "Transformieren",
"transform-options": {
- "description-constant": "",
- "description-style": "",
- "label-constant": "",
- "label-style": ""
+ "description-constant": "Der erste Wert wird als konstante Linie angezeigt",
+ "description-style": "Ergebnisse auf der Y-Achse auf negative Werte umkehren",
+ "label-constant": "Konstant",
+ "label-style": "Negativ Y"
}
}
},
"insert-nulls-editor": {
"disconnect-options": {
- "label-never": "",
- "label-threshold": ""
+ "label-never": "Nie",
+ "label-threshold": "Schwellenwert"
}
},
"line-style-editor": {
"line-fill-options": {
- "label-dash": "",
- "label-dots": "",
- "label-solid": ""
+ "label-dash": "Strich",
+ "label-dots": "Punkte",
+ "label-solid": "Durchgezogen"
},
"title-the-input-expects-a-segment-list": "Die Eingabe verlangt eine Segmentliste",
"tooltip-help": "Hilfe"
},
- "name-time-zone": "",
+ "name-time-zone": "Zeitzone",
"nulls-threshold-input": {
"placeholder-never": "Nie"
},
@@ -12207,9 +12212,9 @@
},
"span-nulls-editor": {
"gaps-options": {
- "label-always": "",
- "label-never": "",
- "label-threshold": ""
+ "label-always": "Immer",
+ "label-never": "Nie",
+ "label-threshold": "Schwellenwert"
}
},
"timezones-editor": {
@@ -12218,17 +12223,17 @@
}
},
"traces": {
- "category-span-filters": "",
- "name-critical-path-only": "",
- "name-find-in-trace": "",
- "name-max-duration": "",
- "name-min-duration": "",
- "name-service-name": "",
- "name-service-name-operator": "",
- "name-show-matches-only": "",
- "name-span-name": "",
- "name-span-name-operator": "",
- "name-tags": "",
+ "category-span-filters": "Spannenfilter",
+ "name-critical-path-only": "Nur kritischen Pfad anzeigen",
+ "name-find-in-trace": "In Trace suchen",
+ "name-max-duration": "Höchstdauer",
+ "name-min-duration": "Mindestdauer",
+ "name-service-name": "Dienstname",
+ "name-service-name-operator": "Dienstnamen-Operator",
+ "name-show-matches-only": "Nur Übereinstimmungen anzeigen",
+ "name-span-name": "Spannen-Name",
+ "name-span-name-operator": "Spannen-Namen-Operator",
+ "name-tags": "Tags",
"traces-panel": {
"no-data-found-in-response": "Keine Daten in der Antwort gefunden"
}
@@ -12243,20 +12248,20 @@
"axis-editor": {
"log-mode-options": {
"description": {
- "split-the-buckets-based-on-size": ""
+ "split-the-buckets-based-on-size": "Buckets je nach Größe aufteilen"
},
"label": {
- "split": ""
+ "split": "Aufteilen"
}
},
"mode-options": {
"description": {
- "split-the-buckets-based-on-count": "",
- "split-the-buckets-based-on-size": ""
+ "split-the-buckets-based-on-count": "Buckets je nach Anzahl aufteilen",
+ "split-the-buckets-based-on-size": "Buckets je nach Größe aufteilen"
},
"label": {
- "count": "",
- "size": ""
+ "count": "Anzahl",
+ "size": "Größe"
}
},
"placeholder-auto": "Auto"
@@ -12288,9 +12293,9 @@
},
"calculate-heatmap": {
"add-heatmap-calculation-options": {
- "name-x-bucket": "",
- "name-y-bucket": "",
- "name-y-bucket-scale": ""
+ "name-x-bucket": "X-Bucket",
+ "name-y-bucket": "Y-Bucket",
+ "name-y-bucket-scale": "Y-Bucket-Skala"
}
},
"concatenate-transformer-editor": {
@@ -12351,8 +12356,8 @@
"tooltip-enable": "Aktivieren"
},
"draggable-sort-order": {
- "asc": "",
- "desc": "",
+ "asc": "AUF",
+ "desc": "AB",
"off": "Aus"
},
"editors": {
@@ -12751,9 +12756,9 @@
"description": {
"reorder-hide-or-rename-fields": ""
},
- "field-order": "",
+ "field-order": "Feldreihenfolge",
"field-order-auto": "Auto",
- "field-order-manual": "",
+ "field-order-manual": "Manuell",
"first-frame-warning": "Felder organisieren funktioniert nur mit einem einzelnen Frame. Überlegen Sie, zunächst eine Join-Transformation anzuwenden oder die Eingabe zu filtern.",
"name": {
"organize-fields": ""
@@ -12880,7 +12885,7 @@
"polynomial": "Polynom"
}
},
- "regression": "",
+ "regression": "Regression",
"tooltip-number-of-xy-points-to-predict": "Anzahl der zu prognostizierenden X-, Y-Punkte"
},
"rename-by-regex-transformer": {
@@ -13033,10 +13038,10 @@
}
},
"trend": {
- "category-x-axis": "",
- "description-x-field": "",
- "name-x-field": "",
- "placeholder-x-field": ""
+ "category-x-axis": "X-Achse",
+ "description-x-field": "Ein steigender numerischer Wert",
+ "name-x-field": "X-Feld",
+ "placeholder-x-field": "Erster numerischer Wert"
},
"upgrade-box": {
"discovery-text": "Sie haben eine Pro-Funktion entdeckt!",
@@ -13299,20 +13304,20 @@
}
},
"xychart": {
- "category-xychart": "",
- "name-fill-opacity": "",
- "name-line-style": "",
- "name-line-width": "",
- "name-max-point-size": "",
- "name-min-point-size": "",
- "name-point-shape": "",
- "name-point-size": "",
- "name-point-stroke-width": "",
- "name-series-mapping": "",
- "name-show": "",
+ "category-xychart": "XY-Diagramm",
+ "name-fill-opacity": "Fülldeckkraft",
+ "name-line-style": "Linienstil",
+ "name-line-width": "Linienbreite",
+ "name-max-point-size": "Max. Punktgröße",
+ "name-min-point-size": "Min. Punktgröße",
+ "name-point-shape": "Punktform",
+ "name-point-size": "Punktgröße",
+ "name-point-stroke-width": "Punktstrichbreite",
+ "name-series-mapping": "Reihenzuordnung",
+ "name-show": "Anzeigen",
"point-shape-options": {
- "label-circle": "",
- "label-square": ""
+ "label-circle": "Kreis",
+ "label-square": "Quadrat"
},
"series-editor": {
"add-series": "Reihe hinzufügen",
@@ -13324,18 +13329,18 @@
"label-y-field": "Y-Feld",
"placeholder-all-frames": "Alle Frames",
"placeholder-select-frame": "Frame auswählen",
- "placeholder-x-field": "",
- "placeholder-y-field": "",
+ "placeholder-x-field": "Erstes Zahlen- oder Zeitfeld in jedem Frame",
+ "placeholder-y-field": "Verbleibende Zahlenfelder in jedem Frame",
"tooltip-delete-series": "Reihe löschen"
},
"series-mapping-options": {
- "label-auto": "",
- "label-manual": ""
+ "label-auto": "Auto",
+ "label-manual": "Manuell"
},
"show-options": {
- "label-both": "",
- "label-lines": "",
- "label-points": ""
+ "label-both": "Beides",
+ "label-lines": "Linien",
+ "label-points": "Punkte"
}
}
}
\ No newline at end of file
diff --git a/public/locales/es-ES/grafana.json b/public/locales/es-ES/grafana.json
index bfca9573a22..142d1d95596 100644
--- a/public/locales/es-ES/grafana.json
+++ b/public/locales/es-ES/grafana.json
@@ -3256,6 +3256,11 @@
"id-token-attribute-name-label": "Nombre del atributo del token de ID",
"login-attribute-path-description": "Expresión JMESPath que se utilizará para la búsqueda de inicios de sesión del usuario a partir del token de ID de usuario.",
"login-attribute-path-label": "Ruta del atributo de inicio de sesión",
+ "login-prompt-consent": "",
+ "login-prompt-description": "",
+ "login-prompt-label": "",
+ "login-prompt-login": "",
+ "login-prompt-select-account": "",
"managed-identity-client-id-description": "El ID de cliente de identidad administrada de la credencial de identidad federada de su aplicación OAuth2.",
"managed-identity-client-id-label": "ID de cliente de identidad gestionada de FIC",
"name-attribute-path-description": "Expresión JMESPath que se utilizará para la búsqueda de nombres de usuario a partir del token de ID de usuario. \nEste nombre se utilizará como nombre para mostrar del usuario.",
diff --git a/public/locales/fr-FR/grafana.json b/public/locales/fr-FR/grafana.json
index b0bfe4591cb..2db23a4cc60 100644
--- a/public/locales/fr-FR/grafana.json
+++ b/public/locales/fr-FR/grafana.json
@@ -3256,6 +3256,11 @@
"id-token-attribute-name-label": "Nom d’attribut du jeton d’identification",
"login-attribute-path-description": "Expression JMESPath à utiliser pour la recherche de connexion de l’utilisateur à partir du jeton d’identification de l’utilisateur.",
"login-attribute-path-label": "Chemin d’attribut de connexion",
+ "login-prompt-consent": "",
+ "login-prompt-description": "",
+ "login-prompt-label": "",
+ "login-prompt-login": "",
+ "login-prompt-select-account": "",
"managed-identity-client-id-description": "L’ID du client de l’identité gérée de l’identifiant de l’identité fédérée de votre application OAuth2.",
"managed-identity-client-id-label": "ID du client de l’identité gérée FIC",
"name-attribute-path-description": "Expression JMESPath à utiliser pour la recherche de nom d’utilisateur à partir du jeton d’identification de l’utilisateur. \nCe nom sera utilisé comme nom d’affichage de l’utilisateur.",
diff --git a/public/locales/hu-HU/grafana.json b/public/locales/hu-HU/grafana.json
index f5b81f0455f..6eba4c6c7b1 100644
--- a/public/locales/hu-HU/grafana.json
+++ b/public/locales/hu-HU/grafana.json
@@ -119,10 +119,10 @@
"users-heading": "Szervezeti felhasználók"
},
"enterprise-auth-features-card": {
- "dismiss": "",
- "heading": "",
- "learn-more-link": "",
- "text": ""
+ "dismiss": "Elvetés",
+ "heading": "Vállalati hitelesítés",
+ "learn-more-link": "További információk",
+ "text": "Kezelje automatikusan a felhasználókat, a csapatokat és az engedélyeket a Grafana Cloud és az Enterprise szolgáltatásban elérhető <1>SAML1>, <3>SCIM3>, <6>LDAP6> és <8>RBAC8> segítségével."
},
"feature-listing": {
"title-auditing": "Auditálás",
@@ -374,8 +374,8 @@
"am-active-timing-select-label-active-timings": "Aktív időzítések"
},
"ad": {
- "close": "",
- "learn-more": ""
+ "close": "Bezárás",
+ "learn-more": "További információk"
},
"add-button": {
"add-more": "Továbbiak hozzáadása"
@@ -404,12 +404,12 @@
"missing-series-resolve": "Megoldandó hiányzó sorozatértékelések",
"no-annotations": "Jegyzetek nélkül",
"notification-configuration": {
- "active-timings": "",
+ "active-timings": "Aktív időintervallumok",
"contact-point": "Kapcsolattartási pont",
"group-by": "Csoportosítás alapja",
- "group-title": "",
+ "group-title": "Értesítési konfiguráció",
"mute-timings": "Némítási időzítések",
- "timing-options": ""
+ "timing-options": "Időzítések"
},
"pending-period": "Függőben lévő időszak",
"rule": "Szabály",
@@ -963,7 +963,7 @@
},
"contactPoints": {
"validation": {
- "notFound": ""
+ "notFound": "A(z) „{{contactPoint}}” kapcsolattartási pont nem található"
}
},
"continue-matching-indicator": {
@@ -972,7 +972,7 @@
"copy-to-clipboard": "„{{label}}” másolása a vágólapra",
"create-metadata": {
"label": {
- "contact-point": "",
+ "contact-point": "Az értesítések a következő címre érkeznek:",
"dashboard": "Irányítópult",
"dashboard-and-panel": "Irányítópult és panel",
"evaluation-interval": "Értékelési intervallum",
@@ -1120,7 +1120,7 @@
"content-show-all-errors": "Összes hiba megjelenítése"
},
"errors": {
- "failedWith": ""
+ "failedWith": "{{-config}} sikertelen {{status}} állapottal: {{-message}}"
},
"evaluate-every-validation-options": {
"message": {
@@ -1568,20 +1568,20 @@
}
},
"home": {
- "irm-card-description": "",
- "irm-card-item-1": "",
- "irm-card-item-2": "",
- "irm-card-item-3": "",
- "irm-card-item-4": "",
- "irm-card-title": "",
+ "irm-card-description": "Egyesítse az ügyeleti, riasztási és incidenskezelési funkciókat a Grafana Cloud IRM segítségével.",
+ "irm-card-item-1": "Ügyeleti időbeosztások kezelése a naptárral vagy a Terraformmal.",
+ "irm-card-item-2": "Válaszoljon az incidensekre a weben, az alkalmazáson, a Slacken vagy más csatornán keresztül.",
+ "irm-card-item-3": "Határozza meg a kiváltó okokat az MI-alapú Grafana SIFT segítségével.",
+ "irm-card-item-4": "Elemezze a múltbeli incidenseket a válaszok és a rugalmasság javítása érdekében.",
+ "irm-card-title": "Incidensválaszok és -kezelés",
"label-get-started": "Kezdés",
"label-insights": "Adatok",
- "synthetic-monitoring-card-description": "",
- "synthetic-monitoring-card-item-1": "",
- "synthetic-monitoring-card-item-2": "",
- "synthetic-monitoring-card-item-3": "",
- "synthetic-monitoring-card-item-4": "",
- "synthetic-monitoring-card-title": "",
+ "synthetic-monitoring-card-description": "Figyelje a kritikus felhasználói folyamatokat, webhelyeket és API-kat kívülről, globális helyekről.",
+ "synthetic-monitoring-card-item-1": "Szimulálja a végpontok közötti felhasználói utakat böngészőellenőrzésekkel.",
+ "synthetic-monitoring-card-item-2": "Futtasson pingelést, DNS-, HTTP/S- és TCP-ellenőrzéseket minden hálózati rétegben.",
+ "synthetic-monitoring-card-item-3": "Használhat több mint 20 globális szondát vagy privát szondát a tűzfal mögött.",
+ "synthetic-monitoring-card-item-4": "Kövesse nyomon az SLO-kat beépített Prometheus-stílusú riasztásokkal – közvetlenül a felhasználói felületről.",
+ "synthetic-monitoring-card-title": "Szintetikus megfigyelés",
"title-alerting": "Riasztás"
},
"import-to-gma": {
@@ -1596,7 +1596,7 @@
"no-rules-body-yaml": "Nincsenek importálandó szabályok. Válasszon másik yaml-fájlt.",
"no-rules-title": "Nincsenek importálandó szabályok",
"not-using-rules-managed-by-integrations-or-plugins": {
- "text": "",
+ "text": "Az integrációk vagy beépülő modulok által kezelt szabályokat nem szabad importálni a Grafana által kezelt szabályokba.",
"title": "Információ"
},
"plugin-rules-warning": {
@@ -1976,7 +1976,7 @@
},
"notification-policies-filter": {
"label-search-by-contact-point": "Keresés kapcsolattartási pont alapján",
- "placeholder-search-by-contact-point": "",
+ "placeholder-search-by-contact-point": "Válasszon egy kapcsolattartási pontot",
"search-query-input-placeholder-search": "Keresés"
},
"notification-policies-list": {
@@ -2487,7 +2487,7 @@
"new-badge": "Új!",
"text": "Importálás a Grafana által felügyelt szabályokba"
},
- "loading-more-groups": "",
+ "loading-more-groups": "További csoportok betöltése…",
"more": "Továbbiak",
"new-alert-rule": "Új riasztási szabály",
"new-datasource-recording-rule": "Új adatforrás-felvételkészítési szabály",
@@ -3038,51 +3038,51 @@
}
},
"alertlist": {
- "category-alert-state-filter": "",
- "category-filter": "",
- "category-options": "",
- "descriptino-alerts-linked-to-dashboard": "",
- "description-alert-instance-label": "",
- "description-alert-name": "",
- "description-datasource": "",
- "description-folder": "",
- "description-group-by": "",
- "description-group-mode": "",
- "description-max-items": "",
- "description-show-inactive-alerts": "",
- "description-sort-order": "",
- "description-view-mode": "",
+ "category-alert-state-filter": "Riasztásiállapot-szűrő",
+ "category-filter": "Szűrő",
+ "category-options": "Beállítások",
+ "descriptino-alerts-linked-to-dashboard": "Csak az ehhez az irányítópulthoz kapcsolódó riasztások megjelenítése",
+ "description-alert-instance-label": "Szűrje a riasztási példányokat címkelekérdezéssel, pl.: {severity=\"critical\", instance=~\"cluster-us-.+\"}",
+ "description-alert-name": "Az ezt a szöveget tartalmazó riasztások szűrése",
+ "description-datasource": "Szűrés a riasztás forrásából",
+ "description-folder": "A kijelölt mappában lévő riasztások szűrése (csak a Grafana által felügyelt riasztási szabályok esetén)",
+ "description-group-by": "Riasztások szűrése címkelekérdezéssel",
+ "description-group-mode": "A riasztáspéldányok csoportosításának módja",
+ "description-max-items": "Megjelenítendő riasztások maximális száma",
+ "description-show-inactive-alerts": "Tartalmazza 0 (nulla) példánnyal rendelkező riasztási szabályokat. Mivel ezeknek a szabályoknak nincsenek példányai, rejtve maradnak, ha a riasztáspéldány-címkeszűrő konfigurálva van.",
+ "description-sort-order": "Riasztások és riasztáspéldányok rendezési sorrendje",
+ "description-view-mode": "Váltás a listanézet és a statisztikai nézet között",
"group-by": {
"aria-label-group-by-label-keys": "címkekulcsok szerinti csoportosítás",
"placeholder-group-by": "Csoportosítási szempont"
},
"group-mode-options": {
- "label-custom-grouping": "",
- "label-default-grouping": ""
- },
- "name-alert-instance-label": "",
- "name-alert-name": "",
- "name-alerts-linked-to-dashboard": "",
- "name-datasource": "",
- "name-error": "",
- "name-firing": "",
- "name-folder": "",
- "name-group-by": "",
- "name-group-mode": "",
- "name-max-items": "",
- "name-no-data": "",
- "name-normal": "",
- "name-pending": "",
- "name-recovering": "",
- "name-show-inactive-alerts": "",
- "name-sort-order": "",
- "name-view-mode": "",
+ "label-custom-grouping": "Egyéni csoportosítás",
+ "label-default-grouping": "Alapértelmezett csoportosítás"
+ },
+ "name-alert-instance-label": "Riasztáspéldány-címke",
+ "name-alert-name": "Riasztás neve",
+ "name-alerts-linked-to-dashboard": "Az irányítópulthoz kapcsolódó riasztások megjelenítése",
+ "name-datasource": "Adatforrás",
+ "name-error": "Hiba",
+ "name-firing": "Riasztás/aktív",
+ "name-folder": "Mappa",
+ "name-group-by": "Csoportosítási szempont",
+ "name-group-mode": "Csoportmód",
+ "name-max-items": "Elemek max. száma",
+ "name-no-data": "Nincs adat",
+ "name-normal": "Normál",
+ "name-pending": "Függőben",
+ "name-recovering": "Helyreállítás",
+ "name-show-inactive-alerts": "0 példánnyal rendelkező riasztások megjelenítése",
+ "name-sort-order": "Rendezési sorrend",
+ "name-view-mode": "Nézetmód",
"sort-order-options": {
- "label-alphabetical-asc": "",
- "label-alphabetical-desc": "",
- "label-importance": "",
- "label-time-asc": "",
- "label-time-desc": ""
+ "label-alphabetical-asc": "Betűrendben (növekvő)",
+ "label-alphabetical-desc": "Betűrendben (csökkenő)",
+ "label-importance": "Fontosság",
+ "label-time-asc": "Idő (növekvő)",
+ "label-time-desc": "Idő (csökkenő)"
},
"ungrouped-mode-view": {
"active-for": "ennyi ideig: <1>{{duration}}1>",
@@ -3098,8 +3098,8 @@
"title-permission-required": "Engedély szükséges"
},
"view-mode-options": {
- "label-list": "",
- "label-stat": ""
+ "label-list": "Lista",
+ "label-stat": "Statisztika"
}
},
"annolist": {
@@ -3112,31 +3112,31 @@
"annotation-list-item": {
"tooltip-created-by": "Létrehozta:<1>1> {{email}}"
},
- "category-annotation-query": "",
- "category-display": "",
- "category-link-behaviour": "",
- "description-tags": "",
+ "category-annotation-query": "Jegyzetlekérdezés",
+ "category-display": "Megjelenítés",
+ "category-link-behaviour": "Hivatkozás viselkedése",
+ "description-tags": "Jegyzetcímkék egyeztetése",
"link-target-options": {
- "label-dashboard": "",
- "label-panel": ""
- },
- "name-limit": "",
- "name-link-target": "",
- "name-query-filter": "",
- "name-show-tags": "",
- "name-show-time": "",
- "name-show-user": "",
- "name-tags": "",
- "name-time-after": "",
- "name-time-before": "",
- "name-time-range": "",
+ "label-dashboard": "Irányítópult",
+ "label-panel": "Panel"
+ },
+ "name-limit": "Korlát",
+ "name-link-target": "Hivatkozási cél",
+ "name-query-filter": "Lekérdezési szűrő",
+ "name-show-tags": "Címkék megjelenítése",
+ "name-show-time": "Idő megjelenítése",
+ "name-show-user": "Felhasználó megjelenítése",
+ "name-tags": "Címkék",
+ "name-time-after": "Idő utána",
+ "name-time-before": "Idő előtte",
+ "name-time-range": "Időtartomány",
"query-filter-options": {
- "label-all-dashboards": "",
- "label-this-dashboard": ""
+ "label-all-dashboards": "Összes irányítópult",
+ "label-this-dashboard": "Ez az irányítópult"
},
"time-range-options": {
- "label-none": "",
- "label-this-dashboard": ""
+ "label-none": "Nincs",
+ "label-this-dashboard": "Ez az irányítópult"
}
},
"annotations": {
@@ -3256,6 +3256,11 @@
"id-token-attribute-name-label": "Azonosítótoken-attribútum neve",
"login-attribute-path-description": "A felhasználói bejelentkezés felhasználói azonosítótoken alapján végzett kereséséhez használandó JMESPath-kifejezés.",
"login-attribute-path-label": "Bejelentkezési attribútum útvonala",
+ "login-prompt-consent": "",
+ "login-prompt-description": "",
+ "login-prompt-label": "",
+ "login-prompt-login": "",
+ "login-prompt-select-account": "",
"managed-identity-client-id-description": "Az OAuth2-alkalmazás összevont identitáshitelesítő adatainak felügyelt identitáskliens-azonosítója.",
"managed-identity-client-id-label": "FIC által felügyelt identitáskliens-azonosító",
"name-attribute-path-description": "A felhasználónév felhasználói azonosítótoken alapján végzett kereséséhez használandó JMESPath-kifejezés. \nEz a név lesz a felhasználó megjelenített neve.",
@@ -3326,8 +3331,8 @@
}
},
"provider-card": {
- "saml-learn-more": "",
- "scim-learn-more": "",
+ "saml-learn-more": "Egyszeri bejelentkezés (SSO) SAML használatával.",
+ "scim-learn-more": " Felhasználók és csapatok szinkronizálása SCIM-mel.",
"text-badge-enabled": "Engedélyezve",
"text-badge-not-enabled": "Nem engedélyezett"
},
@@ -3364,99 +3369,99 @@
},
"bar-chart": {
"warn": {
- "missing-numeric": "",
- "missing-series": ""
+ "missing-numeric": "Nem található numerikus mező",
+ "missing-series": "A sávdiagramokhoz karakterlánc vagy időmező szükséges"
}
},
"barchart": {
"config": {
- "category-thresholds": "",
- "description-color-by-field": "",
- "description-x-label-max-length": "",
- "name-bar-radius": "",
- "name-bar-width": "",
- "name-color-by-field": "",
- "name-fill-opacity": "",
- "name-full-highlight": "",
- "name-gradient-mode": "",
- "name-group-width": "",
- "name-line-width": "",
- "name-orientation": "",
- "name-rotate-x-labels": "",
- "name-show-thresholds": "",
- "name-show-values": "",
- "name-stacking": "",
- "name-transform": "",
- "name-x-axis": "",
- "name-x-label-max-length": "",
- "name-x-label-min-spacing": "",
+ "category-thresholds": "Küszöbértékek",
+ "description-color-by-field": "Használja a testvérmező színértékét az egyes sávértékek színezéséhez.",
+ "description-x-label-max-length": "Az X-tengely címkéi a megadott hosszúságra lesznek rövidítve",
+ "name-bar-radius": "Sáv sugara",
+ "name-bar-width": "Sáv szélessége",
+ "name-color-by-field": "Szín mező szerint",
+ "name-fill-opacity": "Kitöltési átlátszóság",
+ "name-full-highlight": "Teljes terület kiemelése, ha az egérmutatót fölé viszi",
+ "name-gradient-mode": "Színátmenetes mód",
+ "name-group-width": "Csoport szélessége",
+ "name-line-width": "Vonal szélessége",
+ "name-orientation": "Tájolás",
+ "name-rotate-x-labels": "X-tengely feliratainak elforgatása",
+ "name-show-thresholds": "Küszöbértékek megjelenítése",
+ "name-show-values": "Értékek megjelenítése",
+ "name-stacking": "Egymásra helyezés",
+ "name-transform": "Transzformáció",
+ "name-x-axis": "X tengely",
+ "name-x-label-max-length": "X tengely feliratainak maximális hossza",
+ "name-x-label-min-spacing": "X tengely feliratainak minimális távolsága",
"orientation-options": {
- "label-auto": "",
- "label-horizontal": "",
- "label-line-vertical": ""
+ "label-auto": "Automatikus",
+ "label-horizontal": "Vízszintes",
+ "label-line-vertical": "Függőleges"
},
- "placeholder-x-axis": "",
- "placeholder-x-label-max-length": "",
+ "placeholder-x-axis": "Első karakterlánc vagy időmező",
+ "placeholder-x-label-max-length": "Nincs",
"show-values-options": {
- "label-always": "",
- "label-auto": "",
- "label-never": ""
+ "label-always": "Mindig",
+ "label-auto": "Automatikus",
+ "label-never": "Soha"
},
"transform-options": {
- "description-constant": "",
- "description-negative-y": "",
- "label-constant": "",
- "label-negative-y": ""
+ "description-constant": "Az első érték állandó vonalként jelenik meg",
+ "description-negative-y": "Az eredmények negatív értékekre fordítása az y tengelyen",
+ "label-constant": "Konstans",
+ "label-negative-y": "Negatív Y"
}
},
"tick-spacing-editor": {
"content-require-space-from-the-right-side": "Hely szükséges a jobb oldalról",
"gaps-options": {
- "description-large": "",
- "description-medium": "",
- "description-none": "",
- "description-small": "",
- "label-large": "",
- "label-medium": "",
- "label-none": "",
- "label-small": ""
+ "description-large": "{{spacing}} térközt igényel",
+ "description-medium": "{{spacing}} térközt igényel",
+ "description-none": "Összes felirat megjelenítése",
+ "description-small": "{{spacing}} térközt igényel",
+ "label-large": "Nagy",
+ "label-medium": "Közepes",
+ "label-none": "Nincs",
+ "label-small": "Kicsi"
},
"label-rtl": "RTL"
}
},
"bargauge": {
"bar-size-options": {
- "label-auto": "",
- "label-manual": ""
- },
- "category-bar-gauge": "",
- "description-max-height": "",
- "description-min-height": "",
- "description-min-width": "",
- "description-show-unfilled-area": "",
+ "label-auto": "Automatikus",
+ "label-manual": "Kézi"
+ },
+ "category-bar-gauge": "Sávdiagram",
+ "description-max-height": "Maximális sormagasság (vízszintes tájolás)",
+ "description-min-height": "Minimális sormagasság (vízszintes tájolás)",
+ "description-min-width": "Minimális oszlopszélesség (függőleges tájolás)",
+ "description-show-unfilled-area": "Ha engedélyezve van, a kitöltetlen területet szürkén jeleníti meg",
"display-mode-options": {
- "label-basic": "",
- "label-gradient": "",
- "label-retro": ""
- },
- "name-bar-size": "",
- "name-display-mode": "",
- "name-max-height": "",
- "name-min-height": "",
- "name-min-width": "",
- "name-name-placement": "",
+ "label-basic": "Alap",
+ "label-gradient": "Színátmenet",
+ "label-retro": "Retro LCD"
+ },
+ "name-bar-size": "Sáv mérete",
+ "name-display-mode": "Megjelenítési mód",
+ "name-max-height": "Max. magasság",
+ "name-min-height": "Min. magasság",
+ "name-min-width": "Min. szélesség",
+ "name-name-placement": "Név elhelyezése",
"name-placement-options": {
- "label-auto": "",
- "label-hidden": "",
- "label-left": "",
- "label-top": ""
+ "label-auto": "Automatikus",
+ "label-hidden": "Rejtett",
+ "label-left": "Balra",
+ "label-top": "Felül"
},
- "name-show-unfilled-area": "",
- "name-value-display": "",
+ "name-show-unfilled-area": "Kitöltetlen terület megjelenítése",
+ "name-value-display": "Érték megjelenítése",
"value-display-options": {
- "label-hidden": "",
- "label-text-color": "",
- "label-value-color": ""
+ "label-hidden": "Rejtett",
+ "label-text-color": "Szöveg színe",
+ "label-value-color": "Érték színe"
}
},
"bookmarks-page": {
@@ -3481,7 +3486,7 @@
"delete-modal-restore-dashboards-text": "Ez a művelet azonnal törli a kijelölt mappákat, de a kijelölt irányítópultok 30 napon belüli törlésre lesznek megjelölve. A szervezeti rendszergazda a 30 nap lejárta előtt bármikor visszaállíthatja az irányítópultokat. A mappák nem állíthatók vissza.",
"delete-modal-text": "Ez a művelet törli a következő tartalmat:",
"delete-modal-title": "Törlés",
- "delete-provisioned-folder": "",
+ "delete-provisioned-folder": "Kiépített mappa törlése",
"deleting": "Törlés...",
"manage-permissions-button": "Engedélyek kezelése",
"move-button": "Áthelyezés",
@@ -3525,12 +3530,12 @@
"tags-column": "Címkék"
},
"delete-provisioned-folder-form": {
- "alert-folder-deleted-successfully": "",
- "api-error": "",
- "button-cancel": "",
- "button-delete": "",
- "button-deleting": "",
- "delete-warning": ""
+ "alert-folder-deleted-successfully": "A mappa törlése sikeres",
+ "api-error": "A mappa törlése nem sikerült",
+ "button-cancel": "Mégse",
+ "button-delete": "Törlés",
+ "button-deleting": "Törlés...",
+ "delete-warning": "Ez törli ezt a mappát és minden almappáját. Összességében ez a következőket érinti:"
},
"descendant-count": {
"title-unable-to-retrieve-descendant-information": "Nem lehet lekérni a leszármazott adatokat"
@@ -3589,52 +3594,52 @@
"text": "Nincs találat a lekérdezésre"
},
"restore": {
- "success": ""
+ "success": "{{name}} irányítópult visszaállítva"
},
"text-this-repository-is-read-only": "Ha közvetlen hozzáférése van a célhoz, másolja ki a JSON-kódot, és illessze be oda.",
"trash-state-manager": {
"label": {
- "alphabetically-az": "",
- "alphabetically-za": ""
+ "alphabetically-az": "Betűrendben (A–Z)",
+ "alphabetically-za": "Betűrendben (Z–A)"
}
}
},
"candlestick": {
"additional-fields-options": {
- "label-ignore": "",
- "label-include": ""
+ "label-ignore": "Mellőzés",
+ "label-include": "Tartalmazza"
},
"candle-style-options": {
- "label-candles": "",
- "label-ohlc-bars": ""
+ "label-candles": "Gyertyák",
+ "label-ohlc-bars": "OHLC-sávok"
},
- "category-candlestick": "",
+ "category-candlestick": "Gyertyatartó",
"color-strategy-options": {
- "label-since-open": "",
- "label-since-prior-close": ""
- },
- "description-additional-fields": "",
- "description-close": "",
- "description-high": "",
- "description-low": "",
- "description-open": "",
- "description-volume": "",
+ "label-since-open": "Nyitás óta",
+ "label-since-prior-close": "Az előző zárás óta"
+ },
+ "description-additional-fields": "Használja a szabványos idősor-beállításokat a fent hozzá nem rendelt mezők konfigurálásához",
+ "description-close": "Érték a tárgyidőszak végén",
+ "description-high": "Maximális érték a tárgyidőszakon belül",
+ "description-low": "Minimális érték a tárgyidőszakon belül",
+ "description-open": "Érték a tárgyidőszak elején",
+ "description-volume": "Mintaszám a tárgyidőszakon belül",
"mode-options": {
- "label-both": "",
- "label-candles": "",
- "label-volume": ""
- },
- "name-additional-fields": "",
- "name-candle-style": "",
- "name-close": "",
- "name-color-strategy": "",
- "name-down-color": "",
- "name-high": "",
- "name-low": "",
- "name-mode": "",
- "name-open": "",
- "name-up-color": "",
- "name-volume": ""
+ "label-both": "Mindkettő",
+ "label-candles": "Gyertyák",
+ "label-volume": "Mennyiség"
+ },
+ "name-additional-fields": "További mezők",
+ "name-candle-style": "Gyertya stílusa",
+ "name-close": "Bezárás",
+ "name-color-strategy": "Színstratégia",
+ "name-down-color": "Csökkenés színe",
+ "name-high": "Magas",
+ "name-low": "Alacsony",
+ "name-mode": "Mód",
+ "name-open": "Megnyitás",
+ "name-up-color": "Növekedés színe",
+ "name-volume": "Mennyiség"
},
"canvas": {
"apieditor": {
@@ -3649,18 +3654,18 @@
}
},
"button-item": {
- "category-button": "",
+ "category-button": "Gomb",
"label": {
"center": "Középre",
"left": "Balra",
"right": "Jobbra"
},
- "name-align-text": "",
- "name-api": "",
- "name-style": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
+ "name-align-text": "Szöveg igazítása",
+ "name-api": "API",
+ "name-style": "Stílus",
+ "name-text": "Szöveg",
+ "name-text-color": "Szöveg színe",
+ "name-text-size": "Szöveg mérete",
"placeholder": {
"auto": "Automatikus"
}
@@ -3687,20 +3692,20 @@
}
}
},
- "category-arrow-direction": "",
- "category-background": "",
- "category-border": "",
- "category-canvas": "",
- "category-color": "",
- "category-data-links": "",
- "category-line-style": "",
- "category-metric-value": "",
- "category-radius": "",
- "category-selected-connection": "",
- "category-selected-element": "",
- "category-size": "",
+ "category-arrow-direction": "Nyíl iránya",
+ "category-background": "Háttér",
+ "category-border": "Szegély",
+ "category-canvas": "Vászon",
+ "category-color": "Szín",
+ "category-data-links": "Adathivatkozások és műveletek",
+ "category-line-style": "Vonal stílusa",
+ "category-metric-value": "Metrikaérték",
+ "category-radius": "Sugár",
+ "category-selected-connection": "Kiválasztott kapcsolat",
+ "category-selected-element": "Kiválasztott elem ({{element}})",
+ "category-size": "Méret",
"cloud-item": {
- "category-cloud": "",
+ "category-cloud": "Felhő",
"label": {
"bottom": "Lent",
"center": "Középre",
@@ -3709,48 +3714,48 @@
"right": "Jobbra",
"top": "Felső"
},
- "name-align-text": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "Szöveg igazítása",
+ "name-text": "Szöveg",
+ "name-text-color": "Szöveg színe",
+ "name-text-size": "Szöveg mérete",
+ "name-vertical-align": "Függőleges igazítás",
"placeholder": {
"auto": "Automatikus"
}
},
- "description-experimental-types": "",
- "description-infinite-panning": "",
- "description-inline-editing": "",
- "description-pan-zoom": "",
+ "description-experimental-types": "Kísérleti elemtípusok kiválasztásának engedélyezése",
+ "description-infinite-panning": "Végtelen pásztázás engedélyezése – hasznos a tágas vásznakhoz. Figyelem: ez egy kísérleti funkció, és jelenleg csak a felül/bal oldalon korlátozott elemekkel működik jól",
+ "description-inline-editing": "A panel közvetlen szerkesztésének engedélyezése",
+ "description-pan-zoom": "Pásztázás és nagyítás engedélyezése",
"direction-options": {
- "label-both": "",
- "label-forward": "",
- "label-none": "",
- "label-reverse": ""
+ "label-both": "Mindkettő",
+ "label-forward": "Előre",
+ "label-none": "Nincs",
+ "label-reverse": "Fordított"
},
"drone-front-item": {
- "category-drone-front": "",
- "name-roll-angle": ""
+ "category-drone-front": "Drón eleje",
+ "name-roll-angle": "Billentési szög"
},
"drone-side-item": {
- "category-drone-side": "",
- "name-pitch-angle": ""
+ "category-drone-side": "Drón oldala",
+ "name-pitch-angle": "Bólintási szög"
},
"drone-top-item": {
- "category-drone-top": "",
- "name-back-left-rotor-rpm": "",
- "name-back-right-rotor-rpm": "",
- "name-front-left-rotor-rpm": "",
- "name-front-right-rotor-rpm": "",
- "name-yaw-angle": ""
+ "category-drone-top": "Drón teteje",
+ "name-back-left-rotor-rpm": "Bal hátsó rotor fordulatszáma",
+ "name-back-right-rotor-rpm": "Jobb hátsó rotor fordulatszáma",
+ "name-front-left-rotor-rpm": "Bal elülső rotor fordulatszáma",
+ "name-front-right-rotor-rpm": "Jobb elülső rotor fordulatszáma",
+ "name-yaw-angle": "Elfordulási szög"
},
"element-editor": {
- "category-layout": "",
- "description-unsupported": "",
- "name-quick-placement": ""
+ "category-layout": "Elrendezés",
+ "description-unsupported": "A kiválasztott elemtípust a jelenlegi beállítások nem támogatják. Engedélyezze a speciális elemtípusokat.",
+ "name-quick-placement": "Gyors elhelyezés"
},
"ellipse-item": {
- "category-ellipse": "",
+ "category-ellipse": "Ellipszis",
"label": {
"bottom": "Lent",
"center": "Középre",
@@ -3759,50 +3764,50 @@
"right": "Jobbra",
"top": "Felső"
},
- "name-align-text": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "Szöveg igazítása",
+ "name-text": "Szöveg",
+ "name-text-color": "Szöveg színe",
+ "name-text-size": "Szöveg mérete",
+ "name-vertical-align": "Függőleges igazítás",
"placeholder": {
"auto": "Automatikus"
}
},
"icon-item": {
- "category-icon": "",
- "name-fill-color": "",
- "name-svg-path": ""
+ "category-icon": "Ikon",
+ "name-fill-color": "Kitöltőszín",
+ "name-svg-path": "SVG-útvonal"
},
"inline-edit": {
"canvas-inline-editor": "Beágyazott vászonszerkesztő",
"tooltip-close-inline-editor": "Beágyazott szerkesztő bezárása"
},
"inline-edit-body": {
- "category-selected-element": "",
+ "category-selected-element": "Kiválasztott elem ({{element}})",
"label-add-item": "Elem hozzáadása",
"please-select-an-element": "Válasszon egy elemet"
},
- "label-actions": "",
- "label-color": "",
- "label-direction": "",
- "label-image": "",
- "label-image-size": "",
- "label-line-style": "",
- "label-links": "",
- "label-radius": "",
- "label-size": "",
- "label-width": "",
+ "label-actions": "Műveletek",
+ "label-color": "Szín",
+ "label-direction": "Irány",
+ "label-image": "Kép",
+ "label-image-size": "Kép mérete",
+ "label-line-style": "Vonal stílusa",
+ "label-links": "Hivatkozások",
+ "label-radius": "Sugár",
+ "label-size": "Méret",
+ "label-width": "Szélesség",
"layer-editor": {
- "category-layer": "",
- "category-layout": "",
- "name-constraints": "",
- "name-elements": ""
+ "category-layer": "Réteg",
+ "category-layout": "Elrendezés",
+ "name-constraints": "Korlátozások",
+ "name-elements": "Elemek"
},
"line-style-editor": {
"label-animate": "Animálás"
},
"line-style-options": {
- "label-solid": ""
+ "label-solid": "Folytonos"
},
"metric-value-item": {
"label": {
@@ -3817,15 +3822,15 @@
"auto": "Automatikus"
}
},
- "name-align-text": "",
- "name-color": "",
- "name-experimental-types": "",
- "name-infinite-panning": "",
- "name-inline-editing": "",
- "name-pan-zoom": "",
- "name-text": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "Szöveg igazítása",
+ "name-color": "Szöveg színe",
+ "name-experimental-types": "Kísérleti elemtípusok",
+ "name-infinite-panning": "Végtelen pásztázás",
+ "name-inline-editing": "Beágyazott szerkesztés",
+ "name-pan-zoom": "Pásztázás és nagyítás",
+ "name-text": "Szöveg",
+ "name-text-size": "Szöveg mérete",
+ "name-vertical-align": "Függőleges igazítás",
"not-found-display": {
"not-found": "<0>Nem található: 0>"
},
@@ -3838,7 +3843,7 @@
"zoom-scroll-wheel": "Nagyítás: egérgörgő"
},
"parallelogram-item": {
- "category-parallelogram": "",
+ "category-parallelogram": "Paralelogramma",
"label": {
"bottom": "Lent",
"center": "Középre",
@@ -3847,11 +3852,11 @@
"right": "Jobbra",
"top": "Felső"
},
- "name-align-text": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "Szöveg igazítása",
+ "name-text": "Szöveg",
+ "name-text-color": "Szöveg színe",
+ "name-text-size": "Szöveg mérete",
+ "name-vertical-align": "Függőleges igazítás",
"placeholder": {
"auto": "Automatikus"
}
@@ -3864,21 +3869,21 @@
},
"placement-editor": {
"horizontal-options": {
- "label-center": "",
- "label-left": "",
- "label-left-and-right": "",
- "label-right": "",
- "label-scale": ""
+ "label-center": "Középre",
+ "label-left": "Balra",
+ "label-left-and-right": "Bal és jobb",
+ "label-right": "Jobbra",
+ "label-scale": "Skála"
},
"label-constraints": "Korlátozások",
"label-position": "Helyzet",
"loading": "Betöltés…",
"vertical-options": {
- "label-bottom": "",
- "label-center": "",
- "label-scale": "",
- "label-top": "",
- "label-top-and-bottom": ""
+ "label-bottom": "Lent",
+ "label-center": "Középre",
+ "label-scale": "Skála",
+ "label-top": "Felül",
+ "label-top-and-bottom": "Felül és alul"
}
},
"quick-positioning": {
@@ -3890,7 +3895,7 @@
"tooltip-align-vertical-centers": "Igazítás függőleges középre"
},
"rectangle-item": {
- "category-rectangle": "",
+ "category-rectangle": "Téglalap",
"label": {
"bottom": "Lent",
"center": "Középre",
@@ -3899,33 +3904,33 @@
"right": "Jobbra",
"top": "Felső"
},
- "name-align-text": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "Szöveg igazítása",
+ "name-text": "Szöveg",
+ "name-text-color": "Szöveg színe",
+ "name-text-size": "Szöveg mérete",
+ "name-vertical-align": "Függőleges igazítás",
"placeholder": {
"auto": "Automatikus"
}
},
"server-item": {
- "category-server": "",
- "name-blink-rate": "",
- "name-bulb-color": "",
- "name-status-color": "",
- "name-type": "",
+ "category-server": "Kiszolgáló",
+ "name-blink-rate": "Villogási sebesség [hz] (0 = ki)",
+ "name-bulb-color": "Lámpa színe",
+ "name-status-color": "Állapot színe",
+ "name-type": "Típus",
"type-options": {
- "label-database": "",
- "label-single": "",
- "label-stack": "",
- "label-terminal": ""
+ "label-database": "Adatbázis",
+ "label-single": "Különálló",
+ "label-stack": "Stack",
+ "label-terminal": "Terminál"
}
},
"text-display": {
"double-click-to-set": "Kattintson duplán a szöveg beállításához"
},
"text-item": {
- "category-text": "",
+ "category-text": "Szöveg",
"label": {
"bottom": "Lent",
"center": "Középre",
@@ -3934,11 +3939,11 @@
"right": "Jobbra",
"top": "Felső"
},
- "name-align-text": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "Szöveg igazítása",
+ "name-text": "Szöveg",
+ "name-text-color": "Szöveg színe",
+ "name-text-size": "Szöveg mérete",
+ "name-vertical-align": "Függőleges igazítás",
"placeholder": {
"auto": "Automatikus"
}
@@ -3960,7 +3965,7 @@
"tooltip-remove": "Eltávolítás"
},
"triangle-item": {
- "category-triangle": "",
+ "category-triangle": "Háromszög",
"label": {
"bottom": "Lent",
"center": "Középre",
@@ -3969,18 +3974,18 @@
"right": "Jobbra",
"top": "Felső"
},
- "name-align-text": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "Szöveg igazítása",
+ "name-text": "Szöveg",
+ "name-text-color": "Szöveg színe",
+ "name-text-size": "Szöveg mérete",
+ "name-vertical-align": "Függőleges igazítás",
"placeholder": {
"auto": "Automatikus"
}
},
"wind-turbine-item": {
- "category-wind-turbine": "",
- "name-rpm": ""
+ "category-wind-turbine": "Szélturbina",
+ "name-rpm": "Fordulatszám"
}
},
"carousel": {
@@ -3997,8 +4002,8 @@
"close-button": {
"tooltip": "Bezárás"
},
- "cloud-enterprise-feature-badge": "",
- "cloud-feature-badge": "",
+ "cloud-enterprise-feature-badge": "Felhő és vállalati",
+ "cloud-feature-badge": "Felhő",
"combobox": {
"async": {
"error": "Hiba történt az opciók betöltése során."
@@ -4528,7 +4533,7 @@
}
},
"description": {
- "action": ""
+ "action": "Irányítópult leírásának módosítása"
},
"dynamic-config-value-editor": {
"render-label": {
@@ -4537,12 +4542,12 @@
},
"edit-actions": {
"add": "{{typeName}} hozzáadása",
- "move": "",
+ "move": "{{typeName}} áthelyezése",
"panel-background": "Panel hátterének módosítása",
"panel-description": "Panel leírásának módosítása",
- "panel-max-repeats-per-row": "",
+ "panel-max-repeats-per-row": "Max. ismétlés soronként",
"panel-repeat-direction": "Ismétlési irány",
- "panel-repeat-variable": "",
+ "panel-repeat-variable": "Panelismétlés alapja:",
"panel-title": "Panel címének módosítása",
"paste-panel": "Panel beillesztése",
"remove": "{{typeName}} eltávolítása",
@@ -4676,7 +4681,7 @@
"get-field-override-categories": {
"label-add-field-override": "Mezőfelülbírálás hozzáadása",
"label-add-override-property": "Felülbírálási tulajdonság hozzáadása",
- "override-name": "",
+ "override-name": "{{overrideNum}} felülbírálása",
"title": {
"add-button": "gomb hozzáadása"
}
@@ -4901,7 +4906,7 @@
"title-matched_other": "{{totalCount}}/{{count}} egyező lehetőség"
},
"outline": {
- "repeated-item": "",
+ "repeated-item": "Ismétlés",
"tree-item": {
"empty": "(üres)",
"no-title": ""
@@ -5059,8 +5064,8 @@
"label-changes": "Módosítások",
"label-details": "Részletek",
"title": "Irányítópult mentése",
- "title-copy": "",
- "title-provisioned": ""
+ "title-copy": "Irányítópult-másolat mentése",
+ "title-provisioned": "Kiépített irányítópult"
},
"save-dashboard-error-proxy": {
"body-name-exists": "Egy irányítópult már létezik ugyanazzal a névvel a kijelölt mappában.<1>1><2>Biztosan menti ezt az irányítópultot?2>",
@@ -5137,7 +5142,7 @@
}
},
"title": {
- "action": ""
+ "action": "Irányítópult címének módosítása"
},
"toolbar": {
"add": "Hozzáadás",
@@ -5572,12 +5577,12 @@
}
},
"delete-provisioned-dashboard-form": {
- "api-error": "",
+ "api-error": "Az irányítópult törlése nem sikerült",
"cancel-action": "Mégse",
"delete-action": "Irányítópult törlése",
- "delete-read-only-file-message": "",
+ "delete-read-only-file-message": "Ez az irányítópult nem törölhető közvetlenül a Grafanából, mert az adattár csak olvasható. Az irányítópult törléséhez távolítsa el a fájlt a Git-tárból.",
"deleting": "Törlés...",
- "drawer-title": "",
+ "drawer-title": "Kiépített irányítópult törlése",
"title-this-repository-is-read-only": "Ez az adattár csak olvasható"
},
"description-label": {
@@ -5591,7 +5596,7 @@
}
},
"edit-provisioned-dashboard-form": {
- "success": ""
+ "success": "Irányítópult-módosítások mentése sikeres"
},
"email-list": {
"aria-label-emailmenu": "E-mail-menü ki- és bekapcsolása"
@@ -5785,7 +5790,7 @@
}
},
"panel-data-alerting-tab": {
- "tab-label": ""
+ "tab-label": "Riasztás"
},
"panel-data-alerting-tab-rendered": {
"alert": {
@@ -5796,14 +5801,14 @@
"title-dashboard-not-saved": "Az irányítópult nincs mentve"
},
"panel-data-queries-tab": {
- "tab-label": ""
+ "tab-label": "Lekérdezések"
},
"panel-data-queries-tab-rendered": {
"add-query": "Lekérdezés hozzáadása",
"expression": "Kifejezés "
},
"panel-data-transformations-tab": {
- "tab-label": ""
+ "tab-label": "Transzformációk"
},
"panel-data-transformations-tab-rendered": {
"add-another-transformation": "Másik transzformáció hozzáadása",
@@ -5906,8 +5911,8 @@
"label-changes": "Módosítások",
"label-details": "Részletek",
"title": "Irányítópult mentése",
- "title-copy": "",
- "title-provisioned": ""
+ "title-copy": "Irányítópult-másolat mentése",
+ "title-provisioned": "Kiépített irányítópult"
}
},
"save-dashboard-form": {
@@ -6231,18 +6236,18 @@
}
},
"dashlist": {
- "category-dashboard-list": "",
- "name-folder": "",
- "name-include-current-template-variables": "",
- "name-include-current-time-range": "",
- "name-max-items": "",
- "name-query": "",
- "name-recently-viewed": "",
- "name-search": "",
- "name-show-folder-names": "",
- "name-show-headings": "",
- "name-starred": "",
- "name-tags": ""
+ "category-dashboard-list": "Irányítópult-lista",
+ "name-folder": "Mappa",
+ "name-include-current-template-variables": "Aktuális sablonváltozó értékeinek belefoglalása",
+ "name-include-current-time-range": "Aktuális időtartomány belefoglalása",
+ "name-max-items": "Elemek max. száma",
+ "name-query": "Lekérdezés",
+ "name-recently-viewed": "Legutóbb megtekintett",
+ "name-search": "Keresés",
+ "name-show-folder-names": "Mappanevek megjelenítése",
+ "name-show-headings": "Címsorok megjelenítése",
+ "name-starred": "Csillagozott",
+ "name-tags": "Címkék"
},
"data-source-list": {
"empty-state": {
@@ -6504,15 +6509,15 @@
"dimensions": {
"background-size-editor": {
"options": {
- "label-contain": "",
- "label-cover": "",
- "label-fill": "",
- "label-original": "",
- "label-tile": ""
+ "label-contain": "Tartalmaz",
+ "label-cover": "Lefedés",
+ "label-fill": "Kitöltés",
+ "label-original": "Eredeti",
+ "label-tile": "Csempe"
}
},
"color-dimension-editor": {
- "label-fixed-color": "",
+ "label-fixed-color": "Rögzített szín",
"noOptionsMessage-no-fields-found": ""
},
"file-dropzone-custom-children": {
@@ -6527,10 +6532,10 @@
"placeholder-search": "Keresés"
},
"resource-dimension-editor": {
- "description-field": "",
- "description-fixed": "",
+ "description-field": "Karakterláncmező-eredmény használata",
+ "description-fixed": "Rögzített érték",
"label-field": "Mező",
- "label-fixed": "",
+ "label-fixed": "Rögzített",
"label-mappings": "Hozzárendelések",
"label-source": "Forrás"
},
@@ -6547,16 +6552,16 @@
},
"scalar-dimension-editor": {
"fixed-value-options": {
- "label-fixed-values": ""
+ "label-fixed-values": "Rögzített érték"
},
"label-limit": "Korlát",
"label-value": "Érték",
"noOptionsMessage-no-fields-found": "",
"scalar-options": {
- "description-clamped": "",
- "description-mod": "",
- "label-clamped": "",
- "label-mod": ""
+ "description-clamped": "Mezőértékek használata, maximumhoz és minimumhoz kapcsolva",
+ "description-mod": "Mezőértékek használata, mod. és max. között",
+ "label-clamped": "Összekapcsolt",
+ "label-mod": "Mod."
}
},
"scale-dimension-editor": {
@@ -6571,10 +6576,10 @@
"noOptionsMessage-no-fields-found": ""
},
"text-dimension-editor": {
- "description-field": "",
- "description-fixed": "",
+ "description-field": "Mezőérték megjelenítése",
+ "description-fixed": "Rögzített érték",
"label-field": "Mező",
- "label-fixed": "",
+ "label-fixed": "Rögzített",
"label-source": "Forrás",
"label-template": "Sablon",
"label-value": "Érték"
@@ -6588,16 +6593,16 @@
"description-percentage-means-thresholds-relative": "A százalék a minimumhoz és maximumhoz viszonyított küszöbértékeket jelenti",
"modes": {
"description": {
- "threshold-based-percent-between-minmax": "",
- "thresholds-based-absolute-values": ""
+ "threshold-based-percent-between-minmax": "Válassza ki a küszöbértéket a min./max. közötti százalék alapján",
+ "thresholds-based-absolute-values": "Válassza ki a küszöbértékeket az abszolút értékek alapján"
},
"label": {
- "absolute": "",
- "percentage": ""
+ "absolute": "Abszolút",
+ "percentage": "Százalék"
}
},
"thresholds-mode": "Küszöbértékek mód",
- "value-base": ""
+ "value-base": "Alap"
},
"urlpicker-tab": {
"label-preview": "Előnézet"
@@ -7398,23 +7403,23 @@
"title": "Kilép az oldalról?"
},
"gauge": {
- "category-gauge": "",
- "description-min-height": "",
- "description-min-width": "",
- "description-neutral": "",
- "description-show-threshold-labels": "",
- "description-show-threshold-markers": "",
+ "category-gauge": "Mérőeszköz",
+ "description-min-height": "Minimális sormagasság (vízszintes tájolás)",
+ "description-min-width": "Minimális oszlopszélesség (függőleges tájolás)",
+ "description-neutral": "Hagyja üresen, hogy a Min. értéket használja semleges pontként",
+ "description-show-threshold-labels": "A küszöbértékek megjelenítése a mérősáv körül",
+ "description-show-threshold-markers": "A küszöbértékeket külső sávként jeleníti meg",
"gauge-size-options": {
- "label-auto": "",
- "label-manual": ""
+ "label-auto": "Automatikus",
+ "label-manual": "Kézi"
},
- "name-gauge-size": "",
- "name-min-height": "",
- "name-min-width": "",
- "name-neutral": "",
- "name-show-threshold-labels": "",
- "name-show-threshold-markers": "",
- "placeholder-neutral": ""
+ "name-gauge-size": "Mérőeszköz mérete",
+ "name-min-height": "Min. magasság",
+ "name-min-width": "Min. szélesség",
+ "name-neutral": "Semleges",
+ "name-show-threshold-labels": "Küszöbértékcímkék megjelenítése",
+ "name-show-threshold-markers": "Küszöbértékjelölők megjelenítése",
+ "placeholder-neutral": "automatikus"
},
"gen-ai": {
"apply-suggestion": "Alkalmaz",
@@ -7748,85 +7753,85 @@
},
"builder": {
"axis": {
- "category-axis": "",
- "color-label": "",
+ "category-axis": "Tengely",
+ "color-label": "Szín",
"color-options": {
- "label-series": "",
- "label-text": ""
+ "label-series": "Sorozat",
+ "label-text": "Szöveg"
},
"grid-line-options": {
- "label-auto": "",
- "label-off": "",
- "label-on": ""
+ "label-auto": "Automatikus",
+ "label-off": "Ki",
+ "label-on": "Be"
},
- "name-centered-zero": "",
- "name-grid-lines": "",
- "name-label": "",
- "name-placement": "",
- "name-scale": "",
- "name-show-border": "",
- "name-soft-max": "",
- "name-soft-min": "",
- "name-width": "",
- "placeholder-label": "",
- "placeholder-soft-max": "",
- "placeholder-soft-min": "",
- "placeholder-width": "",
+ "name-centered-zero": "Középre igazított nulla",
+ "name-grid-lines": "Rácsvonalak megjelenítése",
+ "name-label": "Címke",
+ "name-placement": "Elhelyezés",
+ "name-scale": "Skála",
+ "name-show-border": "Szegély megjelenítése",
+ "name-soft-max": "Nem kényszerítő max.",
+ "name-soft-min": "Nem kényszerítő min.",
+ "name-width": "Szélesség",
+ "placeholder-label": "Opcionális szöveg",
+ "placeholder-soft-max": "Lásd: Standard beállítások > Max.",
+ "placeholder-soft-min": "Lásd: Standard beállítások > Min.",
+ "placeholder-width": "Automatikus",
"scale-distribution-editor": {
"distribution-options": {
- "label-linear": "",
- "label-log": "",
- "label-symlog": ""
+ "label-linear": "Lineáris",
+ "label-log": "Logaritmikus",
+ "label-symlog": "Symlog"
}
}
},
"legend": {
- "category": "",
- "description-values": "",
+ "category": "Jelmagyarázat",
+ "description-values": "Válassza ki a jelmagyarázatban megjeleníteni kívánt értékeket vagy számításokat",
"mode-options": {
- "label-list": "",
- "label-table": ""
+ "label-list": "Lista",
+ "label-table": "Táblázat"
},
- "name-mode": "",
- "name-placement": "",
- "name-values": "",
- "name-visibility": "",
- "name-width": "",
+ "name-mode": "Mód",
+ "name-placement": "Elhelyezés",
+ "name-values": "Értékek",
+ "name-visibility": "Láthatóság",
+ "name-width": "Szélesség",
"placement-options": {
- "label-bottom": "",
- "label-right": ""
+ "label-bottom": "Lent",
+ "label-right": "Jobbra"
}
},
"stacking": {
- "name-stack-series": ""
+ "name-stack-series": "Stacksorozat"
},
"text": {
- "category-text-size": "",
- "name-percent-change": "",
- "name-title": "",
- "name-value": "",
- "placeholder-percent-change": "",
- "placeholder-title": "",
- "placeholder-value": ""
+ "category-text-size": "Szöveg mérete",
+ "name-percent-change": "Változások százalékos aránya",
+ "name-title": "Cím",
+ "name-value": "Érték",
+ "placeholder-percent-change": "Automatikus",
+ "placeholder-title": "Automatikus",
+ "placeholder-value": "Automatikus"
},
"tooltip": {
- "category": "",
- "description-hover-proximity": "",
+ "category": "Elemleírás",
+ "description-hover-proximity": "A kurzor képpontban megadott távolsága egy ponttól az elemleírás aktiválásához",
"modeOptions": {
- "label-all": "",
- "label-hidden": "",
- "label-single": ""
+ "label-all": "Összes",
+ "label-hidden": "Rejtett",
+ "label-single": "Különálló"
},
- "name-hide-zeros": "",
- "name-hover-proximity": "",
- "name-max-height": "",
- "name-max-width": "",
- "name-tooltip-mode": "",
- "name-values-sort-order": "",
+ "name-hide-zeros": "Nullák elrejtése",
+ "name-hover-proximity": "Rámutatási közelség",
+ "name-max-height": "Max. magasság",
+ "name-max-width": "Max. szélesség",
+ "name-tooltip-mode": "Elemleírási mód",
+ "name-values-sort-order": "Értékek rendezési sorrendje",
"sortOptions": {
- "label-ascending": "",
- "label-descending": "",
- "label-none": ""
+ "label-ascending": "Növekvő",
+ "label-descending": "Csökkenő",
+ "label-none": "Nincs"
}
}
},
@@ -7988,19 +7993,19 @@
"tooltip-expand-all": "Minden sor kibontása"
},
"matchers-ui": {
- "description-field-name-by-regex-matcher": "",
- "description-fields-by-query": "",
- "description-fields-with-name": "",
- "description-fields-with-type": "",
- "description-fields-with-value": "",
+ "description-field-name-by-regex-matcher": "Tulajdonságok beállítása a reguláris kifejezésnek megfelelő nevű mezők számára",
+ "description-fields-by-query": "Tulajdonságok beállítása egy adott lekérdezés mezői számára",
+ "description-fields-with-name": "Tulajdonságok beállítása egy adott mező számára",
+ "description-fields-with-type": "Tulajdonságok beállítása adott típusú mezők számára (szám, karakterlánc, logikai érték)",
+ "description-fields-with-value": "Tulajdonságok beállítása a szűkítőfeltétellel rendelkező mezők számára",
"field-name-picker": {
- "placeholder": ""
+ "placeholder": "Mező kijelölése"
},
- "name-field-name-by-regex-matcher": "",
- "name-fields-by-query": "",
- "name-fields-with-name": "",
- "name-fields-with-type": "",
- "name-fields-with-value": ""
+ "name-field-name-by-regex-matcher": "Reguláris kifejezésnek megfelelő nevű mezők",
+ "name-fields-by-query": "A lekérdezés által visszaadott mezők",
+ "name-fields-with-name": "Mezők névvel",
+ "name-fields-with-type": "Mezők típussal",
+ "name-fields-with-value": "Mezők értékekkel"
},
"menu-item": {
"keyboard-shortcut-label": "Billentyűparancs"
@@ -8124,55 +8129,55 @@
"config": {
"get-graph-field-options": {
"axis-placement": {
- "description-auto": "",
- "label-auto": "",
- "label-hidden": "",
- "label-left": "",
- "label-right": ""
+ "description-auto": "Az első mező balra, minden más jobbra",
+ "label-auto": "Automatikus",
+ "label-hidden": "Rejtett",
+ "label-left": "Balra",
+ "label-right": "Jobbra"
},
"bar-alignment": {
- "description-after": "",
- "description-before": "",
- "description-center": ""
+ "description-after": "Utána",
+ "description-before": "Előtte",
+ "description-center": "Középre"
},
"draw-style": {
- "label-bars": "",
- "label-lines": "",
- "label-points": ""
+ "label-bars": "Sávok",
+ "label-lines": "Vonalak",
+ "label-points": "Pontok"
},
"fill-gradient": {
- "description-hue": "",
- "description-opacity": "",
- "description-scheme": "",
- "label-hue": "",
- "label-none": "",
- "label-opacity": "",
- "label-scheme": ""
+ "description-hue": "Kis színátmenet",
+ "description-opacity": "Kitöltési átlátszósági átmenet engedélyezése",
+ "description-scheme": "Színséma használata az átmenet meghatározásához",
+ "label-hue": "Árnyalat",
+ "label-none": "Nincs",
+ "label-opacity": "Átlátszóság",
+ "label-scheme": "Séma"
},
"line-interpolation": {
- "description-linear": "",
- "description-smooth": "",
- "description-step-after": "",
- "description-step-before": ""
+ "description-linear": "Lineáris",
+ "description-smooth": "Sima",
+ "description-step-after": "Következő lépés",
+ "description-step-before": "Előző lépés"
},
"show-points": {
- "description-auto": "",
- "label-always": "",
- "label-auto": "",
- "label-never": ""
+ "description-auto": "Pontok megjelenítése alacsony sűrűség esetén",
+ "label-always": "Mindig",
+ "label-auto": "Automatikus",
+ "label-never": "Soha"
},
"stacking": {
- "label-100": "",
- "label-normal": "",
- "label-off": ""
+ "label-100": "100%",
+ "label-normal": "Normál",
+ "label-off": "Ki"
},
"thresholds-display-mode": {
- "label-dashed-lines": "",
- "label-filled-regions": "",
- "label-filled-regions-and-dashed-lines": "",
- "label-filled-regions-and-lines": "",
- "label-lines": "",
- "label-off": ""
+ "label-dashed-lines": "Vonalakként (szaggatott)",
+ "label-filled-regions": "Kitöltött területekként",
+ "label-filled-regions-and-dashed-lines": "Kitöltött területekként és vonalakként (szaggatott)",
+ "label-filled-regions-and-lines": "Kitöltött területekként és vonalakként",
+ "label-lines": "Vonalakként",
+ "label-off": "Ki"
}
}
}
@@ -8219,78 +8224,78 @@
},
"heatmap": {
"calculate-from-data-options": {
- "label-no": "",
- "label-yes": ""
- },
- "category-cell-display": "",
- "category-colors": "",
- "category-exemplars": "",
- "category-heatmap": "",
- "category-legend": "",
- "category-tooltip": "",
- "category-y-axis": "",
+ "label-no": "Nem",
+ "label-yes": "Igen"
+ },
+ "category-cell-display": "Cella megjelenítése",
+ "category-colors": "Színek",
+ "category-exemplars": "Mintapéldányok",
+ "category-heatmap": "Hőtérkép",
+ "category-legend": "Jelmagyarázat",
+ "category-tooltip": "Elemleírás",
+ "category-y-axis": "Y tengely",
"mode-options": {
- "label-opacity": "",
- "label-scheme": ""
- },
- "name-axis-label": "",
- "name-axis-width": "",
- "name-calculate-from-data": "",
- "name-cell-gap": "",
- "name-color": "",
- "name-decimals": "",
- "name-end-color-at-value": "",
- "name-exponent": "",
- "name-hide-cells-gt": "",
- "name-hide-cells-lt": "",
- "name-max-height": "",
- "name-max-value": "",
- "name-max-width": "",
- "name-min-value": "",
- "name-mode": "",
- "name-placement": "",
- "name-reverse": "",
- "name-scale": "",
- "name-scheme": "",
- "name-show-color-scale": "",
- "name-show-histogram": "",
- "name-show-legend": "",
- "name-start-color-from-value": "",
- "name-steps": "",
- "name-tick-alignment": "",
- "name-tooltip-mode": "",
- "name-unit": "",
- "name-value-name": "",
- "name-y-axis-scale": "",
- "placeholder-axis-label": "",
- "placeholder-axis-width": "",
- "placeholder-decimals": "",
- "placeholder-end-color-at-value": "",
- "placeholder-hide-cells-gt": "",
- "placeholder-hide-cells-lt": "",
- "placeholder-max-value": "",
- "placeholder-min-value": "",
- "placeholder-start-color-from-value": "",
- "placeholder-value-name": "",
+ "label-opacity": "Átlátszóság",
+ "label-scheme": "Séma"
+ },
+ "name-axis-label": "Tengelycímke",
+ "name-axis-width": "Tengely szélessége",
+ "name-calculate-from-data": "Számítás az adatokból",
+ "name-cell-gap": "Cellaköz",
+ "name-color": "Szín",
+ "name-decimals": "Tizedesjegyek",
+ "name-end-color-at-value": "Színskála vége az értéknél",
+ "name-exponent": "Exponens",
+ "name-hide-cells-gt": "Cellák elrejtése >= értékkel",
+ "name-hide-cells-lt": "Cellák elrejtése <= értékkel",
+ "name-max-height": "Max. magasság",
+ "name-max-value": "Max. érték",
+ "name-max-width": "Max. szélesség",
+ "name-min-value": "Min. érték",
+ "name-mode": "Mód",
+ "name-placement": "Elhelyezés",
+ "name-reverse": "Fordított",
+ "name-scale": "Skála",
+ "name-scheme": "Séma",
+ "name-show-color-scale": "Színskála megjelenítése",
+ "name-show-histogram": "Hisztogram megjelenítése (Y tengely)",
+ "name-show-legend": "Jelmagyarázat megjelenítése",
+ "name-start-color-from-value": "Színskála kezdete az értéktől",
+ "name-steps": "Lépések",
+ "name-tick-alignment": "Feliratok igazítása",
+ "name-tooltip-mode": "Elemleírási mód",
+ "name-unit": "Egység",
+ "name-value-name": "Érték neve",
+ "name-y-axis-scale": "Y tengely skálája",
+ "placeholder-axis-label": "Automatikus",
+ "placeholder-axis-width": "Automatikus",
+ "placeholder-decimals": "Automatikus",
+ "placeholder-end-color-at-value": "Automatikus (max.)",
+ "placeholder-hide-cells-gt": "Nincs",
+ "placeholder-hide-cells-lt": "Nincs",
+ "placeholder-max-value": "Automatikus",
+ "placeholder-min-value": "Automatikus",
+ "placeholder-start-color-from-value": "Automatikus (min.)",
+ "placeholder-value-name": "Érték",
"placement-options": {
- "label-hidden": "",
- "label-left": "",
- "label-right": ""
+ "label-hidden": "Rejtett",
+ "label-left": "Balra",
+ "label-right": "Jobbra"
},
"scale-options": {
- "label-exponential": "",
- "label-linear": ""
+ "label-exponential": "Exponenciális",
+ "label-linear": "Lineáris"
},
"tick-alignment-options": {
- "label-auto": "",
- "label-bottom": "",
- "label-middle": "",
- "label-top": ""
+ "label-auto": "Automatikus",
+ "label-bottom": "Alsó (GE)",
+ "label-middle": "Középső",
+ "label-top": "Felső (LE)"
},
"tooltip-mode-options": {
- "label-all": "",
- "label-hidden": "",
- "label-single": ""
+ "label-all": "Összes",
+ "label-hidden": "Rejtett",
+ "label-single": "Különálló"
}
},
"help-modal": {
@@ -8350,14 +8355,14 @@
"troubleshooting-help": "Hibaelhárítási segítség kéréséhez küldjön egy pillanatfelvételt erről a panelről a Grafana Labs műszaki ügyfélszolgálatának. A pillanatfelvétel lekérdezési válaszadatokat és panelbeállításokat tartalmaz."
},
"histogram": {
- "category-histogram": "",
+ "category-histogram": "Hisztogram",
"histogram-panel": {
"no-histogram-found-in-response": "Nem található hisztogram a válaszban"
},
- "name-fill-opacity": "",
- "name-gradient-mode": "",
- "name-line-width": "",
- "name-stacking": ""
+ "name-fill-opacity": "Kitöltési átlátszóság",
+ "name-gradient-mode": "Színátmenetes mód",
+ "name-line-width": "Vonal szélessége",
+ "name-stacking": "Egymásra helyezés"
},
"inspector": {
"inspect-data-tab": {
@@ -8738,16 +8743,16 @@
}
},
"logs": {
- "category-logs": "",
+ "category-logs": "Naplók",
"deduplication-options": {
- "label-exact": "",
- "label-none": "",
- "label-numbers": "",
- "label-signature": ""
- },
- "description-enable-infinite-scrolling": "",
- "description-enable-syntax-highlighting": "",
- "description-show-controls": "",
+ "label-exact": "Pontos",
+ "label-none": "Nincs",
+ "label-numbers": "Számok",
+ "label-signature": "Aláírás"
+ },
+ "description-enable-infinite-scrolling": "Kísérleti. További eredmények kéréséhez görgessen a naplók listájának aljára.",
+ "description-enable-syntax-highlighting": "Használjon előre definiált szintaxisszínező grammatikát a naplósorok releváns részeinek kiemeléséhez",
+ "description-show-controls": "Vezérlők megjelenítése az utolsó vagy az első naplósorra ugráshoz és szűrés naplószint szerint",
"fields": {
"type": {
"loki": {
@@ -8761,8 +8766,8 @@
}
},
"font-size-options": {
- "label-default": "",
- "label-small": ""
+ "label-default": "Alapértelmezett",
+ "label-small": "Kicsi"
},
"get-dataframe-fields": {
"vars": {
@@ -8809,40 +8814,40 @@
"tooltip-error": "Hiba: {{errorMessage}}"
},
"log-line-details": {
- "clear-search": "",
- "close": "",
- "copy-shortlink": "",
- "copy-to-clipboard": "",
+ "clear-search": "Törlés",
+ "close": "Napló részleteinek bezárása",
+ "copy-shortlink": "Rövid hivatkozás másolása",
+ "copy-to-clipboard": "Másolás vágólapra",
"displayed-fields-section": "",
"fields": {
- "adhoc-statistics": "",
- "copy-value-to-clipboard": "",
- "filter-out": "",
- "filter-out-query": "",
+ "adhoc-statistics": "Eseti statisztikák",
+ "copy-value-to-clipboard": "Érték másolása a vágólapra",
+ "filter-out": "Érték kiszűrése",
+ "filter-out-query": "Érték kiszűrése a(z) {{query}} lekérdezésben",
"toggle-field-button": {
- "field-instead-message": "",
- "hide-this-field": ""
+ "field-instead-message": "Ezen mező megjelenítése az üzenet helyett",
+ "hide-this-field": "Ezen mező elrejtése"
}
},
- "fields-section": "",
- "hide-log-line": "",
+ "fields-section": "Mezők",
+ "hide-log-line": "Naplósor elrejtése",
"inline-mode": "",
- "links-section": "",
+ "links-section": "Hivatkozások",
"log-line-field": "",
- "log-line-section": "",
+ "log-line-section": "Naplósor",
"move-displayed-field-down": "",
"move-displayed-field-up": "",
- "no-details": "",
- "pin-line": "",
+ "no-details": "Nincs megjeleníthető mező.",
+ "pin-line": "Napló kitűzése",
"remove-displayed-field": "",
"search": {
- "no-results": ""
+ "no-results": "Nincs megjeleníthető találat."
},
- "search-placeholder": "",
- "show-context": "",
- "show-log-line": "",
+ "search-placeholder": "Mezőnevek és értékek keresése",
+ "show-context": "Kontextus megjelenítése",
+ "show-log-line": "Naplósor megjelenítése",
"sidebar-mode": "",
- "unpin-line": ""
+ "unpin-line": "Naplókitűzés feloldása"
},
"log-line-menu": {
"copy-link": "Hivatkozás másolása a naplósorba",
@@ -8855,12 +8860,12 @@
"unpin-from-outline": "Naplórögzítés feloldása"
},
"log-list-search": {
- "close": "",
- "filter": "",
- "info": "",
- "input-placeholder": "",
- "next": "",
- "prev": ""
+ "close": "Keresés bezárása",
+ "filter": "Megfelelő naplók szűrése",
+ "info": "Karakterláncok keresése a kliensoldalon a megjelenített naplókban. Nem tévesztendő össze a lekérdezési szűrőkkel. Használja ezt az összetevőt adott karakterláncok kereséséhez a naplóeredményekben.",
+ "input-placeholder": "Keresés a naplókban",
+ "next": "Következő eredmény",
+ "prev": "Előző eredmény"
},
"log-row-context-modal": {
"error-loading-log-more-logs": "Hiba a további naplók betöltésekor.",
@@ -8915,7 +8920,7 @@
"escape-newlines": "Helytelenül értelmezett újsor- és tabulátorkarakteres szekvenciák javítása a naplósorokban",
"font-size-default": "Kis betűméret használata",
"font-size-small": "Alapértelmezett betűméret használata",
- "hide-search": "",
+ "hide-search": "Keresés bezárása",
"hide-timestamps": "Időbélyegek elrejtése",
"hide-unique-labels": "Egyedi címkék elrejtése",
"newest-first": "Rendezés a legújabb naplók szerint – kattintson, hogy a legrégebbi naplók jelenjenek meg elsőként",
@@ -8924,7 +8929,7 @@
"remove-escaping": "Módosított értelmezés eltávolítása",
"scroll-bottom": "Görgetés az aljára",
"scroll-top": "Görgetés a tetejére",
- "show-search": "",
+ "show-search": "Keresés a naplóeredményekben",
"show-timestamps": "Időbélyegek megjelenítése",
"show-unique-labels": "Egyedi címkék megjelenítése",
"unwrap-lines": "Sortörés megszüntetése",
@@ -8942,26 +8947,26 @@
"common-labels": "Közös címkék:"
}
},
- "name-common-labels": "",
- "name-deduplication": "",
+ "name-common-labels": "Közös címkék",
+ "name-deduplication": "Duplikátumok törlése",
"name-details-mode": "",
"name-details-options": {
"label-inline": "",
"label-sidebar": ""
},
- "name-enable-infinite-scrolling": "",
- "name-enable-log-details": "",
- "name-enable-syntax-highlighting": "",
- "name-font-size": "",
- "name-order": "",
- "name-prettify-json": "",
- "name-show-controls": "",
- "name-time": "",
- "name-unique-labels": "",
- "name-wrap-lines": "",
+ "name-enable-infinite-scrolling": "Végtelen görgetés engedélyezése",
+ "name-enable-log-details": "Napló részleteinek engedélyezése",
+ "name-enable-syntax-highlighting": "Szintaxiskiemelés engedélyezése",
+ "name-font-size": "Betűméret",
+ "name-order": "Sorrend",
+ "name-prettify-json": "JSON szépítése",
+ "name-show-controls": "Vezérlőelemek megjelenítése",
+ "name-time": "Idő",
+ "name-unique-labels": "Egyedi címkék",
+ "name-wrap-lines": "Sortörés",
"order-options": {
- "label-newest-first": "",
- "label-oldest-first": ""
+ "label-newest-first": "Újabbat előre",
+ "label-oldest-first": "Régebbit előre"
},
"out-of-range-message": {
"end-of-the-selected-time-range": "A kijelölt időtartomány vége."
@@ -8975,7 +8980,7 @@
"un-themed-log-details": {
"aria-label-data-links": "Adathivatkozások",
"aria-label-fields": "Mezők",
- "aria-label-line": "",
+ "aria-label-line": "Naplósor",
"aria-label-log-level": "Naplózási szint",
"aria-label-no-details": "Nincsenek részletek"
},
@@ -8996,27 +9001,27 @@
}
},
"logs-new": {
- "category-logs": "",
+ "category-logs": "Naplók",
"deduplication-options": {
- "label-exact": "",
- "label-none": "",
- "label-numbers": "",
- "label-signature": ""
- },
- "description-infinite-scrolling": "",
- "description-show-controls": "",
- "description-syntax-highlighting": "",
- "name-deduplication": "",
- "name-enable-log-details": "",
- "name-infinite-scrolling": "",
- "name-order": "",
- "name-show-controls": "",
- "name-syntax-highlighting": "",
- "name-time": "",
- "name-wrap-lines": "",
+ "label-exact": "Pontos",
+ "label-none": "Nincs",
+ "label-numbers": "Számok",
+ "label-signature": "Aláírás"
+ },
+ "description-infinite-scrolling": "Kísérleti. További eredmények kéréséhez görgessen a naplók listájának aljára.",
+ "description-show-controls": "Vezérlők megjelenítése az utolsó vagy az első naplósorra ugráshoz és szűrés naplószint szerint",
+ "description-syntax-highlighting": "Használjon előre definiált szintaxisszínező grammatikát a naplósorok releváns részeinek kiemeléséhez",
+ "name-deduplication": "Duplikátumok törlése",
+ "name-enable-log-details": "Napló részleteinek engedélyezése",
+ "name-infinite-scrolling": "Végtelen görgetés engedélyezése",
+ "name-order": "Sorrend",
+ "name-show-controls": "Vezérlőelemek megjelenítése",
+ "name-syntax-highlighting": "Szintaxiskiemelés engedélyezése",
+ "name-time": "Idő",
+ "name-wrap-lines": "Sortörés",
"order-options": {
- "label-newest-first": "",
- "label-oldest-first": ""
+ "label-newest-first": "Újabbat előre",
+ "label-oldest-first": "Régebbit előre"
}
},
"manage-dashbaords": {
@@ -9714,12 +9719,12 @@
"rss-button": "Újdonságok a blogról"
},
"news": {
- "category-news": "",
- "description-show-image": "",
- "description-url": "",
+ "category-news": "Hírek",
+ "description-show-image": "Azt vezérli, hogy a szöveges tartalom felett megjelenik-e a hírelem (og:image) közösségi médiás képe",
+ "description-url": "Támogatja az RSS- és Atom-hírcsatornákat",
"link-title": "Tovább a Grafana labs blogjára",
- "name-show-image": "",
- "name-url": "",
+ "name-show-image": "Kép megjelenítése",
+ "name-url": "URL-cím",
"news-panel": {
"body-error-loading-rss-feed": "Győződjön meg arról, hogy a hírfolyam URL-címe helyes, és hogy a CORS helyesen van konfigurálva a kiszolgálón. Lásd: <2>Hírpanel dokumentációja.2>",
"loading": "Betöltés…",
@@ -9728,27 +9733,27 @@
"title": "Újdonságok a blogról"
},
"node-graph": {
- "category-edges": "",
- "category-node-graph": "",
- "category-nodes": "",
+ "category-edges": "Élek",
+ "category-node-graph": "Csomópontdiagram",
+ "category-nodes": "Csomópontok",
"layout-algorithm-options": {
- "description-force": "",
- "description-grid": "",
- "description-layered": "",
- "label-force": "",
- "label-grid": "",
- "label-layered": ""
- },
- "name-arc-sections": "",
- "name-layout-algorithm": "",
- "name-main-stat-unit": "",
- "name-secondary-stat-unit": "",
- "name-zoom-mode": "",
+ "description-force": "Erővektoros elrendezés",
+ "description-grid": "Rácsos elrendezés",
+ "description-layered": "Réteges elrendezés",
+ "label-force": "Erő",
+ "label-grid": "Rács",
+ "label-layered": "Réteges"
+ },
+ "name-arc-sections": "Ívszakaszok",
+ "name-layout-algorithm": "Elrendezési algoritmus",
+ "name-main-stat-unit": "Fő statisztikai egység",
+ "name-secondary-stat-unit": "Másodlagos statisztikai egység",
+ "name-zoom-mode": "Nagyítási mód",
"zoom-mode-options": {
- "description-cooperative": "",
- "description-greedy": "",
- "label-cooperative": "",
- "label-greedy": ""
+ "description-cooperative": "Lehetővé teszi az oldal normál görgetését",
+ "description-greedy": "Reagál minden nagyítási/kicsinyítési gesztusra",
+ "label-cooperative": "Együttműködéses",
+ "label-greedy": "Mohó"
}
},
"nodeGraph": {
@@ -9827,40 +9832,40 @@
},
"registry": {
"get-all-option-editors": {
- "description-time-zone": "",
- "name-time-zone": ""
+ "description-time-zone": "Időzóna kiválasztása",
+ "name-time-zone": "Időzóna"
},
"standard-field-condigs": {
- "category-data-links": ""
+ "category-data-links": "Adathivatkozások és műveletek"
},
"standard-field-configs": {
- "category": "",
- "category-thresholds": "",
- "category-value-mappings": "",
- "description-display-name": "",
- "description-field-min-max": "",
- "description-max": "",
- "description-min": "",
- "description-no-value": "",
- "description-value-mappings": "",
- "name-actions": "",
- "name-ad-hoc": "",
- "name-color-scheme": "",
- "name-data-links": "",
- "name-decimals": "",
- "name-display-name": "",
- "name-field-min-max": "",
- "name-max": "",
- "name-min": "",
- "name-no-value": "",
- "name-thresholds": "",
- "name-unit": "",
- "name-value-mappings": "",
- "placeholder-decimals": "",
- "placeholder-display-name": "",
- "placeholder-max": "",
- "placeholder-min": "",
- "placeholder-unit": ""
+ "category": "Standard opciók",
+ "category-thresholds": "Küszöbértékek",
+ "category-value-mappings": "Érték-hozzárendelések",
+ "description-display-name": "A mező vagy a sorozat nevének módosítása",
+ "description-field-min-max": "Min. és max. kiszámítása mezőnként",
+ "description-max": "Hagyja üresen az összes érték alapján történő számításhoz",
+ "description-min": "Hagyja üresen az összes érték alapján történő számításhoz",
+ "description-no-value": "Érték hiányában megjelenítendő",
+ "description-value-mappings": "Megjelenített szöveg módosítása a bemeneti érték alapján",
+ "name-actions": "Műveletek",
+ "name-ad-hoc": "Eseti alapon szűrhető",
+ "name-color-scheme": "Színséma",
+ "name-data-links": "Adathivatkozások",
+ "name-decimals": "Tizedesjegyek",
+ "name-display-name": "Megjelenített név",
+ "name-field-min-max": "Mező min./max. értéke",
+ "name-max": "Max.",
+ "name-min": "Min.",
+ "name-no-value": "Nincs érték",
+ "name-thresholds": "Küszöbértékek",
+ "name-unit": "Egység",
+ "name-value-mappings": "Érték-hozzárendelések",
+ "placeholder-decimals": "automatikus",
+ "placeholder-display-name": "nincs",
+ "placeholder-max": "automatikus",
+ "placeholder-min": "automatikus",
+ "placeholder-unit": "nincs"
}
},
"units": {
@@ -9969,13 +9974,13 @@
},
"panel-data-error-view": {
"missing-value": {
- "number": "",
- "string": "",
- "time": "",
- "unknown": ""
+ "number": "Az adatokból hiányzik egy számmező",
+ "string": "Az adatokból hiányzik egy karakterláncmező",
+ "time": "Az adatokból hiányzik egy időmező",
+ "unknown": "Nem lehet megjeleníteni az adatokat"
},
"no-value": {
- "default": ""
+ "default": "Nincs adat"
},
"open-visualization-suggestions": "Vizualizációs javaslatok megnyitása",
"switch-to-table": "Váltás táblázatra"
@@ -10015,25 +10020,25 @@
"select-placeholder": "Szűrés típus szerint"
},
"piechart": {
- "category-legend": "",
- "category-pie-chart": "",
- "description-labels": "",
- "description-pie-chart-type": "",
+ "category-legend": "Jelmagyarázat",
+ "category-pie-chart": "Kördiagram",
+ "description-labels": "Válassza ki a kördiagramban megjelenítendő címkéket",
+ "description-pie-chart-type": "Kördiagram megjelenítési módja",
"labels-options": {
- "label-name": "",
- "label-percent": "",
- "label-value": ""
+ "label-name": "Név",
+ "label-percent": "Százalék",
+ "label-value": "Érték"
},
"legend-values-options": {
- "label-percent": "",
- "label-value": ""
+ "label-percent": "Százalék",
+ "label-value": "Érték"
},
- "name-labels": "",
- "name-legend-values": "",
- "name-pie-chart-type": "",
+ "name-labels": "Címkék",
+ "name-legend-values": "Jelmagyarázati értékek",
+ "name-pie-chart-type": "Kördiagram típusa",
"pie-chart-type-options": {
- "label-donut": "",
- "label-pie": ""
+ "label-donut": "Fánkdiagram",
+ "label-pie": "Kördiagram"
}
},
"playlist": {
@@ -10201,7 +10206,7 @@
"dependencies": "Függőségek",
"documentation": "Dokumentáció",
"downloads": "Letöltések",
- "from": "",
+ "from": "Kezdet",
"installedVersion": "Telepített verzió",
"lastCommitDate": "Legutóbbi teljesítés dátuma:",
"latestReleaseDate": "Legújabb kiadás dátuma:",
@@ -10271,7 +10276,7 @@
},
"install-controls-warning": {
"body-not-published": "Ez a bővítmény nincs közzétéve a <2>grafana.com/plugins2> weboldalon, és nem kezelhető a katalóguson keresztül.",
- "enterprise-plugin-info": "",
+ "enterprise-plugin-info": "Ez a beépülő modul csak a Grafana Cloud és a Grafana Enterprise szolgáltatásban érhető el.",
"learn-more": "További információk",
"no-valid-grafana-enterprise-license-detected": "Nem található érvényes Grafana Enterprise-licenc.",
"title-dev-alert": "Ez a bővítmény fejlesztési változata, és nem távolítható el.",
@@ -10429,13 +10434,13 @@
},
"provisioned-resource-form": {
"save-or-delete-resource-shared-fields": {
- "comment-placeholder-describe-changes-optional": "",
- "description-branch-name-in-git-hub": "",
+ "comment-placeholder-describe-changes-optional": "Megjegyzés hozzáadása a módosítások leírásához (nem kötelező)",
+ "description-branch-name-in-git-hub": "Ág neve a GitHubon",
"description-inside-repository": "",
- "label-branch": "",
- "label-comment": "",
- "label-path": "",
- "label-workflow": ""
+ "label-branch": "Ág",
+ "label-comment": "Megjegyzés",
+ "label-path": "Útvonal",
+ "label-workflow": "Munkafolyamat"
}
},
"provisioned-resource-preview-banner": {
@@ -11715,112 +11720,112 @@
},
"stat": {
"add-orientation-option": {
- "description-orientation": "",
- "name-orientation": "",
+ "description-orientation": "Elrendezés tájolása",
+ "name-orientation": "Tájolás",
"orientation-options": {
- "label-auto": "",
- "label-horizontal": "",
- "label-vertical": ""
+ "label-auto": "Automatikus",
+ "label-horizontal": "Vízszintes",
+ "label-vertical": "Függőleges"
}
},
"add-standard-data-reduce-options": {
- "category-value-options": "",
- "description-calculation": "",
- "description-fields": "",
- "description-limit": "",
- "description-show": "",
+ "category-value-options": "Értékbeállítások",
+ "description-calculation": "Válasszon egy szűkítőfüggvényt/-számítást",
+ "description-fields": "Válassza ki a panelen szerepeltetni kívánt mezőket",
+ "description-limit": "Megjelenítendő sorok maximális száma",
+ "description-show": "Oszloponként vagy sorozatként egyetlen érték kiszámítása vagy az egyes sorok megjelenítése",
"fields-options": {
- "label-all-fields": "",
- "label-numeric-fields": ""
+ "label-all-fields": "Minden mező",
+ "label-numeric-fields": "Numerikus mezők"
},
- "name-calculation": "",
- "name-fields": "",
- "name-limit": "",
- "name-show": "",
+ "name-calculation": "Számítás",
+ "name-fields": "Mezők",
+ "name-limit": "Korlát",
+ "name-show": "Megjelenítés",
"show-options": {
- "label-all-values": "",
- "label-calculate": ""
+ "label-all-values": "Összes érték",
+ "label-calculate": "Számítás"
}
},
- "category-stat-styles": "",
+ "category-stat-styles": "Statisztikai stílusok",
"color-mode-options": {
- "label-background-gradient": "",
- "label-background-solid": "",
- "label-none": "",
- "label-value": ""
+ "label-background-gradient": "Színátmenetes háttér",
+ "label-background-solid": "Egyszínű háttér",
+ "label-none": "Nincs",
+ "label-value": "Érték"
},
- "description-graph-mode": "",
- "description-text-mode": "",
+ "description-graph-mode": "Statisztikai panel grafikonos/értékgörbés üzemmódja",
+ "description-text-mode": "Szabályozza, hogy a név és az érték is megjelenjen, vagy csak a név",
"graph-mode": {
"options": {
- "label-area": "",
- "label-none": ""
+ "label-area": "Terület",
+ "label-none": "Nincs"
}
},
"name-color-modcolor-mode-options": {
- "label": ""
- },
- "name-graph-mode": "",
- "name-show-percent-change": "",
- "name-text-alignment": "",
- "name-text-mode": "",
- "name-wide-layout": "",
- "percent-change-color-mode": "",
+ "label": "Színezett mód"
+ },
+ "name-graph-mode": "Grafikonos mód",
+ "name-show-percent-change": "Változások százalékos arányának megjelenítése",
+ "name-text-alignment": "Szöveg igazítása",
+ "name-text-mode": "Szöveges mód",
+ "name-wide-layout": "Széles elrendezés",
+ "percent-change-color-mode": "Százalékos változás színezett módja",
"percent-change-color-mode-options": {
- "label-inverted": "",
- "label-same-as-value": "",
- "label-standard": ""
+ "label-inverted": "Invertált",
+ "label-same-as-value": "Értékkel megegyező",
+ "label-standard": "Standard"
},
"text-alignment-options": {
- "label-auto": "",
- "label-center": ""
+ "label-auto": "Automatikus",
+ "label-center": "Középre"
},
"text-mode-options": {
- "label-auto": "",
- "label-name": "",
- "label-none": "",
- "label-value": "",
- "label-value-and-name": ""
+ "label-auto": "Automatikus",
+ "label-name": "Név",
+ "label-none": "Nincs",
+ "label-value": "Érték",
+ "label-value-and-name": "Érték és név"
},
"wide-layout-options": {
- "label-off": "",
- "label-on": ""
+ "label-off": "Ki",
+ "label-on": "Be"
}
},
"state-timeline": {
"align-values-options": {
- "label-center": "",
- "label-left": "",
- "label-right": ""
- },
- "category-state-timeline": "",
- "name-align-values": "",
- "name-connect-null-values": "",
- "name-disconnect-values": "",
- "name-fill-opacity": "",
- "name-line-width": "",
- "name-merge-equal-consecutive-values": "",
- "name-page-size": "",
- "name-row-height": "",
- "name-show-values": "",
+ "label-center": "Középre",
+ "label-left": "Balra",
+ "label-right": "Jobbra"
+ },
+ "category-state-timeline": "Állapot idővonala",
+ "name-align-values": "Értékek igazítása",
+ "name-connect-null-values": "Nulla értékek összekapcsolása",
+ "name-disconnect-values": "Értékek leválasztása",
+ "name-fill-opacity": "Kitöltési átlátszóság",
+ "name-line-width": "Vonal szélessége",
+ "name-merge-equal-consecutive-values": "Egyenlő, egymást követő értékek egyesítése",
+ "name-page-size": "Oldalméret (oldalszámozás engedélyezése)",
+ "name-row-height": "Sormagasság",
+ "name-show-values": "Értékek megjelenítése",
"show-values-options": {
- "label-always": "",
- "label-auto": "",
- "label-never": ""
+ "label-always": "Mindig",
+ "label-auto": "Automatikus",
+ "label-never": "Soha"
}
},
"status-history": {
- "category-status-history": "",
- "name-column-width": "",
- "name-fill-opacity": "",
- "name-line-width": "",
- "name-page-size": "",
- "name-row-height": "",
- "name-show-values": "",
+ "category-status-history": "Állapotelőzmények",
+ "name-column-width": "Oszlopszélesség",
+ "name-fill-opacity": "Kitöltési átlátszóság",
+ "name-line-width": "Vonal szélessége",
+ "name-page-size": "Oldalméret (oldalszámozás engedélyezése)",
+ "name-row-height": "Sormagasság",
+ "name-show-values": "Értékek megjelenítése",
"show-values-options": {
- "label-always": "",
- "label-auto": "",
- "label-never": ""
+ "label-always": "Mindig",
+ "label-auto": "Automatikus",
+ "label-never": "Soha"
},
"status-history-panel": {
"too-many-points_one": "Túl sok a pont a megfelelő megjelenítéshez. <1>1>Frissítse a lekérdezést, hogy kevesebb pontot adjon vissza. <3>3>({{count}} pont érkezett)",
@@ -11860,13 +11865,13 @@
"label-gauge-display-mode": "Mérőeszköz kijelzési módja",
"label-value-display": "Érték megjelenítése"
},
- "category-cell-options": "",
- "category-table": "",
- "category-table-footer": "",
+ "category-cell-options": "Cellabeállítások",
+ "category-table": "Táblázat",
+ "category-table-footer": "Táblázat lábléce",
"cell-height-options": {
- "label-large": "",
- "label-medium": "",
- "label-small": ""
+ "label-large": "Nagy",
+ "label-medium": "Közepes",
+ "label-small": "Kicsi"
},
"color-background-cell-options-editor": {
"description-apply-to-entire-row": "Ha ki van választva, a teljes sor olyan színű lesz, mint ez a cella.",
@@ -11880,22 +11885,22 @@
"wrap-text": "Sortörés"
},
"column-alignment-options": {
- "label-auto": "",
- "label-center": "",
- "label-left": "",
- "label-right": ""
+ "label-auto": "Automatikus",
+ "label-center": "Középre",
+ "label-left": "Balra",
+ "label-right": "Jobbra"
},
"container": {
"content": "Ha túl sok oszlopot jelenít meg egyetlen táblázatban, az hatással lehet a teljesítményre, és megnehezítheti az adatok olvasását. Mérlegelje a lekérdezések pontosítását.",
"show-all-series": "Összes oszlop megjelenítése",
"show-only-series": "Csak {{MAX_NUMBER_OF_COLUMNS}} oszlop megjelenítése"
},
- "description-calculation": "",
- "description-cell-value-inspect": "",
- "description-column-filter": "",
- "description-count-rows": "",
- "description-fields": "",
- "description-min-column-width": "",
+ "description-calculation": "Válasszon egy szűkítőfüggvényt/-számítást",
+ "description-cell-value-inspect": "A cellaérték ellenőrzésének engedélyezése egy modális ablakban",
+ "description-column-filter": "Engedélyezi/letiltja a mezőszűrőket a táblázatban",
+ "description-count-rows": "Egyetlen szám megjelenítése az összes adatsorhoz",
+ "description-fields": "Válassza ki a kiszámítandó mezőket",
+ "description-min-column-width": "Az oszlop automatikus átméretezésének minimális szélessége",
"description-wrap-header-text": "",
"image-cell-options-editor": {
"description-alt-text": "Helyettesítő szöveg, amely akkor jelenik meg, ha egy kép nem jeleníthető meg, és amely a képernyőolvasót használó felhasználóknak hasznos",
@@ -11903,61 +11908,61 @@
"label-alt-text": "Helyettesítő szöveg",
"label-title-text": "Cím szövege"
},
- "name-calculation": "",
- "name-cell-height": "",
- "name-cell-type": "",
- "name-cell-value-inspect": "",
- "name-column-alignment": "",
- "name-column-filter": "",
- "name-column-width": "",
- "name-count-rows": "",
- "name-enable-paginations": "",
- "name-fields": "",
- "name-hide-in-table": "",
- "name-min-column-width": "",
- "name-show-table-footer": "",
- "name-show-table-header": "",
- "name-wrap-header-text": "",
- "placeholder-column-width": "",
- "placeholder-fields": ""
+ "name-calculation": "Számítás",
+ "name-cell-height": "Cellamagasság",
+ "name-cell-type": "Cellatípus",
+ "name-cell-value-inspect": "Cellaérték ellenőrzése",
+ "name-column-alignment": "Oszlop igazítása",
+ "name-column-filter": "Oszlopszűrő",
+ "name-column-width": "Oszlopszélesség",
+ "name-count-rows": "Sorok számlálása",
+ "name-enable-paginations": "Oldalszámozás engedélyezése",
+ "name-fields": "Mezők",
+ "name-hide-in-table": "Elrejtés a táblázatban",
+ "name-min-column-width": "Minimális oszlopszélesség",
+ "name-show-table-footer": "Táblázatlábléc megjelenítése",
+ "name-show-table-header": "Táblázatfejléc megjelenítése",
+ "name-wrap-header-text": "Fejléc szövegének tördelése",
+ "placeholder-column-width": "automatikus",
+ "placeholder-fields": "Numerikus mezők"
},
"table-new": {
- "category-cell-options": "",
- "category-table": "",
- "category-table-footer": "",
+ "category-cell-options": "Cellabeállítások",
+ "category-table": "Táblázat",
+ "category-table-footer": "Táblázat lábléce",
"cell-height-options": {
- "label-large": "",
- "label-medium": "",
- "label-small": ""
+ "label-large": "Nagy",
+ "label-medium": "Közepes",
+ "label-small": "Kicsi"
},
"column-alignment-options": {
- "label-auto": "",
- "label-center": "",
- "label-left": "",
- "label-right": ""
- },
- "description-calculation": "",
- "description-cell-value-inspect": "",
- "description-column-filter": "",
- "description-count-rows": "",
- "description-fields": "",
- "description-min-column-width": "",
- "name-calculation": "",
- "name-cell-height": "",
- "name-cell-type": "",
- "name-cell-value-inspect": "",
- "name-column-alignment": "",
- "name-column-filter": "",
- "name-column-width": "",
- "name-count-rows": "",
- "name-enable-pagination": "",
- "name-fields": "",
- "name-hide-in-table": "",
- "name-min-column-width": "",
- "name-show-table-footer": "",
- "name-show-table-header": "",
- "placeholder-column-width": "",
- "placeholder-fields": ""
+ "label-auto": "Automatikus",
+ "label-center": "Középre",
+ "label-left": "Balra",
+ "label-right": "Jobbra"
+ },
+ "description-calculation": "Válasszon egy szűkítőfüggvényt/-számítást",
+ "description-cell-value-inspect": "A cellaérték ellenőrzésének engedélyezése egy modális ablakban",
+ "description-column-filter": "Engedélyezi/letiltja a mezőszűrőket a táblázatban",
+ "description-count-rows": "Egyetlen szám megjelenítése az összes adatsorhoz",
+ "description-fields": "Válassza ki a kiszámítandó mezőket",
+ "description-min-column-width": "Az oszlop automatikus átméretezésének minimális szélessége",
+ "name-calculation": "Számítás",
+ "name-cell-height": "Cellamagasság",
+ "name-cell-type": "Cellatípus",
+ "name-cell-value-inspect": "Cellaérték ellenőrzése",
+ "name-column-alignment": "Oszlop igazítása",
+ "name-column-filter": "Oszlopszűrő",
+ "name-column-width": "Oszlopszélesség",
+ "name-count-rows": "Sorok számlálása",
+ "name-enable-pagination": "Oldalszámozás engedélyezése",
+ "name-fields": "Mezők",
+ "name-hide-in-table": "Elrejtés a táblázatban",
+ "name-min-column-width": "Minimális oszlopszélesség",
+ "name-show-table-footer": "Táblázatlábléc megjelenítése",
+ "name-show-table-header": "Táblázatfejléc megjelenítése",
+ "placeholder-column-width": "automatikus",
+ "placeholder-fields": "Numerikus mezők"
},
"tag-filter": {
"clear-button": "Címkék törlése",
@@ -12042,17 +12047,17 @@
}
},
"text": {
- "category-text": "",
+ "category-text": "Szöveg",
"mode-options": {
- "label-code": "",
- "label-html": "",
- "label-markdown": ""
+ "label-code": "Kód",
+ "label-html": "HTML",
+ "label-markdown": "Markdown"
},
- "name-content": "",
- "name-language": "",
- "name-mode": "",
- "name-show-line-numbers": "",
- "name-show-mini-map": ""
+ "name-content": "Tartalom",
+ "name-language": "Nyelv",
+ "name-mode": "Mód",
+ "name-show-line-numbers": "Sorszámozás megjelenítése",
+ "name-show-mini-map": "Minitérkép megjelenítése"
},
"theme-preview": {
"breadcrumbs": {
@@ -12100,7 +12105,7 @@
"apply-button": "Időtartomány alkalmazása",
"default-error": "Adjon meg egy múltbeli dátumot vagy a „{{now}}” értéket",
"fiscal-year": "Pénzügyi év: {{from}} – {{to}}",
- "from-input": "",
+ "from-input": "Kezdet",
"open-input-calendar": "Naptár megnyitása",
"range-error": "A „Kezdete” nem lehet a „Vége” után",
"to-input": "Vége"
@@ -12118,7 +12123,7 @@
"aria-role": "Időtartomány kijelölése",
"default-title": "Időtartományok",
"example-title": "Példa időtartományokra",
- "from-label": "",
+ "from-label": "Kezdet",
"from-to": "{{timeOptionFrom}} – {{timeOptionTo}}",
"specify": "Adja meg az időtartományt",
"submit-button-label": "TimePicker küldés gombja",
@@ -12131,8 +12136,8 @@
},
"timeline": {
"missing-field": {
- "all": "",
- "time": ""
+ "all": "Nincsenek grafikonon megjeleníthető mezők",
+ "time": "Az adatok nem rendelkeznek időmezővel"
}
},
"timeseries": {
@@ -12150,54 +12155,54 @@
"tooltip-delete": "Törlés",
"tooltip-edit": "Szerkesztés"
},
- "category-axis": "",
+ "category-axis": "Tengely",
"config": {
"get-graph-field-config": {
- "aria-label-bar-width-factor": "",
- "aria-label-fill-opacity": "",
- "aria-label-line-width": "",
- "aria-label-point-size": "",
- "category-graph-styles": "",
- "category-thresholds": "",
- "name-bar-alignment": "",
- "name-bar-width-factor": "",
- "name-connect-nulls": "",
- "name-disconnect-values": "",
- "name-fill-below-to": "",
- "name-fill-opacity": "",
- "name-gradient-mode": "",
- "name-line-interpolation": "",
- "name-line-style": "",
- "name-line-width": "",
- "name-point-size": "",
- "name-show-points": "",
- "name-show-thresholds": "",
- "name-style": "",
- "name-transform": "",
+ "aria-label-bar-width-factor": "Sávszélességi tényező",
+ "aria-label-fill-opacity": "Kitöltési átlátszóság",
+ "aria-label-line-width": "Vonal szélessége",
+ "aria-label-point-size": "Pontméret",
+ "category-graph-styles": "Grafikonstílusok",
+ "category-thresholds": "Küszöbértékek",
+ "name-bar-alignment": "Sáv igazítása",
+ "name-bar-width-factor": "Sávszélességi tényező",
+ "name-connect-nulls": "Nulla értékek összekapcsolása",
+ "name-disconnect-values": "Értékek leválasztása",
+ "name-fill-below-to": "Kitöltés alatta eddig:",
+ "name-fill-opacity": "Kitöltési átlátszóság",
+ "name-gradient-mode": "Színátmenetes mód",
+ "name-line-interpolation": "Vonalinterpoláció",
+ "name-line-style": "Vonal stílusa",
+ "name-line-width": "Vonal szélessége",
+ "name-point-size": "Pontméret",
+ "name-show-points": "Pontok megjelenítése",
+ "name-show-thresholds": "Küszöbértékek megjelenítése",
+ "name-style": "Stílus",
+ "name-transform": "Transzformáció",
"transform-options": {
- "description-constant": "",
- "description-style": "",
- "label-constant": "",
- "label-style": ""
+ "description-constant": "Az első érték állandó vonalként jelenik meg",
+ "description-style": "Az eredmények negatív értékekre fordítása az y tengelyen",
+ "label-constant": "Konstans",
+ "label-style": "Negatív Y"
}
}
},
"insert-nulls-editor": {
"disconnect-options": {
- "label-never": "",
- "label-threshold": ""
+ "label-never": "Soha",
+ "label-threshold": "Küszöb"
}
},
"line-style-editor": {
"line-fill-options": {
- "label-dash": "",
- "label-dots": "",
- "label-solid": ""
+ "label-dash": "Szaggatott",
+ "label-dots": "Pontozott",
+ "label-solid": "Folytonos"
},
"title-the-input-expects-a-segment-list": "A bemenet szegmenslistát vár",
"tooltip-help": "Súgó"
},
- "name-time-zone": "",
+ "name-time-zone": "Időzóna",
"nulls-threshold-input": {
"placeholder-never": "Soha"
},
@@ -12207,9 +12212,9 @@
},
"span-nulls-editor": {
"gaps-options": {
- "label-always": "",
- "label-never": "",
- "label-threshold": ""
+ "label-always": "Mindig",
+ "label-never": "Soha",
+ "label-threshold": "Küszöb"
}
},
"timezones-editor": {
@@ -12218,17 +12223,17 @@
}
},
"traces": {
- "category-span-filters": "",
- "name-critical-path-only": "",
- "name-find-in-trace": "",
- "name-max-duration": "",
- "name-min-duration": "",
- "name-service-name": "",
- "name-service-name-operator": "",
- "name-show-matches-only": "",
- "name-span-name": "",
- "name-span-name-operator": "",
- "name-tags": "",
+ "category-span-filters": "Terjedelemszűrők",
+ "name-critical-path-only": "Csak a kritikus útvonal megjelenítése",
+ "name-find-in-trace": "Keresés a nyomvonalon",
+ "name-max-duration": "Max. időtartam",
+ "name-min-duration": "Min. időtartam",
+ "name-service-name": "Szolgáltatásnév",
+ "name-service-name-operator": "Szolgáltatásnév operátora",
+ "name-show-matches-only": "Csak egyezések megjelenítése",
+ "name-span-name": "Terjedelemnév",
+ "name-span-name-operator": "Terjedelemnév operátora",
+ "name-tags": "Címkék",
"traces-panel": {
"no-data-found-in-response": "Nem található adat a válaszban"
}
@@ -12243,20 +12248,20 @@
"axis-editor": {
"log-mode-options": {
"description": {
- "split-the-buckets-based-on-size": ""
+ "split-the-buckets-based-on-size": "Tárolók felosztása méret alapján"
},
"label": {
- "split": ""
+ "split": "Osztott"
}
},
"mode-options": {
"description": {
- "split-the-buckets-based-on-count": "",
- "split-the-buckets-based-on-size": ""
+ "split-the-buckets-based-on-count": "Tárolók felosztása szám alapján",
+ "split-the-buckets-based-on-size": "Tárolók felosztása méret alapján"
},
"label": {
- "count": "",
- "size": ""
+ "count": "Szám",
+ "size": "Méret"
}
},
"placeholder-auto": "Automatikus"
@@ -12288,9 +12293,9 @@
},
"calculate-heatmap": {
"add-heatmap-calculation-options": {
- "name-x-bucket": "",
- "name-y-bucket": "",
- "name-y-bucket-scale": ""
+ "name-x-bucket": "X tároló",
+ "name-y-bucket": "Y tároló",
+ "name-y-bucket-scale": "Y tároló skálája"
}
},
"concatenate-transformer-editor": {
@@ -12351,8 +12356,8 @@
"tooltip-enable": "Engedélyezés"
},
"draggable-sort-order": {
- "asc": "",
- "desc": "",
+ "asc": "NÖVEKVŐ",
+ "desc": "CSÖKKENŐ",
"off": "Ki"
},
"editors": {
@@ -12751,9 +12756,9 @@
"description": {
"reorder-hide-or-rename-fields": ""
},
- "field-order": "",
+ "field-order": "Mezőrendezés",
"field-order-auto": "Automatikus",
- "field-order-manual": "",
+ "field-order-manual": "Kézi",
"first-frame-warning": "A mezők rendszerezése csak egyetlen kerettel működik. Először érdemes lehet egyesítési transzformációt alkalmazni, vagy szűrni a bemenetet.",
"name": {
"organize-fields": ""
@@ -12880,7 +12885,7 @@
"polynomial": "Polinomiális"
}
},
- "regression": "",
+ "regression": "regresszió",
"tooltip-number-of-xy-points-to-predict": "Előre jelzendő X,Y pontok száma"
},
"rename-by-regex-transformer": {
@@ -13033,10 +13038,10 @@
}
},
"trend": {
- "category-x-axis": "",
- "description-x-field": "",
- "name-x-field": "",
- "placeholder-x-field": ""
+ "category-x-axis": "X tengely",
+ "description-x-field": "Növekvő számérték",
+ "name-x-field": "X mező",
+ "placeholder-x-field": "Első számérték"
},
"upgrade-box": {
"discovery-text": "Felfedezett egy Pro funkciót!",
@@ -13299,20 +13304,20 @@
}
},
"xychart": {
- "category-xychart": "",
- "name-fill-opacity": "",
- "name-line-style": "",
- "name-line-width": "",
- "name-max-point-size": "",
- "name-min-point-size": "",
- "name-point-shape": "",
- "name-point-size": "",
- "name-point-stroke-width": "",
- "name-series-mapping": "",
- "name-show": "",
+ "category-xychart": "XY diagram",
+ "name-fill-opacity": "Kitöltési átlátszóság",
+ "name-line-style": "Vonal stílusa",
+ "name-line-width": "Vonal szélessége",
+ "name-max-point-size": "Max. pontméret",
+ "name-min-point-size": "Min. pontméret",
+ "name-point-shape": "Pontalak",
+ "name-point-size": "Pontméret",
+ "name-point-stroke-width": "Pont vonalvastagsága",
+ "name-series-mapping": "Sorozat-hozzárendelés",
+ "name-show": "Megjelenítés",
"point-shape-options": {
- "label-circle": "",
- "label-square": ""
+ "label-circle": "Kör",
+ "label-square": "Szögletes"
},
"series-editor": {
"add-series": "Sorozat hozzáadása",
@@ -13324,18 +13329,18 @@
"label-y-field": "Y mező",
"placeholder-all-frames": "Összes keret",
"placeholder-select-frame": "Keret kiválasztása",
- "placeholder-x-field": "",
- "placeholder-y-field": "",
+ "placeholder-x-field": "Első szám vagy időmező minden keretben",
+ "placeholder-y-field": "Fennmaradó számmezők minden keretben",
"tooltip-delete-series": "Sorozat törlése"
},
"series-mapping-options": {
- "label-auto": "",
- "label-manual": ""
+ "label-auto": "Automatikus",
+ "label-manual": "Kézi"
},
"show-options": {
- "label-both": "",
- "label-lines": "",
- "label-points": ""
+ "label-both": "Mindkettő",
+ "label-lines": "Vonalak",
+ "label-points": "Pontok"
}
}
}
\ No newline at end of file
diff --git a/public/locales/id-ID/grafana.json b/public/locales/id-ID/grafana.json
index b909873eeb7..0da6b56956c 100644
--- a/public/locales/id-ID/grafana.json
+++ b/public/locales/id-ID/grafana.json
@@ -119,10 +119,10 @@
"users-heading": "Pengguna organisasi"
},
"enterprise-auth-features-card": {
- "dismiss": "",
- "heading": "",
- "learn-more-link": "",
- "text": ""
+ "dismiss": "Tutup",
+ "heading": "Autentikasi perusahaan",
+ "learn-more-link": "Pelajari lebih lanjut",
+ "text": "Kelola pengguna, tim, dan izin secara otomatis dengan <1>SAML1>, <3>SCIM3>, <6>LDAP6>, dan <8>RBAC8> — tersedia di Grafana Cloud dan Enterprise."
},
"feature-listing": {
"title-auditing": "Audit",
@@ -374,8 +374,8 @@
"am-active-timing-select-label-active-timings": "Pengaturan waktu aktif"
},
"ad": {
- "close": "",
- "learn-more": ""
+ "close": "Tutup",
+ "learn-more": "Pelajari lebih lanjut"
},
"add-button": {
"add-more": "Tambah lagi"
@@ -404,12 +404,12 @@
"missing-series-resolve": "Rangkaian tidak ada, evaluasi gagal diselesaikan",
"no-annotations": "Tidak ada anotasi",
"notification-configuration": {
- "active-timings": "",
+ "active-timings": "Interval waktu aktif",
"contact-point": "Titik kontak",
"group-by": "Dikelompokkan berdasarkan",
- "group-title": "",
+ "group-title": "Konfigurasi pemberitahuan",
"mute-timings": "Pengaturan waktu pembisuan",
- "timing-options": ""
+ "timing-options": "Pengaturan waktu"
},
"pending-period": "Periode tertunda",
"rule": "Aturan",
@@ -957,7 +957,7 @@
},
"contactPoints": {
"validation": {
- "notFound": ""
+ "notFound": "Titik kontak \"{{contactPoint}}\" tidak dapat ditemukan"
}
},
"continue-matching-indicator": {
@@ -966,7 +966,7 @@
"copy-to-clipboard": "Salin \"{{label}}\" ke papan klip",
"create-metadata": {
"label": {
- "contact-point": "",
+ "contact-point": "Pemberitahuan dikirimkan ke",
"dashboard": "Dasbor",
"dashboard-and-panel": "Dasbor dan panel",
"evaluation-interval": "Interval evaluasi",
@@ -1114,7 +1114,7 @@
"content-show-all-errors": "Tampilkan semua kesalahan"
},
"errors": {
- "failedWith": ""
+ "failedWith": "{{-config}} gagal dengan {{status}}: {{-message}}"
},
"evaluate-every-validation-options": {
"message": {
@@ -1562,20 +1562,20 @@
}
},
"home": {
- "irm-card-description": "",
- "irm-card-item-1": "",
- "irm-card-item-2": "",
- "irm-card-item-3": "",
- "irm-card-item-4": "",
- "irm-card-title": "",
+ "irm-card-description": "Gabungkan on-call, peringatan, dan respons insiden dengan Grafana Cloud IRM.",
+ "irm-card-item-1": "Kelola jadwal on-call dengan kalender Anda atau Terraform.",
+ "irm-card-item-2": "Tanggapi insiden melalui web, aplikasi, Slack, atau saluran lainnya.",
+ "irm-card-item-3": "Temukan akar masalah dengan Grafana SIFT yang didukung AI.",
+ "irm-card-item-4": "Lakukan analisis insiden terdahulu untuk meningkatkan respons dan ketahanan.",
+ "irm-card-title": "Respons dan manajemen insiden",
"label-get-started": "Mulai",
"label-insights": "Wawasan",
- "synthetic-monitoring-card-description": "",
- "synthetic-monitoring-card-item-1": "",
- "synthetic-monitoring-card-item-2": "",
- "synthetic-monitoring-card-item-3": "",
- "synthetic-monitoring-card-item-4": "",
- "synthetic-monitoring-card-title": "",
+ "synthetic-monitoring-card-description": "Pantau aliran pengguna, situs web, dan API yang krusial secara eksternal, dari lokasi global.",
+ "synthetic-monitoring-card-item-1": "Simulasikan perjalanan pengguna end-to-end dengan pemeriksaan browser.",
+ "synthetic-monitoring-card-item-2": "Jalankan pemeriksaan ping, DNS, HTTP/S, dan TCP di setiap layer jaringan.",
+ "synthetic-monitoring-card-item-3": "Gunakan 20+ probe global atau probe pribadi di belakang firewall Anda.",
+ "synthetic-monitoring-card-item-4": "Lacak SLO dengan peringatan yang mirip cara kerja Prometheus bawaan—langsung dari UI.",
+ "synthetic-monitoring-card-title": "Pemantauan Sintetis",
"title-alerting": "Alerting"
},
"import-to-gma": {
@@ -1590,7 +1590,7 @@
"no-rules-body-yaml": "Tidak ada aturan untuk diimpor. Silakan pilih file yaml lain.",
"no-rules-title": "Tidak ada aturan untuk diimpor",
"not-using-rules-managed-by-integrations-or-plugins": {
- "text": "",
+ "text": "Aturan yang dikelola oleh integrasi atau plugin tidak boleh diimpor ke aturan yang dikelola Grafana.",
"title": "Informasi"
},
"plugin-rules-warning": {
@@ -1969,7 +1969,7 @@
},
"notification-policies-filter": {
"label-search-by-contact-point": "Cari berdasarkan titik kontak",
- "placeholder-search-by-contact-point": "",
+ "placeholder-search-by-contact-point": "Pilih titik kontak",
"search-query-input-placeholder-search": "Cari"
},
"notification-policies-list": {
@@ -2477,7 +2477,7 @@
"new-badge": "Baru!",
"text": "Impor ke aturan yang dikelola Grafana"
},
- "loading-more-groups": "",
+ "loading-more-groups": "Memuat lebih banyak grup...",
"more": "Lebih banyak",
"new-alert-rule": "Aturan peringatan baru",
"new-datasource-recording-rule": "Aturan Perekaman sumber data baru",
@@ -3025,51 +3025,51 @@
}
},
"alertlist": {
- "category-alert-state-filter": "",
- "category-filter": "",
- "category-options": "",
- "descriptino-alerts-linked-to-dashboard": "",
- "description-alert-instance-label": "",
- "description-alert-name": "",
- "description-datasource": "",
- "description-folder": "",
- "description-group-by": "",
- "description-group-mode": "",
- "description-max-items": "",
- "description-show-inactive-alerts": "",
- "description-sort-order": "",
- "description-view-mode": "",
+ "category-alert-state-filter": "Filter status peringatan",
+ "category-filter": "Filter",
+ "category-options": "Opsi",
+ "descriptino-alerts-linked-to-dashboard": "Hanya tampilkan peringatan yang ditautkan ke dasbor ini",
+ "description-alert-instance-label": "Filter instans peringatan menggunakan kueri label, misalnya: {severity=\"critical\", instance=~\"cluster-us-.+\"}",
+ "description-alert-name": "Filter untuk peringatan yang berisi teks ini",
+ "description-datasource": "Filter dari sumber peringatan",
+ "description-folder": "Filter untuk peringatan di folder yang dipilih (hanya untuk aturan peringatan yang dikelola Grafana)",
+ "description-group-by": "Filter peringatan menggunakan kueri label",
+ "description-group-mode": "Cara pengelompokan instans peringatan",
+ "description-max-items": "Peringatan maksimum untuk ditampilkan",
+ "description-show-inactive-alerts": "Sertakan aturan peringatan yang memiliki 0 (nol) instans. Karena tidak memiliki instans, aturan ini tetap tersembunyi jika filter label instans Peringatan dikonfigurasi.",
+ "description-sort-order": "Urutan peringatan dan instans peringatan",
+ "description-view-mode": "Beralih antara tampilan daftar dan tampilan statistik",
"group-by": {
"aria-label-group-by-label-keys": "kelompokkan berdasarkan kunci label",
"placeholder-group-by": "Kelompokkan berdasarkan"
},
"group-mode-options": {
- "label-custom-grouping": "",
- "label-default-grouping": ""
- },
- "name-alert-instance-label": "",
- "name-alert-name": "",
- "name-alerts-linked-to-dashboard": "",
- "name-datasource": "",
- "name-error": "",
- "name-firing": "",
- "name-folder": "",
- "name-group-by": "",
- "name-group-mode": "",
- "name-max-items": "",
- "name-no-data": "",
- "name-normal": "",
- "name-pending": "",
- "name-recovering": "",
- "name-show-inactive-alerts": "",
- "name-sort-order": "",
- "name-view-mode": "",
+ "label-custom-grouping": "Pengelompokan kustom",
+ "label-default-grouping": "Pengelompokan default"
+ },
+ "name-alert-instance-label": "Label instans peringatan",
+ "name-alert-name": "Nama peringatan",
+ "name-alerts-linked-to-dashboard": "Peringatan yang ditautkan ke dasbor ini",
+ "name-datasource": "Sumber data",
+ "name-error": "Kesalahan",
+ "name-firing": "Memberi/Memicu Peringatan",
+ "name-folder": "Folder",
+ "name-group-by": "Kelompokkan berdasarkan",
+ "name-group-mode": "Mode grup",
+ "name-max-items": "Item maks",
+ "name-no-data": "Tidak ada Data",
+ "name-normal": "Normal",
+ "name-pending": "Tertunda",
+ "name-recovering": "Memulihkan",
+ "name-show-inactive-alerts": "Tampilkan peringatan dengan 0 instans",
+ "name-sort-order": "Urutan penyortiran",
+ "name-view-mode": "Mode tampilan",
"sort-order-options": {
- "label-alphabetical-asc": "",
- "label-alphabetical-desc": "",
- "label-importance": "",
- "label-time-asc": "",
- "label-time-desc": ""
+ "label-alphabetical-asc": "Sesuai abjad (naik)",
+ "label-alphabetical-desc": "Sesuai abjad (turun)",
+ "label-importance": "Tingkat kepentingan",
+ "label-time-asc": "Waktu (naik)",
+ "label-time-desc": "Waktu (turun)"
},
"ungrouped-mode-view": {
"active-for": "selama <1>{{duration}}1>",
@@ -3085,8 +3085,8 @@
"title-permission-required": "Izin diperlukan"
},
"view-mode-options": {
- "label-list": "",
- "label-stat": ""
+ "label-list": "Daftar",
+ "label-stat": "Stat"
}
},
"annolist": {
@@ -3099,31 +3099,31 @@
"annotation-list-item": {
"tooltip-created-by": "Dibuat oleh:<1>1> {{email}}"
},
- "category-annotation-query": "",
- "category-display": "",
- "category-link-behaviour": "",
- "description-tags": "",
+ "category-annotation-query": "Kueri anotasi",
+ "category-display": "Tampilan",
+ "category-link-behaviour": "Perilaku tautan",
+ "description-tags": "Cocokkan tag anotasi",
"link-target-options": {
- "label-dashboard": "",
- "label-panel": ""
- },
- "name-limit": "",
- "name-link-target": "",
- "name-query-filter": "",
- "name-show-tags": "",
- "name-show-time": "",
- "name-show-user": "",
- "name-tags": "",
- "name-time-after": "",
- "name-time-before": "",
- "name-time-range": "",
+ "label-dashboard": "Dasbor",
+ "label-panel": "Panel"
+ },
+ "name-limit": "Batas",
+ "name-link-target": "Target tautan",
+ "name-query-filter": "Filter kueri",
+ "name-show-tags": "Tampilkan tag",
+ "name-show-time": "Tampilkan Waktu",
+ "name-show-user": "Tampilkan pengguna",
+ "name-tags": "Tag",
+ "name-time-after": "Waktu setelah",
+ "name-time-before": "Waktu sebelum",
+ "name-time-range": "Rentang waktu",
"query-filter-options": {
- "label-all-dashboards": "",
- "label-this-dashboard": ""
+ "label-all-dashboards": "Semua dasbor",
+ "label-this-dashboard": "Dasbor ini"
},
"time-range-options": {
- "label-none": "",
- "label-this-dashboard": ""
+ "label-none": "Tidak ada",
+ "label-this-dashboard": "Dasbor ini"
}
},
"annotations": {
@@ -3243,6 +3243,11 @@
"id-token-attribute-name-label": "Nama atribut token ID",
"login-attribute-path-description": "Ekspresi JMESPath yang digunakan untuk pencarian login pengguna dari token ID pengguna.",
"login-attribute-path-label": "Jalur atribut login",
+ "login-prompt-consent": "",
+ "login-prompt-description": "",
+ "login-prompt-label": "",
+ "login-prompt-login": "",
+ "login-prompt-select-account": "",
"managed-identity-client-id-description": "ID klien identitas terkelola dari kredensial identitas federasi pada aplikasi OAuth2 Anda.",
"managed-identity-client-id-label": "ID klien identitas yang dikelola FIC",
"name-attribute-path-description": "Ekspresi JMESPath yang digunakan untuk pencarian nama pengguna dari token ID pengguna.\nNama ini akan digunakan sebagai nama tampilan pengguna.",
@@ -3313,8 +3318,8 @@
}
},
"provider-card": {
- "saml-learn-more": "",
- "scim-learn-more": "",
+ "saml-learn-more": "Sistem Masuk Tunggal (SSO) dengan SAML.",
+ "scim-learn-more": " Sinkronkan pengguna dan tim dengan SCIM.",
"text-badge-enabled": "Aktif",
"text-badge-not-enabled": "Tidak diaktifkan"
},
@@ -3351,99 +3356,99 @@
},
"bar-chart": {
"warn": {
- "missing-numeric": "",
- "missing-series": ""
+ "missing-numeric": "Tidak ada bidang numerik yang ditemukan",
+ "missing-series": "Diagram batang memerlukan bidang string atau waktu"
}
},
"barchart": {
"config": {
- "category-thresholds": "",
- "description-color-by-field": "",
- "description-x-label-max-length": "",
- "name-bar-radius": "",
- "name-bar-width": "",
- "name-color-by-field": "",
- "name-fill-opacity": "",
- "name-full-highlight": "",
- "name-gradient-mode": "",
- "name-group-width": "",
- "name-line-width": "",
- "name-orientation": "",
- "name-rotate-x-labels": "",
- "name-show-thresholds": "",
- "name-show-values": "",
- "name-stacking": "",
- "name-transform": "",
- "name-x-axis": "",
- "name-x-label-max-length": "",
- "name-x-label-min-spacing": "",
+ "category-thresholds": "Ambang batas",
+ "description-color-by-field": "Gunakan nilai warna untuk bidang berhirarki sama untuk mewarnai setiap nilai batang.",
+ "description-x-label-max-length": "Label sumbu X akan dipotong sesuai panjang yang ditentukan",
+ "name-bar-radius": "Radius batang",
+ "name-bar-width": "Lebar batang",
+ "name-color-by-field": "Warna berdasarkan bidang",
+ "name-fill-opacity": "Opasitas isian",
+ "name-full-highlight": "Sorot seluruh area saat mengarahkan kursor",
+ "name-gradient-mode": "Mode gradien",
+ "name-group-width": "Lebar grup",
+ "name-line-width": "Lebar garis",
+ "name-orientation": "Orientasi",
+ "name-rotate-x-labels": "Putar label centang sumbu x",
+ "name-show-thresholds": "Tampilkan ambang batas",
+ "name-show-values": "Tampilkan nilai",
+ "name-stacking": "Tumpukan",
+ "name-transform": "Ubah",
+ "name-x-axis": "Sumbu X",
+ "name-x-label-max-length": "Panjang maksimum label centang sumbu X",
+ "name-x-label-min-spacing": "Spasi minimum label sumbu X",
"orientation-options": {
- "label-auto": "",
- "label-horizontal": "",
- "label-line-vertical": ""
+ "label-auto": "Otomatis",
+ "label-horizontal": "Horizontal",
+ "label-line-vertical": "Vertikal"
},
- "placeholder-x-axis": "",
- "placeholder-x-label-max-length": "",
+ "placeholder-x-axis": "Bidang string atau waktu pertama",
+ "placeholder-x-label-max-length": "Tidak ada",
"show-values-options": {
- "label-always": "",
- "label-auto": "",
- "label-never": ""
+ "label-always": "Selalu",
+ "label-auto": "Otomatis",
+ "label-never": "Jangan pernah"
},
"transform-options": {
- "description-constant": "",
- "description-negative-y": "",
- "label-constant": "",
- "label-negative-y": ""
+ "description-constant": "Nilai pertama akan ditampilkan sebagai garis konstan",
+ "description-negative-y": "Balik hasil ke nilai negatif pada sumbu y",
+ "label-constant": "Konstan",
+ "label-negative-y": "Y Negatif"
}
},
"tick-spacing-editor": {
"content-require-space-from-the-right-side": "Membutuhkan ruang dari sisi kanan",
"gaps-options": {
- "description-large": "",
- "description-medium": "",
- "description-none": "",
- "description-small": "",
- "label-large": "",
- "label-medium": "",
- "label-none": "",
- "label-small": ""
+ "description-large": "Memerlukan spasi {{spacing}}",
+ "description-medium": "Memerlukan spasi {{spacing}}",
+ "description-none": "Tampilkan semua tanda centang",
+ "description-small": "Memerlukan spasi {{spacing}}",
+ "label-large": "Besar",
+ "label-medium": "Sedang",
+ "label-none": "Tidak ada",
+ "label-small": "Kecil"
},
"label-rtl": "RTL"
}
},
"bargauge": {
"bar-size-options": {
- "label-auto": "",
- "label-manual": ""
- },
- "category-bar-gauge": "",
- "description-max-height": "",
- "description-min-height": "",
- "description-min-width": "",
- "description-show-unfilled-area": "",
+ "label-auto": "Otomatis",
+ "label-manual": "Manual"
+ },
+ "category-bar-gauge": "Pengukur batang",
+ "description-max-height": "Tinggi baris maksimum (orientasi horizontal)",
+ "description-min-height": "Tinggi baris minimum (orientasi horizontal)",
+ "description-min-width": "Lebar kolom minimum (orientasi vertikal)",
+ "description-show-unfilled-area": "Saat diaktifkan, tampilkan area yang tidak terisi menjadi abu-abu",
"display-mode-options": {
- "label-basic": "",
- "label-gradient": "",
- "label-retro": ""
- },
- "name-bar-size": "",
- "name-display-mode": "",
- "name-max-height": "",
- "name-min-height": "",
- "name-min-width": "",
- "name-name-placement": "",
+ "label-basic": "Dasar",
+ "label-gradient": "Gradien",
+ "label-retro": "LCD Retro"
+ },
+ "name-bar-size": "Ukuran batang",
+ "name-display-mode": "Mode tampilan",
+ "name-max-height": "Tinggi maks",
+ "name-min-height": "Tinggi min",
+ "name-min-width": "Lebar minimum",
+ "name-name-placement": "Penempatan nama",
"name-placement-options": {
- "label-auto": "",
- "label-hidden": "",
- "label-left": "",
- "label-top": ""
+ "label-auto": "Otomatis",
+ "label-hidden": "Tersembunyi",
+ "label-left": "Kiri",
+ "label-top": "Atas"
},
- "name-show-unfilled-area": "",
- "name-value-display": "",
+ "name-show-unfilled-area": "Tampilkan area yang tidak terisi",
+ "name-value-display": "Tampilan nilai",
"value-display-options": {
- "label-hidden": "",
- "label-text-color": "",
- "label-value-color": ""
+ "label-hidden": "Tersembunyi",
+ "label-text-color": "Warna teks",
+ "label-value-color": "Warna nilai"
}
},
"bookmarks-page": {
@@ -3468,7 +3473,7 @@
"delete-modal-restore-dashboards-text": "Tindakan ini akan segera menghapus folder yang dipilih tetapi dasbor yang dipilih akan ditandai untuk dihapus dalam 30 hari. Administrator organisasi Anda dapat memulihkan dasbor kapan saja sebelum 30 hari kedaluwarsa. Folder tidak dapat dipulihkan.",
"delete-modal-text": "Tindakan ini akan menghapus konten berikut:",
"delete-modal-title": "Hapus",
- "delete-provisioned-folder": "",
+ "delete-provisioned-folder": "Hapus folder yang disediakan",
"deleting": "Menghapus...",
"manage-permissions-button": "Kelola izin",
"move-button": "Pindahkan",
@@ -3507,12 +3512,12 @@
"tags-column": "Tag"
},
"delete-provisioned-folder-form": {
- "alert-folder-deleted-successfully": "",
- "api-error": "",
- "button-cancel": "",
- "button-delete": "",
- "button-deleting": "",
- "delete-warning": ""
+ "alert-folder-deleted-successfully": "Folder berhasil dihapus",
+ "api-error": "Gagal menghapus folder",
+ "button-cancel": "Batalkan",
+ "button-delete": "Hapus",
+ "button-deleting": "Menghapus...",
+ "delete-warning": "Ini akan menghapus folder ini dan semua subfoldernya. Secara keseluruhan, ini akan memengaruhi:"
},
"descendant-count": {
"title-unable-to-retrieve-descendant-information": "Tidak dapat mengambil informasi turunan"
@@ -3571,52 +3576,52 @@
"text": "Hasil untuk kueri Anda tidak ditemukan"
},
"restore": {
- "success": ""
+ "success": "Dasbor {{name}} dipulihkan"
},
"text-this-repository-is-read-only": "Jika Anda memiliki akses langsung ke target, salin JSON dan tempel di sana.",
"trash-state-manager": {
"label": {
- "alphabetically-az": "",
- "alphabetically-za": ""
+ "alphabetically-az": "Sesuai abjad (A-Z)",
+ "alphabetically-za": "Sesuai abjad (Z-A)"
}
}
},
"candlestick": {
"additional-fields-options": {
- "label-ignore": "",
- "label-include": ""
+ "label-ignore": "Abaikan",
+ "label-include": "Meliputi"
},
"candle-style-options": {
- "label-candles": "",
- "label-ohlc-bars": ""
+ "label-candles": "Lilin",
+ "label-ohlc-bars": "Batang OHLC"
},
- "category-candlestick": "",
+ "category-candlestick": "Stik Lilin",
"color-strategy-options": {
- "label-since-open": "",
- "label-since-prior-close": ""
- },
- "description-additional-fields": "",
- "description-close": "",
- "description-high": "",
- "description-low": "",
- "description-open": "",
- "description-volume": "",
+ "label-since-open": "Sejak Dibuka",
+ "label-since-prior-close": "Sejak Penutupan Sebelumnya"
+ },
+ "description-additional-fields": "Gunakan opsi deret waktu standar untuk mengonfigurasi bidang apa pun yang tidak dipetakan di atas",
+ "description-close": "Nilai pada akhir periode",
+ "description-high": "Nilai maksimum dalam periode",
+ "description-low": "Nilai minimum dalam periode",
+ "description-open": "Nilai pada awal periode",
+ "description-volume": "Jumlah sampel dalam periode",
"mode-options": {
- "label-both": "",
- "label-candles": "",
- "label-volume": ""
- },
- "name-additional-fields": "",
- "name-candle-style": "",
- "name-close": "",
- "name-color-strategy": "",
- "name-down-color": "",
- "name-high": "",
- "name-low": "",
- "name-mode": "",
- "name-open": "",
- "name-up-color": "",
- "name-volume": ""
+ "label-both": "Keduanya",
+ "label-candles": "Lilin",
+ "label-volume": "Volume"
+ },
+ "name-additional-fields": "Bidang tambahan",
+ "name-candle-style": "Gaya lilin",
+ "name-close": "Tutup",
+ "name-color-strategy": "Strategi warna",
+ "name-down-color": "Warna penurunan",
+ "name-high": "Tinggi",
+ "name-low": "Rendah",
+ "name-mode": "Mode",
+ "name-open": "Buka",
+ "name-up-color": "Warna kenaikan",
+ "name-volume": "Volume"
},
"canvas": {
"apieditor": {
@@ -3631,18 +3636,18 @@
}
},
"button-item": {
- "category-button": "",
+ "category-button": "Tombol",
"label": {
"center": "Pusat",
"left": "Kiri",
"right": "Kanan"
},
- "name-align-text": "",
- "name-api": "",
- "name-style": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
+ "name-align-text": "Ratakan teks",
+ "name-api": "API",
+ "name-style": "Gaya tampilan",
+ "name-text": "Teks",
+ "name-text-color": "Warna teks",
+ "name-text-size": "Ukuran teks",
"placeholder": {
"auto": "Auto"
}
@@ -3669,20 +3674,20 @@
}
}
},
- "category-arrow-direction": "",
- "category-background": "",
- "category-border": "",
- "category-canvas": "",
- "category-color": "",
- "category-data-links": "",
- "category-line-style": "",
- "category-metric-value": "",
- "category-radius": "",
- "category-selected-connection": "",
- "category-selected-element": "",
- "category-size": "",
+ "category-arrow-direction": "Arah Panah",
+ "category-background": "Latar Belakang",
+ "category-border": "Bingkai",
+ "category-canvas": "Kanvas",
+ "category-color": "Warna",
+ "category-data-links": "Tautan data dan tindakan",
+ "category-line-style": "Gaya tampilan garis",
+ "category-metric-value": "Nilai metrik",
+ "category-radius": "Radius",
+ "category-selected-connection": "Koneksi yang dipilih",
+ "category-selected-element": "Elemen yang dipilih ({{element}})",
+ "category-size": "Ukuran",
"cloud-item": {
- "category-cloud": "",
+ "category-cloud": "Cloud",
"label": {
"bottom": "Bawah",
"center": "Pusat",
@@ -3691,48 +3696,48 @@
"right": "Kanan",
"top": "Atas"
},
- "name-align-text": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "Ratakan teks",
+ "name-text": "Teks",
+ "name-text-color": "Warna teks",
+ "name-text-size": "Ukuran teks",
+ "name-vertical-align": "Rata vertikal",
"placeholder": {
"auto": "Auto"
}
},
- "description-experimental-types": "",
- "description-infinite-panning": "",
- "description-inline-editing": "",
- "description-pan-zoom": "",
+ "description-experimental-types": "Aktifkan pemilihan jenis elemen eksperimental",
+ "description-infinite-panning": "Aktifkan fitur geser tak terbatas - berguna untuk kanvas yang luas. Peringatan: ini adalah fitur eksperimental dan saat ini hanya berfungsi dengan baik dengan elemen yang dibatasi terhadap sudut atas/kiri",
+ "description-inline-editing": "Aktifkan pengeditan panel secara langsung",
+ "description-pan-zoom": "Aktifkan geser dan zoom",
"direction-options": {
- "label-both": "",
- "label-forward": "",
- "label-none": "",
- "label-reverse": ""
+ "label-both": "Keduanya",
+ "label-forward": "Teruskan",
+ "label-none": "Tidak ada",
+ "label-reverse": "Balik"
},
"drone-front-item": {
- "category-drone-front": "",
- "name-roll-angle": ""
+ "category-drone-front": "Bagian Depan Drone",
+ "name-roll-angle": "Sudut Putar"
},
"drone-side-item": {
- "category-drone-side": "",
- "name-pitch-angle": ""
+ "category-drone-side": "Bagian Samping Drone",
+ "name-pitch-angle": "Sudut Pitch"
},
"drone-top-item": {
- "category-drone-top": "",
- "name-back-left-rotor-rpm": "",
- "name-back-right-rotor-rpm": "",
- "name-front-left-rotor-rpm": "",
- "name-front-right-rotor-rpm": "",
- "name-yaw-angle": ""
+ "category-drone-top": "Bagian Atas Drone",
+ "name-back-left-rotor-rpm": "RPM Rotor Belakang Kiri",
+ "name-back-right-rotor-rpm": "RPM Rotor Belakang Kanan",
+ "name-front-left-rotor-rpm": "RPM Rotor Depan Kiri",
+ "name-front-right-rotor-rpm": "RPM Rotor Depan Kanan",
+ "name-yaw-angle": "Sudut Yaw"
},
"element-editor": {
- "category-layout": "",
- "description-unsupported": "",
- "name-quick-placement": ""
+ "category-layout": "Tata Letak",
+ "description-unsupported": "Jenis elemen yang dipilih tidak didukung oleh pengaturan saat ini. Aktifkan jenis elemen lanjutan.",
+ "name-quick-placement": "Penempatan cepat"
},
"ellipse-item": {
- "category-ellipse": "",
+ "category-ellipse": "Elips",
"label": {
"bottom": "Bawah",
"center": "Pusat",
@@ -3741,50 +3746,50 @@
"right": "Kanan",
"top": "Atas"
},
- "name-align-text": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "Ratakan teks",
+ "name-text": "Teks",
+ "name-text-color": "Warna teks",
+ "name-text-size": "Ukuran teks",
+ "name-vertical-align": "Rata vertikal",
"placeholder": {
"auto": "Auto"
}
},
"icon-item": {
- "category-icon": "",
- "name-fill-color": "",
- "name-svg-path": ""
+ "category-icon": "Ikon",
+ "name-fill-color": "Warna isian",
+ "name-svg-path": "Jalur SVG"
},
"inline-edit": {
"canvas-inline-editor": "Editor Inline Canvas",
"tooltip-close-inline-editor": "Tutup editor inline"
},
"inline-edit-body": {
- "category-selected-element": "",
+ "category-selected-element": "Elemen yang dipilih ({{element}})",
"label-add-item": "Tambahkan item",
"please-select-an-element": "Pilih elemen"
},
- "label-actions": "",
- "label-color": "",
- "label-direction": "",
- "label-image": "",
- "label-image-size": "",
- "label-line-style": "",
- "label-links": "",
- "label-radius": "",
- "label-size": "",
- "label-width": "",
+ "label-actions": "Tindakan",
+ "label-color": "Warna",
+ "label-direction": "Arah",
+ "label-image": "Gambar",
+ "label-image-size": "Ukuran gambar",
+ "label-line-style": "Gaya tampilan garis",
+ "label-links": "Tautan",
+ "label-radius": "Radius",
+ "label-size": "Ukuran",
+ "label-width": "Lebar",
"layer-editor": {
- "category-layer": "",
- "category-layout": "",
- "name-constraints": "",
- "name-elements": ""
+ "category-layer": "Layer",
+ "category-layout": "Tata Letak",
+ "name-constraints": "Kendala",
+ "name-elements": "Elemen"
},
"line-style-editor": {
"label-animate": "Animasikan"
},
"line-style-options": {
- "label-solid": ""
+ "label-solid": "Solid"
},
"metric-value-item": {
"label": {
@@ -3799,15 +3804,15 @@
"auto": "Auto"
}
},
- "name-align-text": "",
- "name-color": "",
- "name-experimental-types": "",
- "name-infinite-panning": "",
- "name-inline-editing": "",
- "name-pan-zoom": "",
- "name-text": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "Ratakan teks",
+ "name-color": "Warna teks",
+ "name-experimental-types": "Jenis elemen eksperimental",
+ "name-infinite-panning": "Geser tak terbatas",
+ "name-inline-editing": "Pengeditan inline",
+ "name-pan-zoom": "Geser dan zoom",
+ "name-text": "Teks",
+ "name-text-size": "Ukuran teks",
+ "name-vertical-align": "Rata vertikal",
"not-found-display": {
"not-found": "<0>Tidak ditemukan: 0>"
},
@@ -3820,7 +3825,7 @@
"zoom-scroll-wheel": "Zoom: Roda gulir"
},
"parallelogram-item": {
- "category-parallelogram": "",
+ "category-parallelogram": "Jajaran genjang",
"label": {
"bottom": "Bawah",
"center": "Pusat",
@@ -3829,11 +3834,11 @@
"right": "Kanan",
"top": "Atas"
},
- "name-align-text": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "Ratakan teks",
+ "name-text": "Teks",
+ "name-text-color": "Warna teks",
+ "name-text-size": "Ukuran teks",
+ "name-vertical-align": "Rata vertikal",
"placeholder": {
"auto": "Auto"
}
@@ -3846,21 +3851,21 @@
},
"placement-editor": {
"horizontal-options": {
- "label-center": "",
- "label-left": "",
- "label-left-and-right": "",
- "label-right": "",
- "label-scale": ""
+ "label-center": "Pusat",
+ "label-left": "Kiri",
+ "label-left-and-right": "Kiri & kanan",
+ "label-right": "Kanan",
+ "label-scale": "Skala"
},
"label-constraints": "Kendala",
"label-position": "Jabatan",
"loading": "Memuat...",
"vertical-options": {
- "label-bottom": "",
- "label-center": "",
- "label-scale": "",
- "label-top": "",
- "label-top-and-bottom": ""
+ "label-bottom": "Bawah",
+ "label-center": "Pusat",
+ "label-scale": "Skala",
+ "label-top": "Atas",
+ "label-top-and-bottom": "Atas & bawah"
}
},
"quick-positioning": {
@@ -3872,7 +3877,7 @@
"tooltip-align-vertical-centers": "Ratakan ke tengah vertikal"
},
"rectangle-item": {
- "category-rectangle": "",
+ "category-rectangle": "Persegi panjang",
"label": {
"bottom": "Bawah",
"center": "Pusat",
@@ -3881,33 +3886,33 @@
"right": "Kanan",
"top": "Atas"
},
- "name-align-text": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "Ratakan teks",
+ "name-text": "Teks",
+ "name-text-color": "Warna teks",
+ "name-text-size": "Ukuran teks",
+ "name-vertical-align": "Rata vertikal",
"placeholder": {
"auto": "Auto"
}
},
"server-item": {
- "category-server": "",
- "name-blink-rate": "",
- "name-bulb-color": "",
- "name-status-color": "",
- "name-type": "",
+ "category-server": "Server",
+ "name-blink-rate": "Frekuensi kedipan [hz] (0 = mati)",
+ "name-bulb-color": "Warna bohlam",
+ "name-status-color": "Warna status",
+ "name-type": "Jenis",
"type-options": {
- "label-database": "",
- "label-single": "",
- "label-stack": "",
- "label-terminal": ""
+ "label-database": "Basis data",
+ "label-single": "Tunggal",
+ "label-stack": "Tumpukan",
+ "label-terminal": "Terminal"
}
},
"text-display": {
"double-click-to-set": "Klik dua kali untuk mengatur teks"
},
"text-item": {
- "category-text": "",
+ "category-text": "Teks",
"label": {
"bottom": "Bawah",
"center": "Pusat",
@@ -3916,11 +3921,11 @@
"right": "Kanan",
"top": "Atas"
},
- "name-align-text": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "Ratakan teks",
+ "name-text": "Teks",
+ "name-text-color": "Warna teks",
+ "name-text-size": "Ukuran teks",
+ "name-vertical-align": "Rata vertikal",
"placeholder": {
"auto": "Auto"
}
@@ -3942,7 +3947,7 @@
"tooltip-remove": "Hapus"
},
"triangle-item": {
- "category-triangle": "",
+ "category-triangle": "Segitiga",
"label": {
"bottom": "Bawah",
"center": "Pusat",
@@ -3951,18 +3956,18 @@
"right": "Kanan",
"top": "Atas"
},
- "name-align-text": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "Ratakan teks",
+ "name-text": "Teks",
+ "name-text-color": "Warna teks",
+ "name-text-size": "Ukuran teks",
+ "name-vertical-align": "Rata vertikal",
"placeholder": {
"auto": "Auto"
}
},
"wind-turbine-item": {
- "category-wind-turbine": "",
- "name-rpm": ""
+ "category-wind-turbine": "Turbin Angin",
+ "name-rpm": "RPM"
}
},
"carousel": {
@@ -3979,8 +3984,8 @@
"close-button": {
"tooltip": "Tutup"
},
- "cloud-enterprise-feature-badge": "",
- "cloud-feature-badge": "",
+ "cloud-enterprise-feature-badge": "Cloud & Enterprise",
+ "cloud-feature-badge": "Cloud",
"combobox": {
"async": {
"error": "Terjadi kesalahan saat memuat opsi."
@@ -4510,7 +4515,7 @@
}
},
"description": {
- "action": ""
+ "action": "Ubah deskripsi dasbor"
},
"dynamic-config-value-editor": {
"render-label": {
@@ -4519,12 +4524,12 @@
},
"edit-actions": {
"add": "Tambahkan {{typeName}}",
- "move": "",
+ "move": "Pindahkan {{typeName}}",
"panel-background": "Ubah latar belakang panel",
"panel-description": "Ubah deskripsi panel",
- "panel-max-repeats-per-row": "",
+ "panel-max-repeats-per-row": "Pengulangan maksimum per baris",
"panel-repeat-direction": "Ulangi arah",
- "panel-repeat-variable": "",
+ "panel-repeat-variable": "Panel diulang berdasarkan",
"panel-title": "Ubah judul panel",
"paste-panel": "Tempel panel",
"remove": "Hapus {{typeName}}",
@@ -4658,7 +4663,7 @@
"get-field-override-categories": {
"label-add-field-override": "Tambah penimpaan bidang",
"label-add-override-property": "Tambah properti penimpaan",
- "override-name": "",
+ "override-name": "Timpa {{overrideNum}}",
"title": {
"add-button": "tambahkan tombol"
}
@@ -4882,7 +4887,7 @@
"title-matched_other": "Cocok {{count}}/{{totalCount}} opsi"
},
"outline": {
- "repeated-item": "",
+ "repeated-item": "Ulangi",
"tree-item": {
"empty": "(kosong)",
"no-title": ""
@@ -5040,8 +5045,8 @@
"label-changes": "Perubahan",
"label-details": "Detail",
"title": "Simpan dasbor",
- "title-copy": "",
- "title-provisioned": ""
+ "title-copy": "Simpan salinan dasbor",
+ "title-provisioned": "Dasbor yang disediakan"
},
"save-dashboard-error-proxy": {
"body-name-exists": "Dasbor dengan nama yang sama di folder yang dipilih sudah ada.<1>1><2>Apa Anda masih ingin menyimpan dasbor ini?2>",
@@ -5118,7 +5123,7 @@
}
},
"title": {
- "action": ""
+ "action": "Ubah judul dasbor"
},
"toolbar": {
"add": "Tambahkan",
@@ -5553,12 +5558,12 @@
}
},
"delete-provisioned-dashboard-form": {
- "api-error": "",
+ "api-error": "Gagal menghapus dasbor",
"cancel-action": "Batalkan",
"delete-action": "Hapus dasbor",
- "delete-read-only-file-message": "",
+ "delete-read-only-file-message": "Dasbor ini tidak dapat dihapus langsung dari Grafana karena repositori bersifat hanya-baca. Untuk menghapus dasbor ini, harap hapus file dari repositori Git Anda.",
"deleting": "Menghapus...",
- "drawer-title": "",
+ "drawer-title": "Hapus Dasbor yang Disediakan",
"title-this-repository-is-read-only": "Repositori ini hanya dapat dibaca"
},
"description-label": {
@@ -5572,7 +5577,7 @@
}
},
"edit-provisioned-dashboard-form": {
- "success": ""
+ "success": "Perubahan dasbor berhasil disimpan"
},
"email-list": {
"aria-label-emailmenu": "Alihkan tombol menu email"
@@ -5765,7 +5770,7 @@
}
},
"panel-data-alerting-tab": {
- "tab-label": ""
+ "tab-label": "Peringatan"
},
"panel-data-alerting-tab-rendered": {
"alert": {
@@ -5776,14 +5781,14 @@
"title-dashboard-not-saved": "Dasbor tidak disimpan"
},
"panel-data-queries-tab": {
- "tab-label": ""
+ "tab-label": "Kueri"
},
"panel-data-queries-tab-rendered": {
"add-query": "Tambahkan kueri",
"expression": "Pola "
},
"panel-data-transformations-tab": {
- "tab-label": ""
+ "tab-label": "Transformasi"
},
"panel-data-transformations-tab-rendered": {
"add-another-transformation": "Tambah transformasi lain",
@@ -5886,8 +5891,8 @@
"label-changes": "Perubahan",
"label-details": "Detail",
"title": "Simpan dasbor",
- "title-copy": "",
- "title-provisioned": ""
+ "title-copy": "Simpan salinan dasbor",
+ "title-provisioned": "Dasbor yang disediakan"
}
},
"save-dashboard-form": {
@@ -6210,18 +6215,18 @@
}
},
"dashlist": {
- "category-dashboard-list": "",
- "name-folder": "",
- "name-include-current-template-variables": "",
- "name-include-current-time-range": "",
- "name-max-items": "",
- "name-query": "",
- "name-recently-viewed": "",
- "name-search": "",
- "name-show-folder-names": "",
- "name-show-headings": "",
- "name-starred": "",
- "name-tags": ""
+ "category-dashboard-list": "Daftar dasbor",
+ "name-folder": "Folder",
+ "name-include-current-template-variables": "Sertakan nilai variabel templat saat ini",
+ "name-include-current-time-range": "Sertakan rentang waktu saat ini",
+ "name-max-items": "Item maks",
+ "name-query": "Kueri",
+ "name-recently-viewed": "Baru dilihat",
+ "name-search": "Cari",
+ "name-show-folder-names": "Tampilkan nama folder",
+ "name-show-headings": "Tampilkan judul",
+ "name-starred": "Diberi bintang",
+ "name-tags": "Tag"
},
"data-source-list": {
"empty-state": {
@@ -6483,15 +6488,15 @@
"dimensions": {
"background-size-editor": {
"options": {
- "label-contain": "",
- "label-cover": "",
- "label-fill": "",
- "label-original": "",
- "label-tile": ""
+ "label-contain": "Berisi",
+ "label-cover": "Menutupi",
+ "label-fill": "Mengisi",
+ "label-original": "Asli",
+ "label-tile": "Tile"
}
},
"color-dimension-editor": {
- "label-fixed-color": "",
+ "label-fixed-color": "Warna tetap",
"noOptionsMessage-no-fields-found": ""
},
"file-dropzone-custom-children": {
@@ -6506,10 +6511,10 @@
"placeholder-search": "Cari"
},
"resource-dimension-editor": {
- "description-field": "",
- "description-fixed": "",
+ "description-field": "Gunakan hasil bidang string",
+ "description-fixed": "Nilai tetap",
"label-field": "Bidang",
- "label-fixed": "",
+ "label-fixed": "Tetap",
"label-mappings": "Pemetaan",
"label-source": "Sumber"
},
@@ -6526,16 +6531,16 @@
},
"scalar-dimension-editor": {
"fixed-value-options": {
- "label-fixed-values": ""
+ "label-fixed-values": "Nilai tetap"
},
"label-limit": "Batas",
"label-value": "Nilai",
"noOptionsMessage-no-fields-found": "",
"scalar-options": {
- "description-clamped": "",
- "description-mod": "",
- "label-clamped": "",
- "label-mod": ""
+ "description-clamped": "Gunakan nilai bidang, terbatas ke maks dan min",
+ "description-mod": "Gunakan nilai bidang, mod dari maks",
+ "label-clamped": "Terbatas",
+ "label-mod": "Mod"
}
},
"scale-dimension-editor": {
@@ -6550,10 +6555,10 @@
"noOptionsMessage-no-fields-found": ""
},
"text-dimension-editor": {
- "description-field": "",
- "description-fixed": "",
+ "description-field": "Nilai bidang tampilan",
+ "description-fixed": "Nilai tetap",
"label-field": "Bidang",
- "label-fixed": "",
+ "label-fixed": "Tetap",
"label-source": "Sumber",
"label-template": "Templat",
"label-value": "Nilai"
@@ -6567,16 +6572,16 @@
"description-percentage-means-thresholds-relative": "Persentase berarti ambang batas terkait min & maks",
"modes": {
"description": {
- "threshold-based-percent-between-minmax": "",
- "thresholds-based-absolute-values": ""
+ "threshold-based-percent-between-minmax": "Pilih ambang batas berdasarkan persentase antara min/maks",
+ "thresholds-based-absolute-values": "Pilih ambang batas berdasarkan nilai absolut"
},
"label": {
- "absolute": "",
- "percentage": ""
+ "absolute": "Absolut",
+ "percentage": "Persentase"
}
},
"thresholds-mode": "Mode ambang batas",
- "value-base": ""
+ "value-base": "Dasar"
},
"urlpicker-tab": {
"label-preview": "Pratinjau"
@@ -7377,23 +7382,23 @@
"title": "Keluar dari halaman?"
},
"gauge": {
- "category-gauge": "",
- "description-min-height": "",
- "description-min-width": "",
- "description-neutral": "",
- "description-show-threshold-labels": "",
- "description-show-threshold-markers": "",
+ "category-gauge": "Alat ukur",
+ "description-min-height": "Tinggi baris minimum (orientasi horizontal)",
+ "description-min-width": "Lebar kolom minimum (orientasi vertikal)",
+ "description-neutral": "Biarkan kosong untuk menggunakan Min sebagai titik netral",
+ "description-show-threshold-labels": "Tampilkan nilai ambang batas di sekitar bilah pengukur",
+ "description-show-threshold-markers": "Menampilkan ambang batas sebagai bilah luar",
"gauge-size-options": {
- "label-auto": "",
- "label-manual": ""
+ "label-auto": "Otomatis",
+ "label-manual": "Manual"
},
- "name-gauge-size": "",
- "name-min-height": "",
- "name-min-width": "",
- "name-neutral": "",
- "name-show-threshold-labels": "",
- "name-show-threshold-markers": "",
- "placeholder-neutral": ""
+ "name-gauge-size": "Ukuran alat ukur",
+ "name-min-height": "Tinggi min",
+ "name-min-width": "Lebar minimum",
+ "name-neutral": "Netral",
+ "name-show-threshold-labels": "Tampilkan label ambang batas",
+ "name-show-threshold-markers": "Tampilkan penanda ambang batas",
+ "placeholder-neutral": "otomatis"
},
"gen-ai": {
"apply-suggestion": "Terapkan",
@@ -7727,85 +7732,85 @@
},
"builder": {
"axis": {
- "category-axis": "",
- "color-label": "",
+ "category-axis": "Sumbu",
+ "color-label": "Warna",
"color-options": {
- "label-series": "",
- "label-text": ""
+ "label-series": "Data seri",
+ "label-text": "Teks"
},
"grid-line-options": {
- "label-auto": "",
- "label-off": "",
- "label-on": ""
+ "label-auto": "Otomatis",
+ "label-off": "Nonaktif",
+ "label-on": "Aktif"
},
- "name-centered-zero": "",
- "name-grid-lines": "",
- "name-label": "",
- "name-placement": "",
- "name-scale": "",
- "name-show-border": "",
- "name-soft-max": "",
- "name-soft-min": "",
- "name-width": "",
- "placeholder-label": "",
- "placeholder-soft-max": "",
- "placeholder-soft-min": "",
- "placeholder-width": "",
+ "name-centered-zero": "Nol tengah",
+ "name-grid-lines": "Tampilkan garis kisi",
+ "name-label": "Label",
+ "name-placement": "Penempatan",
+ "name-scale": "Skala",
+ "name-show-border": "Tampilkan batas",
+ "name-soft-max": "Maksimum lunak",
+ "name-soft-min": "Minimum lunak",
+ "name-width": "Lebar",
+ "placeholder-label": "Teks opsional",
+ "placeholder-soft-max": "Lihat: Opsi standar > Maks",
+ "placeholder-soft-min": "Lihat: Opsi standar > Min",
+ "placeholder-width": "Otomatis",
"scale-distribution-editor": {
"distribution-options": {
- "label-linear": "",
- "label-log": "",
- "label-symlog": ""
+ "label-linear": "Linier",
+ "label-log": "Logaritma",
+ "label-symlog": "Symlog"
}
}
},
"legend": {
- "category": "",
- "description-values": "",
+ "category": "Legenda",
+ "description-values": "Pilih nilai atau perhitungan untuk ditampilkan dalam legenda",
"mode-options": {
- "label-list": "",
- "label-table": ""
+ "label-list": "Daftar",
+ "label-table": "Tabel"
},
- "name-mode": "",
- "name-placement": "",
- "name-values": "",
- "name-visibility": "",
- "name-width": "",
+ "name-mode": "Mode",
+ "name-placement": "Penempatan",
+ "name-values": "Nilai",
+ "name-visibility": "Visibilitas",
+ "name-width": "Lebar",
"placement-options": {
- "label-bottom": "",
- "label-right": ""
+ "label-bottom": "Bawah",
+ "label-right": "Kanan"
}
},
"stacking": {
- "name-stack-series": ""
+ "name-stack-series": "Seri tumpukan"
},
"text": {
- "category-text-size": "",
- "name-percent-change": "",
- "name-title": "",
- "name-value": "",
- "placeholder-percent-change": "",
- "placeholder-title": "",
- "placeholder-value": ""
+ "category-text-size": "Ukuran teks",
+ "name-percent-change": "Perubahan persen",
+ "name-title": "Judul",
+ "name-value": "Nilai",
+ "placeholder-percent-change": "Otomatis",
+ "placeholder-title": "Otomatis",
+ "placeholder-value": "Otomatis"
},
"tooltip": {
- "category": "",
- "description-hover-proximity": "",
+ "category": "Tooltip",
+ "description-hover-proximity": "Seberapa dekat kursor harus berada ke titik untuk memicu tooltip, dalam piksel",
"modeOptions": {
- "label-all": "",
- "label-hidden": "",
- "label-single": ""
+ "label-all": "Semua",
+ "label-hidden": "Tersembunyi",
+ "label-single": "Tunggal"
},
- "name-hide-zeros": "",
- "name-hover-proximity": "",
- "name-max-height": "",
- "name-max-width": "",
- "name-tooltip-mode": "",
- "name-values-sort-order": "",
+ "name-hide-zeros": "Sembunyikan nol",
+ "name-hover-proximity": "Kedekatan hover",
+ "name-max-height": "Tinggi maks",
+ "name-max-width": "Lebar maks",
+ "name-tooltip-mode": "Mode tooltip",
+ "name-values-sort-order": "Urutan penyortiran nilai",
"sortOptions": {
- "label-ascending": "",
- "label-descending": "",
- "label-none": ""
+ "label-ascending": "Naik",
+ "label-descending": "Turun",
+ "label-none": "Tidak ada"
}
}
},
@@ -7967,19 +7972,19 @@
"tooltip-expand-all": "Perluas semua baris"
},
"matchers-ui": {
- "description-field-name-by-regex-matcher": "",
- "description-fields-by-query": "",
- "description-fields-with-name": "",
- "description-fields-with-type": "",
- "description-fields-with-value": "",
+ "description-field-name-by-regex-matcher": "Atur properti untuk bidang dengan nama yang cocok dengan regex",
+ "description-fields-by-query": "Atur properti untuk bidang dari kueri tertentu",
+ "description-fields-with-name": "Atur properti untuk bidang tertentu",
+ "description-fields-with-type": "Atur properti untuk bidang dari jenis tertentu (angka, string, boolean)",
+ "description-fields-with-value": "Atur properti untuk bidang dengan kondisi reducer",
"field-name-picker": {
- "placeholder": ""
+ "placeholder": "Pilih bidang"
},
- "name-field-name-by-regex-matcher": "",
- "name-fields-by-query": "",
- "name-fields-with-name": "",
- "name-fields-with-type": "",
- "name-fields-with-value": ""
+ "name-field-name-by-regex-matcher": "Bidang dengan nama yang cocok dengan regex",
+ "name-fields-by-query": "Bidang yang dikembalikan oleh kueri",
+ "name-fields-with-name": "Bidang dengan nama",
+ "name-fields-with-type": "Bidang dengan jenis",
+ "name-fields-with-value": "Bidang dengan nilai"
},
"menu-item": {
"keyboard-shortcut-label": "Pintasan keyboard"
@@ -8103,55 +8108,55 @@
"config": {
"get-graph-field-options": {
"axis-placement": {
- "description-auto": "",
- "label-auto": "",
- "label-hidden": "",
- "label-left": "",
- "label-right": ""
+ "description-auto": "Bidang pertama di sebelah kiri, yang lainnya di sebelah kanan",
+ "label-auto": "Otomatis",
+ "label-hidden": "Tersembunyi",
+ "label-left": "Kiri",
+ "label-right": "Kanan"
},
"bar-alignment": {
- "description-after": "",
- "description-before": "",
- "description-center": ""
+ "description-after": "Setelah",
+ "description-before": "Sebelum",
+ "description-center": "Pusat"
},
"draw-style": {
- "label-bars": "",
- "label-lines": "",
- "label-points": ""
+ "label-bars": "Bilah",
+ "label-lines": "Garis",
+ "label-points": "Poin"
},
"fill-gradient": {
- "description-hue": "",
- "description-opacity": "",
- "description-scheme": "",
- "label-hue": "",
- "label-none": "",
- "label-opacity": "",
- "label-scheme": ""
+ "description-hue": "Gradien rona warna kecil",
+ "description-opacity": "Aktifkan gradien opasitas isian",
+ "description-scheme": "Gunakan skema warna untuk menentukan gradien",
+ "label-hue": "Rona",
+ "label-none": "Tidak ada",
+ "label-opacity": "Opasitas",
+ "label-scheme": "Skema"
},
"line-interpolation": {
- "description-linear": "",
- "description-smooth": "",
- "description-step-after": "",
- "description-step-before": ""
+ "description-linear": "Linier",
+ "description-smooth": "Halus",
+ "description-step-after": "Langkah setelah",
+ "description-step-before": "Langkah sebelum"
},
"show-points": {
- "description-auto": "",
- "label-always": "",
- "label-auto": "",
- "label-never": ""
+ "description-auto": "Tampilkan titik-titik saat densitasnya rendah",
+ "label-always": "Selalu",
+ "label-auto": "Otomatis",
+ "label-never": "Jangan pernah"
},
"stacking": {
- "label-100": "",
- "label-normal": "",
- "label-off": ""
+ "label-100": "100%",
+ "label-normal": "Normal",
+ "label-off": "Nonaktif"
},
"thresholds-display-mode": {
- "label-dashed-lines": "",
- "label-filled-regions": "",
- "label-filled-regions-and-dashed-lines": "",
- "label-filled-regions-and-lines": "",
- "label-lines": "",
- "label-off": ""
+ "label-dashed-lines": "Sebagai garis (berpola putus-putus)",
+ "label-filled-regions": "Sebagai wilayah yang terisi",
+ "label-filled-regions-and-dashed-lines": "Sebagai area dan garis yang terisi (berpola putus-putus)",
+ "label-filled-regions-and-lines": "Sebagai area dan garis yang terisi",
+ "label-lines": "Sebagai garis",
+ "label-off": "Nonaktif"
}
}
}
@@ -8198,78 +8203,78 @@
},
"heatmap": {
"calculate-from-data-options": {
- "label-no": "",
- "label-yes": ""
- },
- "category-cell-display": "",
- "category-colors": "",
- "category-exemplars": "",
- "category-heatmap": "",
- "category-legend": "",
- "category-tooltip": "",
- "category-y-axis": "",
+ "label-no": "Tidak",
+ "label-yes": "Ya"
+ },
+ "category-cell-display": "Tampilan sel",
+ "category-colors": "Warna",
+ "category-exemplars": "Contoh",
+ "category-heatmap": "Peta panas",
+ "category-legend": "Legenda",
+ "category-tooltip": "Tooltip",
+ "category-y-axis": "Sumbu Y",
"mode-options": {
- "label-opacity": "",
- "label-scheme": ""
- },
- "name-axis-label": "",
- "name-axis-width": "",
- "name-calculate-from-data": "",
- "name-cell-gap": "",
- "name-color": "",
- "name-decimals": "",
- "name-end-color-at-value": "",
- "name-exponent": "",
- "name-hide-cells-gt": "",
- "name-hide-cells-lt": "",
- "name-max-height": "",
- "name-max-value": "",
- "name-max-width": "",
- "name-min-value": "",
- "name-mode": "",
- "name-placement": "",
- "name-reverse": "",
- "name-scale": "",
- "name-scheme": "",
- "name-show-color-scale": "",
- "name-show-histogram": "",
- "name-show-legend": "",
- "name-start-color-from-value": "",
- "name-steps": "",
- "name-tick-alignment": "",
- "name-tooltip-mode": "",
- "name-unit": "",
- "name-value-name": "",
- "name-y-axis-scale": "",
- "placeholder-axis-label": "",
- "placeholder-axis-width": "",
- "placeholder-decimals": "",
- "placeholder-end-color-at-value": "",
- "placeholder-hide-cells-gt": "",
- "placeholder-hide-cells-lt": "",
- "placeholder-max-value": "",
- "placeholder-min-value": "",
- "placeholder-start-color-from-value": "",
- "placeholder-value-name": "",
+ "label-opacity": "Opasitas",
+ "label-scheme": "Skema"
+ },
+ "name-axis-label": "Label sumbu",
+ "name-axis-width": "Lebar sumbu",
+ "name-calculate-from-data": "Hitung dari data",
+ "name-cell-gap": "Jarak sel",
+ "name-color": "Warna",
+ "name-decimals": "Desimal",
+ "name-end-color-at-value": "Akhiri skala warna pada nilai",
+ "name-exponent": "Eksponen",
+ "name-hide-cells-gt": "Sembunyikan sel dengan nilai >=",
+ "name-hide-cells-lt": "Sembunyikan sel dengan nilai <=",
+ "name-max-height": "Tinggi maks",
+ "name-max-value": "Nilai maks",
+ "name-max-width": "Lebar maks",
+ "name-min-value": "Nilai min",
+ "name-mode": "Mode",
+ "name-placement": "Penempatan",
+ "name-reverse": "Balik",
+ "name-scale": "Skala",
+ "name-scheme": "Skema",
+ "name-show-color-scale": "Tampilkan skala warna",
+ "name-show-histogram": "Tampilkan histogram (sumbu Y)",
+ "name-show-legend": "Tampilkan keterangan",
+ "name-start-color-from-value": "Mulai skala warna dari nilai",
+ "name-steps": "Langkah",
+ "name-tick-alignment": "Perataan garis centang",
+ "name-tooltip-mode": "Mode tooltip",
+ "name-unit": "Unit",
+ "name-value-name": "Nama nilai",
+ "name-y-axis-scale": "Skala sumbu Y",
+ "placeholder-axis-label": "Otomatis",
+ "placeholder-axis-width": "Otomatis",
+ "placeholder-decimals": "Otomatis",
+ "placeholder-end-color-at-value": "Otomatis (maks)",
+ "placeholder-hide-cells-gt": "Tidak ada",
+ "placeholder-hide-cells-lt": "Tidak ada",
+ "placeholder-max-value": "Otomatis",
+ "placeholder-min-value": "Otomatis",
+ "placeholder-start-color-from-value": "Otomatis (min)",
+ "placeholder-value-name": "Nilai",
"placement-options": {
- "label-hidden": "",
- "label-left": "",
- "label-right": ""
+ "label-hidden": "Tersembunyi",
+ "label-left": "Kiri",
+ "label-right": "Kanan"
},
"scale-options": {
- "label-exponential": "",
- "label-linear": ""
+ "label-exponential": "Eksponensial",
+ "label-linear": "Linier"
},
"tick-alignment-options": {
- "label-auto": "",
- "label-bottom": "",
- "label-middle": "",
- "label-top": ""
+ "label-auto": "Otomatis",
+ "label-bottom": "Bawah (GE)",
+ "label-middle": "Tengah",
+ "label-top": "Atas (LE)"
},
"tooltip-mode-options": {
- "label-all": "",
- "label-hidden": "",
- "label-single": ""
+ "label-all": "Semua",
+ "label-hidden": "Tersembunyi",
+ "label-single": "Tunggal"
}
},
"help-modal": {
@@ -8329,14 +8334,14 @@
"troubleshooting-help": "Untuk meminta bantuan pemecahan masalah, kirim snapshot panel ini ke Dukungan Teknis Grafana Labs. Snapshot berisi data respons kueri dan pengaturan panel."
},
"histogram": {
- "category-histogram": "",
+ "category-histogram": "Histogram",
"histogram-panel": {
"no-histogram-found-in-response": "Tidak ada histogram yang ditemukan dalam respons"
},
- "name-fill-opacity": "",
- "name-gradient-mode": "",
- "name-line-width": "",
- "name-stacking": ""
+ "name-fill-opacity": "Opasitas isian",
+ "name-gradient-mode": "Mode gradien",
+ "name-line-width": "Lebar garis",
+ "name-stacking": "Tumpukan"
},
"inspector": {
"inspect-data-tab": {
@@ -8712,16 +8717,16 @@
}
},
"logs": {
- "category-logs": "",
+ "category-logs": "Log",
"deduplication-options": {
- "label-exact": "",
- "label-none": "",
- "label-numbers": "",
- "label-signature": ""
- },
- "description-enable-infinite-scrolling": "",
- "description-enable-syntax-highlighting": "",
- "description-show-controls": "",
+ "label-exact": "Tepat",
+ "label-none": "Tidak ada",
+ "label-numbers": "Angka",
+ "label-signature": "Tanda Tangan"
+ },
+ "description-enable-infinite-scrolling": "Eksperimental. Minta lebih banyak hasil dengan menggulir ke bagian bawah daftar log.",
+ "description-enable-syntax-highlighting": "Gunakan tata bahasa pewarnaan sintaks yang telah ditentukan untuk menyoroti bagian yang relevan dari baris log",
+ "description-show-controls": "Tampilkan kontrol untuk melompat ke baris log terakhir atau pertama, dan filter berdasarkan level log",
"fields": {
"type": {
"loki": {
@@ -8732,8 +8737,8 @@
}
},
"font-size-options": {
- "label-default": "",
- "label-small": ""
+ "label-default": "Default",
+ "label-small": "Kecil"
},
"get-dataframe-fields": {
"vars": {
@@ -8780,40 +8785,40 @@
"tooltip-error": "Kesalahan: {{errorMessage}}"
},
"log-line-details": {
- "clear-search": "",
- "close": "",
- "copy-shortlink": "",
- "copy-to-clipboard": "",
+ "clear-search": "Hapus",
+ "close": "Tutup detail log",
+ "copy-shortlink": "Salin tautan pendek",
+ "copy-to-clipboard": "Salin ke papan klip",
"displayed-fields-section": "",
"fields": {
- "adhoc-statistics": "",
- "copy-value-to-clipboard": "",
- "filter-out": "",
- "filter-out-query": "",
+ "adhoc-statistics": "Statistik ad-hoc",
+ "copy-value-to-clipboard": "Salin nilai ke papan klip",
+ "filter-out": "Filter nilai",
+ "filter-out-query": "Filter nilai dalam kueri {{query}}",
"toggle-field-button": {
- "field-instead-message": "",
- "hide-this-field": ""
+ "field-instead-message": "Tampilkan bidang ini, bukan pesan",
+ "hide-this-field": "Sembunyikan bidang ini"
}
},
- "fields-section": "",
- "hide-log-line": "",
+ "fields-section": "Bidang",
+ "hide-log-line": "Sembunyikan baris log",
"inline-mode": "",
- "links-section": "",
+ "links-section": "Tautan",
"log-line-field": "",
- "log-line-section": "",
+ "log-line-section": "Baris log",
"move-displayed-field-down": "",
"move-displayed-field-up": "",
- "no-details": "",
- "pin-line": "",
+ "no-details": "Tidak ada bidang untuk ditampilkan.",
+ "pin-line": "Sematkan log",
"remove-displayed-field": "",
"search": {
- "no-results": ""
+ "no-results": "Tidak ada hasil untuk ditampilkan."
},
- "search-placeholder": "",
- "show-context": "",
- "show-log-line": "",
+ "search-placeholder": "Cari nama dan nilai bidang",
+ "show-context": "Tampilkan konteks",
+ "show-log-line": "Tampilkan baris log",
"sidebar-mode": "",
- "unpin-line": ""
+ "unpin-line": "Buka sematan log"
},
"log-line-menu": {
"copy-link": "Salin tautan ke baris log",
@@ -8826,12 +8831,12 @@
"unpin-from-outline": "Buka sematan log"
},
"log-list-search": {
- "close": "",
- "filter": "",
- "info": "",
- "input-placeholder": "",
- "next": "",
- "prev": ""
+ "close": "Tutup pencarian",
+ "filter": "Filter log yang cocok",
+ "info": "Pencarian sisi klien untuk string dalam log yang ditampilkan. Jangan sampai tertukar dengan filter kueri. Gunakan komponen ini untuk mencari string tertentu dalam hasil log Anda.",
+ "input-placeholder": "Cari di log",
+ "next": "Hasil berikutnya",
+ "prev": "Hasil sebelumnya"
},
"log-row-context-modal": {
"error-loading-log-more-logs": "Kesalahan saat memuat lebih banyak log.",
@@ -8886,7 +8891,7 @@
"escape-newlines": "Perbaiki escape sequence baris baru dan tab yang salah di baris log",
"font-size-default": "Gunakan ukuran fon kecil",
"font-size-small": "Gunakan ukuran fon default",
- "hide-search": "",
+ "hide-search": "Tutup pencarian",
"hide-timestamps": "Sembunyikan stempel waktu",
"hide-unique-labels": "Sembunyikan label unik",
"newest-first": "Diurutkan berdasarkan log terbaru lebih dulu - Klik untuk menampilkan yang paling lama lebih dulu",
@@ -8895,7 +8900,7 @@
"remove-escaping": "Hapus escape",
"scroll-bottom": "Gulir ke bawah",
"scroll-top": "Gulir ke atas",
- "show-search": "",
+ "show-search": "Cari di hasil log",
"show-timestamps": "Tampilkan stempel waktu",
"show-unique-labels": "Tampilkan label unik",
"unwrap-lines": "Batal terapkan wrap pada baris",
@@ -8913,26 +8918,26 @@
"common-labels": "Label umum:"
}
},
- "name-common-labels": "",
- "name-deduplication": "",
+ "name-common-labels": "Label umum",
+ "name-deduplication": "Deduplikasi",
"name-details-mode": "",
"name-details-options": {
"label-inline": "",
"label-sidebar": ""
},
- "name-enable-infinite-scrolling": "",
- "name-enable-log-details": "",
- "name-enable-syntax-highlighting": "",
- "name-font-size": "",
- "name-order": "",
- "name-prettify-json": "",
- "name-show-controls": "",
- "name-time": "",
- "name-unique-labels": "",
- "name-wrap-lines": "",
+ "name-enable-infinite-scrolling": "Aktifkan gulir tak terbatas",
+ "name-enable-log-details": "Aktifkan detail log",
+ "name-enable-syntax-highlighting": "Aktifkan penyorotan sintaks",
+ "name-font-size": "Ukuran font",
+ "name-order": "Urutan",
+ "name-prettify-json": "Rapikan JSON",
+ "name-show-controls": "Tampilkan kontrol",
+ "name-time": "Waktu",
+ "name-unique-labels": "Label unik",
+ "name-wrap-lines": "Bungkus baris",
"order-options": {
- "label-newest-first": "",
- "label-oldest-first": ""
+ "label-newest-first": "Terbaru lebih dulu",
+ "label-oldest-first": "Terlama lebih dulu"
},
"out-of-range-message": {
"end-of-the-selected-time-range": "Akhir rentang waktu yang dipilih."
@@ -8946,7 +8951,7 @@
"un-themed-log-details": {
"aria-label-data-links": "Tautan data",
"aria-label-fields": "Bidang",
- "aria-label-line": "",
+ "aria-label-line": "Baris log",
"aria-label-log-level": "Level log",
"aria-label-no-details": "Tidak ada detail"
},
@@ -8967,27 +8972,27 @@
}
},
"logs-new": {
- "category-logs": "",
+ "category-logs": "Log",
"deduplication-options": {
- "label-exact": "",
- "label-none": "",
- "label-numbers": "",
- "label-signature": ""
- },
- "description-infinite-scrolling": "",
- "description-show-controls": "",
- "description-syntax-highlighting": "",
- "name-deduplication": "",
- "name-enable-log-details": "",
- "name-infinite-scrolling": "",
- "name-order": "",
- "name-show-controls": "",
- "name-syntax-highlighting": "",
- "name-time": "",
- "name-wrap-lines": "",
+ "label-exact": "Tepat",
+ "label-none": "Tidak ada",
+ "label-numbers": "Angka",
+ "label-signature": "Tanda Tangan"
+ },
+ "description-infinite-scrolling": "Eksperimental. Minta lebih banyak hasil dengan menggulir ke bagian bawah daftar log.",
+ "description-show-controls": "Tampilkan kontrol untuk melompat ke baris log terakhir atau pertama, dan filter berdasarkan level log",
+ "description-syntax-highlighting": "Gunakan tata bahasa pewarnaan sintaks yang telah ditentukan untuk menyoroti bagian yang relevan dari baris log",
+ "name-deduplication": "Deduplikasi",
+ "name-enable-log-details": "Aktifkan detail log",
+ "name-infinite-scrolling": "Aktifkan gulir tak terbatas",
+ "name-order": "Urutan",
+ "name-show-controls": "Tampilkan kontrol",
+ "name-syntax-highlighting": "Aktifkan penyorotan sintaks",
+ "name-time": "Waktu",
+ "name-wrap-lines": "Bungkus baris",
"order-options": {
- "label-newest-first": "",
- "label-oldest-first": ""
+ "label-newest-first": "Terbaru lebih dulu",
+ "label-oldest-first": "Terlama lebih dulu"
}
},
"manage-dashbaords": {
@@ -9685,12 +9690,12 @@
"rss-button": "Terbaru dari blog"
},
"news": {
- "category-news": "",
- "description-show-image": "",
- "description-url": "",
+ "category-news": "Berita",
+ "description-show-image": "Mengontrol jika gambar sosial item berita (og:image) ditampilkan di atas konten teks",
+ "description-url": "Mendukung umpan RSS dan Atom",
"link-title": "Buka blog Grafana labs",
- "name-show-image": "",
- "name-url": "",
+ "name-show-image": "Tampilkan gambar",
+ "name-url": "URL",
"news-panel": {
"body-error-loading-rss-feed": "Pastikan URL umpan sudah benar dan CORS dikonfigurasi dengan benar di server. Lihat <2>Dokumentasi panel berita.2>",
"loading": "Memuat...",
@@ -9699,27 +9704,27 @@
"title": "Terbaru dari blog"
},
"node-graph": {
- "category-edges": "",
- "category-node-graph": "",
- "category-nodes": "",
+ "category-edges": "Edge",
+ "category-node-graph": "Grafik node",
+ "category-nodes": "Node",
"layout-algorithm-options": {
- "description-force": "",
- "description-grid": "",
- "description-layered": "",
- "label-force": "",
- "label-grid": "",
- "label-layered": ""
- },
- "name-arc-sections": "",
- "name-layout-algorithm": "",
- "name-main-stat-unit": "",
- "name-secondary-stat-unit": "",
- "name-zoom-mode": "",
+ "description-force": "Gunakan tata letak berbasis gaya tarik-tolak",
+ "description-grid": "Gunakan tata letak kisi",
+ "description-layered": "Gunakan tata letak layer",
+ "label-force": "Gaya tarik-tolak",
+ "label-grid": "Kisi",
+ "label-layered": "Berlapis"
+ },
+ "name-arc-sections": "Bagian busur",
+ "name-layout-algorithm": "Algoritme tata letak",
+ "name-main-stat-unit": "Unit stat utama",
+ "name-secondary-stat-unit": "Unit stat sekunder",
+ "name-zoom-mode": "Mode zoom",
"zoom-mode-options": {
- "description-cooperative": "",
- "description-greedy": "",
- "label-cooperative": "",
- "label-greedy": ""
+ "description-cooperative": "Memungkinkan Anda menggulir halaman secara normal",
+ "description-greedy": "Bereaksi terhadap semua gerakan zoom",
+ "label-cooperative": "Kooperatif",
+ "label-greedy": "Serakah"
}
},
"nodeGraph": {
@@ -9795,40 +9800,40 @@
},
"registry": {
"get-all-option-editors": {
- "description-time-zone": "",
- "name-time-zone": ""
+ "description-time-zone": "Pemilihan zona waktu",
+ "name-time-zone": "Zona waktu"
},
"standard-field-condigs": {
- "category-data-links": ""
+ "category-data-links": "Tautan data dan tindakan"
},
"standard-field-configs": {
- "category": "",
- "category-thresholds": "",
- "category-value-mappings": "",
- "description-display-name": "",
- "description-field-min-max": "",
- "description-max": "",
- "description-min": "",
- "description-no-value": "",
- "description-value-mappings": "",
- "name-actions": "",
- "name-ad-hoc": "",
- "name-color-scheme": "",
- "name-data-links": "",
- "name-decimals": "",
- "name-display-name": "",
- "name-field-min-max": "",
- "name-max": "",
- "name-min": "",
- "name-no-value": "",
- "name-thresholds": "",
- "name-unit": "",
- "name-value-mappings": "",
- "placeholder-decimals": "",
- "placeholder-display-name": "",
- "placeholder-max": "",
- "placeholder-min": "",
- "placeholder-unit": ""
+ "category": "Opsi standar",
+ "category-thresholds": "Ambang batas",
+ "category-value-mappings": "Pemetaan nilai",
+ "description-display-name": "Ubah nama bidang atau seri",
+ "description-field-min-max": "Hitung min maks per bidang",
+ "description-max": "Biarkan kosong untuk menghitung berdasarkan semua nilai",
+ "description-min": "Biarkan kosong untuk menghitung berdasarkan semua nilai",
+ "description-no-value": "Yang ditampilkan ketika tidak ada nilai",
+ "description-value-mappings": "Ubah teks tampilan berdasarkan nilai input",
+ "name-actions": "Tindakan",
+ "name-ad-hoc": "Dapat difilter secara ad-hoc",
+ "name-color-scheme": "Skema warna",
+ "name-data-links": "Tautan data",
+ "name-decimals": "Desimal",
+ "name-display-name": "Nama tampilan",
+ "name-field-min-max": "Nilai min/maks bidang",
+ "name-max": "Maksimum",
+ "name-min": "Minimum",
+ "name-no-value": "Tidak ada nilai",
+ "name-thresholds": "Ambang batas",
+ "name-unit": "Unit",
+ "name-value-mappings": "Pemetaan nilai",
+ "placeholder-decimals": "otomatis",
+ "placeholder-display-name": "tidak ada",
+ "placeholder-max": "otomatis",
+ "placeholder-min": "otomatis",
+ "placeholder-unit": "tidak ada"
}
},
"units": {
@@ -9937,13 +9942,13 @@
},
"panel-data-error-view": {
"missing-value": {
- "number": "",
- "string": "",
- "time": "",
- "unknown": ""
+ "number": "Data tidak memiliki bidang angka",
+ "string": "Data tidak memiliki bidang string",
+ "time": "Data tidak memiliki bidang waktu",
+ "unknown": "Tidak dapat memvisualisasikan data"
},
"no-value": {
- "default": ""
+ "default": "Tidak ada data"
},
"open-visualization-suggestions": "Buka saran visualisasi",
"switch-to-table": "Alihkan ke tabel"
@@ -9983,25 +9988,25 @@
"select-placeholder": "Filter berdasarkan jenis"
},
"piechart": {
- "category-legend": "",
- "category-pie-chart": "",
- "description-labels": "",
- "description-pie-chart-type": "",
+ "category-legend": "Legenda",
+ "category-pie-chart": "Diagram lingkaran",
+ "description-labels": "Pilih label yang akan ditampilkan di diagram lingkaran",
+ "description-pie-chart-type": "Bagaimana diagram lingkaran harus ditampilkan",
"labels-options": {
- "label-name": "",
- "label-percent": "",
- "label-value": ""
+ "label-name": "Nama",
+ "label-percent": "Persen",
+ "label-value": "Nilai"
},
"legend-values-options": {
- "label-percent": "",
- "label-value": ""
+ "label-percent": "Persen",
+ "label-value": "Nilai"
},
- "name-labels": "",
- "name-legend-values": "",
- "name-pie-chart-type": "",
+ "name-labels": "Label",
+ "name-legend-values": "Nilai legenda",
+ "name-pie-chart-type": "Jenis diagram lingkaran",
"pie-chart-type-options": {
- "label-donut": "",
- "label-pie": ""
+ "label-donut": "Donat",
+ "label-pie": "Lingkaran"
}
},
"playlist": {
@@ -10169,7 +10174,7 @@
"dependencies": "Dependensi",
"documentation": "Dokumentasi",
"downloads": "Unduhan",
- "from": "",
+ "from": "Dari",
"installedVersion": "Versi Terinstal",
"lastCommitDate": "Tanggal melakukan terakhir:",
"latestReleaseDate": "Tanggal rilis terbaru:",
@@ -10239,7 +10244,7 @@
},
"install-controls-warning": {
"body-not-published": "Plugin ini tidak dipublikasikan ke <2>grafana.com/plugins2> dan tidak dapat dikelola melalui katalog.",
- "enterprise-plugin-info": "",
+ "enterprise-plugin-info": "Plugin ini hanya tersedia di Grafana Cloud dan Grafana Enterprise.",
"learn-more": "Pelajari lebih lanjut",
"no-valid-grafana-enterprise-license-detected": "Tidak ada lisensi Grafana Enterprise yang valid terdeteksi.",
"title-dev-alert": "Ini adalah pengembangan plugin dan instalasinya tidak dapat dihapus.",
@@ -10397,13 +10402,13 @@
},
"provisioned-resource-form": {
"save-or-delete-resource-shared-fields": {
- "comment-placeholder-describe-changes-optional": "",
- "description-branch-name-in-git-hub": "",
+ "comment-placeholder-describe-changes-optional": "Tambahkan catatan untuk menjelaskan perubahan Anda (opsional)",
+ "description-branch-name-in-git-hub": "Nama cabang di GitHub",
"description-inside-repository": "",
- "label-branch": "",
- "label-comment": "",
- "label-path": "",
- "label-workflow": ""
+ "label-branch": "Cabang",
+ "label-comment": "Komentar",
+ "label-path": "Jalur",
+ "label-workflow": "Alur kerja"
}
},
"provisioned-resource-preview-banner": {
@@ -11677,112 +11682,112 @@
},
"stat": {
"add-orientation-option": {
- "description-orientation": "",
- "name-orientation": "",
+ "description-orientation": "Orientasi tata letak",
+ "name-orientation": "Orientasi",
"orientation-options": {
- "label-auto": "",
- "label-horizontal": "",
- "label-vertical": ""
+ "label-auto": "Otomatis",
+ "label-horizontal": "Horizontal",
+ "label-vertical": "Vertikal"
}
},
"add-standard-data-reduce-options": {
- "category-value-options": "",
- "description-calculation": "",
- "description-fields": "",
- "description-limit": "",
- "description-show": "",
+ "category-value-options": "Opsi nilai",
+ "description-calculation": "Pilih fungsi/perhitungan reducer",
+ "description-fields": "Pilih bidang yang harus disertakan dalam panel",
+ "description-limit": "Jumlah baris maksimum untuk ditampilkan",
+ "description-show": "Hitung satu nilai per kolom atau seri atau tampilkan setiap baris",
"fields-options": {
- "label-all-fields": "",
- "label-numeric-fields": ""
+ "label-all-fields": "Semua Bidang",
+ "label-numeric-fields": "Bidang Numerik"
},
- "name-calculation": "",
- "name-fields": "",
- "name-limit": "",
- "name-show": "",
+ "name-calculation": "Perhitungan",
+ "name-fields": "Bidang",
+ "name-limit": "Batas",
+ "name-show": "Tampilkan",
"show-options": {
- "label-all-values": "",
- "label-calculate": ""
+ "label-all-values": "Semua prinsip",
+ "label-calculate": "Kalkulasi"
}
},
- "category-stat-styles": "",
+ "category-stat-styles": "Gaya statistik",
"color-mode-options": {
- "label-background-gradient": "",
- "label-background-solid": "",
- "label-none": "",
- "label-value": ""
+ "label-background-gradient": "Gradien Latar Belakang",
+ "label-background-solid": "Latar Belakang Solid",
+ "label-none": "Tidak ada",
+ "label-value": "Nilai"
},
- "description-graph-mode": "",
- "description-text-mode": "",
+ "description-graph-mode": "Grafik panel statistik/mode sparkline",
+ "description-text-mode": "Kontrol jika nama dan nilai ditampilkan atau hanya nama",
"graph-mode": {
"options": {
- "label-area": "",
- "label-none": ""
+ "label-area": "Area",
+ "label-none": "Tidak ada"
}
},
"name-color-modcolor-mode-options": {
- "label": ""
- },
- "name-graph-mode": "",
- "name-show-percent-change": "",
- "name-text-alignment": "",
- "name-text-mode": "",
- "name-wide-layout": "",
- "percent-change-color-mode": "",
+ "label": "Mode warna"
+ },
+ "name-graph-mode": "Mode diagram",
+ "name-show-percent-change": "Tampilkan perubahan persen",
+ "name-text-alignment": "Perataan teks",
+ "name-text-mode": "Mode teks",
+ "name-wide-layout": "Tata letak lebar",
+ "percent-change-color-mode": "Mode warna perubahan persen",
"percent-change-color-mode-options": {
- "label-inverted": "",
- "label-same-as-value": "",
- "label-standard": ""
+ "label-inverted": "Kebalikan",
+ "label-same-as-value": "Sama dengan Nilai",
+ "label-standard": "Standar"
},
"text-alignment-options": {
- "label-auto": "",
- "label-center": ""
+ "label-auto": "Otomatis",
+ "label-center": "Pusat"
},
"text-mode-options": {
- "label-auto": "",
- "label-name": "",
- "label-none": "",
- "label-value": "",
- "label-value-and-name": ""
+ "label-auto": "Otomatis",
+ "label-name": "Nama",
+ "label-none": "Tidak ada",
+ "label-value": "Nilai",
+ "label-value-and-name": "Nilai dan nama"
},
"wide-layout-options": {
- "label-off": "",
- "label-on": ""
+ "label-off": "Nonaktif",
+ "label-on": "Aktif"
}
},
"state-timeline": {
"align-values-options": {
- "label-center": "",
- "label-left": "",
- "label-right": ""
- },
- "category-state-timeline": "",
- "name-align-values": "",
- "name-connect-null-values": "",
- "name-disconnect-values": "",
- "name-fill-opacity": "",
- "name-line-width": "",
- "name-merge-equal-consecutive-values": "",
- "name-page-size": "",
- "name-row-height": "",
- "name-show-values": "",
+ "label-center": "Pusat",
+ "label-left": "Kiri",
+ "label-right": "Kanan"
+ },
+ "category-state-timeline": "Lini masa status",
+ "name-align-values": "Ratakan nilai",
+ "name-connect-null-values": "Sambungkan nilai nol",
+ "name-disconnect-values": "Putuskan sambungan nilai",
+ "name-fill-opacity": "Opasitas isian",
+ "name-line-width": "Lebar garis",
+ "name-merge-equal-consecutive-values": "Gabungkan nilai berurutan yang sama",
+ "name-page-size": "Ukuran halaman (aktifkan paginasi)",
+ "name-row-height": "Tinggi baris",
+ "name-show-values": "Tampilkan nilai",
"show-values-options": {
- "label-always": "",
- "label-auto": "",
- "label-never": ""
+ "label-always": "Selalu",
+ "label-auto": "Otomatis",
+ "label-never": "Jangan pernah"
}
},
"status-history": {
- "category-status-history": "",
- "name-column-width": "",
- "name-fill-opacity": "",
- "name-line-width": "",
- "name-page-size": "",
- "name-row-height": "",
- "name-show-values": "",
+ "category-status-history": "Riwayat status",
+ "name-column-width": "Lebar kolom",
+ "name-fill-opacity": "Opasitas isian",
+ "name-line-width": "Lebar garis",
+ "name-page-size": "Ukuran halaman (aktifkan paginasi)",
+ "name-row-height": "Tinggi baris",
+ "name-show-values": "Tampilkan nilai",
"show-values-options": {
- "label-always": "",
- "label-auto": "",
- "label-never": ""
+ "label-always": "Selalu",
+ "label-auto": "Otomatis",
+ "label-never": "Jangan pernah"
},
"status-history-panel": {
"too-many-points_other": "Terlalu banyak poin untuk divisualisasikan dengan benar. <1>1>Perbarui kueri untuk menghasilkan lebih sedikit poin. <3>3>({{count}} poin diterima)"
@@ -11821,13 +11826,13 @@
"label-gauge-display-mode": "Mode tampilan alat ukur",
"label-value-display": "Tampilan nilai"
},
- "category-cell-options": "",
- "category-table": "",
- "category-table-footer": "",
+ "category-cell-options": "Opsi sel",
+ "category-table": "Tabel",
+ "category-table-footer": "Footer tabel",
"cell-height-options": {
- "label-large": "",
- "label-medium": "",
- "label-small": ""
+ "label-large": "Besar",
+ "label-medium": "Sedang",
+ "label-small": "Kecil"
},
"color-background-cell-options-editor": {
"description-apply-to-entire-row": "Jika dipilih, seluruh baris akan berwarna seperti sel ini.",
@@ -11841,22 +11846,22 @@
"wrap-text": "Pecah baris teks"
},
"column-alignment-options": {
- "label-auto": "",
- "label-center": "",
- "label-left": "",
- "label-right": ""
+ "label-auto": "Otomatis",
+ "label-center": "Pusat",
+ "label-left": "Kiri",
+ "label-right": "Kanan"
},
"container": {
"content": "Menampilkan terlalu banyak kolom dalam satu tabel dapat memengaruhi kinerja dan membuat data lebih sulit dibaca. Pertimbangkan untuk menyempurnakan kueri Anda.",
"show-all-series": "Tampilkan semua kolom",
"show-only-series": "Menampilkan {{MAX_NUMBER_OF_COLUMNS}} kolom saja"
},
- "description-calculation": "",
- "description-cell-value-inspect": "",
- "description-column-filter": "",
- "description-count-rows": "",
- "description-fields": "",
- "description-min-column-width": "",
+ "description-calculation": "Pilih fungsi/perhitungan reducer",
+ "description-cell-value-inspect": "Aktifkan pemeriksaan nilai sel di jendela modal",
+ "description-column-filter": "Mengaktifkan/menonaktifkan filter bidang di tabel",
+ "description-count-rows": "Tampilkan satu hitungan untuk semua baris data",
+ "description-fields": "Pilih bidang yang harus dihitung",
+ "description-min-column-width": "Lebar minimum untuk perubahan ukuran kolom otomatis",
"description-wrap-header-text": "",
"image-cell-options-editor": {
"description-alt-text": "Teks alternatif yang akan ditampilkan jika gambar tidak dapat ditampilkan atau untuk pengguna yang menggunakan pembaca layar",
@@ -11864,61 +11869,61 @@
"label-alt-text": "Teks alt",
"label-title-text": "Teks judul"
},
- "name-calculation": "",
- "name-cell-height": "",
- "name-cell-type": "",
- "name-cell-value-inspect": "",
- "name-column-alignment": "",
- "name-column-filter": "",
- "name-column-width": "",
- "name-count-rows": "",
- "name-enable-paginations": "",
- "name-fields": "",
- "name-hide-in-table": "",
- "name-min-column-width": "",
- "name-show-table-footer": "",
- "name-show-table-header": "",
- "name-wrap-header-text": "",
- "placeholder-column-width": "",
- "placeholder-fields": ""
+ "name-calculation": "Perhitungan",
+ "name-cell-height": "Tinggi sel",
+ "name-cell-type": "Jenis sel",
+ "name-cell-value-inspect": "Pemeriksaan nilai sel",
+ "name-column-alignment": "Perataan kolom",
+ "name-column-filter": "Filter kolom",
+ "name-column-width": "Lebar kolom",
+ "name-count-rows": "Hitung baris",
+ "name-enable-paginations": "Aktifkan paginasi",
+ "name-fields": "Bidang",
+ "name-hide-in-table": "Sembunyikan di tabel",
+ "name-min-column-width": "Lebar kolom minimum",
+ "name-show-table-footer": "Tampilkan footer tabel",
+ "name-show-table-header": "Tampilkan header tabel",
+ "name-wrap-header-text": "Bungkus teks header",
+ "placeholder-column-width": "otomatis",
+ "placeholder-fields": "Semua Bidang Numerik"
},
"table-new": {
- "category-cell-options": "",
- "category-table": "",
- "category-table-footer": "",
+ "category-cell-options": "Opsi sel",
+ "category-table": "Tabel",
+ "category-table-footer": "Footer tabel",
"cell-height-options": {
- "label-large": "",
- "label-medium": "",
- "label-small": ""
+ "label-large": "Besar",
+ "label-medium": "Sedang",
+ "label-small": "Kecil"
},
"column-alignment-options": {
- "label-auto": "",
- "label-center": "",
- "label-left": "",
- "label-right": ""
- },
- "description-calculation": "",
- "description-cell-value-inspect": "",
- "description-column-filter": "",
- "description-count-rows": "",
- "description-fields": "",
- "description-min-column-width": "",
- "name-calculation": "",
- "name-cell-height": "",
- "name-cell-type": "",
- "name-cell-value-inspect": "",
- "name-column-alignment": "",
- "name-column-filter": "",
- "name-column-width": "",
- "name-count-rows": "",
- "name-enable-pagination": "",
- "name-fields": "",
- "name-hide-in-table": "",
- "name-min-column-width": "",
- "name-show-table-footer": "",
- "name-show-table-header": "",
- "placeholder-column-width": "",
- "placeholder-fields": ""
+ "label-auto": "Otomatis",
+ "label-center": "Pusat",
+ "label-left": "Kiri",
+ "label-right": "Kanan"
+ },
+ "description-calculation": "Pilih fungsi/perhitungan reducer",
+ "description-cell-value-inspect": "Aktifkan pemeriksaan nilai sel di jendela modal",
+ "description-column-filter": "Mengaktifkan/menonaktifkan filter bidang di tabel",
+ "description-count-rows": "Tampilkan satu hitungan untuk semua baris data",
+ "description-fields": "Pilih bidang yang harus dihitung",
+ "description-min-column-width": "Lebar minimum untuk perubahan ukuran kolom otomatis",
+ "name-calculation": "Perhitungan",
+ "name-cell-height": "Tinggi sel",
+ "name-cell-type": "Jenis sel",
+ "name-cell-value-inspect": "Pemeriksaan nilai sel",
+ "name-column-alignment": "Perataan kolom",
+ "name-column-filter": "Filter kolom",
+ "name-column-width": "Lebar kolom",
+ "name-count-rows": "Hitung baris",
+ "name-enable-pagination": "Aktifkan paginasi",
+ "name-fields": "Bidang",
+ "name-hide-in-table": "Sembunyikan di tabel",
+ "name-min-column-width": "Lebar kolom minimum",
+ "name-show-table-footer": "Tampilkan footer tabel",
+ "name-show-table-header": "Tampilkan header tabel",
+ "placeholder-column-width": "otomatis",
+ "placeholder-fields": "Semua Bidang Numerik"
},
"tag-filter": {
"clear-button": "Hapus tag",
@@ -12003,17 +12008,17 @@
}
},
"text": {
- "category-text": "",
+ "category-text": "Teks",
"mode-options": {
- "label-code": "",
- "label-html": "",
- "label-markdown": ""
+ "label-code": "Kode",
+ "label-html": "HTML",
+ "label-markdown": "Markdown"
},
- "name-content": "",
- "name-language": "",
- "name-mode": "",
- "name-show-line-numbers": "",
- "name-show-mini-map": ""
+ "name-content": "Konten",
+ "name-language": "Bahasa",
+ "name-mode": "Mode",
+ "name-show-line-numbers": "Tampilkan nomor baris",
+ "name-show-mini-map": "Tampilkan peta mini"
},
"theme-preview": {
"breadcrumbs": {
@@ -12061,7 +12066,7 @@
"apply-button": "Gunakan rentang waktu",
"default-error": "Masukkan tanggal sebelumnya atau \"{{now}}\"",
"fiscal-year": "Tahun fiskal: {{from}} - {{to}}",
- "from-input": "",
+ "from-input": "Dari",
"open-input-calendar": "Buka kalender",
"range-error": "\"Dari\" tidak boleh setelah \"Hingga\"",
"to-input": "Hingga"
@@ -12079,7 +12084,7 @@
"aria-role": "Pemilihan rentang waktu",
"default-title": "Rentang waktu",
"example-title": "Contoh rentang waktu",
- "from-label": "",
+ "from-label": "Dari",
"from-to": " {{timeOptionFrom}} hingga{{timeOptionTo}} ",
"specify": "Tentukan rentang waktu",
"submit-button-label": "Tombol kirim TimePicker",
@@ -12092,8 +12097,8 @@
},
"timeline": {
"missing-field": {
- "all": "",
- "time": ""
+ "all": "Tidak ada bidang yang dapat digambarkan dalam bentuk diagram",
+ "time": "Data tidak memiliki bidang waktu"
}
},
"timeseries": {
@@ -12111,54 +12116,54 @@
"tooltip-delete": "Hapus",
"tooltip-edit": "Edit"
},
- "category-axis": "",
+ "category-axis": "Sumbu",
"config": {
"get-graph-field-config": {
- "aria-label-bar-width-factor": "",
- "aria-label-fill-opacity": "",
- "aria-label-line-width": "",
- "aria-label-point-size": "",
- "category-graph-styles": "",
- "category-thresholds": "",
- "name-bar-alignment": "",
- "name-bar-width-factor": "",
- "name-connect-nulls": "",
- "name-disconnect-values": "",
- "name-fill-below-to": "",
- "name-fill-opacity": "",
- "name-gradient-mode": "",
- "name-line-interpolation": "",
- "name-line-style": "",
- "name-line-width": "",
- "name-point-size": "",
- "name-show-points": "",
- "name-show-thresholds": "",
- "name-style": "",
- "name-transform": "",
+ "aria-label-bar-width-factor": "Faktor lebar batang",
+ "aria-label-fill-opacity": "Opasitas isian",
+ "aria-label-line-width": "Lebar garis",
+ "aria-label-point-size": "Ukuran poin",
+ "category-graph-styles": "Gaya tampilan diagram",
+ "category-thresholds": "Ambang batas",
+ "name-bar-alignment": "Perataan batang",
+ "name-bar-width-factor": "Faktor lebar batang",
+ "name-connect-nulls": "Sambungkan nilai nol",
+ "name-disconnect-values": "Putuskan sambungan nilai",
+ "name-fill-below-to": "Isi di bawah ini untuk",
+ "name-fill-opacity": "Opasitas isian",
+ "name-gradient-mode": "Mode gradien",
+ "name-line-interpolation": "Interpolasi garis",
+ "name-line-style": "Gaya tampilan garis",
+ "name-line-width": "Lebar garis",
+ "name-point-size": "Ukuran poin",
+ "name-show-points": "Tampilkan poin",
+ "name-show-thresholds": "Tampilkan ambang batas",
+ "name-style": "Gaya tampilan",
+ "name-transform": "Ubah",
"transform-options": {
- "description-constant": "",
- "description-style": "",
- "label-constant": "",
- "label-style": ""
+ "description-constant": "Nilai pertama akan ditampilkan sebagai garis konstan",
+ "description-style": "Balik hasil ke nilai negatif pada sumbu y",
+ "label-constant": "Konstan",
+ "label-style": "Y Negatif"
}
}
},
"insert-nulls-editor": {
"disconnect-options": {
- "label-never": "",
- "label-threshold": ""
+ "label-never": "Jangan pernah",
+ "label-threshold": "Ambang batas"
}
},
"line-style-editor": {
"line-fill-options": {
- "label-dash": "",
- "label-dots": "",
- "label-solid": ""
+ "label-dash": "Tanda pisah",
+ "label-dots": "Titik",
+ "label-solid": "Solid"
},
"title-the-input-expects-a-segment-list": "Input mengharapkan daftar segmen",
"tooltip-help": "Bantuan"
},
- "name-time-zone": "",
+ "name-time-zone": "Zona waktu",
"nulls-threshold-input": {
"placeholder-never": "Jangan pernah"
},
@@ -12168,9 +12173,9 @@
},
"span-nulls-editor": {
"gaps-options": {
- "label-always": "",
- "label-never": "",
- "label-threshold": ""
+ "label-always": "Selalu",
+ "label-never": "Jangan pernah",
+ "label-threshold": "Ambang batas"
}
},
"timezones-editor": {
@@ -12179,17 +12184,17 @@
}
},
"traces": {
- "category-span-filters": "",
- "name-critical-path-only": "",
- "name-find-in-trace": "",
- "name-max-duration": "",
- "name-min-duration": "",
- "name-service-name": "",
- "name-service-name-operator": "",
- "name-show-matches-only": "",
- "name-span-name": "",
- "name-span-name-operator": "",
- "name-tags": "",
+ "category-span-filters": "Filter rentang",
+ "name-critical-path-only": "Hanya tampilkan jalur kritis",
+ "name-find-in-trace": "Temukan dalam jejak",
+ "name-max-duration": "Durasi maks",
+ "name-min-duration": "Durasi min",
+ "name-service-name": "Nama layanan",
+ "name-service-name-operator": "Operator nama layanan",
+ "name-show-matches-only": "Hanya tampilkan kecocokan",
+ "name-span-name": "Nama span",
+ "name-span-name-operator": "Operator nama span",
+ "name-tags": "Tag",
"traces-panel": {
"no-data-found-in-response": "Tidak ada data yang ditemukan dalam respons"
}
@@ -12204,20 +12209,20 @@
"axis-editor": {
"log-mode-options": {
"description": {
- "split-the-buckets-based-on-size": ""
+ "split-the-buckets-based-on-size": "Pisahkan bucket berdasarkan ukuran"
},
"label": {
- "split": ""
+ "split": "Pisah"
}
},
"mode-options": {
"description": {
- "split-the-buckets-based-on-count": "",
- "split-the-buckets-based-on-size": ""
+ "split-the-buckets-based-on-count": "Pisahkan bucket berdasarkan jumlah",
+ "split-the-buckets-based-on-size": "Pisahkan bucket berdasarkan ukuran"
},
"label": {
- "count": "",
- "size": ""
+ "count": "Jumlah",
+ "size": "Ukuran"
}
},
"placeholder-auto": "Auto"
@@ -12249,9 +12254,9 @@
},
"calculate-heatmap": {
"add-heatmap-calculation-options": {
- "name-x-bucket": "",
- "name-y-bucket": "",
- "name-y-bucket-scale": ""
+ "name-x-bucket": "Bucket X",
+ "name-y-bucket": "Bucket Y",
+ "name-y-bucket-scale": "Skala Bucket Y"
}
},
"concatenate-transformer-editor": {
@@ -12312,8 +12317,8 @@
"tooltip-enable": "Aktifkan"
},
"draggable-sort-order": {
- "asc": "",
- "desc": "",
+ "asc": "ASC",
+ "desc": "DESC",
"off": "Nonaktif"
},
"editors": {
@@ -12712,9 +12717,9 @@
"description": {
"reorder-hide-or-rename-fields": ""
},
- "field-order": "",
+ "field-order": "Urutan bidang",
"field-order-auto": "Auto",
- "field-order-manual": "",
+ "field-order-manual": "Manual",
"first-frame-warning": "Penataan bidang hanya berfungsi dengan satu frame. Pertimbangkan untuk menerapkan transformasi gabungan atau memfilter input terlebih dahulu.",
"name": {
"organize-fields": ""
@@ -12841,7 +12846,7 @@
"polynomial": "Polinomial"
}
},
- "regression": "",
+ "regression": "regresi",
"tooltip-number-of-xy-points-to-predict": "Jumlah poin X,Y untuk diprediksi"
},
"rename-by-regex-transformer": {
@@ -12994,10 +12999,10 @@
}
},
"trend": {
- "category-x-axis": "",
- "description-x-field": "",
- "name-x-field": "",
- "placeholder-x-field": ""
+ "category-x-axis": "Sumbu X",
+ "description-x-field": "Nilai numerik yang meningkat",
+ "name-x-field": "Bidang X",
+ "placeholder-x-field": "Nilai numerik pertama"
},
"upgrade-box": {
"discovery-text": "Anda telah menemukan fitur Pro!",
@@ -13260,20 +13265,20 @@
}
},
"xychart": {
- "category-xychart": "",
- "name-fill-opacity": "",
- "name-line-style": "",
- "name-line-width": "",
- "name-max-point-size": "",
- "name-min-point-size": "",
- "name-point-shape": "",
- "name-point-size": "",
- "name-point-stroke-width": "",
- "name-series-mapping": "",
- "name-show": "",
+ "category-xychart": "Diagram XY",
+ "name-fill-opacity": "Opasitas isian",
+ "name-line-style": "Gaya tampilan garis",
+ "name-line-width": "Lebar garis",
+ "name-max-point-size": "Ukuran poin maks",
+ "name-min-point-size": "Ukuran poin min",
+ "name-point-shape": "Bentuk poin",
+ "name-point-size": "Ukuran poin",
+ "name-point-stroke-width": "Lebar goresan poin",
+ "name-series-mapping": "Pemetaan data seri",
+ "name-show": "Tampilkan",
"point-shape-options": {
- "label-circle": "",
- "label-square": ""
+ "label-circle": "Lingkaran",
+ "label-square": "Persegi"
},
"series-editor": {
"add-series": "Tambahkan data seri",
@@ -13285,18 +13290,18 @@
"label-y-field": "Bidang Y",
"placeholder-all-frames": "Semua frame",
"placeholder-select-frame": "Pilih bingkai",
- "placeholder-x-field": "",
- "placeholder-y-field": "",
+ "placeholder-x-field": "Bidang angka atau waktu pertama di setiap bingkai",
+ "placeholder-y-field": "Bidang angka yang tersisa di setiap bingkai",
"tooltip-delete-series": "Hapus data seri"
},
"series-mapping-options": {
- "label-auto": "",
- "label-manual": ""
+ "label-auto": "Otomatis",
+ "label-manual": "Manual"
},
"show-options": {
- "label-both": "",
- "label-lines": "",
- "label-points": ""
+ "label-both": "Keduanya",
+ "label-lines": "Garis",
+ "label-points": "Poin"
}
}
}
\ No newline at end of file
diff --git a/public/locales/it-IT/grafana.json b/public/locales/it-IT/grafana.json
index 8280132fbbc..751083d1b0e 100644
--- a/public/locales/it-IT/grafana.json
+++ b/public/locales/it-IT/grafana.json
@@ -3256,6 +3256,11 @@
"id-token-attribute-name-label": "Nome attributo token ID",
"login-attribute-path-description": "Espressione JMESPath da utilizzare per la ricerca dell'accesso utente dal token ID utente.",
"login-attribute-path-label": "Percorso attributo di accesso",
+ "login-prompt-consent": "",
+ "login-prompt-description": "",
+ "login-prompt-label": "",
+ "login-prompt-login": "",
+ "login-prompt-select-account": "",
"managed-identity-client-id-description": "L'ID client dell'identità gestita della credenziale di identità federata della tua app OAuth2.",
"managed-identity-client-id-label": "ID client identità gestita FIC",
"name-attribute-path-description": "Espressione JMESPath da utilizzare per la ricerca del nome utente dal token ID utente. \nQuesto nome verrà visualizzato come nome dell'utente.",
diff --git a/public/locales/ja-JP/grafana.json b/public/locales/ja-JP/grafana.json
index 77fd1785e31..e25adf137ab 100644
--- a/public/locales/ja-JP/grafana.json
+++ b/public/locales/ja-JP/grafana.json
@@ -119,10 +119,10 @@
"users-heading": "組織ユーザー"
},
"enterprise-auth-features-card": {
- "dismiss": "",
- "heading": "",
- "learn-more-link": "",
- "text": ""
+ "dismiss": "閉じる",
+ "heading": "エンタープライズ認証",
+ "learn-more-link": "詳細を見る",
+ "text": "<1>SAML1>、<3>SCIM3>、<6>LDAP6>、<8>RBAC8>を使用して、ユーザー、チーム、権限を自動的に管理できます。Grafana CloudとEnterpriseで利用可能です。"
},
"feature-listing": {
"title-auditing": "監査",
@@ -374,8 +374,8 @@
"am-active-timing-select-label-active-timings": "アクティブタイミング"
},
"ad": {
- "close": "",
- "learn-more": ""
+ "close": "閉じる",
+ "learn-more": "詳細を見る"
},
"add-button": {
"add-more": "さらに追加"
@@ -404,12 +404,12 @@
"missing-series-resolve": "解決されるまでに必要なデータが欠落した評価回数",
"no-annotations": "注釈なし",
"notification-configuration": {
- "active-timings": "",
+ "active-timings": "アクティブ時間間隔",
"contact-point": "コンタクトポイント",
"group-by": "次でグループ化:",
- "group-title": "",
+ "group-title": "通知設定",
"mute-timings": "ミュート期間",
- "timing-options": ""
+ "timing-options": "タイミング"
},
"pending-period": "保留期間",
"rule": "ルール",
@@ -957,7 +957,7 @@
},
"contactPoints": {
"validation": {
- "notFound": ""
+ "notFound": "コンタクトポイント「{{contactPoint}}」が見つかりませんでした"
}
},
"continue-matching-indicator": {
@@ -966,7 +966,7 @@
"copy-to-clipboard": "「{{label}}」をクリップボードにコピー",
"create-metadata": {
"label": {
- "contact-point": "",
+ "contact-point": "通知の配信先",
"dashboard": "ダッシュボード",
"dashboard-and-panel": "ダッシュボードとパネル",
"evaluation-interval": "評価間隔",
@@ -1114,7 +1114,7 @@
"content-show-all-errors": "すべてのエラーを表示"
},
"errors": {
- "failedWith": ""
+ "failedWith": "{{status}}により{{-config}}が失敗しました: {{-message}}"
},
"evaluate-every-validation-options": {
"message": {
@@ -1562,20 +1562,20 @@
}
},
"home": {
- "irm-card-description": "",
- "irm-card-item-1": "",
- "irm-card-item-2": "",
- "irm-card-item-3": "",
- "irm-card-item-4": "",
- "irm-card-title": "",
+ "irm-card-description": "Grafana Cloud IRMでオンコール、アラート、インシデント対応を統合できます。",
+ "irm-card-item-1": "カレンダーまたはTerraformでオンコールスケジュールを管理できます。",
+ "irm-card-item-2": "Web、アプリ、Slack、その他のチャネルからインシデントに対応できます。",
+ "irm-card-item-3": "AI搭載のGrafana SIFTで根本原因を特定できます。",
+ "irm-card-item-4": "過去のインシデントを分析して、対応力と回復力を向上させます。",
+ "irm-card-title": "インシデント対応と管理",
"label-get-started": "開始する",
"label-insights": "インサイト",
- "synthetic-monitoring-card-description": "",
- "synthetic-monitoring-card-item-1": "",
- "synthetic-monitoring-card-item-2": "",
- "synthetic-monitoring-card-item-3": "",
- "synthetic-monitoring-card-item-4": "",
- "synthetic-monitoring-card-title": "",
+ "synthetic-monitoring-card-description": "世界各地から重要なユーザーフロー、ウェブサイト、APIを外部監視します。",
+ "synthetic-monitoring-card-item-1": "ブラウザチェックによりユーザージャーニー全体をシミュレートします。",
+ "synthetic-monitoring-card-item-2": "全ネットワーク層でping、DNS、HTTP/S、TCPチェックを実行します。",
+ "synthetic-monitoring-card-item-3": "20以上のグローバルプローブまたはファイアウォール内のプライベートプローブを使用します。",
+ "synthetic-monitoring-card-item-4": "UIから直接、組み込みのPrometheusスタイルアラートでSLOを追跡します。",
+ "synthetic-monitoring-card-title": "合成モニタリング",
"title-alerting": "アラート"
},
"import-to-gma": {
@@ -1590,7 +1590,7 @@
"no-rules-body-yaml": "インポートできるルールがありません。別のyamlファイルを選択してください。",
"no-rules-title": "インポートするルールはありません",
"not-using-rules-managed-by-integrations-or-plugins": {
- "text": "",
+ "text": "統合またはプラグインで管理されるルールは、Grafana管理ルールにインポートしないでください。",
"title": "情報"
},
"plugin-rules-warning": {
@@ -1969,7 +1969,7 @@
},
"notification-policies-filter": {
"label-search-by-contact-point": "連絡先で検索",
- "placeholder-search-by-contact-point": "",
+ "placeholder-search-by-contact-point": "コンタクトポイントを選択",
"search-query-input-placeholder-search": "検索"
},
"notification-policies-list": {
@@ -2477,7 +2477,7 @@
"new-badge": "新登場!",
"text": "Grafana管理ルールにインポート"
},
- "loading-more-groups": "",
+ "loading-more-groups": "その他のグループを読み込み中...",
"more": "その他",
"new-alert-rule": "新しいアラートルール",
"new-datasource-recording-rule": "新しいデータソース記録ルール",
@@ -3025,51 +3025,51 @@
}
},
"alertlist": {
- "category-alert-state-filter": "",
- "category-filter": "",
- "category-options": "",
- "descriptino-alerts-linked-to-dashboard": "",
- "description-alert-instance-label": "",
- "description-alert-name": "",
- "description-datasource": "",
- "description-folder": "",
- "description-group-by": "",
- "description-group-mode": "",
- "description-max-items": "",
- "description-show-inactive-alerts": "",
- "description-sort-order": "",
- "description-view-mode": "",
+ "category-alert-state-filter": "アラート状態フィルター",
+ "category-filter": "フィルター",
+ "category-options": "オプション",
+ "descriptino-alerts-linked-to-dashboard": "このダッシュボードにリンクされているアラートのみを表示",
+ "description-alert-instance-label": "ラベルクエリでアラートインスタンスをフィルタリング(例: {severity=\"critical\", instance=~\"cluster-us-.+\"})",
+ "description-alert-name": "このテキストを含むアラートでフィルタリング",
+ "description-datasource": "アラートソースでフィルタリング",
+ "description-folder": "選択したフォルダ内のアラートでフィルタリング(Grafana管理アラートルールのみ)",
+ "description-group-by": "ラベルクエリでアラートをフィルタリング",
+ "description-group-mode": "アラートインスタンスをグループ化する方法",
+ "description-max-items": "表示する最大アラート数",
+ "description-show-inactive-alerts": "インスタンスが0(ゼロ)のアラートルールを含めます。これらのルールにはインスタンスがないため、アラートインスタンスラベルフィルターが設定されている場合は非表示になります。",
+ "description-sort-order": "アラートとアラートインスタンスの並び順",
+ "description-view-mode": "リストビューと統計ビューの切り替え",
"group-by": {
"aria-label-group-by-label-keys": "ラベルキーでグループ化",
"placeholder-group-by": "グループ化"
},
"group-mode-options": {
- "label-custom-grouping": "",
- "label-default-grouping": ""
- },
- "name-alert-instance-label": "",
- "name-alert-name": "",
- "name-alerts-linked-to-dashboard": "",
- "name-datasource": "",
- "name-error": "",
- "name-firing": "",
- "name-folder": "",
- "name-group-by": "",
- "name-group-mode": "",
- "name-max-items": "",
- "name-no-data": "",
- "name-normal": "",
- "name-pending": "",
- "name-recovering": "",
- "name-show-inactive-alerts": "",
- "name-sort-order": "",
- "name-view-mode": "",
+ "label-custom-grouping": "カスタムグループ化",
+ "label-default-grouping": "デフォルトのグループ化"
+ },
+ "name-alert-instance-label": "アラートインスタンスラベル",
+ "name-alert-name": "アラート名",
+ "name-alerts-linked-to-dashboard": "このダッシュボードにリンクされているアラート",
+ "name-datasource": "データソース",
+ "name-error": "エラー",
+ "name-firing": "アラート/発生中",
+ "name-folder": "フォルダ",
+ "name-group-by": "グループ化",
+ "name-group-mode": "グループモード",
+ "name-max-items": "最大項目数",
+ "name-no-data": "データなし",
+ "name-normal": "通常",
+ "name-pending": "保留中",
+ "name-recovering": "復旧中",
+ "name-show-inactive-alerts": "インスタンス数が0のアラートを表示",
+ "name-sort-order": "並び順",
+ "name-view-mode": "表示モード",
"sort-order-options": {
- "label-alphabetical-asc": "",
- "label-alphabetical-desc": "",
- "label-importance": "",
- "label-time-asc": "",
- "label-time-desc": ""
+ "label-alphabetical-asc": "アルファベット順(昇順)",
+ "label-alphabetical-desc": "アルファベット順(降順)",
+ "label-importance": "重要度",
+ "label-time-asc": "時間(昇順)",
+ "label-time-desc": "時間(降順)"
},
"ungrouped-mode-view": {
"active-for": "<1>{{duration}}1>間",
@@ -3085,8 +3085,8 @@
"title-permission-required": "権限が必要です"
},
"view-mode-options": {
- "label-list": "",
- "label-stat": ""
+ "label-list": "リスト",
+ "label-stat": "統計"
}
},
"annolist": {
@@ -3099,31 +3099,31 @@
"annotation-list-item": {
"tooltip-created-by": "作成者:<1>1> {{email}} "
},
- "category-annotation-query": "",
- "category-display": "",
- "category-link-behaviour": "",
- "description-tags": "",
+ "category-annotation-query": "注釈クエリ",
+ "category-display": "表示",
+ "category-link-behaviour": "リンクの動作",
+ "description-tags": "注釈タグを一致",
"link-target-options": {
- "label-dashboard": "",
- "label-panel": ""
- },
- "name-limit": "",
- "name-link-target": "",
- "name-query-filter": "",
- "name-show-tags": "",
- "name-show-time": "",
- "name-show-user": "",
- "name-tags": "",
- "name-time-after": "",
- "name-time-before": "",
- "name-time-range": "",
+ "label-dashboard": "ダッシュボード",
+ "label-panel": "パネル"
+ },
+ "name-limit": "制限",
+ "name-link-target": "リンク先",
+ "name-query-filter": "クエリフィルター",
+ "name-show-tags": "タグを表示",
+ "name-show-time": "時間を表示",
+ "name-show-user": "ユーザーを表示",
+ "name-tags": "タグ",
+ "name-time-after": "次の時間より後",
+ "name-time-before": "次の時間より前",
+ "name-time-range": "時間範囲",
"query-filter-options": {
- "label-all-dashboards": "",
- "label-this-dashboard": ""
+ "label-all-dashboards": "すべてのダッシュボード",
+ "label-this-dashboard": "このダッシュボード"
},
"time-range-options": {
- "label-none": "",
- "label-this-dashboard": ""
+ "label-none": "なし",
+ "label-this-dashboard": "このダッシュボード"
}
},
"annotations": {
@@ -3243,6 +3243,11 @@
"id-token-attribute-name-label": "IDトークン属性名",
"login-attribute-path-description": "ユーザーIDトークンからのユーザーログイン検索に使用するJMESPath式。",
"login-attribute-path-label": "ログイン属性パス",
+ "login-prompt-consent": "",
+ "login-prompt-description": "",
+ "login-prompt-label": "",
+ "login-prompt-login": "",
+ "login-prompt-select-account": "",
"managed-identity-client-id-description": "OAuth2アプリのフェデレーテッドID資格情報のマネージドIDクライアントID。",
"managed-identity-client-id-label": "FICマネージドIDクライアントID",
"name-attribute-path-description": "ユーザーIDトークンからのユーザー名検索に使用するJMESPath式。\nこの名前は、ユーザーの表示名として使用されます。",
@@ -3313,8 +3318,8 @@
}
},
"provider-card": {
- "saml-learn-more": "",
- "scim-learn-more": "",
+ "saml-learn-more": "SAMLによるシングルサインオン(SSO)。",
+ "scim-learn-more": "SCIMでユーザーとチームを同期。",
"text-badge-enabled": "有効化",
"text-badge-not-enabled": "有効になっていません"
},
@@ -3351,99 +3356,99 @@
},
"bar-chart": {
"warn": {
- "missing-numeric": "",
- "missing-series": ""
+ "missing-numeric": "数値フィールドが見つかりません",
+ "missing-series": "棒グラフには文字列または時間フィールドが必要です"
}
},
"barchart": {
"config": {
- "category-thresholds": "",
- "description-color-by-field": "",
- "description-x-label-max-length": "",
- "name-bar-radius": "",
- "name-bar-width": "",
- "name-color-by-field": "",
- "name-fill-opacity": "",
- "name-full-highlight": "",
- "name-gradient-mode": "",
- "name-group-width": "",
- "name-line-width": "",
- "name-orientation": "",
- "name-rotate-x-labels": "",
- "name-show-thresholds": "",
- "name-show-values": "",
- "name-stacking": "",
- "name-transform": "",
- "name-x-axis": "",
- "name-x-label-max-length": "",
- "name-x-label-min-spacing": "",
+ "category-thresholds": "しきい値",
+ "description-color-by-field": "隣接フィールドの色の値を使用して各バーの値を色付けします。",
+ "description-x-label-max-length": "X軸ラベルは指定された長さに切り詰められます",
+ "name-bar-radius": "バー半径",
+ "name-bar-width": "バー幅",
+ "name-color-by-field": "フィールド別の色",
+ "name-fill-opacity": "塗りつぶし不透明度",
+ "name-full-highlight": "カーソルを置いたときに全領域をハイライト",
+ "name-gradient-mode": "グラデーションモード",
+ "name-group-width": "グループ幅",
+ "name-line-width": "線の太さ",
+ "name-orientation": "向き",
+ "name-rotate-x-labels": "X軸の目盛ラベルを回転",
+ "name-show-thresholds": "しきい値を表示",
+ "name-show-values": "値を表示",
+ "name-stacking": "積み上げ",
+ "name-transform": "変換",
+ "name-x-axis": "X軸",
+ "name-x-label-max-length": "X軸の目盛ラベルの最大長",
+ "name-x-label-min-spacing": "X軸ラベルの最小間隔",
"orientation-options": {
- "label-auto": "",
- "label-horizontal": "",
- "label-line-vertical": ""
+ "label-auto": "自動",
+ "label-horizontal": "水平",
+ "label-line-vertical": "垂直"
},
- "placeholder-x-axis": "",
- "placeholder-x-label-max-length": "",
+ "placeholder-x-axis": "最初の文字列または時間フィールド",
+ "placeholder-x-label-max-length": "なし",
"show-values-options": {
- "label-always": "",
- "label-auto": "",
- "label-never": ""
+ "label-always": "常時",
+ "label-auto": "自動",
+ "label-never": "なし"
},
"transform-options": {
- "description-constant": "",
- "description-negative-y": "",
- "label-constant": "",
- "label-negative-y": ""
+ "description-constant": "最初の値は定数線として表示されます",
+ "description-negative-y": "結果をY軸の負の値に反転表示",
+ "label-constant": "定数",
+ "label-negative-y": "Y軸を反転"
}
},
"tick-spacing-editor": {
"content-require-space-from-the-right-side": "右側にスペースが必要",
"gaps-options": {
- "description-large": "",
- "description-medium": "",
- "description-none": "",
- "description-small": "",
- "label-large": "",
- "label-medium": "",
- "label-none": "",
- "label-small": ""
+ "description-large": "{{spacing}}の間隔が必要",
+ "description-medium": "{{spacing}}の間隔が必要",
+ "description-none": "すべての目盛を表示",
+ "description-small": "{{spacing}}の間隔が必要",
+ "label-large": "大",
+ "label-medium": "中",
+ "label-none": "なし",
+ "label-small": "小"
},
"label-rtl": "RTL"
}
},
"bargauge": {
"bar-size-options": {
- "label-auto": "",
- "label-manual": ""
- },
- "category-bar-gauge": "",
- "description-max-height": "",
- "description-min-height": "",
- "description-min-width": "",
- "description-show-unfilled-area": "",
+ "label-auto": "自動",
+ "label-manual": "手動"
+ },
+ "category-bar-gauge": "バーゲージ",
+ "description-max-height": "最大行の高さ(水平方向)",
+ "description-min-height": "最小行の高さ(水平方向)",
+ "description-min-width": "最小列幅(垂直方向)",
+ "description-show-unfilled-area": "有効にすると、未入力の領域がグレーで表示されます",
"display-mode-options": {
- "label-basic": "",
- "label-gradient": "",
- "label-retro": ""
- },
- "name-bar-size": "",
- "name-display-mode": "",
- "name-max-height": "",
- "name-min-height": "",
- "name-min-width": "",
- "name-name-placement": "",
+ "label-basic": "ベーシック",
+ "label-gradient": "グラデーション",
+ "label-retro": "レトロLCD"
+ },
+ "name-bar-size": "バーサイズ",
+ "name-display-mode": "表示モード",
+ "name-max-height": "最大の高さ",
+ "name-min-height": "最小の高さ",
+ "name-min-width": "最小幅",
+ "name-name-placement": "名前の配置",
"name-placement-options": {
- "label-auto": "",
- "label-hidden": "",
- "label-left": "",
- "label-top": ""
+ "label-auto": "自動",
+ "label-hidden": "非表示",
+ "label-left": "左",
+ "label-top": "上"
},
- "name-show-unfilled-area": "",
- "name-value-display": "",
+ "name-show-unfilled-area": "未入力の領域を表示",
+ "name-value-display": "値を表示",
"value-display-options": {
- "label-hidden": "",
- "label-text-color": "",
- "label-value-color": ""
+ "label-hidden": "非表示",
+ "label-text-color": "文字色",
+ "label-value-color": "値の色"
}
},
"bookmarks-page": {
@@ -3468,7 +3473,7 @@
"delete-modal-restore-dashboards-text": "このアクションにより、選択したフォルダはすぐに削除されますが、選択したダッシュボードは30日後に削除されます。組織の管理者は、30日が経過する前であればいつでもダッシュボードを復元できます。フォルダは復元できません。",
"delete-modal-text": "この操作により、次のコンテンツが削除されます:",
"delete-modal-title": "削除",
- "delete-provisioned-folder": "",
+ "delete-provisioned-folder": "プロビジョニングされたフォルダを削除",
"deleting": "削除中…",
"manage-permissions-button": "権限を管理する",
"move-button": "移動",
@@ -3507,12 +3512,12 @@
"tags-column": "タグ"
},
"delete-provisioned-folder-form": {
- "alert-folder-deleted-successfully": "",
- "api-error": "",
- "button-cancel": "",
- "button-delete": "",
- "button-deleting": "",
- "delete-warning": ""
+ "alert-folder-deleted-successfully": "フォルダが正常に削除されました",
+ "api-error": "フォルダの削除に失敗しました",
+ "button-cancel": "キャンセル",
+ "button-delete": "削除",
+ "button-deleting": "削除中…",
+ "delete-warning": "このフォルダとその下位のすべてのフォルダやコンテンツが削除されます。全部で、次に影響します: "
},
"descendant-count": {
"title-unable-to-retrieve-descendant-information": "下位情報を取得できません"
@@ -3571,52 +3576,52 @@
"text": "クエリに一致する結果が見つかりませんでした。"
},
"restore": {
- "success": ""
+ "success": "ダッシュボード{{name}}が復元されました"
},
"text-this-repository-is-read-only": "ターゲットに直接アクセスできる場合は、JSONをコピーしてそこに貼り付けます。",
"trash-state-manager": {
"label": {
- "alphabetically-az": "",
- "alphabetically-za": ""
+ "alphabetically-az": "アルファベット順(A-Z)",
+ "alphabetically-za": "アルファベット順(Z-A)"
}
}
},
"candlestick": {
"additional-fields-options": {
- "label-ignore": "",
- "label-include": ""
+ "label-ignore": "無視",
+ "label-include": "含める"
},
"candle-style-options": {
- "label-candles": "",
- "label-ohlc-bars": ""
+ "label-candles": "ローソク足",
+ "label-ohlc-bars": "OHLCバー"
},
- "category-candlestick": "",
+ "category-candlestick": "ローソク足",
"color-strategy-options": {
- "label-since-open": "",
- "label-since-prior-close": ""
- },
- "description-additional-fields": "",
- "description-close": "",
- "description-high": "",
- "description-low": "",
- "description-open": "",
- "description-volume": "",
+ "label-since-open": "始値から",
+ "label-since-prior-close": "前回終値から"
+ },
+ "description-additional-fields": "標準の時系列オプションを使用して、上記でマッピングされていないフィールドを設定します",
+ "description-close": "期間終了時の値",
+ "description-high": "期間内の最大値",
+ "description-low": "期間内の最小値",
+ "description-open": "期間開始時の値",
+ "description-volume": "期間内のサンプル数",
"mode-options": {
- "label-both": "",
- "label-candles": "",
- "label-volume": ""
- },
- "name-additional-fields": "",
- "name-candle-style": "",
- "name-close": "",
- "name-color-strategy": "",
- "name-down-color": "",
- "name-high": "",
- "name-low": "",
- "name-mode": "",
- "name-open": "",
- "name-up-color": "",
- "name-volume": ""
+ "label-both": "両方",
+ "label-candles": "ローソク足",
+ "label-volume": "数量"
+ },
+ "name-additional-fields": "追加フィールド",
+ "name-candle-style": "ローソク足スタイル",
+ "name-close": "終値",
+ "name-color-strategy": "カラー方式",
+ "name-down-color": "下落色",
+ "name-high": "高値",
+ "name-low": "安値",
+ "name-mode": "モード",
+ "name-open": "始値",
+ "name-up-color": "上昇色",
+ "name-volume": "数量"
},
"canvas": {
"apieditor": {
@@ -3631,18 +3636,18 @@
}
},
"button-item": {
- "category-button": "",
+ "category-button": "ボタン",
"label": {
"center": "中央",
"left": "左",
"right": "右"
},
- "name-align-text": "",
- "name-api": "",
- "name-style": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
+ "name-align-text": "テキストの配置",
+ "name-api": "API",
+ "name-style": "スタイル",
+ "name-text": "テキスト",
+ "name-text-color": "文字色",
+ "name-text-size": "文字サイズ",
"placeholder": {
"auto": "自動"
}
@@ -3669,20 +3674,20 @@
}
}
},
- "category-arrow-direction": "",
- "category-background": "",
- "category-border": "",
- "category-canvas": "",
- "category-color": "",
- "category-data-links": "",
- "category-line-style": "",
- "category-metric-value": "",
- "category-radius": "",
- "category-selected-connection": "",
- "category-selected-element": "",
- "category-size": "",
+ "category-arrow-direction": "矢印の方向",
+ "category-background": "背景",
+ "category-border": "境界線",
+ "category-canvas": "キャンバス",
+ "category-color": "色",
+ "category-data-links": "データリンクとアクション",
+ "category-line-style": "線のスタイル",
+ "category-metric-value": "指標の値",
+ "category-radius": "半径",
+ "category-selected-connection": "選択した接続",
+ "category-selected-element": "選択した要素({{element}})",
+ "category-size": "サイズ",
"cloud-item": {
- "category-cloud": "",
+ "category-cloud": "クラウド",
"label": {
"bottom": "下",
"center": "中央",
@@ -3691,48 +3696,48 @@
"right": "右",
"top": "上"
},
- "name-align-text": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "テキストの配置",
+ "name-text": "テキスト",
+ "name-text-color": "文字色",
+ "name-text-size": "文字サイズ",
+ "name-vertical-align": "垂直方向の配置",
"placeholder": {
"auto": "自動"
}
},
- "description-experimental-types": "",
- "description-infinite-panning": "",
- "description-inline-editing": "",
- "description-pan-zoom": "",
+ "description-experimental-types": "実験的な要素タイプの選択を有効化",
+ "description-infinite-panning": "制限なしのパンを有効化 - 広大なキャンバスに便利。警告: これは実験的な機能で、現在は上部/左側に固定されている要素でのみ正常に動作します",
+ "description-inline-editing": "パネルの直接編集を有効化",
+ "description-pan-zoom": "パンとズームを有効化",
"direction-options": {
- "label-both": "",
- "label-forward": "",
- "label-none": "",
- "label-reverse": ""
+ "label-both": "両方",
+ "label-forward": "前進",
+ "label-none": "なし",
+ "label-reverse": "反転"
},
"drone-front-item": {
- "category-drone-front": "",
- "name-roll-angle": ""
+ "category-drone-front": "ドローン正面",
+ "name-roll-angle": "回転角度"
},
"drone-side-item": {
- "category-drone-side": "",
- "name-pitch-angle": ""
+ "category-drone-side": "ドローン側面",
+ "name-pitch-angle": "ピッチ角"
},
"drone-top-item": {
- "category-drone-top": "",
- "name-back-left-rotor-rpm": "",
- "name-back-right-rotor-rpm": "",
- "name-front-left-rotor-rpm": "",
- "name-front-right-rotor-rpm": "",
- "name-yaw-angle": ""
+ "category-drone-top": "ドローン上面",
+ "name-back-left-rotor-rpm": "左後部ローターRPM",
+ "name-back-right-rotor-rpm": "右後部ローターRPM",
+ "name-front-left-rotor-rpm": "左正面ローターRPM",
+ "name-front-right-rotor-rpm": "右正面ローターRPM",
+ "name-yaw-angle": "ヨー角"
},
"element-editor": {
- "category-layout": "",
- "description-unsupported": "",
- "name-quick-placement": ""
+ "category-layout": "レイアウト",
+ "description-unsupported": "選択した要素タイプは現在の設定でサポートされていません。高度な要素タイプを有効にしてください。",
+ "name-quick-placement": "クイック配置"
},
"ellipse-item": {
- "category-ellipse": "",
+ "category-ellipse": "楕円",
"label": {
"bottom": "下",
"center": "中央",
@@ -3741,50 +3746,50 @@
"right": "右",
"top": "上"
},
- "name-align-text": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "テキストの配置",
+ "name-text": "テキスト",
+ "name-text-color": "文字色",
+ "name-text-size": "文字サイズ",
+ "name-vertical-align": "垂直方向の配置",
"placeholder": {
"auto": "自動"
}
},
"icon-item": {
- "category-icon": "",
- "name-fill-color": "",
- "name-svg-path": ""
+ "category-icon": "アイコン",
+ "name-fill-color": "塗りつぶし色",
+ "name-svg-path": "SVGパス"
},
"inline-edit": {
"canvas-inline-editor": "キャンバスインラインエディター",
"tooltip-close-inline-editor": "インラインエディターを閉じる"
},
"inline-edit-body": {
- "category-selected-element": "",
+ "category-selected-element": "選択した要素({{element}})",
"label-add-item": "アイテムを追加",
"please-select-an-element": "要素を選択してください"
},
- "label-actions": "",
- "label-color": "",
- "label-direction": "",
- "label-image": "",
- "label-image-size": "",
- "label-line-style": "",
- "label-links": "",
- "label-radius": "",
- "label-size": "",
- "label-width": "",
+ "label-actions": "アクション",
+ "label-color": "色",
+ "label-direction": "方向",
+ "label-image": "画像",
+ "label-image-size": "画像サイズ",
+ "label-line-style": "線のスタイル",
+ "label-links": "リンク",
+ "label-radius": "半径",
+ "label-size": "サイズ",
+ "label-width": "幅",
"layer-editor": {
- "category-layer": "",
- "category-layout": "",
- "name-constraints": "",
- "name-elements": ""
+ "category-layer": "レイヤー",
+ "category-layout": "レイアウト",
+ "name-constraints": "制約",
+ "name-elements": "要素"
},
"line-style-editor": {
"label-animate": "アニメーション"
},
"line-style-options": {
- "label-solid": ""
+ "label-solid": "実線"
},
"metric-value-item": {
"label": {
@@ -3799,15 +3804,15 @@
"auto": "自動"
}
},
- "name-align-text": "",
- "name-color": "",
- "name-experimental-types": "",
- "name-infinite-panning": "",
- "name-inline-editing": "",
- "name-pan-zoom": "",
- "name-text": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "テキストの配置",
+ "name-color": "文字色",
+ "name-experimental-types": "実験的な要素タイプ",
+ "name-infinite-panning": "制限なしのパン",
+ "name-inline-editing": "インライン編集",
+ "name-pan-zoom": "パンとズーム",
+ "name-text": "テキスト",
+ "name-text-size": "文字サイズ",
+ "name-vertical-align": "垂直方向の配置",
"not-found-display": {
"not-found": "<0>見つかりません:0>"
},
@@ -3820,7 +3825,7 @@
"zoom-scroll-wheel": "ズーム: スクロールホイール"
},
"parallelogram-item": {
- "category-parallelogram": "",
+ "category-parallelogram": "平行四辺形",
"label": {
"bottom": "下",
"center": "中央",
@@ -3829,11 +3834,11 @@
"right": "右",
"top": "上"
},
- "name-align-text": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "テキストの配置",
+ "name-text": "テキスト",
+ "name-text-color": "文字色",
+ "name-text-size": "文字サイズ",
+ "name-vertical-align": "垂直方向の配置",
"placeholder": {
"auto": "自動"
}
@@ -3846,21 +3851,21 @@
},
"placement-editor": {
"horizontal-options": {
- "label-center": "",
- "label-left": "",
- "label-left-and-right": "",
- "label-right": "",
- "label-scale": ""
+ "label-center": "中央",
+ "label-left": "左",
+ "label-left-and-right": "左と右",
+ "label-right": "右",
+ "label-scale": "スケール"
},
"label-constraints": "制約",
"label-position": "位置",
"loading": "読み込み中...",
"vertical-options": {
- "label-bottom": "",
- "label-center": "",
- "label-scale": "",
- "label-top": "",
- "label-top-and-bottom": ""
+ "label-bottom": "下",
+ "label-center": "中央",
+ "label-scale": "スケール",
+ "label-top": "上",
+ "label-top-and-bottom": "上と下"
}
},
"quick-positioning": {
@@ -3872,7 +3877,7 @@
"tooltip-align-vertical-centers": "垂直中央揃え"
},
"rectangle-item": {
- "category-rectangle": "",
+ "category-rectangle": "長方形",
"label": {
"bottom": "下",
"center": "中央",
@@ -3881,33 +3886,33 @@
"right": "右",
"top": "上"
},
- "name-align-text": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "テキストの配置",
+ "name-text": "テキスト",
+ "name-text-color": "文字色",
+ "name-text-size": "文字サイズ",
+ "name-vertical-align": "垂直方向の配置",
"placeholder": {
"auto": "自動"
}
},
"server-item": {
- "category-server": "",
- "name-blink-rate": "",
- "name-bulb-color": "",
- "name-status-color": "",
- "name-type": "",
+ "category-server": "サーバー",
+ "name-blink-rate": "点滅レート[hz](0 =オフ)",
+ "name-bulb-color": "電球の色",
+ "name-status-color": "ステータスの色",
+ "name-type": "タイプ",
"type-options": {
- "label-database": "",
- "label-single": "",
- "label-stack": "",
- "label-terminal": ""
+ "label-database": "データベース",
+ "label-single": "単体",
+ "label-stack": "スタック",
+ "label-terminal": "ターミナル"
}
},
"text-display": {
"double-click-to-set": "ダブルクリックしてテキストを設定"
},
"text-item": {
- "category-text": "",
+ "category-text": "テキスト",
"label": {
"bottom": "下",
"center": "中央",
@@ -3916,11 +3921,11 @@
"right": "右",
"top": "上"
},
- "name-align-text": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "テキストの配置",
+ "name-text": "テキスト",
+ "name-text-color": "文字色",
+ "name-text-size": "文字サイズ",
+ "name-vertical-align": "垂直方向の配置",
"placeholder": {
"auto": "自動"
}
@@ -3942,7 +3947,7 @@
"tooltip-remove": "削除"
},
"triangle-item": {
- "category-triangle": "",
+ "category-triangle": "三角形",
"label": {
"bottom": "下",
"center": "中央",
@@ -3951,18 +3956,18 @@
"right": "右",
"top": "上"
},
- "name-align-text": "",
- "name-text": "",
- "name-text-color": "",
- "name-text-size": "",
- "name-vertical-align": "",
+ "name-align-text": "テキストの配置",
+ "name-text": "テキスト",
+ "name-text-color": "文字色",
+ "name-text-size": "文字サイズ",
+ "name-vertical-align": "垂直方向の配置",
"placeholder": {
"auto": "自動"
}
},
"wind-turbine-item": {
- "category-wind-turbine": "",
- "name-rpm": ""
+ "category-wind-turbine": "風力原動機",
+ "name-rpm": "RPM"
}
},
"carousel": {
@@ -3979,8 +3984,8 @@
"close-button": {
"tooltip": "閉じる"
},
- "cloud-enterprise-feature-badge": "",
- "cloud-feature-badge": "",
+ "cloud-enterprise-feature-badge": "クラウドとエンタープライズ",
+ "cloud-feature-badge": "クラウド",
"combobox": {
"async": {
"error": "オプションの読み込み中にエラーが発生しました。"
@@ -4510,7 +4515,7 @@
}
},
"description": {
- "action": ""
+ "action": "ダッシュボードの説明を変更"
},
"dynamic-config-value-editor": {
"render-label": {
@@ -4519,12 +4524,12 @@
},
"edit-actions": {
"add": "{{typeName}}を追加",
- "move": "",
+ "move": "{{typeName}}を移動",
"panel-background": "パネルの背景を変更",
"panel-description": "パネルの説明を変更",
- "panel-max-repeats-per-row": "",
+ "panel-max-repeats-per-row": "行あたりの最大繰り返し回数",
"panel-repeat-direction": "方向を繰り返す",
- "panel-repeat-variable": "",
+ "panel-repeat-variable": "パネルの繰り返し",
"panel-title": "パネルのタイトルを変更",
"paste-panel": "パネルを貼り付け",
"remove": "{{typeName}}を削除",
@@ -4658,7 +4663,7 @@
"get-field-override-categories": {
"label-add-field-override": "フィールドオーバーライドを追加",
"label-add-override-property": "オーバーライドプロパティを追加",
- "override-name": "",
+ "override-name": "{{overrideNum}}回上書き",
"title": {
"add-button": "追加ボタン"
}
@@ -4882,7 +4887,7 @@
"title-matched_other": "{{count}}/{{totalCount}}件のオプションが一致"
},
"outline": {
- "repeated-item": "",
+ "repeated-item": "繰り返し",
"tree-item": {
"empty": "(空白)",
"no-title": "<タイトルなし>"
@@ -5040,8 +5045,8 @@
"label-changes": "変更",
"label-details": "詳細",
"title": "ダッシュボードを保存",
- "title-copy": "",
- "title-provisioned": ""
+ "title-copy": "ダッシュボードのコピーを保存",
+ "title-provisioned": "プロビジョニング済みダッシュボード"
},
"save-dashboard-error-proxy": {
"body-name-exists": "選択したフォルダには同じ名前のダッシュボードがすでに存在します。<1>1><2>このダッシュボードの保存を続行しますか?2>",
@@ -5118,7 +5123,7 @@
}
},
"title": {
- "action": ""
+ "action": "ダッシュボードのタイトルを変更"
},
"toolbar": {
"add": "追加",
@@ -5553,12 +5558,12 @@
}
},
"delete-provisioned-dashboard-form": {
- "api-error": "",
+ "api-error": "ダッシュボードの削除に失敗しました",
"cancel-action": "キャンセル",
"delete-action": "ダッシュボードを削除する",
- "delete-read-only-file-message": "",
+ "delete-read-only-file-message": "リポジトリが読み取り専用のため、このダッシュボードをGrafanaから直接削除することはできません。このダッシュボードを削除するには、Gitリポジトリからファイルを削除してください。",
"deleting": "削除中…",
- "drawer-title": "",
+ "drawer-title": "プロビジョニングされたダッシュボードを削除",
"title-this-repository-is-read-only": "このリポジトリは読み取り専用です"
},
"description-label": {
@@ -5572,7 +5577,7 @@
}
},
"edit-provisioned-dashboard-form": {
- "success": ""
+ "success": "ダッシュボードの変更が正常に保存されました"
},
"email-list": {
"aria-label-emailmenu": "メールメニューを切り替え"
@@ -5765,7 +5770,7 @@
}
},
"panel-data-alerting-tab": {
- "tab-label": ""
+ "tab-label": "アラート"
},
"panel-data-alerting-tab-rendered": {
"alert": {
@@ -5776,14 +5781,14 @@
"title-dashboard-not-saved": "ダッシュボードは保存されていません"
},
"panel-data-queries-tab": {
- "tab-label": ""
+ "tab-label": "クエリ"
},
"panel-data-queries-tab-rendered": {
"add-query": "クエリを追加",
"expression": "式"
},
"panel-data-transformations-tab": {
- "tab-label": ""
+ "tab-label": "変換"
},
"panel-data-transformations-tab-rendered": {
"add-another-transformation": "別の変換を追加",
@@ -5886,8 +5891,8 @@
"label-changes": "変更",
"label-details": "詳細",
"title": "ダッシュボードを保存",
- "title-copy": "",
- "title-provisioned": ""
+ "title-copy": "ダッシュボードのコピーを保存",
+ "title-provisioned": "プロビジョニング済みダッシュボード"
}
},
"save-dashboard-form": {
@@ -6210,18 +6215,18 @@
}
},
"dashlist": {
- "category-dashboard-list": "",
- "name-folder": "",
- "name-include-current-template-variables": "",
- "name-include-current-time-range": "",
- "name-max-items": "",
- "name-query": "",
- "name-recently-viewed": "",
- "name-search": "",
- "name-show-folder-names": "",
- "name-show-headings": "",
- "name-starred": "",
- "name-tags": ""
+ "category-dashboard-list": "ダッシュボードリスト",
+ "name-folder": "フォルダ",
+ "name-include-current-template-variables": "現在のテンプレート変数値を含める",
+ "name-include-current-time-range": "現在の時間範囲を含める",
+ "name-max-items": "最大項目数",
+ "name-query": "クエリ",
+ "name-recently-viewed": "最近表示したもの",
+ "name-search": "検索",
+ "name-show-folder-names": "フォルダ名を表示",
+ "name-show-headings": "見出しを表示",
+ "name-starred": "スター付き",
+ "name-tags": "タグ"
},
"data-source-list": {
"empty-state": {
@@ -6483,15 +6488,15 @@
"dimensions": {
"background-size-editor": {
"options": {
- "label-contain": "",
- "label-cover": "",
- "label-fill": "",
- "label-original": "",
- "label-tile": ""
+ "label-contain": "全体を表示",
+ "label-cover": "カバー",
+ "label-fill": "塗りつぶし",
+ "label-original": "元のサイズ",
+ "label-tile": "タイル表示"
}
},
"color-dimension-editor": {
- "label-fixed-color": "",
+ "label-fixed-color": "固定色",
"noOptionsMessage-no-fields-found": ""
},
"file-dropzone-custom-children": {
@@ -6506,10 +6511,10 @@
"placeholder-search": "検索"
},
"resource-dimension-editor": {
- "description-field": "",
- "description-fixed": "",
+ "description-field": "文字列フィールドの結果を使用",
+ "description-fixed": "固定値",
"label-field": "フィールド",
- "label-fixed": "",
+ "label-fixed": "固定",
"label-mappings": "マッピング",
"label-source": "送信元"
},
@@ -6526,16 +6531,16 @@
},
"scalar-dimension-editor": {
"fixed-value-options": {
- "label-fixed-values": ""
+ "label-fixed-values": "固定値"
},
"label-limit": "制限",
"label-value": "値",
"noOptionsMessage-no-fields-found": "",
"scalar-options": {
- "description-clamped": "",
- "description-mod": "",
- "label-clamped": "",
- "label-mod": ""
+ "description-clamped": "最大値と最小値に固定されたフィールド値を使用",
+ "description-mod": "最大値を法とした剰余値を使用",
+ "label-clamped": "クランプ",
+ "label-mod": "モジュロ"
}
},
"scale-dimension-editor": {
@@ -6550,10 +6555,10 @@
"noOptionsMessage-no-fields-found": ""
},
"text-dimension-editor": {
- "description-field": "",
- "description-fixed": "",
+ "description-field": "フィールド値を表示",
+ "description-fixed": "固定値",
"label-field": "フィールド",
- "label-fixed": "",
+ "label-fixed": "固定",
"label-source": "送信元",
"label-template": "テンプレート",
"label-value": "値"
@@ -6567,16 +6572,16 @@
"description-percentage-means-thresholds-relative": "パーセンテージは最小値と最大値に対する相対的なしきい値を意味します",
"modes": {
"description": {
- "threshold-based-percent-between-minmax": "",
- "thresholds-based-absolute-values": ""
+ "threshold-based-percent-between-minmax": "最小値と最大値の間の割合に基づいてしきい値を選択",
+ "thresholds-based-absolute-values": "絶対値に基づいてしきい値を選択"
},
"label": {
- "absolute": "",
- "percentage": ""
+ "absolute": "絶対値",
+ "percentage": "割合"
}
},
"thresholds-mode": "しきい値モード",
- "value-base": ""
+ "value-base": "基準"
},
"urlpicker-tab": {
"label-preview": "プレビュー"
@@ -7377,23 +7382,23 @@
"title": "このページを離れますか?"
},
"gauge": {
- "category-gauge": "",
- "description-min-height": "",
- "description-min-width": "",
- "description-neutral": "",
- "description-show-threshold-labels": "",
- "description-show-threshold-markers": "",
+ "category-gauge": "ゲージ",
+ "description-min-height": "最小行の高さ(水平方向)",
+ "description-min-width": "最小列幅(垂直方向)",
+ "description-neutral": "中立点として最小値を使用するには、空のままにします",
+ "description-show-threshold-labels": "ゲージバーの周りのしきい値をレンダリングします",
+ "description-show-threshold-markers": "しきい値を外側のバーとしてレンダリングします",
"gauge-size-options": {
- "label-auto": "",
- "label-manual": ""
+ "label-auto": "自動",
+ "label-manual": "手動"
},
- "name-gauge-size": "",
- "name-min-height": "",
- "name-min-width": "",
- "name-neutral": "",
- "name-show-threshold-labels": "",
- "name-show-threshold-markers": "",
- "placeholder-neutral": ""
+ "name-gauge-size": "ゲージサイズ",
+ "name-min-height": "最小の高さ",
+ "name-min-width": "最小幅",
+ "name-neutral": "中立",
+ "name-show-threshold-labels": "しきい値ラベルを表示",
+ "name-show-threshold-markers": "しきい値マーカーを表示",
+ "placeholder-neutral": "自動"
},
"gen-ai": {
"apply-suggestion": "適用",
@@ -7727,85 +7732,85 @@
},
"builder": {
"axis": {
- "category-axis": "",
- "color-label": "",
+ "category-axis": "軸",
+ "color-label": "色",
"color-options": {
- "label-series": "",
- "label-text": ""
+ "label-series": "系列",
+ "label-text": "テキスト"
},
"grid-line-options": {
- "label-auto": "",
- "label-off": "",
- "label-on": ""
+ "label-auto": "自動",
+ "label-off": "オフ",
+ "label-on": "オン"
},
- "name-centered-zero": "",
- "name-grid-lines": "",
- "name-label": "",
- "name-placement": "",
- "name-scale": "",
- "name-show-border": "",
- "name-soft-max": "",
- "name-soft-min": "",
- "name-width": "",
- "placeholder-label": "",
- "placeholder-soft-max": "",
- "placeholder-soft-min": "",
- "placeholder-width": "",
+ "name-centered-zero": "中央ゼロ",
+ "name-grid-lines": "グリッド線を表示",
+ "name-label": "ラベル",
+ "name-placement": "配置",
+ "name-scale": "スケール",
+ "name-show-border": "境界線を表示",
+ "name-soft-max": "ソフトマックス",
+ "name-soft-min": "ソフトミン",
+ "name-width": "幅",
+ "placeholder-label": "オプションのテキスト",
+ "placeholder-soft-max": "参照: 標準オプション > 最大",
+ "placeholder-soft-min": "参照: 標準オプション > 最小",
+ "placeholder-width": "自動",
"scale-distribution-editor": {
"distribution-options": {
- "label-linear": "",
- "label-log": "",
- "label-symlog": ""
+ "label-linear": "線形",
+ "label-log": "対数",
+ "label-symlog": "Symlog"
}
}
},
"legend": {
- "category": "",
- "description-values": "",
+ "category": "凡例",
+ "description-values": "凡例に表示する値または計算を選択",
"mode-options": {
- "label-list": "",
- "label-table": ""
+ "label-list": "リスト",
+ "label-table": "テーブル"
},
- "name-mode": "",
- "name-placement": "",
- "name-values": "",
- "name-visibility": "",
- "name-width": "",
+ "name-mode": "モード",
+ "name-placement": "配置",
+ "name-values": "値",
+ "name-visibility": "表示レベル",
+ "name-width": "幅",
"placement-options": {
- "label-bottom": "",
- "label-right": ""
+ "label-bottom": "下",
+ "label-right": "右"
}
},
"stacking": {
- "name-stack-series": ""
+ "name-stack-series": "系列を積み上げ"
},
"text": {
- "category-text-size": "",
- "name-percent-change": "",
- "name-title": "",
- "name-value": "",
- "placeholder-percent-change": "",
- "placeholder-title": "",
- "placeholder-value": ""
+ "category-text-size": "文字サイズ",
+ "name-percent-change": "変化率(%)",
+ "name-title": "タイトル",
+ "name-value": "値",
+ "placeholder-percent-change": "自動",
+ "placeholder-title": "自動",
+ "placeholder-value": "自動"
},
"tooltip": {
- "category": "",
- "description-hover-proximity": "",
+ "category": "ツールチップ",
+ "description-hover-proximity": "カーソルをポイントにどれだけ近づけるとツールチップがトリガーされるか(ピクセル単位)",
"modeOptions": {
- "label-all": "",
- "label-hidden": "",
- "label-single": ""
+ "label-all": "すべて",
+ "label-hidden": "非表示",
+ "label-single": "単体"
},
- "name-hide-zeros": "",
- "name-hover-proximity": "",
- "name-max-height": "",
- "name-max-width": "",
- "name-tooltip-mode": "",
- "name-values-sort-order": "",
+ "name-hide-zeros": "ゼロを非表示",
+ "name-hover-proximity": "ホバー時の距離",
+ "name-max-height": "最大の高さ",
+ "name-max-width": "最大幅",
+ "name-tooltip-mode": "ツールチップモード",
+ "name-values-sort-order": "値のソート順",
"sortOptions": {
- "label-ascending": "",
- "label-descending": "",
- "label-none": ""
+ "label-ascending": "昇順",
+ "label-descending": "降順",
+ "label-none": "なし"
}
}
},
@@ -7967,19 +7972,19 @@
"tooltip-expand-all": "すべての行を広げる"
},
"matchers-ui": {
- "description-field-name-by-regex-matcher": "",
- "description-fields-by-query": "",
- "description-fields-with-name": "",
- "description-fields-with-type": "",
- "description-fields-with-value": "",
+ "description-field-name-by-regex-matcher": "正規表現に一致する名前のフィールドのプロパティを設定",
+ "description-fields-by-query": "特定のクエリからのフィールドのプロパティを設定",
+ "description-fields-with-name": "特定のフィールドのプロパティを設定",
+ "description-fields-with-type": "特定のタイプ(数値、文字列、ブール値)のフィールドのプロパティを設定",
+ "description-fields-with-value": "リデューサー条件付きフィールドのプロパティを設定",
"field-name-picker": {
- "placeholder": ""
+ "placeholder": "フィールドを選択"
},
- "name-field-name-by-regex-matcher": "",
- "name-fields-by-query": "",
- "name-fields-with-name": "",
- "name-fields-with-type": "",
- "name-fields-with-value": ""
+ "name-field-name-by-regex-matcher": "名前が正規表現と一致するフィールド",
+ "name-fields-by-query": "クエリによって返されるフィールド",
+ "name-fields-with-name": "名前付きフィールド",
+ "name-fields-with-type": "タイプ付きフィールド",
+ "name-fields-with-value": "値付きフィールド"
},
"menu-item": {
"keyboard-shortcut-label": "キーボードショートカット"
@@ -8103,55 +8108,55 @@
"config": {
"get-graph-field-options": {
"axis-placement": {
- "description-auto": "",
- "label-auto": "",
- "label-hidden": "",
- "label-left": "",
- "label-right": ""
+ "description-auto": "最初のフィールドを左側に、その他すべてを右側に",
+ "label-auto": "自動",
+ "label-hidden": "非表示",
+ "label-left": "左",
+ "label-right": "右"
},
"bar-alignment": {
- "description-after": "",
- "description-before": "",
- "description-center": ""
+ "description-after": "後",
+ "description-before": "前",
+ "description-center": "中央"
},
"draw-style": {
- "label-bars": "",
- "label-lines": "",
- "label-points": ""
+ "label-bars": "バー",
+ "label-lines": "線",
+ "label-points": "ポイント"
},
"fill-gradient": {
- "description-hue": "",
- "description-opacity": "",
- "description-scheme": "",
- "label-hue": "",
- "label-none": "",
- "label-opacity": "",
- "label-scheme": ""
+ "description-hue": "小さな色相グラデーション",
+ "description-opacity": "塗りつぶしの不透明度グラデーションを有効化",
+ "description-scheme": "配色を使用してグラデーションを定義",
+ "label-hue": "色相",
+ "label-none": "なし",
+ "label-opacity": "不透明度",
+ "label-scheme": "配色"
},
"line-interpolation": {
- "description-linear": "",
- "description-smooth": "",
- "description-step-after": "",
- "description-step-before": ""
+ "description-linear": "線形",
+ "description-smooth": "スムーズ",
+ "description-step-after": "ステップの後",
+ "description-step-before": "ステップの前"
},
"show-points": {
- "description-auto": "",
- "label-always": "",
- "label-auto": "",
- "label-never": ""
+ "description-auto": "密度が低いときにポイントを表示",
+ "label-always": "常時",
+ "label-auto": "自動",
+ "label-never": "なし"
},
"stacking": {
- "label-100": "",
- "label-normal": "",
- "label-off": ""
+ "label-100": "100%",
+ "label-normal": "通常",
+ "label-off": "オフ"
},
"thresholds-display-mode": {
- "label-dashed-lines": "",
- "label-filled-regions": "",
- "label-filled-regions-and-dashed-lines": "",
- "label-filled-regions-and-lines": "",
- "label-lines": "",
- "label-off": ""
+ "label-dashed-lines": "線(破線)として",
+ "label-filled-regions": "塗りつぶし領域として",
+ "label-filled-regions-and-dashed-lines": "塗りつぶし領域と線(破線)として",
+ "label-filled-regions-and-lines": "塗りつぶし領域と線として",
+ "label-lines": "線として",
+ "label-off": "オフ"
}
}
}
@@ -8198,78 +8203,78 @@
},
"heatmap": {
"calculate-from-data-options": {
- "label-no": "",
- "label-yes": ""
- },
- "category-cell-display": "",
- "category-colors": "",
- "category-exemplars": "",
- "category-heatmap": "",
- "category-legend": "",
- "category-tooltip": "",
- "category-y-axis": "",
+ "label-no": "いいえ",
+ "label-yes": "はい"
+ },
+ "category-cell-display": "セル表示",
+ "category-colors": "色",
+ "category-exemplars": "エグゼンプラー",
+ "category-heatmap": "ヒートマップ",
+ "category-legend": "凡例",
+ "category-tooltip": "ツールチップ",
+ "category-y-axis": "Y軸",
"mode-options": {
- "label-opacity": "",
- "label-scheme": ""
- },
- "name-axis-label": "",
- "name-axis-width": "",
- "name-calculate-from-data": "",
- "name-cell-gap": "",
- "name-color": "",
- "name-decimals": "",
- "name-end-color-at-value": "",
- "name-exponent": "",
- "name-hide-cells-gt": "",
- "name-hide-cells-lt": "",
- "name-max-height": "",
- "name-max-value": "",
- "name-max-width": "",
- "name-min-value": "",
- "name-mode": "",
- "name-placement": "",
- "name-reverse": "",
- "name-scale": "",
- "name-scheme": "",
- "name-show-color-scale": "",
- "name-show-histogram": "",
- "name-show-legend": "",
- "name-start-color-from-value": "",
- "name-steps": "",
- "name-tick-alignment": "",
- "name-tooltip-mode": "",
- "name-unit": "",
- "name-value-name": "",
- "name-y-axis-scale": "",
- "placeholder-axis-label": "",
- "placeholder-axis-width": "",
- "placeholder-decimals": "",
- "placeholder-end-color-at-value": "",
- "placeholder-hide-cells-gt": "",
- "placeholder-hide-cells-lt": "",
- "placeholder-max-value": "",
- "placeholder-min-value": "",
- "placeholder-start-color-from-value": "",
- "placeholder-value-name": "",
+ "label-opacity": "不透明度",
+ "label-scheme": "配色"
+ },
+ "name-axis-label": "軸ラベル",
+ "name-axis-width": "軸の幅",
+ "name-calculate-from-data": "データから計算",
+ "name-cell-gap": "セル間隔",
+ "name-color": "色",
+ "name-decimals": "小数点以下",
+ "name-end-color-at-value": "次の値でカラースケールを終了",
+ "name-exponent": "指数",
+ "name-hide-cells-gt": "値が次の値以上のセルを非表示にする",
+ "name-hide-cells-lt": "値が次の値以下のセルを非表示にする",
+ "name-max-height": "最大の高さ",
+ "name-max-value": "最大値",
+ "name-max-width": "最大幅",
+ "name-min-value": "最小値",
+ "name-mode": "モード",
+ "name-placement": "配置",
+ "name-reverse": "反転",
+ "name-scale": "スケール",
+ "name-scheme": "配色",
+ "name-show-color-scale": "カラースケールを表示",
+ "name-show-histogram": "ヒストグラムを表示(Y軸)",
+ "name-show-legend": "凡例を表示",
+ "name-start-color-from-value": "次の値からカラースケールを開始",
+ "name-steps": "ステップ",
+ "name-tick-alignment": "目盛の配置",
+ "name-tooltip-mode": "ツールチップモード",
+ "name-unit": "単位",
+ "name-value-name": "値の名前",
+ "name-y-axis-scale": "Y軸スケール",
+ "placeholder-axis-label": "自動",
+ "placeholder-axis-width": "自動",
+ "placeholder-decimals": "自動",
+ "placeholder-end-color-at-value": "自動(最大)",
+ "placeholder-hide-cells-gt": "なし",
+ "placeholder-hide-cells-lt": "なし",
+ "placeholder-max-value": "自動",
+ "placeholder-min-value": "自動",
+ "placeholder-start-color-from-value": "自動(最小)",
+ "placeholder-value-name": "値",
"placement-options": {
- "label-hidden": "",
- "label-left": "",
- "label-right": ""
+ "label-hidden": "非表示",
+ "label-left": "左",
+ "label-right": "右"
},
"scale-options": {
- "label-exponential": "",
- "label-linear": ""
+ "label-exponential": "指数関数",
+ "label-linear": "線形"
},
"tick-alignment-options": {
- "label-auto": "",
- "label-bottom": "",
- "label-middle": "",
- "label-top": ""
+ "label-auto": "自動",
+ "label-bottom": "下(GE)",
+ "label-middle": "中央",
+ "label-top": "上(LE)"
},
"tooltip-mode-options": {
- "label-all": "",
- "label-hidden": "",
- "label-single": ""
+ "label-all": "すべて",
+ "label-hidden": "非表示",
+ "label-single": "単体"
}
},
"help-modal": {
@@ -8329,14 +8334,14 @@
"troubleshooting-help": "トラブルシューティングのヘルプをリクエストするには、このパネルのスナップショットをGrafana Labsテクニカルサポートに送信してください。スナップショットには、クエリ応答データとパネル設定が含まれています。"
},
"histogram": {
- "category-histogram": "",
+ "category-histogram": "ヒストグラム",
"histogram-panel": {
"no-histogram-found-in-response": "応答にヒストグラムが見つかりません"
},
- "name-fill-opacity": "",
- "name-gradient-mode": "",
- "name-line-width": "",
- "name-stacking": ""
+ "name-fill-opacity": "塗りつぶし不透明度",
+ "name-gradient-mode": "グラデーションモード",
+ "name-line-width": "線の太さ",
+ "name-stacking": "積み上げ"
},
"inspector": {
"inspect-data-tab": {
@@ -8712,16 +8717,16 @@
}
},
"logs": {
- "category-logs": "",
+ "category-logs": "ログ",
"deduplication-options": {
- "label-exact": "",
- "label-none": "",
- "label-numbers": "",
- "label-signature": ""
- },
- "description-enable-infinite-scrolling": "",
- "description-enable-syntax-highlighting": "",
- "description-show-controls": "",
+ "label-exact": "正確",
+ "label-none": "なし",
+ "label-numbers": "数値",
+ "label-signature": "署名"
+ },
+ "description-enable-infinite-scrolling": "実験的機能。ログリストの一番下までスクロールして、さらに結果をリクエストします。",
+ "description-enable-syntax-highlighting": "事前定義された構文の色付けルールを使い、ログ行の該当部分をハイライト表示します",
+ "description-show-controls": "最後または最初のログ行にジャンプするコントロールを表示し、ログレベルでフィルタリングします",
"fields": {
"type": {
"loki": {
@@ -8732,8 +8737,8 @@
}
},
"font-size-options": {
- "label-default": "",
- "label-small": ""
+ "label-default": "デフォルト",
+ "label-small": "小"
},
"get-dataframe-fields": {
"vars": {
@@ -8780,40 +8785,40 @@
"tooltip-error": "エラー:{{errorMessage}}"
},
"log-line-details": {
- "clear-search": "",
- "close": "",
- "copy-shortlink": "",
- "copy-to-clipboard": "",
+ "clear-search": "クリア",
+ "close": "ログの詳細を閉じる",
+ "copy-shortlink": "ショートリンクをコピー",
+ "copy-to-clipboard": "クリップボードにコピー",
"displayed-fields-section": "",
"fields": {
- "adhoc-statistics": "",
- "copy-value-to-clipboard": "",
- "filter-out": "",
- "filter-out-query": "",
+ "adhoc-statistics": "アドホック統計",
+ "copy-value-to-clipboard": "値をクリップボードにコピー",
+ "filter-out": "値を除外してフィルタリング",
+ "filter-out-query": "クエリ{{query}}で値を除外してフィルタリング",
"toggle-field-button": {
- "field-instead-message": "",
- "hide-this-field": ""
+ "field-instead-message": "メッセージの代わりにこのフィールドを表示",
+ "hide-this-field": "このフィールドを非表示"
}
},
- "fields-section": "",
- "hide-log-line": "",
+ "fields-section": "フィールド",
+ "hide-log-line": "ログ行を非表示",
"inline-mode": "",
- "links-section": "",
+ "links-section": "リンク",
"log-line-field": "",
- "log-line-section": "",
+ "log-line-section": "ログ行",
"move-displayed-field-down": "",
"move-displayed-field-up": "",
- "no-details": "",
- "pin-line": "",
+ "no-details": "表示するフィールドがありません。",
+ "pin-line": "ログをピン留め",
"remove-displayed-field": "",
"search": {
- "no-results": ""
+ "no-results": "表示する結果がありません。"
},
- "search-placeholder": "",
- "show-context": "",
- "show-log-line": "",
+ "search-placeholder": "フィールド名と値を検索",
+ "show-context": "コンテキストを表示",
+ "show-log-line": "ログ行を表示",
"sidebar-mode": "",
- "unpin-line": ""
+ "unpin-line": "ログのピン留めを解除"
},
"log-line-menu": {
"copy-link": "ログ行へのリンクをコピー",
@@ -8826,12 +8831,12 @@
"unpin-from-outline": "ログのピン留めを解除する"
},
"log-list-search": {
- "close": "",
- "filter": "",
- "info": "",
- "input-placeholder": "",
- "next": "",
- "prev": ""
+ "close": "検索を閉じる",
+ "filter": "一致するログをフィルタリング",
+ "info": "表示されたログ内の文字列をクライアント側で検索します。クエリフィルターと混同しないでください。このコンポーネントを使用して、ログ結果において特定の文字列を検索します。",
+ "input-placeholder": "ログ内を検索",
+ "next": "次の結果",
+ "prev": "前の結果"
},
"log-row-context-modal": {
"error-loading-log-more-logs": "その他のログを読み込む際にエラーが発生しました。",
@@ -8886,7 +8891,7 @@
"escape-newlines": "ログ行で誤ってエスケープされた改行とタブシーケンスを修正",
"font-size-default": "小さいフォントサイズを使用",
"font-size-small": "デフォルトのフォントサイズを使用",
- "hide-search": "",
+ "hide-search": "検索を閉じる",
"hide-timestamps": "タイムスタンプを非表示",
"hide-unique-labels": "一意のラベルを非表示",
"newest-first": "最新のログ順に並び替え - クリックして最も古いログを最初に表示",
@@ -8895,7 +8900,7 @@
"remove-escaping": "エスケープを削除",
"scroll-bottom": "一番下までスクロール",
"scroll-top": "一番上までスクロール",
- "show-search": "",
+ "show-search": "ログ結果内を検索",
"show-timestamps": "タイムスタンプを表示",
"show-unique-labels": "一意のラベルを表示",
"unwrap-lines": "行の折り返しを解除",
@@ -8913,26 +8918,26 @@
"common-labels": "共通ラベル:"
}
},
- "name-common-labels": "",
- "name-deduplication": "",
+ "name-common-labels": "共通ラベル",
+ "name-deduplication": "重複排除",
"name-details-mode": "",
"name-details-options": {
"label-inline": "",
"label-sidebar": ""
},
- "name-enable-infinite-scrolling": "",
- "name-enable-log-details": "",
- "name-enable-syntax-highlighting": "",
- "name-font-size": "",
- "name-order": "",
- "name-prettify-json": "",
- "name-show-controls": "",
- "name-time": "",
- "name-unique-labels": "",
- "name-wrap-lines": "",
+ "name-enable-infinite-scrolling": "無限スクロールを有効化",
+ "name-enable-log-details": "ログの詳細を有効化",
+ "name-enable-syntax-highlighting": "構文ハイライトを有効化",
+ "name-font-size": "フォントサイズ",
+ "name-order": "順番",
+ "name-prettify-json": "JSONを整形",
+ "name-show-controls": "コントロールを表示",
+ "name-time": "時間",
+ "name-unique-labels": "一意のラベル",
+ "name-wrap-lines": "行を折り返す",
"order-options": {
- "label-newest-first": "",
- "label-oldest-first": ""
+ "label-newest-first": "新しいものから表示",
+ "label-oldest-first": "古いものから表示"
},
"out-of-range-message": {
"end-of-the-selected-time-range": "選択した時間範囲の終わり。"
@@ -8946,7 +8951,7 @@
"un-themed-log-details": {
"aria-label-data-links": "データリンク",
"aria-label-fields": "フィールド",
- "aria-label-line": "",
+ "aria-label-line": "ログ行",
"aria-label-log-level": "ログレベル",
"aria-label-no-details": "詳細なし"
},
@@ -8967,27 +8972,27 @@
}
},
"logs-new": {
- "category-logs": "",
+ "category-logs": "ログ",
"deduplication-options": {
- "label-exact": "",
- "label-none": "",
- "label-numbers": "",
- "label-signature": ""
- },
- "description-infinite-scrolling": "",
- "description-show-controls": "",
- "description-syntax-highlighting": "",
- "name-deduplication": "",
- "name-enable-log-details": "",
- "name-infinite-scrolling": "",
- "name-order": "",
- "name-show-controls": "",
- "name-syntax-highlighting": "",
- "name-time": "",
- "name-wrap-lines": "",
+ "label-exact": "正確",
+ "label-none": "なし",
+ "label-numbers": "数値",
+ "label-signature": "署名"
+ },
+ "description-infinite-scrolling": "実験的機能。ログリストの一番下までスクロールして、さらに結果をリクエストします。",
+ "description-show-controls": "最後または最初のログ行にジャンプするコントロールを表示し、ログレベルでフィルタリングします",
+ "description-syntax-highlighting": "事前定義された構文の色付けルールを使い、ログ行の該当部分をハイライト表示します",
+ "name-deduplication": "重複排除",
+ "name-enable-log-details": "ログの詳細を有効化",
+ "name-infinite-scrolling": "無限スクロールを有効化",
+ "name-order": "順番",
+ "name-show-controls": "コントロールを表示",
+ "name-syntax-highlighting": "構文ハイライトを有効化",
+ "name-time": "時間",
+ "name-wrap-lines": "行を折り返す",
"order-options": {
- "label-newest-first": "",
- "label-oldest-first": ""
+ "label-newest-first": "新しいものから表示",
+ "label-oldest-first": "古いものから表示"
}
},
"manage-dashbaords": {
@@ -9685,12 +9690,12 @@
"rss-button": "最新ブログから"
},
"news": {
- "category-news": "",
- "description-show-image": "",
- "description-url": "",
+ "category-news": "ニュース",
+ "description-show-image": "ニュースアイテムのSNS(og:image)画像をテキストコンテンツの上に表示するかどうかを制御",
+ "description-url": "RSSおよびAtomフィードをサポート",
"link-title": "Grafana Labsブログに移動",
- "name-show-image": "",
- "name-url": "",
+ "name-show-image": "画像を表示",
+ "name-url": "URL",
"news-panel": {
"body-error-loading-rss-feed": "フィードURLが正しく、サーバー上でCORSが正しく設定されていることを確認してください。<2>ニュースパネルのドキュメント2>を参照してください。",
"loading": "読み込み中...",
@@ -9699,27 +9704,27 @@
"title": "最新ブログから"
},
"node-graph": {
- "category-edges": "",
- "category-node-graph": "",
- "category-nodes": "",
+ "category-edges": "エッジ",
+ "category-node-graph": "ノードグラフ",
+ "category-nodes": "ノード",
"layout-algorithm-options": {
- "description-force": "",
- "description-grid": "",
- "description-layered": "",
- "label-force": "",
- "label-grid": "",
- "label-layered": ""
- },
- "name-arc-sections": "",
- "name-layout-algorithm": "",
- "name-main-stat-unit": "",
- "name-secondary-stat-unit": "",
- "name-zoom-mode": "",
+ "description-force": "力学レイアウトを使用",
+ "description-grid": "グリッドレイアウトを使用",
+ "description-layered": "階層レイアウトを使用",
+ "label-force": "力学",
+ "label-grid": "グリッド",
+ "label-layered": "階層"
+ },
+ "name-arc-sections": "円弧セクション",
+ "name-layout-algorithm": "レイアウトアルゴリズム",
+ "name-main-stat-unit": "メイン統計単位",
+ "name-secondary-stat-unit": "補助統計単位",
+ "name-zoom-mode": "ズームモード",
"zoom-mode-options": {
- "description-cooperative": "",
- "description-greedy": "",
- "label-cooperative": "",
- "label-greedy": ""
+ "description-cooperative": "ページを通常どおりスクロールできます",
+ "description-greedy": "すべてのズームジェスチャーに反応します",
+ "label-cooperative": "協調型",
+ "label-greedy": "即時応答型"
}
},
"nodeGraph": {
@@ -9795,40 +9800,40 @@
},
"registry": {
"get-all-option-editors": {
- "description-time-zone": "",
- "name-time-zone": ""
+ "description-time-zone": "タイムゾーンの選択",
+ "name-time-zone": "タイムゾーン"
},
"standard-field-condigs": {
- "category-data-links": ""
+ "category-data-links": "データリンクとアクション"
},
"standard-field-configs": {
- "category": "",
- "category-thresholds": "",
- "category-value-mappings": "",
- "description-display-name": "",
- "description-field-min-max": "",
- "description-max": "",
- "description-min": "",
- "description-no-value": "",
- "description-value-mappings": "",
- "name-actions": "",
- "name-ad-hoc": "",
- "name-color-scheme": "",
- "name-data-links": "",
- "name-decimals": "",
- "name-display-name": "",
- "name-field-min-max": "",
- "name-max": "",
- "name-min": "",
- "name-no-value": "",
- "name-thresholds": "",
- "name-unit": "",
- "name-value-mappings": "",
- "placeholder-decimals": "",
- "placeholder-display-name": "",
- "placeholder-max": "",
- "placeholder-min": "",
- "placeholder-unit": ""
+ "category": "標準オプション",
+ "category-thresholds": "しきい値",
+ "category-value-mappings": "値のマッピング",
+ "description-display-name": "フィールドまたは系列名を変更",
+ "description-field-min-max": "フィールドごとに最小値と最大値を計算",
+ "description-max": "すべての値に基づいて計算するには、空のままにします",
+ "description-min": "すべての値に基づいて計算するには、空のままにします",
+ "description-no-value": "値がない場合に表示するものです",
+ "description-value-mappings": "入力値に基づいて表示テキストを変更します",
+ "name-actions": "アクション",
+ "name-ad-hoc": "アドホックフィルタリング可能",
+ "name-color-scheme": "配色",
+ "name-data-links": "データリンク",
+ "name-decimals": "小数点以下",
+ "name-display-name": "表示名",
+ "name-field-min-max": "フィールドの最小/最大",
+ "name-max": "最大",
+ "name-min": "最小",
+ "name-no-value": "値なし",
+ "name-thresholds": "しきい値",
+ "name-unit": "単位",
+ "name-value-mappings": "値のマッピング",
+ "placeholder-decimals": "自動",
+ "placeholder-display-name": "なし",
+ "placeholder-max": "自動",
+ "placeholder-min": "自動",
+ "placeholder-unit": "なし"
}
},
"units": {
@@ -9937,13 +9942,13 @@
},
"panel-data-error-view": {
"missing-value": {
- "number": "",
- "string": "",
- "time": "",
- "unknown": ""
+ "number": "データに数値フィールドがありません",
+ "string": "データに文字列フィールドがありません",
+ "time": "データに時間フィールドがありません",
+ "unknown": "データを視覚化できません"
},
"no-value": {
- "default": ""
+ "default": "データなし"
},
"open-visualization-suggestions": "可視化に関する提案を開く",
"switch-to-table": "テーブルに切り替え"
@@ -9983,25 +9988,25 @@
"select-placeholder": "タイプで絞り込む"
},
"piechart": {
- "category-legend": "",
- "category-pie-chart": "",
- "description-labels": "",
- "description-pie-chart-type": "",
+ "category-legend": "凡例",
+ "category-pie-chart": "円グラフ",
+ "description-labels": "円グラフに表示するラベルを選択",
+ "description-pie-chart-type": "円グラフのレンダリング方法",
"labels-options": {
- "label-name": "",
- "label-percent": "",
- "label-value": ""
+ "label-name": "名前",
+ "label-percent": "パーセント",
+ "label-value": "値"
},
"legend-values-options": {
- "label-percent": "",
- "label-value": ""
+ "label-percent": "パーセント",
+ "label-value": "値"
},
- "name-labels": "",
- "name-legend-values": "",
- "name-pie-chart-type": "",
+ "name-labels": "ラベル",
+ "name-legend-values": "凡例値",
+ "name-pie-chart-type": "円グラフの種類",
"pie-chart-type-options": {
- "label-donut": "",
- "label-pie": ""
+ "label-donut": "ドーナツ",
+ "label-pie": "円"
}
},
"playlist": {
@@ -10169,7 +10174,7 @@
"dependencies": "依存関係",
"documentation": "ドキュメント",
"downloads": "ダウンロード",
- "from": "",
+ "from": "開始",
"installedVersion": "インストールされているバージョン",
"lastCommitDate": "最終コミット日:",
"latestReleaseDate": "最新リリース日:",
@@ -10239,7 +10244,7 @@
},
"install-controls-warning": {
"body-not-published": "このプラグインは<2>grafana.com/plugins2>に公開されておらず、カタログから管理できません。",
- "enterprise-plugin-info": "",
+ "enterprise-plugin-info": "このプラグインはGrafana CloudとGrafana Enterpriseでのみ利用可能です。",
"learn-more": "もっと詳しく",
"no-valid-grafana-enterprise-license-detected": "有効なGrafana Enterpriseライセンスが検出されませんでした。",
"title-dev-alert": "こちらはプラグインの開発ビルドであるため、アンインストールできません。",
@@ -10397,13 +10402,13 @@
},
"provisioned-resource-form": {
"save-or-delete-resource-shared-fields": {
- "comment-placeholder-describe-changes-optional": "",
- "description-branch-name-in-git-hub": "",
+ "comment-placeholder-describe-changes-optional": "変更内容を説明するメモを追加(任意)",
+ "description-branch-name-in-git-hub": "GitHubのブランチ名",
"description-inside-repository": "",
- "label-branch": "",
- "label-comment": "",
- "label-path": "",
- "label-workflow": ""
+ "label-branch": "ブランチ",
+ "label-comment": "コメント",
+ "label-path": "パス",
+ "label-workflow": "ワークフロー"
}
},
"provisioned-resource-preview-banner": {
@@ -11677,112 +11682,112 @@
},
"stat": {
"add-orientation-option": {
- "description-orientation": "",
- "name-orientation": "",
+ "description-orientation": "レイアウトの向き",
+ "name-orientation": "向き",
"orientation-options": {
- "label-auto": "",
- "label-horizontal": "",
- "label-vertical": ""
+ "label-auto": "自動",
+ "label-horizontal": "水平",
+ "label-vertical": "垂直"
}
},
"add-standard-data-reduce-options": {
- "category-value-options": "",
- "description-calculation": "",
- "description-fields": "",
- "description-limit": "",
- "description-show": "",
+ "category-value-options": "値のオプション",
+ "description-calculation": "リデューサー関数/計算を選択",
+ "description-fields": "パネルに含めるフィールドを選択",
+ "description-limit": "表示する最大行数",
+ "description-show": "列または系列ごとに単一の値を計算するか、各行を表示",
"fields-options": {
- "label-all-fields": "",
- "label-numeric-fields": ""
+ "label-all-fields": "すべてのフィールド",
+ "label-numeric-fields": "数値フィールド"
},
- "name-calculation": "",
- "name-fields": "",
- "name-limit": "",
- "name-show": "",
+ "name-calculation": "計算",
+ "name-fields": "フィールド",
+ "name-limit": "制限",
+ "name-show": "表示",
"show-options": {
- "label-all-values": "",
- "label-calculate": ""
+ "label-all-values": "すべての値",
+ "label-calculate": "計算"
}
},
- "category-stat-styles": "",
+ "category-stat-styles": "統計スタイル",
"color-mode-options": {
- "label-background-gradient": "",
- "label-background-solid": "",
- "label-none": "",
- "label-value": ""
+ "label-background-gradient": "背景グラデーション",
+ "label-background-solid": "背景ソリッド",
+ "label-none": "なし",
+ "label-value": "値"
},
- "description-graph-mode": "",
- "description-text-mode": "",
+ "description-graph-mode": "統計パネルグラフ/スパークラインモード",
+ "description-text-mode": "名前と値を表示するか、名前のみを表示するかを制御",
"graph-mode": {
"options": {
- "label-area": "",
- "label-none": ""
+ "label-area": "面積",
+ "label-none": "なし"
}
},
"name-color-modcolor-mode-options": {
- "label": ""
- },
- "name-graph-mode": "",
- "name-show-percent-change": "",
- "name-text-alignment": "",
- "name-text-mode": "",
- "name-wide-layout": "",
- "percent-change-color-mode": "",
+ "label": "カラーモード"
+ },
+ "name-graph-mode": "グラフモード",
+ "name-show-percent-change": "変化率を表示",
+ "name-text-alignment": "テキストの配置",
+ "name-text-mode": "テキストモード",
+ "name-wide-layout": "ワイドレイアウト",
+ "percent-change-color-mode": "変化率カラーモード",
"percent-change-color-mode-options": {
- "label-inverted": "",
- "label-same-as-value": "",
- "label-standard": ""
+ "label-inverted": "反転",
+ "label-same-as-value": "値と同じ",
+ "label-standard": "標準"
},
"text-alignment-options": {
- "label-auto": "",
- "label-center": ""
+ "label-auto": "自動",
+ "label-center": "中央"
},
"text-mode-options": {
- "label-auto": "",
- "label-name": "",
- "label-none": "",
- "label-value": "",
- "label-value-and-name": ""
+ "label-auto": "自動",
+ "label-name": "名前",
+ "label-none": "なし",
+ "label-value": "値",
+ "label-value-and-name": "値と名前"
},
"wide-layout-options": {
- "label-off": "",
- "label-on": ""
+ "label-off": "オフ",
+ "label-on": "オン"
}
},
"state-timeline": {
"align-values-options": {
- "label-center": "",
- "label-left": "",
- "label-right": ""
- },
- "category-state-timeline": "",
- "name-align-values": "",
- "name-connect-null-values": "",
- "name-disconnect-values": "",
- "name-fill-opacity": "",
- "name-line-width": "",
- "name-merge-equal-consecutive-values": "",
- "name-page-size": "",
- "name-row-height": "",
- "name-show-values": "",
+ "label-center": "中央",
+ "label-left": "左",
+ "label-right": "右"
+ },
+ "category-state-timeline": "状態タイムライン",
+ "name-align-values": "値を整列",
+ "name-connect-null-values": "null値を接続",
+ "name-disconnect-values": "値の切断",
+ "name-fill-opacity": "塗りつぶし不透明度",
+ "name-line-width": "線の太さ",
+ "name-merge-equal-consecutive-values": "等しい連続値を統合",
+ "name-page-size": "ページサイズ(ページ分割を有効化)",
+ "name-row-height": "行の高さ",
+ "name-show-values": "値を表示",
"show-values-options": {
- "label-always": "",
- "label-auto": "",
- "label-never": ""
+ "label-always": "常時",
+ "label-auto": "自動",
+ "label-never": "なし"
}
},
"status-history": {
- "category-status-history": "",
- "name-column-width": "",
- "name-fill-opacity": "",
- "name-line-width": "",
- "name-page-size": "",
- "name-row-height": "",
- "name-show-values": "",
+ "category-status-history": "ステータス履歴",
+ "name-column-width": "列幅",
+ "name-fill-opacity": "塗りつぶし不透明度",
+ "name-line-width": "線の太さ",
+ "name-page-size": "ページサイズ(ページ分割を有効化)",
+ "name-row-height": "行の高さ",
+ "name-show-values": "値を表示",
"show-values-options": {
- "label-always": "",
- "label-auto": "",
- "label-never": ""
+ "label-always": "常時",
+ "label-auto": "自動",
+ "label-never": "なし"
},
"status-history-panel": {
"too-many-points_other": "ポイントが多すぎて適切に可視化できません。<1>1>より少ないポイントが返されるようにクエリを更新してください。<3>3>({{count}}ポイントを受信)"
@@ -11821,13 +11826,13 @@
"label-gauge-display-mode": "ゲージ表示モード",
"label-value-display": "値を表示"
},
- "category-cell-options": "",
- "category-table": "",
- "category-table-footer": "",
+ "category-cell-options": "セルオプション",
+ "category-table": "テーブル",
+ "category-table-footer": "テーブルフッター",
"cell-height-options": {
- "label-large": "",
- "label-medium": "",
- "label-small": ""
+ "label-large": "大",
+ "label-medium": "中",
+ "label-small": "小"
},
"color-background-cell-options-editor": {
"description-apply-to-entire-row": "選択されている場合、行全体がこのセルと同じ色で表示されます。",
@@ -11841,22 +11846,22 @@
"wrap-text": "テキストを折り返す"
},
"column-alignment-options": {
- "label-auto": "",
- "label-center": "",
- "label-left": "",
- "label-right": ""
+ "label-auto": "自動",
+ "label-center": "中央",
+ "label-left": "左",
+ "label-right": "右"
},
"container": {
"content": "1つのテーブルで多すぎる列を表示すると、パフォーマンスに影響を与え、データの読み取りが困難になる可能性があります。クエリを絞り込むことを検討してください。",
"show-all-series": "すべての列を表示",
"show-only-series": "{{MAX_NUMBER_OF_COLUMNS}}件の列のみ表示"
},
- "description-calculation": "",
- "description-cell-value-inspect": "",
- "description-column-filter": "",
- "description-count-rows": "",
- "description-fields": "",
- "description-min-column-width": "",
+ "description-calculation": "リデューサー関数/計算を選択",
+ "description-cell-value-inspect": "モーダルウィンドウでセル値の検査を有効化",
+ "description-column-filter": "テーブルのフィールドフィルターを有効/無効化",
+ "description-count-rows": "すべてのデータ行の単一カウントを表示",
+ "description-fields": "計算するフィールドを選択",
+ "description-min-column-width": "列の自動サイズ変更の最小幅",
"description-wrap-header-text": "",
"image-cell-options-editor": {
"description-alt-text": "画像が表示できない場合やスクリーンリーダーを使用するユーザーのために表示される代替テキスト",
@@ -11864,61 +11869,61 @@
"label-alt-text": "代替テキスト",
"label-title-text": "タイトルテキスト"
},
- "name-calculation": "",
- "name-cell-height": "",
- "name-cell-type": "",
- "name-cell-value-inspect": "",
- "name-column-alignment": "",
- "name-column-filter": "",
- "name-column-width": "",
- "name-count-rows": "",
- "name-enable-paginations": "",
- "name-fields": "",
- "name-hide-in-table": "",
- "name-min-column-width": "",
- "name-show-table-footer": "",
- "name-show-table-header": "",
- "name-wrap-header-text": "",
- "placeholder-column-width": "",
- "placeholder-fields": ""
+ "name-calculation": "計算",
+ "name-cell-height": "セルの高さ",
+ "name-cell-type": "セルの種類",
+ "name-cell-value-inspect": "セル値の検査",
+ "name-column-alignment": "列の配置",
+ "name-column-filter": "列フィルター",
+ "name-column-width": "列幅",
+ "name-count-rows": "行数",
+ "name-enable-paginations": "ページ分割を有効化",
+ "name-fields": "フィールド",
+ "name-hide-in-table": "テーブルで非表示",
+ "name-min-column-width": "最小列幅",
+ "name-show-table-footer": "テーブルフッターを表示",
+ "name-show-table-header": "テーブルヘッダーを表示",
+ "name-wrap-header-text": "ヘッダーテキストの折り返し",
+ "placeholder-column-width": "自動",
+ "placeholder-fields": "すべての数値フィールド"
},
"table-new": {
- "category-cell-options": "",
- "category-table": "",
- "category-table-footer": "",
+ "category-cell-options": "セルオプション",
+ "category-table": "テーブル",
+ "category-table-footer": "テーブルフッター",
"cell-height-options": {
- "label-large": "",
- "label-medium": "",
- "label-small": ""
+ "label-large": "大",
+ "label-medium": "中",
+ "label-small": "小"
},
"column-alignment-options": {
- "label-auto": "",
- "label-center": "",
- "label-left": "",
- "label-right": ""
- },
- "description-calculation": "",
- "description-cell-value-inspect": "",
- "description-column-filter": "",
- "description-count-rows": "",
- "description-fields": "",
- "description-min-column-width": "",
- "name-calculation": "",
- "name-cell-height": "",
- "name-cell-type": "",
- "name-cell-value-inspect": "",
- "name-column-alignment": "",
- "name-column-filter": "",
- "name-column-width": "",
- "name-count-rows": "",
- "name-enable-pagination": "",
- "name-fields": "",
- "name-hide-in-table": "",
- "name-min-column-width": "",
- "name-show-table-footer": "",
- "name-show-table-header": "",
- "placeholder-column-width": "",
- "placeholder-fields": ""
+ "label-auto": "自動",
+ "label-center": "中央",
+ "label-left": "左",
+ "label-right": "右"
+ },
+ "description-calculation": "リデューサー関数/計算を選択",
+ "description-cell-value-inspect": "モーダルウィンドウでセル値の検査を有効化",
+ "description-column-filter": "テーブルのフィールドフィルターを有効/無効化",
+ "description-count-rows": "すべてのデータ行の単一カウントを表示",
+ "description-fields": "計算するフィールドを選択",
+ "description-min-column-width": "列の自動サイズ変更の最小幅",
+ "name-calculation": "計算",
+ "name-cell-height": "セルの高さ",
+ "name-cell-type": "セルの種類",
+ "name-cell-value-inspect": "セル値の検査",
+ "name-column-alignment": "列の配置",
+ "name-column-filter": "列フィルター",
+ "name-column-width": "列幅",
+ "name-count-rows": "行数",
+ "name-enable-pagination": "ページ分割を有効化",
+ "name-fields": "フィールド",
+ "name-hide-in-table": "テーブルで非表示",
+ "name-min-column-width": "最小列幅",
+ "name-show-table-footer": "テーブルフッターを表示",
+ "name-show-table-header": "テーブルヘッダーを表示",
+ "placeholder-column-width": "自動",
+ "placeholder-fields": "すべての数値フィールド"
},
"tag-filter": {
"clear-button": "タグをクリア",
@@ -12003,17 +12008,17 @@
}
},
"text": {
- "category-text": "",
+ "category-text": "テキスト",
"mode-options": {
- "label-code": "",
- "label-html": "",
- "label-markdown": ""
+ "label-code": "コード",
+ "label-html": "HTML",
+ "label-markdown": "Markdown"
},
- "name-content": "",
- "name-language": "",
- "name-mode": "",
- "name-show-line-numbers": "",
- "name-show-mini-map": ""
+ "name-content": "内容",
+ "name-language": "言語",
+ "name-mode": "モード",
+ "name-show-line-numbers": "行番号を表示",
+ "name-show-mini-map": "ミニマップを表示"
},
"theme-preview": {
"breadcrumbs": {
@@ -12061,7 +12066,7 @@
"apply-button": "時間範囲を適用",
"default-error": "過去の日付または「{{now}}」を入力してください",
"fiscal-year": "会計年度:{{from}}~{{to}}",
- "from-input": "",
+ "from-input": "開始",
"open-input-calendar": "カレンダー",
"range-error": "「開始月」を「終了月」より後にすることはできません",
"to-input": "終了月"
@@ -12079,7 +12084,7 @@
"aria-role": "時間範囲の選択",
"default-title": "時間範囲",
"example-title": "時間範囲の例",
- "from-label": "",
+ "from-label": "開始",
"from-to": "{{timeOptionFrom}}から{{timeOptionTo}}まで",
"specify": "時間範囲を指定",
"submit-button-label": "タイムピッカー送信ボタン",
@@ -12092,8 +12097,8 @@
},
"timeline": {
"missing-field": {
- "all": "",
- "time": ""
+ "all": "グラフ化可能なフィールドはありません",
+ "time": "データに時間フィールドがありません"
}
},
"timeseries": {
@@ -12111,54 +12116,54 @@
"tooltip-delete": "削除",
"tooltip-edit": "編集"
},
- "category-axis": "",
+ "category-axis": "軸",
"config": {
"get-graph-field-config": {
- "aria-label-bar-width-factor": "",
- "aria-label-fill-opacity": "",
- "aria-label-line-width": "",
- "aria-label-point-size": "",
- "category-graph-styles": "",
- "category-thresholds": "",
- "name-bar-alignment": "",
- "name-bar-width-factor": "",
- "name-connect-nulls": "",
- "name-disconnect-values": "",
- "name-fill-below-to": "",
- "name-fill-opacity": "",
- "name-gradient-mode": "",
- "name-line-interpolation": "",
- "name-line-style": "",
- "name-line-width": "",
- "name-point-size": "",
- "name-show-points": "",
- "name-show-thresholds": "",
- "name-style": "",
- "name-transform": "",
+ "aria-label-bar-width-factor": "バー幅係数",
+ "aria-label-fill-opacity": "塗りつぶし不透明度",
+ "aria-label-line-width": "線の太さ",
+ "aria-label-point-size": "ポイントサイズ",
+ "category-graph-styles": "グラフスタイル",
+ "category-thresholds": "しきい値",
+ "name-bar-alignment": "バーの配置",
+ "name-bar-width-factor": "バー幅係数",
+ "name-connect-nulls": "null値を接続",
+ "name-disconnect-values": "値の切断",
+ "name-fill-below-to": "以下を塗りつぶし",
+ "name-fill-opacity": "塗りつぶし不透明度",
+ "name-gradient-mode": "グラデーションモード",
+ "name-line-interpolation": "線補間",
+ "name-line-style": "線のスタイル",
+ "name-line-width": "線の太さ",
+ "name-point-size": "ポイントサイズ",
+ "name-show-points": "ポイントを表示",
+ "name-show-thresholds": "しきい値を表示",
+ "name-style": "スタイル",
+ "name-transform": "変換",
"transform-options": {
- "description-constant": "",
- "description-style": "",
- "label-constant": "",
- "label-style": ""
+ "description-constant": "最初の値は定数線として表示されます",
+ "description-style": "結果をY軸の負の値に反転表示",
+ "label-constant": "定数",
+ "label-style": "Y軸を反転"
}
}
},
"insert-nulls-editor": {
"disconnect-options": {
- "label-never": "",
- "label-threshold": ""
+ "label-never": "なし",
+ "label-threshold": "しきい値"
}
},
"line-style-editor": {
"line-fill-options": {
- "label-dash": "",
- "label-dots": "",
- "label-solid": ""
+ "label-dash": "破線",
+ "label-dots": "点線",
+ "label-solid": "実線"
},
"title-the-input-expects-a-segment-list": "入力にはセグメントリストが必要です",
"tooltip-help": "ヘルプ"
},
- "name-time-zone": "",
+ "name-time-zone": "タイムゾーン",
"nulls-threshold-input": {
"placeholder-never": "なし"
},
@@ -12168,9 +12173,9 @@
},
"span-nulls-editor": {
"gaps-options": {
- "label-always": "",
- "label-never": "",
- "label-threshold": ""
+ "label-always": "常時",
+ "label-never": "なし",
+ "label-threshold": "しきい値"
}
},
"timezones-editor": {
@@ -12179,17 +12184,17 @@
}
},
"traces": {
- "category-span-filters": "",
- "name-critical-path-only": "",
- "name-find-in-trace": "",
- "name-max-duration": "",
- "name-min-duration": "",
- "name-service-name": "",
- "name-service-name-operator": "",
- "name-show-matches-only": "",
- "name-span-name": "",
- "name-span-name-operator": "",
- "name-tags": "",
+ "category-span-filters": "スパンフィルター",
+ "name-critical-path-only": "クリティカルパスのみ表示",
+ "name-find-in-trace": "トレースで検索",
+ "name-max-duration": "最大継続時間",
+ "name-min-duration": "最小継続時間",
+ "name-service-name": "サービス名",
+ "name-service-name-operator": "サービス名の演算子",
+ "name-show-matches-only": "一致するもののみを表示",
+ "name-span-name": "スパン名",
+ "name-span-name-operator": "スパン名の演算子",
+ "name-tags": "タグ",
"traces-panel": {
"no-data-found-in-response": "応答にデータが見つかりません"
}
@@ -12204,20 +12209,20 @@
"axis-editor": {
"log-mode-options": {
"description": {
- "split-the-buckets-based-on-size": ""
+ "split-the-buckets-based-on-size": "サイズに基づいてバケットを分割"
},
"label": {
- "split": ""
+ "split": "分割"
}
},
"mode-options": {
"description": {
- "split-the-buckets-based-on-count": "",
- "split-the-buckets-based-on-size": ""
+ "split-the-buckets-based-on-count": "カウントに基づいてバケットを分割",
+ "split-the-buckets-based-on-size": "サイズに基づいてバケットを分割"
},
"label": {
- "count": "",
- "size": ""
+ "count": "カウント",
+ "size": "サイズ"
}
},
"placeholder-auto": "自動"
@@ -12249,9 +12254,9 @@
},
"calculate-heatmap": {
"add-heatmap-calculation-options": {
- "name-x-bucket": "",
- "name-y-bucket": "",
- "name-y-bucket-scale": ""
+ "name-x-bucket": "Xバケット",
+ "name-y-bucket": "Yバケット",
+ "name-y-bucket-scale": "Yバケットスケール"
}
},
"concatenate-transformer-editor": {
@@ -12312,8 +12317,8 @@
"tooltip-enable": "有効にする"
},
"draggable-sort-order": {
- "asc": "",
- "desc": "",
+ "asc": "昇順",
+ "desc": "降順",
"off": "オフ"
},
"editors": {
@@ -12712,9 +12717,9 @@
"description": {
"reorder-hide-or-rename-fields": ""
},
- "field-order": "",
+ "field-order": "フィールド順序",
"field-order-auto": "自動",
- "field-order-manual": "",
+ "field-order-manual": "手動",
"first-frame-warning": "フィールドの整理は単一フレームでのみ機能します。最初に変換の結合を適用するか、入力をフィルタリングすることを検討してください。",
"name": {
"organize-fields": ""
@@ -12841,7 +12846,7 @@
"polynomial": "多項式"
}
},
- "regression": "",
+ "regression": "回帰",
"tooltip-number-of-xy-points-to-predict": "予測するX、Yポイント数"
},
"rename-by-regex-transformer": {
@@ -12994,10 +12999,10 @@
}
},
"trend": {
- "category-x-axis": "",
- "description-x-field": "",
- "name-x-field": "",
- "placeholder-x-field": ""
+ "category-x-axis": "X軸",
+ "description-x-field": "増加する数値",
+ "name-x-field": "Xフィールド",
+ "placeholder-x-field": "最初の数値"
},
"upgrade-box": {
"discovery-text": "Pro機能を発見しました!",
@@ -13260,20 +13265,20 @@
}
},
"xychart": {
- "category-xychart": "",
- "name-fill-opacity": "",
- "name-line-style": "",
- "name-line-width": "",
- "name-max-point-size": "",
- "name-min-point-size": "",
- "name-point-shape": "",
- "name-point-size": "",
- "name-point-stroke-width": "",
- "name-series-mapping": "",
- "name-show": "",
+ "category-xychart": "XYチャート",
+ "name-fill-opacity": "塗りつぶし不透明度",
+ "name-line-style": "線のスタイル",
+ "name-line-width": "線の太さ",
+ "name-max-point-size": "最大ポイントサイズ",
+ "name-min-point-size": "最小ポイントサイズ",
+ "name-point-shape": "ポイント形状",
+ "name-point-size": "ポイントサイズ",
+ "name-point-stroke-width": "ポイントストローク幅",
+ "name-series-mapping": "系列の対応付け",
+ "name-show": "表示",
"point-shape-options": {
- "label-circle": "",
- "label-square": ""
+ "label-circle": "円形",
+ "label-square": "四角形"
},
"series-editor": {
"add-series": "系列を追加",
@@ -13285,18 +13290,18 @@
"label-y-field": "Yフィールド",
"placeholder-all-frames": "すべてのフレーム",
"placeholder-select-frame": "フレームを選択",
- "placeholder-x-field": "",
- "placeholder-y-field": "",
+ "placeholder-x-field": "各フレームの最初の数値または時間フィールド",
+ "placeholder-y-field": "各フレームの残りの数値フィールド",
"tooltip-delete-series": "系列の削除"
},
"series-mapping-options": {
- "label-auto": "",
- "label-manual": ""
+ "label-auto": "自動",
+ "label-manual": "手動"
},
"show-options": {
- "label-both": "",
- "label-lines": "",
- "label-points": ""
+ "label-both": "両方",
+ "label-lines": "線",
+ "label-points": "ポイント"
}
}
}
\ No newline at end of file
diff --git a/public/locales/ko-KR/grafana.json b/public/locales/ko-KR/grafana.json
index 30c73540b5d..838e8e0704b 100644
--- a/public/locales/ko-KR/grafana.json
+++ b/public/locales/ko-KR/grafana.json
@@ -3243,6 +3243,11 @@
"id-token-attribute-name-label": "ID 토큰 속성 이름",
"login-attribute-path-description": "사용자 ID 토큰에서 사용자 로그인 조회에 사용할 JMESPath 표현식입니다.",
"login-attribute-path-label": "로그인 속성 경로",
+ "login-prompt-consent": "",
+ "login-prompt-description": "",
+ "login-prompt-label": "",
+ "login-prompt-login": "",
+ "login-prompt-select-account": "",
"managed-identity-client-id-description": "OAuth2 앱의 페더레이션 ID 자격 증명의 관리 ID 클라이언트 ID입니다.",
"managed-identity-client-id-label": "FIC 관리 ID 클라이언트 ID",
"name-attribute-path-description": "사용자 ID 토큰에서 사용자 이름 조회에 사용할 JMESPath 표현식입니다.이 이름은 사용자의 표시 이름으로 사용됩니다.",
diff --git a/public/locales/nl-NL/grafana.json b/public/locales/nl-NL/grafana.json
index 11d135e3e41..951f152ef29 100644
--- a/public/locales/nl-NL/grafana.json
+++ b/public/locales/nl-NL/grafana.json
@@ -3256,6 +3256,11 @@
"id-token-attribute-name-label": "Naam id-tokenattribuut",
"login-attribute-path-description": "JMESPath-expressie om te gebruiken voor het opzoeken van gebruikersaanmeldingen uit het gebruikers-id-token.",
"login-attribute-path-label": "Pad inlogattribuut",
+ "login-prompt-consent": "",
+ "login-prompt-description": "",
+ "login-prompt-label": "",
+ "login-prompt-login": "",
+ "login-prompt-select-account": "",
"managed-identity-client-id-description": "De beheerde identiteitsclient-id van de federatieve identiteitsreferentie van je OAuth2-app.",
"managed-identity-client-id-label": "FIC-beheerde identiteitsclient-id",
"name-attribute-path-description": "JMESPath-expressie om te gebruiken voor het opzoeken van gebruikersaanmeldingen uit het gebruikers-id-token.\nDeze naam wordt gebruikt als de weergavenaam van de gebruiker.",
diff --git a/public/locales/pl-PL/grafana.json b/public/locales/pl-PL/grafana.json
index 673833e2fbe..8281046af77 100644
--- a/public/locales/pl-PL/grafana.json
+++ b/public/locales/pl-PL/grafana.json
@@ -3282,6 +3282,11 @@
"id-token-attribute-name-label": "Nazwa atrybutu tokena identyfikatora",
"login-attribute-path-description": "Wyrażenie JMESPath używane do wyszukiwania loginu na podstawie tokena identyfikatora użytkownika.",
"login-attribute-path-label": "Ścieżka atrybutu loginu",
+ "login-prompt-consent": "",
+ "login-prompt-description": "",
+ "login-prompt-label": "",
+ "login-prompt-login": "",
+ "login-prompt-select-account": "",
"managed-identity-client-id-description": "Identyfikator klienta tożsamości zarządzanej w poświadczeniach tożsamości federacyjnej Twojej aplikacji OAuth2.",
"managed-identity-client-id-label": "Identyfikator klienta tożsamości zarządzanej FIC",
"name-attribute-path-description": "Wyrażenie JMESPath używane do wyszukiwania nazwy użytkownika na podstawie tokena identyfikatora użytkownika. \nTa nazwa będzie używana jako nazwa wyświetlana użytkownika.",
diff --git a/public/locales/pt-BR/grafana.json b/public/locales/pt-BR/grafana.json
index efe47b733fb..7bef4ff9b37 100644
--- a/public/locales/pt-BR/grafana.json
+++ b/public/locales/pt-BR/grafana.json
@@ -3256,6 +3256,11 @@
"id-token-attribute-name-label": "Nome do atributo do token de ID",
"login-attribute-path-description": "Expressão JMESPath a ser usada para a consulta de login do usuário a partir do token de ID do usuário.",
"login-attribute-path-label": "Caminho do atributo de login",
+ "login-prompt-consent": "",
+ "login-prompt-description": "",
+ "login-prompt-label": "",
+ "login-prompt-login": "",
+ "login-prompt-select-account": "",
"managed-identity-client-id-description": "O ID do cliente de identidade gerenciada da credencial de identidade federada (FIC) do seu aplicativo OAuth2.",
"managed-identity-client-id-label": "ID do cliente de identidade gerenciada da FIC",
"name-attribute-path-description": "Expressão JMESPath a ser usada para a consulta de nome de usuário a partir do token de ID do usuário. \nEste nome será usado como o nome de exibição do usuário.",
diff --git a/public/locales/pt-PT/grafana.json b/public/locales/pt-PT/grafana.json
index 176e04062db..00d374d64dc 100644
--- a/public/locales/pt-PT/grafana.json
+++ b/public/locales/pt-PT/grafana.json
@@ -3256,6 +3256,11 @@
"id-token-attribute-name-label": "Nome do atributo do token de ID",
"login-attribute-path-description": "Expressão JMESPath a utilizar para a pesquisa de início de sessão do utilizador a partir do token de ID do utilizador.",
"login-attribute-path-label": "Caminho do atributo de início de sessão",
+ "login-prompt-consent": "",
+ "login-prompt-description": "",
+ "login-prompt-label": "",
+ "login-prompt-login": "",
+ "login-prompt-select-account": "",
"managed-identity-client-id-description": "A ID de cliente de identidade gerida da credencial de identidade federada da sua aplicação OAuth2.",
"managed-identity-client-id-label": "ID de cliente de identidade gerida FIC",
"name-attribute-path-description": "Expressão JMESPath a utilizar para a pesquisa de início de sessão do utilizador a partir do token de ID do utilizador. \nEste nome será utilizado como o nome a apresentar do utilizador.",
diff --git a/public/locales/ru-RU/grafana.json b/public/locales/ru-RU/grafana.json
index 6a522f41b98..29be8c50f87 100644
--- a/public/locales/ru-RU/grafana.json
+++ b/public/locales/ru-RU/grafana.json
@@ -3282,6 +3282,11 @@
"id-token-attribute-name-label": "Путь атрибута идентификационного токена",
"login-attribute-path-description": "Выражение JMESPath, используемое для поиска логина в идентификационном токене пользователя.",
"login-attribute-path-label": "Путь атрибута логина",
+ "login-prompt-consent": "",
+ "login-prompt-description": "",
+ "login-prompt-label": "",
+ "login-prompt-login": "",
+ "login-prompt-select-account": "",
"managed-identity-client-id-description": "Идентификатор клиента управляемого удостоверения федеративных учетных данных вашего приложения OAuth2.",
"managed-identity-client-id-label": "Идентификатор клиента управляемого удостоверения FIC",
"name-attribute-path-description": "Выражение JMESPath, используемое для поиска имени пользователя в его идентификационном токене. \nЭто имя будет использоваться в качестве отображаемого имени пользователя.",
diff --git a/public/locales/sv-SE/grafana.json b/public/locales/sv-SE/grafana.json
index 9a41fd4a1fa..7205196b163 100644
--- a/public/locales/sv-SE/grafana.json
+++ b/public/locales/sv-SE/grafana.json
@@ -3256,6 +3256,11 @@
"id-token-attribute-name-label": "ID-tokenattributnamn",
"login-attribute-path-description": "JMESPath-uttryck som ska användas för användarens inloggningssökning från användar-ID-token.",
"login-attribute-path-label": "Sökväg för inloggningsattribut",
+ "login-prompt-consent": "",
+ "login-prompt-description": "",
+ "login-prompt-label": "",
+ "login-prompt-login": "",
+ "login-prompt-select-account": "",
"managed-identity-client-id-description": "Klient-ID för den hanterade identiteten för din OAuth2-apps federerade identitetsuppgift.",
"managed-identity-client-id-label": "FIC klient-ID för hanterad identitet",
"name-attribute-path-description": "JMESPath-uttryck som ska användas för användarnamnsökning från användar-ID-token.Det här namnet kommer att användas som användarens visningsnamn.",
diff --git a/public/locales/tr-TR/grafana.json b/public/locales/tr-TR/grafana.json
index 350ffea8fb3..65252dc3b35 100644
--- a/public/locales/tr-TR/grafana.json
+++ b/public/locales/tr-TR/grafana.json
@@ -3256,6 +3256,11 @@
"id-token-attribute-name-label": "Kimlik belirteci özniteliği adı",
"login-attribute-path-description": "Kullanıcı kimliği belirtecinden giriş bilgisini aramak için kullanılacak JMESPath ifadesi.",
"login-attribute-path-label": "Giriş özniteliği yolu",
+ "login-prompt-consent": "",
+ "login-prompt-description": "",
+ "login-prompt-label": "",
+ "login-prompt-login": "",
+ "login-prompt-select-account": "",
"managed-identity-client-id-description": "OAuth2 uygulamanızın birleşik kimlik bilgilerinin yönetilen kimlik istemci kimliği.",
"managed-identity-client-id-label": "FIC tarafından yönetilen kimlik istemci kimliği",
"name-attribute-path-description": "Kullanıcı kimliği belirtecinden kullanıcı adını aramak için kullanılacak JMESPath ifadesi.\nBu ad, kullanıcının görünen adı olarak kullanılacaktır.",
diff --git a/public/locales/zh-Hans/grafana.json b/public/locales/zh-Hans/grafana.json
index 1514f2b7632..a8bfefb5f87 100644
--- a/public/locales/zh-Hans/grafana.json
+++ b/public/locales/zh-Hans/grafana.json
@@ -3243,6 +3243,11 @@
"id-token-attribute-name-label": "ID 令牌属性名称",
"login-attribute-path-description": "用于从用户 ID 令牌中查找用户登录的 JMESPath 表达式。",
"login-attribute-path-label": "登录属性路径",
+ "login-prompt-consent": "",
+ "login-prompt-description": "",
+ "login-prompt-label": "",
+ "login-prompt-login": "",
+ "login-prompt-select-account": "",
"managed-identity-client-id-description": "OAuth2 应用的联合身份凭证的托管身份客户端 ID。",
"managed-identity-client-id-label": "FIC 托管身份客户端 ID",
"name-attribute-path-description": "用于从用户 ID 令牌中查找用户名的 JMESPath 表达式。此名称将用作用户的显示名称。",
diff --git a/public/locales/zh-Hant/grafana.json b/public/locales/zh-Hant/grafana.json
index e815a18a467..dbfc16921c0 100644
--- a/public/locales/zh-Hant/grafana.json
+++ b/public/locales/zh-Hant/grafana.json
@@ -3243,6 +3243,11 @@
"id-token-attribute-name-label": "ID 權杖屬性名稱",
"login-attribute-path-description": "用於從使用者 ID 權杖中查找使用者登入的 JMESPath 表達式。",
"login-attribute-path-label": "登入屬性路徑",
+ "login-prompt-consent": "",
+ "login-prompt-description": "",
+ "login-prompt-label": "",
+ "login-prompt-login": "",
+ "login-prompt-select-account": "",
"managed-identity-client-id-description": "OAuth2 應用程式中聯合身分憑證的受控身分用戶端 ID。",
"managed-identity-client-id-label": "FIC 受控身分用戶端 ID",
"name-attribute-path-description": "用於從使用者 ID 權杖中查找使用者名稱的 JMESPath 表達式。\n此名稱將用作使用者的顯示名稱。",
From ca1ecf07646209ea3215f0cc5b0bab32998e0066 Mon Sep 17 00:00:00 2001
From: Tom Ratcliffe
Date: Fri, 18 Jul 2025 09:04:17 +0100
Subject: [PATCH 02/46] Chore: Bump ESLint to 9.28.0 (#106264)
Bump eslint to 9.28.0
---
package.json | 2 +-
packages/grafana-eslint-rules/package.json | 2 +-
packages/grafana-plugin-configs/package.json | 2 +-
yarn.lock | 191 +++++++++++++------
4 files changed, 138 insertions(+), 59 deletions(-)
diff --git a/package.json b/package.json
index 202f700962a..f39310b2de5 100644
--- a/package.json
+++ b/package.json
@@ -185,7 +185,7 @@
"esbuild": "0.25.6",
"esbuild-loader": "4.3.0",
"esbuild-plugin-browserslist": "^1.0.0",
- "eslint": "9.19.0",
+ "eslint": "9.28.0",
"eslint-config-prettier": "9.1.0",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-jest": "28.11.0",
diff --git a/packages/grafana-eslint-rules/package.json b/packages/grafana-eslint-rules/package.json
index 58f95284f26..7b8cd3da539 100644
--- a/packages/grafana-eslint-rules/package.json
+++ b/packages/grafana-eslint-rules/package.json
@@ -18,7 +18,7 @@
},
"devDependencies": {
"@typescript-eslint/types": "^8.9.0",
- "eslint": "9.19.0",
+ "eslint": "9.28.0",
"tslib": "2.8.1"
},
"private": true
diff --git a/packages/grafana-plugin-configs/package.json b/packages/grafana-plugin-configs/package.json
index f9c6f066c3f..14c9670fa1a 100644
--- a/packages/grafana-plugin-configs/package.json
+++ b/packages/grafana-plugin-configs/package.json
@@ -15,7 +15,7 @@
"@types/eslint": "9.6.1",
"@types/webpack-bundle-analyzer": "^4.7.0",
"copy-webpack-plugin": "12.0.2",
- "eslint": "9.19.0",
+ "eslint": "9.28.0",
"eslint-webpack-plugin": "4.2.0",
"fork-ts-checker-webpack-plugin": "9.0.2",
"glob": "11.0.3",
diff --git a/yarn.lock b/yarn.lock
index b5872e86106..8c64f72ebd6 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1464,7 +1464,14 @@ __metadata:
languageName: node
linkType: hard
-"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.24.5, @babel/runtime@npm:^7.24.7, @babel/runtime@npm:^7.25.0, @babel/runtime@npm:^7.25.6, @babel/runtime@npm:^7.25.7, @babel/runtime@npm:^7.26.10, @babel/runtime@npm:^7.26.7, @babel/runtime@npm:^7.27.0, @babel/runtime@npm:^7.27.6, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7":
+"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.24.5, @babel/runtime@npm:^7.24.7, @babel/runtime@npm:^7.25.0, @babel/runtime@npm:^7.25.6, @babel/runtime@npm:^7.25.7, @babel/runtime@npm:^7.27.0, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7":
+ version: 7.27.1
+ resolution: "@babel/runtime@npm:7.27.1"
+ checksum: 10/34cefcbf781ea5a4f1b93f8563327b9ac82694bebdae91e8bd9d7f58d084cbe5b9a6e7f94d77076e15b0bcdaa0040a36cb30737584028df6c4673b4c67b2a31d
+ languageName: node
+ linkType: hard
+
+"@babel/runtime@npm:^7.26.7, @babel/runtime@npm:^7.27.6":
version: 7.27.6
resolution: "@babel/runtime@npm:7.27.6"
checksum: 10/cc957a12ba3781241b83d528eb69ddeb86ca5ac43179a825e83aa81263a6b3eb88c57bed8a937cdeacfc3192e07ec24c73acdfea4507d0c0428c8e23d6322bfe
@@ -2258,29 +2265,36 @@ __metadata:
languageName: node
linkType: hard
-"@eslint/config-array@npm:^0.19.0":
- version: 0.19.1
- resolution: "@eslint/config-array@npm:0.19.1"
+"@eslint/config-array@npm:^0.20.0":
+ version: 0.20.0
+ resolution: "@eslint/config-array@npm:0.20.0"
dependencies:
- "@eslint/object-schema": "npm:^2.1.5"
+ "@eslint/object-schema": "npm:^2.1.6"
debug: "npm:^4.3.1"
minimatch: "npm:^3.1.2"
- checksum: 10/1243b01f463de85c970c18f0994f9d1850dafe8cc8c910edb64105d845edd3cacaa0bbf028bf35a6daaf5a179021140b6a8b1dc7a2f915b42c2d35f022a9c201
+ checksum: 10/9db7f6cbb5363f2f98ee4805ce09d1a95c4349e86f3f456f2c23a0849b7a6aa8d2be4c25e376ee182af062762e15a101844881c89b566eea0856c481ffcb2090
languageName: node
linkType: hard
-"@eslint/core@npm:^0.10.0":
- version: 0.10.0
- resolution: "@eslint/core@npm:0.10.0"
+"@eslint/config-helpers@npm:^0.2.1":
+ version: 0.2.2
+ resolution: "@eslint/config-helpers@npm:0.2.2"
+ checksum: 10/55dbb0b8d63c4cb28fa2a5fd5f16c785f6bd87eb0f50d2f42ec3f7d06b5c6201e2e170846a4360ca00105578b034fba132ed54e4ee3215be240c4a43e7839189
+ languageName: node
+ linkType: hard
+
+"@eslint/core@npm:^0.14.0":
+ version: 0.14.0
+ resolution: "@eslint/core@npm:0.14.0"
dependencies:
"@types/json-schema": "npm:^7.0.15"
- checksum: 10/de41d7fa5dc468b70fb15c72829096939fc0217c41b8519af4620bc1089cb42539a15325c4c3ee3832facac1836c8c944c4a0c4d0cc8b33ffd8e95962278ae14
+ checksum: 10/d9b060cf97468150675ddf4fb3db55edaa32467e0adf9f80919a5bfd15d0835ad7765456f4397ec2d16b0a1bb702af63f6d4712f94194d34fea118231ae1e2db
languageName: node
linkType: hard
-"@eslint/eslintrc@npm:^3.2.0":
- version: 3.2.0
- resolution: "@eslint/eslintrc@npm:3.2.0"
+"@eslint/eslintrc@npm:^3.3.1":
+ version: 3.3.1
+ resolution: "@eslint/eslintrc@npm:3.3.1"
dependencies:
ajv: "npm:^6.12.4"
debug: "npm:^4.3.2"
@@ -2291,31 +2305,31 @@ __metadata:
js-yaml: "npm:^4.1.0"
minimatch: "npm:^3.1.2"
strip-json-comments: "npm:^3.1.1"
- checksum: 10/b32dd90ce7da68e89b88cd729db46b27aac79a2e6cb1fa75d25a6b766d586b443bfbf59622489efbd3c6f696f147b51111e81ec7cd23d70f215c5d474cad0261
+ checksum: 10/cc240addbab3c5fceaa65b2c8d5d4fd77ddbbf472c2f74f0270b9d33263dc9116840b6099c46b64c9680301146250439b044ed79278a1bcc557da412a4e3c1bb
languageName: node
linkType: hard
-"@eslint/js@npm:9.19.0":
- version: 9.19.0
- resolution: "@eslint/js@npm:9.19.0"
- checksum: 10/d8133a83330676d5f0827713af2e9bbf35530631a93520fb59ead6b827a325c54fdd7ad99f2158f895fb393c47bbc55dfdaa945998a647f3b9230f1d5324a626
+"@eslint/js@npm:9.28.0":
+ version: 9.28.0
+ resolution: "@eslint/js@npm:9.28.0"
+ checksum: 10/c2ab0416aef01f28f189525c9a86253f531852a1ed45db94a97f01bcc51d15720f38a8c201af7a7331eb1e80c991a7ef54c4be193b17540e48044672dba69bd8
languageName: node
linkType: hard
-"@eslint/object-schema@npm:^2.1.5":
- version: 2.1.5
- resolution: "@eslint/object-schema@npm:2.1.5"
- checksum: 10/bb07ec53357047f20de923bcd61f0306d9eee83ef41daa32e633e154a44796b5bd94670169eccb8fd8cb4ff42228a43b86953a6321f789f98194baba8207b640
+"@eslint/object-schema@npm:^2.1.6":
+ version: 2.1.6
+ resolution: "@eslint/object-schema@npm:2.1.6"
+ checksum: 10/266085c8d3fa6cd99457fb6350dffb8ee39db9c6baf28dc2b86576657373c92a568aec4bae7d142978e798b74c271696672e103202d47a0c148da39154351ed6
languageName: node
linkType: hard
-"@eslint/plugin-kit@npm:^0.2.5":
- version: 0.2.5
- resolution: "@eslint/plugin-kit@npm:0.2.5"
+"@eslint/plugin-kit@npm:^0.3.1":
+ version: 0.3.1
+ resolution: "@eslint/plugin-kit@npm:0.3.1"
dependencies:
- "@eslint/core": "npm:^0.10.0"
+ "@eslint/core": "npm:^0.14.0"
levn: "npm:^0.4.1"
- checksum: 10/82d0142bc7054587bde4f75c2c517f477df7c320e4bdb47a4d5f766899a313ce65e9ce5d59428178d0be473a95292065053f69637042546b811ad89079781cbc
+ checksum: 10/ab0c4cecadc6c38c7ae5f71b9831d3521d08237444d8f327751d1133a4369ccd42093a1c06b26fd6c311015807a27d95a0184a761d1cdd264b090896dcf0addb
languageName: node
linkType: hard
@@ -3175,7 +3189,7 @@ __metadata:
dependencies:
"@typescript-eslint/types": "npm:^8.9.0"
"@typescript-eslint/utils": "npm:^8.9.0"
- eslint: "npm:9.19.0"
+ eslint: "npm:9.28.0"
tslib: "npm:2.8.1"
languageName: unknown
linkType: soft
@@ -3391,7 +3405,7 @@ __metadata:
"@types/eslint": "npm:9.6.1"
"@types/webpack-bundle-analyzer": "npm:^4.7.0"
copy-webpack-plugin: "npm:12.0.2"
- eslint: "npm:9.19.0"
+ eslint: "npm:9.28.0"
eslint-webpack-plugin: "npm:4.2.0"
fork-ts-checker-webpack-plugin: "npm:9.0.2"
glob: "npm:11.0.3"
@@ -3915,10 +3929,10 @@ __metadata:
languageName: node
linkType: hard
-"@humanwhocodes/retry@npm:^0.4.1":
- version: 0.4.1
- resolution: "@humanwhocodes/retry@npm:0.4.1"
- checksum: 10/39fafc7319e88f61befebd5e1b4f0136534ea6a9bd10d74366698187bd63544210ec5d79a87ed4d91297f1cc64c4c53d45fb0077a2abfdce212cf0d3862d5f04
+"@humanwhocodes/retry@npm:^0.4.2":
+ version: 0.4.3
+ resolution: "@humanwhocodes/retry@npm:0.4.3"
+ checksum: 10/0b32cfd362bea7a30fbf80bb38dcaf77fee9c2cae477ee80b460871d03590110ac9c77d654f04ec5beaf71b6f6a89851bdf6c1e34ccdf2f686bd86fcd97d9e61
languageName: node
linkType: hard
@@ -9409,7 +9423,18 @@ __metadata:
languageName: node
linkType: hard
-"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.21, @types/express-serve-static-core@npm:^4.17.33":
+"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.33":
+ version: 4.17.33
+ resolution: "@types/express-serve-static-core@npm:4.17.33"
+ dependencies:
+ "@types/node": "npm:*"
+ "@types/qs": "npm:*"
+ "@types/range-parser": "npm:*"
+ checksum: 10/47ee1b46be710ae6451a2e658e2eab75f4affe874b0d156a31e792db0ddb35184ac7b35be926eb23424cc45f6e0d3dbacc86ac5d63a3c988d8235aedb1143841
+ languageName: node
+ linkType: hard
+
+"@types/express-serve-static-core@npm:^4.17.21":
version: 4.19.6
resolution: "@types/express-serve-static-core@npm:4.19.6"
dependencies:
@@ -9723,7 +9748,14 @@ __metadata:
languageName: node
linkType: hard
-"@types/lodash@npm:*, @types/lodash@npm:4.17.20, @types/lodash@npm:^4, @types/lodash@npm:^4.14.172":
+"@types/lodash@npm:*, @types/lodash@npm:^4, @types/lodash@npm:^4.14.172":
+ version: 4.17.16
+ resolution: "@types/lodash@npm:4.17.16"
+ checksum: 10/9a8bb7471a7521bd65d528e1bd14f79819a3eeb6f8a35a8a44649a7d773775c0813e93fd93bd32ccf350bb076c0bf02c6d47877c4625f526f6dd4d283c746aec
+ languageName: node
+ linkType: hard
+
+"@types/lodash@npm:4.17.20":
version: 4.17.20
resolution: "@types/lodash@npm:4.17.20"
checksum: 10/8cd8ad3bd78d2e06a93ae8d6c9907981d5673655fec7cb274a4d9a59549aab5bb5b3017361280773b8990ddfccf363e14d1b37c97af8a9fe363de677f9a61524
@@ -16347,7 +16379,7 @@ __metadata:
languageName: node
linkType: hard
-"eslint-scope@npm:^8.1.0, eslint-scope@npm:^8.2.0":
+"eslint-scope@npm:^8.1.0":
version: 8.2.0
resolution: "eslint-scope@npm:8.2.0"
dependencies:
@@ -16357,6 +16389,16 @@ __metadata:
languageName: node
linkType: hard
+"eslint-scope@npm:^8.3.0":
+ version: 8.3.0
+ resolution: "eslint-scope@npm:8.3.0"
+ dependencies:
+ esrecurse: "npm:^4.3.0"
+ estraverse: "npm:^5.2.0"
+ checksum: 10/ee1ff009e949423639a8b53453c0cb189967d9142c5d94dc3752bed9880140a0760007148ac6b0bd03557d70ede9cd7c3b1e66f9a7f3427b2dbeca2a5be22c91
+ languageName: node
+ linkType: hard
+
"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.3":
version: 3.4.3
resolution: "eslint-visitor-keys@npm:3.4.3"
@@ -16387,20 +16429,21 @@ __metadata:
languageName: node
linkType: hard
-"eslint@npm:9.19.0":
- version: 9.19.0
- resolution: "eslint@npm:9.19.0"
+"eslint@npm:9.28.0":
+ version: 9.28.0
+ resolution: "eslint@npm:9.28.0"
dependencies:
"@eslint-community/eslint-utils": "npm:^4.2.0"
"@eslint-community/regexpp": "npm:^4.12.1"
- "@eslint/config-array": "npm:^0.19.0"
- "@eslint/core": "npm:^0.10.0"
- "@eslint/eslintrc": "npm:^3.2.0"
- "@eslint/js": "npm:9.19.0"
- "@eslint/plugin-kit": "npm:^0.2.5"
+ "@eslint/config-array": "npm:^0.20.0"
+ "@eslint/config-helpers": "npm:^0.2.1"
+ "@eslint/core": "npm:^0.14.0"
+ "@eslint/eslintrc": "npm:^3.3.1"
+ "@eslint/js": "npm:9.28.0"
+ "@eslint/plugin-kit": "npm:^0.3.1"
"@humanfs/node": "npm:^0.16.6"
"@humanwhocodes/module-importer": "npm:^1.0.1"
- "@humanwhocodes/retry": "npm:^0.4.1"
+ "@humanwhocodes/retry": "npm:^0.4.2"
"@types/estree": "npm:^1.0.6"
"@types/json-schema": "npm:^7.0.15"
ajv: "npm:^6.12.4"
@@ -16408,7 +16451,7 @@ __metadata:
cross-spawn: "npm:^7.0.6"
debug: "npm:^4.3.2"
escape-string-regexp: "npm:^4.0.0"
- eslint-scope: "npm:^8.2.0"
+ eslint-scope: "npm:^8.3.0"
eslint-visitor-keys: "npm:^4.2.0"
espree: "npm:^10.3.0"
esquery: "npm:^1.5.0"
@@ -16432,7 +16475,7 @@ __metadata:
optional: true
bin:
eslint: bin/eslint.js
- checksum: 10/850d19fd6a34702d1e3d9bdad6aef84a20a5c2de006a8fa6380843384b13944b180232ddd74b8725ffcdf8f296399037f0e8eb4783d5f7393f13c059112b843d
+ checksum: 10/0cce6dd3a53724d849253992477fd9b05bf6de3dd6bb761605e07beb14f63b6d2eb38f83aeb4a026ff2e3eeb687ac84c1d4a23a9f3186bc15564f5e75fed908c
languageName: node
linkType: hard
@@ -18372,7 +18415,7 @@ __metadata:
esbuild: "npm:0.25.6"
esbuild-loader: "npm:4.3.0"
esbuild-plugin-browserslist: "npm:^1.0.0"
- eslint: "npm:9.19.0"
+ eslint: "npm:9.28.0"
eslint-config-prettier: "npm:9.1.0"
eslint-plugin-import: "npm:^2.31.0"
eslint-plugin-jest: "npm:28.11.0"
@@ -19327,16 +19370,16 @@ __metadata:
linkType: hard
"i18next@npm:^23.5.1 || ^24.2.0":
- version: 24.2.3
- resolution: "i18next@npm:24.2.3"
+ version: 24.2.2
+ resolution: "i18next@npm:24.2.2"
dependencies:
- "@babel/runtime": "npm:^7.26.10"
+ "@babel/runtime": "npm:^7.23.2"
peerDependencies:
typescript: ^5
peerDependenciesMeta:
typescript:
optional: true
- checksum: 10/6c73d964f2a98b1aa2c2717fe6da66fc265bcbbc5fcd52b2bfff51ff013d30d4f7d7449c4eb7f464d27af43e2e73f2e7f1d46a144d731bd3bdb1385d4c199e4c
+ checksum: 10/f66ed9e56d9412e59502f5df39163631daf9f1264774732fb21edbd66a528ca7a6b67dc2e2aec95683c6c7956e42c651587a54bd8ee082bd12008880ce6cd326
languageName: node
linkType: hard
@@ -19420,13 +19463,20 @@ __metadata:
languageName: node
linkType: hard
-"ignore@npm:^7.0.0, ignore@npm:^7.0.3":
+"ignore@npm:^7.0.0":
version: 7.0.5
resolution: "ignore@npm:7.0.5"
checksum: 10/f134b96a4de0af419196f52c529d5c6120c4456ff8a6b5a14ceaaa399f883e15d58d2ce651c9b69b9388491d4669dda47285d307e827de9304a53a1824801bc6
languageName: node
linkType: hard
+"ignore@npm:^7.0.3":
+ version: 7.0.3
+ resolution: "ignore@npm:7.0.3"
+ checksum: 10/ce5e812af3acd6607a3fe0a9f9b5f01d53f009a5ace8cbf5b6491d05a481b55d65186e6a7eaa13126e93f15276bcf3d1e8d6ff3ce5549c312f9bb313fff33365
+ languageName: node
+ linkType: hard
+
"image-q@npm:^4.0.0":
version: 4.0.0
resolution: "image-q@npm:4.0.0"
@@ -23494,7 +23544,7 @@ __metadata:
languageName: node
linkType: hard
-"node-addon-api@npm:^8.0.0, node-addon-api@npm:^8.2.2, node-addon-api@npm:^8.3.0, node-addon-api@npm:^8.3.1":
+"node-addon-api@npm:^8.0.0, node-addon-api@npm:^8.3.1":
version: 8.4.0
resolution: "node-addon-api@npm:8.4.0"
dependencies:
@@ -23503,6 +23553,15 @@ __metadata:
languageName: node
linkType: hard
+"node-addon-api@npm:^8.2.2, node-addon-api@npm:^8.3.0":
+ version: 8.3.0
+ resolution: "node-addon-api@npm:8.3.0"
+ dependencies:
+ node-gyp: "npm:latest"
+ checksum: 10/b1c2218e794c149011d8f14e5f14b2ffd5f260c08b2982d4163a0f881069dc390458de7703602b9940a1130c1ad87c3f9d35cd7bb116e2f2a134ac0a0c0036ca
+ languageName: node
+ linkType: hard
+
"node-domexception@npm:^1.0.0":
version: 1.0.0
resolution: "node-domexception@npm:1.0.0"
@@ -31385,7 +31444,7 @@ __metadata:
languageName: node
linkType: hard
-"typescript@npm:5.8.3, typescript@npm:>=2.7, typescript@npm:>=3 < 6, typescript@npm:^5.0.4, typescript@npm:^5.4.5, typescript@npm:^5.5.4":
+"typescript@npm:5.8.3":
version: 5.8.3
resolution: "typescript@npm:5.8.3"
bin:
@@ -31395,6 +31454,16 @@ __metadata:
languageName: node
linkType: hard
+"typescript@npm:>=2.7, typescript@npm:>=3 < 6, typescript@npm:^5.0.4, typescript@npm:^5.4.5, typescript@npm:^5.5.4":
+ version: 5.8.2
+ resolution: "typescript@npm:5.8.2"
+ bin:
+ tsc: bin/tsc
+ tsserver: bin/tsserver
+ checksum: 10/dbc2168a55d56771f4d581997be52bab5cbc09734fec976cfbaabd787e61fb4c6cf9125fd48c6f98054ce549c77ecedefc7f64252a830dd8e9c3381f61fbeb78
+ languageName: node
+ linkType: hard
+
"typescript@patch:typescript@npm%3A5.5.4#optional!builtin":
version: 5.5.4
resolution: "typescript@patch:typescript@npm%3A5.5.4#optional!builtin::version=5.5.4&hash=379a07"
@@ -31425,7 +31494,7 @@ __metadata:
languageName: node
linkType: hard
-"typescript@patch:typescript@npm%3A5.8.3#optional!builtin, typescript@patch:typescript@npm%3A>=2.7#optional!builtin, typescript@patch:typescript@npm%3A>=3 < 6#optional!builtin, typescript@patch:typescript@npm%3A^5.0.4#optional!builtin, typescript@patch:typescript@npm%3A^5.4.5#optional!builtin, typescript@patch:typescript@npm%3A^5.5.4#optional!builtin":
+"typescript@patch:typescript@npm%3A5.8.3#optional!builtin":
version: 5.8.3
resolution: "typescript@patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5"
bin:
@@ -31435,6 +31504,16 @@ __metadata:
languageName: node
linkType: hard
+"typescript@patch:typescript@npm%3A>=2.7#optional!builtin, typescript@patch:typescript@npm%3A>=3 < 6#optional!builtin, typescript@patch:typescript@npm%3A^5.0.4#optional!builtin, typescript@patch:typescript@npm%3A^5.4.5#optional!builtin, typescript@patch:typescript@npm%3A^5.5.4#optional!builtin":
+ version: 5.8.2
+ resolution: "typescript@patch:typescript@npm%3A5.8.2#optional!builtin::version=5.8.2&hash=5786d5"
+ bin:
+ tsc: bin/tsc
+ tsserver: bin/tsserver
+ checksum: 10/97920a082ffc57583b1cb6bc4faa502acc156358e03f54c7fc7fdf0b61c439a717f4c9070c449ee9ee683d4cfc3bb203127c2b9794b2950f66d9d307a4ff262c
+ languageName: node
+ linkType: hard
+
"ua-parser-js@npm:^1.0.32":
version: 1.0.33
resolution: "ua-parser-js@npm:1.0.33"
From 5cf48294f749368b1c093657b102f81b226ebe47 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20Jim=C3=A9nez=20S=C3=A1nchez?=
Date: Fri, 18 Jul 2025 10:23:55 +0200
Subject: [PATCH 03/46] Provisioning: fix authorized github client
initialization (#108290)
* Add logging
* Fix the condition for the github token
* Revert "Add logging"
This reverts commit 71cbc675f6d258ef69adbe21b12b68786ecbdeff.
* Fix condition
---
pkg/registry/apis/provisioning/repository/github/factory.go | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/pkg/registry/apis/provisioning/repository/github/factory.go b/pkg/registry/apis/provisioning/repository/github/factory.go
index da2d50a6131..6f2435ee8d0 100644
--- a/pkg/registry/apis/provisioning/repository/github/factory.go
+++ b/pkg/registry/apis/provisioning/repository/github/factory.go
@@ -12,6 +12,7 @@ import (
// It exists only for the ability to test the code easily.
type Factory struct {
// Client allows overriding the client to use in the GH client returned. It exists primarily for testing.
+ // FIXME: we should replace in this way. We should add some options pattern for the factory.
Client *http.Client
}
@@ -28,7 +29,7 @@ func (r *Factory) New(ctx context.Context, ghToken string) Client {
&oauth2.Token{AccessToken: ghToken},
)
- if len(ghToken) == 0 {
+ if len(ghToken) > 0 {
tokenClient := oauth2.NewClient(ctx, tokenSrc)
return NewClient(github.NewClient(tokenClient))
}
From 43280a6dabc24cb8d9c68911afa34a9db9a7770f Mon Sep 17 00:00:00 2001
From: Ashley Harrison
Date: Fri, 18 Jul 2025 09:40:57 +0100
Subject: [PATCH 04/46] Internationalisation: More markup following manual
review (#108232)
* mark up NestedFolderPiker root item
* mark up fieldsbyframerefid
* mark up time picker options
* mark up field types
---
.../RelativeTimeRangePicker.tsx | 5 +-
.../DateTimePickers/TimeRangeInput.tsx | 4 +-
.../DateTimePickers/TimeRangePicker.tsx | 4 +-
.../TimeRangePicker/TimePickerFooter.tsx | 4 +-
.../src/components/DateTimePickers/options.ts | 177 +++++++++++++-----
.../MatchersUI/FieldTypeMatcherEditor.tsx | 48 ++++-
.../MatchersUI/FieldsByFrameRefIdMatcher.tsx | 20 +-
packages/grafana-ui/src/internal/index.ts | 2 +-
.../NestedFolderPicker/NestedFolderPicker.tsx | 6 +-
.../useFoldersQuery.test.tsx | 4 +-
.../useFoldersQueryAppPlatform.ts | 4 +-
.../useFoldersQueryLegacy.ts | 4 +-
.../components/NestedFolderPicker/utils.ts | 8 +-
.../ConvertFieldTypeTransformerEditor.tsx | 4 +-
public/locales/en-US/grafana.json | 69 +++++++
15 files changed, 273 insertions(+), 90 deletions(-)
diff --git a/packages/grafana-ui/src/components/DateTimePickers/RelativeTimeRangePicker/RelativeTimeRangePicker.tsx b/packages/grafana-ui/src/components/DateTimePickers/RelativeTimeRangePicker/RelativeTimeRangePicker.tsx
index 7e49593d860..f75c4f1f2c8 100644
--- a/packages/grafana-ui/src/components/DateTimePickers/RelativeTimeRangePicker/RelativeTimeRangePicker.tsx
+++ b/packages/grafana-ui/src/components/DateTimePickers/RelativeTimeRangePicker/RelativeTimeRangePicker.tsx
@@ -16,7 +16,7 @@ import { getInputStyles, Input } from '../../Input/Input';
import { ScrollContainer } from '../../ScrollContainer/ScrollContainer';
import { TimePickerTitle } from '../TimeRangePicker/TimePickerTitle';
import { TimeRangeList } from '../TimeRangePicker/TimeRangeList';
-import { quickOptions } from '../options';
+import { getQuickOptions } from '../options';
import {
isRangeValid,
@@ -39,8 +39,6 @@ type InputState = {
validation: RangeValidation;
};
-const validOptions = quickOptions.filter((o) => isRelativeFormat(o.from));
-
/**
* @internal
*/
@@ -57,6 +55,7 @@ export function RelativeTimeRangePicker(props: RelativeTimeRangePickerProps) {
ref
);
const { dialogProps } = useDialog({}, ref);
+ const validOptions = getQuickOptions().filter((o) => isRelativeFormat(o.from));
// the order of middleware is important!
// see https://floating-ui.com/docs/arrow#order
diff --git a/packages/grafana-ui/src/components/DateTimePickers/TimeRangeInput.tsx b/packages/grafana-ui/src/components/DateTimePickers/TimeRangeInput.tsx
index 7ef005c42c6..67d3af9496a 100644
--- a/packages/grafana-ui/src/components/DateTimePickers/TimeRangeInput.tsx
+++ b/packages/grafana-ui/src/components/DateTimePickers/TimeRangeInput.tsx
@@ -13,7 +13,7 @@ import { getInputStyles } from '../Input/Input';
import { TimePickerContent } from './TimeRangePicker/TimePickerContent';
import { TimeRangeLabel } from './TimeRangePicker/TimeRangeLabel';
import { WeekStart } from './WeekStartPicker';
-import { quickOptions } from './options';
+import { getQuickOptions } from './options';
import { isValidTimeRange } from './utils';
export interface TimeRangeInputProps {
@@ -123,7 +123,7 @@ export const TimeRangeInput = ({
timeZone={timeZone}
value={isValidTimeRange(value) ? value : getDefaultTimeRange()}
onChange={onRangeChange}
- quickOptions={quickOptions}
+ quickOptions={getQuickOptions()}
onChangeTimeZone={onChangeTimeZone}
className={styles.content}
hideTimeZone={hideTimeZone}
diff --git a/packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker.tsx b/packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker.tsx
index 3888b76f6c4..926fcce5615 100644
--- a/packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker.tsx
+++ b/packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker.tsx
@@ -28,7 +28,7 @@ import { Tooltip } from '../Tooltip/Tooltip';
import { TimePickerContent } from './TimeRangePicker/TimePickerContent';
import { TimeZoneDescription } from './TimeZonePicker/TimeZoneDescription';
import { WeekStart } from './WeekStartPicker';
-import { quickOptions } from './options';
+import { getQuickOptions } from './options';
import { useTimeSync } from './utils/useTimeSync';
/** @public */
@@ -189,7 +189,7 @@ export function TimeRangePicker(props: TimeRangePickerProps) {
fiscalYearStartMonth={fiscalYearStartMonth}
value={value}
onChange={onChange}
- quickOptions={quickRanges || quickOptions}
+ quickOptions={quickRanges || getQuickOptions()}
history={history}
showHistory
widthOverride={widthOverride}
diff --git a/packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/TimePickerFooter.tsx b/packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/TimePickerFooter.tsx
index 69fe98c09d5..c59806cea13 100644
--- a/packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/TimePickerFooter.tsx
+++ b/packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/TimePickerFooter.tsx
@@ -18,7 +18,7 @@ import { TimeZonePicker } from '../TimeZonePicker';
import { TimeZoneDescription } from '../TimeZonePicker/TimeZoneDescription';
import { TimeZoneOffset } from '../TimeZonePicker/TimeZoneOffset';
import { TimeZoneTitle } from '../TimeZonePicker/TimeZoneTitle';
-import { monthOptions } from '../options';
+import { getMonthOptions } from '../options';
interface Props {
timeZone?: TimeZone;
@@ -146,7 +146,7 @@ export const TimePickerFooter = (props: Props) => {
>
{
if (onChangeFiscalYearStartMonth) {
onChangeFiscalYearStartMonth(value?.value ?? 0);
diff --git a/packages/grafana-ui/src/components/DateTimePickers/options.ts b/packages/grafana-ui/src/components/DateTimePickers/options.ts
index 8f64046cf41..5ef8ef5ab5a 100644
--- a/packages/grafana-ui/src/components/DateTimePickers/options.ts
+++ b/packages/grafana-ui/src/components/DateTimePickers/options.ts
@@ -1,57 +1,134 @@
import { TimeOption } from '@grafana/data';
+import { t } from '@grafana/i18n';
import { ComboboxOption } from '../Combobox/types';
-export const quickOptions: TimeOption[] = [
- { from: 'now-5m', to: 'now', display: 'Last 5 minutes' },
- { from: 'now-15m', to: 'now', display: 'Last 15 minutes' },
- { from: 'now-30m', to: 'now', display: 'Last 30 minutes' },
- { from: 'now-1h', to: 'now', display: 'Last 1 hour' },
- { from: 'now-3h', to: 'now', display: 'Last 3 hours' },
- { from: 'now-6h', to: 'now', display: 'Last 6 hours' },
- { from: 'now-12h', to: 'now', display: 'Last 12 hours' },
- { from: 'now-24h', to: 'now', display: 'Last 24 hours' },
- { from: 'now-2d', to: 'now', display: 'Last 2 days' },
- { from: 'now-7d', to: 'now', display: 'Last 7 days' },
- { from: 'now-30d', to: 'now', display: 'Last 30 days' },
- { from: 'now-90d', to: 'now', display: 'Last 90 days' },
- { from: 'now-6M', to: 'now', display: 'Last 6 months' },
- { from: 'now-1y', to: 'now', display: 'Last 1 year' },
- { from: 'now-2y', to: 'now', display: 'Last 2 years' },
- { from: 'now-5y', to: 'now', display: 'Last 5 years' },
- { from: 'now-1d/d', to: 'now-1d/d', display: 'Yesterday' },
- { from: 'now-2d/d', to: 'now-2d/d', display: 'Day before yesterday' },
- { from: 'now-7d/d', to: 'now-7d/d', display: 'This day last week' },
- { from: 'now-1w/w', to: 'now-1w/w', display: 'Previous week' },
- { from: 'now-1M/M', to: 'now-1M/M', display: 'Previous month' },
- { from: 'now-1Q/fQ', to: 'now-1Q/fQ', display: 'Previous fiscal quarter' },
- { from: 'now-1y/y', to: 'now-1y/y', display: 'Previous year' },
- { from: 'now-1y/fy', to: 'now-1y/fy', display: 'Previous fiscal year' },
- { from: 'now/d', to: 'now/d', display: 'Today' },
- { from: 'now/d', to: 'now', display: 'Today so far' },
- { from: 'now/w', to: 'now/w', display: 'This week' },
- { from: 'now/w', to: 'now', display: 'This week so far' },
- { from: 'now/M', to: 'now/M', display: 'This month' },
- { from: 'now/M', to: 'now', display: 'This month so far' },
- { from: 'now/y', to: 'now/y', display: 'This year' },
- { from: 'now/y', to: 'now', display: 'This year so far' },
- { from: 'now/fQ', to: 'now', display: 'This fiscal quarter so far' },
- { from: 'now/fQ', to: 'now/fQ', display: 'This fiscal quarter' },
- { from: 'now/fy', to: 'now', display: 'This fiscal year so far' },
- { from: 'now/fy', to: 'now/fy', display: 'This fiscal year' },
+export const getQuickOptions: () => TimeOption[] = () => [
+ { from: 'now-5m', to: 'now', display: t('grafana-ui.date-time-pickers.quick-options.last-5-mins', 'Last 5 minutes') },
+ {
+ from: 'now-15m',
+ to: 'now',
+ display: t('grafana-ui.date-time-pickers.quick-options.last-15-mins', 'Last 15 minutes'),
+ },
+ {
+ from: 'now-30m',
+ to: 'now',
+ display: t('grafana-ui.date-time-pickers.quick-options.last-30-mins', 'Last 30 minutes'),
+ },
+ { from: 'now-1h', to: 'now', display: t('grafana-ui.date-time-pickers.quick-options.last-1-hour', 'Last 1 hour') },
+ { from: 'now-3h', to: 'now', display: t('grafana-ui.date-time-pickers.quick-options.last-3-hours', 'Last 3 hours') },
+ { from: 'now-6h', to: 'now', display: t('grafana-ui.date-time-pickers.quick-options.last-6-hours', 'Last 6 hours') },
+ {
+ from: 'now-12h',
+ to: 'now',
+ display: t('grafana-ui.date-time-pickers.quick-options.last-12-hours', 'Last 12 hours'),
+ },
+ {
+ from: 'now-24h',
+ to: 'now',
+ display: t('grafana-ui.date-time-pickers.quick-options.last-24-hours', 'Last 24 hours'),
+ },
+ { from: 'now-2d', to: 'now', display: t('grafana-ui.date-time-pickers.quick-options.last-2-days', 'Last 2 days') },
+ { from: 'now-7d', to: 'now', display: t('grafana-ui.date-time-pickers.quick-options.last-7-days', 'Last 7 days') },
+ { from: 'now-30d', to: 'now', display: t('grafana-ui.date-time-pickers.quick-options.last-30-days', 'Last 30 days') },
+ { from: 'now-90d', to: 'now', display: t('grafana-ui.date-time-pickers.quick-options.last-90-days', 'Last 90 days') },
+ {
+ from: 'now-6M',
+ to: 'now',
+ display: t('grafana-ui.date-time-pickers.quick-options.last-6-months', 'Last 6 months'),
+ },
+ { from: 'now-1y', to: 'now', display: t('grafana-ui.date-time-pickers.quick-options.last-1-year', 'Last 1 year') },
+ { from: 'now-2y', to: 'now', display: t('grafana-ui.date-time-pickers.quick-options.last-2-years', 'Last 2 years') },
+ { from: 'now-5y', to: 'now', display: t('grafana-ui.date-time-pickers.quick-options.last-5-years', 'Last 5 years') },
+ { from: 'now-1d/d', to: 'now-1d/d', display: t('grafana-ui.date-time-pickers.quick-options.yesterday', 'Yesterday') },
+ {
+ from: 'now-2d/d',
+ to: 'now-2d/d',
+ display: t('grafana-ui.date-time-pickers.quick-options.day-before-yesterday', 'Day before yesterday'),
+ },
+ {
+ from: 'now-7d/d',
+ to: 'now-7d/d',
+ display: t('grafana-ui.date-time-pickers.quick-options.this-day-last-week', 'This day last week'),
+ },
+ {
+ from: 'now-1w/w',
+ to: 'now-1w/w',
+ display: t('grafana-ui.date-time-pickers.quick-options.previous-week', 'Previous week'),
+ },
+ {
+ from: 'now-1M/M',
+ to: 'now-1M/M',
+ display: t('grafana-ui.date-time-pickers.quick-options.previous-month', 'Previous month'),
+ },
+ {
+ from: 'now-1Q/fQ',
+ to: 'now-1Q/fQ',
+ display: t('grafana-ui.date-time-pickers.quick-options.previous-fiscal-quarter', 'Previous fiscal quarter'),
+ },
+ {
+ from: 'now-1y/y',
+ to: 'now-1y/y',
+ display: t('grafana-ui.date-time-pickers.quick-options.previous-year', 'Previous year'),
+ },
+ {
+ from: 'now-1y/fy',
+ to: 'now-1y/fy',
+ display: t('grafana-ui.date-time-pickers.quick-options.previous-fiscal-year', 'Previous fiscal year'),
+ },
+ { from: 'now/d', to: 'now/d', display: t('grafana-ui.date-time-pickers.quick-options.today', 'Today') },
+ { from: 'now/d', to: 'now', display: t('grafana-ui.date-time-pickers.quick-options.today-so-far', 'Today so far') },
+ { from: 'now/w', to: 'now/w', display: t('grafana-ui.date-time-pickers.quick-options.this-week', 'This week') },
+ {
+ from: 'now/w',
+ to: 'now',
+ display: t('grafana-ui.date-time-pickers.quick-options.this-week-so-far', 'This week so far'),
+ },
+ { from: 'now/M', to: 'now/M', display: t('grafana-ui.date-time-pickers.quick-options.this-month', 'This month') },
+ {
+ from: 'now/M',
+ to: 'now',
+ display: t('grafana-ui.date-time-pickers.quick-options.this-month-so-far', 'This month so far'),
+ },
+ { from: 'now/y', to: 'now/y', display: t('grafana-ui.date-time-pickers.quick-options.this-year', 'This year') },
+ {
+ from: 'now/y',
+ to: 'now',
+ display: t('grafana-ui.date-time-pickers.quick-options.this-year-so-far', 'This year so far'),
+ },
+ {
+ from: 'now/fQ',
+ to: 'now',
+ display: t('grafana-ui.date-time-pickers.quick-options.this-fiscal-quarter-so-far', 'This fiscal quarter so far'),
+ },
+ {
+ from: 'now/fQ',
+ to: 'now/fQ',
+ display: t('grafana-ui.date-time-pickers.quick-options.this-fiscal-quarter', 'This fiscal quarter'),
+ },
+ {
+ from: 'now/fy',
+ to: 'now',
+ display: t('grafana-ui.date-time-pickers.quick-options.this-fiscal-year-so-far', 'This fiscal year so far'),
+ },
+ {
+ from: 'now/fy',
+ to: 'now/fy',
+ display: t('grafana-ui.date-time-pickers.quick-options.this-fiscal-year', 'This fiscal year'),
+ },
];
-export const monthOptions: Array> = [
- { label: 'January', value: 0 },
- { label: 'February', value: 1 },
- { label: 'March', value: 2 },
- { label: 'April', value: 3 },
- { label: 'May', value: 4 },
- { label: 'June', value: 5 },
- { label: 'July', value: 6 },
- { label: 'August', value: 7 },
- { label: 'September', value: 8 },
- { label: 'October', value: 9 },
- { label: 'November', value: 10 },
- { label: 'December', value: 11 },
+export const getMonthOptions: () => Array> = () => [
+ { label: t('grafana-ui.date-time-pickers.month-options.label-january', 'January'), value: 0 },
+ { label: t('grafana-ui.date-time-pickers.month-options.label-february', 'February'), value: 1 },
+ { label: t('grafana-ui.date-time-pickers.month-options.label-march', 'March'), value: 2 },
+ { label: t('grafana-ui.date-time-pickers.month-options.label-april', 'April'), value: 3 },
+ { label: t('grafana-ui.date-time-pickers.month-options.label-may', 'May'), value: 4 },
+ { label: t('grafana-ui.date-time-pickers.month-options.label-june', 'June'), value: 5 },
+ { label: t('grafana-ui.date-time-pickers.month-options.label-july', 'July'), value: 6 },
+ { label: t('grafana-ui.date-time-pickers.month-options.label-august', 'August'), value: 7 },
+ { label: t('grafana-ui.date-time-pickers.month-options.label-september', 'September'), value: 8 },
+ { label: t('grafana-ui.date-time-pickers.month-options.label-october', 'October'), value: 9 },
+ { label: t('grafana-ui.date-time-pickers.month-options.label-november', 'November'), value: 10 },
+ { label: t('grafana-ui.date-time-pickers.month-options.label-december', 'December'), value: 11 },
];
diff --git a/packages/grafana-ui/src/components/MatchersUI/FieldTypeMatcherEditor.tsx b/packages/grafana-ui/src/components/MatchersUI/FieldTypeMatcherEditor.tsx
index 129765470af..69736d2368d 100644
--- a/packages/grafana-ui/src/components/MatchersUI/FieldTypeMatcherEditor.tsx
+++ b/packages/grafana-ui/src/components/MatchersUI/FieldTypeMatcherEditor.tsx
@@ -27,20 +27,48 @@ FieldTypeMatcherEditor.displayName = 'FieldTypeMatcherEditor';
// Select options for all field types.
// This is not eported to the published package, but used internally
-export const allFieldTypeIconOptions: Array> = [
- { value: FieldType.number, label: 'Number', icon: getFieldTypeIconName(FieldType.number) },
- { value: FieldType.string, label: 'String', icon: getFieldTypeIconName(FieldType.string) },
- { value: FieldType.time, label: 'Time', icon: getFieldTypeIconName(FieldType.time) },
- { value: FieldType.boolean, label: 'Boolean', icon: getFieldTypeIconName(FieldType.boolean) },
- { value: FieldType.trace, label: 'Traces', icon: getFieldTypeIconName(FieldType.trace) },
- { value: FieldType.enum, label: 'Enum', icon: getFieldTypeIconName(FieldType.enum) },
- { value: FieldType.other, label: 'Other', icon: getFieldTypeIconName(FieldType.other) },
+export const getAllFieldTypeIconOptions: () => Array> = () => [
+ {
+ value: FieldType.number,
+ label: t('grafana-ui.matchers-ui.get-all-field-type-icon-options.label-number', 'Number'),
+ icon: getFieldTypeIconName(FieldType.number),
+ },
+ {
+ value: FieldType.string,
+ label: t('grafana-ui.matchers-ui.get-all-field-type-icon-options.label-string', 'String'),
+ icon: getFieldTypeIconName(FieldType.string),
+ },
+ {
+ value: FieldType.time,
+ label: t('grafana-ui.matchers-ui.get-all-field-type-icon-options.label-time', 'Time'),
+ icon: getFieldTypeIconName(FieldType.time),
+ },
+ {
+ value: FieldType.boolean,
+ label: t('grafana-ui.matchers-ui.get-all-field-type-icon-options.label-boolean', 'Boolean'),
+ icon: getFieldTypeIconName(FieldType.boolean),
+ },
+ {
+ value: FieldType.trace,
+ label: t('grafana-ui.matchers-ui.get-all-field-type-icon-options.label-traces', 'Traces'),
+ icon: getFieldTypeIconName(FieldType.trace),
+ },
+ {
+ value: FieldType.enum,
+ label: t('grafana-ui.matchers-ui.get-all-field-type-icon-options.label-enum', 'Enum'),
+ icon: getFieldTypeIconName(FieldType.enum),
+ },
+ {
+ value: FieldType.other,
+ label: t('grafana-ui.matchers-ui.get-all-field-type-icon-options.label-other', 'Other'),
+ icon: getFieldTypeIconName(FieldType.other),
+ },
];
const useFieldCounts = (data: DataFrame[]): Map => {
return useMemo(() => {
const counts: Map = new Map();
- for (const t of allFieldTypeIconOptions) {
+ for (const t of getAllFieldTypeIconOptions()) {
counts.set(t.value!, 0);
}
for (const frame of data) {
@@ -61,7 +89,7 @@ const useSelectOptions = (counts: Map, opt?: string): Array {
let found = false;
const options: Array> = [];
- for (const t of allFieldTypeIconOptions) {
+ for (const t of getAllFieldTypeIconOptions()) {
const count = counts.get(t.value!);
const match = opt === t.value;
if (count || match) {
diff --git a/packages/grafana-ui/src/components/MatchersUI/FieldsByFrameRefIdMatcher.tsx b/packages/grafana-ui/src/components/MatchersUI/FieldsByFrameRefIdMatcher.tsx
index 3a7b7146c43..87175cbb057 100644
--- a/packages/grafana-ui/src/components/MatchersUI/FieldsByFrameRefIdMatcher.tsx
+++ b/packages/grafana-ui/src/components/MatchersUI/FieldsByFrameRefIdMatcher.tsx
@@ -199,7 +199,9 @@ function getListOfQueryRefIds(data: DataFrame[]): Array>
for (const [refId, frames] of queries.entries()) {
values.push({
value: refId,
- label: `Query: ${refId ?? '(missing refId)'}`,
+ label: refId
+ ? t('grafana-ui.matchers-ui.get-list-of-query-ref-ids.label', 'Query: {{refId}}', { refId })
+ : t('grafana-ui.matchers-ui.get-list-of-query-ref-ids.label-missing-ref-id', 'Query: (missing refId)'),
description: getFramesDescription(frames),
});
}
@@ -208,11 +210,17 @@ function getListOfQueryRefIds(data: DataFrame[]): Array>
}
function getFramesDescription(frames: DataFrame[]): string {
- return `Frames (${frames.length}):
- ${frames
- .slice(0, Math.min(3, frames.length))
- .map((x) => getFrameDisplayName(x))
- .join(', ')} ${frames.length > 3 ? '...' : ''}`;
+ return t(
+ 'grafana-ui.matchers-ui.get-list-of-query-ref-ids.description',
+ 'Frames ({{framesCount}}): {{framesNames}}',
+ {
+ framesCount: frames.length,
+ framesNames: `${frames
+ .slice(0, Math.min(3, frames.length))
+ .map((x) => getFrameDisplayName(x))
+ .join(', ')} ${frames.length > 3 ? '...' : ''}`,
+ }
+ );
}
/**
diff --git a/packages/grafana-ui/src/internal/index.ts b/packages/grafana-ui/src/internal/index.ts
index 3cffdd2cf92..54bf72d16b0 100644
--- a/packages/grafana-ui/src/internal/index.ts
+++ b/packages/grafana-ui/src/internal/index.ts
@@ -45,7 +45,7 @@ export {
} from '../components/MatchersUI/utils';
export type { FieldMatcherUIRegistryItem } from '../components/MatchersUI/types';
export { RefIDMultiPicker, RefIDPicker, stringsToRegexp } from '../components/MatchersUI/FieldsByFrameRefIdMatcher';
-export { allFieldTypeIconOptions } from '../components/MatchersUI/FieldTypeMatcherEditor';
+export { getAllFieldTypeIconOptions } from '../components/MatchersUI/FieldTypeMatcherEditor';
export { getStyles as getSliderStyles } from '../components/Slider/styles';
export { getSelectStyles } from '../components/Select/getSelectStyles';
diff --git a/public/app/core/components/NestedFolderPicker/NestedFolderPicker.tsx b/public/app/core/components/NestedFolderPicker/NestedFolderPicker.tsx
index 38d241c61e2..b1ceef4d2e7 100644
--- a/public/app/core/components/NestedFolderPicker/NestedFolderPicker.tsx
+++ b/public/app/core/components/NestedFolderPicker/NestedFolderPicker.tsx
@@ -22,7 +22,7 @@ import { getDOMId, NestedFolderList } from './NestedFolderList';
import Trigger from './Trigger';
import { useFoldersQuery } from './useFoldersQuery';
import { useTreeInteractions } from './useTreeInteractions';
-import { ROOT_FOLDER_ITEM } from './utils';
+import { getRootFolderItem } from './utils';
export interface NestedFolderPickerProps {
/* Folder UID to show as selected */
@@ -222,7 +222,7 @@ export function NestedFolderPicker({
// these options are used infrequently that its not a big deal
if (!showRootFolder || excludeUIDs?.length) {
flatTree = flatTree.filter((item) => {
- if (!showRootFolder && item === ROOT_FOLDER_ITEM) {
+ if (!showRootFolder && item.item.uid === getRootFolderItem().item.uid) {
return false;
}
@@ -266,7 +266,7 @@ export function NestedFolderPicker({
let label = selectedFolder.data?.title;
if (value === '') {
- label = 'Dashboards';
+ label = t('browse-dashboards.folder-picker.root-title', 'Dashboards');
}
// Display the folder name and provisioning status when the picker is closed
diff --git a/public/app/core/components/NestedFolderPicker/useFoldersQuery.test.tsx b/public/app/core/components/NestedFolderPicker/useFoldersQuery.test.tsx
index d715d57c81d..18d83068b5e 100644
--- a/public/app/core/components/NestedFolderPicker/useFoldersQuery.test.tsx
+++ b/public/app/core/components/NestedFolderPicker/useFoldersQuery.test.tsx
@@ -7,7 +7,7 @@ import { DashboardsTreeItem } from 'app/features/browse-dashboards/types';
import { DashboardViewItem } from '../../../features/search/types';
import { useFoldersQuery } from './useFoldersQuery';
-import { ROOT_FOLDER_ITEM } from './utils';
+import { getRootFolderItem } from './utils';
const PAGE_SIZE = 10;
@@ -105,7 +105,7 @@ describe('useFoldersQuery', () => {
function testFn() {
const { result } = renderHook(() => useFoldersQuery(true, {}));
- expect(result.current.items).toEqual([ROOT_FOLDER_ITEM]);
+ expect(result.current.items).toEqual([getRootFolderItem()]);
expect(result.current.isLoading).toBe(false);
act(() => {
result.current.requestNextPage(undefined);
diff --git a/public/app/core/components/NestedFolderPicker/useFoldersQueryAppPlatform.ts b/public/app/core/components/NestedFolderPicker/useFoldersQueryAppPlatform.ts
index 93817d6a9c8..4828417c10c 100644
--- a/public/app/core/components/NestedFolderPicker/useFoldersQueryAppPlatform.ts
+++ b/public/app/core/components/NestedFolderPicker/useFoldersQueryAppPlatform.ts
@@ -10,7 +10,7 @@ import { AnnoKeyManagerKind, ManagerKind } from '../../../features/apiserver/typ
import { PAGE_SIZE } from '../../../features/browse-dashboards/api/services';
import { getPaginationPlaceholders } from '../../../features/browse-dashboards/state/utils';
-import { ROOT_FOLDER_ITEM } from './utils';
+import { getRootFolderItem } from './utils';
type GetFolderChildrenQuery = ReturnType>;
type GetFolderChildrenRequest = {
@@ -151,7 +151,7 @@ export function useFoldersQueryAppPlatform(isBrowsing: boolean, openFolders: Rec
}
const rootFlatTree = createFlatList(rootFolderToken, state.responseByParent[rootFolderToken], 1);
- rootFlatTree.unshift(ROOT_FOLDER_ITEM);
+ rootFlatTree.unshift(getRootFolderItem());
return rootFlatTree;
}, [state, isBrowsing, openFolders]);
diff --git a/public/app/core/components/NestedFolderPicker/useFoldersQueryLegacy.ts b/public/app/core/components/NestedFolderPicker/useFoldersQueryLegacy.ts
index 8381c61d1f2..84c540f7f71 100644
--- a/public/app/core/components/NestedFolderPicker/useFoldersQueryLegacy.ts
+++ b/public/app/core/components/NestedFolderPicker/useFoldersQueryLegacy.ts
@@ -11,7 +11,7 @@ import { PermissionLevelString } from 'app/types/acl';
import { FolderListItemDTO } from 'app/types/folders';
import { useDispatch, useSelector } from 'app/types/store';
-import { ROOT_FOLDER_ITEM } from './utils';
+import { getRootFolderItem } from './utils';
type ListFoldersQuery = ReturnType>;
type ListFoldersRequest = QueryActionCreatorResult<
@@ -179,7 +179,7 @@ export function useFoldersQueryLegacy(
}
const rootFlatTree = createFlatList(undefined, state.rootPages, 1);
- rootFlatTree.unshift(ROOT_FOLDER_ITEM);
+ rootFlatTree.unshift(getRootFolderItem());
return rootFlatTree;
}, [state, isBrowsing, openFolders]);
diff --git a/public/app/core/components/NestedFolderPicker/utils.ts b/public/app/core/components/NestedFolderPicker/utils.ts
index 9438485ce1d..1d92fc57f00 100644
--- a/public/app/core/components/NestedFolderPicker/utils.ts
+++ b/public/app/core/components/NestedFolderPicker/utils.ts
@@ -1,9 +1,11 @@
-export const ROOT_FOLDER_ITEM = {
+import { t } from '@grafana/i18n';
+
+export const getRootFolderItem = () => ({
isOpen: true,
level: 0,
item: {
kind: 'folder' as const,
- title: 'Dashboards',
+ title: t('browse-dashboards.folder-picker.root-title', 'Dashboards'),
uid: '',
},
-};
+});
diff --git a/public/app/features/transformers/editors/ConvertFieldTypeTransformerEditor.tsx b/public/app/features/transformers/editors/ConvertFieldTypeTransformerEditor.tsx
index d437144b415..7f0c722188a 100644
--- a/public/app/features/transformers/editors/ConvertFieldTypeTransformerEditor.tsx
+++ b/public/app/features/transformers/editors/ConvertFieldTypeTransformerEditor.tsx
@@ -15,7 +15,7 @@ import {
import { ConvertFieldTypeOptions, ConvertFieldTypeTransformerOptions } from '@grafana/data/internal';
import { t, Trans } from '@grafana/i18n';
import { Button, InlineField, InlineFieldRow, Input, Select } from '@grafana/ui';
-import { allFieldTypeIconOptions, FieldNamePicker } from '@grafana/ui/internal';
+import { getAllFieldTypeIconOptions, FieldNamePicker } from '@grafana/ui/internal';
import { findField } from 'app/features/dimensions/utils';
import { getTransformationContent } from '../docs/getTransformationContent';
@@ -34,7 +34,7 @@ export const ConvertFieldTypeTransformerEditor = ({
options,
onChange,
}: TransformerUIProps) => {
- const allTypes = allFieldTypeIconOptions.filter((v) => v.value !== FieldType.trace);
+ const allTypes = getAllFieldTypeIconOptions().filter((v) => v.value !== FieldType.trace);
const timeZoneOptions: Array> = getTimezoneOptions(true);
// Format timezone options
diff --git a/public/locales/en-US/grafana.json b/public/locales/en-US/grafana.json
index bd097338400..88774ba133c 100644
--- a/public/locales/en-US/grafana.json
+++ b/public/locales/en-US/grafana.json
@@ -3559,6 +3559,7 @@
"empty-message": "No folders found",
"error-title": "Error loading folders",
"non-folder-item": "Non-folder {{itemKind}} {{itemUID}}",
+ "root-title": "Dashboards",
"search-placeholder": "Search folders",
"unknown-error": "Unknown error"
},
@@ -7954,6 +7955,60 @@
"previous-label": "Previous month",
"select-placeholder": "Select date/time"
},
+ "date-time-pickers": {
+ "month-options": {
+ "label-april": "April",
+ "label-august": "August",
+ "label-december": "December",
+ "label-february": "February",
+ "label-january": "January",
+ "label-july": "July",
+ "label-june": "June",
+ "label-march": "March",
+ "label-may": "May",
+ "label-november": "November",
+ "label-october": "October",
+ "label-september": "September"
+ },
+ "quick-options": {
+ "day-before-yesterday": "Day before yesterday",
+ "last-1-hour": "Last 1 hour",
+ "last-1-year": "Last 1 year",
+ "last-12-hours": "Last 12 hours",
+ "last-15-mins": "Last 15 minutes",
+ "last-2-days": "Last 2 days",
+ "last-2-years": "Last 2 years",
+ "last-24-hours": "Last 24 hours",
+ "last-3-hours": "Last 3 hours",
+ "last-30-days": "Last 30 days",
+ "last-30-mins": "Last 30 minutes",
+ "last-5-mins": "Last 5 minutes",
+ "last-5-years": "Last 5 years",
+ "last-6-hours": "Last 6 hours",
+ "last-6-months": "Last 6 months",
+ "last-7-days": "Last 7 days",
+ "last-90-days": "Last 90 days",
+ "previous-fiscal-quarter": "Previous fiscal quarter",
+ "previous-fiscal-year": "Previous fiscal year",
+ "previous-month": "Previous month",
+ "previous-week": "Previous week",
+ "previous-year": "Previous year",
+ "this-day-last-week": "This day last week",
+ "this-fiscal-quarter": "This fiscal quarter",
+ "this-fiscal-quarter-so-far": "This fiscal quarter so far",
+ "this-fiscal-year": "This fiscal year",
+ "this-fiscal-year-so-far": "This fiscal year so far",
+ "this-month": "This month",
+ "this-month-so-far": "This month so far",
+ "this-week": "This week",
+ "this-week-so-far": "This week so far",
+ "this-year": "This year",
+ "this-year-so-far": "This year so far",
+ "today": "Today",
+ "today-so-far": "Today so far",
+ "yesterday": "Yesterday"
+ }
+ },
"drawer": {
"close": "Close"
},
@@ -8001,6 +8056,20 @@
"field-name-picker": {
"placeholder": "Select field"
},
+ "get-all-field-type-icon-options": {
+ "label-boolean": "Boolean",
+ "label-enum": "Enum",
+ "label-number": "Number",
+ "label-other": "Other",
+ "label-string": "String",
+ "label-time": "Time",
+ "label-traces": "Traces"
+ },
+ "get-list-of-query-ref-ids": {
+ "description": "Frames ({{framesCount}}): {{framesNames}}",
+ "label": "Query: {{refId}}",
+ "label-missing-ref-id": "Query: (missing refId)"
+ },
"name-field-name-by-regex-matcher": "Fields with name matching regex",
"name-fields-by-query": "Fields returned by query",
"name-fields-with-name": "Fields with name",
From 960b0e770b65bd5e961d7ef17f20f94087770a7f Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 18 Jul 2025 09:41:47 +0100
Subject: [PATCH 05/46] Update dependency marked to v16.1.0 (#108262)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 2 +-
packages/grafana-data/package.json | 2 +-
yarn.lock | 32 ++++++++----------------------
3 files changed, 10 insertions(+), 26 deletions(-)
diff --git a/package.json b/package.json
index f39310b2de5..63ae5b97a10 100644
--- a/package.json
+++ b/package.json
@@ -361,7 +361,7 @@
"lru-cache": "11.1.0",
"lru-memoize": "^1.1.0",
"lucene": "^2.1.1",
- "marked": "16.0.0",
+ "marked": "16.1.0",
"memoize-one": "6.0.0",
"micro-memoize": "^4.1.2",
"ml-regression-polynomial": "^3.0.0",
diff --git a/packages/grafana-data/package.json b/packages/grafana-data/package.json
index 64a027650c9..99d2da1df60 100644
--- a/packages/grafana-data/package.json
+++ b/packages/grafana-data/package.json
@@ -68,7 +68,7 @@
"fast_array_intersect": "1.1.0",
"history": "4.10.1",
"lodash": "4.17.21",
- "marked": "16.0.0",
+ "marked": "16.1.0",
"marked-mangle": "1.1.11",
"moment": "2.30.1",
"moment-timezone": "0.5.47",
diff --git a/yarn.lock b/yarn.lock
index 8c64f72ebd6..290e65aa556 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3115,7 +3115,7 @@ __metadata:
fast_array_intersect: "npm:1.1.0"
history: "npm:4.10.1"
lodash: "npm:4.17.21"
- marked: "npm:16.0.0"
+ marked: "npm:16.1.0"
marked-mangle: "npm:1.1.11"
moment: "npm:2.30.1"
moment-timezone: "npm:0.5.47"
@@ -9614,14 +9614,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1":
- version: 2.0.3
- resolution: "@types/istanbul-lib-coverage@npm:2.0.3"
- checksum: 10/0650cba4be8f464bee89b9de0b71a5ea3b5cc676ce24e1196b5d6a51542ce9e613ae4549bf19756bb33dbbbb32b47931040266100062bfb197c597d73e341eb0
- languageName: node
- linkType: hard
-
-"@types/istanbul-lib-coverage@npm:^2.0.6":
+"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1, @types/istanbul-lib-coverage@npm:^2.0.6":
version: 2.0.6
resolution: "@types/istanbul-lib-coverage@npm:2.0.6"
checksum: 10/3feac423fd3e5449485afac999dcfcb3d44a37c830af898b689fadc65d26526460bedb889db278e0d4d815a670331796494d073a10ee6e3a6526301fe7415778
@@ -9637,16 +9630,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/istanbul-reports@npm:^3.0.0":
- version: 3.0.1
- resolution: "@types/istanbul-reports@npm:3.0.1"
- dependencies:
- "@types/istanbul-lib-report": "npm:*"
- checksum: 10/f1ad54bc68f37f60b30c7915886b92f86b847033e597f9b34f2415acdbe5ed742fa559a0a40050d74cdba3b6a63c342cac1f3a64dba5b68b66a6941f4abd7903
- languageName: node
- linkType: hard
-
-"@types/istanbul-reports@npm:^3.0.4":
+"@types/istanbul-reports@npm:^3.0.0, @types/istanbul-reports@npm:^3.0.4":
version: 3.0.4
resolution: "@types/istanbul-reports@npm:3.0.4"
dependencies:
@@ -18473,7 +18457,7 @@ __metadata:
lru-cache: "npm:11.1.0"
lru-memoize: "npm:^1.1.0"
lucene: "npm:^2.1.1"
- marked: "npm:16.0.0"
+ marked: "npm:16.1.0"
memoize-one: "npm:6.0.0"
micro-memoize: "npm:^4.1.2"
mini-css-extract-plugin: "npm:2.9.2"
@@ -22582,12 +22566,12 @@ __metadata:
languageName: node
linkType: hard
-"marked@npm:16.0.0":
- version: 16.0.0
- resolution: "marked@npm:16.0.0"
+"marked@npm:16.1.0":
+ version: 16.1.0
+ resolution: "marked@npm:16.1.0"
bin:
marked: bin/marked.js
- checksum: 10/aed6501ff5d49def83f0c79fab698666338a555cae32f83ba52369c9a04aa8be4fa4c908367d12f81f7d1c1a83d89ffe47aa1e7b023da308591e03ea82d5ca6d
+ checksum: 10/f72704b5c2fc25173331c3176a7f5139ae0d5ff55ce8cb547ab4d32527ce064174343145901df5f34f410aed08fa0462d7c5570f232a5325fb536437d9f2bcde
languageName: node
linkType: hard
From 35884fa9a4bb2e401d7c85cc1bd9ea495bace7e2 Mon Sep 17 00:00:00 2001
From: ismail simsek
Date: Fri, 18 Jul 2025 11:12:08 +0200
Subject: [PATCH 06/46] Chore: Avoid floating point numbers for maxDataPoints
(#108292)
* avoid floating point numbers
* prettier
---
public/app/features/explore/state/explorePane.ts | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/public/app/features/explore/state/explorePane.ts b/public/app/features/explore/state/explorePane.ts
index 9835b9f3e09..c9fc652279f 100644
--- a/public/app/features/explore/state/explorePane.ts
+++ b/public/app/features/explore/state/explorePane.ts
@@ -43,6 +43,7 @@ export interface ChangeSizePayload {
exploreId: string;
width: number;
}
+
export const changeSizeAction = createAction('explore/changeSize');
/**
@@ -52,7 +53,9 @@ interface ChangePanelsState {
exploreId: string;
panelsState: ExplorePanelsState;
}
+
export const changePanelsStateAction = createAction('explore/changePanels');
+
export function changePanelState(
exploreId: string,
panel: PreferredVisualisationType,
@@ -83,6 +86,7 @@ interface ChangeCorrelationHelperData {
exploreId: string;
correlationEditorHelperData?: ExploreCorrelationHelperData;
}
+
export const changeCorrelationHelperData = createAction(
'explore/changeCorrelationHelperData'
);
@@ -99,17 +103,20 @@ interface InitializeExplorePayload {
datasourceInstance?: DataSourceApi;
eventBridge: EventBusExtended;
}
+
const initializeExploreAction = createAction('explore/initializeExploreAction');
export interface SetUrlReplacedPayload {
exploreId: string;
}
+
export const setUrlReplacedAction = createAction('explore/setUrlReplaced');
export interface SaveCorrelationsPayload {
exploreId: string;
correlations: CorrelationData[];
}
+
export const saveCorrelationsAction = createAction('explore/saveCorrelationsAction');
/**
@@ -130,6 +137,7 @@ export interface InitializeExploreOptions {
position?: number;
eventBridge: EventBusExtended;
}
+
/**
* Initialize Explore state with state from the URL and the React component.
* Call this only on components for with the Explore state has not been initialized.
@@ -214,7 +222,7 @@ export const paneReducer = (state: ExploreItemState = makeExplorePaneState(), ac
state = timeReducer(state, action);
if (changeSizeAction.match(action)) {
- const containerWidth = action.payload.width;
+ const containerWidth = Math.floor(action.payload.width);
return { ...state, containerWidth };
}
From 4fb464ccdc135b0b20f12dc241ac0a3cc1dabb36 Mon Sep 17 00:00:00 2001
From: Ashley Harrison
Date: Fri, 18 Jul 2025 10:16:49 +0100
Subject: [PATCH 07/46] Playwright: Increase timeout when waiting for app pages
(#108296)
increase timeout when waiting for app pages
---
e2e-playwright/various-suite/frontend-sandbox-app.spec.ts | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/e2e-playwright/various-suite/frontend-sandbox-app.spec.ts b/e2e-playwright/various-suite/frontend-sandbox-app.spec.ts
index dfa19753b15..6ec59ded434 100644
--- a/e2e-playwright/various-suite/frontend-sandbox-app.spec.ts
+++ b/e2e-playwright/various-suite/frontend-sandbox-app.spec.ts
@@ -31,7 +31,7 @@ test.describe(
await expect(sandboxDiv).toBeHidden();
const appPage = page.getByTestId('sandbox-app-test-page-one');
- await expect(appPage).toBeVisible();
+ await expect(appPage).toBeVisible({ timeout: 10000 });
});
test('Loads the app configuration without the sandbox div wrapper', async ({ page }) => {
@@ -41,7 +41,7 @@ test.describe(
await expect(sandboxDiv).toBeHidden();
const configPage = page.getByTestId('sandbox-app-test-config-page');
- await expect(configPage).toBeVisible();
+ await expect(configPage).toBeVisible({ timeout: 10000 });
});
});
@@ -59,7 +59,7 @@ test.describe(
await expect(sandboxDiv).toBeVisible();
const appPage = page.getByTestId('sandbox-app-test-page-one');
- await expect(appPage).toBeVisible();
+ await expect(appPage).toBeVisible({ timeout: 10000 });
});
test('Loads the app configuration with the sandbox div wrapper', async ({ page }) => {
@@ -69,7 +69,7 @@ test.describe(
await expect(sandboxDiv).toBeVisible();
const configPage = page.getByTestId('sandbox-app-test-config-page');
- await expect(configPage).toBeVisible();
+ await expect(configPage).toBeVisible({ timeout: 10000 });
});
});
});
From a4cf41de4a55e30a68f1964c6db266fd0441b4c3 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 18 Jul 2025 10:17:15 +0100
Subject: [PATCH 08/46] Update dependency vis-data to v8 (#108263)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 12 ++++++------
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/package.json b/package.json
index 63ae5b97a10..a9674fc2bc6 100644
--- a/package.json
+++ b/package.json
@@ -427,7 +427,7 @@
"type-fest": "^4.18.2",
"uplot": "1.6.32",
"uuid": "11.1.0",
- "vis-data": "^7.1.10",
+ "vis-data": "^8.0.0",
"vis-network": "9.1.13",
"whatwg-fetch": "3.6.20"
},
diff --git a/yarn.lock b/yarn.lock
index 290e65aa556..1fdf2319446 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -18554,7 +18554,7 @@ __metadata:
typescript: "npm:5.8.3"
uplot: "npm:1.6.32"
uuid: "npm:11.1.0"
- vis-data: "npm:^7.1.10"
+ vis-data: "npm:^8.0.0"
vis-network: "npm:9.1.13"
webpack: "npm:5.97.1"
webpack-assets-manifest: "npm:^5.1.0"
@@ -32066,13 +32066,13 @@ __metadata:
languageName: node
linkType: hard
-"vis-data@npm:^7.1.10":
- version: 7.1.10
- resolution: "vis-data@npm:7.1.10"
+"vis-data@npm:^8.0.0":
+ version: 8.0.1
+ resolution: "vis-data@npm:8.0.1"
peerDependencies:
uuid: ^3.4.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0
- vis-util: ^5.0.1
- checksum: 10/23fb2ef26864153013372e1d95107765be86dd9ce96f987bf99fdd93759fbe5ec1bd2603d354ca18a03f0fb607b829396ec02fe005aead63ef24599512f21402
+ vis-util: ">=6.0.0"
+ checksum: 10/d69045c555a79fde292270d42f111b0d1ba644989481eec08393f73cf64573563e6533718eff0534f4255f44d363b078d0520704190328b97f8e244d4b4c8b73
languageName: node
linkType: hard
From 52c91254cc48eb54cfa9341ca666bfbcc3ecb58b Mon Sep 17 00:00:00 2001
From: Andre Pereira
Date: Fri, 18 Jul 2025 10:28:01 +0100
Subject: [PATCH 09/46] Tempo: Fix exemplar data links when streaming TraceQL
metrics (#108078)
* Fix exemplars when streaming metrics
* Fix type
---
.../app/plugins/datasource/tempo/datasource.ts | 3 +++
.../datasource/tempo/resultTransformer.ts | 18 +++++++++++++++---
2 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/public/app/plugins/datasource/tempo/datasource.ts b/public/app/plugins/datasource/tempo/datasource.ts
index 6338cf58b98..fc5f71eb8bb 100644
--- a/public/app/plugins/datasource/tempo/datasource.ts
+++ b/public/app/plugins/datasource/tempo/datasource.ts
@@ -782,6 +782,9 @@ export class TempoDatasource extends DataSourceWithBackend {
+ return enhanceTraceQlMetricsResponse(response, this.instanceSettings);
+ }),
catchError((error) => {
reportTempoQueryMetrics('grafana_traces_traceql_metrics_response', options, {
success: false,
diff --git a/public/app/plugins/datasource/tempo/resultTransformer.ts b/public/app/plugins/datasource/tempo/resultTransformer.ts
index 49a7b0faa9e..01934cc97bf 100644
--- a/public/app/plugins/datasource/tempo/resultTransformer.ts
+++ b/public/app/plugins/datasource/tempo/resultTransformer.ts
@@ -1,6 +1,7 @@
import { SpanStatus } from '@opentelemetry/api';
import { collectorTypes } from '@opentelemetry/exporter-collector';
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
+import { isEqual } from 'lodash';
import {
createDataFrame,
@@ -474,9 +475,20 @@ export function enhanceTraceQlMetricsResponse(
const traceIDField = frame.fields.find((field: Field) => field.name === 'traceId');
if (traceIDField) {
const links = getDataLinks(instanceSettings);
- traceIDField.config.links = traceIDField.config.links?.length
- ? [...traceIDField.config.links, ...links]
- : links;
+ const existingLinks = traceIDField.config.links || [];
+
+ // Filter out links that already exist
+ const newLinks = links.filter(
+ (link) =>
+ !existingLinks.some(
+ (existing: DataLink) =>
+ existing.title === link.title &&
+ existing.internal?.datasourceUid === link.internal?.datasourceUid &&
+ isEqual(existing.internal?.query, link.internal?.query)
+ )
+ );
+
+ traceIDField.config.links = existingLinks.length ? [...existingLinks, ...newLinks] : newLinks;
}
return frame;
});
From d5f47d2a6bf14a7912dc1edc56e8594877ec4b71 Mon Sep 17 00:00:00 2001
From: Misi
Date: Fri, 18 Jul 2025 11:29:09 +0200
Subject: [PATCH 10/46] IAM: Comment out DualWriter setup for Users (#108241)
* Try 1
* Comment out DW setup for users
---
pkg/registry/apis/iam/register.go | 23 +++++++++++++----------
1 file changed, 13 insertions(+), 10 deletions(-)
diff --git a/pkg/registry/apis/iam/register.go b/pkg/registry/apis/iam/register.go
index da3517c82f9..936c11c23d9 100644
--- a/pkg/registry/apis/iam/register.go
+++ b/pkg/registry/apis/iam/register.go
@@ -126,19 +126,22 @@ func (b *IdentityAccessManagementAPIBuilder) UpdateAPIGroupInfo(apiGroupInfo *ge
storage[teamBindingResource.StoragePath()] = team.NewLegacyBindingStore(b.store)
userResource := legacyiamv0.UserResourceInfo
- store, err := grafanaregistry.NewRegistryStore(opts.Scheme, userResource, opts.OptsGetter)
- if err != nil {
- return err
- }
-
legacyStore := user.NewLegacyStore(b.store, b.legacyAccessClient)
- dw, err := opts.DualWriteBuilder(userResource.GroupResource(), legacyStore, store)
- if err != nil {
- return err
- }
+ // TODO: Figure out what's missing for the DualWriter setup in a MT setup
+ // MT app is unable to start if DW is configured
+ // store, err := grafanaregistry.NewRegistryStore(opts.Scheme, userResource, opts.OptsGetter)
+ // if err != nil {
+ // return err
+ // }
+
+ // dw, err := opts.DualWriteBuilder(userResource.GroupResource(), legacyStore, store)
+ // if err != nil {
+ // return err
+ // }
- storage[userResource.StoragePath()] = dw
+ // storage[userResource.StoragePath()] = dw
+ storage[userResource.StoragePath()] = legacyStore
storage[userResource.StoragePath("teams")] = user.NewLegacyTeamMemberREST(b.store)
serviceAccountResource := legacyiamv0.ServiceAccountResourceInfo
From 25d06e8d7845c3c7a730db5b79ee9e5ce5ce0b90 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 18 Jul 2025 09:49:44 +0000
Subject: [PATCH 11/46] Update dependency @types/lodash to v4.17.20 (#108297)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
yarn.lock | 87 +++++--------------------------------------------------
1 file changed, 8 insertions(+), 79 deletions(-)
diff --git a/yarn.lock b/yarn.lock
index 1fdf2319446..afa3f506f79 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1464,14 +1464,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.24.5, @babel/runtime@npm:^7.24.7, @babel/runtime@npm:^7.25.0, @babel/runtime@npm:^7.25.6, @babel/runtime@npm:^7.25.7, @babel/runtime@npm:^7.27.0, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7":
- version: 7.27.1
- resolution: "@babel/runtime@npm:7.27.1"
- checksum: 10/34cefcbf781ea5a4f1b93f8563327b9ac82694bebdae91e8bd9d7f58d084cbe5b9a6e7f94d77076e15b0bcdaa0040a36cb30737584028df6c4673b4c67b2a31d
- languageName: node
- linkType: hard
-
-"@babel/runtime@npm:^7.26.7, @babel/runtime@npm:^7.27.6":
+"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.24.5, @babel/runtime@npm:^7.24.7, @babel/runtime@npm:^7.25.0, @babel/runtime@npm:^7.25.6, @babel/runtime@npm:^7.25.7, @babel/runtime@npm:^7.26.7, @babel/runtime@npm:^7.27.0, @babel/runtime@npm:^7.27.6, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7":
version: 7.27.6
resolution: "@babel/runtime@npm:7.27.6"
checksum: 10/cc957a12ba3781241b83d528eb69ddeb86ca5ac43179a825e83aa81263a6b3eb88c57bed8a937cdeacfc3192e07ec24c73acdfea4507d0c0428c8e23d6322bfe
@@ -9423,18 +9416,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.33":
- version: 4.17.33
- resolution: "@types/express-serve-static-core@npm:4.17.33"
- dependencies:
- "@types/node": "npm:*"
- "@types/qs": "npm:*"
- "@types/range-parser": "npm:*"
- checksum: 10/47ee1b46be710ae6451a2e658e2eab75f4affe874b0d156a31e792db0ddb35184ac7b35be926eb23424cc45f6e0d3dbacc86ac5d63a3c988d8235aedb1143841
- languageName: node
- linkType: hard
-
-"@types/express-serve-static-core@npm:^4.17.21":
+"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.21, @types/express-serve-static-core@npm:^4.17.33":
version: 4.19.6
resolution: "@types/express-serve-static-core@npm:4.19.6"
dependencies:
@@ -9732,14 +9714,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/lodash@npm:*, @types/lodash@npm:^4, @types/lodash@npm:^4.14.172":
- version: 4.17.16
- resolution: "@types/lodash@npm:4.17.16"
- checksum: 10/9a8bb7471a7521bd65d528e1bd14f79819a3eeb6f8a35a8a44649a7d773775c0813e93fd93bd32ccf350bb076c0bf02c6d47877c4625f526f6dd4d283c746aec
- languageName: node
- linkType: hard
-
-"@types/lodash@npm:4.17.20":
+"@types/lodash@npm:*, @types/lodash@npm:4.17.20, @types/lodash@npm:^4, @types/lodash@npm:^4.14.172":
version: 4.17.20
resolution: "@types/lodash@npm:4.17.20"
checksum: 10/8cd8ad3bd78d2e06a93ae8d6c9907981d5673655fec7cb274a4d9a59549aab5bb5b3017361280773b8990ddfccf363e14d1b37c97af8a9fe363de677f9a61524
@@ -16363,17 +16338,7 @@ __metadata:
languageName: node
linkType: hard
-"eslint-scope@npm:^8.1.0":
- version: 8.2.0
- resolution: "eslint-scope@npm:8.2.0"
- dependencies:
- esrecurse: "npm:^4.3.0"
- estraverse: "npm:^5.2.0"
- checksum: 10/cd9ab60d5a68f3a0fcac04d1cff5a7383d0f331964d5f1c446259123caec5b3ccc542284d07846e4f4d1389da77750821cc9a6e1ce18558c674977351666f9a6
- languageName: node
- linkType: hard
-
-"eslint-scope@npm:^8.3.0":
+"eslint-scope@npm:^8.1.0, eslint-scope@npm:^8.3.0":
version: 8.3.0
resolution: "eslint-scope@npm:8.3.0"
dependencies:
@@ -19447,20 +19412,13 @@ __metadata:
languageName: node
linkType: hard
-"ignore@npm:^7.0.0":
+"ignore@npm:^7.0.0, ignore@npm:^7.0.3":
version: 7.0.5
resolution: "ignore@npm:7.0.5"
checksum: 10/f134b96a4de0af419196f52c529d5c6120c4456ff8a6b5a14ceaaa399f883e15d58d2ce651c9b69b9388491d4669dda47285d307e827de9304a53a1824801bc6
languageName: node
linkType: hard
-"ignore@npm:^7.0.3":
- version: 7.0.3
- resolution: "ignore@npm:7.0.3"
- checksum: 10/ce5e812af3acd6607a3fe0a9f9b5f01d53f009a5ace8cbf5b6491d05a481b55d65186e6a7eaa13126e93f15276bcf3d1e8d6ff3ce5549c312f9bb313fff33365
- languageName: node
- linkType: hard
-
"image-q@npm:^4.0.0":
version: 4.0.0
resolution: "image-q@npm:4.0.0"
@@ -23528,7 +23486,7 @@ __metadata:
languageName: node
linkType: hard
-"node-addon-api@npm:^8.0.0, node-addon-api@npm:^8.3.1":
+"node-addon-api@npm:^8.0.0, node-addon-api@npm:^8.2.2, node-addon-api@npm:^8.3.0, node-addon-api@npm:^8.3.1":
version: 8.4.0
resolution: "node-addon-api@npm:8.4.0"
dependencies:
@@ -23537,15 +23495,6 @@ __metadata:
languageName: node
linkType: hard
-"node-addon-api@npm:^8.2.2, node-addon-api@npm:^8.3.0":
- version: 8.3.0
- resolution: "node-addon-api@npm:8.3.0"
- dependencies:
- node-gyp: "npm:latest"
- checksum: 10/b1c2218e794c149011d8f14e5f14b2ffd5f260c08b2982d4163a0f881069dc390458de7703602b9940a1130c1ad87c3f9d35cd7bb116e2f2a134ac0a0c0036ca
- languageName: node
- linkType: hard
-
"node-domexception@npm:^1.0.0":
version: 1.0.0
resolution: "node-domexception@npm:1.0.0"
@@ -31428,7 +31377,7 @@ __metadata:
languageName: node
linkType: hard
-"typescript@npm:5.8.3":
+"typescript@npm:5.8.3, typescript@npm:>=2.7, typescript@npm:>=3 < 6, typescript@npm:^5.0.4, typescript@npm:^5.4.5, typescript@npm:^5.5.4":
version: 5.8.3
resolution: "typescript@npm:5.8.3"
bin:
@@ -31438,16 +31387,6 @@ __metadata:
languageName: node
linkType: hard
-"typescript@npm:>=2.7, typescript@npm:>=3 < 6, typescript@npm:^5.0.4, typescript@npm:^5.4.5, typescript@npm:^5.5.4":
- version: 5.8.2
- resolution: "typescript@npm:5.8.2"
- bin:
- tsc: bin/tsc
- tsserver: bin/tsserver
- checksum: 10/dbc2168a55d56771f4d581997be52bab5cbc09734fec976cfbaabd787e61fb4c6cf9125fd48c6f98054ce549c77ecedefc7f64252a830dd8e9c3381f61fbeb78
- languageName: node
- linkType: hard
-
"typescript@patch:typescript@npm%3A5.5.4#optional!builtin":
version: 5.5.4
resolution: "typescript@patch:typescript@npm%3A5.5.4#optional!builtin::version=5.5.4&hash=379a07"
@@ -31478,7 +31417,7 @@ __metadata:
languageName: node
linkType: hard
-"typescript@patch:typescript@npm%3A5.8.3#optional!builtin":
+"typescript@patch:typescript@npm%3A5.8.3#optional!builtin, typescript@patch:typescript@npm%3A>=2.7#optional!builtin, typescript@patch:typescript@npm%3A>=3 < 6#optional!builtin, typescript@patch:typescript@npm%3A^5.0.4#optional!builtin, typescript@patch:typescript@npm%3A^5.4.5#optional!builtin, typescript@patch:typescript@npm%3A^5.5.4#optional!builtin":
version: 5.8.3
resolution: "typescript@patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5"
bin:
@@ -31488,16 +31427,6 @@ __metadata:
languageName: node
linkType: hard
-"typescript@patch:typescript@npm%3A>=2.7#optional!builtin, typescript@patch:typescript@npm%3A>=3 < 6#optional!builtin, typescript@patch:typescript@npm%3A^5.0.4#optional!builtin, typescript@patch:typescript@npm%3A^5.4.5#optional!builtin, typescript@patch:typescript@npm%3A^5.5.4#optional!builtin":
- version: 5.8.2
- resolution: "typescript@patch:typescript@npm%3A5.8.2#optional!builtin::version=5.8.2&hash=5786d5"
- bin:
- tsc: bin/tsc
- tsserver: bin/tsserver
- checksum: 10/97920a082ffc57583b1cb6bc4faa502acc156358e03f54c7fc7fdf0b61c439a717f4c9070c449ee9ee683d4cfc3bb203127c2b9794b2950f66d9d307a4ff262c
- languageName: node
- linkType: hard
-
"ua-parser-js@npm:^1.0.32":
version: 1.0.33
resolution: "ua-parser-js@npm:1.0.33"
From 579e412d19f3d7e845b192ef907d300a7086e987 Mon Sep 17 00:00:00 2001
From: Andres Martinez Gotor
Date: Fri, 18 Jul 2025 12:02:13 +0200
Subject: [PATCH 12/46] Advisor: Document how to alert based on checks
(#108176)
---
.../administration/grafana-advisor/_index.md | 97 +++++++++++++++++++
1 file changed, 97 insertions(+)
diff --git a/docs/sources/administration/grafana-advisor/_index.md b/docs/sources/administration/grafana-advisor/_index.md
index 28caf9b1953..4284432b73b 100644
--- a/docs/sources/administration/grafana-advisor/_index.md
+++ b/docs/sources/administration/grafana-advisor/_index.md
@@ -106,3 +106,100 @@ To resolve issues flagged by Grafana Advisor and maintain system reliability, fo
- **Immediate Action:** Address "Action needed" items promptly to ensure system reliability
- **Systematic Review:** After fixing flagged issues, use the "Refresh" button to confirm all checks pass
- **Proactive Updates:** Address plugin update recommendations under "Investigation needed" even if they haven't caused failures yet
+
+## How to create an alert based on Advisor results
+
+This guide walks you through creating a Grafana alert that monitors Advisor check results and triggers when failures are detected.
+
+### Step 1: Create a service account and token
+
+1. Navigate to **Administration → Users and access → Service accounts** in your Grafana instance
+2. Click **Add service account**
+3. Provide a name (for example, "advisor-alert-service-account")
+4. Set the role to **Admin** to ensure proper permissions
+5. Click **Create**
+6. In the service account details, click **Add service account token**
+7. Provide a token name and set an appropriate expiration date
+8. Click **Generate token**
+
+> **Important**: Copy the token value immediately and store it securely - you won't be able to see it again
+
+### Step 2: Set up the Grafana Infinity data source
+
+> **Important**: Use Infinity plugin >=v3.3.0 for the JQ parser used later.
+
+1. Go to **Connections → Add new connection**
+2. Search for "Infinity"
+3. If not installed, click **Install**. Wait for the plugin to be installed.
+4. From the plugin page, click **Add new data source**.
+5. Configure the data source:
+ - **Name**: Give it a descriptive name (e.g., "Advisor API")
+ - **Setup Authentication**: In the **Auth type**, select **Bearer Token**. In the **Auth details** section, paste the service account token from Step 1 and in the **Allowed hosts** section, write your Grafana app URL and click the "Add" button (e.g., `https://your-grafana-host.com`).
+6. Click **Save & test** to verify the connection
+
+### Step 3: Create the alert rule
+
+Now you have everything you need to create an alert based on Advisor results.
+
+1. Navigate to **Alerting → Alert rules**
+2. Click **New alert rule**
+3. Provide a rule name (e.g., "Advisor Failures Alert")
+
+#### Configure the query
+
+1. **Data source**: Select the Infinity data source created in Step 3
+2. Configure the query settings:
+ - **Type**: JSON
+ - **Parser**: JQ
+ - **Source**: URL
+ - **Format**: Table
+ - **Method**: GET
+ - **URL**: Get this from the Advisor interface:
+ - Visit the Advisor in your Grafana instance
+ - Open browser Developer Tools (F12) → Network tab
+ - Look for a request ending with `/checks`
+ - Copy the full URL (format: `https:///apis/advisor.grafana.app/v0alpha1/namespaces//checks`)
+
+#### Configure parsing options
+
+**Rows/Root** (paste this JQ expression):
+
+```jq
+.items | map({
+ type: .metadata.labels["advisor.grafana.app/type"],
+ creationTimestamp: .metadata.creationTimestamp,
+ failuresCount: (.status.report.failures | length)
+}) | group_by(.type) | map(sort_by(.creationTimestamp) | last)
+```
+
+This JQ query processes Grafana Advisor check data to get the most recent result for each check type. It transforms each check into a simplified object with type, timestamp, and failure count.
+The result is a clean array showing the current state of each check type (data source, plugin, configuration, etc.) with their failure counts, perfect for alerting when any type has failures > 0.
+
+**Columns** (add these three columns):
+
+- **Selector**: `creationTimestamp`, **Format**: Time
+- **Selector**: `failuresCount`, **Format**: Number
+- **Selector**: `type`, **Format**: String
+
+#### Optional: Filter by check type
+
+If you want to alert only for specific check types:
+
+1. In the **Computed columns, Filter, Group by** section
+2. Add a **Filter**: `type == "license"` (replace "license" with your desired check type)
+
+#### Set alert condition
+
+- **Alert condition**: Select "WHEN Last OF QUERY Is above 0"
+- This will trigger when any check type has failures.
+- Click on "Preview alert rule condition" to see the result of the query.
+
+#### Complete alert configuration
+
+Select your preferred evaluation (e.g. every 24 hours) and notification settings.
+
+### Step 4: Save the alert rule
+
+Click **Save** and check the alert is being triggered.
+
+Your alert is now configured to monitor Advisor results and notify you when failures are detected!
From eed6e4b62bb2350f527ee6e361ba96c66a9f59c7 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 18 Jul 2025 11:17:42 +0100
Subject: [PATCH 13/46] Update dependency vis-network to v10 (#108295)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 14 +++++++-------
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/package.json b/package.json
index a9674fc2bc6..3e9cf8b5846 100644
--- a/package.json
+++ b/package.json
@@ -428,7 +428,7 @@
"uplot": "1.6.32",
"uuid": "11.1.0",
"vis-data": "^8.0.0",
- "vis-network": "9.1.13",
+ "vis-network": "10.0.1",
"whatwg-fetch": "3.6.20"
},
"resolutions": {
diff --git a/yarn.lock b/yarn.lock
index afa3f506f79..770c395bca1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -18520,7 +18520,7 @@ __metadata:
uplot: "npm:1.6.32"
uuid: "npm:11.1.0"
vis-data: "npm:^8.0.0"
- vis-network: "npm:9.1.13"
+ vis-network: "npm:10.0.1"
webpack: "npm:5.97.1"
webpack-assets-manifest: "npm:^5.1.0"
webpack-cli: "npm:6.0.1"
@@ -32005,17 +32005,17 @@ __metadata:
languageName: node
linkType: hard
-"vis-network@npm:9.1.13":
- version: 9.1.13
- resolution: "vis-network@npm:9.1.13"
+"vis-network@npm:10.0.1":
+ version: 10.0.1
+ resolution: "vis-network@npm:10.0.1"
peerDependencies:
"@egjs/hammerjs": ^2.0.0
component-emitter: ^1.3.0 || ^2.0.0
keycharm: ^0.2.0 || ^0.3.0 || ^0.4.0
uuid: ^3.4.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0
- vis-data: ^6.3.0 || ^7.0.0
- vis-util: ^5.0.1
- checksum: 10/7fd7264ee0a79282596efece988a78c037c418fa5e79aba632521a3093e9742a438b254dc698f488eb7707e3f7033352c25e7651a8d49b42662af0b368a12db7
+ vis-data: ">=8.0.0"
+ vis-util: ">=6.0.0"
+ checksum: 10/a44310daa9c4e361ccfceecc681791938dffbb292673de9438a640a10cf8f79674f7b33e77fbc747d482ce63177478eed83a30ac3ba4f8a55e01895b69554664
languageName: node
linkType: hard
From 1a09c13770ae070a3fb5ae3c7d202e44ffbe3534 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 18 Jul 2025 10:17:45 +0000
Subject: [PATCH 14/46] Update dependency @types/node-forge to v1.3.13
(#108299)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
yarn.lock | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/yarn.lock b/yarn.lock
index 770c395bca1..581dcd7c911 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9804,11 +9804,11 @@ __metadata:
linkType: hard
"@types/node-forge@npm:^1, @types/node-forge@npm:^1.3.0":
- version: 1.3.12
- resolution: "@types/node-forge@npm:1.3.12"
+ version: 1.3.13
+ resolution: "@types/node-forge@npm:1.3.13"
dependencies:
"@types/node": "npm:*"
- checksum: 10/6840622b4253e04f1848fda7355603d75d0553d9e103e8eeb3c2cd832fe1f6af8a27ebfd70ff8a6b2a6c3737054ca280a9f9b7fb9cfbfb6be69c45ca4861c4aa
+ checksum: 10/4d62a6b0cedeb45145de6b05df0082b0ba32675aeb1bf8dbe003804eb61be412a613e82f56b65ba1051594abda4f4c9c0aa9aac009cf106af6faf6217eee8681
languageName: node
linkType: hard
From e3422c415f3f3f444baf064e8b284642ac60b6ed Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20Jim=C3=A9nez=20S=C3=A1nchez?=
Date: Fri, 18 Jul 2025 12:18:07 +0200
Subject: [PATCH 15/46] Provisioning: fix hack-introduced bug on repository
updates (#108298)
* Add log line to see which secret service we are using
* Add hack to make test and create endpoint work until we have InLineSecureValues
---
.../apis/provisioning/secrets/repository.go | 7 ++++--
pkg/registry/apis/provisioning/test.go | 24 +++++++++++++++++++
2 files changed, 29 insertions(+), 2 deletions(-)
diff --git a/pkg/registry/apis/provisioning/secrets/repository.go b/pkg/registry/apis/provisioning/secrets/repository.go
index 20d621b9def..c86917cb452 100644
--- a/pkg/registry/apis/provisioning/secrets/repository.go
+++ b/pkg/registry/apis/provisioning/secrets/repository.go
@@ -56,7 +56,9 @@ func NewRepositorySecrets(features featuremgmt.FeatureToggles, secretsSvc Servic
// If the feature flag is disabled, it uses the legacy secrets service
// If the feature flag is enabled, it uses the secrets service
func (s *repositorySecrets) Encrypt(ctx context.Context, r *provisioning.Repository, name string, data string) (nameOrValue []byte, err error) {
+ logger := logging.FromContext(ctx).With("name", name, "namespace", r.GetNamespace())
if s.features.IsEnabled(ctx, featuremgmt.FlagProvisioningSecretsService) {
+ logger.Info("Encrypting secret with new secrets service")
encrypted, err := s.secretsSvc.Encrypt(ctx, r.GetNamespace(), name, data)
if err != nil {
return nil, err
@@ -64,6 +66,7 @@ func (s *repositorySecrets) Encrypt(ctx context.Context, r *provisioning.Reposit
return []byte(encrypted), err
}
+ logger.Info("Encrypting secret with legacy secrets service")
encrypted, err := s.legacySecrets.Encrypt(ctx, []byte(data))
if err != nil {
return nil, err
@@ -87,10 +90,10 @@ func (s *repositorySecrets) Decrypt(ctx context.Context, r *provisioning.Reposit
logger := logging.FromContext(ctx)
// HACK: this is a hack to identify if the name is a potential Kubernetes name for a secret.
if strings.HasPrefix(nameOrValue, r.GetName()) {
- logger.Info("Decrypting secret with new secrets service", "name", nameOrValue)
+ logger.Info("Decrypting secret with new secrets service")
return s.secretsSvc.Decrypt(ctx, r.GetNamespace(), nameOrValue)
} else {
- logger.Info("Decrypting secret with legacy secrets service", "name", nameOrValue)
+ logger.Info("Decrypting secret with legacy secrets service")
return s.legacySecrets.Decrypt(ctx, []byte(nameOrValue))
}
}
diff --git a/pkg/registry/apis/provisioning/test.go b/pkg/registry/apis/provisioning/test.go
index e54388c8eb2..9813c37a0ad 100644
--- a/pkg/registry/apis/provisioning/test.go
+++ b/pkg/registry/apis/provisioning/test.go
@@ -3,12 +3,14 @@ package provisioning
import (
"context"
"encoding/json"
+ "fmt"
"net/http"
"reflect"
"time"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/apiserver/pkg/registry/rest"
provisioning "github.com/grafana/grafana/pkg/apis/provisioning/v0alpha1"
@@ -43,6 +45,11 @@ func (*testConnector) NewConnectOptions() (runtime.Object, bool, string) {
}
func (s *testConnector) Connect(ctx context.Context, name string, opts runtime.Object, responder rest.Responder) (http.Handler, error) {
+ ns, ok := request.NamespaceFrom(ctx)
+ if !ok {
+ return nil, fmt.Errorf("missing namespace")
+ }
+
return WithTimeout(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
body, err := readBody(r, defaultMaxBodySize)
if err != nil {
@@ -60,6 +67,23 @@ func (s *testConnector) Connect(ctx context.Context, name string, opts runtime.O
// In case the body is an empty object
if !reflect.ValueOf(cfg).IsZero() {
+ // HACK: Set the name and namespace if not set so that the temporary repository can be created
+ // This can be removed once we deprecate legacy secrets is deprecated or we use InLineSecureValues as we
+ // use the same field and repository name to detect which one to use.
+ if cfg.GetName() == "" {
+ if name == "new" {
+ // HACK: frontend is passing a "new" we need to remove the hack there as well
+ // Otherwise creation will fail as `new` is a reserved word. Not relevant here as we only "test"
+ name = "hack-on-hack-for-new"
+ }
+
+ cfg.SetName(name)
+ }
+
+ if cfg.GetNamespace() == "" {
+ cfg.SetNamespace(ns)
+ }
+
// Create a temporary repository
tmp, err := s.getter.AsRepository(ctx, &cfg)
if err != nil {
From 5b9cb1f56883bd71f98b0e2ffabc061396b7a356 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 18 Jul 2025 11:44:47 +0100
Subject: [PATCH 16/46] Update dependency rollup-plugin-esbuild to v6.2.1
(#108303)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
packages/grafana-alerting/package.json | 2 +-
packages/grafana-data/package.json | 2 +-
packages/grafana-e2e-selectors/package.json | 2 +-
packages/grafana-flamegraph/package.json | 2 +-
packages/grafana-prometheus/package.json | 2 +-
packages/grafana-runtime/package.json | 2 +-
packages/grafana-schema/package.json | 2 +-
packages/grafana-ui/package.json | 2 +-
yarn.lock | 34 ++++++++++-----------
9 files changed, 25 insertions(+), 25 deletions(-)
diff --git a/packages/grafana-alerting/package.json b/packages/grafana-alerting/package.json
index 32ab506a757..b505072280c 100644
--- a/packages/grafana-alerting/package.json
+++ b/packages/grafana-alerting/package.json
@@ -75,7 +75,7 @@
"react-redux": "^9.2.0",
"rimraf": "^6.0.1",
"rollup": "^4.22.4",
- "rollup-plugin-esbuild": "6.2.0",
+ "rollup-plugin-esbuild": "6.2.1",
"rollup-plugin-node-externals": "^8.0.0",
"type-fest": "^4.40.0",
"typescript": "5.8.3"
diff --git a/packages/grafana-data/package.json b/packages/grafana-data/package.json
index 99d2da1df60..6f0d719075a 100644
--- a/packages/grafana-data/package.json
+++ b/packages/grafana-data/package.json
@@ -97,7 +97,7 @@
"react-dom": "18.3.1",
"rimraf": "6.0.1",
"rollup": "^4.22.4",
- "rollup-plugin-esbuild": "6.2.0",
+ "rollup-plugin-esbuild": "6.2.1",
"rollup-plugin-node-externals": "^8.0.0",
"typescript": "5.8.3"
},
diff --git a/packages/grafana-e2e-selectors/package.json b/packages/grafana-e2e-selectors/package.json
index 265adc2ffdb..b283d4d188a 100644
--- a/packages/grafana-e2e-selectors/package.json
+++ b/packages/grafana-e2e-selectors/package.json
@@ -45,7 +45,7 @@
"esbuild": "0.25.6",
"rimraf": "6.0.1",
"rollup": "^4.22.4",
- "rollup-plugin-esbuild": "6.2.0",
+ "rollup-plugin-esbuild": "6.2.1",
"rollup-plugin-node-externals": "^8.0.0"
},
"dependencies": {
diff --git a/packages/grafana-flamegraph/package.json b/packages/grafana-flamegraph/package.json
index 892771c1082..990a46d2fa1 100644
--- a/packages/grafana-flamegraph/package.json
+++ b/packages/grafana-flamegraph/package.json
@@ -77,7 +77,7 @@
"jest": "^29.6.4",
"jest-canvas-mock": "2.5.2",
"rollup": "^4.22.4",
- "rollup-plugin-esbuild": "6.2.0",
+ "rollup-plugin-esbuild": "6.2.1",
"rollup-plugin-node-externals": "^8.0.0",
"ts-jest": "29.2.5",
"ts-node": "10.9.2",
diff --git a/packages/grafana-prometheus/package.json b/packages/grafana-prometheus/package.json
index 2927ed8e76c..a53abc96285 100644
--- a/packages/grafana-prometheus/package.json
+++ b/packages/grafana-prometheus/package.json
@@ -99,7 +99,7 @@
"react-select-event": "5.5.1",
"rimraf": "6.0.1",
"rollup": "^4.22.4",
- "rollup-plugin-esbuild": "6.2.0",
+ "rollup-plugin-esbuild": "6.2.1",
"rollup-plugin-node-externals": "^8.0.0",
"testing-library-selector": "0.3.1",
"typescript": "5.8.3"
diff --git a/packages/grafana-runtime/package.json b/packages/grafana-runtime/package.json
index 3d129df19ae..2140c331a2b 100644
--- a/packages/grafana-runtime/package.json
+++ b/packages/grafana-runtime/package.json
@@ -84,7 +84,7 @@
"react-dom": "18.3.1",
"rimraf": "6.0.1",
"rollup": "^4.22.4",
- "rollup-plugin-esbuild": "6.2.0",
+ "rollup-plugin-esbuild": "6.2.1",
"rollup-plugin-node-externals": "^8.0.0",
"rollup-plugin-sourcemaps": "0.6.3",
"typescript": "5.8.3"
diff --git a/packages/grafana-schema/package.json b/packages/grafana-schema/package.json
index 8dc2e5efe1f..55a1b76b842 100644
--- a/packages/grafana-schema/package.json
+++ b/packages/grafana-schema/package.json
@@ -42,7 +42,7 @@
"glob": "^11.0.0",
"rimraf": "6.0.1",
"rollup": "^4.22.4",
- "rollup-plugin-esbuild": "6.2.0",
+ "rollup-plugin-esbuild": "6.2.1",
"rollup-plugin-node-externals": "^8.0.0",
"typescript": "5.8.3"
},
diff --git a/packages/grafana-ui/package.json b/packages/grafana-ui/package.json
index 61f0d9a0d15..92210759d3a 100644
--- a/packages/grafana-ui/package.json
+++ b/packages/grafana-ui/package.json
@@ -195,7 +195,7 @@
"rimraf": "6.0.1",
"rollup": "^4.22.4",
"rollup-plugin-copy": "3.5.0",
- "rollup-plugin-esbuild": "6.2.0",
+ "rollup-plugin-esbuild": "6.2.1",
"rollup-plugin-node-externals": "^8.0.0",
"rollup-plugin-svg-import": "3.0.0",
"sass-loader": "16.0.4",
diff --git a/yarn.lock b/yarn.lock
index 581dcd7c911..6d5e8bee93e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3037,7 +3037,7 @@ __metadata:
react-redux: "npm:^9.2.0"
rimraf: "npm:^6.0.1"
rollup: "npm:^4.22.4"
- rollup-plugin-esbuild: "npm:6.2.0"
+ rollup-plugin-esbuild: "npm:6.2.1"
rollup-plugin-node-externals: "npm:^8.0.0"
type-fest: "npm:^4.40.0"
typescript: "npm:5.8.3"
@@ -3119,7 +3119,7 @@ __metadata:
react-use: "npm:17.6.0"
rimraf: "npm:6.0.1"
rollup: "npm:^4.22.4"
- rollup-plugin-esbuild: "npm:6.2.0"
+ rollup-plugin-esbuild: "npm:6.2.1"
rollup-plugin-node-externals: "npm:^8.0.0"
rxjs: "npm:7.8.2"
string-hash: "npm:^1.1.3"
@@ -3145,7 +3145,7 @@ __metadata:
esbuild: "npm:0.25.6"
rimraf: "npm:6.0.1"
rollup: "npm:^4.22.4"
- rollup-plugin-esbuild: "npm:6.2.0"
+ rollup-plugin-esbuild: "npm:6.2.1"
rollup-plugin-node-externals: "npm:^8.0.0"
semver: "npm:^7.7.0"
tslib: "npm:2.8.1"
@@ -3261,7 +3261,7 @@ __metadata:
react-use: "npm:17.6.0"
react-virtualized-auto-sizer: "npm:1.0.26"
rollup: "npm:^4.22.4"
- rollup-plugin-esbuild: "npm:6.2.0"
+ rollup-plugin-esbuild: "npm:6.2.1"
rollup-plugin-node-externals: "npm:^8.0.0"
tinycolor2: "npm:1.6.0"
ts-jest: "npm:29.2.5"
@@ -3517,7 +3517,7 @@ __metadata:
react-window: "npm:1.8.11"
rimraf: "npm:6.0.1"
rollup: "npm:^4.22.4"
- rollup-plugin-esbuild: "npm:6.2.0"
+ rollup-plugin-esbuild: "npm:6.2.1"
rollup-plugin-node-externals: "npm:^8.0.0"
rxjs: "npm:7.8.2"
semver: "npm:7.7.2"
@@ -3560,7 +3560,7 @@ __metadata:
react-use: "npm:17.6.0"
rimraf: "npm:6.0.1"
rollup: "npm:^4.22.4"
- rollup-plugin-esbuild: "npm:6.2.0"
+ rollup-plugin-esbuild: "npm:6.2.1"
rollup-plugin-node-externals: "npm:^8.0.0"
rollup-plugin-sourcemaps: "npm:0.6.3"
rxjs: "npm:7.8.2"
@@ -3628,7 +3628,7 @@ __metadata:
glob: "npm:^11.0.0"
rimraf: "npm:6.0.1"
rollup: "npm:^4.22.4"
- rollup-plugin-esbuild: "npm:6.2.0"
+ rollup-plugin-esbuild: "npm:6.2.1"
rollup-plugin-node-externals: "npm:^8.0.0"
tslib: "npm:2.8.1"
typescript: "npm:5.8.3"
@@ -3825,7 +3825,7 @@ __metadata:
rimraf: "npm:6.0.1"
rollup: "npm:^4.22.4"
rollup-plugin-copy: "npm:3.5.0"
- rollup-plugin-esbuild: "npm:6.2.0"
+ rollup-plugin-esbuild: "npm:6.2.1"
rollup-plugin-node-externals: "npm:^8.0.0"
rollup-plugin-svg-import: "npm:3.0.0"
rxjs: "npm:7.8.2"
@@ -28197,18 +28197,18 @@ __metadata:
languageName: node
linkType: hard
-"rollup-plugin-esbuild@npm:6.2.0":
- version: 6.2.0
- resolution: "rollup-plugin-esbuild@npm:6.2.0"
+"rollup-plugin-esbuild@npm:6.2.1":
+ version: 6.2.1
+ resolution: "rollup-plugin-esbuild@npm:6.2.1"
dependencies:
debug: "npm:^4.4.0"
es-module-lexer: "npm:^1.6.0"
get-tsconfig: "npm:^4.10.0"
- unplugin-utils: "npm:^0.2.3"
+ unplugin-utils: "npm:^0.2.4"
peerDependencies:
esbuild: ">=0.18.0"
rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0
- checksum: 10/305563dfa72a843fd7db7b885583f22f62d4d584cbce7e8d80f138692ce67eb34e45dc1227b3420662f22fa75fa603ca09b64e7d1670919275a8577da653fada
+ checksum: 10/e5731b86c4e01c6ccd3998a2f90794bd738fe83a3a809b9e82456e4b1d173c296ef302c2a6669b966b12c757c1787f0585ae88cd73b98f3c0ad6ad7f779940aa
languageName: node
linkType: hard
@@ -31628,13 +31628,13 @@ __metadata:
languageName: node
linkType: hard
-"unplugin-utils@npm:^0.2.3":
- version: 0.2.3
- resolution: "unplugin-utils@npm:0.2.3"
+"unplugin-utils@npm:^0.2.4":
+ version: 0.2.4
+ resolution: "unplugin-utils@npm:0.2.4"
dependencies:
pathe: "npm:^2.0.2"
picomatch: "npm:^4.0.2"
- checksum: 10/95a18001b4a3aa92e58259162ee70be74f49780bff7aca0272035b206143772d07f3b117922ec9d7caaed8bd24578afcf7baa4330943796ea9f011dcc96af1d9
+ checksum: 10/9cb0f9b364e57d5939f1bc75cdebca0637b0aa177847970c1c1032770e06013fed730bf94168709eb406092812f516e8bfee4aef0cfebc085520d95db1c7f529
languageName: node
linkType: hard
From 0cb6e3fe934f77ef96cfb47cd3633a67d3daac18 Mon Sep 17 00:00:00 2001
From: Misi
Date: Fri, 18 Jul 2025 13:00:31 +0200
Subject: [PATCH 17/46] Docs: Add custom fields to Azure/Entra Terraform
example (#108222)
Add custom fields to Azure/Entra TF example
---
.../configure-authentication/azuread/index.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/docs/sources/setup-grafana/configure-security/configure-authentication/azuread/index.md b/docs/sources/setup-grafana/configure-security/configure-authentication/azuread/index.md
index a4ce61cd31a..92be8f1f25a 100644
--- a/docs/sources/setup-grafana/configure-security/configure-authentication/azuread/index.md
+++ b/docs/sources/setup-grafana/configure-security/configure-authentication/azuread/index.md
@@ -271,6 +271,10 @@ resource "grafana_sso_settings" "azuread_sso_settings" {
allow_assign_grafana_admin = false
skip_org_role_sync = false
use_pkce = true
+ custom = {
+ domain_hint = "contoso.com"
+ force_use_graph_api = "true"
+ }
}
}
```
From f7a1398cd4e47ccf27e1fdfd11822c8bb74091dd Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 18 Jul 2025 11:03:08 +0000
Subject: [PATCH 18/46] Update dependency rollup-plugin-node-externals to
v8.0.1 (#108304)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
yarn.lock | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/yarn.lock b/yarn.lock
index 6d5e8bee93e..dbcc393f12d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -28213,11 +28213,11 @@ __metadata:
linkType: hard
"rollup-plugin-node-externals@npm:^8.0.0":
- version: 8.0.0
- resolution: "rollup-plugin-node-externals@npm:8.0.0"
+ version: 8.0.1
+ resolution: "rollup-plugin-node-externals@npm:8.0.1"
peerDependencies:
rollup: ^4.0.0
- checksum: 10/ef5565e8fdba4acbba81c4b214f789e03d3a3d049cbbe372679151c4f749a21a7f51d8448eff82b0b1bbbe5d2d64862cd292795e0f92e1fcad2afc9954a6fbdd
+ checksum: 10/576fa3cd16a3cbbeffe6ea84833c820117d76b62e5625ed5c94ebb769dea1c763093c7f3ec62b49f77a2487f9b5988283d97e54ecd6750915ab754dfe0ae0e25
languageName: node
linkType: hard
From 046134db22c966ddc11fbbee7d660bc35b8925ed Mon Sep 17 00:00:00 2001
From: Matias Chomicki
Date: Fri, 18 Jul 2025 13:13:51 +0200
Subject: [PATCH 19/46] New Logs Panel: Add events for Panel and Details
(#108272)
* New Logs Panel: Add events for Panel and Details
* Logs Panel: add noInteractions property
* New Logs Panel: conditionally report interactions
* Test
---
.../logs/panelcfg/x/LogsPanelCfg_types.gen.ts | 1 +
.../logs/components/panel/LogLineDetails.tsx | 27 +++++++++++++-
.../panel/LogLineDetailsComponent.tsx | 11 +++++-
.../components/panel/LogLineDetailsFields.tsx | 37 +++++++++++--------
.../components/panel/LogLineDetailsHeader.tsx | 37 +++++++++++++++----
.../logs/components/panel/LogList.test.tsx | 18 +++++++++
.../logs/components/panel/LogList.tsx | 3 ++
.../logs/components/panel/LogListContext.tsx | 34 ++++++++++++++++-
.../logs/components/panel/LogListSearch.tsx | 23 ++++++++----
public/app/plugins/panel/logs/LogsPanel.tsx | 2 +
public/app/plugins/panel/logs/panelcfg.cue | 1 +
public/app/plugins/panel/logs/panelcfg.gen.ts | 1 +
12 files changed, 161 insertions(+), 34 deletions(-)
diff --git a/packages/grafana-schema/src/raw/composable/logs/panelcfg/x/LogsPanelCfg_types.gen.ts b/packages/grafana-schema/src/raw/composable/logs/panelcfg/x/LogsPanelCfg_types.gen.ts
index 956bff430f7..ec66616abc6 100644
--- a/packages/grafana-schema/src/raw/composable/logs/panelcfg/x/LogsPanelCfg_types.gen.ts
+++ b/packages/grafana-schema/src/raw/composable/logs/panelcfg/x/LogsPanelCfg_types.gen.ts
@@ -24,6 +24,7 @@ export interface Options {
logLineMenuCustomItems?: unknown;
logRowMenuIconsAfter?: unknown;
logRowMenuIconsBefore?: unknown;
+ noInteractions?: boolean;
/**
* TODO: figure out how to define callbacks
*/
diff --git a/public/app/features/logs/components/panel/LogLineDetails.tsx b/public/app/features/logs/components/panel/LogLineDetails.tsx
index fee8143396f..1065ec2456e 100644
--- a/public/app/features/logs/components/panel/LogLineDetails.tsx
+++ b/public/app/features/logs/components/panel/LogLineDetails.tsx
@@ -3,6 +3,7 @@ import { Resizable } from 're-resizable';
import { memo, useCallback, useEffect, useRef } from 'react';
import { GrafanaTheme2 } from '@grafana/data';
+import { reportInteraction } from '@grafana/runtime';
import { getDragStyles, useStyles2 } from '@grafana/ui';
import { LogLineDetailsComponent } from './LogLineDetailsComponent';
@@ -20,13 +21,18 @@ export interface Props {
export type LogLineDetailsMode = 'inline' | 'sidebar';
export const LogLineDetails = ({ containerElement, focusLogLine, logs, onResize }: Props) => {
- const { detailsWidth, setDetailsWidth, showDetails } = useLogListContext();
+ const { detailsWidth, noInteractions, setDetailsWidth, showDetails } = useLogListContext();
const styles = useStyles2(getStyles, 'sidebar');
const dragStyles = useStyles2(getDragStyles);
const containerRef = useRef(null);
useEffect(() => {
focusLogLine(showDetails[0]);
+ if (!noInteractions) {
+ reportInteraction('logs_log_line_details_displayed', {
+ mode: 'sidebar',
+ });
+ }
// Just once
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
@@ -38,6 +44,14 @@ export const LogLineDetails = ({ containerElement, focusLogLine, logs, onResize
onResize();
}, [onResize, setDetailsWidth]);
+ const reportResize = useCallback(() => {
+ if (containerRef.current && !noInteractions) {
+ reportInteraction('logs_log_line_details_sidebar_resized', {
+ width: Math.round(containerRef.current.clientWidth),
+ });
+ }
+ }, [noInteractions]);
+
const maxWidth = containerElement.clientWidth - LOG_LIST_MIN_WIDTH;
if (!showDetails.length) {
@@ -47,6 +61,7 @@ export const LogLineDetails = ({ containerElement, focusLogLine, logs, onResize
return (
{
- const { showDetails } = useLogListContext();
+ const { noInteractions, showDetails } = useLogListContext();
const styles = useStyles2(getStyles, 'inline');
const scrollRef = useRef(null);
+ useEffect(() => {
+ if (!noInteractions) {
+ reportInteraction('logs_log_line_details_displayed', {
+ mode: 'inline',
+ });
+ }
+ }, [noInteractions]);
+
const saveScroll = useCallback(() => {
saveDetailsScrollPosition(showDetails[0], scrollRef.current?.scrollTop ?? 0);
}, [showDetails]);
diff --git a/public/app/features/logs/components/panel/LogLineDetailsComponent.tsx b/public/app/features/logs/components/panel/LogLineDetailsComponent.tsx
index d38eff282f9..ca964bdebc2 100644
--- a/public/app/features/logs/components/panel/LogLineDetailsComponent.tsx
+++ b/public/app/features/logs/components/panel/LogLineDetailsComponent.tsx
@@ -4,6 +4,7 @@ import { memo, startTransition, useCallback, useMemo, useRef, useState } from 'r
import { DataFrameType, GrafanaTheme2, store } from '@grafana/data';
import { t, Trans } from '@grafana/i18n';
+import { reportInteraction } from '@grafana/runtime';
import { ControlledCollapse, useStyles2 } from '@grafana/ui';
import { getLabelTypeFromRow } from '../../utils';
@@ -23,7 +24,7 @@ interface LogLineDetailsComponentProps {
}
export const LogLineDetailsComponent = memo(({ log, logs }: LogLineDetailsComponentProps) => {
- const { displayedFields, logOptionsStorageKey, setDisplayedFields } = useLogListContext();
+ const { displayedFields, noInteractions, logOptionsStorageKey, setDisplayedFields } = useLogListContext();
const [search, setSearch] = useState('');
const inputRef = useRef('');
const styles = useStyles2(getStyles);
@@ -75,8 +76,14 @@ export const LogLineDetailsComponent = memo(({ log, logs }: LogLineDetailsCompon
const handleToggle = useCallback(
(option: string, isOpen: boolean) => {
store.set(`${logOptionsStorageKey}.log-details.${option}`, isOpen);
+ if (!noInteractions) {
+ reportInteraction('logs_log_line_details_section_toggled', {
+ section: option.replace('Open', ''),
+ state: isOpen ? 'open' : 'closed',
+ });
+ }
},
- [logOptionsStorageKey]
+ [logOptionsStorageKey, noInteractions]
);
const handleSearch = useCallback((newSearch: string) => {
diff --git a/public/app/features/logs/components/panel/LogLineDetailsFields.tsx b/public/app/features/logs/components/panel/LogLineDetailsFields.tsx
index 3f68e7e829a..2fae9493ee5 100644
--- a/public/app/features/logs/components/panel/LogLineDetailsFields.tsx
+++ b/public/app/features/logs/components/panel/LogLineDetailsFields.tsx
@@ -143,6 +143,7 @@ export const LogLineDetailsField = ({
closeDetails,
displayedFields,
isLabelFilterActive,
+ noInteractions,
onClickFilterLabel,
onClickFilterOutLabel,
onClickShowField,
@@ -179,53 +180,59 @@ export const LogLineDetailsField = ({
}
}, [showFieldsStats, updateStats]);
+ const reportInteractionWrapper = useCallback(
+ (interactionName: string, properties?: Record) => {
+ if (noInteractions) {
+ return;
+ }
+ reportInteraction(interactionName, properties);
+ },
+ [noInteractions]
+ );
+
const showField = useCallback(() => {
if (onClickShowField) {
onClickShowField(keys[0]);
}
- reportInteraction('grafana_explore_logs_log_details_replace_line_clicked', {
+ reportInteractionWrapper('logs_log_line_details_show_field_clicked', {
datasourceType: log.datasourceType,
- logRowUid: log.uid,
- type: 'enable',
});
- }, [onClickShowField, keys, log.datasourceType, log.uid]);
+ }, [onClickShowField, reportInteractionWrapper, log.datasourceType, keys]);
const hideField = useCallback(() => {
if (onClickHideField) {
onClickHideField(keys[0]);
}
- reportInteraction('grafana_explore_logs_log_details_replace_line_clicked', {
+ reportInteractionWrapper('logs_log_line_details_hide_field_clicked', {
datasourceType: log.datasourceType,
- logRowUid: log.uid,
- type: 'disable',
});
- }, [onClickHideField, keys, log.datasourceType, log.uid]);
+ }, [onClickHideField, reportInteractionWrapper, log.datasourceType, keys]);
const filterLabel = useCallback(() => {
if (onClickFilterLabel) {
onClickFilterLabel(keys[0], values[0], logRowToSingleRowDataFrame(log) || undefined);
}
- reportInteraction('grafana_explore_logs_log_details_filter_clicked', {
+ reportInteractionWrapper('logs_log_line_details_filter_clicked', {
datasourceType: log.datasourceType,
filterType: 'include',
logRowUid: log.uid,
});
- }, [onClickFilterLabel, keys, values, log]);
+ }, [onClickFilterLabel, reportInteractionWrapper, log, keys, values]);
const filterOutLabel = useCallback(() => {
if (onClickFilterOutLabel) {
onClickFilterOutLabel(keys[0], values[0], logRowToSingleRowDataFrame(log) || undefined);
}
- reportInteraction('grafana_explore_logs_log_details_filter_clicked', {
+ reportInteractionWrapper('logs_log_line_details_filter_clicked', {
datasourceType: log.datasourceType,
filterType: 'exclude',
logRowUid: log.uid,
});
- }, [onClickFilterOutLabel, keys, values, log]);
+ }, [onClickFilterOutLabel, reportInteractionWrapper, log, keys, values]);
const labelFilterActive = useCallback(async () => {
if (isLabelFilterActive) {
@@ -237,14 +244,14 @@ export const LogLineDetailsField = ({
const showStats = useCallback(() => {
setShowFieldStats((showFieldStats: boolean) => !showFieldStats);
- reportInteraction('grafana_explore_logs_log_details_stats_clicked', {
+ reportInteractionWrapper('logs_log_line_details_stats_clicked', {
dataSourceType: log.datasourceType,
- fieldType: isLabel ? 'label' : 'detectedField',
+ fieldType: isLabel ? 'label' : 'field',
type: showFieldsStats ? 'close' : 'open',
logRowUid: log.uid,
app,
});
- }, [app, isLabel, log.datasourceType, log.uid, showFieldsStats]);
+ }, [app, isLabel, log.datasourceType, log.uid, reportInteractionWrapper, showFieldsStats]);
const refIdTooltip = useMemo(
() => (app === CoreApp.Explore && log.dataFrame?.refId ? ` in query ${log.dataFrame?.refId}` : ''),
diff --git a/public/app/features/logs/components/panel/LogLineDetailsHeader.tsx b/public/app/features/logs/components/panel/LogLineDetailsHeader.tsx
index 140a7f86fca..014a2c6f8a0 100644
--- a/public/app/features/logs/components/panel/LogLineDetailsHeader.tsx
+++ b/public/app/features/logs/components/panel/LogLineDetailsHeader.tsx
@@ -3,6 +3,7 @@ import { useCallback, useMemo, MouseEvent, useRef, ChangeEvent } from 'react';
import { colorManipulator, GrafanaTheme2, LogRowModel, store } from '@grafana/data';
import { t } from '@grafana/i18n';
+import { reportInteraction } from '@grafana/runtime';
import { IconButton, Input, useStyles2 } from '@grafana/ui';
import { copyText, handleOpenLogsContextClick } from '../../utils';
@@ -26,6 +27,7 @@ export const LogLineDetailsHeader = ({ log, search, onSearch }: Props) => {
getRowContextQuery,
logOptionsStorageKey,
logSupportsContext,
+ noInteractions,
setDetailsMode,
onClickHideField,
onClickShowField,
@@ -39,14 +41,27 @@ export const LogLineDetailsHeader = ({ log, search, onSearch }: Props) => {
const styles = useStyles2(getStyles, detailsMode, wrapLogMessage);
const containerRef = useRef(null);
const inputRef = useRef(null);
+ const searchUsedRef = useRef(false);
+
+ const reportInteractionWrapper = useCallback(
+ (interactionName: string, properties?: Record) => {
+ if (noInteractions) {
+ return;
+ }
+ reportInteraction(interactionName, properties);
+ },
+ [noInteractions]
+ );
const copyLogLine = useCallback(() => {
copyText(log.entry, containerRef);
- }, [log.entry]);
+ reportInteractionWrapper('logs_log_line_details_header_copy_clicked');
+ }, [log.entry, reportInteractionWrapper]);
const copyLinkToLogLine = useCallback(() => {
onPermalinkClick?.(log);
- }, [log, onPermalinkClick]);
+ reportInteractionWrapper('logs_log_line_details_header_permalink_clicked');
+ }, [log, onPermalinkClick, reportInteractionWrapper]);
const togglePinning = useCallback(() => {
if (pinned) {
@@ -54,7 +69,8 @@ export const LogLineDetailsHeader = ({ log, search, onSearch }: Props) => {
} else {
onPinLine?.(log);
}
- }, [log, onPinLine, onUnpinLine, pinned]);
+ reportInteractionWrapper('logs_log_line_details_header_pinning_clicked');
+ }, [log, onPinLine, onUnpinLine, pinned, reportInteractionWrapper]);
const shouldlogSupportsContext = useMemo(
() => (logSupportsContext ? logSupportsContext(log) : false),
@@ -64,8 +80,9 @@ export const LogLineDetailsHeader = ({ log, search, onSearch }: Props) => {
const showContext = useCallback(
async (event: MouseEvent) => {
handleOpenLogsContextClick(event, log, getRowContextQuery, (log: LogRowModel) => onOpenContext?.(log, () => {}));
+ reportInteractionWrapper('logs_log_line_details_header_context_clicked');
},
- [onOpenContext, getRowContextQuery, log]
+ [log, getRowContextQuery, reportInteractionWrapper, onOpenContext]
);
const showLogLineToggle = onClickHideField && onClickShowField && displayedFields.length > 0;
@@ -86,7 +103,8 @@ export const LogLineDetailsHeader = ({ log, search, onSearch }: Props) => {
} else {
onClickShowField?.(LOG_LINE_BODY_FIELD_NAME);
}
- }, [logLineDisplayed, onClickHideField, onClickShowField]);
+ reportInteractionWrapper('logs_log_line_details_header_show_logline_clicked');
+ }, [logLineDisplayed, onClickHideField, onClickShowField, reportInteractionWrapper]);
const clearSearch = useMemo(
() => (
@@ -95,6 +113,7 @@ export const LogLineDetailsHeader = ({ log, search, onSearch }: Props) => {
size="sm"
onClick={() => {
onSearch('');
+ reportInteractionWrapper('logs_log_line_details_header_search_cleared');
if (inputRef.current) {
inputRef.current.value = '';
}
@@ -102,14 +121,18 @@ export const LogLineDetailsHeader = ({ log, search, onSearch }: Props) => {
tooltip={t('logs.log-line-details.clear-search', 'Clear')}
/>
),
- [onSearch]
+ [onSearch, reportInteractionWrapper]
);
const handleSearch = useCallback(
(e: ChangeEvent) => {
onSearch(e.target.value);
+ if (!searchUsedRef.current) {
+ reportInteractionWrapper('logs_log_line_details_header_search_used');
+ searchUsedRef.current = true;
+ }
},
- [onSearch]
+ [onSearch, reportInteractionWrapper]
);
return (
diff --git a/public/app/features/logs/components/panel/LogList.test.tsx b/public/app/features/logs/components/panel/LogList.test.tsx
index fde0ea89dec..3d76e63e413 100644
--- a/public/app/features/logs/components/panel/LogList.test.tsx
+++ b/public/app/features/logs/components/panel/LogList.test.tsx
@@ -2,6 +2,7 @@ import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { CoreApp, getDefaultTimeRange, LogRowModel, LogsDedupStrategy, LogsSortOrder, store } from '@grafana/data';
+import { reportInteraction } from '@grafana/runtime';
import { disablePopoverMenu, enablePopoverMenu, isPopoverMenuDisabled } from '../../utils';
import { createLogRow } from '../mocks/logRow';
@@ -12,6 +13,7 @@ jest.mock('@grafana/runtime', () => {
return {
...jest.requireActual('@grafana/runtime'),
usePluginLinks: jest.fn().mockReturnValue({ links: [] }),
+ reportInteraction: jest.fn(),
config: {
...jest.requireActual('@grafana/runtime').config,
featureToggles: {
@@ -338,4 +340,20 @@ describe('LogList', () => {
expect(screen.getByText('some text')).toBeInTheDocument();
});
});
+ describe('Interactions', () => {
+ beforeEach(() => {
+ sessionStorage.clear();
+ jest.mocked(reportInteraction).mockClear();
+ });
+ test('Reports interactions ', async () => {
+ render();
+ await screen.findByText('log message 1');
+ expect(reportInteraction).toHaveBeenCalled();
+ });
+ test('Can disable interaction report ', async () => {
+ render();
+ await screen.findByText('log message 1');
+ expect(reportInteraction).not.toHaveBeenCalled();
+ });
+ });
});
diff --git a/public/app/features/logs/components/panel/LogList.tsx b/public/app/features/logs/components/panel/LogList.tsx
index 1934fd420ac..bbb5eca89c9 100644
--- a/public/app/features/logs/components/panel/LogList.tsx
+++ b/public/app/features/logs/components/panel/LogList.tsx
@@ -59,6 +59,7 @@ export interface Props {
logs: LogRowModel[];
logsMeta?: LogsMetaItem[];
logSupportsContext?: (row: LogRowModel) => boolean;
+ noInteractions?: boolean;
onClickFilterLabel?: (key: string, value: string, frame?: DataFrame) => void;
onClickFilterOutLabel?: (key: string, value: string, frame?: DataFrame) => void;
onClickFilterString?: (value: string, refId?: string) => void;
@@ -124,6 +125,7 @@ export const LogList = ({
logs,
logsMeta,
logSupportsContext,
+ noInteractions,
onClickFilterLabel,
onClickFilterOutLabel,
onClickFilterString,
@@ -165,6 +167,7 @@ export const LogList = ({
logLineMenuCustomItems={logLineMenuCustomItems}
logOptionsStorageKey={logOptionsStorageKey}
logSupportsContext={logSupportsContext}
+ noInteractions={noInteractions}
onClickFilterLabel={onClickFilterLabel}
onClickFilterOutLabel={onClickFilterOutLabel}
onClickFilterString={onClickFilterString}
diff --git a/public/app/features/logs/components/panel/LogListContext.tsx b/public/app/features/logs/components/panel/LogListContext.tsx
index 8a2f4c50d46..bf91981ede7 100644
--- a/public/app/features/logs/components/panel/LogListContext.tsx
+++ b/public/app/features/logs/components/panel/LogListContext.tsx
@@ -22,7 +22,7 @@ import {
shallowCompare,
store,
} from '@grafana/data';
-import { config } from '@grafana/runtime';
+import { config, reportInteraction } from '@grafana/runtime';
import { PopoverContent } from '@grafana/ui';
import { DownloadFormat, checkLogsError, checkLogsSampled, downloadLogs as download } from '../../utils';
@@ -79,6 +79,7 @@ export const LogListContext = createContext({
forceEscape: false,
fontSize: 'default',
hasUnescapedContent: false,
+ noInteractions: false,
setDedupStrategy: () => {},
setDetailsMode: () => {},
setDetailsWidth: () => {},
@@ -153,6 +154,7 @@ export interface Props {
logsMeta?: LogsMetaItem[];
logOptionsStorageKey?: string;
logSupportsContext?: (row: LogRowModel) => boolean;
+ noInteractions?: boolean;
onClickFilterLabel?: (key: string, value: string, frame?: DataFrame) => void;
onClickFilterOutLabel?: (key: string, value: string, frame?: DataFrame) => void;
onClickFilterString?: (value: string, refId?: string) => void;
@@ -195,6 +197,7 @@ export const LogListContextProvider = ({
logsMeta,
logOptionsStorageKey,
logSupportsContext,
+ noInteractions,
onClickFilterLabel,
onClickFilterOutLabel,
onClickFilterString,
@@ -237,6 +240,25 @@ export const LogListContextProvider = ({
const [detailsWidth, setDetailsWidthState] = useState(getDetailsWidth(containerElement, logOptionsStorageKey));
const [detailsMode, setDetailsMode] = useState(detailsModeProp ?? 'sidebar');
+ useEffect(() => {
+ if (noInteractions) {
+ return;
+ }
+ reportInteractionOnce(`logs_log_list_${app}_logs_displayed`, {
+ dedupStrategy,
+ fontSize,
+ forceEscape: logListState.forceEscape,
+ showTime,
+ syntaxHighlighting,
+ wrapLogMessage,
+ detailsWidth,
+ detailsMode,
+ withDisplayedFields: displayedFields.length > 0,
+ });
+ // Just once
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, []);
+
useEffect(() => {
if (displayedFields.length > 0 || !config.featureToggles.otelLogsFormatting || !setDisplayedFields) {
return;
@@ -510,6 +532,7 @@ export const LogListContextProvider = ({
logSupportsContext,
logLineMenuCustomItems,
logOptionsStorageKey,
+ noInteractions: noInteractions ?? false,
onClickFilterLabel,
onClickFilterOutLabel,
onClickFilterString,
@@ -605,3 +628,12 @@ export function getDetailsScrollPosition(log: LogListModel) {
export function removeDetailsScrollPosition(log: LogListModel) {
detailsScrollMap.delete(log.uid);
}
+
+const reportInteractionOnce = (interactionName: string, properties?: Record) => {
+ const key = `logs.log-list-context.events.${interactionName}`;
+ if (sessionStorage.getItem(key)) {
+ return;
+ }
+ sessionStorage.setItem(key, '1');
+ reportInteraction(interactionName, properties);
+};
diff --git a/public/app/features/logs/components/panel/LogListSearch.tsx b/public/app/features/logs/components/panel/LogListSearch.tsx
index c47dea1449f..3cdd1cbbe3d 100644
--- a/public/app/features/logs/components/panel/LogListSearch.tsx
+++ b/public/app/features/logs/components/panel/LogListSearch.tsx
@@ -4,6 +4,7 @@ import { VariableSizeList } from 'react-window';
import { escapeRegex, GrafanaTheme2, shallowCompare } from '@grafana/data';
import { t } from '@grafana/i18n';
+import { reportInteraction } from '@grafana/runtime';
import { IconButton, Input, useStyles2 } from '@grafana/ui';
import { useLogListContext } from './LogListContext';
@@ -26,10 +27,11 @@ export const LogListSearch = ({ listRef, logs }: Props) => {
searchVisible,
toggleFilterLogs,
} = useLogListSearchContext();
- const { displayedFields } = useLogListContext();
+ const { displayedFields, noInteractions } = useLogListContext();
const [search, setSearch] = useState('');
const [currentResult, setCurrentResult] = useState(null);
const inputRef = useRef('');
+ const searchUsedRef = useRef(false);
const styles = useStyles2(getStyles);
const matches = useMemo(() => {
@@ -39,12 +41,19 @@ export const LogListSearch = ({ listRef, logs }: Props) => {
return findMatchingLogs(logs, search, displayedFields);
}, [displayedFields, logs, search, searchVisible]);
- const handleChange = useCallback((e: ChangeEvent) => {
- inputRef.current = e.target.value;
- startTransition(() => {
- setSearch(inputRef.current);
- });
- }, []);
+ const handleChange = useCallback(
+ (e: ChangeEvent) => {
+ inputRef.current = e.target.value;
+ startTransition(() => {
+ setSearch(inputRef.current);
+ });
+ if (!searchUsedRef.current && !noInteractions) {
+ reportInteraction('logs_log_list_search_used');
+ searchUsedRef.current = true;
+ }
+ },
+ [noInteractions]
+ );
const prevResult = useCallback(() => {
if (currentResult === null) {
diff --git a/public/app/plugins/panel/logs/LogsPanel.tsx b/public/app/plugins/panel/logs/LogsPanel.tsx
index 03f2ffbfc35..ca44d725502 100644
--- a/public/app/plugins/panel/logs/LogsPanel.tsx
+++ b/public/app/plugins/panel/logs/LogsPanel.tsx
@@ -164,6 +164,7 @@ export const LogsPanel = ({
fontSize,
syntaxHighlighting,
detailsMode: detailsModeProp,
+ noInteractions,
...options
},
id,
@@ -566,6 +567,7 @@ export const LogsPanel = ({
logs={deduplicatedRows}
logSupportsContext={showContextToggle}
loadMore={enableInfiniteScrolling ? loadMoreLogs : undefined}
+ noInteractions={noInteractions}
onClickFilterLabel={
isOnClickFilterLabel(onClickFilterLabel) ? onClickFilterLabel : defaultOnClickFilterLabel
}
diff --git a/public/app/plugins/panel/logs/panelcfg.cue b/public/app/plugins/panel/logs/panelcfg.cue
index 5f7ac972318..1f8f16fe13b 100644
--- a/public/app/plugins/panel/logs/panelcfg.cue
+++ b/public/app/plugins/panel/logs/panelcfg.cue
@@ -39,6 +39,7 @@ composableKinds: PanelCfg: {
sortOrder: common.LogsSortOrder
dedupStrategy: common.LogsDedupStrategy
enableInfiniteScrolling?: bool
+ noInteractions?: bool
fontSize?: "default" | "small" @cuetsy(kind="enum", memberNames="default|small")
detailsMode?: "inline" | "sidebar" @cuetsy(kind="enum", memberNames="inline|sidebar")
// TODO: figure out how to define callbacks
diff --git a/public/app/plugins/panel/logs/panelcfg.gen.ts b/public/app/plugins/panel/logs/panelcfg.gen.ts
index 3d28ef5ff55..ef4c192dbe2 100644
--- a/public/app/plugins/panel/logs/panelcfg.gen.ts
+++ b/public/app/plugins/panel/logs/panelcfg.gen.ts
@@ -22,6 +22,7 @@ export interface Options {
logLineMenuCustomItems?: unknown;
logRowMenuIconsAfter?: unknown;
logRowMenuIconsBefore?: unknown;
+ noInteractions?: boolean;
/**
* TODO: figure out how to define callbacks
*/
From 446054a61d90d4cfb80453eb638be79ba0f086d5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20Jim=C3=A9nez=20S=C3=A1nchez?=
Date: Fri, 18 Jul 2025 13:24:58 +0200
Subject: [PATCH 20/46] Provisioning: fix race condition in usage metrics
collection (#108289)
* Register usage stats after lister is created
For enterprise where metrics are collected more frequently and in
different ways the collection was happening before the listing was
initialized.
* Move usage to separate package
---
pkg/registry/apis/provisioning/register.go | 14 ++-
pkg/registry/apis/provisioning/usage.go | 78 -----------------
pkg/registry/apis/provisioning/usage/usage.go | 85 +++++++++++++++++++
3 files changed, 96 insertions(+), 81 deletions(-)
delete mode 100644 pkg/registry/apis/provisioning/usage.go
create mode 100644 pkg/registry/apis/provisioning/usage/usage.go
diff --git a/pkg/registry/apis/provisioning/register.go b/pkg/registry/apis/provisioning/register.go
index 4e4ba04d578..ba114092b66 100644
--- a/pkg/registry/apis/provisioning/register.go
+++ b/pkg/registry/apis/provisioning/register.go
@@ -54,6 +54,7 @@ import (
"github.com/grafana/grafana/pkg/registry/apis/provisioning/resources/signature"
"github.com/grafana/grafana/pkg/registry/apis/provisioning/safepath"
"github.com/grafana/grafana/pkg/registry/apis/provisioning/secrets"
+ "github.com/grafana/grafana/pkg/registry/apis/provisioning/usage"
"github.com/grafana/grafana/pkg/services/apiserver"
"github.com/grafana/grafana/pkg/services/apiserver/builder"
"github.com/grafana/grafana/pkg/services/featuremgmt"
@@ -74,7 +75,8 @@ var (
)
type APIBuilder struct {
- features featuremgmt.FeatureToggles
+ features featuremgmt.FeatureToggles
+ usageStats usagestats.Service
tracer tracing.Tracer
getter rest.Getter
@@ -117,6 +119,7 @@ func NewAPIBuilder(
ghFactory *github.Factory,
legacyMigrator legacy.LegacyMigrator,
storageStatus dualwrite.Service,
+ usageStats usagestats.Service,
repositorySecrets secrets.RepositorySecrets,
access authlib.AccessChecker,
tracer tracing.Tracer,
@@ -134,6 +137,7 @@ func NewAPIBuilder(
b := &APIBuilder{
mutators: mutators,
tracer: tracer,
+ usageStats: usageStats,
localFileResolver: local,
features: features,
ghFactory: ghFactory,
@@ -184,7 +188,7 @@ func RegisterAPIService(
access authlib.AccessClient,
legacyMigrator legacy.LegacyMigrator,
storageStatus dualwrite.Service,
- usageStatsService usagestats.Service,
+ usageStats usagestats.Service,
repositorySecrets secrets.RepositorySecrets,
tracer tracing.Tracer,
extraBuilders []ExtraBuilder,
@@ -202,13 +206,13 @@ func RegisterAPIService(
filepath.Join(cfg.DataPath, "clone"), // where repositories are cloned (temporarialy for now)
configProvider, ghFactory,
legacyMigrator, storageStatus,
+ usageStats,
repositorySecrets,
access,
tracer,
extraBuilders,
)
apiregistration.RegisterAPI(builder)
- usageStatsService.RegisterMetricsFunc(builder.collectProvisioningStats)
return builder, nil
}
@@ -596,6 +600,10 @@ func (b *APIBuilder) GetPostStartHooks() (map[string]genericapiserver.PostStartH
b.repositoryLister = repoInformer.Lister()
+ // Create the repository resources factory
+ usageMetricCollector := usage.MetricCollector(b.tracer, b.repositoryLister, b.unified)
+ b.usageStats.RegisterMetricsFunc(usageMetricCollector)
+
stageIfPossible := repository.WrapWithStageAndPushIfPossible
exportWorker := export.NewExportWorker(
b.clients,
diff --git a/pkg/registry/apis/provisioning/usage.go b/pkg/registry/apis/provisioning/usage.go
deleted file mode 100644
index 205a3018662..00000000000
--- a/pkg/registry/apis/provisioning/usage.go
+++ /dev/null
@@ -1,78 +0,0 @@
-package provisioning
-
-import (
- "context"
- "fmt"
-
- "go.opentelemetry.io/otel/attribute"
- "go.opentelemetry.io/otel/codes"
- "k8s.io/apimachinery/pkg/labels"
- "k8s.io/apiserver/pkg/endpoints/request"
-
- "github.com/grafana/grafana/pkg/apimachinery/identity"
- "github.com/grafana/grafana/pkg/storage/unified/resourcepb"
-)
-
-func (b *APIBuilder) collectProvisioningStats(ctx context.Context) (metrics map[string]any, err error) {
- ctx, span := b.tracer.Start(ctx, "Provisioning.Usage.collectProvisioningStats")
- defer func() {
- span.SetStatus(codes.Error, fmt.Sprintf("failed to fetch provisioning usage stats: %v", err))
- span.End()
- }()
-
- m := map[string]any{}
- if b.unified == nil {
- span.SetStatus(codes.Ok, "unified storage is not available")
- return m, nil
- }
-
- // FIXME: hardcoded to "default" for now -- it works for single tenant deployments
- // we could discover the set of valid namespaces, but that would count everything for
- // each instance in cloud.
- ns := "default"
- ctx, _, err = identity.WithProvisioningIdentity(ctx, ns)
- if err != nil {
- return nil, err
- }
- ctx = request.WithNamespace(ctx, ns)
-
- // FIXME: hardcoded to "default" for now -- it works for single tenant deployments
- // we could discover the set of valid namespaces, but that would count everything for
- // each instance in cloud.
- //
- // We could get namespaces from the list of repos below, but that could be zero
- // while we still have resources managed by terraform, etc
- count, err := b.unified.CountManagedObjects(ctx, &resourcepb.CountManagedObjectsRequest{
- Namespace: ns,
- })
- if err != nil {
- return m, fmt.Errorf("count managed objects: %w", err)
- }
- counts := make(map[string]int, 10)
- for _, v := range count.Items {
- counts[v.Kind] = counts[v.Kind] + int(v.Count)
- }
-
- span.SetAttributes(attribute.Int("totalManagedObjectsCount", len(count.Items)))
- for k, v := range counts {
- m[fmt.Sprintf("stats.managed_by.%s.count", k)] = v
- }
-
- // Inspect all configs
- repos, err := b.repositoryLister.List(labels.Everything())
- if err != nil {
- return m, fmt.Errorf("list repositories: %w", err)
- }
- clear(counts)
- for _, repo := range repos {
- counts[string(repo.Spec.Type)] = counts[string(repo.Spec.Type)] + 1
- }
-
- span.SetAttributes(attribute.Int("repositoryCount", len(repos)))
- // Count how many items of each repository type
- for k, v := range counts {
- m[fmt.Sprintf("stats.repository.%s.count", k)] = v
- }
-
- return m, nil
-}
diff --git a/pkg/registry/apis/provisioning/usage/usage.go b/pkg/registry/apis/provisioning/usage/usage.go
new file mode 100644
index 00000000000..485c9fe19e4
--- /dev/null
+++ b/pkg/registry/apis/provisioning/usage/usage.go
@@ -0,0 +1,85 @@
+package usage
+
+import (
+ "context"
+ "fmt"
+
+ "go.opentelemetry.io/otel/attribute"
+ "go.opentelemetry.io/otel/codes"
+ "k8s.io/apimachinery/pkg/labels"
+ "k8s.io/apiserver/pkg/endpoints/request"
+
+ "github.com/grafana/grafana/pkg/apimachinery/identity"
+ listers "github.com/grafana/grafana/pkg/generated/listers/provisioning/v0alpha1"
+ "github.com/grafana/grafana/pkg/infra/tracing"
+ "github.com/grafana/grafana/pkg/infra/usagestats"
+ "github.com/grafana/grafana/pkg/storage/unified/resource"
+ "github.com/grafana/grafana/pkg/storage/unified/resourcepb"
+)
+
+func MetricCollector(tracer tracing.Tracer, repositoryLister listers.RepositoryLister, unified resource.ResourceClient) usagestats.MetricsFunc {
+ return func(ctx context.Context) (metrics map[string]any, err error) {
+ ctx, span := tracer.Start(ctx, "Provisioning.Usage.collectProvisioningStats")
+ defer func() {
+ span.SetStatus(codes.Error, fmt.Sprintf("failed to fetch provisioning usage stats: %v", err))
+ span.End()
+ }()
+
+ m := map[string]any{}
+ if unified == nil {
+ // FIXME: does this case make any sense? no unified storage -> no game
+ span.SetStatus(codes.Ok, "unified storage is not available")
+ return m, nil
+ }
+
+ // FIXME: hardcoded to "default" for now -- it works for single tenant deployments
+ // we could discover the set of valid namespaces, but that would count everything for
+ // each instance in cloud.
+ ns := "default"
+ ctx, _, err = identity.WithProvisioningIdentity(ctx, ns)
+ if err != nil {
+ return nil, err
+ }
+ ctx = request.WithNamespace(ctx, ns)
+
+ // FIXME: hardcoded to "default" for now -- it works for single tenant deployments
+ // we could discover the set of valid namespaces, but that would count everything for
+ // each instance in cloud.
+ //
+ // We could get namespaces from the list of repos below, but that could be zero
+ // while we still have resources managed by terraform, etc
+ count, err := unified.CountManagedObjects(ctx, &resourcepb.CountManagedObjectsRequest{
+ Namespace: ns,
+ })
+ if err != nil {
+ return m, fmt.Errorf("count managed objects: %w", err)
+ }
+ counts := make(map[string]int, 10)
+ for _, v := range count.Items {
+ counts[v.Kind] = counts[v.Kind] + int(v.Count)
+ }
+
+ span.SetAttributes(attribute.Int("totalManagedObjectsCount", len(count.Items)))
+ for k, v := range counts {
+ m[fmt.Sprintf("stats.managed_by.%s.count", k)] = v
+ }
+
+ // Inspect all configs
+ repos, err := repositoryLister.List(labels.Everything())
+ if err != nil {
+ return m, fmt.Errorf("list repositories: %w", err)
+ }
+ clear(counts)
+ for _, repo := range repos {
+ counts[string(repo.Spec.Type)] = counts[string(repo.Spec.Type)] + 1
+ }
+
+ span.SetAttributes(attribute.Int("repositoryCount", len(repos)))
+ // Count how many items of each repository type
+ for k, v := range counts {
+ m[fmt.Sprintf("stats.repository.%s.count", k)] = v
+ }
+
+ return m, nil
+ }
+}
From 4847882ee76d819c5342ab8cc24ebda28d9ff4b9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20Jim=C3=A9nez=20S=C3=A1nchez?=
Date: Fri, 18 Jul 2025 13:25:21 +0200
Subject: [PATCH 21/46] Provisioning: handle .git extension more gracefully
(#108213)
* Move .git to repository packages
* Bump nanogit 2025-07-17
This version handles `.git` extension internally so that the client
doesn't have to worry about it
* Put back mutation for Github
* Mutate also git URL for clarity
---
go.mod | 2 +-
go.sum | 4 +-
pkg/registry/apis/provisioning/register.go | 35 -----
.../provisioning/repository/git/mutator.go | 21 ++-
.../repository/git/mutator_test.go | 127 +++++++++++++++++-
.../provisioning/repository/github/mutator.go | 10 ++
.../repository/github/mutator_test.go | 68 ++++++++++
.../repository/github/repository.go | 5 +-
8 files changed, 231 insertions(+), 41 deletions(-)
diff --git a/go.mod b/go.mod
index b922613a0a8..b3a1af0ab63 100644
--- a/go.mod
+++ b/go.mod
@@ -104,7 +104,7 @@ require (
github.com/grafana/grafana-openapi-client-go v0.0.0-20231213163343-bd475d63fb79 // @grafana/grafana-backend-group
github.com/grafana/grafana-plugin-sdk-go v0.278.0 // @grafana/plugins-platform-backend
github.com/grafana/loki/v3 v3.2.1 // @grafana/observability-logs
- github.com/grafana/nanogit v0.0.0-20250709085038-55508a6a9f40 // @grafana-app-platform-squad
+ github.com/grafana/nanogit v0.0.0-20250717084510-7027b3f0138e // @grafana-app-platform-squad
github.com/grafana/otel-profiling-go v0.5.1 // @grafana/grafana-backend-group
github.com/grafana/pyroscope-go/godeltaprof v0.1.8 // @grafana/observability-traces-and-profiling
github.com/grafana/pyroscope/api v1.2.1-0.20250415190842-3ff7247547ae // @grafana/observability-traces-and-profiling
diff --git a/go.sum b/go.sum
index f13cfc2dc32..292d12d19c4 100644
--- a/go.sum
+++ b/go.sum
@@ -1641,8 +1641,8 @@ github.com/grafana/loki/pkg/push v0.0.0-20231124142027-e52380921608 h1:ZYk42718k
github.com/grafana/loki/pkg/push v0.0.0-20231124142027-e52380921608/go.mod h1:f3JSoxBTPXX5ec4FxxeC19nTBSxoTz+cBgS3cYLMcr0=
github.com/grafana/loki/v3 v3.2.1 h1:VB7u+KHfvL5aHAxgoVBvz5wVhsdGuqKC7uuOFOOe7jw=
github.com/grafana/loki/v3 v3.2.1/go.mod h1:WvdLl6wOS+yahaeQY+xhD2m2XzkHDfKr5FZaX7D/X2Y=
-github.com/grafana/nanogit v0.0.0-20250709085038-55508a6a9f40 h1:wsIgOI4Ou1o/UtxtJlemLufpVBpMdcXVJxedk0wLoCM=
-github.com/grafana/nanogit v0.0.0-20250709085038-55508a6a9f40/go.mod h1:ToqLjIdvV3AZQa3K6e5m9hy/nsGaUByc2dWQlctB9iA=
+github.com/grafana/nanogit v0.0.0-20250717084510-7027b3f0138e h1:IcrC8SqJcNbGlNq0nqptJ4X8pyy21smMaFrhA7DrfYg=
+github.com/grafana/nanogit v0.0.0-20250717084510-7027b3f0138e/go.mod h1:ToqLjIdvV3AZQa3K6e5m9hy/nsGaUByc2dWQlctB9iA=
github.com/grafana/otel-profiling-go v0.5.1 h1:stVPKAFZSa7eGiqbYuG25VcqYksR6iWvF3YH66t4qL8=
github.com/grafana/otel-profiling-go v0.5.1/go.mod h1:ftN/t5A/4gQI19/8MoWurBEtC6gFw8Dns1sJZ9W4Tls=
github.com/grafana/prometheus-alertmanager v0.25.1-0.20250620093340-be61a673dee6 h1:oJnbhG6ZNy10AjsgNeAtAKeGHogIGOMfAsBH6fYYa5M=
diff --git a/pkg/registry/apis/provisioning/register.go b/pkg/registry/apis/provisioning/register.go
index ba114092b66..e3209fa7026 100644
--- a/pkg/registry/apis/provisioning/register.go
+++ b/pkg/registry/apis/provisioning/register.go
@@ -438,41 +438,6 @@ func (b *APIBuilder) Mutate(ctx context.Context, a admission.Attributes, o admis
r.Spec.Sync.IntervalSeconds = 60
}
- // TODO: move this logic into github repository concrete implementation.
- if r.Spec.Type == provisioning.GitHubRepositoryType {
- if r.Spec.GitHub == nil {
- return fmt.Errorf("github configuration is required")
- }
-
- // Trim trailing slash or .git
- if len(r.Spec.GitHub.URL) > 5 {
- r.Spec.GitHub.URL = strings.TrimSuffix(r.Spec.GitHub.URL, ".git")
- r.Spec.GitHub.URL = strings.TrimSuffix(r.Spec.GitHub.URL, "/")
- }
- }
- if r.Spec.Type == provisioning.GitRepositoryType {
- if r.Spec.Git == nil {
- return fmt.Errorf("git configuration is required")
- }
-
- if r.Spec.GitHub != nil {
- return fmt.Errorf("git and github cannot be used together")
- }
-
- if r.Spec.Local != nil {
- return fmt.Errorf("git and local cannot be used together")
- }
-
- // Trim trailing slash and ensure .git is present
- if len(r.Spec.Git.URL) > 5 {
- r.Spec.Git.URL = strings.TrimSuffix(r.Spec.Git.URL, "/")
-
- if !strings.HasSuffix(r.Spec.Git.URL, ".git") {
- r.Spec.Git.URL = r.Spec.Git.URL + ".git"
- }
- }
- }
-
if r.Spec.Workflows == nil {
r.Spec.Workflows = []provisioning.Workflow{}
}
diff --git a/pkg/registry/apis/provisioning/repository/git/mutator.go b/pkg/registry/apis/provisioning/repository/git/mutator.go
index a67f473b82d..e68940fafb8 100644
--- a/pkg/registry/apis/provisioning/repository/git/mutator.go
+++ b/pkg/registry/apis/provisioning/repository/git/mutator.go
@@ -2,6 +2,8 @@ package git
import (
"context"
+ "fmt"
+ "strings"
"k8s.io/apimachinery/pkg/runtime"
@@ -17,10 +19,27 @@ func Mutator(secrets secrets.RepositorySecrets) controller.Mutator {
return nil
}
- if repo.Spec.Git == nil {
+ if repo.Spec.Type != provisioning.GitRepositoryType {
return nil
}
+ if repo.Spec.Git == nil {
+ return fmt.Errorf("git configuration is required for git repository type")
+ }
+
+ if repo.Spec.Git.URL != "" {
+ url := strings.TrimSpace(repo.Spec.Git.URL)
+ if url != "" {
+ // Remove any trailing slashes
+ url = strings.TrimRight(url, "/")
+ // Only add .git if it's not already present
+ if !strings.HasSuffix(url, ".git") {
+ url = url + ".git"
+ }
+ repo.Spec.Git.URL = url
+ }
+ }
+
if repo.Spec.Git.Token != "" {
secretName := repo.Name + gitTokenSecretSuffix
nameOrValue, err := secrets.Encrypt(ctx, repo, secretName, repo.Spec.Git.Token)
diff --git a/pkg/registry/apis/provisioning/repository/git/mutator_test.go b/pkg/registry/apis/provisioning/repository/git/mutator_test.go
index f924b1b2146..87196d6bcb0 100644
--- a/pkg/registry/apis/provisioning/repository/git/mutator_test.go
+++ b/pkg/registry/apis/provisioning/repository/git/mutator_test.go
@@ -21,6 +21,7 @@ func TestMutator(t *testing.T) {
expectedToken string
expectedEncryptedToken string
expectedError string
+ expectedURL string
}{
{
name: "successful token encryption",
@@ -30,6 +31,7 @@ func TestMutator(t *testing.T) {
Namespace: "default",
},
Spec: provisioning.RepositorySpec{
+ Type: provisioning.GitRepositoryType,
Git: &provisioning.GitRepositoryConfig{
Token: "secret-token",
},
@@ -44,6 +46,7 @@ func TestMutator(t *testing.T) {
Namespace: "default",
},
Spec: provisioning.RepositorySpec{
+ Type: provisioning.GitRepositoryType,
Git: &provisioning.GitRepositoryConfig{
Token: "secret-token",
},
@@ -64,6 +67,7 @@ func TestMutator(t *testing.T) {
Namespace: "default",
},
Spec: provisioning.RepositorySpec{
+ Type: provisioning.GitRepositoryType,
Git: &provisioning.GitRepositoryConfig{
Token: "secret-token",
},
@@ -78,6 +82,7 @@ func TestMutator(t *testing.T) {
Namespace: "default",
},
Spec: provisioning.RepositorySpec{
+ Type: provisioning.GitRepositoryType,
Git: &provisioning.GitRepositoryConfig{
Token: "secret-token",
},
@@ -97,13 +102,32 @@ func TestMutator(t *testing.T) {
Namespace: "default",
},
Spec: provisioning.RepositorySpec{
- Git: nil,
+ Type: provisioning.LocalRepositoryType,
+ Git: nil,
},
},
setupMocks: func(mockSecrets *secrets.MockRepositorySecrets) {
// No expectations
},
},
+
+ {
+ name: "no git spec for git repository type",
+ obj: &provisioning.Repository{
+ ObjectMeta: metav1.ObjectMeta{
+ Name: "test-repo",
+ Namespace: "default",
+ },
+ Spec: provisioning.RepositorySpec{
+ Type: provisioning.GitRepositoryType,
+ Git: nil,
+ },
+ },
+ setupMocks: func(mockSecrets *secrets.MockRepositorySecrets) {
+ // No expectations
+ },
+ expectedError: "git configuration is required for git repository type",
+ },
{
name: "empty token",
obj: &provisioning.Repository{
@@ -112,6 +136,7 @@ func TestMutator(t *testing.T) {
Namespace: "default",
},
Spec: provisioning.RepositorySpec{
+ Type: provisioning.GitRepositoryType,
Git: &provisioning.GitRepositoryConfig{
Token: "",
},
@@ -128,6 +153,101 @@ func TestMutator(t *testing.T) {
// No expectations
},
},
+ {
+ name: "URL normalization - add .git suffix",
+ obj: &provisioning.Repository{
+ ObjectMeta: metav1.ObjectMeta{
+ Name: "test-repo",
+ Namespace: "default",
+ },
+ Spec: provisioning.RepositorySpec{
+ Type: provisioning.GitRepositoryType,
+ Git: &provisioning.GitRepositoryConfig{
+ URL: "https://github.com/grafana/grafana",
+ },
+ },
+ },
+ setupMocks: func(mockSecrets *secrets.MockRepositorySecrets) {
+ // No expectations
+ },
+ expectedURL: "https://github.com/grafana/grafana.git",
+ },
+ {
+ name: "URL normalization - keep existing .git suffix",
+ obj: &provisioning.Repository{
+ ObjectMeta: metav1.ObjectMeta{
+ Name: "test-repo",
+ Namespace: "default",
+ },
+ Spec: provisioning.RepositorySpec{
+ Type: provisioning.GitRepositoryType,
+ Git: &provisioning.GitRepositoryConfig{
+ URL: "https://github.com/grafana/grafana.git",
+ },
+ },
+ },
+ setupMocks: func(mockSecrets *secrets.MockRepositorySecrets) {
+ // No expectations
+ },
+ expectedURL: "https://github.com/grafana/grafana.git",
+ },
+ {
+ name: "URL normalization - remove trailing slash and add .git",
+ obj: &provisioning.Repository{
+ ObjectMeta: metav1.ObjectMeta{
+ Name: "test-repo",
+ Namespace: "default",
+ },
+ Spec: provisioning.RepositorySpec{
+ Type: provisioning.GitRepositoryType,
+ Git: &provisioning.GitRepositoryConfig{
+ URL: "https://github.com/grafana/grafana/",
+ },
+ },
+ },
+ setupMocks: func(mockSecrets *secrets.MockRepositorySecrets) {
+ // No expectations
+ },
+ expectedURL: "https://github.com/grafana/grafana.git",
+ },
+ {
+ name: "URL normalization - trim whitespace and add .git",
+ obj: &provisioning.Repository{
+ ObjectMeta: metav1.ObjectMeta{
+ Name: "test-repo",
+ Namespace: "default",
+ },
+ Spec: provisioning.RepositorySpec{
+ Type: provisioning.GitRepositoryType,
+ Git: &provisioning.GitRepositoryConfig{
+ URL: " https://github.com/grafana/grafana ",
+ },
+ },
+ },
+ setupMocks: func(mockSecrets *secrets.MockRepositorySecrets) {
+ // No expectations
+ },
+ expectedURL: "https://github.com/grafana/grafana.git",
+ },
+ {
+ name: "URL normalization - empty URL after trim",
+ obj: &provisioning.Repository{
+ ObjectMeta: metav1.ObjectMeta{
+ Name: "test-repo",
+ Namespace: "default",
+ },
+ Spec: provisioning.RepositorySpec{
+ Type: provisioning.GitRepositoryType,
+ Git: &provisioning.GitRepositoryConfig{
+ URL: " ",
+ },
+ },
+ },
+ setupMocks: func(mockSecrets *secrets.MockRepositorySecrets) {
+ // No expectations
+ },
+ expectedURL: "",
+ },
}
for _, tt := range tests {
@@ -152,6 +272,11 @@ func TestMutator(t *testing.T) {
// EncryptedToken should be set to the expected value
assert.Equal(t, tt.expectedEncryptedToken, string(repo.Spec.Git.EncryptedToken), "EncryptedToken should match expected value")
}
+
+ // Check URL normalization
+ if tt.expectedURL != "" {
+ assert.Equal(t, tt.expectedURL, repo.Spec.Git.URL, "URL should be normalized correctly")
+ }
}
}
})
diff --git a/pkg/registry/apis/provisioning/repository/github/mutator.go b/pkg/registry/apis/provisioning/repository/github/mutator.go
index 2c7c4a57827..4aec95aa7d6 100644
--- a/pkg/registry/apis/provisioning/repository/github/mutator.go
+++ b/pkg/registry/apis/provisioning/repository/github/mutator.go
@@ -2,6 +2,7 @@ package github
import (
"context"
+ "strings"
"k8s.io/apimachinery/pkg/runtime"
@@ -21,6 +22,15 @@ func Mutator(secrets secrets.RepositorySecrets) controller.Mutator {
return nil
}
+ // Trim trailing ".git" and any trailing slash from the GitHub URL, if present, using the strings package.
+ if repo.Spec.GitHub.URL != "" {
+ url := repo.Spec.GitHub.URL
+ url = strings.TrimRight(url, "/")
+ url = strings.TrimSuffix(url, ".git")
+ url = strings.TrimRight(url, "/")
+ repo.Spec.GitHub.URL = url
+ }
+
if repo.Spec.GitHub.Token != "" {
secretName := repo.Name + githubTokenSecretSuffix
nameOrValue, err := secrets.Encrypt(ctx, repo, secretName, repo.Spec.GitHub.Token)
diff --git a/pkg/registry/apis/provisioning/repository/github/mutator_test.go b/pkg/registry/apis/provisioning/repository/github/mutator_test.go
index c60d53b5e88..a6bbbe22c11 100644
--- a/pkg/registry/apis/provisioning/repository/github/mutator_test.go
+++ b/pkg/registry/apis/provisioning/repository/github/mutator_test.go
@@ -22,6 +22,74 @@ func TestMutator(t *testing.T) {
expectedEncryptedToken string
expectedError string
}{
+ {
+ name: "trims trailing .git and slash from GitHub URL",
+ obj: &provisioning.Repository{
+ ObjectMeta: metav1.ObjectMeta{
+ Name: "repo1",
+ Namespace: "default",
+ },
+ Spec: provisioning.RepositorySpec{
+ GitHub: &provisioning.GitHubRepositoryConfig{
+ URL: "https://github.com/org/repo.git/",
+ },
+ },
+ },
+ setupMocks: func(mockSecrets *secrets.MockRepositorySecrets) {},
+ expectedToken: "",
+ expectedEncryptedToken: "",
+ },
+ {
+ name: "trims only trailing slash from GitHub URL",
+ obj: &provisioning.Repository{
+ ObjectMeta: metav1.ObjectMeta{
+ Name: "repo2",
+ Namespace: "default",
+ },
+ Spec: provisioning.RepositorySpec{
+ GitHub: &provisioning.GitHubRepositoryConfig{
+ URL: "https://github.com/org/repo/",
+ },
+ },
+ },
+ setupMocks: func(mockSecrets *secrets.MockRepositorySecrets) {},
+ expectedToken: "",
+ expectedEncryptedToken: "",
+ },
+ {
+ name: "trims only trailing .git from GitHub URL",
+ obj: &provisioning.Repository{
+ ObjectMeta: metav1.ObjectMeta{
+ Name: "repo3",
+ Namespace: "default",
+ },
+ Spec: provisioning.RepositorySpec{
+ GitHub: &provisioning.GitHubRepositoryConfig{
+ URL: "https://github.com/org/repo.git",
+ },
+ },
+ },
+ setupMocks: func(mockSecrets *secrets.MockRepositorySecrets) {},
+ expectedToken: "",
+ expectedEncryptedToken: "",
+ },
+ {
+ name: "does not trim if no .git or slash",
+ obj: &provisioning.Repository{
+ ObjectMeta: metav1.ObjectMeta{
+ Name: "repo4",
+ Namespace: "default",
+ },
+ Spec: provisioning.RepositorySpec{
+ GitHub: &provisioning.GitHubRepositoryConfig{
+ URL: "https://github.com/org/repo",
+ },
+ },
+ },
+ setupMocks: func(mockSecrets *secrets.MockRepositorySecrets) {},
+ expectedToken: "",
+ expectedEncryptedToken: "",
+ },
{
name: "successful token encryption",
obj: &provisioning.Repository{
diff --git a/pkg/registry/apis/provisioning/repository/github/repository.go b/pkg/registry/apis/provisioning/repository/github/repository.go
index e7aed375242..e6cc5aa304d 100644
--- a/pkg/registry/apis/provisioning/repository/github/repository.go
+++ b/pkg/registry/apis/provisioning/repository/github/repository.go
@@ -114,7 +114,10 @@ func (r *githubRepository) Validate() (list field.ErrorList) {
}
func ParseOwnerRepoGithub(giturl string) (owner string, repo string, err error) {
- parsed, e := url.Parse(strings.TrimSuffix(giturl, ".git"))
+ giturl = strings.TrimSuffix(giturl, ".git")
+ giturl = strings.TrimSuffix(giturl, "/")
+
+ parsed, e := url.Parse(giturl)
if e != nil {
err = e
return
From ddb034b4a0ad4a0b9afd53c257daeaf2af659ddf Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 18 Jul 2025 11:27:42 +0000
Subject: [PATCH 22/46] Update dependency sass-loader to v16.0.5 (#108306)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 2 +-
packages/grafana-ui/package.json | 2 +-
yarn.lock | 12 ++++++------
3 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/package.json b/package.json
index 3e9cf8b5846..13cdc628eeb 100644
--- a/package.json
+++ b/package.json
@@ -240,7 +240,7 @@
"redux-mock-store": "1.5.5",
"rimraf": "6.0.1",
"sass": "1.83.4",
- "sass-loader": "16.0.4",
+ "sass-loader": "16.0.5",
"smtp-tester": "^2.1.0",
"style-loader": "4.0.0",
"stylelint": "16.14.1",
diff --git a/packages/grafana-ui/package.json b/packages/grafana-ui/package.json
index 92210759d3a..35c636b3d09 100644
--- a/packages/grafana-ui/package.json
+++ b/packages/grafana-ui/package.json
@@ -198,7 +198,7 @@
"rollup-plugin-esbuild": "6.2.1",
"rollup-plugin-node-externals": "^8.0.0",
"rollup-plugin-svg-import": "3.0.0",
- "sass-loader": "16.0.4",
+ "sass-loader": "16.0.5",
"storybook": "^8.6.2",
"style-loader": "4.0.0",
"typescript": "5.8.3",
diff --git a/yarn.lock b/yarn.lock
index dbcc393f12d..5447f42a33d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3829,7 +3829,7 @@ __metadata:
rollup-plugin-node-externals: "npm:^8.0.0"
rollup-plugin-svg-import: "npm:3.0.0"
rxjs: "npm:7.8.2"
- sass-loader: "npm:16.0.4"
+ sass-loader: "npm:16.0.5"
slate: "npm:0.47.9"
slate-plain-serializer: "npm:0.7.13"
slate-react: "npm:0.22.10"
@@ -18494,7 +18494,7 @@ __metadata:
rimraf: "npm:6.0.1"
rxjs: "npm:7.8.2"
sass: "npm:1.83.4"
- sass-loader: "npm:16.0.4"
+ sass-loader: "npm:16.0.5"
selecto: "npm:1.26.3"
semver: "npm:7.7.2"
slate: "npm:0.47.9"
@@ -28486,9 +28486,9 @@ __metadata:
languageName: node
linkType: hard
-"sass-loader@npm:16.0.4":
- version: 16.0.4
- resolution: "sass-loader@npm:16.0.4"
+"sass-loader@npm:16.0.5":
+ version: 16.0.5
+ resolution: "sass-loader@npm:16.0.5"
dependencies:
neo-async: "npm:^2.6.2"
peerDependencies:
@@ -28508,7 +28508,7 @@ __metadata:
optional: true
webpack:
optional: true
- checksum: 10/16e3552e04301864d59d99f1c90952e0c97cfa793a38a551b6dc19e49a9c0779ec8b3dd8ab39bc79cc4401972f13e8d5baaf577c96ea39911db5866a0b4bdcdd
+ checksum: 10/978b553900427c3fc24ed16b8258829d6a851bc5b0ab226cf43143fc08a0386e8cd07db367104d190a6cf0945af071805f70773525a970673c5b61fda4b7a59e
languageName: node
linkType: hard
From 8eec858054172984ae61734f24bf9b614f700630 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 18 Jul 2025 11:29:25 +0000
Subject: [PATCH 23/46] Update dependency terser-webpack-plugin to v5.3.14
(#108307)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/package.json b/package.json
index 13cdc628eeb..fd2d759bb76 100644
--- a/package.json
+++ b/package.json
@@ -245,7 +245,7 @@
"style-loader": "4.0.0",
"stylelint": "16.14.1",
"stylelint-config-sass-guidelines": "12.1.0",
- "terser-webpack-plugin": "5.3.11",
+ "terser-webpack-plugin": "5.3.14",
"testing-library-selector": "0.3.1",
"tracelib": "1.0.1",
"ts-jest": "29.2.5",
diff --git a/yarn.lock b/yarn.lock
index 5447f42a33d..b9709550a80 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -18507,7 +18507,7 @@ __metadata:
swagger-ui-react: "npm:5.27.0"
symbol-observable: "npm:4.0.0"
systemjs: "npm:6.15.1"
- terser-webpack-plugin: "npm:5.3.11"
+ terser-webpack-plugin: "npm:5.3.14"
testing-library-selector: "npm:0.3.1"
tinycolor2: "npm:1.6.0"
tracelib: "npm:1.0.1"
@@ -30501,9 +30501,9 @@ __metadata:
languageName: node
linkType: hard
-"terser-webpack-plugin@npm:5.3.11, terser-webpack-plugin@npm:^5.3.1, terser-webpack-plugin@npm:^5.3.10":
- version: 5.3.11
- resolution: "terser-webpack-plugin@npm:5.3.11"
+"terser-webpack-plugin@npm:5.3.14, terser-webpack-plugin@npm:^5.3.1, terser-webpack-plugin@npm:^5.3.10":
+ version: 5.3.14
+ resolution: "terser-webpack-plugin@npm:5.3.14"
dependencies:
"@jridgewell/trace-mapping": "npm:^0.3.25"
jest-worker: "npm:^27.4.5"
@@ -30519,7 +30519,7 @@ __metadata:
optional: true
uglify-js:
optional: true
- checksum: 10/a8f7c92c75aa42628adfa4d171d4695c366c1852ecb4a24e72dd6fec86e383e12ac24b627e798fedff4e213c21fe851cebc61be3ab5a2537e6e42bea46690aa3
+ checksum: 10/5b7290f7edb179b83cefb8827c12371ddddc088cf251cf58a1c738d82628331ae6604273b61fe991d77411d4bb6b7178c3826aa47edf01b4ee21f973d6c8b8fb
languageName: node
linkType: hard
From 28109ee1928408bffef4d798181a9a8f68aaae69 Mon Sep 17 00:00:00 2001
From: Alex Bikfalvi
Date: Fri, 18 Jul 2025 13:47:53 +0200
Subject: [PATCH 24/46] Tempo: New features for TraceQL grammar (#107000)
Support the following features in the TraceQL syntax grammar:
* New instrinsic field: `span:parentID`
* `with(most_recent=true)`
Fixes: https://github.com/grafana/grafana/issues/106978
Fixes: https://github.com/grafana/grafana/issues/104159
Signed-off-by: Alex Bikfalvi
---
.betterer.results | 13 +
.../datasource/tempo/traceql/traceql.test.ts | 444 ++++++++++++++++++
.../datasource/tempo/traceql/traceql.ts | 53 ++-
3 files changed, 509 insertions(+), 1 deletion(-)
create mode 100644 public/app/plugins/datasource/tempo/traceql/traceql.test.ts
diff --git a/.betterer.results b/.betterer.results
index ca7e75b3558..3a9f3dec643 100644
--- a/.betterer.results
+++ b/.betterer.results
@@ -3628,6 +3628,19 @@ exports[`better eslint`] = {
[0, 0, 0, "Unexpected any. Specify a different type.", "2"],
[0, 0, 0, "Unexpected any. Specify a different type.", "3"]
],
+ "public/app/plugins/datasource/tempo/traceql/traceql.test.ts:5381": [
+ [0, 0, 0, "Unexpected any. Specify a different type.", "0"],
+ [0, 0, 0, "Unexpected any. Specify a different type.", "1"],
+ [0, 0, 0, "Unexpected any. Specify a different type.", "2"],
+ [0, 0, 0, "Unexpected any. Specify a different type.", "3"],
+ [0, 0, 0, "Unexpected any. Specify a different type.", "4"],
+ [0, 0, 0, "Unexpected any. Specify a different type.", "5"],
+ [0, 0, 0, "Unexpected any. Specify a different type.", "6"],
+ [0, 0, 0, "Unexpected any. Specify a different type.", "7"],
+ [0, 0, 0, "Unexpected any. Specify a different type.", "8"],
+ [0, 0, 0, "Unexpected any. Specify a different type.", "9"],
+ [0, 0, 0, "Unexpected any. Specify a different type.", "10"]
+ ],
"public/app/plugins/datasource/zipkin/QueryField.tsx:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"],
[0, 0, 0, "Unexpected any. Specify a different type.", "1"]
diff --git a/public/app/plugins/datasource/tempo/traceql/traceql.test.ts b/public/app/plugins/datasource/tempo/traceql/traceql.test.ts
new file mode 100644
index 00000000000..a31c71ef0a4
--- /dev/null
+++ b/public/app/plugins/datasource/tempo/traceql/traceql.test.ts
@@ -0,0 +1,444 @@
+import {
+ languageDefinition,
+ traceqlGrammar,
+ operators,
+ keywordOperators,
+ stringOperators,
+ numberOperators,
+ intrinsics,
+ scopes,
+ enumIntrinsics,
+} from './traceql';
+
+describe('TraceQL grammar', () => {
+ describe('Language definition', () => {
+ it('should include all required keywords', () => {
+ const { keywords } = languageDefinition.def.language;
+ expect(keywords).toContain('with');
+ expect(keywords).toContain('span');
+ expect(keywords).toContain('resource');
+ expect(keywords).toContain('duration');
+ expect(keywords).toContain('status');
+ });
+
+ it('should include with clause keywords and parameters', () => {
+ const { withClauseKeywords, withParameters } = languageDefinition.def.language;
+ expect(withClauseKeywords).toContain('with');
+ expect(withParameters).toContain('most_recent');
+ });
+ });
+
+ describe('Operators', () => {
+ it('should include all comparison operators', () => {
+ expect(operators).toContain('=');
+ expect(operators).toContain('!=');
+ expect(operators).toContain('>');
+ expect(operators).toContain('<');
+ expect(operators).toContain('>=');
+ expect(operators).toContain('<=');
+ expect(operators).toContain('=~');
+ expect(operators).toContain('!~');
+ });
+
+ it('should categorize operators correctly', () => {
+ expect(keywordOperators).toEqual(['=', '!=']);
+ expect(stringOperators).toEqual(['=', '!=', '=~', '!~']);
+ expect(numberOperators).toEqual(['=', '!=', '>', '<', '>=', '<=']);
+ });
+ });
+
+ describe('Intrinsics and scopes', () => {
+ it('should include all intrinsics', () => {
+ expect(intrinsics).toContain('duration');
+ expect(intrinsics).toContain('name');
+ expect(intrinsics).toContain('status');
+ expect(intrinsics).toContain('span:duration');
+ expect(intrinsics).toContain('trace:id');
+ });
+
+ it('should include all scopes', () => {
+ expect(scopes).toContain('event');
+ expect(scopes).toContain('instrumentation');
+ expect(scopes).toContain('link');
+ expect(scopes).toContain('resource');
+ expect(scopes).toContain('span');
+ });
+
+ it('should identify enum intrinsics', () => {
+ expect(enumIntrinsics).toContain('kind');
+ expect(enumIntrinsics).toContain('span:kind');
+ expect(enumIntrinsics).toContain('status');
+ expect(enumIntrinsics).toContain('span:status');
+ });
+ });
+
+ describe('TraceQL patterns', () => {
+ it('should match span-set patterns', () => {
+ const spanSetRule = (traceqlGrammar as any)['span-set'];
+ expect(spanSetRule).toBeDefined();
+ expect(spanSetRule.pattern).toBeDefined();
+ const spanSetPattern = spanSetRule.pattern as RegExp;
+ expect(spanSetPattern.test('{span.name="foo"}')).toBe(true);
+ expect(spanSetPattern.test('{resource.service.name="bar"}')).toBe(true);
+ expect(spanSetPattern.test('{duration>1s}')).toBe(true);
+ });
+
+ it('should match with-clause patterns', () => {
+ const withClauseRule = (traceqlGrammar as any)['with-clause'];
+ expect(withClauseRule).toBeDefined();
+ expect(withClauseRule.pattern).toBeDefined();
+ const withClausePattern = withClauseRule.pattern as RegExp;
+ expect(withClausePattern.test('with (most_recent=true)')).toBe(true);
+ expect(withClausePattern.test('with (most_recent=false)')).toBe(true);
+ expect(withClausePattern.test('with(most_recent=true)')).toBe(true);
+ expect(withClausePattern.test('with (most_recent = true)')).toBe(true);
+ });
+
+ it('should match comment patterns', () => {
+ const commentRule = (traceqlGrammar as any).comment;
+ expect(commentRule).toBeDefined();
+ expect(commentRule.pattern).toBeDefined();
+ const commentPattern = commentRule.pattern as RegExp;
+ expect(commentPattern.test('// This is a comment')).toBe(true);
+ expect(commentPattern.test('//Another comment')).toBe(true);
+ });
+
+ it('should match number patterns', () => {
+ const numberRule = (traceqlGrammar as any).number;
+ expect(numberRule).toBeDefined();
+ const numberPattern = numberRule as RegExp;
+ expect(numberPattern.test('123')).toBe(true);
+ expect(numberPattern.test('123.45')).toBe(true);
+ expect(numberPattern.test('-123')).toBe(true);
+ expect(numberPattern.test('1.23e10')).toBe(true);
+ });
+
+ it('should match operator patterns', () => {
+ const operatorRule = (traceqlGrammar as any).operator;
+ expect(operatorRule).toBeDefined();
+ const operatorPattern = operatorRule as RegExp;
+ expect(operatorPattern.test('=')).toBe(true);
+ expect(operatorPattern.test('!=')).toBe(true);
+ expect(operatorPattern.test('>')).toBe(true);
+ expect(operatorPattern.test('<')).toBe(true);
+ expect(operatorPattern.test('>=')).toBe(true);
+ expect(operatorPattern.test('<=')).toBe(true);
+ });
+ });
+
+ describe('TraceQL query syntax', () => {
+ const testCases = [
+ // Empty query
+ {
+ name: 'empty query',
+ query: '{}',
+ shouldMatch: true,
+ },
+ // Basic queries
+ {
+ name: 'basic span query with string equality',
+ query: '{ span.name="test" }',
+ shouldMatch: true,
+ },
+ {
+ name: 'basic span query with string inequality',
+ query: '{ span.name!="test" }',
+ shouldMatch: true,
+ },
+ {
+ name: 'basic span query with regex match',
+ query: '{ span.name=~"test" }',
+ shouldMatch: true,
+ },
+ {
+ name: 'basic span query with regex mismatch',
+ query: '{ span.name!~"test" }',
+ shouldMatch: true,
+ },
+ {
+ name: 'basic span query with number equality',
+ query: '{span.duration=10}',
+ shouldMatch: true,
+ },
+ {
+ name: 'basic span query with boolean',
+ query: '{span.flags.sampled=true}',
+ shouldMatch: true,
+ },
+ {
+ name: 'resource query',
+ query: '{resource.service.name="my-service"}',
+ shouldMatch: true,
+ },
+ {
+ name: 'duration query',
+ query: '{duration>1s}',
+ shouldMatch: true,
+ },
+ // Structural operators
+ {
+ name: 'structural operator child query',
+ query: '{span.name="parent"} > {span.name="child"}',
+ shouldMatch: true,
+ },
+ {
+ name: 'structural operator parent query',
+ query: '{span.name="parent"} < {span.name="child"}',
+ shouldMatch: true,
+ },
+ {
+ name: 'structural operator descendant query',
+ query: '{span.name="parent"} >> {span.name="child"}',
+ shouldMatch: true,
+ },
+ {
+ name: 'structural operator ancestor query',
+ query: '{span.name="parent"} << {span.name="child"}',
+ shouldMatch: true,
+ },
+ {
+ name: 'structural operator sibling query',
+ query: '{span.name="parent"} ~ {span.name="child"}',
+ shouldMatch: true,
+ },
+ // Union structure operators
+ {
+ name: 'union structural operator child query',
+ query: '{span.name="parent"} &> {span.name="child"}',
+ shouldMatch: true,
+ },
+ {
+ name: 'union structural operator parent query',
+ query: '{span.name="parent"} &< {span.name="child"}',
+ shouldMatch: true,
+ },
+ {
+ name: 'union structural operator descendant query',
+ query: '{span.name="parent"} &>> {span.name="child"}',
+ shouldMatch: true,
+ },
+ {
+ name: 'union structural operator ancestor query',
+ query: '{span.name="parent"} &<< {span.name="child"}',
+ shouldMatch: true,
+ },
+ {
+ name: 'union structural operator sibling query',
+ query: '{span.name="parent"} &~ {span.name="child"}',
+ shouldMatch: true,
+ },
+ // Negated structure operators
+ {
+ name: 'negated structural operator child query',
+ query: '{span.name="parent"} !> {span.name="child"}',
+ shouldMatch: true,
+ },
+ {
+ name: 'negated structural operator parent query',
+ query: '{span.name="parent"} !< {span.name="child"}',
+ shouldMatch: true,
+ },
+ {
+ name: 'negated structural operator descendant query',
+ query: '{span.name="parent"} !>> {span.name="child"}',
+ shouldMatch: true,
+ },
+ {
+ name: 'negated structural operator ancestor query',
+ query: '{span.name="parent"} !<< {span.name="child"}',
+ shouldMatch: true,
+ },
+ {
+ name: 'negated structural operator sibling query',
+ query: '{span.name="parent"} !~ {span.name="child"}',
+ shouldMatch: true,
+ }, // Comments
+ {
+ name: 'query with comment',
+ query: '// Find slow requests\n{duration>1s}',
+ shouldMatch: true,
+ },
+ // Query hint queries
+ {
+ name: 'query hint - most_recent true',
+ query: '{span.name="test"} with (most_recent=true)',
+ shouldMatch: true,
+ },
+ {
+ name: 'query hint - most_recent false',
+ query: '{span.name="test"} with (most_recent=false)',
+ shouldMatch: true,
+ },
+ {
+ name: 'query hint - no spaces',
+ query: '{span.name="test"} with(most_recent=true)',
+ shouldMatch: true,
+ },
+ {
+ name: 'query hint - extra spaces',
+ query: '{span.name="test"} with ( most_recent = true )',
+ shouldMatch: true,
+ },
+ // Test enum intrinsics with valid values
+ {
+ name: 'enum intrinsic - kind with server value',
+ query: '{kind=server}',
+ shouldMatch: true,
+ },
+ {
+ name: 'enum intrinsic - kind with client value',
+ query: '{kind=client}',
+ shouldMatch: true,
+ },
+ {
+ name: 'enum intrinsic - kind with producer value',
+ query: '{kind=producer}',
+ shouldMatch: true,
+ },
+ {
+ name: 'enum intrinsic - kind with consumer value',
+ query: '{kind=consumer}',
+ shouldMatch: true,
+ },
+ {
+ name: 'enum intrinsic - kind with internal value',
+ query: '{kind=internal}',
+ shouldMatch: true,
+ },
+ {
+ name: 'enum intrinsic - status with ok value',
+ query: '{status=ok}',
+ shouldMatch: true,
+ },
+ {
+ name: 'enum intrinsic - status with error value',
+ query: '{status=error}',
+ shouldMatch: true,
+ },
+ {
+ name: 'enum intrinsic - status with unset value',
+ query: '{status=unset}',
+ shouldMatch: true,
+ },
+ {
+ name: 'enum intrinsic - span:kind with server value',
+ query: '{span:kind=server}',
+ shouldMatch: true,
+ },
+ {
+ name: 'enum intrinsic - span:status with error value',
+ query: '{span:status=error}',
+ shouldMatch: true,
+ },
+ // Complex queries
+ {
+ name: 'complex query with with clause',
+ query: '{span.http.status_code=200 && span.name="GET /api"} | select(span.duration) with (most_recent=true)',
+ shouldMatch: true,
+ },
+ {
+ name: 'aggregation with with clause',
+ query: '{span.service.name="frontend"} | avg(duration) with (most_recent=false)',
+ shouldMatch: true,
+ },
+ ];
+
+ testCases.forEach(({ name, query, shouldMatch }) => {
+ it(`should ${shouldMatch ? 'match' : 'not match'} ${name}`, () => {
+ const grammar = traceqlGrammar as any;
+ const spanSetPattern = grammar['span-set']?.pattern as RegExp;
+ const withClausePattern = grammar['with-clause']?.pattern as RegExp;
+ const commentPattern = grammar.comment?.pattern as RegExp;
+
+ const spanSetMatches = spanSetPattern ? (query.match(spanSetPattern) || []).length > 0 : false;
+ const withClauseMatches = withClausePattern ? (query.match(withClausePattern) || []).length > 0 : false;
+ const commentMatches = commentPattern ? (query.match(commentPattern) || []).length > 0 : false;
+
+ const hasAnyMatch = spanSetMatches || withClauseMatches || commentMatches;
+
+ if (shouldMatch) {
+ expect(hasAnyMatch).toBe(true);
+ } else {
+ expect(hasAnyMatch).toBe(false);
+ }
+ });
+ });
+ });
+
+ describe('With clause validation', () => {
+ it('should validate with clause parameter names', () => {
+ const grammar = traceqlGrammar as any;
+ const withClause = grammar['with-clause'];
+ expect(withClause).toBeDefined();
+ expect(withClause.inside).toBeDefined();
+
+ const parameterNameRule = withClause.inside['parameter-name'];
+ expect(parameterNameRule).toBeDefined();
+ const parameterNamePattern = parameterNameRule.pattern as RegExp;
+
+ expect(parameterNamePattern.test('most_recent=')).toBe(true);
+ expect(parameterNamePattern.test('invalid_param=')).toBe(true);
+ expect(parameterNamePattern.test('123invalid=')).toBe(false);
+ });
+
+ it('should validate with clause parameter values', () => {
+ const grammar = traceqlGrammar as any;
+ const withClause = grammar['with-clause'];
+ expect(withClause).toBeDefined();
+ expect(withClause.inside).toBeDefined();
+
+ const parameterValueRule = withClause.inside['parameter-value'];
+ expect(parameterValueRule).toBeDefined();
+ const parameterValuePattern = parameterValueRule.pattern as RegExp;
+
+ expect(parameterValuePattern.test('true')).toBe(true);
+ expect(parameterValuePattern.test('false')).toBe(true);
+ expect(parameterValuePattern.test('"string_value"')).toBe(true);
+ expect(parameterValuePattern.test("'string_value'")).toBe(true);
+ expect(parameterValuePattern.test('123')).toBe(true);
+ expect(parameterValuePattern.test('123.45')).toBe(true);
+ });
+
+ it('should validate with clause keyword', () => {
+ const grammar = traceqlGrammar as any;
+ const withClause = grammar['with-clause'];
+ expect(withClause).toBeDefined();
+ expect(withClause.inside).toBeDefined();
+
+ const keywordRule = withClause.inside['with-keyword'];
+ expect(keywordRule).toBeDefined();
+ const keywordPattern = keywordRule.pattern as RegExp;
+
+ expect(keywordPattern.test('with')).toBe(true);
+ expect(keywordPattern.test('WITH')).toBe(false); // Case sensitive
+ expect(keywordPattern.test('width')).toBe(false);
+ });
+ });
+
+ describe('Edge cases', () => {
+ it('should handle multiple with clauses (invalid but should not crash)', () => {
+ const query = '{span.name="test"} with (most_recent=true) with (other=false)';
+ const grammar = traceqlGrammar as any;
+ const withClausePattern = grammar['with-clause']?.pattern as RegExp;
+
+ if (withClausePattern) {
+ // Use global flag to match all occurrences
+ const globalPattern = new RegExp(withClausePattern.source, 'g');
+ const matches = query.match(globalPattern);
+ expect(matches).not.toBeNull();
+ expect(matches!.length).toBe(2);
+ }
+ });
+
+ it('should handle with clause without parameters', () => {
+ const query = '{span.name="test"} with ()';
+ const grammar = traceqlGrammar as any;
+ const withClausePattern = grammar['with-clause']?.pattern as RegExp;
+
+ if (withClausePattern) {
+ const matches = query.match(withClausePattern);
+ expect(matches).not.toBeNull();
+ }
+ });
+ });
+});
diff --git a/public/app/plugins/datasource/tempo/traceql/traceql.ts b/public/app/plugins/datasource/tempo/traceql/traceql.ts
index 00f54a0d25f..d592116c142 100644
--- a/public/app/plugins/datasource/tempo/traceql/traceql.ts
+++ b/public/app/plugins/datasource/tempo/traceql/traceql.ts
@@ -49,6 +49,7 @@ export const intrinsics = intrinsicsV1.concat([
'span:id',
'span:kind',
'span:name',
+ 'span:parentID',
'span:status',
'span:statusMessage',
'trace:duration',
@@ -74,7 +75,11 @@ const functions = aggregatorFunctions.concat([
'select',
]);
-const keywords = intrinsics.concat(scopes);
+// Add with clause keywords and parameters
+const withClauseKeywords = ['with'];
+const withParameters = ['most_recent'];
+
+const keywords = intrinsics.concat(scopes).concat(withClauseKeywords);
const statusValues = ['ok', 'unset', 'error', 'false', 'true'];
@@ -87,6 +92,8 @@ const language: languages.IMonarchLanguage = {
operators,
statusValues,
functions,
+ withClauseKeywords,
+ withParameters,
symbols: /[=>?|<|>)?|>[>=]?|`, 'i'),
punctuation: /[{};()`,.]/,
From b4f7c692f5e7666b10ba4cb78c9c7f01b69758cc Mon Sep 17 00:00:00 2001
From: linoman <2051016+linoman@users.noreply.github.com>
Date: Fri, 18 Jul 2025 14:01:05 +0200
Subject: [PATCH 25/46] SCIM: add non ga banner (#108301)
* Add warning banner to Authentication List Page
* i18n update
---
.../auth-config/AuthProvidersListPage.tsx | 17 ++++++++++++++++-
public/locales/en-US/grafana.json | 3 +++
2 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/public/app/features/auth-config/AuthProvidersListPage.tsx b/public/app/features/auth-config/AuthProvidersListPage.tsx
index 37fdf7c5cfe..b299553d55c 100644
--- a/public/app/features/auth-config/AuthProvidersListPage.tsx
+++ b/public/app/features/auth-config/AuthProvidersListPage.tsx
@@ -4,7 +4,7 @@ import { connect, ConnectedProps } from 'react-redux';
import { GrafanaEdition } from '@grafana/data/internal';
import { Trans } from '@grafana/i18n';
import { reportInteraction } from '@grafana/runtime';
-import { Grid, TextLink, ToolbarButton } from '@grafana/ui';
+import { Alert, Grid, TextLink, ToolbarButton } from '@grafana/ui';
import { Page } from 'app/core/components/Page/Page';
import { config } from 'app/core/config';
import { StoreState } from 'app/types/store';
@@ -46,6 +46,13 @@ export const AuthConfigPageUnconnected = ({
}, [loadSettings]);
const [showDrawer, setShowDrawer] = useState(false);
+ const [showSCIMBanner, setShowSCIMBanner] = useState(false);
+
+ // Check if SCIM banner should be shown
+ useEffect(() => {
+ const isSCIMEnabled = config.featureToggles.enableSCIM || false;
+ setShowSCIMBanner(isSCIMEnabled);
+ }, []);
const authProviders = getRegisteredAuthProviders();
const availableProviders = authProviders.filter((p) => !providerStatuses[p.id]?.hide);
@@ -102,6 +109,14 @@ export const AuthConfigPageUnconnected = ({
}
>
+ {showSCIMBanner && (
+ setShowSCIMBanner(false)} style={{ marginBottom: 16 }}>
+
+ SCIM is currently in development and not recommended for production use. Please use with caution and
+ expect potential changes.
+
+
+ )}
{!providerList.length ? (
) : (
diff --git a/public/locales/en-US/grafana.json b/public/locales/en-US/grafana.json
index 88774ba133c..0cc6d14e6dc 100644
--- a/public/locales/en-US/grafana.json
+++ b/public/locales/en-US/grafana.json
@@ -3359,6 +3359,9 @@
"text-badge-enabled": "Enabled",
"text-badge-not-enabled": "Not enabled"
},
+ "scim-banner": {
+ "message": "SCIM is currently in development and not recommended for production use. Please use with caution and expect potential changes."
+ },
"server-discovery-modal": {
"label-the-wellknownopenidconfiguration-endpoint-for-your-id-p": "The .well-known/openid-configuration endpoint for your IdP",
"title-open-id-connect-discovery-url": "OpenID Connect Discovery URL"
From 0b451117eecd893b8a967e4001d76b0be6f8d5b0 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 18 Jul 2025 12:29:05 +0000
Subject: [PATCH 26/46] Update dependency webpack-dev-server to v5.2.2
(#108312)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 14 +++++++-------
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/package.json b/package.json
index fd2d759bb76..51d465c1d95 100644
--- a/package.json
+++ b/package.json
@@ -254,7 +254,7 @@
"webpack": "5.97.1",
"webpack-assets-manifest": "^5.1.0",
"webpack-cli": "6.0.1",
- "webpack-dev-server": "5.2.1",
+ "webpack-dev-server": "5.2.2",
"webpack-livereload-plugin": "3.0.2",
"webpack-manifest-plugin": "5.0.0",
"webpack-merge": "6.0.1",
diff --git a/yarn.lock b/yarn.lock
index b9709550a80..b619a2d1fe1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -18524,7 +18524,7 @@ __metadata:
webpack: "npm:5.97.1"
webpack-assets-manifest: "npm:^5.1.0"
webpack-cli: "npm:6.0.1"
- webpack-dev-server: "npm:5.2.1"
+ webpack-dev-server: "npm:5.2.2"
webpack-livereload-plugin: "npm:3.0.2"
webpack-manifest-plugin: "npm:5.0.0"
webpack-merge: "npm:6.0.1"
@@ -19128,7 +19128,7 @@ __metadata:
languageName: node
linkType: hard
-"http-proxy-middleware@npm:^2.0.7":
+"http-proxy-middleware@npm:^2.0.9":
version: 2.0.9
resolution: "http-proxy-middleware@npm:2.0.9"
dependencies:
@@ -32255,9 +32255,9 @@ __metadata:
languageName: node
linkType: hard
-"webpack-dev-server@npm:5.2.1":
- version: 5.2.1
- resolution: "webpack-dev-server@npm:5.2.1"
+"webpack-dev-server@npm:5.2.2":
+ version: 5.2.2
+ resolution: "webpack-dev-server@npm:5.2.2"
dependencies:
"@types/bonjour": "npm:^3.5.13"
"@types/connect-history-api-fallback": "npm:^1.5.4"
@@ -32275,7 +32275,7 @@ __metadata:
connect-history-api-fallback: "npm:^2.0.0"
express: "npm:^4.21.2"
graceful-fs: "npm:^4.2.6"
- http-proxy-middleware: "npm:^2.0.7"
+ http-proxy-middleware: "npm:^2.0.9"
ipaddr.js: "npm:^2.1.0"
launch-editor: "npm:^2.6.1"
open: "npm:^10.0.3"
@@ -32296,7 +32296,7 @@ __metadata:
optional: true
bin:
webpack-dev-server: bin/webpack-dev-server.js
- checksum: 10/424edfe22b7bbe2301a38b8b519dfeb7643e0ca643be01af3fa48ec18512955c1952246741d7577bdb911ee09dcd6c521ade7d65e0059448ee69ab02bfac4624
+ checksum: 10/59517409cd38c01a875a03b9658f3d20d492b5b8bead9ded4a0f3d33e6857daf2d352fe89f0181dcaea6d0fbe84b0494cb4750a87120fe81cdbb3c32b499451c
languageName: node
linkType: hard
From 2dba473015a6e7e75a5d117bf766a6c24d404d38 Mon Sep 17 00:00:00 2001
From: maicon
Date: Fri, 18 Jul 2025 09:43:56 -0300
Subject: [PATCH 27/46] Feature/unified storage search dual reader (#108291)
* Add UnifiedStorageSearchDualReaderEnabled feature flag
Signed-off-by: Maicon Costa
* Refactor UniSearch Dual Reader
Signed-off-by: Maicon Costa
* Run make gen-feature-toggles
Signed-off-by: Maicon Costa
* fix: unit tests search_client
Signed-off-by: Bruno Abrantes
* feat: cancels shadow search requests after 500ms
Signed-off-by: Bruno Abrantes
---------
Signed-off-by: Maicon Costa
Signed-off-by: Bruno Abrantes
Co-authored-by: Will Assis
Co-authored-by: Bruno Abrantes
---
.../src/types/featureToggles.gen.ts | 4 +
pkg/registry/apis/dashboard/register.go | 2 +-
pkg/registry/apis/dashboard/search.go | 2 +-
pkg/services/apiserver/client/client.go | 5 +-
.../dashboards/service/client/client.go | 9 +-
.../dashboards/service/dashboard_service.go | 2 +-
.../dashboardversion/dashverimpl/dashver.go | 1 +
pkg/services/featuremgmt/registry.go | 8 +
pkg/services/featuremgmt/toggles_gen.csv | 1 +
pkg/services/featuremgmt/toggles_gen.go | 4 +
pkg/services/featuremgmt/toggles_gen.json | 38 +-
pkg/services/folder/folderimpl/folder.go | 2 +
.../folderimpl/folder_unifiedstorage_test.go | 2 +-
pkg/storage/unified/resource/search_client.go | 54 ++-
.../unified/resource/search_client_test.go | 445 ++++++++++++++++++
15 files changed, 557 insertions(+), 22 deletions(-)
create mode 100644 pkg/storage/unified/resource/search_client_test.go
diff --git a/packages/grafana-data/src/types/featureToggles.gen.ts b/packages/grafana-data/src/types/featureToggles.gen.ts
index 1f42c837828..32cd584aa78 100644
--- a/packages/grafana-data/src/types/featureToggles.gen.ts
+++ b/packages/grafana-data/src/types/featureToggles.gen.ts
@@ -1055,4 +1055,8 @@ export interface FeatureToggles {
* @default false
*/
pluginAssetProvider?: boolean;
+ /**
+ * Enable dual reader for unified storage search
+ */
+ unifiedStorageSearchDualReaderEnabled?: boolean;
}
diff --git a/pkg/registry/apis/dashboard/register.go b/pkg/registry/apis/dashboard/register.go
index f2fda01d1c9..8bc223b79f8 100644
--- a/pkg/registry/apis/dashboard/register.go
+++ b/pkg/registry/apis/dashboard/register.go
@@ -122,7 +122,7 @@ func RegisterAPIService(
dbp := legacysql.NewDatabaseProvider(sql)
namespacer := request.GetNamespaceMapper(cfg)
legacyDashboardSearcher := legacysearcher.NewDashboardSearchClient(dashStore, sorter)
- folderClient := client.NewK8sHandler(dual, request.GetNamespaceMapper(cfg), folders.FolderResourceInfo.GroupVersionResource(), restConfigProvider.GetRestConfig, dashStore, userService, unified, sorter)
+ folderClient := client.NewK8sHandler(dual, request.GetNamespaceMapper(cfg), folders.FolderResourceInfo.GroupVersionResource(), restConfigProvider.GetRestConfig, dashStore, userService, unified, sorter, features)
builder := &DashboardsAPIBuilder{
log: log.New("grafana-apiserver.dashboards"),
diff --git a/pkg/registry/apis/dashboard/search.go b/pkg/registry/apis/dashboard/search.go
index 17643ce2743..4252502e9ef 100644
--- a/pkg/registry/apis/dashboard/search.go
+++ b/pkg/registry/apis/dashboard/search.go
@@ -43,7 +43,7 @@ type SearchHandler struct {
}
func NewSearchHandler(tracer trace.Tracer, dual dualwrite.Service, legacyDashboardSearcher resourcepb.ResourceIndexClient, resourceClient resource.ResourceClient, features featuremgmt.FeatureToggles) *SearchHandler {
- searchClient := resource.NewSearchClient(dualwrite.NewSearchAdapter(dual), dashboardv0alpha1.DashboardResourceInfo.GroupResource(), resourceClient, legacyDashboardSearcher)
+ searchClient := resource.NewSearchClient(dualwrite.NewSearchAdapter(dual), dashboardv0alpha1.DashboardResourceInfo.GroupResource(), resourceClient, legacyDashboardSearcher, features)
return &SearchHandler{
client: searchClient,
log: log.New("grafana-apiserver.dashboards.search"),
diff --git a/pkg/services/apiserver/client/client.go b/pkg/services/apiserver/client/client.go
index 8aa75c22416..b909c82252d 100644
--- a/pkg/services/apiserver/client/client.go
+++ b/pkg/services/apiserver/client/client.go
@@ -15,6 +15,7 @@ import (
"github.com/grafana/grafana/pkg/registry/apis/dashboard/legacysearcher"
"github.com/grafana/grafana/pkg/services/apiserver/endpoints/request"
"github.com/grafana/grafana/pkg/services/dashboards"
+ "github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/services/search/sort"
"github.com/grafana/grafana/pkg/services/user"
"github.com/grafana/grafana/pkg/storage/legacysql/dualwrite"
@@ -46,9 +47,9 @@ type k8sHandler struct {
}
func NewK8sHandler(dual dualwrite.Service, namespacer request.NamespaceMapper, gvr schema.GroupVersionResource,
- restConfig func(context.Context) (*rest.Config, error), dashStore dashboards.Store, userSvc user.Service, resourceClient resource.ResourceClient, sorter sort.Service) K8sHandler {
+ restConfig func(context.Context) (*rest.Config, error), dashStore dashboards.Store, userSvc user.Service, resourceClient resource.ResourceClient, sorter sort.Service, features featuremgmt.FeatureToggles) K8sHandler {
legacySearcher := legacysearcher.NewDashboardSearchClient(dashStore, sorter)
- searchClient := resource.NewSearchClient(dualwrite.NewSearchAdapter(dual), gvr.GroupResource(), resourceClient, legacySearcher)
+ searchClient := resource.NewSearchClient(dualwrite.NewSearchAdapter(dual), gvr.GroupResource(), resourceClient, legacySearcher, features)
return &k8sHandler{
namespacer: namespacer,
diff --git a/pkg/services/dashboards/service/client/client.go b/pkg/services/dashboards/service/client/client.go
index 401d4773d16..01d0e020f62 100644
--- a/pkg/services/dashboards/service/client/client.go
+++ b/pkg/services/dashboards/service/client/client.go
@@ -5,7 +5,6 @@ import (
"fmt"
"sync"
- "github.com/prometheus/client_golang/prometheus"
"go.opentelemetry.io/otel/attribute"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@@ -18,11 +17,13 @@ import (
"github.com/grafana/grafana/pkg/services/apiserver/client"
"github.com/grafana/grafana/pkg/services/apiserver/endpoints/request"
"github.com/grafana/grafana/pkg/services/dashboards"
+ "github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/services/search/sort"
"github.com/grafana/grafana/pkg/services/user"
"github.com/grafana/grafana/pkg/setting"
"github.com/grafana/grafana/pkg/storage/legacysql/dualwrite"
"github.com/grafana/grafana/pkg/storage/unified/resource"
+ "github.com/prometheus/client_golang/prometheus"
)
type K8sClientFactory func(ctx context.Context, version string) client.K8sHandler
@@ -44,8 +45,9 @@ func NewK8sClientWithFallback(
sorter sort.Service,
dual dualwrite.Service,
reg prometheus.Registerer,
+ features featuremgmt.FeatureToggles,
) *K8sClientWithFallback {
- newClientFunc := newK8sClientFactory(cfg, restConfigProvider, dashboardStore, userService, resourceClient, sorter, dual)
+ newClientFunc := newK8sClientFactory(cfg, restConfigProvider, dashboardStore, userService, resourceClient, sorter, dual, features)
return &K8sClientWithFallback{
K8sHandler: newClientFunc(context.Background(), dashboardv0.VERSION),
newClientFunc: newClientFunc,
@@ -112,6 +114,7 @@ func newK8sClientFactory(
resourceClient resource.ResourceClient,
sorter sort.Service,
dual dualwrite.Service,
+ features featuremgmt.FeatureToggles,
) K8sClientFactory {
clientCache := make(map[string]client.K8sHandler)
cacheMutex := &sync.RWMutex{}
@@ -149,7 +152,7 @@ func newK8sClientFactory(
}
span.AddEvent("Creating new client")
- newClient := client.NewK8sHandler(dual, request.GetNamespaceMapper(cfg), gvr, restConfigProvider.GetRestConfig, dashboardStore, userService, resourceClient, sorter)
+ newClient := client.NewK8sHandler(dual, request.GetNamespaceMapper(cfg), gvr, restConfigProvider.GetRestConfig, dashboardStore, userService, resourceClient, sorter, features)
clientCache[version] = newClient
return newClient
diff --git a/pkg/services/dashboards/service/dashboard_service.go b/pkg/services/dashboards/service/dashboard_service.go
index e3d17b5bedf..82ca60b6940 100644
--- a/pkg/services/dashboards/service/dashboard_service.go
+++ b/pkg/services/dashboards/service/dashboard_service.go
@@ -387,7 +387,7 @@ func ProvideDashboardServiceImpl(
serverLockService *serverlock.ServerLockService,
kvstore kvstore.KVStore,
) (*DashboardServiceImpl, error) {
- k8sclient := dashboardclient.NewK8sClientWithFallback(cfg, restConfigProvider, dashboardStore, userService, resourceClient, sorter, dual, r)
+ k8sclient := dashboardclient.NewK8sClientWithFallback(cfg, restConfigProvider, dashboardStore, userService, resourceClient, sorter, dual, r, features)
dashSvc := &DashboardServiceImpl{
cfg: cfg,
log: log.New("dashboard-service"),
diff --git a/pkg/services/dashboardversion/dashverimpl/dashver.go b/pkg/services/dashboardversion/dashverimpl/dashver.go
index c36288073b3..9b16131262e 100644
--- a/pkg/services/dashboardversion/dashverimpl/dashver.go
+++ b/pkg/services/dashboardversion/dashverimpl/dashver.go
@@ -61,6 +61,7 @@ func ProvideService(cfg *setting.Cfg, db db.DB, dashboardService dashboards.Dash
userService,
unified,
sorter,
+ features,
),
dashSvc: dashboardService,
log: log.New("dashboard-version"),
diff --git a/pkg/services/featuremgmt/registry.go b/pkg/services/featuremgmt/registry.go
index 0663e997deb..e72d7e68035 100644
--- a/pkg/services/featuremgmt/registry.go
+++ b/pkg/services/featuremgmt/registry.go
@@ -1819,6 +1819,14 @@ var (
Expression: "false",
RequiresRestart: true,
},
+ {
+ Name: "unifiedStorageSearchDualReaderEnabled",
+ Description: "Enable dual reader for unified storage search",
+ Stage: FeatureStageExperimental,
+ Owner: grafanaSearchAndStorageSquad,
+ HideFromAdminPage: true,
+ HideFromDocs: true,
+ },
}
)
diff --git a/pkg/services/featuremgmt/toggles_gen.csv b/pkg/services/featuremgmt/toggles_gen.csv
index 56fbe4a7545..b1d89c6daa3 100644
--- a/pkg/services/featuremgmt/toggles_gen.csv
+++ b/pkg/services/featuremgmt/toggles_gen.csv
@@ -235,3 +235,4 @@ enablePluginImporter,experimental,@grafana/plugins-platform-backend,false,false,
otelLogsFormatting,experimental,@grafana/observability-logs,false,false,true
alertingNotificationHistory,experimental,@grafana/alerting-squad,false,false,false
pluginAssetProvider,experimental,@grafana/plugins-platform-backend,false,true,false
+unifiedStorageSearchDualReaderEnabled,experimental,@grafana/search-and-storage,false,false,false
diff --git a/pkg/services/featuremgmt/toggles_gen.go b/pkg/services/featuremgmt/toggles_gen.go
index 151ced45e79..9fe23daeb2d 100644
--- a/pkg/services/featuremgmt/toggles_gen.go
+++ b/pkg/services/featuremgmt/toggles_gen.go
@@ -950,4 +950,8 @@ const (
// FlagPluginAssetProvider
// Allows decoupled core plugins to load from the Grafana CDN
FlagPluginAssetProvider = "pluginAssetProvider"
+
+ // FlagUnifiedStorageSearchDualReaderEnabled
+ // Enable dual reader for unified storage search
+ FlagUnifiedStorageSearchDualReaderEnabled = "unifiedStorageSearchDualReaderEnabled"
)
diff --git a/pkg/services/featuremgmt/toggles_gen.json b/pkg/services/featuremgmt/toggles_gen.json
index 588999aa8a5..e3566c2dd9f 100644
--- a/pkg/services/featuremgmt/toggles_gen.json
+++ b/pkg/services/featuremgmt/toggles_gen.json
@@ -2452,16 +2452,15 @@
},
{
"metadata": {
- "name": "pluginLoadingRefactor",
- "resourceVersion": "1752218524617",
- "creationTimestamp": "2025-07-11T07:22:04Z",
- "deletionTimestamp": "2025-07-11T07:23:34Z"
+ "name": "pluginAssetProvider",
+ "resourceVersion": "1752486584712",
+ "creationTimestamp": "2025-07-14T09:49:44Z"
},
"spec": {
- "description": "Set this to true to use the new plugin loading functionality",
+ "description": "Allows decoupled core plugins to load from the Grafana CDN",
"stage": "experimental",
"codeowner": "@grafana/plugins-platform-backend",
- "frontend": true,
+ "requiresRestart": true,
"hideFromAdminPage": true,
"hideFromDocs": true,
"expression": "false"
@@ -2469,15 +2468,16 @@
},
{
"metadata": {
- "name": "pluginAssetProvider",
- "resourceVersion": "1752486584712",
- "creationTimestamp": "2025-07-14T09:49:44Z"
+ "name": "pluginLoadingRefactor",
+ "resourceVersion": "1752218524617",
+ "creationTimestamp": "2025-07-11T07:22:04Z",
+ "deletionTimestamp": "2025-07-11T07:23:34Z"
},
"spec": {
- "description": "Allows decoupled core plugins to load from the Grafana CDN",
+ "description": "Set this to true to use the new plugin loading functionality",
"stage": "experimental",
"codeowner": "@grafana/plugins-platform-backend",
- "requiresRestart": true,
+ "frontend": true,
"hideFromAdminPage": true,
"hideFromDocs": true,
"expression": "false"
@@ -3350,6 +3350,20 @@
"hideFromDocs": true
}
},
+ {
+ "metadata": {
+ "name": "unifiedStorageSearchDualReaderEnabled",
+ "resourceVersion": "1752500336818",
+ "creationTimestamp": "2025-07-14T13:38:56Z"
+ },
+ "spec": {
+ "description": "Enable dual reader for unified storage search",
+ "stage": "experimental",
+ "codeowner": "@grafana/search-and-storage",
+ "hideFromAdminPage": true,
+ "hideFromDocs": true
+ }
+ },
{
"metadata": {
"name": "unifiedStorageSearchPermissionFiltering",
@@ -3436,4 +3450,4 @@
}
}
]
-}
+}
\ No newline at end of file
diff --git a/pkg/services/folder/folderimpl/folder.go b/pkg/services/folder/folderimpl/folder.go
index 68e570cdb6d..4690d6c4640 100644
--- a/pkg/services/folder/folderimpl/folder.go
+++ b/pkg/services/folder/folderimpl/folder.go
@@ -122,6 +122,7 @@ func ProvideService(
userService,
resourceClient,
sorter,
+ features,
)
unifiedStore := ProvideUnifiedStore(k8sHandler, userService, tracer)
@@ -140,6 +141,7 @@ func ProvideService(
userService,
resourceClient,
sorter,
+ features,
)
srv.dashboardK8sClient = dashHandler
}
diff --git a/pkg/services/folder/folderimpl/folder_unifiedstorage_test.go b/pkg/services/folder/folderimpl/folder_unifiedstorage_test.go
index 738e1e98f56..44bd735445f 100644
--- a/pkg/services/folder/folderimpl/folder_unifiedstorage_test.go
+++ b/pkg/services/folder/folderimpl/folder_unifiedstorage_test.go
@@ -199,7 +199,7 @@ func TestIntegrationFolderServiceViaUnifiedStorage(t *testing.T) {
tracer := noop.NewTracerProvider().Tracer("TestIntegrationFolderServiceViaUnifiedStorage")
dashboardStore := dashboards.NewFakeDashboardStore(t)
- k8sCli := client.NewK8sHandler(dualwrite.ProvideTestService(), request.GetNamespaceMapper(cfg), folderv1.FolderResourceInfo.GroupVersionResource(), restCfgProvider.GetRestConfig, dashboardStore, userService, nil, sort.ProvideService())
+ k8sCli := client.NewK8sHandler(dualwrite.ProvideTestService(), request.GetNamespaceMapper(cfg), folderv1.FolderResourceInfo.GroupVersionResource(), restCfgProvider.GetRestConfig, dashboardStore, userService, nil, sort.ProvideService(), nil)
unifiedStore := ProvideUnifiedStore(k8sCli, userService, tracer)
ctx := context.Background()
diff --git a/pkg/storage/unified/resource/search_client.go b/pkg/storage/unified/resource/search_client.go
index 5679711e9e3..58d743da306 100644
--- a/pkg/storage/unified/resource/search_client.go
+++ b/pkg/storage/unified/resource/search_client.go
@@ -2,26 +2,36 @@ package resource
import (
"context"
+ "time"
"google.golang.org/grpc"
"k8s.io/apimachinery/pkg/runtime/schema"
+ "github.com/grafana/grafana/pkg/infra/log"
+ "github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/storage/unified/resourcepb"
)
+const (
+ // backgroundRequestTimeout is the timeout for background shadow traffic requests
+ backgroundRequestTimeout = 500 * time.Millisecond
+)
+
type DualWriter interface {
IsEnabled(schema.GroupResource) bool
ReadFromUnified(context.Context, schema.GroupResource) (bool, error)
}
func NewSearchClient(dual DualWriter, gr schema.GroupResource, unifiedClient resourcepb.ResourceIndexClient,
- legacyClient resourcepb.ResourceIndexClient) resourcepb.ResourceIndexClient {
+ legacyClient resourcepb.ResourceIndexClient, features featuremgmt.FeatureToggles) resourcepb.ResourceIndexClient {
if dual.IsEnabled(gr) {
return &searchWrapper{
dual: dual,
groupResource: gr,
unifiedClient: unifiedClient,
legacyClient: legacyClient,
+ features: features,
+ logger: log.New("unified-storage.search-client"),
}
}
//nolint:errcheck
@@ -37,6 +47,8 @@ type searchWrapper struct {
unifiedClient resourcepb.ResourceIndexClient
legacyClient resourcepb.ResourceIndexClient
+ features featuremgmt.FeatureToggles
+ logger log.Logger
}
func (s *searchWrapper) GetStats(ctx context.Context, in *resourcepb.ResourceStatsRequest,
@@ -49,6 +61,26 @@ func (s *searchWrapper) GetStats(ctx context.Context, in *resourcepb.ResourceSta
if unified {
client = s.unifiedClient
}
+
+ // If dual reader feature flag is enabled, and legacy is the main storage,
+ // make a background call to unified
+ if s.features != nil && s.features.IsEnabledGlobally(featuremgmt.FlagUnifiedStorageSearchDualReaderEnabled) && !unified {
+ // Create background context with timeout but ignore parent cancelation
+ ctxBg := context.WithoutCancel(ctx)
+ ctxBgWithTimeout, cancel := context.WithTimeout(ctxBg, backgroundRequestTimeout)
+
+ // Make background call without blocking the main request
+ go func() {
+ defer cancel() // Ensure we clean up the context
+ _, bgErr := s.unifiedClient.GetStats(ctxBgWithTimeout, in, opts...)
+ if bgErr != nil {
+ s.logger.Error("Background GetStats call to unified failed", "error", bgErr, "timeout", backgroundRequestTimeout)
+ } else {
+ s.logger.Debug("Background GetStats call to unified succeeded", "timeout", backgroundRequestTimeout)
+ }
+ }()
+ }
+
return client.GetStats(ctx, in, opts...)
}
@@ -62,5 +94,25 @@ func (s *searchWrapper) Search(ctx context.Context, in *resourcepb.ResourceSearc
if unified {
client = s.unifiedClient
}
+
+ // If dual reader feature flag is enabled, and legacy is the main storage,
+ // make a background call to unified
+ if s.features != nil && s.features.IsEnabledGlobally(featuremgmt.FlagUnifiedStorageSearchDualReaderEnabled) && !unified {
+ // Create background context with timeout but ignore parent cancelation
+ ctxBg := context.WithoutCancel(ctx)
+ ctxBgWithTimeout, cancel := context.WithTimeout(ctxBg, backgroundRequestTimeout)
+
+ // Make background call without blocking the main request
+ go func() {
+ defer cancel() // Ensure we clean up the context
+ _, bgErr := s.unifiedClient.Search(ctxBgWithTimeout, in, opts...)
+ if bgErr != nil {
+ s.logger.Error("Background Search call to unified failed", "error", bgErr, "timeout", backgroundRequestTimeout)
+ } else {
+ s.logger.Debug("Background Search call to unified succeeded", "timeout", backgroundRequestTimeout)
+ }
+ }()
+ }
+
return client.Search(ctx, in, opts...)
}
diff --git a/pkg/storage/unified/resource/search_client_test.go b/pkg/storage/unified/resource/search_client_test.go
new file mode 100644
index 00000000000..c46093b45c9
--- /dev/null
+++ b/pkg/storage/unified/resource/search_client_test.go
@@ -0,0 +1,445 @@
+package resource
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/mock"
+ "github.com/stretchr/testify/require"
+ "google.golang.org/grpc"
+ "k8s.io/apimachinery/pkg/runtime/schema"
+
+ "github.com/grafana/grafana/pkg/infra/log"
+ "github.com/grafana/grafana/pkg/services/featuremgmt"
+ "github.com/grafana/grafana/pkg/storage/unified/resourcepb"
+ "github.com/grafana/grafana/pkg/util/testutil"
+)
+
+// Mock DualWriter
+type MockDualWriter struct {
+ mock.Mock
+}
+
+func (m *MockDualWriter) IsEnabled(gr schema.GroupResource) bool {
+ args := m.Called(gr)
+ return args.Bool(0)
+}
+
+func (m *MockDualWriter) ReadFromUnified(ctx context.Context, gr schema.GroupResource) (bool, error) {
+ args := m.Called(ctx, gr)
+ return args.Bool(0), args.Error(1)
+}
+
+// Mock ResourceIndexClient with enhanced timeout testing capabilities
+type MockResourceIndexClient struct {
+ mock.Mock
+ searchCalled chan struct{}
+ statsCalled chan struct{}
+ searchDelay time.Duration
+ statsDelay time.Duration
+ contextCanceled chan context.Context
+}
+
+func NewMockResourceIndexClient() *MockResourceIndexClient {
+ return &MockResourceIndexClient{
+ searchCalled: make(chan struct{}, 1),
+ statsCalled: make(chan struct{}, 1),
+ contextCanceled: make(chan context.Context, 10), // Buffer for multiple calls
+ }
+}
+
+func (m *MockResourceIndexClient) SetSearchDelay(delay time.Duration) {
+ m.searchDelay = delay
+}
+
+func (m *MockResourceIndexClient) SetStatsDelay(delay time.Duration) {
+ m.statsDelay = delay
+}
+
+func (m *MockResourceIndexClient) Search(ctx context.Context, in *resourcepb.ResourceSearchRequest, opts ...grpc.CallOption) (*resourcepb.ResourceSearchResponse, error) {
+ args := m.Called(ctx, in, opts)
+
+ // Simulate delay if configured
+ if m.searchDelay > 0 {
+ select {
+ case <-time.After(m.searchDelay):
+ // Delay completed normally
+ case <-ctx.Done():
+ // Context was canceled during delay
+ m.contextCanceled <- ctx
+ return nil, ctx.Err()
+ }
+ }
+
+ // Signal that Search was called
+ select {
+ case m.searchCalled <- struct{}{}:
+ default:
+ }
+
+ return args.Get(0).(*resourcepb.ResourceSearchResponse), args.Error(1)
+}
+
+func (m *MockResourceIndexClient) GetStats(ctx context.Context, in *resourcepb.ResourceStatsRequest, opts ...grpc.CallOption) (*resourcepb.ResourceStatsResponse, error) {
+ args := m.Called(ctx, in, opts)
+
+ // Simulate delay if configured
+ if m.statsDelay > 0 {
+ select {
+ case <-time.After(m.statsDelay):
+ // Delay completed normally
+ case <-ctx.Done():
+ // Context was canceled during delay
+ m.contextCanceled <- ctx
+ return nil, ctx.Err()
+ }
+ }
+
+ // Signal that GetStats was called
+ select {
+ case m.statsCalled <- struct{}{}:
+ default:
+ }
+
+ return args.Get(0).(*resourcepb.ResourceStatsResponse), args.Error(1)
+}
+
+func setupTestSearchClient(t *testing.T) (schema.GroupResource, *MockResourceIndexClient, *MockResourceIndexClient, featuremgmt.FeatureToggles) {
+ t.Helper()
+ gr := schema.GroupResource{Group: "test", Resource: "items"}
+ unifiedClient := NewMockResourceIndexClient()
+ legacyClient := NewMockResourceIndexClient()
+ features := featuremgmt.WithFeatures()
+ return gr, unifiedClient, legacyClient, features
+}
+
+func setupTestSearchWrapper(t *testing.T, dual *MockDualWriter, unifiedClient, legacyClient *MockResourceIndexClient, features featuremgmt.FeatureToggles, gr schema.GroupResource) *searchWrapper {
+ t.Helper()
+ return &searchWrapper{
+ dual: dual,
+ groupResource: gr,
+ unifiedClient: unifiedClient,
+ legacyClient: legacyClient,
+ features: features,
+ logger: log.NewNopLogger(),
+ }
+}
+
+func TestSearchClient_NewSearchClient(t *testing.T) {
+ gr, unifiedClient, legacyClient, features := setupTestSearchClient(t)
+
+ t.Run("returns wrapper when dual writer is enabled", func(t *testing.T) {
+ dual := &MockDualWriter{} // Create fresh mock for this test
+ dual.On("IsEnabled", gr).Return(true)
+
+ client := NewSearchClient(dual, gr, unifiedClient, legacyClient, features)
+
+ wrapper, ok := client.(*searchWrapper)
+ require.True(t, ok)
+ assert.Equal(t, dual, wrapper.dual)
+ assert.Equal(t, gr, wrapper.groupResource)
+ assert.Equal(t, unifiedClient, wrapper.unifiedClient)
+ assert.Equal(t, legacyClient, wrapper.legacyClient)
+
+ dual.AssertExpectations(t)
+ })
+
+ t.Run("returns unified client when dual writer disabled but read from unified", func(t *testing.T) {
+ dual := &MockDualWriter{} // Create fresh mock for this test
+ dual.On("IsEnabled", gr).Return(false)
+ dual.On("ReadFromUnified", mock.Anything, gr).Return(true, nil)
+
+ client := NewSearchClient(dual, gr, unifiedClient, legacyClient, features)
+
+ assert.Equal(t, unifiedClient, client)
+ dual.AssertExpectations(t)
+ })
+
+ t.Run("returns legacy client when dual writer disabled and not reading from unified", func(t *testing.T) {
+ dual := &MockDualWriter{} // Create fresh mock for this test
+ dual.On("IsEnabled", gr).Return(false)
+ dual.On("ReadFromUnified", mock.Anything, gr).Return(false, nil)
+
+ client := NewSearchClient(dual, gr, unifiedClient, legacyClient, features)
+
+ assert.Equal(t, legacyClient, client)
+ dual.AssertExpectations(t)
+ })
+}
+
+func TestSearchWrapper_Search(t *testing.T) {
+ gr, unifiedClient, legacyClient, features := setupTestSearchClient(t)
+ req := &resourcepb.ResourceSearchRequest{Query: "test"}
+ expectedResponse := &resourcepb.ResourceSearchResponse{TotalHits: 0}
+
+ t.Run("uses unified client when reading from unified", func(t *testing.T) {
+ ctx := testutil.NewDefaultTestContext(t)
+ dual := &MockDualWriter{}
+
+ dual.On("ReadFromUnified", mock.Anything, gr).Return(true, nil)
+ unifiedClient.On("Search", mock.Anything, req, mock.Anything).Return(expectedResponse, nil)
+
+ wrapper := setupTestSearchWrapper(t, dual, unifiedClient, legacyClient, features, gr)
+
+ resp, err := wrapper.Search(ctx, req)
+
+ require.NoError(t, err)
+ assert.Equal(t, expectedResponse, resp)
+
+ dual.AssertExpectations(t)
+ unifiedClient.AssertExpectations(t)
+ legacyClient.AssertNotCalled(t, "Search")
+ })
+
+ t.Run("uses legacy client when not reading from unified", func(t *testing.T) {
+ ctx := testutil.NewDefaultTestContext(t)
+ dual := &MockDualWriter{}
+
+ dual.On("ReadFromUnified", mock.Anything, gr).Return(false, nil)
+ legacyClient.On("Search", mock.Anything, req, mock.Anything).Return(expectedResponse, nil)
+
+ wrapper := setupTestSearchWrapper(t, dual, unifiedClient, legacyClient, features, gr)
+
+ resp, err := wrapper.Search(ctx, req)
+
+ require.NoError(t, err)
+ assert.Equal(t, expectedResponse, resp)
+
+ dual.AssertExpectations(t)
+ legacyClient.AssertExpectations(t)
+ unifiedClient.AssertNotCalled(t, "Search")
+ })
+
+ t.Run("makes background call to unified when feature flag enabled and using legacy", func(t *testing.T) {
+ ctx := testutil.NewDefaultTestContext(t)
+ dual := &MockDualWriter{}
+ featuresWithFlag := featuremgmt.WithFeatures(featuremgmt.FlagUnifiedStorageSearchDualReaderEnabled)
+
+ dual.On("ReadFromUnified", mock.Anything, gr).Return(false, nil)
+ legacyClient.On("Search", mock.Anything, req, mock.Anything).Return(expectedResponse, nil)
+
+ // Expect background call to unified client
+ unifiedBgResponse := &resourcepb.ResourceSearchResponse{TotalHits: 0}
+ unifiedClient.On("Search", mock.Anything, req, mock.Anything).Return(unifiedBgResponse, nil)
+
+ wrapper := setupTestSearchWrapper(t, dual, unifiedClient, legacyClient, featuresWithFlag, gr)
+
+ resp, err := wrapper.Search(ctx, req)
+
+ require.NoError(t, err)
+ assert.Equal(t, expectedResponse, resp)
+
+ // Wait for background goroutine to complete
+ select {
+ case <-unifiedClient.searchCalled:
+ // Background call was made
+ case <-time.After(100 * time.Millisecond):
+ t.Fatal("Background unified client call was not made within timeout")
+ }
+
+ dual.AssertExpectations(t)
+ legacyClient.AssertExpectations(t)
+ unifiedClient.AssertExpectations(t)
+ })
+
+ t.Run("handles background call error gracefully", func(t *testing.T) {
+ ctx := testutil.NewDefaultTestContext(t)
+ dual := &MockDualWriter{}
+ featuresWithFlag := featuremgmt.WithFeatures(featuremgmt.FlagUnifiedStorageSearchDualReaderEnabled)
+
+ dual.On("ReadFromUnified", mock.Anything, gr).Return(false, nil)
+ legacyClient.On("Search", mock.Anything, req, mock.Anything).Return(expectedResponse, nil)
+
+ // Background call returns error - should be handled gracefully
+ unifiedClient.On("Search", mock.Anything, req, mock.Anything).Return((*resourcepb.ResourceSearchResponse)(nil), assert.AnError)
+
+ wrapper := setupTestSearchWrapper(t, dual, unifiedClient, legacyClient, featuresWithFlag, gr)
+
+ resp, err := wrapper.Search(ctx, req)
+
+ // Main request should still succeed despite background error
+ require.NoError(t, err)
+ assert.Equal(t, expectedResponse, resp)
+
+ // Wait for background goroutine to complete
+ select {
+ case <-unifiedClient.searchCalled:
+ // Background call was made (even though it failed)
+ case <-time.After(100 * time.Millisecond):
+ t.Fatal("Background unified client call was not made within timeout")
+ }
+
+ dual.AssertExpectations(t)
+ legacyClient.AssertExpectations(t)
+ unifiedClient.AssertExpectations(t)
+ })
+
+ t.Run("background request times out after 500ms", func(t *testing.T) {
+ ctx := testutil.NewDefaultTestContext(t)
+ dual := &MockDualWriter{}
+ featuresWithFlag := featuremgmt.WithFeatures(featuremgmt.FlagUnifiedStorageSearchDualReaderEnabled)
+
+ dual.On("ReadFromUnified", mock.Anything, gr).Return(false, nil)
+ legacyClient.On("Search", mock.Anything, req, mock.Anything).Return(expectedResponse, nil)
+
+ // Configure unified client to take longer than the 500ms timeout
+ unifiedClient.SetSearchDelay(600 * time.Millisecond) // Longer than 500ms timeout
+ unifiedClient.On("Search", mock.Anything, req, mock.Anything).Return((*resourcepb.ResourceSearchResponse)(nil), context.DeadlineExceeded)
+
+ wrapper := setupTestSearchWrapper(t, dual, unifiedClient, legacyClient, featuresWithFlag, gr)
+
+ start := time.Now()
+ resp, err := wrapper.Search(ctx, req)
+ mainRequestDuration := time.Since(start)
+
+ // Main request should succeed quickly despite background timeout
+ require.NoError(t, err)
+ assert.Equal(t, expectedResponse, resp)
+ assert.Less(t, mainRequestDuration, 50*time.Millisecond, "Main request should not be blocked by background timeout")
+
+ // Wait for background context to be canceled
+ select {
+ case canceledCtx := <-unifiedClient.contextCanceled:
+ assert.Error(t, canceledCtx.Err(), "Background context should be canceled")
+ assert.Equal(t, context.DeadlineExceeded, canceledCtx.Err())
+ case <-time.After(700 * time.Millisecond):
+ t.Fatal("Background request should have been canceled due to timeout")
+ }
+
+ dual.AssertExpectations(t)
+ legacyClient.AssertExpectations(t)
+ unifiedClient.AssertExpectations(t)
+ })
+
+ t.Run("background request completes successfully when within timeout", func(t *testing.T) {
+ ctx := testutil.NewDefaultTestContext(t)
+ dual := &MockDualWriter{}
+ featuresWithFlag := featuremgmt.WithFeatures(featuremgmt.FlagUnifiedStorageSearchDualReaderEnabled)
+
+ dual.On("ReadFromUnified", mock.Anything, gr).Return(false, nil)
+ legacyClient.On("Search", mock.Anything, req, mock.Anything).Return(expectedResponse, nil)
+
+ // Configure unified client to respond within the 500ms timeout
+ unifiedClient.SetSearchDelay(100 * time.Millisecond) // Well within 500ms timeout
+ unifiedClient.On("Search", mock.Anything, req, mock.Anything).Return(&resourcepb.ResourceSearchResponse{TotalHits: 0}, nil)
+
+ wrapper := setupTestSearchWrapper(t, dual, unifiedClient, legacyClient, featuresWithFlag, gr)
+
+ start := time.Now()
+ resp, err := wrapper.Search(ctx, req)
+ mainRequestDuration := time.Since(start)
+
+ // Main request should succeed quickly
+ require.NoError(t, err)
+ assert.Equal(t, expectedResponse, resp)
+ assert.Less(t, mainRequestDuration, 50*time.Millisecond, "Main request should not be blocked")
+
+ // Wait for successful background call
+ select {
+ case <-unifiedClient.searchCalled:
+ // Background call completed successfully
+ case <-time.After(200 * time.Millisecond):
+ t.Fatal("Expected successful background call")
+ }
+
+ dual.AssertExpectations(t)
+ legacyClient.AssertExpectations(t)
+ unifiedClient.AssertExpectations(t)
+ })
+}
+
+func TestSearchWrapper_GetStats(t *testing.T) {
+ gr, unifiedClient, legacyClient, features := setupTestSearchClient(t)
+ req := &resourcepb.ResourceStatsRequest{Namespace: "test"}
+ expectedResponse := &resourcepb.ResourceStatsResponse{Stats: []*resourcepb.ResourceStatsResponse_Stats{{Count: 100}}}
+
+ t.Run("uses unified client when reading from unified", func(t *testing.T) {
+ ctx := testutil.NewDefaultTestContext(t)
+ dual := &MockDualWriter{}
+
+ dual.On("ReadFromUnified", mock.Anything, gr).Return(true, nil)
+ unifiedClient.On("GetStats", mock.Anything, req, mock.Anything).Return(expectedResponse, nil)
+
+ wrapper := setupTestSearchWrapper(t, dual, unifiedClient, legacyClient, features, gr)
+
+ resp, err := wrapper.GetStats(ctx, req)
+
+ require.NoError(t, err)
+ assert.Equal(t, expectedResponse, resp)
+
+ dual.AssertExpectations(t)
+ unifiedClient.AssertExpectations(t)
+ legacyClient.AssertNotCalled(t, "GetStats")
+ })
+
+ t.Run("makes background call to unified when feature flag enabled and using legacy", func(t *testing.T) {
+ ctx := testutil.NewDefaultTestContext(t)
+ dual := &MockDualWriter{}
+ featuresWithFlag := featuremgmt.WithFeatures(featuremgmt.FlagUnifiedStorageSearchDualReaderEnabled)
+
+ dual.On("ReadFromUnified", mock.Anything, gr).Return(false, nil)
+ legacyClient.On("GetStats", mock.Anything, req, mock.Anything).Return(expectedResponse, nil)
+
+ // Expect background call to unified client
+ unifiedBgResponse := &resourcepb.ResourceStatsResponse{Stats: []*resourcepb.ResourceStatsResponse_Stats{{Count: 50}}}
+ unifiedClient.On("GetStats", mock.Anything, req, mock.Anything).Return(unifiedBgResponse, nil)
+
+ wrapper := setupTestSearchWrapper(t, dual, unifiedClient, legacyClient, featuresWithFlag, gr)
+
+ resp, err := wrapper.GetStats(ctx, req)
+
+ require.NoError(t, err)
+ assert.Equal(t, expectedResponse, resp)
+
+ // Wait for background goroutine to complete
+ select {
+ case <-unifiedClient.statsCalled:
+ // Background call was made
+ case <-time.After(100 * time.Millisecond):
+ t.Fatal("Background unified client GetStats call was not made within timeout")
+ }
+
+ dual.AssertExpectations(t)
+ legacyClient.AssertExpectations(t)
+ unifiedClient.AssertExpectations(t)
+ })
+
+ t.Run("background GetStats request times out after 500ms", func(t *testing.T) {
+ ctx := testutil.NewDefaultTestContext(t)
+ dual := &MockDualWriter{}
+ featuresWithFlag := featuremgmt.WithFeatures(featuremgmt.FlagUnifiedStorageSearchDualReaderEnabled)
+
+ dual.On("ReadFromUnified", mock.Anything, gr).Return(false, nil)
+ legacyClient.On("GetStats", mock.Anything, req, mock.Anything).Return(expectedResponse, nil)
+
+ // Configure unified client to take longer than the 500ms timeout
+ unifiedClient.SetStatsDelay(600 * time.Millisecond) // Longer than 500ms timeout
+ unifiedClient.On("GetStats", mock.Anything, req, mock.Anything).Return((*resourcepb.ResourceStatsResponse)(nil), context.DeadlineExceeded)
+
+ wrapper := setupTestSearchWrapper(t, dual, unifiedClient, legacyClient, featuresWithFlag, gr)
+
+ start := time.Now()
+ resp, err := wrapper.GetStats(ctx, req)
+ mainRequestDuration := time.Since(start)
+
+ // Main request should succeed quickly despite background timeout
+ require.NoError(t, err)
+ assert.Equal(t, expectedResponse, resp)
+ assert.Less(t, mainRequestDuration, 50*time.Millisecond, "Main request should not be blocked by background timeout")
+
+ // Wait for background context to be canceled
+ select {
+ case canceledCtx := <-unifiedClient.contextCanceled:
+ assert.Error(t, canceledCtx.Err(), "Background context should be canceled")
+ assert.Equal(t, context.DeadlineExceeded, canceledCtx.Err())
+ case <-time.After(700 * time.Millisecond):
+ t.Fatal("Background request should have been canceled due to timeout")
+ }
+
+ dual.AssertExpectations(t)
+ legacyClient.AssertExpectations(t)
+ unifiedClient.AssertExpectations(t)
+ })
+}
From 6222117365049b765576e3239cca0190e2e58758 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 18 Jul 2025 13:53:48 +0100
Subject: [PATCH 28/46] Update dependency @grafana/lezer-traceql to v0.0.23
(#108311)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
public/app/plugins/datasource/tempo/package.json | 2 +-
yarn.lock | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/public/app/plugins/datasource/tempo/package.json b/public/app/plugins/datasource/tempo/package.json
index e91f89ae21e..4e6131aca8c 100644
--- a/public/app/plugins/datasource/tempo/package.json
+++ b/public/app/plugins/datasource/tempo/package.json
@@ -7,7 +7,7 @@
"@emotion/css": "11.13.5",
"@grafana/data": "workspace:*",
"@grafana/e2e-selectors": "workspace:*",
- "@grafana/lezer-traceql": "0.0.22",
+ "@grafana/lezer-traceql": "0.0.23",
"@grafana/monaco-logql": "^0.0.8",
"@grafana/o11y-ds-frontend": "workspace:*",
"@grafana/plugin-ui": "0.10.7",
diff --git a/yarn.lock b/yarn.lock
index b619a2d1fe1..8873698c59b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2927,7 +2927,7 @@ __metadata:
"@emotion/css": "npm:11.13.5"
"@grafana/data": "workspace:*"
"@grafana/e2e-selectors": "workspace:*"
- "@grafana/lezer-traceql": "npm:0.0.22"
+ "@grafana/lezer-traceql": "npm:0.0.23"
"@grafana/monaco-logql": "npm:^0.0.8"
"@grafana/o11y-ds-frontend": "workspace:*"
"@grafana/plugin-configs": "npm:12.1.0-pre"
@@ -3317,12 +3317,12 @@ __metadata:
languageName: node
linkType: hard
-"@grafana/lezer-traceql@npm:0.0.22":
- version: 0.0.22
- resolution: "@grafana/lezer-traceql@npm:0.0.22"
+"@grafana/lezer-traceql@npm:0.0.23":
+ version: 0.0.23
+ resolution: "@grafana/lezer-traceql@npm:0.0.23"
peerDependencies:
"@lezer/lr": ^1.4.2
- checksum: 10/e7f640e902d0738c72950a7584b5ceed68114582eb9c33546bf3fbc938baf7a460b93cd9b90e65a0d8f16a3870ecc282c6ecc12a6c321232247abc05111662df
+ checksum: 10/e9dba8ed747062c791fd2298e20e18da06642d273f9c502f8c1ec90524108edf7c6bd4e719db2ae62de77ba02bfaf0d2f291058d04727969b5af67cdb277b9c3
languageName: node
linkType: hard
From 5905e93c631a93206f9162c50c59f302d4ad5366 Mon Sep 17 00:00:00 2001
From: Josh Hunt
Date: Fri, 18 Jul 2025 13:55:37 +0100
Subject: [PATCH 29/46] Fix yarn start:noLint not working since the predev
check (#108313)
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 51d465c1d95..e82c322daa2 100644
--- a/package.json
+++ b/package.json
@@ -47,7 +47,7 @@
"prettier:check": "prettier --check --ignore-path .prettierignore --list-different=false --log-level=warn \"**/*.{ts,tsx,scss,md,mdx,json,js,cjs}\"",
"prettier:checkDocs": "prettier --check --list-different=false --log-level=warn \"docs/**/*.md\" \"*.md\" \"packages/**/*.{ts,tsx,scss,md,mdx,json,js,cjs}\"",
"prettier:write": "prettier --ignore-path .prettierignore --list-different \"**/*.{js,ts,tsx,scss,md,mdx,json,cjs}\" --write",
- "start": "yarn predev && NODE_ENV=dev nx exec -- webpack --config scripts/webpack/webpack.dev.js --watch",
+ "start": "yarn predev && NODE_ENV=dev nx exec -- webpack --config scripts/webpack/webpack.dev.js --watch $@",
"start:liveReload": "yarn start -- --env liveReload=1",
"start:noTsCheck": "yarn start -- --env noTsCheck=1",
"start:noLint": "yarn start -- --env noTsCheck=1 --env noLint=1",
From a30c0aaaae6c873966ce2a3d863f564e2951c400 Mon Sep 17 00:00:00 2001
From: Alexa Vargas <239999+axelavargas@users.noreply.github.com>
Date: Fri, 18 Jul 2025 15:06:55 +0200
Subject: [PATCH 30/46] Dashboard: SchemaV2 - Inline Library Panel during
Export (#107201)
* Basic implementation of inline library panel
* modify the warning message, we support the export partially by converting regular panels the library panels
* Improve message around the conversion, keep it concise
* Fix linting
* Refactor conversion, extract existing logic into new funcition and reuse it
* remove unnecesary comment
* show error notification when library panel does not load
* Apply PR feedback, remove unnecesary try catch and return json with error, don't throw
* Add unit tests
* Fix monitoring report, add case when v2 is loaded originally or when transformed from v1
* Add unit tests for detect libraryPanels, relevant for ensure monitoring is correct
---
.../scene/export/exporters.test.ts | 183 +++++++++++++--
.../dashboard-scene/scene/export/exporters.ts | 82 ++++++-
.../sharing/ExportButton/ResourceExport.tsx | 14 +-
.../sharing/ShareExportTab.test.tsx | 210 +++++++++++++++---
.../sharing/ShareExportTab.tsx | 33 ++-
.../dashboard/api/ResponseTransformers.ts | 93 ++++----
public/locales/en-US/grafana.json | 4 +-
7 files changed, 498 insertions(+), 121 deletions(-)
diff --git a/public/app/features/dashboard-scene/scene/export/exporters.test.ts b/public/app/features/dashboard-scene/scene/export/exporters.test.ts
index 9f9028e2c41..23f8ad327af 100644
--- a/public/app/features/dashboard-scene/scene/export/exporters.test.ts
+++ b/public/app/features/dashboard-scene/scene/export/exporters.test.ts
@@ -5,6 +5,8 @@ import { Dashboard, DashboardCursorSync, ThresholdsMode } from '@grafana/schema'
import { handyTestingSchema } from '@grafana/schema/dist/esm/schema/dashboard/v2_examples';
import {
DatasourceVariableKind,
+ LibraryPanelKind,
+ PanelKind,
QueryVariableKind,
} from '@grafana/schema/dist/esm/schema/dashboard/v2alpha1/types.spec.gen';
import config from 'app/core/config';
@@ -50,8 +52,36 @@ jest.mock('@grafana/runtime', () => ({
}));
jest.mock('app/features/library-panels/state/api', () => ({
- getLibraryPanel: jest.fn().mockReturnValue(
- Promise.resolve({
+ getLibraryPanel: jest.fn().mockImplementation((uid: string) => {
+ if (uid === 'test-library-panel-uid') {
+ return Promise.resolve({
+ name: 'Test Library Panel',
+ uid: 'test-library-panel-uid',
+ model: {
+ type: 'timeseries',
+ datasource: {
+ type: 'testdb',
+ uid: 'gfdb',
+ },
+ targets: [
+ {
+ refId: 'A',
+ datasource: {
+ type: 'testdb',
+ uid: 'gfdb',
+ },
+ },
+ ],
+ id: 123,
+ title: 'Test Library Panel',
+ },
+ });
+ }
+ if (uid === 'invalid-uid') {
+ return Promise.reject(new Error('Library panel not found'));
+ }
+ // Default behavior for other UIDs
+ return Promise.resolve({
name: 'Testing lib panel 1',
uid: 'abc-123',
model: {
@@ -60,9 +90,18 @@ jest.mock('app/features/library-panels/state/api', () => ({
type: 'testdb',
uid: '${DS_GFDB}',
},
+ targets: [
+ {
+ refId: 'A',
+ datasource: {
+ type: 'testdb',
+ uid: '${DS_GFDB}',
+ },
+ },
+ ],
},
- })
- ),
+ });
+ }),
}));
variableAdapters.register(createQueryVariableAdapter());
@@ -514,6 +553,12 @@ describe('dashboard exporter v1', () => {
expect(element.kind).toBe(LibraryElementKind.Panel);
expect(element.model).toEqual({
datasource: { type: 'testdb', uid: '${DS_GFDB}' },
+ targets: [
+ {
+ datasource: { type: 'testdb', uid: '${DS_GFDB}' },
+ refId: 'A',
+ },
+ ],
type: 'graph',
});
});
@@ -528,6 +573,12 @@ describe('dashboard exporter v1', () => {
type: 'testdb',
uid: '${DS_GFDB}',
},
+ targets: [
+ {
+ datasource: { type: 'testdb', uid: '${DS_GFDB}' },
+ refId: 'A',
+ },
+ ],
});
});
});
@@ -600,15 +651,6 @@ describe('dashboard exporter v2', () => {
expect(annotationQuery.spec.datasource?.uid).toBeUndefined();
});
- it('should remove library panels from layout', async () => {
- const { dashboard, originalSchema } = await setup();
- const elementRef = 'panel-2';
- const libraryPanel = dashboard.elements[elementRef];
- const origLibraryPanel = originalSchema.elements[elementRef];
- expect(origLibraryPanel.kind).toBe('LibraryPanel');
- expect(libraryPanel).toBeUndefined();
- });
-
it('should not remove datasource ref from panel that uses a datasource variable', async () => {
const { dashboard } = await setup();
const panel = dashboard.elements['panel-using-datasource-var'];
@@ -622,6 +664,121 @@ describe('dashboard exporter v2', () => {
uid: '${datasourceVar}',
});
});
+
+ it('should convert library panels to inline panels when sharing externally', async () => {
+ const setupWithLibraryPanel = async (isSharingExternally: boolean) => {
+ const schemaCopy = JSON.parse(JSON.stringify(handyTestingSchema));
+
+ // Add a library panel to test conversion
+ schemaCopy.elements['test-library-panel'] = {
+ kind: 'LibraryPanel',
+ spec: {
+ id: 123,
+ title: 'Test Library Panel',
+ libraryPanel: {
+ uid: 'test-library-panel-uid',
+ name: 'Test Library Panel',
+ },
+ },
+ };
+
+ // Handle makeExportableV2 union return type: DashboardV2Spec | { error: unknown }
+ const dashboard = await makeExportableV2(schemaCopy, isSharingExternally);
+ if (typeof dashboard === 'object' && 'error' in dashboard) {
+ throw dashboard.error;
+ }
+ return { dashboard, originalSchema: schemaCopy };
+ };
+
+ const { dashboard } = await setupWithLibraryPanel(true); // isSharingExternally = true
+
+ // Library panel should be converted to inline panel
+ const convertedPanel = dashboard.elements['test-library-panel'] as PanelKind;
+ expect(convertedPanel.kind).toBe('Panel');
+ expect(convertedPanel.spec.id).toBe(123);
+
+ // Check that the panel was properly converted
+ expect(convertedPanel.spec.data.spec.queries[0].spec.query.kind).toBe('testdb');
+ expect(convertedPanel.spec.data.spec.queries[0].spec.refId).toBe('A');
+ });
+
+ it('should keep library panels as-is when not sharing externally', async () => {
+ const setupWithLibraryPanel = async (isSharingExternally: boolean) => {
+ const schemaCopy = JSON.parse(JSON.stringify(handyTestingSchema));
+
+ // Add a library panel
+ schemaCopy.elements['test-library-panel'] = {
+ kind: 'LibraryPanel',
+ spec: {
+ id: 124,
+ title: 'Test Library Panel',
+ libraryPanel: {
+ uid: 'abc-123',
+ name: 'Testing lib panel 1',
+ },
+ },
+ };
+
+ // Handle makeExportableV2 union return type: DashboardV2Spec | { error: unknown }
+ const dashboard = await makeExportableV2(schemaCopy, isSharingExternally);
+ if (typeof dashboard === 'object' && 'error' in dashboard) {
+ throw dashboard.error;
+ }
+ return { dashboard, originalSchema: schemaCopy };
+ };
+
+ const { dashboard } = await setupWithLibraryPanel(false); // isSharingExternally = false
+
+ // Library panel should remain as library panel
+ const libraryPanel = dashboard.elements['test-library-panel'];
+ expect(libraryPanel.kind).toBe('LibraryPanel');
+ expect((libraryPanel as LibraryPanelKind).spec.libraryPanel.uid).toBe('abc-123');
+ });
+
+ it('should handle library panel conversion errors gracefully', async () => {
+ // Mock console.error to avoid Jest warnings
+ const consoleSpy = jest.spyOn(console, 'error').mockImplementation(() => {});
+
+ const setupWithInvalidLibraryPanel = async () => {
+ const schemaCopy = JSON.parse(JSON.stringify(handyTestingSchema));
+
+ // Add a library panel with invalid uid that will cause getLibraryPanel to fail
+ schemaCopy.elements['invalid-library-panel'] = {
+ kind: 'LibraryPanel',
+ spec: {
+ id: 125,
+ title: 'Invalid Library Panel',
+ libraryPanel: {
+ uid: 'invalid-uid',
+ name: 'Invalid Library Panel',
+ },
+ },
+ };
+
+ // Handle makeExportableV2 union return type: DashboardV2Spec | { error: unknown }
+ const dashboard = await makeExportableV2(schemaCopy, true); // isSharingExternally = true
+ if (typeof dashboard === 'object' && 'error' in dashboard) {
+ throw dashboard.error;
+ }
+
+ return { dashboard, originalSchema: schemaCopy };
+ };
+
+ const { dashboard } = await setupWithInvalidLibraryPanel();
+
+ // Should return a placeholder panel
+ const placeholderPanel = dashboard.elements['invalid-library-panel'];
+ expect(placeholderPanel.kind).toBe('Panel');
+ expect((placeholderPanel as PanelKind).spec.id).toBe(125);
+ expect((placeholderPanel as PanelKind).spec.title).toBe('Invalid Library Panel');
+ expect((placeholderPanel as PanelKind).spec.vizConfig.kind).toBe('text');
+
+ // Verify console.error was called
+ expect(consoleSpy).toHaveBeenCalledWith('Failed to load library panel invalid-uid:', expect.any(Error));
+
+ // Restore console.error
+ consoleSpy.mockRestore();
+ });
});
function getStubInstanceSettings(v: string | DataSourceRef): DataSourceInstanceSettings {
diff --git a/public/app/features/dashboard-scene/scene/export/exporters.ts b/public/app/features/dashboard-scene/scene/export/exporters.ts
index 4ef9f5a4cbd..5778960dd8b 100644
--- a/public/app/features/dashboard-scene/scene/export/exporters.ts
+++ b/public/app/features/dashboard-scene/scene/export/exporters.ts
@@ -2,6 +2,7 @@ import { defaults, each, sortBy } from 'lodash';
import { DataSourceRef, PanelPluginMeta, VariableOption, VariableRefresh } from '@grafana/data';
import { getDataSourceSrv } from '@grafana/runtime';
+import { Panel } from '@grafana/schema';
import {
Spec as DashboardV2Spec,
PanelKind,
@@ -9,20 +10,23 @@ import {
AnnotationQueryKind,
QueryVariableKind,
LibraryPanelRef,
+ LibraryPanelKind,
} from '@grafana/schema/dist/esm/schema/dashboard/v2alpha1/types.spec.gen';
+import { notifyApp } from 'app/core/actions';
import config from 'app/core/config';
+import { createErrorNotification } from 'app/core/copy/appNotification';
+import { buildPanelKind } from 'app/features/dashboard/api/ResponseTransformers';
import { DashboardModel } from 'app/features/dashboard/state/DashboardModel';
import { PanelModel, GridPos } from 'app/features/dashboard/state/PanelModel';
import { getLibraryPanel } from 'app/features/library-panels/state/api';
import { variableRegex } from 'app/features/variables/utils';
+import { dispatch } from 'app/store/store';
import { isPanelModelLibraryPanel } from '../../../library-panels/guard';
import { LibraryElementKind } from '../../../library-panels/types';
import { DashboardJson } from '../../../manage-dashboards/types';
import { isConstant } from '../../../variables/guard';
-import { removePanelRefFromLayout } from './utils';
-
export interface InputUsage {
libraryPanels?: LibraryPanelRef[];
}
@@ -331,7 +335,65 @@ export async function makeExportableV1(dashboard: DashboardModel) {
}
}
-export async function makeExportableV2(dashboard: DashboardV2Spec) {
+/**
+ * Converts a LibraryPanelKind to a PanelKind with embedded panel configuration
+ */
+async function convertLibraryPanelToInlinePanel(libraryPanelElement: LibraryPanelKind): Promise {
+ const { libraryPanel, id, title } = libraryPanelElement.spec;
+
+ try {
+ // Load the full library panel definition
+ const fullLibraryPanel = await getLibraryPanel(libraryPanel.uid, true);
+ const panelModel: Panel = fullLibraryPanel.model;
+ const inlinePanel = buildPanelKind(panelModel);
+ // keep the original id
+ inlinePanel.spec.id = id;
+ return inlinePanel;
+ } catch (error) {
+ console.error(`Failed to load library panel ${libraryPanel.uid}:`, error);
+
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
+ dispatch(
+ notifyApp(
+ createErrorNotification(
+ `Unable to load library panel "${libraryPanel.name}": ${errorMessage}. It will appear as a placeholder in the export.`
+ )
+ )
+ );
+
+ // Return a placeholder panel if library panel can't be loaded
+ return {
+ kind: 'Panel',
+ spec: {
+ id,
+ title: title || `Library Panel: ${libraryPanel.name}`,
+ description: '',
+ links: [],
+ data: {
+ kind: 'QueryGroup',
+ spec: {
+ queries: [],
+ transformations: [],
+ queryOptions: {},
+ },
+ },
+ vizConfig: {
+ kind: 'text',
+ spec: {
+ pluginVersion: '',
+ options: {
+ content: `**Library Panel Load Error**\n\nUnable to load library panel: ${libraryPanel.name} (${libraryPanel.uid})\n\nError: ${error instanceof Error ? error.message : 'Unknown error'}`,
+ mode: 'markdown',
+ },
+ fieldConfig: { defaults: {}, overrides: [] },
+ },
+ },
+ },
+ };
+ }
+}
+
+export async function makeExportableV2(dashboard: DashboardV2Spec, isSharingExternally = false) {
const variableLookup: { [key: string]: any } = {};
// get all datasource variables
@@ -367,17 +429,21 @@ export async function makeExportableV2(dashboard: DashboardV2Spec) {
try {
const elements = dashboard.elements;
- const layout = dashboard.layout;
// process elements
for (const [key, element] of Object.entries(elements)) {
if (element.kind === 'Panel') {
processPanel(element);
} else if (element.kind === 'LibraryPanel') {
- // just remove the library panel
- delete elements[key];
- // remove reference from layout
- removePanelRefFromLayout(layout, key);
+ if (isSharingExternally) {
+ // Convert library panel to inline panel for external sharing
+ const inlinePanel = await convertLibraryPanelToInlinePanel(element);
+ // Apply datasource templating to the converted panel
+ processPanel(inlinePanel);
+ // Replace the library panel with the inline panel
+ elements[key] = inlinePanel;
+ }
+ // For internal exports, keep library panels as-is
}
}
diff --git a/public/app/features/dashboard-scene/sharing/ExportButton/ResourceExport.tsx b/public/app/features/dashboard-scene/sharing/ExportButton/ResourceExport.tsx
index edc4aaf3384..3ec58d8aecb 100644
--- a/public/app/features/dashboard-scene/sharing/ExportButton/ResourceExport.tsx
+++ b/public/app/features/dashboard-scene/sharing/ExportButton/ResourceExport.tsx
@@ -4,7 +4,7 @@ import { selectors as e2eSelectors } from '@grafana/e2e-selectors';
import { Trans, t } from '@grafana/i18n';
import { Dashboard } from '@grafana/schema/dist/esm/index.gen';
import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2alpha1/types.spec.gen';
-import { Alert, Label, RadioButtonGroup, Stack, Switch, TextLink } from '@grafana/ui';
+import { Alert, Label, RadioButtonGroup, Stack, Switch } from '@grafana/ui';
import { DashboardJson } from 'app/features/manage-dashboards/types';
import { ExportableResource } from '../ShareExportTab';
@@ -127,19 +127,13 @@ export function ResourceExport({
- The dynamic dashboard functionality is experimental, and has not full feature parity with current dashboards
- behaviour. It is based on a new schema format, that does not support library panels. This means that when
- exporting the dashboard to use it in another instance, we will not include library panels. We intend to
- support them as we progress in the feature{' '}
-
- life cycle
-
- .
+ Due to limitations in the new dashboard schema (V2), library panels will be converted to regular panels with
+ embedded content during external export.
)}
diff --git a/public/app/features/dashboard-scene/sharing/ShareExportTab.test.tsx b/public/app/features/dashboard-scene/sharing/ShareExportTab.test.tsx
index fb416a280fb..19791d70670 100644
--- a/public/app/features/dashboard-scene/sharing/ShareExportTab.test.tsx
+++ b/public/app/features/dashboard-scene/sharing/ShareExportTab.test.tsx
@@ -1,7 +1,11 @@
import { config } from '@grafana/runtime';
import { SceneTimeRange } from '@grafana/scenes';
import { Dashboard } from '@grafana/schema/dist/esm/index.gen';
-import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2alpha1/types.spec.gen';
+import {
+ Spec as DashboardV2Spec,
+ defaultQueryGroupKind,
+ defaultVizConfigSpec,
+} from '@grafana/schema/dist/esm/schema/dashboard/v2alpha1/types.spec.gen';
import * as ResponseTransformers from 'app/features/dashboard/api/ResponseTransformers';
import { DashboardJson } from 'app/features/manage-dashboards/types';
import { DashboardDataDTO } from 'app/types/dashboard';
@@ -24,6 +28,7 @@ describe('ShareExportTab', () => {
beforeEach(() => {
config.featureToggles.kubernetesDashboards = true;
+ config.featureToggles.dashboardNewLayouts = false;
// Set up spies on the functions we want to track
transformV2ToV1Spy = jest.spyOn(ResponseTransformers, 'transformDashboardV2SpecToV1').mockReturnValue({
@@ -186,6 +191,88 @@ describe('ShareExportTab', () => {
// Should report correct initial version
expect(result.initialSaveModelVersion).toBe('v2');
});
+
+ // If V1 dashboard → V2 Resource should detect library panels correctly
+ it('should detect library panels in V1 dashboard when exporting as V2 resource', async () => {
+ const tab = buildV1DashboardWithLibraryPanels();
+ tab.setState({ exportMode: ExportMode.V2Resource });
+
+ const result = await tab.getExportableDashboardJson();
+
+ // Should detect library panels from V1 dashboard
+ expect(result.hasLibraryPanels).toBe(true);
+ expect(result.initialSaveModelVersion).toBe('v1');
+ });
+
+ // If V1 dashboard with dashboardNewLayouts disabled → V2 Resource should detect library panels correctly
+ it('should detect library panels in V1 dashboard when user selects V2Resource export mode', async () => {
+ const tab = buildV1DashboardWithLibraryPanels();
+ tab.setState({ exportMode: ExportMode.V2Resource });
+
+ const result = await tab.getExportableDashboardJson();
+
+ // Should detect library panels from V1 dashboard (first branch of the logic)
+ expect(result.hasLibraryPanels).toBe(true);
+ expect(result.initialSaveModelVersion).toBe('v1');
+ });
+
+ // If V1 dashboard without library panels → V2 Resource should return false
+ it('should return false for hasLibraryPanels when V1 dashboard has no library panels', async () => {
+ const tab = buildV1DashboardScenario();
+ tab.setState({ exportMode: ExportMode.V2Resource });
+
+ const result = await tab.getExportableDashboardJson();
+
+ // Should not detect library panels
+ expect(result.hasLibraryPanels).toBe(false);
+ expect(result.initialSaveModelVersion).toBe('v1');
+ });
+ });
+
+ describe('V2Resource export mode with dashboardNewLayouts disabled', () => {
+ beforeEach(() => {
+ config.featureToggles.dashboardNewLayouts = false;
+ });
+
+ afterEach(() => {
+ config.featureToggles.dashboardNewLayouts = true;
+ });
+
+ // If V2 dashboard → V2 Resource should detect library panels correctly
+ it('should detect library panels in V2 dashboard when exporting as V2 resource', async () => {
+ const tab = buildV2DashboardWithLibraryPanels();
+ tab.setState({ exportMode: ExportMode.V2Resource });
+
+ const result = await tab.getExportableDashboardJson();
+
+ // Should detect library panels from V2 dashboard elements (second branch of the logic)
+ expect(result.hasLibraryPanels).toBe(true);
+ expect(result.initialSaveModelVersion).toBe('v2');
+ });
+
+ // Test the second branch: V2 dashboard with V1 initial save model
+ it('should detect library panels in V2 dashboard with V1 initial save model', async () => {
+ const tab = buildV2DashboardWithV1InitialSaveModel();
+ tab.setState({ exportMode: ExportMode.V2Resource });
+
+ const result = await tab.getExportableDashboardJson();
+
+ // Should detect library panels from V2 dashboard elements (second branch of the logic)
+ expect(result.hasLibraryPanels).toBe(true);
+ expect(result.initialSaveModelVersion).toBe('v1');
+ });
+
+ // If V2 dashboard without library panels → V2 Resource should return false
+ it('should return false for hasLibraryPanels when V2 dashboard has no library panels', async () => {
+ const tab = buildV2DashboardScenario();
+ tab.setState({ exportMode: ExportMode.V2Resource });
+
+ const result = await tab.getExportableDashboardJson();
+
+ // Should not detect library panels
+ expect(result.hasLibraryPanels).toBe(false);
+ expect(result.initialSaveModelVersion).toBe('v2');
+ });
});
describe('Classic export mode', () => {
@@ -247,13 +334,37 @@ describe('ShareExportTab', () => {
});
});
- // Helper functions to create test scenarios
- function buildV1DashboardScenario(): ShareExportTab {
+ // Helper factory to create test scenarios
+ function createDashboardScenario(options: {
+ version: 'v1' | 'v2';
+ hasLibraryPanels?: boolean;
+ initialSaveModelVersion?: 'v1' | 'v2';
+ }): ShareExportTab {
+ const { version, hasLibraryPanels = false, initialSaveModelVersion = version } = options;
+
+ // Create V1 dashboard
const mockV1Dashboard: DashboardDataDTO = {
- title: 'Test Dashboard V1',
+ title: `Test Dashboard V1`,
uid: 'test-uid-v1',
version: 1,
- panels: [],
+ panels: hasLibraryPanels
+ ? [
+ {
+ id: 1,
+ type: 'stat',
+ title: 'Regular Panel',
+ gridPos: { x: 0, y: 0, w: 12, h: 8 },
+ targets: [],
+ options: {},
+ fieldConfig: { defaults: {}, overrides: [] },
+ },
+ {
+ id: 2,
+ type: 'library-panel-ref',
+ libraryPanel: { uid: 'lib-panel-uid', name: 'My Library Panel' },
+ },
+ ]
+ : [],
time: { from: 'now-6h', to: 'now' },
timepicker: {},
timezone: '',
@@ -265,36 +376,42 @@ describe('ShareExportTab', () => {
templating: { list: [] },
};
- const tab = new ShareExportTab({});
- const scene = new DashboardScene({
- title: 'Test Dashboard V1',
- uid: 'test-uid-v1',
- meta: { canEdit: true },
- $timeRange: new SceneTimeRange({}),
- body: DefaultGridLayoutManager.fromVizPanels([]),
- overlay: tab,
- });
-
- const mockExportableDashboard: DashboardJson = {
- ...mockV1Dashboard,
- panels: [],
- } as DashboardJson;
- scene.serializer.getSaveModel = jest.fn(() => mockV1Dashboard);
- scene.serializer.makeExportableExternally = jest.fn(() => Promise.resolve(mockExportableDashboard));
- scene.serializer.apiVersion = 'dashboard.grafana.app/v1beta1';
- scene.getInitialSaveModel = jest.fn(() => mockV1Dashboard);
-
- return tab;
- }
-
- function buildV2DashboardScenario(): ShareExportTab {
+ // Create V2 dashboard
const mockV2Dashboard: DashboardV2Spec = {
- title: 'Test Dashboard V2',
+ title: `Test Dashboard V2`,
annotations: [],
cursorSync: 'Off',
description: 'Test V2 dashboard',
editable: true,
- elements: {},
+ elements: hasLibraryPanels
+ ? {
+ 'element-1': {
+ kind: 'Panel',
+ spec: {
+ id: 1,
+ title: 'Regular Panel',
+ description: '',
+ links: [],
+ data: defaultQueryGroupKind(),
+ vizConfig: {
+ kind: 'stat',
+ spec: defaultVizConfigSpec(),
+ },
+ },
+ },
+ 'element-2': {
+ kind: 'LibraryPanel',
+ spec: {
+ id: 2,
+ title: 'My Library Panel',
+ libraryPanel: {
+ uid: 'lib-panel-uid',
+ name: 'My Library Panel',
+ },
+ },
+ },
+ }
+ : {},
layout: { kind: 'GridLayout', spec: { items: [] } },
links: [],
liveNow: false,
@@ -315,19 +432,40 @@ describe('ShareExportTab', () => {
const tab = new ShareExportTab({});
const scene = new DashboardScene({
- title: 'Test Dashboard V2',
- uid: 'test-uid-v2',
+ title: `Test Dashboard ${version.toUpperCase()}`,
+ uid: `test-uid-${version}`,
meta: { canEdit: true },
$timeRange: new SceneTimeRange({}),
body: DefaultGridLayoutManager.fromVizPanels([]),
overlay: tab,
});
- scene.serializer.getSaveModel = jest.fn(() => mockV2Dashboard);
- scene.serializer.makeExportableExternally = jest.fn(() => Promise.resolve(mockV2Dashboard));
- scene.serializer.apiVersion = 'dashboard.grafana.app/v2alpha1';
- scene.getInitialSaveModel = jest.fn(() => mockV2Dashboard);
+ // Set up the scene based on current version
+ const currentDashboard = version === 'v1' ? mockV1Dashboard : mockV2Dashboard;
+ const initialSaveModel = initialSaveModelVersion === 'v1' ? mockV1Dashboard : mockV2Dashboard;
+ const apiVersion = version === 'v1' ? 'dashboard.grafana.app/v1beta1' : 'dashboard.grafana.app/v2alpha1';
+
+ scene.serializer.getSaveModel = jest.fn(() => currentDashboard);
+ scene.serializer.makeExportableExternally = jest.fn(() =>
+ Promise.resolve(
+ version === 'v1' ? ({ ...mockV1Dashboard, panels: mockV1Dashboard.panels } as DashboardJson) : mockV2Dashboard
+ )
+ );
+ scene.serializer.apiVersion = apiVersion;
+ scene.getInitialSaveModel = jest.fn(() => initialSaveModel);
return tab;
}
+
+ // util functions for common scenarios
+ const buildV1DashboardScenario = () => createDashboardScenario({ version: 'v1' });
+ const buildV2DashboardScenario = () => createDashboardScenario({ version: 'v2' });
+ const buildV1DashboardWithLibraryPanels = () => createDashboardScenario({ version: 'v1', hasLibraryPanels: true });
+ const buildV2DashboardWithLibraryPanels = () => createDashboardScenario({ version: 'v2', hasLibraryPanels: true });
+ const buildV2DashboardWithV1InitialSaveModel = () =>
+ createDashboardScenario({
+ version: 'v2',
+ hasLibraryPanels: true,
+ initialSaveModelVersion: 'v1',
+ });
});
diff --git a/public/app/features/dashboard-scene/sharing/ShareExportTab.tsx b/public/app/features/dashboard-scene/sharing/ShareExportTab.tsx
index 1c19882b877..8a9087f118b 100644
--- a/public/app/features/dashboard-scene/sharing/ShareExportTab.tsx
+++ b/public/app/features/dashboard-scene/sharing/ShareExportTab.tsx
@@ -124,12 +124,27 @@ export class ShareExportTab extends SceneObjectBase impleme
exportMode: ExportMode.V2Resource,
});
+ // For automatic V2 path, also process library panels when sharing externally
+ let finalSpec = exportable;
+ if (isSharingExternally && isDashboardV2Spec(exportable)) {
+ const specCopy = JSON.parse(JSON.stringify(exportable));
+ const result = await makeExportableV2(specCopy, isSharingExternally);
+ if ('error' in result) {
+ return {
+ json: { error: result.error },
+ initialSaveModelVersion,
+ hasLibraryPanels: Object.values(origDashboard.elements).some((element) => element.kind === 'LibraryPanel'),
+ };
+ }
+ finalSpec = result;
+ }
+
return {
json: {
apiVersion: scene.serializer.apiVersion ?? '',
kind: 'Dashboard',
metadata,
- spec: exportable,
+ spec: finalSpec,
status: {},
},
initialSaveModelVersion,
@@ -203,8 +218,17 @@ export class ShareExportTab extends SceneObjectBase impleme
if (exportMode === ExportMode.V2Resource) {
const spec = transformSceneToSaveModelSchemaV2(scene);
const specCopy = JSON.parse(JSON.stringify(spec));
- const statelessSpec = await makeExportableV2(specCopy);
+ const statelessSpec = await makeExportableV2(specCopy, isSharingExternally);
const exportableV2 = isSharingExternally ? statelessSpec : spec;
+ // Check if dashboard contains library panels based on dashboard version
+ let hasLibraryPanels = false;
+ // Case: V1 dashboard loaded (with kubernetesDashboards enabled and dashboardNewLayouts disabled), and user explicitly selected V2Resource export mode
+ if (initialSaveModelVersion === 'v1' && !isDashboardV2Spec(origDashboard)) {
+ hasLibraryPanels = hasLibraryPanelsInV1Dashboard(origDashboard);
+ } else if (isDashboardV2Spec(origDashboard)) {
+ // Case: V2 dashboard (either originally V2 or transformed from V1) being exported as V2Resource
+ hasLibraryPanels = Object.values(origDashboard.elements).some((element) => element.kind === 'LibraryPanel');
+ }
return {
json: {
@@ -216,10 +240,7 @@ export class ShareExportTab extends SceneObjectBase impleme
status: {},
},
initialSaveModelVersion,
- hasLibraryPanels:
- initialSaveModelVersion === 'v1' && !isDashboardV2Spec(origDashboard)
- ? hasLibraryPanelsInV1Dashboard(origDashboard)
- : false,
+ hasLibraryPanels,
};
}
diff --git a/public/app/features/dashboard/api/ResponseTransformers.ts b/public/app/features/dashboard/api/ResponseTransformers.ts
index 509271f7e50..2299729a8d7 100644
--- a/public/app/features/dashboard/api/ResponseTransformers.ts
+++ b/public/app/features/dashboard/api/ResponseTransformers.ts
@@ -423,52 +423,7 @@ function buildElement(p: Panel): [PanelKind | LibraryPanelKind, string] {
return [panelKind, element_identifier];
} else {
// PanelKind
-
- const queries = getPanelQueries(
- (p.targets as unknown as DataQuery[]) || [],
- p.datasource || getDefaultDatasource()
- );
-
- const transformations = getPanelTransformations(p.transformations || []);
-
- const panelKind: PanelKind = {
- kind: 'Panel',
- spec: {
- title: p.title || '',
- description: p.description || '',
- vizConfig: {
- kind: p.type,
- spec: {
- fieldConfig: (p.fieldConfig as any) || defaultFieldConfigSource(),
- options: p.options as any,
- pluginVersion: p.pluginVersion!,
- },
- },
- links:
- p.links?.map((l) => ({
- title: l.title,
- url: l.url || '',
- targetBlank: l.targetBlank,
- })) || [],
- id: p.id!,
- data: {
- kind: 'QueryGroup',
- spec: {
- queries,
- transformations,
- queryOptions: {
- cacheTimeout: p.cacheTimeout,
- maxDataPoints: p.maxDataPoints,
- interval: p.interval,
- hideTimeOverride: p.hideTimeOverride,
- queryCachingTTL: p.queryCachingTTL,
- timeFrom: p.timeFrom,
- timeShift: p.timeShift,
- },
- },
- },
- },
- };
+ const panelKind = buildPanelKind(p);
return [panelKind, element_identifier];
}
}
@@ -515,6 +470,52 @@ export function getPanelQueries(targets: DataQuery[], panelDatasource: DataSourc
});
}
+export function buildPanelKind(p: Panel): PanelKind {
+ const queries = getPanelQueries((p.targets as unknown as DataQuery[]) || [], p.datasource || getDefaultDatasource());
+
+ const transformations = getPanelTransformations(p.transformations || []);
+
+ const panelKind: PanelKind = {
+ kind: 'Panel',
+ spec: {
+ title: p.title || '',
+ description: p.description || '',
+ vizConfig: {
+ kind: p.type,
+ spec: {
+ fieldConfig: (p.fieldConfig as any) || defaultFieldConfigSource(),
+ options: p.options as any,
+ pluginVersion: p.pluginVersion!,
+ },
+ },
+ links:
+ p.links?.map((l) => ({
+ title: l.title,
+ url: l.url || '',
+ targetBlank: l.targetBlank,
+ })) || [],
+ id: p.id!,
+ data: {
+ kind: 'QueryGroup',
+ spec: {
+ queries,
+ transformations,
+ queryOptions: {
+ cacheTimeout: p.cacheTimeout,
+ maxDataPoints: p.maxDataPoints,
+ interval: p.interval,
+ hideTimeOverride: p.hideTimeOverride,
+ queryCachingTTL: p.queryCachingTTL,
+ timeFrom: p.timeFrom,
+ timeShift: p.timeShift,
+ },
+ },
+ },
+ },
+ };
+ return panelKind;
+}
+
function getPanelTransformations(transformations: DataTransformerConfig[]): TransformationKind[] {
return transformations.map((t) => {
return {
diff --git a/public/locales/en-US/grafana.json b/public/locales/en-US/grafana.json
index 0cc6d14e6dc..5b1b640db0b 100644
--- a/public/locales/en-US/grafana.json
+++ b/public/locales/en-US/grafana.json
@@ -5935,8 +5935,8 @@
"title-someone-else-has-updated-this-dashboard": "Someone else has updated this dashboard",
"would-still-dashboard": "Would you still like to save this dashboard?"
},
- "schema-v2-library-panels-export": "The dynamic dashboard functionality is experimental, and has not full feature parity with current dashboards behaviour. It is based on a new schema format, that does not support library panels. This means that when exporting the dashboard to use it in another instance, we will not include library panels. We intend to support them as we progress in the feature <2>life cycle2>.",
- "schema-v2-library-panels-export-title": "Dashboard Schema V2 does not support exporting library panels to be used in another instance yet",
+ "schema-v2-library-panels-export": "Due to limitations in the new dashboard schema (V2), library panels will be converted to regular panels with embedded content during external export.",
+ "schema-v2-library-panels-export-title": "Library panels will be converted to regular panels",
"title-dashboard-drastically-changed": "Dashboard irreversibly changed"
},
"save-dashboard-form-common-options": {
From 1edc8e5a7308efc54e01a2b32c297ccec4577fa0 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 18 Jul 2025 13:36:21 +0000
Subject: [PATCH 31/46] Update dependency webpack-manifest-plugin to v5.0.1
(#108319)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 12 ++++++------
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/package.json b/package.json
index e82c322daa2..dc0c56ca19a 100644
--- a/package.json
+++ b/package.json
@@ -256,7 +256,7 @@
"webpack-cli": "6.0.1",
"webpack-dev-server": "5.2.2",
"webpack-livereload-plugin": "3.0.2",
- "webpack-manifest-plugin": "5.0.0",
+ "webpack-manifest-plugin": "5.0.1",
"webpack-merge": "6.0.1",
"webpack-subresource-integrity": "^5.2.0-rc.1",
"webpackbar": "^7.0.0",
diff --git a/yarn.lock b/yarn.lock
index 8873698c59b..ac8cb7f8006 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -18526,7 +18526,7 @@ __metadata:
webpack-cli: "npm:6.0.1"
webpack-dev-server: "npm:5.2.2"
webpack-livereload-plugin: "npm:3.0.2"
- webpack-manifest-plugin: "npm:5.0.0"
+ webpack-manifest-plugin: "npm:5.0.1"
webpack-merge: "npm:6.0.1"
webpack-subresource-integrity: "npm:^5.2.0-rc.1"
webpackbar: "npm:^7.0.0"
@@ -32325,15 +32325,15 @@ __metadata:
languageName: node
linkType: hard
-"webpack-manifest-plugin@npm:5.0.0":
- version: 5.0.0
- resolution: "webpack-manifest-plugin@npm:5.0.0"
+"webpack-manifest-plugin@npm:5.0.1":
+ version: 5.0.1
+ resolution: "webpack-manifest-plugin@npm:5.0.1"
dependencies:
tapable: "npm:^2.0.0"
webpack-sources: "npm:^2.2.0"
peerDependencies:
- webpack: ^5.47.0
- checksum: 10/466ade444c23d4a8ec3d1a108ec2142468cb260570533acf2cf68806065ccdef649dbac0fa6b0700f4c6d2497535ae950a20e83b26edb25ccfa9bb51538fa607
+ webpack: ^5.75.0
+ checksum: 10/590355d177e58d5ea2fd1c3abbc6fb66cac3a52df2a499a197cde8a3493d37fcce64e6e2e755e084f04e8f618a5e42b2618a81756063fa8b2f7d7527e5dcdad1
languageName: node
linkType: hard
From b6653d4bb65f3b9ce065a210af8aecc22967ac3e Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 18 Jul 2025 14:58:47 +0100
Subject: [PATCH 32/46] Update babel monorepo (#108320)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 6 +-
packages/grafana-flamegraph/package.json | 6 +-
packages/grafana-ui/package.json | 2 +-
yarn.lock | 1384 +++++++++++-----------
4 files changed, 697 insertions(+), 701 deletions(-)
diff --git a/package.json b/package.json
index dc0c56ca19a..3b0c7aedb9a 100644
--- a/package.json
+++ b/package.json
@@ -80,9 +80,9 @@
},
"devDependencies": {
"@arethetypeswrong/cli": "^0.18.2",
- "@babel/core": "7.26.10",
- "@babel/preset-env": "7.26.9",
- "@babel/runtime": "7.27.0",
+ "@babel/core": "7.28.0",
+ "@babel/preset-env": "7.28.0",
+ "@babel/runtime": "7.27.6",
"@betterer/betterer": "5.4.0",
"@betterer/cli": "5.4.0",
"@crowdin/crowdin-api-client": "^1.42.0",
diff --git a/packages/grafana-flamegraph/package.json b/packages/grafana-flamegraph/package.json
index 990a46d2fa1..b7420cdc054 100644
--- a/packages/grafana-flamegraph/package.json
+++ b/packages/grafana-flamegraph/package.json
@@ -56,9 +56,9 @@
"tslib": "2.8.1"
},
"devDependencies": {
- "@babel/core": "7.26.10",
- "@babel/preset-env": "7.26.9",
- "@babel/preset-react": "7.26.3",
+ "@babel/core": "7.28.0",
+ "@babel/preset-env": "7.28.0",
+ "@babel/preset-react": "7.27.1",
"@grafana/tsconfig": "^2.0.0",
"@rollup/plugin-node-resolve": "16.0.1",
"@testing-library/dom": "10.4.0",
diff --git a/packages/grafana-ui/package.json b/packages/grafana-ui/package.json
index 35c636b3d09..c14495bbee5 100644
--- a/packages/grafana-ui/package.json
+++ b/packages/grafana-ui/package.json
@@ -133,7 +133,7 @@
"uwrap": "0.1.1"
},
"devDependencies": {
- "@babel/core": "7.26.10",
+ "@babel/core": "7.28.0",
"@faker-js/faker": "^9.0.0",
"@grafana/tsconfig": "^2.0.0",
"@rollup/plugin-node-resolve": "16.0.1",
diff --git a/yarn.lock b/yarn.lock
index ac8cb7f8006..f0c7f799083 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -121,124 +121,124 @@ __metadata:
languageName: node
linkType: hard
-"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.3, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.16.7, @babel/code-frame@npm:^7.26.2":
- version: 7.26.2
- resolution: "@babel/code-frame@npm:7.26.2"
+"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.3, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.16.7, @babel/code-frame@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/code-frame@npm:7.27.1"
dependencies:
- "@babel/helper-validator-identifier": "npm:^7.25.9"
+ "@babel/helper-validator-identifier": "npm:^7.27.1"
js-tokens: "npm:^4.0.0"
- picocolors: "npm:^1.0.0"
- checksum: 10/db2c2122af79d31ca916755331bb4bac96feb2b334cdaca5097a6b467fdd41963b89b14b6836a14f083de7ff887fc78fa1b3c10b14e743d33e12dbfe5ee3d223
+ picocolors: "npm:^1.1.1"
+ checksum: 10/721b8a6e360a1fa0f1c9fe7351ae6c874828e119183688b533c477aa378f1010f37cc9afbfc4722c686d1f5cdd00da02eab4ba7278a0c504fa0d7a321dcd4fdf
languageName: node
linkType: hard
-"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.26.5, @babel/compat-data@npm:^7.26.8":
- version: 7.26.8
- resolution: "@babel/compat-data@npm:7.26.8"
- checksum: 10/bdddf577f670e0e12996ef37e134856c8061032edb71a13418c3d4dae8135da28910b7cd6dec6e668ab3a41e42089ef7ee9c54ef52fe0860b54cb420b0d14948
+"@babel/compat-data@npm:^7.27.2, @babel/compat-data@npm:^7.27.7, @babel/compat-data@npm:^7.28.0":
+ version: 7.28.0
+ resolution: "@babel/compat-data@npm:7.28.0"
+ checksum: 10/1a56a5e48c7259f72cc4329adeca38e72fd650ea09de267ea4aa070e3da91e5c265313b6656823fff77d64a8bab9554f276c66dade9355fdc0d8604deea015aa
languageName: node
linkType: hard
-"@babel/core@npm:7.26.10, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.18.9, @babel/core@npm:^7.22.9":
- version: 7.26.10
- resolution: "@babel/core@npm:7.26.10"
+"@babel/core@npm:7.28.0, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.18.9, @babel/core@npm:^7.22.9":
+ version: 7.28.0
+ resolution: "@babel/core@npm:7.28.0"
dependencies:
"@ampproject/remapping": "npm:^2.2.0"
- "@babel/code-frame": "npm:^7.26.2"
- "@babel/generator": "npm:^7.26.10"
- "@babel/helper-compilation-targets": "npm:^7.26.5"
- "@babel/helper-module-transforms": "npm:^7.26.0"
- "@babel/helpers": "npm:^7.26.10"
- "@babel/parser": "npm:^7.26.10"
- "@babel/template": "npm:^7.26.9"
- "@babel/traverse": "npm:^7.26.10"
- "@babel/types": "npm:^7.26.10"
+ "@babel/code-frame": "npm:^7.27.1"
+ "@babel/generator": "npm:^7.28.0"
+ "@babel/helper-compilation-targets": "npm:^7.27.2"
+ "@babel/helper-module-transforms": "npm:^7.27.3"
+ "@babel/helpers": "npm:^7.27.6"
+ "@babel/parser": "npm:^7.28.0"
+ "@babel/template": "npm:^7.27.2"
+ "@babel/traverse": "npm:^7.28.0"
+ "@babel/types": "npm:^7.28.0"
convert-source-map: "npm:^2.0.0"
debug: "npm:^4.1.0"
gensync: "npm:^1.0.0-beta.2"
json5: "npm:^2.2.3"
semver: "npm:^6.3.1"
- checksum: 10/68f6707eebd6bb8beed7ceccf5153e35b86c323e40d11d796d75c626ac8f1cc4e1f795584c5ab5f886bc64150c22d5088123d68c069c63f29984c4fc054d1dab
+ checksum: 10/1c86eec8d76053f7b1c5f65296d51d7b8ac00f80d169ff76d3cd2e7d85ab222eb100d40cc3314f41b96c8cc06e9abab21c63d246161f0f3f70ef14c958419c33
languageName: node
linkType: hard
-"@babel/generator@npm:^7.22.9, @babel/generator@npm:^7.26.10, @babel/generator@npm:^7.27.0, @babel/generator@npm:^7.7.2":
- version: 7.27.0
- resolution: "@babel/generator@npm:7.27.0"
+"@babel/generator@npm:^7.22.9, @babel/generator@npm:^7.28.0, @babel/generator@npm:^7.7.2":
+ version: 7.28.0
+ resolution: "@babel/generator@npm:7.28.0"
dependencies:
- "@babel/parser": "npm:^7.27.0"
- "@babel/types": "npm:^7.27.0"
- "@jridgewell/gen-mapping": "npm:^0.3.5"
- "@jridgewell/trace-mapping": "npm:^0.3.25"
+ "@babel/parser": "npm:^7.28.0"
+ "@babel/types": "npm:^7.28.0"
+ "@jridgewell/gen-mapping": "npm:^0.3.12"
+ "@jridgewell/trace-mapping": "npm:^0.3.28"
jsesc: "npm:^3.0.2"
- checksum: 10/5447c402b1d841132534a0a9715e89f4f28b6f2886a23e70aaa442150dba4a1e29e4e2351814f439ee1775294dccdef9ab0a4192b6e6a5ad44e24233b3611da2
+ checksum: 10/064c5ba4c07ecd7600377bd0022d5f6bdb3b35e9ff78d9378f6bd1e656467ca902c091647222ab2f0d2967f6d6c0ca33157d37dd9b1c51926c9b0e1527ab9b92
languageName: node
linkType: hard
-"@babel/helper-annotate-as-pure@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/helper-annotate-as-pure@npm:7.25.9"
+"@babel/helper-annotate-as-pure@npm:^7.27.1, @babel/helper-annotate-as-pure@npm:^7.27.3":
+ version: 7.27.3
+ resolution: "@babel/helper-annotate-as-pure@npm:7.27.3"
dependencies:
- "@babel/types": "npm:^7.25.9"
- checksum: 10/41edda10df1ae106a9b4fe617bf7c6df77db992992afd46192534f5cff29f9e49a303231733782dd65c5f9409714a529f215325569f14282046e9d3b7a1ffb6c
+ "@babel/types": "npm:^7.27.3"
+ checksum: 10/63863a5c936ef82b546ca289c9d1b18fabfc24da5c4ee382830b124e2e79b68d626207febc8d4bffc720f50b2ee65691d7d12cc0308679dee2cd6bdc926b7190
languageName: node
linkType: hard
-"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.25.9, @babel/helper-compilation-targets@npm:^7.26.5":
- version: 7.26.5
- resolution: "@babel/helper-compilation-targets@npm:7.26.5"
+"@babel/helper-compilation-targets@npm:^7.27.1, @babel/helper-compilation-targets@npm:^7.27.2":
+ version: 7.27.2
+ resolution: "@babel/helper-compilation-targets@npm:7.27.2"
dependencies:
- "@babel/compat-data": "npm:^7.26.5"
- "@babel/helper-validator-option": "npm:^7.25.9"
+ "@babel/compat-data": "npm:^7.27.2"
+ "@babel/helper-validator-option": "npm:^7.27.1"
browserslist: "npm:^4.24.0"
lru-cache: "npm:^5.1.1"
semver: "npm:^6.3.1"
- checksum: 10/f3b5f0bfcd7b6adf03be1a494b269782531c6e415afab2b958c077d570371cf1bfe001c442508092c50ed3711475f244c05b8f04457d8dea9c34df2b741522bf
+ checksum: 10/bd53c30a7477049db04b655d11f4c3500aea3bcbc2497cf02161de2ecf994fec7c098aabbcebe210ffabc2ecbdb1e3ffad23fb4d3f18723b814f423ea1749fe8
languageName: node
linkType: hard
-"@babel/helper-create-class-features-plugin@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/helper-create-class-features-plugin@npm:7.25.9"
- dependencies:
- "@babel/helper-annotate-as-pure": "npm:^7.25.9"
- "@babel/helper-member-expression-to-functions": "npm:^7.25.9"
- "@babel/helper-optimise-call-expression": "npm:^7.25.9"
- "@babel/helper-replace-supers": "npm:^7.25.9"
- "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9"
- "@babel/traverse": "npm:^7.25.9"
+"@babel/helper-create-class-features-plugin@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/helper-create-class-features-plugin@npm:7.27.1"
+ dependencies:
+ "@babel/helper-annotate-as-pure": "npm:^7.27.1"
+ "@babel/helper-member-expression-to-functions": "npm:^7.27.1"
+ "@babel/helper-optimise-call-expression": "npm:^7.27.1"
+ "@babel/helper-replace-supers": "npm:^7.27.1"
+ "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1"
+ "@babel/traverse": "npm:^7.27.1"
semver: "npm:^6.3.1"
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 10/d1d47a7b5fd317c6cb1446b0e4f4892c19ddaa69ea0229f04ba8bea5f273fc8168441e7114ad36ff919f2d310f97310cec51adc79002e22039a7e1640ccaf248
+ checksum: 10/701579b49046cd42f6a6b1e693e6827df8623185adf0911c4d68a219a082d8fd4501672880d92b6b96263d1c92a3beb891b3464a662a55e69e7539d8db9277da
languageName: node
linkType: hard
-"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/helper-create-regexp-features-plugin@npm:7.25.9"
+"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/helper-create-regexp-features-plugin@npm:7.27.1"
dependencies:
- "@babel/helper-annotate-as-pure": "npm:^7.25.9"
- regexpu-core: "npm:^6.1.1"
+ "@babel/helper-annotate-as-pure": "npm:^7.27.1"
+ regexpu-core: "npm:^6.2.0"
semver: "npm:^6.3.1"
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 10/bc2b6a365ddf490c416661833dbf4430ae0c66132acccb5ce257e82026dd9db54da788bfbdcb7e0032aa0cba965cb1be169b1e1fb2c8c029b81625da4963f6b9
+ checksum: 10/dea272628cd8874f127ab7b2ee468620aabc1383d38bb40c49a9c7667db2258cdfe6620a1d1412f5f0706583f6301b4b7ad3d5932f24df7fe72e66bf9bc0be45
languageName: node
linkType: hard
-"@babel/helper-define-polyfill-provider@npm:^0.6.1, @babel/helper-define-polyfill-provider@npm:^0.6.3":
- version: 0.6.3
- resolution: "@babel/helper-define-polyfill-provider@npm:0.6.3"
+"@babel/helper-define-polyfill-provider@npm:^0.6.5":
+ version: 0.6.5
+ resolution: "@babel/helper-define-polyfill-provider@npm:0.6.5"
dependencies:
- "@babel/helper-compilation-targets": "npm:^7.22.6"
- "@babel/helper-plugin-utils": "npm:^7.22.5"
- debug: "npm:^4.1.1"
+ "@babel/helper-compilation-targets": "npm:^7.27.2"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
+ debug: "npm:^4.4.1"
lodash.debounce: "npm:^4.0.8"
- resolve: "npm:^1.14.2"
+ resolve: "npm:^1.22.10"
peerDependencies:
"@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0
- checksum: 10/b79a77ac8fbf1aaf6c7f99191871760508e87d75a374ff3c39c6599a17d9bb82284797cd451769305764e504546caf22ae63367b22d6e45e32d0a8f4a34aab53
+ checksum: 10/0bdd2d9654d2f650c33976caa1a2afac2c23cf07e83856acdb482423c7bf4542c499ca0bdc723f2961bb36883501f09e9f4fe061ba81c07996daacfba82a6f62
languageName: node
linkType: hard
@@ -252,130 +252,137 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-member-expression-to-functions@npm:^7.0.0, @babel/helper-member-expression-to-functions@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/helper-member-expression-to-functions@npm:7.25.9"
+"@babel/helper-globals@npm:^7.28.0":
+ version: 7.28.0
+ resolution: "@babel/helper-globals@npm:7.28.0"
+ checksum: 10/91445f7edfde9b65dcac47f4f858f68dc1661bf73332060ab67ad7cc7b313421099a2bfc4bda30c3db3842cfa1e86fffbb0d7b2c5205a177d91b22c8d7d9cb47
+ languageName: node
+ linkType: hard
+
+"@babel/helper-member-expression-to-functions@npm:^7.0.0, @babel/helper-member-expression-to-functions@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/helper-member-expression-to-functions@npm:7.27.1"
dependencies:
- "@babel/traverse": "npm:^7.25.9"
- "@babel/types": "npm:^7.25.9"
- checksum: 10/ef8cc1c1e600b012b312315f843226545a1a89f25d2f474ce2503fd939ca3f8585180f291a3a13efc56cf13eddc1d41a3a040eae9a521838fd59a6d04cc82490
+ "@babel/traverse": "npm:^7.27.1"
+ "@babel/types": "npm:^7.27.1"
+ checksum: 10/533a5a2cf1c9a8770d241b86d5f124c88e953c831a359faf1ac7ba1e632749c1748281b83295d227fe6035b202d81f3d3a1ea13891f150c6538e040668d6126a
languageName: node
linkType: hard
-"@babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/helper-module-imports@npm:7.25.9"
+"@babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/helper-module-imports@npm:7.27.1"
dependencies:
- "@babel/traverse": "npm:^7.25.9"
- "@babel/types": "npm:^7.25.9"
- checksum: 10/e090be5dee94dda6cd769972231b21ddfae988acd76b703a480ac0c96f3334557d70a965bf41245d6ee43891e7571a8b400ccf2b2be5803351375d0f4e5bcf08
+ "@babel/traverse": "npm:^7.27.1"
+ "@babel/types": "npm:^7.27.1"
+ checksum: 10/58e792ea5d4ae71676e0d03d9fef33e886a09602addc3bd01388a98d87df9fcfd192968feb40ac4aedb7e287ec3d0c17b33e3ecefe002592041a91d8a1998a8d
languageName: node
linkType: hard
-"@babel/helper-module-transforms@npm:^7.25.9, @babel/helper-module-transforms@npm:^7.26.0":
- version: 7.26.0
- resolution: "@babel/helper-module-transforms@npm:7.26.0"
+"@babel/helper-module-transforms@npm:^7.27.1, @babel/helper-module-transforms@npm:^7.27.3":
+ version: 7.27.3
+ resolution: "@babel/helper-module-transforms@npm:7.27.3"
dependencies:
- "@babel/helper-module-imports": "npm:^7.25.9"
- "@babel/helper-validator-identifier": "npm:^7.25.9"
- "@babel/traverse": "npm:^7.25.9"
+ "@babel/helper-module-imports": "npm:^7.27.1"
+ "@babel/helper-validator-identifier": "npm:^7.27.1"
+ "@babel/traverse": "npm:^7.27.3"
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 10/9841d2a62f61ad52b66a72d08264f23052d533afc4ce07aec2a6202adac0bfe43014c312f94feacb3291f4c5aafe681955610041ece2c276271adce3f570f2f5
+ checksum: 10/47abc90ceb181b4bdea9bf1717adf536d1b5e5acb6f6d8a7a4524080318b5ca8a99e6d58677268c596bad71077d1d98834d2c3815f2443e6d3f287962300f15d
languageName: node
linkType: hard
-"@babel/helper-optimise-call-expression@npm:^7.0.0, @babel/helper-optimise-call-expression@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/helper-optimise-call-expression@npm:7.25.9"
+"@babel/helper-optimise-call-expression@npm:^7.0.0, @babel/helper-optimise-call-expression@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/helper-optimise-call-expression@npm:7.27.1"
dependencies:
- "@babel/types": "npm:^7.25.9"
- checksum: 10/f09d0ad60c0715b9a60c31841b3246b47d67650c512ce85bbe24a3124f1a4d66377df793af393273bc6e1015b0a9c799626c48e53747581c1582b99167cc65dc
+ "@babel/types": "npm:^7.27.1"
+ checksum: 10/0fb7ee824a384529d6b74f8a58279f9b56bfe3cce332168067dddeab2552d8eeb56dc8eaf86c04a3a09166a316cb92dfc79c4c623cd034ad4c563952c98b464f
languageName: node
linkType: hard
-"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.25.9, @babel/helper-plugin-utils@npm:^7.26.5, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3":
- version: 7.26.5
- resolution: "@babel/helper-plugin-utils@npm:7.26.5"
- checksum: 10/1cc0fd8514da3bb249bed6c27227696ab5e84289749d7258098701cffc0c599b7f61ec40dd332f8613030564b79899d9826813c96f966330bcfc7145a8377857
+"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9, @babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.27.1, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3":
+ version: 7.27.1
+ resolution: "@babel/helper-plugin-utils@npm:7.27.1"
+ checksum: 10/96136c2428888e620e2ec493c25888f9ceb4a21099dcf3dd4508ea64b58cdedbd5a9fb6c7b352546de84d6c24edafe482318646932a22c449ebd16d16c22d864
languageName: node
linkType: hard
-"@babel/helper-remap-async-to-generator@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/helper-remap-async-to-generator@npm:7.25.9"
+"@babel/helper-remap-async-to-generator@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/helper-remap-async-to-generator@npm:7.27.1"
dependencies:
- "@babel/helper-annotate-as-pure": "npm:^7.25.9"
- "@babel/helper-wrap-function": "npm:^7.25.9"
- "@babel/traverse": "npm:^7.25.9"
+ "@babel/helper-annotate-as-pure": "npm:^7.27.1"
+ "@babel/helper-wrap-function": "npm:^7.27.1"
+ "@babel/traverse": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 10/ea37ad9f8f7bcc27c109963b8ebb9d22bac7a5db2a51de199cb560e251d5593fe721e46aab2ca7d3e7a24b0aa4aff0eaf9c7307af9c2fd3a1d84268579073052
+ checksum: 10/0747397ba013f87dbf575454a76c18210d61c7c9af0f697546b4bcac670b54ddc156330234407b397f0c948738c304c228e0223039bc45eab4fbf46966a5e8cc
languageName: node
linkType: hard
-"@babel/helper-replace-supers@npm:^7.0.0, @babel/helper-replace-supers@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/helper-replace-supers@npm:7.25.9"
+"@babel/helper-replace-supers@npm:^7.0.0, @babel/helper-replace-supers@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/helper-replace-supers@npm:7.27.1"
dependencies:
- "@babel/helper-member-expression-to-functions": "npm:^7.25.9"
- "@babel/helper-optimise-call-expression": "npm:^7.25.9"
- "@babel/traverse": "npm:^7.25.9"
+ "@babel/helper-member-expression-to-functions": "npm:^7.27.1"
+ "@babel/helper-optimise-call-expression": "npm:^7.27.1"
+ "@babel/traverse": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 10/8ebf787016953e4479b99007bac735c9c860822fafc51bc3db67bc53814539888797238c81fa8b948b6da897eb7b1c1d4f04df11e501a7f0596b356be02de2ab
+ checksum: 10/72e3f8bef744c06874206bf0d80a0abbedbda269586966511c2491df4f6bf6d47a94700810c7a6737345a545dfb8295222e1e72f506bcd0b40edb3f594f739ea
languageName: node
linkType: hard
-"@babel/helper-skip-transparent-expression-wrappers@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.25.9"
+"@babel/helper-skip-transparent-expression-wrappers@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.27.1"
dependencies:
- "@babel/traverse": "npm:^7.25.9"
- "@babel/types": "npm:^7.25.9"
- checksum: 10/fdbb5248932198bc26daa6abf0d2ac42cab9c2dbb75b7e9f40d425c8f28f09620b886d40e7f9e4e08ffc7aaa2cefe6fc2c44be7c20e81f7526634702fb615bdc
+ "@babel/traverse": "npm:^7.27.1"
+ "@babel/types": "npm:^7.27.1"
+ checksum: 10/4f380c5d0e0769fa6942a468b0c2d7c8f0c438f941aaa88f785f8752c103631d0904c7b4e76207a3b0e6588b2dec376595370d92ca8f8f1b422c14a69aa146d4
languageName: node
linkType: hard
-"@babel/helper-string-parser@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/helper-string-parser@npm:7.25.9"
- checksum: 10/c28656c52bd48e8c1d9f3e8e68ecafd09d949c57755b0d353739eb4eae7ba4f7e67e92e4036f1cd43378cc1397a2c943ed7bcaf5949b04ab48607def0258b775
+"@babel/helper-string-parser@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/helper-string-parser@npm:7.27.1"
+ checksum: 10/0ae29cc2005084abdae2966afdb86ed14d41c9c37db02c3693d5022fba9f5d59b011d039380b8e537c34daf117c549f52b452398f576e908fb9db3c7abbb3a00
languageName: node
linkType: hard
-"@babel/helper-validator-identifier@npm:^7.24.7, @babel/helper-validator-identifier@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/helper-validator-identifier@npm:7.25.9"
- checksum: 10/3f9b649be0c2fd457fa1957b694b4e69532a668866b8a0d81eabfa34ba16dbf3107b39e0e7144c55c3c652bf773ec816af8df4a61273a2bb4eb3145ca9cf478e
+"@babel/helper-validator-identifier@npm:^7.24.7, @babel/helper-validator-identifier@npm:^7.25.9, @babel/helper-validator-identifier@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/helper-validator-identifier@npm:7.27.1"
+ checksum: 10/75041904d21bdc0cd3b07a8ac90b11d64cd3c881e89cb936fa80edd734bf23c35e6bd1312611e8574c4eab1f3af0f63e8a5894f4699e9cfdf70c06fcf4252320
languageName: node
linkType: hard
-"@babel/helper-validator-option@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/helper-validator-option@npm:7.25.9"
- checksum: 10/9491b2755948ebbdd68f87da907283698e663b5af2d2b1b02a2765761974b1120d5d8d49e9175b167f16f72748ffceec8c9cf62acfbee73f4904507b246e2b3d
+"@babel/helper-validator-option@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/helper-validator-option@npm:7.27.1"
+ checksum: 10/db73e6a308092531c629ee5de7f0d04390835b21a263be2644276cb27da2384b64676cab9f22cd8d8dbd854c92b1d7d56fc8517cf0070c35d1c14a8c828b0903
languageName: node
linkType: hard
-"@babel/helper-wrap-function@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/helper-wrap-function@npm:7.25.9"
+"@babel/helper-wrap-function@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/helper-wrap-function@npm:7.27.1"
dependencies:
- "@babel/template": "npm:^7.25.9"
- "@babel/traverse": "npm:^7.25.9"
- "@babel/types": "npm:^7.25.9"
- checksum: 10/988dcf49159f1c920d6b9486762a93767a6e84b5e593a6342bc235f3e47cc1cb0c048d8fca531a48143e6b7fce1ff12ddbf735cf5f62cb2f07192cf7c27b89cf
+ "@babel/template": "npm:^7.27.1"
+ "@babel/traverse": "npm:^7.27.1"
+ "@babel/types": "npm:^7.27.1"
+ checksum: 10/effa5ba1732764982db52295a0003d0d6b527edf70d8c649f5a521808decbc47fc8f3c21cd31f7b6331192289f3bf5617141bce778fec45dcaedf5708d9c3140
languageName: node
linkType: hard
-"@babel/helpers@npm:^7.26.10":
- version: 7.27.0
- resolution: "@babel/helpers@npm:7.27.0"
+"@babel/helpers@npm:^7.27.6":
+ version: 7.27.6
+ resolution: "@babel/helpers@npm:7.27.6"
dependencies:
- "@babel/template": "npm:^7.27.0"
- "@babel/types": "npm:^7.27.0"
- checksum: 10/0dd40ba1e5ba4b72d1763bb381384585a56f21a61a19dc1b9a03381fe8e840207fdaa4da645d14dc028ad768087d41aad46347cc6573bd69d82f597f5a12dc6f
+ "@babel/template": "npm:^7.27.2"
+ "@babel/types": "npm:^7.27.6"
+ checksum: 10/33c1ab2b42f05317776a4d67c5b00d916dbecfbde38a9406a1300ad3ad6e0380a2f6fcd3361369119a82a7d3c20de6e66552d147297f17f656cf17912605aa97
languageName: node
linkType: hard
@@ -391,73 +398,73 @@ __metadata:
languageName: node
linkType: hard
-"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.26.10, @babel/parser@npm:^7.27.0":
- version: 7.27.0
- resolution: "@babel/parser@npm:7.27.0"
+"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.0":
+ version: 7.28.0
+ resolution: "@babel/parser@npm:7.28.0"
dependencies:
- "@babel/types": "npm:^7.27.0"
+ "@babel/types": "npm:^7.28.0"
bin:
parser: ./bin/babel-parser.js
- checksum: 10/0fee9f05c6db753882ca9d10958301493443da9f6986d7020ebd7a696b35886240016899bc0b47d871aea2abcafd64632343719742e87432c8145e0ec2af2a03
+ checksum: 10/2c14a0d2600bae9ab81924df0a85bbd34e427caa099c260743f7c6c12b2042e743e776043a0d1a2573229ae648f7e66a80cfb26fc27e2a9eb59b55932d44c817
languageName: node
linkType: hard
-"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.9"
+"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
- "@babel/traverse": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
+ "@babel/traverse": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 10/3c23ef34e3fd7da3578428cb488180ab6b7b96c9c141438374b6d87fa814d87de099f28098e5fc64726c19193a1da397e4d2351d40b459bcd2489993557e2c74
+ checksum: 10/fe65257d5b82558bc6bc0f3a5a7a35b4166f71bed3747714dafb6360fadb15f036d568bc1fbeedae819165008c8feb646633ab91c0e3a95284963972f4fa9751
languageName: node
linkType: hard
-"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.25.9"
+"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 10/d3e14ab1cb9cb50246d20cab9539f2fbd1e7ef1ded73980c8ad7c0561b4d5e0b144d362225f0976d47898e04cbd40f2000e208b0913bd788346cf7791b96af91
+ checksum: 10/eb7f4146dc01f1198ce559a90b077e58b951a07521ec414e3c7d4593bf6c4ab5c2af22242a7e9fec085e20299e0ba6ea97f44a45e84ab148141bf9eb959ad25e
languageName: node
linkType: hard
-"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.25.9"
+"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 10/a9d1ee3fd100d3eb6799a2f2bbd785296f356c531d75c9369f71541811fa324270258a374db103ce159156d006da2f33370330558d0133e6f7584152c34997ca
+ checksum: 10/621cfddfcc99a81e74f8b6f9101fd260b27500cb1a568e3ceae9cc8afe9aee45ac3bca3900a2b66c612b1a2366d29ef67d4df5a1c975be727eaad6906f98c2c6
languageName: node
linkType: hard
-"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.25.9"
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
- "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9"
- "@babel/plugin-transform-optional-chaining": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
+ "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1"
+ "@babel/plugin-transform-optional-chaining": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.13.0
- checksum: 10/5b298b28e156f64de51cdb03a2c5b80c7f978815ef1026f3ae8b9fc48d28bf0a83817d8fbecb61ef8fb94a7201f62cca5103cc6e7b9e8f28e38f766d7905b378
+ checksum: 10/f07aa80272bd7a46b7ba11a4644da6c9b6a5a64e848dfaffdad6f02663adefd512e1aaebe664c4dd95f7ed4f80c872c7f8db8d8e34b47aae0930b412a28711a0
languageName: node
linkType: hard
-"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.25.9"
+"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
- "@babel/traverse": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
+ "@babel/traverse": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 10/cb893e5deb9312a0120a399835b6614a016c036714de7123c8edabccc56a09c4455016e083c5c4dd485248546d4e5e55fc0e9132b3c3a9bd16abf534138fe3f2
+ checksum: 10/dfa68da5f68c0fa9deff1739ac270a5643ea07540b26a2a05403bc536c96595f0fe98a5eac9f9b3501b79ce57caa3045a94c75d5ccbfed946a62469a370ecdc2
languageName: node
linkType: hard
@@ -537,25 +544,25 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-syntax-import-assertions@npm:^7.26.0":
- version: 7.26.0
- resolution: "@babel/plugin-syntax-import-assertions@npm:7.26.0"
+"@babel/plugin-syntax-import-assertions@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-syntax-import-assertions@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/b58f2306df4a690ca90b763d832ec05202c50af787158ff8b50cdf3354359710bce2e1eb2b5135fcabf284756ac8eadf09ca74764aa7e76d12a5cac5f6b21e67
+ checksum: 10/fb661d630808d67ecb85eabad25aac4e9696a20464bad4c4a6a0d3d40e4dc22557d47e9be3d591ec06429cf048cfe169b8891c373606344d51c4f3ac0f91d6d0
languageName: node
linkType: hard
-"@babel/plugin-syntax-import-attributes@npm:^7.26.0":
- version: 7.26.0
- resolution: "@babel/plugin-syntax-import-attributes@npm:7.26.0"
+"@babel/plugin-syntax-import-attributes@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-syntax-import-attributes@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/c122aa577166c80ee67f75aebebeef4150a132c4d3109d25d7fc058bf802946f883e330f20b78c1d3e3a5ada631c8780c263d2d01b5dbaecc69efefeedd42916
+ checksum: 10/97973982fff1bbf86b3d1df13380567042887c50e2ae13a400d02a8ff2c9742a60a75e279bfb73019e1cd9710f04be5e6ab81f896e6678dcfcec8b135e8896cf
languageName: node
linkType: hard
@@ -581,14 +588,14 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-syntax-jsx@npm:^7.25.9, @babel/plugin-syntax-jsx@npm:^7.7.2":
- version: 7.25.9
- resolution: "@babel/plugin-syntax-jsx@npm:7.25.9"
+"@babel/plugin-syntax-jsx@npm:^7.27.1, @babel/plugin-syntax-jsx@npm:^7.7.2":
+ version: 7.27.1
+ resolution: "@babel/plugin-syntax-jsx@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/bb609d1ffb50b58f0c1bac8810d0e46a4f6c922aa171c458f3a19d66ee545d36e782d3bffbbc1fed0dc65a558bdce1caf5279316583c0fff5a2c1658982a8563
+ checksum: 10/c6d1324cff286a369aa95d99b8abd21dd07821b5d3affd5fe7d6058c84cff9190743287826463ee57a7beecd10fa1e4bc99061df532ee14e188c1c8937b13e3a
languageName: node
linkType: hard
@@ -692,639 +699,653 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-arrow-functions@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-arrow-functions@npm:7.25.9"
+"@babel/plugin-transform-arrow-functions@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-arrow-functions@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/c29f081224859483accf55fb4d091db2aac0dcd0d7954bac5ca889030cc498d3f771aa20eb2e9cd8310084ec394d85fa084b97faf09298b6bc9541182b3eb5bb
+ checksum: 10/62c2cc0ae2093336b1aa1376741c5ed245c0987d9e4b4c5313da4a38155509a7098b5acce582b6781cc0699381420010da2e3086353344abe0a6a0ec38961eb7
languageName: node
linkType: hard
-"@babel/plugin-transform-async-generator-functions@npm:^7.26.8":
- version: 7.26.8
- resolution: "@babel/plugin-transform-async-generator-functions@npm:7.26.8"
+"@babel/plugin-transform-async-generator-functions@npm:^7.28.0":
+ version: 7.28.0
+ resolution: "@babel/plugin-transform-async-generator-functions@npm:7.28.0"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.26.5"
- "@babel/helper-remap-async-to-generator": "npm:^7.25.9"
- "@babel/traverse": "npm:^7.26.8"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
+ "@babel/helper-remap-async-to-generator": "npm:^7.27.1"
+ "@babel/traverse": "npm:^7.28.0"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/8fb43823f56281b041dbd358de4f59fccb3e20aac133a439caaeb5aaa30671b3482da9a8515b169fef108148e937c1248b7d6383979c3b30f9348e3fabd29b8e
+ checksum: 10/8ad31b9969b203dec572738a872e17b14ef76ca45b4ef5ffa76f3514be417ca233d1a0978e5f8de166412a8a745619eb22b07cc5df96f5ebad8ca500f920f61b
languageName: node
linkType: hard
-"@babel/plugin-transform-async-to-generator@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-async-to-generator@npm:7.25.9"
+"@babel/plugin-transform-async-to-generator@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-async-to-generator@npm:7.27.1"
dependencies:
- "@babel/helper-module-imports": "npm:^7.25.9"
- "@babel/helper-plugin-utils": "npm:^7.25.9"
- "@babel/helper-remap-async-to-generator": "npm:^7.25.9"
+ "@babel/helper-module-imports": "npm:^7.27.1"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
+ "@babel/helper-remap-async-to-generator": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/b3ad50fb93c171644d501864620ed23952a46648c4df10dc9c62cc9ad08031b66bd272cfdd708faeee07c23b6251b16f29ce0350473e4c79f0c32178d38ce3a6
+ checksum: 10/d79d7a7ae7d416f6a48200017d027a6ba94c09c7617eea8b4e9c803630f00094c1a4fc32bf20ce3282567824ce3fcbda51653aac4003c71ea4e681b331338979
languageName: node
linkType: hard
-"@babel/plugin-transform-block-scoped-functions@npm:^7.26.5":
- version: 7.26.5
- resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.26.5"
+"@babel/plugin-transform-block-scoped-functions@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.26.5"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/f2046c09bf8e588bfb1a6342d0eee733189102cf663ade27adb0130f3865123af5816b40a55ec8d8fa09271b54dfdaf977cd2f8e0b3dc97f18e690188d5a2174
+ checksum: 10/7fb4988ca80cf1fc8345310d5edfe38e86b3a72a302675cdd09404d5064fe1d1fe1283ebe658ad2b71445ecef857bfb29a748064306b5f6c628e0084759c2201
languageName: node
linkType: hard
-"@babel/plugin-transform-block-scoping@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-block-scoping@npm:7.25.9"
+"@babel/plugin-transform-block-scoping@npm:^7.28.0":
+ version: 7.28.0
+ resolution: "@babel/plugin-transform-block-scoping@npm:7.28.0"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/89dcdd7edb1e0c2f44e3c568a8ad8202e2574a8a8308248550a9391540bc3f5c9fbd8352c60ae90769d46f58d3ab36f2c3a0fbc1c3620813d92ff6fccdfa79c8
+ checksum: 10/eefa0d0b3cd8005b77ad3239700cec90c2b19612e664772c50da6b917b272d20ebc831db6ff0d9fef011a810d9f02c434fdf551b3a4264eb834afa20090a9434
languageName: node
linkType: hard
-"@babel/plugin-transform-class-properties@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-class-properties@npm:7.25.9"
+"@babel/plugin-transform-class-properties@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-class-properties@npm:7.27.1"
dependencies:
- "@babel/helper-create-class-features-plugin": "npm:^7.25.9"
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-create-class-features-plugin": "npm:^7.27.1"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/a8d69e2c285486b63f49193cbcf7a15e1d3a5f632c1c07d7a97f65306df7f554b30270b7378dde143f8b557d1f8f6336c643377943dec8ec405e4cd11e90b9ea
+ checksum: 10/475a6e5a9454912fe1bdc171941976ca10ea4e707675d671cdb5ce6b6761d84d1791ac61b6bca81a2e5f6430cb7b9d8e4b2392404110e69c28207a754e196294
languageName: node
linkType: hard
-"@babel/plugin-transform-class-static-block@npm:^7.26.0":
- version: 7.26.0
- resolution: "@babel/plugin-transform-class-static-block@npm:7.26.0"
+"@babel/plugin-transform-class-static-block@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-class-static-block@npm:7.27.1"
dependencies:
- "@babel/helper-create-class-features-plugin": "npm:^7.25.9"
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-create-class-features-plugin": "npm:^7.27.1"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.12.0
- checksum: 10/60cba3f125a7bc4f90706af0a011697c7ffd2eddfba336ed6f84c5f358c44c3161af18b0202475241a96dee7964d96dd3a342f46dbf85b75b38bb789326e1766
+ checksum: 10/2d49de0f5ffc66ae873be1d8c3bf4d22e51889cc779d534e4dbda0f91e36907479e5c650b209fcfc80f922a6c3c2d76c905fc2f5dc78cc9a836f8c31b10686c4
languageName: node
linkType: hard
-"@babel/plugin-transform-classes@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-classes@npm:7.25.9"
+"@babel/plugin-transform-classes@npm:^7.28.0":
+ version: 7.28.0
+ resolution: "@babel/plugin-transform-classes@npm:7.28.0"
dependencies:
- "@babel/helper-annotate-as-pure": "npm:^7.25.9"
- "@babel/helper-compilation-targets": "npm:^7.25.9"
- "@babel/helper-plugin-utils": "npm:^7.25.9"
- "@babel/helper-replace-supers": "npm:^7.25.9"
- "@babel/traverse": "npm:^7.25.9"
- globals: "npm:^11.1.0"
+ "@babel/helper-annotate-as-pure": "npm:^7.27.3"
+ "@babel/helper-compilation-targets": "npm:^7.27.2"
+ "@babel/helper-globals": "npm:^7.28.0"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
+ "@babel/helper-replace-supers": "npm:^7.27.1"
+ "@babel/traverse": "npm:^7.28.0"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/1914ebe152f35c667fba7bf17ce0d9d0f33df2fb4491990ce9bb1f9ec5ae8cbd11d95b0dc371f7a4cc5e7ce4cf89467c3e34857302911fc6bfb6494a77f7b37e
+ checksum: 10/1a812a02f641ffc80b139b3c690ceba52476576f9df1a62dbdde9c412e88ca143b7b872da71665838c34276c4ed92f6547199044a424222b84f9a8ee7c85798f
languageName: node
linkType: hard
-"@babel/plugin-transform-computed-properties@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-computed-properties@npm:7.25.9"
+"@babel/plugin-transform-computed-properties@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-computed-properties@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
- "@babel/template": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
+ "@babel/template": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/aa1a9064d6a9d3b569b8cae6972437315a38a8f6553ee618406da5122500a06c2f20b9fa93aeed04dd895923bf6f529c09fc79d4be987ec41785ceb7d2203122
+ checksum: 10/101f6d4575447070943d5a9efaa5bea8c552ea3083d73a9612f1a16d38b0a0a7b79a5feb65c6cc4e4fcabf28e85a570b97ccd3294da966e8fbbb6dfb97220eda
languageName: node
linkType: hard
-"@babel/plugin-transform-destructuring@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-destructuring@npm:7.25.9"
+"@babel/plugin-transform-destructuring@npm:^7.28.0":
+ version: 7.28.0
+ resolution: "@babel/plugin-transform-destructuring@npm:7.28.0"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
+ "@babel/traverse": "npm:^7.28.0"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/51b24fbead910ad0547463b2d214dd08076b22a66234b9f878b8bac117603dd23e05090ff86e9ffc373214de23d3e5bf1b095fe54cce2ca16b010264d90cf4f5
+ checksum: 10/cddab2520ff32d18005670fc6646396a253d3811d1ccc49f6f858469f05985ee896c346a0cb34d1cf25155c9be76d1068ff878cf8e8459bd3fa27513ec5a6802
languageName: node
linkType: hard
-"@babel/plugin-transform-dotall-regex@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-dotall-regex@npm:7.25.9"
+"@babel/plugin-transform-dotall-regex@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-dotall-regex@npm:7.27.1"
dependencies:
- "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9"
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/8bdf1bb9e6e3a2cc8154ae88a3872faa6dc346d6901994505fb43ac85f858728781f1219f40b67f7bb0687c507450236cb7838ac68d457e65637f98500aa161b
+ checksum: 10/2173e5b13f403538ffc6bd57b190cedf4caf320abc13a99e5b2721864e7148dbd3bd7c82d92377136af80432818f665fdd9a1fd33bc5549a4c91e24e5ce2413c
languageName: node
linkType: hard
-"@babel/plugin-transform-duplicate-keys@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-duplicate-keys@npm:7.25.9"
+"@babel/plugin-transform-duplicate-keys@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-duplicate-keys@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/10dbb87bc09582416f9f97ca6c40563655abf33e3fd0fee25eeaeff28e946a06651192112a2bc2b18c314a638fa15c55b8365a677ef67aa490848cefdc57e1d8
+ checksum: 10/987b718d2fab7626f61b72325c8121ead42341d6f46ad3a9b5e5f67f3ec558c903f1b8336277ffc43caac504ce00dd23a5456b5d1da23913333e1da77751f08d
languageName: node
linkType: hard
-"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.25.9"
+"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.27.1"
dependencies:
- "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9"
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 10/f7233cf596be8c6843d31951afaf2464a62a610cb89c72c818c044765827fab78403ab8a7d3a6386f838c8df574668e2a48f6c206b1d7da965aff9c6886cb8e6
+ checksum: 10/2a109613535e6ac79240dced71429e988affd6a5b3d0cd0f563c8d6c208c51ce7bf2c300bc1150502376b26a51f279119b3358f1c0f2d2f8abca3bcd62e1ae46
languageName: node
linkType: hard
-"@babel/plugin-transform-dynamic-import@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-dynamic-import@npm:7.25.9"
+"@babel/plugin-transform-dynamic-import@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-dynamic-import@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/aaca1ccda819be9b2b85af47ba08ddd2210ff2dbea222f26e4cd33f97ab020884bf81a66197e50872721e9daf36ceb5659502c82199884ea74d5d75ecda5c58b
+ checksum: 10/7a9fbc8d17148b7f11a1d1ca3990d2c2cd44bd08a45dcaf14f20a017721235b9044b20e6168b6940282bb1b48fb78e6afbdfb9dd9d82fde614e15baa7d579932
languageName: node
linkType: hard
-"@babel/plugin-transform-exponentiation-operator@npm:^7.26.3":
- version: 7.26.3
- resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.26.3"
+"@babel/plugin-transform-explicit-resource-management@npm:^7.28.0":
+ version: 7.28.0
+ resolution: "@babel/plugin-transform-explicit-resource-management@npm:7.28.0"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
+ "@babel/plugin-transform-destructuring": "npm:^7.28.0"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/0d8da2e552a50a775fe8e6e3c32621d20d3c5d1af7ab40ca2f5c7603de057b57b1b5850f74040e4ecbe36c09ac86d92173ad1e223a2a3b3df3cc359ca4349738
+ checksum: 10/93d7835160bf8623c7b7072898046c9a2a46cf911f38fa2a002de40a11045a65bf9c1663c98f2e4e04615037f63391832c20b45d7bc26a16d39a97995d0669bc
languageName: node
linkType: hard
-"@babel/plugin-transform-export-namespace-from@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-export-namespace-from@npm:7.25.9"
+"@babel/plugin-transform-exponentiation-operator@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/4dfe8df86c5b1d085d591290874bb2d78a9063090d71567ed657a418010ad333c3f48af2c974b865f53bbb718987a065f89828d43279a7751db1a56c9229078d
+ checksum: 10/dbbedd24724c2d590ef59d32cb1fef34e99daba41c5b621f9f4c4da23e15c2bb4b1e3d954c314645016391404cf00f1e4ddec8f1f7891438bcde9aaf16e16ee0
languageName: node
linkType: hard
-"@babel/plugin-transform-for-of@npm:^7.26.9":
- version: 7.26.9
- resolution: "@babel/plugin-transform-for-of@npm:7.26.9"
+"@babel/plugin-transform-export-namespace-from@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-export-namespace-from@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.26.5"
- "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/25df1ea3bcecc1bcef99f273fbd8f4a73a509ab7ef3db93629817cb02f9d24868ca3760347f864c8fa4ab79ffa86fb09b2f2de1f2ba1f73f27dbe0c3973c6868
+ checksum: 10/85082923eca317094f08f4953d8ea2a6558b3117826c0b740676983902b7236df1f4213ad844cb38c2dae104753dbe8f1cc51f01567835d476d32f5f544a4385
languageName: node
linkType: hard
-"@babel/plugin-transform-function-name@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-function-name@npm:7.25.9"
+"@babel/plugin-transform-for-of@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-for-of@npm:7.27.1"
dependencies:
- "@babel/helper-compilation-targets": "npm:^7.25.9"
- "@babel/helper-plugin-utils": "npm:^7.25.9"
- "@babel/traverse": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
+ "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/a8d7c8d019a6eb57eab5ca1be3e3236f175557d55b1f3b11f8ad7999e3fbb1cf37905fd8cb3a349bffb4163a558e9f33b63f631597fdc97c858757deac1b2fd7
+ checksum: 10/705c591d17ef263c309bba8c38e20655e8e74ff7fd21883a9cdaf5bf1df42d724383ad3d88ac01f42926e15b1e1e66f2f7f8c4e87de955afffa290d52314b019
languageName: node
linkType: hard
-"@babel/plugin-transform-json-strings@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-json-strings@npm:7.25.9"
+"@babel/plugin-transform-function-name@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-function-name@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-compilation-targets": "npm:^7.27.1"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
+ "@babel/traverse": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/e2498d84761cfd05aaea53799933d55af309c9d6204e66b38778792d171e4d1311ad34f334259a3aa3407dd0446f6bd3e390a1fcb8ce2e42fe5aabed0e41bee1
+ checksum: 10/26a2a183c3c52a96495967420a64afc5a09f743a230272a131668abf23001e393afa6371e6f8e6c60f4182bea210ed31d1caf866452d91009c1daac345a52f23
languageName: node
linkType: hard
-"@babel/plugin-transform-literals@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-literals@npm:7.25.9"
+"@babel/plugin-transform-json-strings@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-json-strings@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/3cca75823a38aab599bc151b0fa4d816b5e1b62d6e49c156aa90436deb6e13649f5505973151a10418b64f3f9d1c3da53e38a186402e0ed7ad98e482e70c0c14
+ checksum: 10/2c05a02f63b49f47069271b3405a66c3c8038de5b995b0700b1bd9a5e2bb3e67abd01e4604629302a521f4d8122a4233944aefa16559fd4373d256cc5d3da57f
languageName: node
linkType: hard
-"@babel/plugin-transform-logical-assignment-operators@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.25.9"
+"@babel/plugin-transform-literals@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-literals@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/8c6febb4ac53852314d28b5e2c23d5dbbff7bf1e57d61f9672e0d97531ef7778b3f0ad698dcf1179f5486e626c77127508916a65eb846a89e98a92f70ed3537b
+ checksum: 10/0a76d12ab19f32dd139964aea7da48cecdb7de0b75e207e576f0f700121fe92367d788f328bf4fb44b8261a0f605c97b44e62ae61cddbb67b14e94c88b411f95
languageName: node
linkType: hard
-"@babel/plugin-transform-member-expression-literals@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-member-expression-literals@npm:7.25.9"
+"@babel/plugin-transform-logical-assignment-operators@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/db92041ae87b8f59f98b50359e0bb172480f6ba22e5e76b13bdfe07122cbf0daa9cd8ad2e78dcb47939938fed88ad57ab5989346f64b3a16953fc73dea3a9b1f
+ checksum: 10/2757955d81d65cc4701c17b83720745f6858f7a1d1d58117e379c204f47adbeb066b778596b6168bdbf4a22c229aab595d79a9abc261d0c6bfd62d4419466e73
languageName: node
linkType: hard
-"@babel/plugin-transform-modules-amd@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-modules-amd@npm:7.25.9"
+"@babel/plugin-transform-member-expression-literals@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-member-expression-literals@npm:7.27.1"
dependencies:
- "@babel/helper-module-transforms": "npm:^7.25.9"
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/75d34c6e709a23bcfa0e06f722c9a72b1d9ac3e7d72a07ef54a943d32f65f97cbbf0e387d874eb9d9b4c8d33045edfa8e8441d0f8794f3c2b9f1d71b928acf2c
+ checksum: 10/804121430a6dcd431e6ffe99c6d1fbbc44b43478113b79c677629e7f877b4f78a06b69c6bfb2747fd84ee91879fe2eb32e4620b53124603086cf5b727593ebe8
languageName: node
linkType: hard
-"@babel/plugin-transform-modules-commonjs@npm:^7.22.5, @babel/plugin-transform-modules-commonjs@npm:^7.26.3":
- version: 7.26.3
- resolution: "@babel/plugin-transform-modules-commonjs@npm:7.26.3"
+"@babel/plugin-transform-modules-amd@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-modules-amd@npm:7.27.1"
dependencies:
- "@babel/helper-module-transforms": "npm:^7.26.0"
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-module-transforms": "npm:^7.27.1"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/f817f02fa04d13f1578f3026239b57f1003bebcf9f9b8d854714bed76a0e4986c79bd6d2e0ac14282c5d309454a8dab683c179709ca753b0152a69c69f3a78e3
+ checksum: 10/5ca9257981f2bbddd9dccf9126f1368de1cb335e7a5ff5cca9282266825af5b18b5f06c144320dcf5d2a200d2b53b6d22d9b801a55dc0509ab5a5838af7e61b7
languageName: node
linkType: hard
-"@babel/plugin-transform-modules-systemjs@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-modules-systemjs@npm:7.25.9"
+"@babel/plugin-transform-modules-commonjs@npm:^7.22.5, @babel/plugin-transform-modules-commonjs@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-modules-commonjs@npm:7.27.1"
dependencies:
- "@babel/helper-module-transforms": "npm:^7.25.9"
- "@babel/helper-plugin-utils": "npm:^7.25.9"
- "@babel/helper-validator-identifier": "npm:^7.25.9"
- "@babel/traverse": "npm:^7.25.9"
+ "@babel/helper-module-transforms": "npm:^7.27.1"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/03145aa89b7c867941a03755216cfb503df6d475a78df84849a157fa5f2fcc17ba114a968d0579ae34e7c61403f35d1ba5d188fdfb9ad05f19354eb7605792f9
+ checksum: 10/9059243a977bc1f13e3dccfc6feb6508890e7c7bb191f7eb56626b20672b4b12338051ca835ab55426875a473181502c8f35b4df58ba251bef63b25866d995fe
languageName: node
linkType: hard
-"@babel/plugin-transform-modules-umd@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-modules-umd@npm:7.25.9"
+"@babel/plugin-transform-modules-systemjs@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-modules-systemjs@npm:7.27.1"
dependencies:
- "@babel/helper-module-transforms": "npm:^7.25.9"
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-module-transforms": "npm:^7.27.1"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
+ "@babel/helper-validator-identifier": "npm:^7.27.1"
+ "@babel/traverse": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/47d03485fedac828832d9fee33b3b982a6db8197e8651ceb5d001890e276150b5a7ee3e9780749e1ba76453c471af907a159108832c24f93453dd45221788e97
+ checksum: 10/06d7bf76ac4688a36ae8e8d2dde1c3b8bab4594362132b74a00d5a32e6716944d68911b9bc53df60e59f4f9c7f1796525503ce3e3eed42f842d7775ccdfd836e
languageName: node
linkType: hard
-"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.25.9"
+"@babel/plugin-transform-modules-umd@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-modules-umd@npm:7.27.1"
dependencies:
- "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9"
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-module-transforms": "npm:^7.27.1"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10/7388932863b4ee01f177eb6c2e2df9e2312005e43ada99897624d5565db4b9cef1e30aa7ad2c79bbe5373f284cfcddea98d8fe212714a24c6aba223272163058
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.27.1"
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 10/434346ba05cf74e3f4704b3bdd439287b95cd2a8676afcdc607810b8c38b6f4798cd69c1419726b2e4c7204e62e4a04d31b0360e91ca57a930521c9211e07789
+ checksum: 10/a711c92d9753df26cefc1792481e5cbff4fe4f32b383d76b25e36fa865d8023b1b9aa6338cf18f5c0e864c71a7fbe8115e840872ccd61a914d9953849c68de7d
languageName: node
linkType: hard
-"@babel/plugin-transform-new-target@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-new-target@npm:7.25.9"
+"@babel/plugin-transform-new-target@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-new-target@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/07bb3a09028ee7b8e8ede6e6390e3b3aecc5cf9adb2fc5475ff58036c552b8a3f8e63d4c43211a60545f3307cdc15919f0e54cb5455d9546daed162dc54ff94e
+ checksum: 10/620d78ee476ae70960989e477dc86031ffa3d554b1b1999e6ec95261629f7a13e5a7b98579c63a009f9fdf14def027db57de1f0ae1f06fb6eaed8908ff65cf68
languageName: node
linkType: hard
-"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.26.6":
- version: 7.26.6
- resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.26.6"
+"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.26.5"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/3832609f043dd1cd8076ab6a00a201573ef3f95bb2144d57787e4a973b3189884c16b4e77ff8e84a6ca47bc3b65bb7df10dca2f6163dfffc316ac96c37b0b5a6
+ checksum: 10/15333f4888ffedc449a2a21a0b1ca7983e089f43faa00cfb71d2466e20221a5fd979cdb1a3f57bc20fc62c67bd3ff3dde054133fb6324a58be8f64d20aefacd2
languageName: node
linkType: hard
-"@babel/plugin-transform-numeric-separator@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-numeric-separator@npm:7.25.9"
+"@babel/plugin-transform-numeric-separator@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-numeric-separator@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/0528ef041ed88e8c3f51624ee87b8182a7f246fe4013f0572788e0727d20795b558f2b82e3989b5dd416cbd339500f0d88857de41b6d3b6fdacb1d5344bcc5b1
+ checksum: 10/049b958911de86d32408cd78017940a207e49c054ae9534ab53a32a57122cc592c0aae3c166d6f29bd1a7d75cc779d71883582dd76cb28b2fbb493e842d8ffca
languageName: node
linkType: hard
-"@babel/plugin-transform-object-rest-spread@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-object-rest-spread@npm:7.25.9"
+"@babel/plugin-transform-object-rest-spread@npm:^7.28.0":
+ version: 7.28.0
+ resolution: "@babel/plugin-transform-object-rest-spread@npm:7.28.0"
dependencies:
- "@babel/helper-compilation-targets": "npm:^7.25.9"
- "@babel/helper-plugin-utils": "npm:^7.25.9"
- "@babel/plugin-transform-parameters": "npm:^7.25.9"
+ "@babel/helper-compilation-targets": "npm:^7.27.2"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
+ "@babel/plugin-transform-destructuring": "npm:^7.28.0"
+ "@babel/plugin-transform-parameters": "npm:^7.27.7"
+ "@babel/traverse": "npm:^7.28.0"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/a157ac5af2721090150858f301d9c0a3a0efb8ef66b90fce326d6cc0ae45ab97b6219b3e441bf8d72a2287e95eb04dd6c12544da88ea2345e70b3fac2c0ac9e2
+ checksum: 10/55d37dbc0d5d47db860b7cc9fe5e3660d83108113fc3f2a7daecb95c20d4046a70247777969006f7db8fb2005eeeda719b9ff21e9f6d43355d0a62fc41b5880e
languageName: node
linkType: hard
-"@babel/plugin-transform-object-super@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-object-super@npm:7.25.9"
+"@babel/plugin-transform-object-super@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-object-super@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
- "@babel/helper-replace-supers": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
+ "@babel/helper-replace-supers": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/1817b5d8b80e451ae1ad9080cca884f4f16df75880a158947df76a2ed8ab404d567a7dce71dd8051ef95f90fbe3513154086a32aba55cc76027f6cbabfbd7f98
+ checksum: 10/46b819cb9a6cd3cfefe42d07875fee414f18d5e66040366ae856116db560ad4e16f3899a0a7fddd6773e0d1458444f94b208b67c0e3b6977a27ea17a5c13dbf6
languageName: node
linkType: hard
-"@babel/plugin-transform-optional-catch-binding@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.25.9"
+"@babel/plugin-transform-optional-catch-binding@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/b46a8d1e91829f3db5c252583eb00d05a779b4660abeea5500fda0f8ffa3584fd18299443c22f7fddf0ed9dfdb73c782c43b445dc468d4f89803f2356963b406
+ checksum: 10/f4356b04cf21a98480f9788ea50f1f13ee88e89bb6393ba4b84d1f39a4a84c7928c9a4328e8f4c5b6deb218da68a8fd17bf4f46faec7653ddc20ffaaa5ba49f4
languageName: node
linkType: hard
-"@babel/plugin-transform-optional-chaining@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-optional-chaining@npm:7.25.9"
+"@babel/plugin-transform-optional-chaining@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-optional-chaining@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
- "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
+ "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/bc838a499fd9892e163b8bc9bfbc4bf0b28cc3232ee0a6406ae078257c8096518f871d09b4a32c11f4a2d6953c3bc1984619ef748f7ad45aed0b0d9689a8eb36
+ checksum: 10/34b0f96400c259a2722740d17a001fe45f78d8ff052c40e29db2e79173be72c1cfe8d9681067e3f5da3989e4a557402df5c982c024c18257587a41e022f95640
languageName: node
linkType: hard
-"@babel/plugin-transform-parameters@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-parameters@npm:7.25.9"
+"@babel/plugin-transform-parameters@npm:^7.27.7":
+ version: 7.27.7
+ resolution: "@babel/plugin-transform-parameters@npm:7.27.7"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/014009a1763deb41fe9f0dbca2c4489ce0ac83dd87395f488492e8eb52399f6c883d5bd591bae3b8836f2460c3937fcebd07e57dce1e0bfe30cdbc63fdfc9d3a
+ checksum: 10/ba0aa8c977a03bf83030668f64c1d721e4e82d8cce89cdde75a2755862b79dbe9e7f58ca955e68c721fd494d6ee3826e46efad3fbf0855fcc92cb269477b4777
languageName: node
linkType: hard
-"@babel/plugin-transform-private-methods@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-private-methods@npm:7.25.9"
+"@babel/plugin-transform-private-methods@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-private-methods@npm:7.27.1"
dependencies:
- "@babel/helper-create-class-features-plugin": "npm:^7.25.9"
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-create-class-features-plugin": "npm:^7.27.1"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/6e3671b352c267847c53a170a1937210fa8151764d70d25005e711ef9b21969aaf422acc14f9f7fb86bc0e4ec43e7aefcc0ad9196ae02d262ec10f509f126a58
+ checksum: 10/c76f8f6056946466116e67eb9d8014a2d748ade2062636ab82045c1dac9c233aff10e597777bc5af6f26428beb845ceb41b95007abef7d0484da95789da56662
languageName: node
linkType: hard
-"@babel/plugin-transform-private-property-in-object@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-private-property-in-object@npm:7.25.9"
+"@babel/plugin-transform-private-property-in-object@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-private-property-in-object@npm:7.27.1"
dependencies:
- "@babel/helper-annotate-as-pure": "npm:^7.25.9"
- "@babel/helper-create-class-features-plugin": "npm:^7.25.9"
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-annotate-as-pure": "npm:^7.27.1"
+ "@babel/helper-create-class-features-plugin": "npm:^7.27.1"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/aa45bb5669b610afa763d774a4b5583bb60ce7d38e4fd2dedfd0703e73e25aa560e6c6124e155aa90b101601743b127d9e5d3eb00989a7e4b4ab9c2eb88475ba
+ checksum: 10/d4466d42a02c5a318d9d7b8102969fd032b17ff044918dfd462d5cc49bd11f5773ee0794781702afdf4727ba11e9be6cbea1e396bc0a7307761bb9a56399012a
languageName: node
linkType: hard
-"@babel/plugin-transform-property-literals@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-property-literals@npm:7.25.9"
+"@babel/plugin-transform-property-literals@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-property-literals@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/436046ab07d54a9b44a384eeffec701d4e959a37a7547dda72e069e751ca7ff753d1782a8339e354b97c78a868b49ea97bf41bf5a44c6d7a3c0a05ad40eeb49c
+ checksum: 10/7caec27d5ed8870895c9faf4f71def72745d69da0d8e77903146a4e135fd7bed5778f5f9cebb36c5fba86338e6194dd67a08c033fc84b4299b7eceab6d9630cb
languageName: node
linkType: hard
-"@babel/plugin-transform-react-display-name@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-react-display-name@npm:7.25.9"
+"@babel/plugin-transform-react-display-name@npm:^7.27.1":
+ version: 7.28.0
+ resolution: "@babel/plugin-transform-react-display-name@npm:7.28.0"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/dc7affde0ed98e40f629ee92a2fc44fbd8008aabda1ddb3f5bd2632699d3289b08dff65b26cf3b89dab46397ec440f453d19856bbb3a9a83df5b4ac6157c5c39
+ checksum: 10/d623644a078086f410b1952429d82c10e2833ebffb97800b25f55ab7f3ffafde34e57a4a71958da73f4abfcef39b598e2ca172f2b43531f98b3f12e0de17c219
languageName: node
linkType: hard
-"@babel/plugin-transform-react-jsx-development@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-react-jsx-development@npm:7.25.9"
+"@babel/plugin-transform-react-jsx-development@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-react-jsx-development@npm:7.27.1"
dependencies:
- "@babel/plugin-transform-react-jsx": "npm:^7.25.9"
+ "@babel/plugin-transform-react-jsx": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/537d38369537f1eb56041c4b770bc0733fde1801a7f5ffef40a1217ea448f33ee2fa8e6098a58a82fd00e432c1b9426a66849496da419020c9eca3b1b1a23779
+ checksum: 10/b88865d5b8c018992f2332da939faa15c4d4a864c9435a5937beaff3fe43781432cc42e0a5d5631098e0bd4066fc33f5fa72203b388b074c3545fe7aaa21e474
languageName: node
linkType: hard
-"@babel/plugin-transform-react-jsx@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-react-jsx@npm:7.25.9"
+"@babel/plugin-transform-react-jsx@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-react-jsx@npm:7.27.1"
dependencies:
- "@babel/helper-annotate-as-pure": "npm:^7.25.9"
- "@babel/helper-module-imports": "npm:^7.25.9"
- "@babel/helper-plugin-utils": "npm:^7.25.9"
- "@babel/plugin-syntax-jsx": "npm:^7.25.9"
- "@babel/types": "npm:^7.25.9"
+ "@babel/helper-annotate-as-pure": "npm:^7.27.1"
+ "@babel/helper-module-imports": "npm:^7.27.1"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
+ "@babel/plugin-syntax-jsx": "npm:^7.27.1"
+ "@babel/types": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/eb179ecdf0ae19aed254105cf78fbac35f9983f51ed04b7b67c863a4820a70a879bd5da250ac518321f86df20eac010e53e3411c8750c386d51da30e4814bfb6
+ checksum: 10/e865f194770906398957df23530af9a46009ac3737aaa10026b3925fe0a38fc3254f4b227d3b8807ab66ac92c14323bef561dd2217644052de5a9702af76e2f6
languageName: node
linkType: hard
-"@babel/plugin-transform-react-pure-annotations@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.25.9"
+"@babel/plugin-transform-react-pure-annotations@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.27.1"
dependencies:
- "@babel/helper-annotate-as-pure": "npm:^7.25.9"
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-annotate-as-pure": "npm:^7.27.1"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/9995c0fc7c25d3aaaa0ce84233de02eab2564ea111d0813ec5baa538eb21520402879cc787ad1ad4c2061b99cebc3beb09910e64c9592e8ccb42ae62d9e4fd9a
+ checksum: 10/a6f591c5e85a1ab0685d4a25afe591fe8d11dc0b73c677cf9560ff8d540d036a1cce9efcb729fc9092def4d854dc304ffdc063a89a9247900b69c516bf971a4c
languageName: node
linkType: hard
-"@babel/plugin-transform-regenerator@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-regenerator@npm:7.25.9"
+"@babel/plugin-transform-regenerator@npm:^7.28.0":
+ version: 7.28.1
+ resolution: "@babel/plugin-transform-regenerator@npm:7.28.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
- regenerator-transform: "npm:^0.15.2"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/1c09e8087b476c5967282c9790fb8710e065eda77c60f6cb5da541edd59ded9d003d96f8ef640928faab4a0b35bf997673499a194973da4f0c97f0935807a482
+ checksum: 10/45e3a63bf28d74db4f74d8685d1e416a56f3b7ccf11b13b45589675caf2e7e04d908bdb66bd2407336cd8dfe2ee9013c3bafa46bdddb5ff3248fd64890c36305
languageName: node
linkType: hard
-"@babel/plugin-transform-regexp-modifiers@npm:^7.26.0":
- version: 7.26.0
- resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.26.0"
+"@babel/plugin-transform-regexp-modifiers@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.27.1"
dependencies:
- "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9"
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 10/726deca486bbd4b176f8a966eb0f4aabc19d9def3b8dabb8b3a656778eca0df1fda3f3c92b213aa5a184232fdafd5b7bd73b4e24ca4345c498ef6baff2bda4e1
+ checksum: 10/f6cb385fe0e798bff7e9b20cf5912bf40e180895ff3610b1ccdce260f3c20daaebb3a99dc087c8168a99151cd3e16b94f4689fd5a4b01cf1834b45c133e620b2
languageName: node
linkType: hard
-"@babel/plugin-transform-reserved-words@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-reserved-words@npm:7.25.9"
+"@babel/plugin-transform-reserved-words@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-reserved-words@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/8beda04481b25767acbd1f6b9ef7b3a9c12fbd9dcb24df45a6ad120e1dc4b247c073db60ac742f9093657d6d8c050501fc0606af042f81a3bb6a3ff862cddc47
+ checksum: 10/dea0b66742d2863b369c06c053e11e15ba785892ea19cccf7aef3c1bdaa38b6ab082e19984c5ea7810d275d9445c5400fcc385ad71ce707ed9256fadb102af3b
languageName: node
linkType: hard
-"@babel/plugin-transform-shorthand-properties@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-shorthand-properties@npm:7.25.9"
+"@babel/plugin-transform-shorthand-properties@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-shorthand-properties@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/f774995d58d4e3a992b732cf3a9b8823552d471040e280264dd15e0735433d51b468fef04d75853d061309389c66bda10ce1b298297ce83999220eb0ad62741d
+ checksum: 10/fbba6e2aef0b69681acb68202aa249c0598e470cc0853d7ff5bd0171fd6a7ec31d77cfabcce9df6360fc8349eded7e4a65218c32551bd3fc0caaa1ac899ac6d4
languageName: node
linkType: hard
-"@babel/plugin-transform-spread@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-spread@npm:7.25.9"
+"@babel/plugin-transform-spread@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-spread@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
- "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
+ "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/fe72c6545267176cdc9b6f32f30f9ced37c1cafa1290e4436b83b8f377b4f1c175dad404228c96e3efdec75da692f15bfb9db2108fcd9ad260bc9968778ee41e
+ checksum: 10/3edd28b07e1951f32aa2d380d9a0e0ed408c64a5cea2921d02308541042aca18f146b3a61e82e534d4d61cb3225dbc847f4f063aedfff6230b1a41282e95e8a2
languageName: node
linkType: hard
-"@babel/plugin-transform-sticky-regex@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-sticky-regex@npm:7.25.9"
+"@babel/plugin-transform-sticky-regex@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-sticky-regex@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/7454b00844dbe924030dd15e2b3615b36e196500c4c47e98dabc6b37a054c5b1038ecd437e910aabf0e43bf56b973cb148d3437d50f6e2332d8309568e3e979b
+ checksum: 10/e1414a502efba92c7974681767e365a8cda6c5e9e5f33472a9eaa0ce2e75cea0a9bef881ff8dda37c7810ad902f98d3c00ead92a3ac3b73a79d011df85b5a189
languageName: node
linkType: hard
-"@babel/plugin-transform-template-literals@npm:^7.26.8":
- version: 7.26.8
- resolution: "@babel/plugin-transform-template-literals@npm:7.26.8"
+"@babel/plugin-transform-template-literals@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-template-literals@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.26.5"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/65874c8844ce906507cd5b9c78950d6173f8339b6416a2a9e763021db5a7045315a6f0e58976ec4af5e960c003ef322576c105130a644addb8f94d1a0821a972
+ checksum: 10/93aad782503b691faef7c0893372d5243df3219b07f1f22cfc32c104af6a2e7acd6102c128439eab15336d048f1b214ca134b87b0630d8cd568bf447f78b25ce
languageName: node
linkType: hard
-"@babel/plugin-transform-typeof-symbol@npm:^7.26.7":
- version: 7.26.7
- resolution: "@babel/plugin-transform-typeof-symbol@npm:7.26.7"
+"@babel/plugin-transform-typeof-symbol@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-typeof-symbol@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.26.5"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/c4ed244c9f252f941f4dff4b6ad06f6d6f5860e9aa5a6cccb5725ead670f2dab58bba4bad9c2b7bd25685e5205fde810857df964d417072c5c282bbfa4f6bf7a
+ checksum: 10/812d736402a6f9313b86b8adf36740394400be7a09c48e51ee45ab4a383a3f46fc618d656dd12e44934665e42ae71cf143e25b95491b699ef7c737950dbdb862
languageName: node
linkType: hard
-"@babel/plugin-transform-unicode-escapes@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-unicode-escapes@npm:7.25.9"
+"@babel/plugin-transform-unicode-escapes@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-unicode-escapes@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/f138cbee539963fb3da13f684e6f33c9f7495220369ae12a682b358f1e25ac68936825562c38eae87f01ac9992b2129208b35ec18533567fc805ce5ed0ffd775
+ checksum: 10/87b9e49dee4ab6e78f4cdcdbdd837d7784f02868a96bfc206c8dbb17dd85db161b5a0ecbe95b19a42e8aea0ce57e80249e1facbf9221d7f4114d52c3b9136c9e
languageName: node
linkType: hard
-"@babel/plugin-transform-unicode-property-regex@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.25.9"
+"@babel/plugin-transform-unicode-property-regex@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.27.1"
dependencies:
- "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9"
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/201f6f46c1beb399e79aa208b94c5d54412047511795ce1e790edcd189cef73752e6a099fdfc01b3ad12205f139ae344143b62f21f44bbe02338a95e8506a911
+ checksum: 10/5d99c89537d1ebaac3f526c04b162cf95a47d363d4829f78c6701a2c06ab78a48da66a94f853f85f44a3d72153410ba923e072bed4b7166fa097f503eb14131d
languageName: node
linkType: hard
-"@babel/plugin-transform-unicode-regex@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-unicode-regex@npm:7.25.9"
+"@babel/plugin-transform-unicode-regex@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-unicode-regex@npm:7.27.1"
dependencies:
- "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9"
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/e8baae867526e179467c6ef5280d70390fa7388f8763a19a27c21302dd59b121032568be080749514b097097ceb9af716bf4b90638f1b3cf689aa837ba20150f
+ checksum: 10/a34d89a2b75fb78e66d97c3dc90d4877f7e31f43316b52176f95a5dee20e9bb56ecf158eafc42a001676ddf7b393d9e67650bad6b32f5405780f25fb83cd68e3
languageName: node
linkType: hard
-"@babel/plugin-transform-unicode-sets-regex@npm:^7.25.9":
- version: 7.25.9
- resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.25.9"
+"@babel/plugin-transform-unicode-sets-regex@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.27.1"
dependencies:
- "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9"
- "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 10/4445ef20de687cb4dcc95169742a8d9013d680aa5eee9186d8e25875bbfa7ee5e2de26a91177ccf70b1db518e36886abcd44750d28db5d7a9539f0efa6839f4b
+ checksum: 10/295126074c7388ab05c82ef3ed0907a1ee4666bbdd763477ead9aba6eb2c74bdf65669416861ac93d337a4a27640963bb214acadc2697275ce95aab14868d57f
languageName: node
linkType: hard
@@ -1338,82 +1359,83 @@ __metadata:
languageName: node
linkType: hard
-"@babel/preset-env@npm:7.26.9":
- version: 7.26.9
- resolution: "@babel/preset-env@npm:7.26.9"
+"@babel/preset-env@npm:7.28.0":
+ version: 7.28.0
+ resolution: "@babel/preset-env@npm:7.28.0"
dependencies:
- "@babel/compat-data": "npm:^7.26.8"
- "@babel/helper-compilation-targets": "npm:^7.26.5"
- "@babel/helper-plugin-utils": "npm:^7.26.5"
- "@babel/helper-validator-option": "npm:^7.25.9"
- "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.25.9"
- "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.25.9"
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.25.9"
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.25.9"
- "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.25.9"
+ "@babel/compat-data": "npm:^7.28.0"
+ "@babel/helper-compilation-targets": "npm:^7.27.2"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
+ "@babel/helper-validator-option": "npm:^7.27.1"
+ "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.27.1"
+ "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.27.1"
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.27.1"
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.27.1"
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.27.1"
"@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2"
- "@babel/plugin-syntax-import-assertions": "npm:^7.26.0"
- "@babel/plugin-syntax-import-attributes": "npm:^7.26.0"
+ "@babel/plugin-syntax-import-assertions": "npm:^7.27.1"
+ "@babel/plugin-syntax-import-attributes": "npm:^7.27.1"
"@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6"
- "@babel/plugin-transform-arrow-functions": "npm:^7.25.9"
- "@babel/plugin-transform-async-generator-functions": "npm:^7.26.8"
- "@babel/plugin-transform-async-to-generator": "npm:^7.25.9"
- "@babel/plugin-transform-block-scoped-functions": "npm:^7.26.5"
- "@babel/plugin-transform-block-scoping": "npm:^7.25.9"
- "@babel/plugin-transform-class-properties": "npm:^7.25.9"
- "@babel/plugin-transform-class-static-block": "npm:^7.26.0"
- "@babel/plugin-transform-classes": "npm:^7.25.9"
- "@babel/plugin-transform-computed-properties": "npm:^7.25.9"
- "@babel/plugin-transform-destructuring": "npm:^7.25.9"
- "@babel/plugin-transform-dotall-regex": "npm:^7.25.9"
- "@babel/plugin-transform-duplicate-keys": "npm:^7.25.9"
- "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.25.9"
- "@babel/plugin-transform-dynamic-import": "npm:^7.25.9"
- "@babel/plugin-transform-exponentiation-operator": "npm:^7.26.3"
- "@babel/plugin-transform-export-namespace-from": "npm:^7.25.9"
- "@babel/plugin-transform-for-of": "npm:^7.26.9"
- "@babel/plugin-transform-function-name": "npm:^7.25.9"
- "@babel/plugin-transform-json-strings": "npm:^7.25.9"
- "@babel/plugin-transform-literals": "npm:^7.25.9"
- "@babel/plugin-transform-logical-assignment-operators": "npm:^7.25.9"
- "@babel/plugin-transform-member-expression-literals": "npm:^7.25.9"
- "@babel/plugin-transform-modules-amd": "npm:^7.25.9"
- "@babel/plugin-transform-modules-commonjs": "npm:^7.26.3"
- "@babel/plugin-transform-modules-systemjs": "npm:^7.25.9"
- "@babel/plugin-transform-modules-umd": "npm:^7.25.9"
- "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.25.9"
- "@babel/plugin-transform-new-target": "npm:^7.25.9"
- "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.26.6"
- "@babel/plugin-transform-numeric-separator": "npm:^7.25.9"
- "@babel/plugin-transform-object-rest-spread": "npm:^7.25.9"
- "@babel/plugin-transform-object-super": "npm:^7.25.9"
- "@babel/plugin-transform-optional-catch-binding": "npm:^7.25.9"
- "@babel/plugin-transform-optional-chaining": "npm:^7.25.9"
- "@babel/plugin-transform-parameters": "npm:^7.25.9"
- "@babel/plugin-transform-private-methods": "npm:^7.25.9"
- "@babel/plugin-transform-private-property-in-object": "npm:^7.25.9"
- "@babel/plugin-transform-property-literals": "npm:^7.25.9"
- "@babel/plugin-transform-regenerator": "npm:^7.25.9"
- "@babel/plugin-transform-regexp-modifiers": "npm:^7.26.0"
- "@babel/plugin-transform-reserved-words": "npm:^7.25.9"
- "@babel/plugin-transform-shorthand-properties": "npm:^7.25.9"
- "@babel/plugin-transform-spread": "npm:^7.25.9"
- "@babel/plugin-transform-sticky-regex": "npm:^7.25.9"
- "@babel/plugin-transform-template-literals": "npm:^7.26.8"
- "@babel/plugin-transform-typeof-symbol": "npm:^7.26.7"
- "@babel/plugin-transform-unicode-escapes": "npm:^7.25.9"
- "@babel/plugin-transform-unicode-property-regex": "npm:^7.25.9"
- "@babel/plugin-transform-unicode-regex": "npm:^7.25.9"
- "@babel/plugin-transform-unicode-sets-regex": "npm:^7.25.9"
+ "@babel/plugin-transform-arrow-functions": "npm:^7.27.1"
+ "@babel/plugin-transform-async-generator-functions": "npm:^7.28.0"
+ "@babel/plugin-transform-async-to-generator": "npm:^7.27.1"
+ "@babel/plugin-transform-block-scoped-functions": "npm:^7.27.1"
+ "@babel/plugin-transform-block-scoping": "npm:^7.28.0"
+ "@babel/plugin-transform-class-properties": "npm:^7.27.1"
+ "@babel/plugin-transform-class-static-block": "npm:^7.27.1"
+ "@babel/plugin-transform-classes": "npm:^7.28.0"
+ "@babel/plugin-transform-computed-properties": "npm:^7.27.1"
+ "@babel/plugin-transform-destructuring": "npm:^7.28.0"
+ "@babel/plugin-transform-dotall-regex": "npm:^7.27.1"
+ "@babel/plugin-transform-duplicate-keys": "npm:^7.27.1"
+ "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.27.1"
+ "@babel/plugin-transform-dynamic-import": "npm:^7.27.1"
+ "@babel/plugin-transform-explicit-resource-management": "npm:^7.28.0"
+ "@babel/plugin-transform-exponentiation-operator": "npm:^7.27.1"
+ "@babel/plugin-transform-export-namespace-from": "npm:^7.27.1"
+ "@babel/plugin-transform-for-of": "npm:^7.27.1"
+ "@babel/plugin-transform-function-name": "npm:^7.27.1"
+ "@babel/plugin-transform-json-strings": "npm:^7.27.1"
+ "@babel/plugin-transform-literals": "npm:^7.27.1"
+ "@babel/plugin-transform-logical-assignment-operators": "npm:^7.27.1"
+ "@babel/plugin-transform-member-expression-literals": "npm:^7.27.1"
+ "@babel/plugin-transform-modules-amd": "npm:^7.27.1"
+ "@babel/plugin-transform-modules-commonjs": "npm:^7.27.1"
+ "@babel/plugin-transform-modules-systemjs": "npm:^7.27.1"
+ "@babel/plugin-transform-modules-umd": "npm:^7.27.1"
+ "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.27.1"
+ "@babel/plugin-transform-new-target": "npm:^7.27.1"
+ "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.27.1"
+ "@babel/plugin-transform-numeric-separator": "npm:^7.27.1"
+ "@babel/plugin-transform-object-rest-spread": "npm:^7.28.0"
+ "@babel/plugin-transform-object-super": "npm:^7.27.1"
+ "@babel/plugin-transform-optional-catch-binding": "npm:^7.27.1"
+ "@babel/plugin-transform-optional-chaining": "npm:^7.27.1"
+ "@babel/plugin-transform-parameters": "npm:^7.27.7"
+ "@babel/plugin-transform-private-methods": "npm:^7.27.1"
+ "@babel/plugin-transform-private-property-in-object": "npm:^7.27.1"
+ "@babel/plugin-transform-property-literals": "npm:^7.27.1"
+ "@babel/plugin-transform-regenerator": "npm:^7.28.0"
+ "@babel/plugin-transform-regexp-modifiers": "npm:^7.27.1"
+ "@babel/plugin-transform-reserved-words": "npm:^7.27.1"
+ "@babel/plugin-transform-shorthand-properties": "npm:^7.27.1"
+ "@babel/plugin-transform-spread": "npm:^7.27.1"
+ "@babel/plugin-transform-sticky-regex": "npm:^7.27.1"
+ "@babel/plugin-transform-template-literals": "npm:^7.27.1"
+ "@babel/plugin-transform-typeof-symbol": "npm:^7.27.1"
+ "@babel/plugin-transform-unicode-escapes": "npm:^7.27.1"
+ "@babel/plugin-transform-unicode-property-regex": "npm:^7.27.1"
+ "@babel/plugin-transform-unicode-regex": "npm:^7.27.1"
+ "@babel/plugin-transform-unicode-sets-regex": "npm:^7.27.1"
"@babel/preset-modules": "npm:0.1.6-no-external-plugins"
- babel-plugin-polyfill-corejs2: "npm:^0.4.10"
- babel-plugin-polyfill-corejs3: "npm:^0.11.0"
- babel-plugin-polyfill-regenerator: "npm:^0.6.1"
- core-js-compat: "npm:^3.40.0"
+ babel-plugin-polyfill-corejs2: "npm:^0.4.14"
+ babel-plugin-polyfill-corejs3: "npm:^0.13.0"
+ babel-plugin-polyfill-regenerator: "npm:^0.6.5"
+ core-js-compat: "npm:^3.43.0"
semver: "npm:^6.3.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/ac6fad331760c0bc25ed428b7696b297bad7046a75f30e544b392acfb33709f12316b9a5b0c8606f933d5756e1b9d527b46fda09693db52e851325443dd6a574
+ checksum: 10/8814453ffe4cfd5926cf2af0ecc956240bcc1e5f49592015962a5f1c115c5c0c34c1e0a5c66d3d4e1a283644bb5ea4e199ced0b6117ffd20113a994fd3080798
languageName: node
linkType: hard
@@ -1430,19 +1452,19 @@ __metadata:
languageName: node
linkType: hard
-"@babel/preset-react@npm:7.26.3":
- version: 7.26.3
- resolution: "@babel/preset-react@npm:7.26.3"
+"@babel/preset-react@npm:7.27.1":
+ version: 7.27.1
+ resolution: "@babel/preset-react@npm:7.27.1"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.25.9"
- "@babel/helper-validator-option": "npm:^7.25.9"
- "@babel/plugin-transform-react-display-name": "npm:^7.25.9"
- "@babel/plugin-transform-react-jsx": "npm:^7.25.9"
- "@babel/plugin-transform-react-jsx-development": "npm:^7.25.9"
- "@babel/plugin-transform-react-pure-annotations": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
+ "@babel/helper-validator-option": "npm:^7.27.1"
+ "@babel/plugin-transform-react-display-name": "npm:^7.27.1"
+ "@babel/plugin-transform-react-jsx": "npm:^7.27.1"
+ "@babel/plugin-transform-react-jsx-development": "npm:^7.27.1"
+ "@babel/plugin-transform-react-pure-annotations": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/88cb78c402b79f32389ee06451da51698d5b1da7641d9a47482883f537fe5441a138bd4c077d8533fd6d557406b08911c47b94402cea843db598e020bdd9a373
+ checksum: 10/26dd63164ada235ddca53c074944f52cea9a6d8064d02871cad672fe92cc2e136dd1809fb61fa0313a3c19d8e32a00a667d0cbd79465ad8460e2c1b88e5509ae
languageName: node
linkType: hard
@@ -1455,55 +1477,46 @@ __metadata:
languageName: node
linkType: hard
-"@babel/runtime@npm:7.27.0":
- version: 7.27.0
- resolution: "@babel/runtime@npm:7.27.0"
- dependencies:
- regenerator-runtime: "npm:^0.14.0"
- checksum: 10/e6966e03b695feb4c0ac0856a4355231c2580bf9ebd0298f47739f85c0ea658679dd84409daf26378d42c86c1cbe7e33feab709b14e784254b6c441d91606465
- languageName: node
- linkType: hard
-
-"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.24.5, @babel/runtime@npm:^7.24.7, @babel/runtime@npm:^7.25.0, @babel/runtime@npm:^7.25.6, @babel/runtime@npm:^7.25.7, @babel/runtime@npm:^7.26.7, @babel/runtime@npm:^7.27.0, @babel/runtime@npm:^7.27.6, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7":
+"@babel/runtime@npm:7.27.6, @babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.24.5, @babel/runtime@npm:^7.24.7, @babel/runtime@npm:^7.25.0, @babel/runtime@npm:^7.25.6, @babel/runtime@npm:^7.25.7, @babel/runtime@npm:^7.26.7, @babel/runtime@npm:^7.27.0, @babel/runtime@npm:^7.27.6, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.7":
version: 7.27.6
resolution: "@babel/runtime@npm:7.27.6"
checksum: 10/cc957a12ba3781241b83d528eb69ddeb86ca5ac43179a825e83aa81263a6b3eb88c57bed8a937cdeacfc3192e07ec24c73acdfea4507d0c0428c8e23d6322bfe
languageName: node
linkType: hard
-"@babel/template@npm:^7.22.5, @babel/template@npm:^7.24.7, @babel/template@npm:^7.25.9, @babel/template@npm:^7.26.9, @babel/template@npm:^7.27.0, @babel/template@npm:^7.3.3":
- version: 7.27.0
- resolution: "@babel/template@npm:7.27.0"
+"@babel/template@npm:^7.22.5, @babel/template@npm:^7.24.7, @babel/template@npm:^7.27.1, @babel/template@npm:^7.27.2, @babel/template@npm:^7.3.3":
+ version: 7.27.2
+ resolution: "@babel/template@npm:7.27.2"
dependencies:
- "@babel/code-frame": "npm:^7.26.2"
- "@babel/parser": "npm:^7.27.0"
- "@babel/types": "npm:^7.27.0"
- checksum: 10/7159ca1daea287ad34676d45a7146675444d42c7664aca3e617abc9b1d9548c8f377f35a36bb34cf956e1d3610dcb7acfcfe890aebf81880d35f91a7bd273ee5
+ "@babel/code-frame": "npm:^7.27.1"
+ "@babel/parser": "npm:^7.27.2"
+ "@babel/types": "npm:^7.27.1"
+ checksum: 10/fed15a84beb0b9340e5f81566600dbee5eccd92e4b9cc42a944359b1aa1082373391d9d5fc3656981dff27233ec935d0bc96453cf507f60a4b079463999244d8
languageName: node
linkType: hard
-"@babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.22.8, @babel/traverse@npm:^7.25.9, @babel/traverse@npm:^7.26.10, @babel/traverse@npm:^7.26.8":
- version: 7.27.0
- resolution: "@babel/traverse@npm:7.27.0"
+"@babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.22.8, @babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.27.3, @babel/traverse@npm:^7.28.0":
+ version: 7.28.0
+ resolution: "@babel/traverse@npm:7.28.0"
dependencies:
- "@babel/code-frame": "npm:^7.26.2"
- "@babel/generator": "npm:^7.27.0"
- "@babel/parser": "npm:^7.27.0"
- "@babel/template": "npm:^7.27.0"
- "@babel/types": "npm:^7.27.0"
+ "@babel/code-frame": "npm:^7.27.1"
+ "@babel/generator": "npm:^7.28.0"
+ "@babel/helper-globals": "npm:^7.28.0"
+ "@babel/parser": "npm:^7.28.0"
+ "@babel/template": "npm:^7.27.2"
+ "@babel/types": "npm:^7.28.0"
debug: "npm:^4.3.1"
- globals: "npm:^11.1.0"
- checksum: 10/b0675bc16bd87187e8b090557b0650135de56a621692ad8614b20f32621350ae0fc2e1129b73b780d64a9ed4beab46849a17f90d5267b6ae6ce09ec8412a12c7
+ checksum: 10/c1c24b12b6cb46241ec5d11ddbd2989d6955c282715cbd8ee91a09fe156b3bdb0b88353ac33329c2992113e3dfb5198f616c834f8805bb3fa85da1f864bec5f3
languageName: node
linkType: hard
-"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.9, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.5, @babel/types@npm:^7.24.7, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.10, @babel/types@npm:^7.27.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4":
- version: 7.27.0
- resolution: "@babel/types@npm:7.27.0"
+"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.9, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.5, @babel/types@npm:^7.24.7, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.27.6, @babel/types@npm:^7.28.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4":
+ version: 7.28.1
+ resolution: "@babel/types@npm:7.28.1"
dependencies:
- "@babel/helper-string-parser": "npm:^7.25.9"
- "@babel/helper-validator-identifier": "npm:^7.25.9"
- checksum: 10/2c322bce107c8a534dc4a23be60d570e6a4cc7ca2e44d4f0eee08c0b626104eb7e60ab8de03463bc5da1773a2f69f1e6edec1648d648d65461d6520a7f3b0770
+ "@babel/helper-string-parser": "npm:^7.27.1"
+ "@babel/helper-validator-identifier": "npm:^7.27.1"
+ checksum: 10/b35b0c030326e45efd4ebd87f30a7e5463f0c78617661ff12e8deb3fe983c53c48696374434ffd3664681cbc5b1495ebc69043753b232193e8dc02d1ae7d0ff5
languageName: node
linkType: hard
@@ -3231,9 +3244,9 @@ __metadata:
version: 0.0.0-use.local
resolution: "@grafana/flamegraph@workspace:packages/grafana-flamegraph"
dependencies:
- "@babel/core": "npm:7.26.10"
- "@babel/preset-env": "npm:7.26.9"
- "@babel/preset-react": "npm:7.26.3"
+ "@babel/core": "npm:7.28.0"
+ "@babel/preset-env": "npm:7.28.0"
+ "@babel/preset-react": "npm:7.27.1"
"@emotion/css": "npm:11.13.5"
"@grafana/data": "npm:12.1.0-pre"
"@grafana/tsconfig": "npm:^2.0.0"
@@ -3703,7 +3716,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "@grafana/ui@workspace:packages/grafana-ui"
dependencies:
- "@babel/core": "npm:7.26.10"
+ "@babel/core": "npm:7.28.0"
"@emotion/css": "npm:11.13.5"
"@emotion/react": "npm:11.14.0"
"@emotion/serialize": "npm:1.3.3"
@@ -4687,14 +4700,13 @@ __metadata:
languageName: node
linkType: hard
-"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.5":
- version: 0.3.5
- resolution: "@jridgewell/gen-mapping@npm:0.3.5"
+"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.12":
+ version: 0.3.12
+ resolution: "@jridgewell/gen-mapping@npm:0.3.12"
dependencies:
- "@jridgewell/set-array": "npm:^1.2.1"
- "@jridgewell/sourcemap-codec": "npm:^1.4.10"
+ "@jridgewell/sourcemap-codec": "npm:^1.5.0"
"@jridgewell/trace-mapping": "npm:^0.3.24"
- checksum: 10/81587b3c4dd8e6c60252122937cea0c637486311f4ed208b52b62aae2e7a87598f63ec330e6cd0984af494bfb16d3f0d60d3b21d7e5b4aedd2602ff3fe9d32e2
+ checksum: 10/151667531566417a940d4dd0a319724979f7a90b9deb9f1617344e1183887d78c835bc1a9209c1ee10fc8a669cdd7ac8120a43a2b6bc8d0d5dd18a173059ff4b
languageName: node
linkType: hard
@@ -4705,7 +4717,7 @@ __metadata:
languageName: node
linkType: hard
-"@jridgewell/set-array@npm:^1.0.0, @jridgewell/set-array@npm:^1.2.1":
+"@jridgewell/set-array@npm:^1.0.0":
version: 1.2.1
resolution: "@jridgewell/set-array@npm:1.2.1"
checksum: 10/832e513a85a588f8ed4f27d1279420d8547743cc37fcad5a5a76fc74bb895b013dfe614d0eed9cb860048e6546b798f8f2652020b4b2ba0561b05caa8c654b10
@@ -4739,13 +4751,13 @@ __metadata:
languageName: node
linkType: hard
-"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.9":
- version: 0.3.25
- resolution: "@jridgewell/trace-mapping@npm:0.3.25"
+"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.28, @jridgewell/trace-mapping@npm:^0.3.9":
+ version: 0.3.29
+ resolution: "@jridgewell/trace-mapping@npm:0.3.29"
dependencies:
"@jridgewell/resolve-uri": "npm:^3.1.0"
"@jridgewell/sourcemap-codec": "npm:^1.4.14"
- checksum: 10/dced32160a44b49d531b80a4a2159dceab6b3ddf0c8e95a0deae4b0e894b172defa63d5ac52a19c2068e1fe7d31ea4ba931fbeec103233ecb4208953967120fc
+ checksum: 10/64e1ce0dc3a9e56b0118eaf1b2f50746fd59a36de37516cc6855b5370d5f367aa8229e1237536d738262e252c70ee229619cb04e3f3b822146ee3eb1b7ab297f
languageName: node
linkType: hard
@@ -11966,39 +11978,39 @@ __metadata:
languageName: node
linkType: hard
-"babel-plugin-polyfill-corejs2@npm:^0.4.10":
- version: 0.4.10
- resolution: "babel-plugin-polyfill-corejs2@npm:0.4.10"
+"babel-plugin-polyfill-corejs2@npm:^0.4.14":
+ version: 0.4.14
+ resolution: "babel-plugin-polyfill-corejs2@npm:0.4.14"
dependencies:
- "@babel/compat-data": "npm:^7.22.6"
- "@babel/helper-define-polyfill-provider": "npm:^0.6.1"
+ "@babel/compat-data": "npm:^7.27.7"
+ "@babel/helper-define-polyfill-provider": "npm:^0.6.5"
semver: "npm:^6.3.1"
peerDependencies:
"@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0
- checksum: 10/9fb5e59a3235eba66fb05060b2a3ecd6923084f100df7526ab74b6272347d7adcf99e17366b82df36e592cde4e82fdb7ae24346a990eced76c7d504cac243400
+ checksum: 10/8ec00a1b821ccbfcc432630da66e98bc417f5301f4ce665269d50d245a18ad3ce8a8af2a007f28e3defcd555bb8ce65f16b0d4b6d131bd788e2b97d8b8953332
languageName: node
linkType: hard
-"babel-plugin-polyfill-corejs3@npm:^0.11.0":
- version: 0.11.1
- resolution: "babel-plugin-polyfill-corejs3@npm:0.11.1"
+"babel-plugin-polyfill-corejs3@npm:^0.13.0":
+ version: 0.13.0
+ resolution: "babel-plugin-polyfill-corejs3@npm:0.13.0"
dependencies:
- "@babel/helper-define-polyfill-provider": "npm:^0.6.3"
- core-js-compat: "npm:^3.40.0"
+ "@babel/helper-define-polyfill-provider": "npm:^0.6.5"
+ core-js-compat: "npm:^3.43.0"
peerDependencies:
"@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0
- checksum: 10/19a2978ee3462cc3b98e7d36e6537bf9fb1fb61f42fd96cb41e9313f2ac6f2c62380d94064366431eff537f342184720fe9bce73eb65fd57c5311d15e8648f62
+ checksum: 10/aa36f9a09521404dd0569a4cbd5f88aa4b9abff59508749abde5d09d66c746012fb94ed1e6e2c8be3710939a2a4c6293ee3be889125d7611c93e5897d9e5babd
languageName: node
linkType: hard
-"babel-plugin-polyfill-regenerator@npm:^0.6.1":
- version: 0.6.1
- resolution: "babel-plugin-polyfill-regenerator@npm:0.6.1"
+"babel-plugin-polyfill-regenerator@npm:^0.6.5":
+ version: 0.6.5
+ resolution: "babel-plugin-polyfill-regenerator@npm:0.6.5"
dependencies:
- "@babel/helper-define-polyfill-provider": "npm:^0.6.1"
+ "@babel/helper-define-polyfill-provider": "npm:^0.6.5"
peerDependencies:
"@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0
- checksum: 10/9df4a8e9939dd419fed3d9ea26594b4479f2968f37c225e1b2aa463001d7721f5537740e6622909d2a570b61cec23256924a1701404fc9d6fd4474d3e845cedb
+ checksum: 10/ed1932fa9a31e0752fd10ebf48ab9513a654987cab1182890839523cb898559d24ae0578fdc475d9f995390420e64eeaa4b0427045b56949dace3c725bc66dbb
languageName: node
linkType: hard
@@ -12369,7 +12381,7 @@ __metadata:
languageName: node
linkType: hard
-"browserslist@npm:^4.0.0, browserslist@npm:^4.21.10, browserslist@npm:^4.21.4, browserslist@npm:^4.24.0, browserslist@npm:^4.24.3, browserslist@npm:^4.24.4, browserslist@npm:^4.24.5":
+"browserslist@npm:^4.0.0, browserslist@npm:^4.21.10, browserslist@npm:^4.21.4, browserslist@npm:^4.24.0, browserslist@npm:^4.24.4, browserslist@npm:^4.24.5, browserslist@npm:^4.25.1":
version: 4.25.1
resolution: "browserslist@npm:4.25.1"
dependencies:
@@ -13724,12 +13736,12 @@ __metadata:
languageName: node
linkType: hard
-"core-js-compat@npm:^3.38.1, core-js-compat@npm:^3.40.0":
- version: 3.40.0
- resolution: "core-js-compat@npm:3.40.0"
+"core-js-compat@npm:^3.38.1, core-js-compat@npm:^3.43.0":
+ version: 3.44.0
+ resolution: "core-js-compat@npm:3.44.0"
dependencies:
- browserslist: "npm:^4.24.3"
- checksum: 10/3dd3d717b3d4ae0d9c2930d39c0f2a21ca6f195fcdd5711bda833557996c4d9f90277eab576423478e95689257e2de8d1a2623d6618084416bd224d10d5df9a4
+ browserslist: "npm:^4.25.1"
+ checksum: 10/41885423aaea9cd543ca821ace9fabfbaa5f5c202d60244a0baf150326db8f52bee6a01a3fd1b8f7e3026e63b311d93c92bc6ad219fe4a2b2f95df01fff0ea1c
languageName: node
linkType: hard
@@ -18059,13 +18071,6 @@ __metadata:
languageName: node
linkType: hard
-"globals@npm:^11.1.0":
- version: 11.12.0
- resolution: "globals@npm:11.12.0"
- checksum: 10/9f054fa38ff8de8fa356502eb9d2dae0c928217b8b5c8de1f09f5c9b6c8a96d8b9bd3afc49acbcd384a98a81fea713c859e1b09e214c60509517bb8fc2bc13c2
- languageName: node
- linkType: hard
-
"globals@npm:^14.0.0":
version: 14.0.0
resolution: "globals@npm:14.0.0"
@@ -18186,9 +18191,9 @@ __metadata:
resolution: "grafana@workspace:."
dependencies:
"@arethetypeswrong/cli": "npm:^0.18.2"
- "@babel/core": "npm:7.26.10"
- "@babel/preset-env": "npm:7.26.9"
- "@babel/runtime": "npm:7.27.0"
+ "@babel/core": "npm:7.28.0"
+ "@babel/preset-env": "npm:7.28.0"
+ "@babel/runtime": "npm:7.27.6"
"@betterer/betterer": "npm:5.4.0"
"@betterer/cli": "npm:5.4.0"
"@bsull/augurs": "npm:^0.10.0"
@@ -19845,12 +19850,12 @@ __metadata:
languageName: node
linkType: hard
-"is-core-module@npm:^2.13.0, is-core-module@npm:^2.15.1, is-core-module@npm:^2.5.0":
- version: 2.15.1
- resolution: "is-core-module@npm:2.15.1"
+"is-core-module@npm:^2.13.0, is-core-module@npm:^2.15.1, is-core-module@npm:^2.16.0, is-core-module@npm:^2.5.0":
+ version: 2.16.1
+ resolution: "is-core-module@npm:2.16.1"
dependencies:
hasown: "npm:^2.0.2"
- checksum: 10/77316d5891d5743854bcef2cd2f24c5458fb69fbc9705c12ca17d54a2017a67d0693bbf1ba8c77af376c0eef6bf6d1b27a4ab08e4db4e69914c3789bdf2ceec5
+ checksum: 10/452b2c2fb7f889cbbf7e54609ef92cf6c24637c568acc7e63d166812a0fb365ae8a504c333a29add8bdb1686704068caa7f4e4b639b650dde4f00a038b8941fb
languageName: node
linkType: hard
@@ -27735,7 +27740,7 @@ __metadata:
languageName: node
linkType: hard
-"regenerator-runtime@npm:0.14.1, regenerator-runtime@npm:^0.14.0":
+"regenerator-runtime@npm:0.14.1":
version: 0.14.1
resolution: "regenerator-runtime@npm:0.14.1"
checksum: 10/5db3161abb311eef8c45bcf6565f4f378f785900ed3945acf740a9888c792f75b98ecb77f0775f3bf95502ff423529d23e94f41d80c8256e8fa05ed4b07cf471
@@ -27749,15 +27754,6 @@ __metadata:
languageName: node
linkType: hard
-"regenerator-transform@npm:^0.15.2":
- version: 0.15.2
- resolution: "regenerator-transform@npm:0.15.2"
- dependencies:
- "@babel/runtime": "npm:^7.8.4"
- checksum: 10/c4fdcb46d11bbe32605b4b9ed76b21b8d3f241a45153e9dc6f5542fed4c7744fed459f42701f650d5d5956786bf7de57547329d1c05a9df2ed9e367b9d903302
- languageName: node
- linkType: hard
-
"regexp-tree@npm:^0.1.27":
version: 0.1.27
resolution: "regexp-tree@npm:0.1.27"
@@ -27781,17 +27777,17 @@ __metadata:
languageName: node
linkType: hard
-"regexpu-core@npm:^6.1.1":
- version: 6.1.1
- resolution: "regexpu-core@npm:6.1.1"
+"regexpu-core@npm:^6.2.0":
+ version: 6.2.0
+ resolution: "regexpu-core@npm:6.2.0"
dependencies:
regenerate: "npm:^1.4.2"
regenerate-unicode-properties: "npm:^10.2.0"
regjsgen: "npm:^0.8.0"
- regjsparser: "npm:^0.11.0"
+ regjsparser: "npm:^0.12.0"
unicode-match-property-ecmascript: "npm:^2.0.0"
unicode-match-property-value-ecmascript: "npm:^2.1.0"
- checksum: 10/6a7ffb42781cacedd7df3c47c72e2d725401a699855be94a37ece5e29d3f25ab3abdd81d73f2d9d32ebc4d41bd25e3c3cc21e5284203faf19e60943adc55252d
+ checksum: 10/4d054ffcd98ca4f6ca7bf0df6598ed5e4a124264602553308add41d4fa714a0c5bcfb5bc868ac91f7060a9c09889cc21d3180a3a14c5f9c5838442806129ced3
languageName: node
linkType: hard
@@ -27813,14 +27809,14 @@ __metadata:
languageName: node
linkType: hard
-"regjsparser@npm:^0.11.0":
- version: 0.11.0
- resolution: "regjsparser@npm:0.11.0"
+"regjsparser@npm:^0.12.0":
+ version: 0.12.0
+ resolution: "regjsparser@npm:0.12.0"
dependencies:
jsesc: "npm:~3.0.2"
bin:
regjsparser: bin/parser
- checksum: 10/d8963f9bbb4da0795faaea11130abdb15c17565d515f15c990a2433912e5ed80077cbd7ad99530bb1fc8471c82c321a0699c5f48a2ce00715a7151b027fced55
+ checksum: 10/c2d6506b3308679de5223a8916984198e0493649a67b477c66bdb875357e3785abbf3bedf7c5c2cf8967d3b3a7bdf08b7cbd39e65a70f9e1ffad584aecf5f06a
languageName: node
linkType: hard
@@ -28025,16 +28021,16 @@ __metadata:
languageName: node
linkType: hard
-"resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.4, resolve@npm:^1.22.8":
- version: 1.22.8
- resolution: "resolve@npm:1.22.8"
+"resolve@npm:^1.10.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.10, resolve@npm:^1.22.4, resolve@npm:^1.22.8":
+ version: 1.22.10
+ resolution: "resolve@npm:1.22.10"
dependencies:
- is-core-module: "npm:^2.13.0"
+ is-core-module: "npm:^2.16.0"
path-parse: "npm:^1.0.7"
supports-preserve-symlinks-flag: "npm:^1.0.0"
bin:
resolve: bin/resolve
- checksum: 10/c473506ee01eb45cbcfefb68652ae5759e092e6b0fb64547feadf9736a6394f258fbc6f88e00c5ca36d5477fbb65388b272432a3600fa223062e54333c156753
+ checksum: 10/0a398b44da5c05e6e421d70108822c327675febb880eebe905587628de401854c61d5df02866ff34fc4cb1173a51c9f0e84a94702738df3611a62e2acdc68181
languageName: node
linkType: hard
@@ -28051,16 +28047,16 @@ __metadata:
languageName: node
linkType: hard
-"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin":
- version: 1.22.8
- resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d"
+"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.10#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin":
+ version: 1.22.10
+ resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d"
dependencies:
- is-core-module: "npm:^2.13.0"
+ is-core-module: "npm:^2.16.0"
path-parse: "npm:^1.0.7"
supports-preserve-symlinks-flag: "npm:^1.0.0"
bin:
resolve: bin/resolve
- checksum: 10/f345cd37f56a2c0275e3fe062517c650bb673815d885e7507566df589375d165bbbf4bdb6aa95600a9bc55f4744b81f452b5a63f95b9f10a72787dba3c90890a
+ checksum: 10/d4d878bfe3702d215ea23e75e0e9caf99468e3db76f5ca100d27ebdc527366fee3877e54bce7d47cc72ca8952fc2782a070d238bfa79a550eeb0082384c3b81a
languageName: node
linkType: hard
From 4b440cf45da3fa6b12e19c4dadcd680ea35c284b Mon Sep 17 00:00:00 2001
From: maicon
Date: Fri, 18 Jul 2025 11:03:42 -0300
Subject: [PATCH 33/46] Remove timeout info from logs when shadow request to
search succeeds (#108324)
Signed-off-by: Maicon Costa
---
pkg/storage/unified/resource/search_client.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pkg/storage/unified/resource/search_client.go b/pkg/storage/unified/resource/search_client.go
index 58d743da306..116b3aa5b92 100644
--- a/pkg/storage/unified/resource/search_client.go
+++ b/pkg/storage/unified/resource/search_client.go
@@ -76,7 +76,7 @@ func (s *searchWrapper) GetStats(ctx context.Context, in *resourcepb.ResourceSta
if bgErr != nil {
s.logger.Error("Background GetStats call to unified failed", "error", bgErr, "timeout", backgroundRequestTimeout)
} else {
- s.logger.Debug("Background GetStats call to unified succeeded", "timeout", backgroundRequestTimeout)
+ s.logger.Debug("Background GetStats call to unified succeeded")
}
}()
}
@@ -109,7 +109,7 @@ func (s *searchWrapper) Search(ctx context.Context, in *resourcepb.ResourceSearc
if bgErr != nil {
s.logger.Error("Background Search call to unified failed", "error", bgErr, "timeout", backgroundRequestTimeout)
} else {
- s.logger.Debug("Background Search call to unified succeeded", "timeout", backgroundRequestTimeout)
+ s.logger.Debug("Background Search call to unified succeeded")
}
}()
}
From a49b35a7ec7d0afed49f9c2805f83d5bf5c7da6c Mon Sep 17 00:00:00 2001
From: Johnny Kartheiser <140559259+JohnnyK-Grafana@users.noreply.github.com>
Date: Fri, 18 Jul 2025 09:10:16 -0500
Subject: [PATCH 34/46] Update _index.md (#108192)
---
docs/sources/alerting/best-practices/_index.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/sources/alerting/best-practices/_index.md b/docs/sources/alerting/best-practices/_index.md
index 892bfdfb186..18bcf13121a 100644
--- a/docs/sources/alerting/best-practices/_index.md
+++ b/docs/sources/alerting/best-practices/_index.md
@@ -8,7 +8,7 @@ labels:
- cloud
- enterprise
- oss
-menuTitle: Best Practices
+menuTitle: Best practices
title: Grafana Alerting best practices
weight: 170
---
From f009c2dcddc238f5929f892d887ec60f7699357c Mon Sep 17 00:00:00 2001
From: Kevin Yu
Date: Fri, 18 Jul 2025 07:29:39 -0700
Subject: [PATCH 35/46] CloudWatch: Handle log alerts queries where the time
field is not the first field (#108277)
CloudWatch: handle log alerts queries where the time field is not the first field
---
pkg/tsdb/cloudwatch/log_query.go | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/pkg/tsdb/cloudwatch/log_query.go b/pkg/tsdb/cloudwatch/log_query.go
index 1867cfa2fca..43237bece10 100644
--- a/pkg/tsdb/cloudwatch/log_query.go
+++ b/pkg/tsdb/cloudwatch/log_query.go
@@ -202,8 +202,12 @@ func groupResults(results *data.Frame, groupingFieldNames []string, fromSyncQuer
groupLabels := generateLabels(groupingFields, i)
// set the group key as the display name for sync queries
- for j := 1; j < len(newFrame.Fields); j++ {
+ for j := 0; j < len(newFrame.Fields); j++ {
valueField := newFrame.Fields[j]
+ // the time field might not be the first field so we check it here and skip the field if it is
+ if valueField.Type().Time() {
+ continue
+ }
if valueField.Config == nil {
valueField.Config = &data.FieldConfig{}
}
From aa0f8caa350eed959e79f62bc0dbfa278908a13b Mon Sep 17 00:00:00 2001
From: Eric Leijonmarck
Date: Fri, 18 Jul 2025 16:40:34 +0200
Subject: [PATCH 36/46] `Authorizer`: rename and enforce only once for
`NewGrafanaAuthorizer` (#108294)
* renaming of GrafanaAuthorizer to make it less confusing
* enforce only once by runtime
* comment only
---
pkg/services/apiserver/auth/authorizer/authorizer.go | 5 +++--
pkg/services/apiserver/service.go | 2 +-
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/pkg/services/apiserver/auth/authorizer/authorizer.go b/pkg/services/apiserver/auth/authorizer/authorizer.go
index b41849df347..54ea8c081d7 100644
--- a/pkg/services/apiserver/auth/authorizer/authorizer.go
+++ b/pkg/services/apiserver/auth/authorizer/authorizer.go
@@ -18,7 +18,8 @@ type GrafanaAuthorizer struct {
auth authorizer.Authorizer
}
-// NewGrafanaAuthorizer returns an authorizer configured for a grafana instance.
+// NewGrafanaBuiltInSTAuthorizer returns an authorizer configured for a grafana instance.
+// should not be used anywhere except for ST builtin Grafana
// This authorizer is a chain of smaller authorizers that together form the decision if
// access should be granted.
// 1. We deny all impersonate request.
@@ -28,7 +29,7 @@ type GrafanaAuthorizer struct {
// 4. We check authorizer that is configured speficially for an api.
// 5. As a last fallback we check Role, this will only happen if an api have not configured
// an authorizer or return authorizer.DecisionNoOpinion
-func NewGrafanaAuthorizer(cfg *setting.Cfg) *GrafanaAuthorizer {
+func NewGrafanaBuiltInSTAuthorizer(cfg *setting.Cfg) *GrafanaAuthorizer {
authorizers := []authorizer.Authorizer{
newImpersonationAuthorizer(),
authorizerfactory.NewPrivilegedGroups(k8suser.SystemPrivilegedGroup),
diff --git a/pkg/services/apiserver/service.go b/pkg/services/apiserver/service.go
index 52c8ad568b7..5feffe4697b 100644
--- a/pkg/services/apiserver/service.go
+++ b/pkg/services/apiserver/service.go
@@ -138,7 +138,7 @@ func ProvideService(
rr: rr,
stopCh: make(chan struct{}),
builders: []builder.APIGroupBuilder{},
- authorizer: authorizer.NewGrafanaAuthorizer(cfg),
+ authorizer: authorizer.NewGrafanaBuiltInSTAuthorizer(cfg),
tracing: tracing,
db: db, // For Unified storage
metrics: reg,
From 4669b586e98e1c3f5f47e6033ecd5d0d7659ea03 Mon Sep 17 00:00:00 2001
From: Misi
Date: Fri, 18 Jul 2025 17:06:26 +0200
Subject: [PATCH 37/46] Security: Fixes for CVE-2025-6197 and CVE-2025-6023
(#108330)
apply security patch: main/439-202506251632.patch
(cherry picked from commit 7f3977c54548dc82d9b2c44c125b30b3dbc2069a)
Co-authored-by: github-actions[bot]
---
pkg/api/login.go | 14 +++++
pkg/api/user_token_test.go | 91 +++++++++++++++++++++++++++++
pkg/middleware/org_redirect.go | 15 +++++
pkg/middleware/org_redirect_test.go | 17 ++++++
pkg/web/webtest/webtest.go | 1 +
5 files changed, 138 insertions(+)
diff --git a/pkg/api/login.go b/pkg/api/login.go
index b6d5a950706..8539b3a08bf 100644
--- a/pkg/api/login.go
+++ b/pkg/api/login.go
@@ -7,6 +7,8 @@ import (
"fmt"
"net/http"
"net/url"
+ "path"
+ "regexp"
"strings"
"github.com/grafana/grafana/pkg/api/response"
@@ -39,6 +41,9 @@ var getViewIndex = func() string {
return viewIndex
}
+// Only allow redirects that start with an alphanumerical character, a dash or an underscore.
+var redirectRe = regexp.MustCompile(`^/[a-zA-Z0-9-_].*`)
+
var (
errAbsoluteRedirectTo = errors.New("absolute URLs are not allowed for redirect_to cookie value")
errInvalidRedirectTo = errors.New("invalid redirect_to cookie value")
@@ -68,6 +73,15 @@ func (hs *HTTPServer) ValidateRedirectTo(redirectTo string) error {
return errForbiddenRedirectTo
}
+ cleanPath := path.Clean(to.Path)
+ // "." is what path.Clean returns for empty paths
+ if cleanPath == "." {
+ return errForbiddenRedirectTo
+ }
+ if to.Path != "/" && !redirectRe.MatchString(cleanPath) {
+ return errForbiddenRedirectTo
+ }
+
// when using a subUrl, the redirect_to should start with the subUrl (which contains the leading slash), otherwise the redirect
// will send the user to the wrong location
if hs.Cfg.AppSubURL != "" && !strings.HasPrefix(to.Path, hs.Cfg.AppSubURL+"/") {
diff --git a/pkg/api/user_token_test.go b/pkg/api/user_token_test.go
index 62fa0c2b0db..204ab6af6e6 100644
--- a/pkg/api/user_token_test.go
+++ b/pkg/api/user_token_test.go
@@ -4,6 +4,7 @@ import (
"context"
"fmt"
"net/http"
+ "net/url"
"testing"
"time"
@@ -20,6 +21,7 @@ import (
"github.com/grafana/grafana/pkg/services/user"
"github.com/grafana/grafana/pkg/services/user/usertest"
"github.com/grafana/grafana/pkg/setting"
+ "github.com/grafana/grafana/pkg/web/webtest"
)
func TestUserTokenAPIEndpoint(t *testing.T) {
@@ -150,6 +152,95 @@ func TestUserTokenAPIEndpoint(t *testing.T) {
})
}
+func TestHTTPServer_RotateUserAuthTokenRedirect(t *testing.T) {
+ redirectTestCases := []struct {
+ name string
+ redirectUrl string
+ expectedUrl string
+ }{
+ // Valid redirects should be preserved
+ {"valid root path", "/", "/"},
+ {"valid simple path", "/hello", "/hello"},
+ {"valid single char path", "/a", "/a"},
+ {"valid nested path", "/asd/hello", "/asd/hello"},
+
+ // Invalid redirects should be converted to root
+ {"backslash domain", `/\grafana.com`, "/"},
+ {"traversal backslash domain", `/a/../\grafana.com`, "/"},
+ {"double slash", "//grafana", "/"},
+ {"missing initial slash", "missingInitialSlash", "/"},
+ {"parent directory", "/../", "/"},
+ }
+
+ sessionTestCases := []struct {
+ name string
+ useSessionStorageRedirect bool
+ }{
+ {"when useSessionStorageRedirect is enabled", true},
+ {"when useSessionStorageRedirect is disabled", false},
+ }
+
+ for _, sessionCase := range sessionTestCases {
+ t.Run(sessionCase.name, func(t *testing.T) {
+ for _, redirectCase := range redirectTestCases {
+ t.Run(redirectCase.name, func(t *testing.T) {
+ server := SetupAPITestServer(t, func(hs *HTTPServer) {
+ cfg := setting.NewCfg()
+ cfg.LoginCookieName = "grafana_session"
+ cfg.LoginMaxLifetime = 10 * time.Hour
+ hs.Cfg = cfg
+ hs.log = log.New()
+ hs.AuthTokenService = &authtest.FakeUserAuthTokenService{
+ RotateTokenProvider: func(ctx context.Context, cmd auth.RotateCommand) (*auth.UserToken, error) {
+ return &auth.UserToken{UnhashedToken: "new"}, nil
+ },
+ }
+ })
+
+ redirectToQuery := url.QueryEscape(redirectCase.redirectUrl)
+ urlString := "/user/auth-tokens/rotate"
+
+ if sessionCase.useSessionStorageRedirect {
+ urlString = urlString + "?redirectTo=" + redirectToQuery
+ }
+
+ req := server.NewGetRequest(urlString)
+ req.AddCookie(&http.Cookie{Name: "grafana_session", Value: "123", Path: "/"})
+
+ if sessionCase.useSessionStorageRedirect {
+ req = webtest.RequestWithWebContext(req, &contextmodel.ReqContext{UseSessionStorageRedirect: true})
+ } else {
+ req.AddCookie(&http.Cookie{Name: "redirect_to", Value: redirectToQuery, Path: "/"})
+ }
+
+ var redirectStatusCode int
+ var redirectLocation string
+
+ server.HttpClient.CheckRedirect = func(req *http.Request, via []*http.Request) error {
+ if len(via) > 1 {
+ // Stop after first redirect
+ return http.ErrUseLastResponse
+ }
+
+ if req.Response == nil {
+ return nil
+ }
+ redirectStatusCode = req.Response.StatusCode
+ redirectLocation = req.Response.Header.Get("Location")
+ return nil
+ }
+ res, err := server.Send(req)
+ require.NoError(t, err)
+ assert.Equal(t, 302, redirectStatusCode)
+ assert.Equal(t, redirectCase.expectedUrl, redirectLocation)
+
+ require.NoError(t, res.Body.Close())
+ })
+ }
+ })
+ }
+}
+
func TestHTTPServer_RotateUserAuthToken(t *testing.T) {
type testCase struct {
desc string
diff --git a/pkg/middleware/org_redirect.go b/pkg/middleware/org_redirect.go
index b794f9acfdf..8ce90ac643d 100644
--- a/pkg/middleware/org_redirect.go
+++ b/pkg/middleware/org_redirect.go
@@ -3,6 +3,8 @@ package middleware
import (
"fmt"
"net/http"
+ "path"
+ "regexp"
"strconv"
"github.com/grafana/grafana/pkg/services/contexthandler"
@@ -11,6 +13,9 @@ import (
"github.com/grafana/grafana/pkg/web"
)
+// Only allow redirects that start with an alphanumerical character, a dash or an underscore.
+var redirectRe = regexp.MustCompile(`^/?[a-zA-Z0-9-_].*`)
+
// OrgRedirect changes org and redirects users if the
// querystring `orgId` doesn't match the active org.
func OrgRedirect(cfg *setting.Cfg, userSvc user.Service) web.Handler {
@@ -31,6 +36,11 @@ func OrgRedirect(cfg *setting.Cfg, userSvc user.Service) web.Handler {
return
}
+ if !validRedirectPath(c.Req.URL.Path) {
+ // Do not switch orgs or perform the redirect because the new path is not valid
+ return
+ }
+
if err := userSvc.Update(ctx.Req.Context(), &user.UpdateUserCommand{UserID: ctx.UserID, OrgID: &orgId}); err != nil {
if ctx.IsApiRequest() {
ctx.JsonApiErr(404, "Not found", nil)
@@ -54,3 +64,8 @@ func OrgRedirect(cfg *setting.Cfg, userSvc user.Service) web.Handler {
c.Redirect(newURL, 302)
}
}
+
+func validRedirectPath(p string) bool {
+ cleanPath := path.Clean(p)
+ return cleanPath == "." || cleanPath == "/" || redirectRe.MatchString(cleanPath)
+}
diff --git a/pkg/middleware/org_redirect_test.go b/pkg/middleware/org_redirect_test.go
index 4087eeb91c6..06800c5ac69 100644
--- a/pkg/middleware/org_redirect_test.go
+++ b/pkg/middleware/org_redirect_test.go
@@ -2,6 +2,7 @@ package middleware
import (
"fmt"
+ "net/url"
"testing"
"github.com/stretchr/testify/require"
@@ -23,6 +24,12 @@ func TestOrgRedirectMiddleware(t *testing.T) {
expStatus: 302,
expLocation: "/?orgId=3",
},
+ {
+ desc: "when setting a correct org for the user with an empty path",
+ input: "?orgId=3",
+ expStatus: 302,
+ expLocation: "/?orgId=3",
+ },
{
desc: "when setting a correct org for the user with '&kiosk'",
input: "/?orgId=3&kiosk",
@@ -64,6 +71,16 @@ func TestOrgRedirectMiddleware(t *testing.T) {
require.Equal(t, 404, sc.resp.Code)
})
+ middlewareScenario(t, "when redirecting to an invalid path", func(t *testing.T, sc *scenarioContext) {
+ sc.withIdentity(&authn.Identity{})
+
+ path := url.QueryEscape(`/\example.com`)
+ sc.m.Get(url.QueryEscape(path), sc.defaultHandler)
+ sc.fakeReq("GET", fmt.Sprintf("%s?orgId=3", path)).exec()
+
+ require.Equal(t, 404, sc.resp.Code)
+ })
+
middlewareScenario(t, "works correctly when grafana is served under a subpath", func(t *testing.T, sc *scenarioContext) {
sc.withIdentity(&authn.Identity{})
diff --git a/pkg/web/webtest/webtest.go b/pkg/web/webtest/webtest.go
index 53de522ac35..af4163e0410 100644
--- a/pkg/web/webtest/webtest.go
+++ b/pkg/web/webtest/webtest.go
@@ -147,6 +147,7 @@ func requestContextMiddleware() web.Middleware {
c.RequestNonce = ctx.RequestNonce
c.PerfmonTimer = ctx.PerfmonTimer
c.LookupTokenErr = ctx.LookupTokenErr
+ c.UseSessionStorageRedirect = ctx.UseSessionStorageRedirect
}
next.ServeHTTP(w, r)
From c12fadd8d2c30fd6f3f6f051d9d90336b372db2c Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 18 Jul 2025 16:27:00 +0100
Subject: [PATCH 38/46] Update dependency @crowdin/crowdin-api-client to
v1.46.0 (#108328)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
yarn.lock | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/yarn.lock b/yarn.lock
index f0c7f799083..ad0ee87a4b4 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1696,11 +1696,11 @@ __metadata:
linkType: hard
"@crowdin/crowdin-api-client@npm:^1.42.0":
- version: 1.42.0
- resolution: "@crowdin/crowdin-api-client@npm:1.42.0"
+ version: 1.46.0
+ resolution: "@crowdin/crowdin-api-client@npm:1.46.0"
dependencies:
axios: "npm:^1"
- checksum: 10/9e816c5d1fe6f93c0f20625f377f0caa1c2d0cc2a5df97440fc3494ab1d3a7a29d6fe40af8fae32ea96f2bc7fa2bcdc1c7af6dc6563d8fdf86624dc7885e98ff
+ checksum: 10/a9b783e7deb78970a79ee3f45f511748694cc9bda4a5f6a645bc041657263cf26f9b0c85b5bb0ea16bff3c66e1969cff40a482405f4f79f0edd4ad15bbd0c945
languageName: node
linkType: hard
From 0148594c30465e402ae95eb5a3ca6ac03f3753a4 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 18 Jul 2025 16:27:23 +0100
Subject: [PATCH 39/46] Update dependency @faker-js/faker to v9.9.0 (#108329)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
yarn.lock | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/yarn.lock b/yarn.lock
index ad0ee87a4b4..57d045a7ac3 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2347,9 +2347,9 @@ __metadata:
linkType: hard
"@faker-js/faker@npm:^9.0.0, @faker-js/faker@npm:^9.8.0":
- version: 9.8.0
- resolution: "@faker-js/faker@npm:9.8.0"
- checksum: 10/d7d7940ba7f2bd0d266d507bb7a33ec5099654da624dc8647d7cfd2e908b75ba06ed7dd0ec3b771a18600a734f420370b3cecd1ee5d4799993b1ee3505f866d8
+ version: 9.9.0
+ resolution: "@faker-js/faker@npm:9.9.0"
+ checksum: 10/b24b1be0fb3090d54abaaa3a814f37d1a7551f1207dcd330a1af2c70f6312a8b95ebb82653577757dd62f4cbbb56caa3c83513053253654dc3e286a05040ecbe
languageName: node
linkType: hard
From a7a17c6929fda2c55b731e37c62066377142ccce Mon Sep 17 00:00:00 2001
From: Luminessa Starlight
Date: Fri, 18 Jul 2025 11:38:48 -0400
Subject: [PATCH 40/46] Chore: remove no longer used webpack-dev-server package
(#108332)
removed no longer used webpack-dev-server package
---
package.json | 1 -
yarn.lock | 785 ++-------------------------------------------------
2 files changed, 17 insertions(+), 769 deletions(-)
diff --git a/package.json b/package.json
index 3b0c7aedb9a..f21cc23e2e9 100644
--- a/package.json
+++ b/package.json
@@ -254,7 +254,6 @@
"webpack": "5.97.1",
"webpack-assets-manifest": "^5.1.0",
"webpack-cli": "6.0.1",
- "webpack-dev-server": "5.2.2",
"webpack-livereload-plugin": "3.0.2",
"webpack-manifest-plugin": "5.0.1",
"webpack-merge": "6.0.1",
diff --git a/yarn.lock b/yarn.lock
index 57d045a7ac3..adb95b23bd1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4831,13 +4831,6 @@ __metadata:
languageName: node
linkType: hard
-"@leichtgewicht/ip-codec@npm:^2.0.1":
- version: 2.0.3
- resolution: "@leichtgewicht/ip-codec@npm:2.0.3"
- checksum: 10/1144b3634f02532316d811d33844c992caf7dc70e1dde454952fb446a3c67848b3e76deb3e8de2a7a29faaf7cee34bd00890b647508cd8d44623b1a2953ed030
- languageName: node
- linkType: hard
-
"@lerna/create@npm:8.2.3":
version: 8.2.3
resolution: "@lerna/create@npm:8.2.3"
@@ -8977,25 +8970,6 @@ __metadata:
languageName: node
linkType: hard
-"@types/body-parser@npm:*":
- version: 1.19.1
- resolution: "@types/body-parser@npm:1.19.1"
- dependencies:
- "@types/connect": "npm:*"
- "@types/node": "npm:*"
- checksum: 10/2990656ea2de81f3529a3359a79a13b67feb4c627caf7a367fdc0017a178e567b0cc410546bdd219104ad7197c5ee5a90b70193f5253839ea43d9cdb2d2dacee
- languageName: node
- linkType: hard
-
-"@types/bonjour@npm:^3.5.13":
- version: 3.5.13
- resolution: "@types/bonjour@npm:3.5.13"
- dependencies:
- "@types/node": "npm:*"
- checksum: 10/e827570e097bd7d625a673c9c208af2d1a22fa3885c0a1646533cf24394c839c3e5f60ac1bc60c0ddcc69c0615078c9fb2c01b42596c7c582d895d974f2409ee
- languageName: node
- linkType: hard
-
"@types/chance@npm:^1.1.7":
version: 1.1.7
resolution: "@types/chance@npm:1.1.7"
@@ -9017,17 +8991,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/connect-history-api-fallback@npm:^1.5.4":
- version: 1.5.4
- resolution: "@types/connect-history-api-fallback@npm:1.5.4"
- dependencies:
- "@types/express-serve-static-core": "npm:*"
- "@types/node": "npm:*"
- checksum: 10/e1dee43b8570ffac02d2d47a2b4ba80d3ca0dd1840632dafb221da199e59dbe3778d3d7303c9e23c6b401f37c076935a5bc2aeae1c4e5feaefe1c371fe2073fd
- languageName: node
- linkType: hard
-
-"@types/connect@npm:*, @types/connect@npm:3.4.38":
+"@types/connect@npm:3.4.38":
version: 3.4.38
resolution: "@types/connect@npm:3.4.38"
dependencies:
@@ -9428,30 +9392,6 @@ __metadata:
languageName: node
linkType: hard
-"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.21, @types/express-serve-static-core@npm:^4.17.33":
- version: 4.19.6
- resolution: "@types/express-serve-static-core@npm:4.19.6"
- dependencies:
- "@types/node": "npm:*"
- "@types/qs": "npm:*"
- "@types/range-parser": "npm:*"
- "@types/send": "npm:*"
- checksum: 10/a2e00b6c5993f0dd63ada2239be81076fe0220314b9e9fde586e8946c9c09ce60f9a2dd0d74410ee2b5fd10af8c3e755a32bb3abf134533e2158142488995455
- languageName: node
- linkType: hard
-
-"@types/express@npm:*, @types/express@npm:^4.17.21":
- version: 4.17.21
- resolution: "@types/express@npm:4.17.21"
- dependencies:
- "@types/body-parser": "npm:*"
- "@types/express-serve-static-core": "npm:^4.17.33"
- "@types/qs": "npm:*"
- "@types/serve-static": "npm:*"
- checksum: 10/7a6d26cf6f43d3151caf4fec66ea11c9d23166e4f3102edfe45a94170654a54ea08cf3103d26b3928d7ebcc24162c90488e33986b7e3a5f8941225edd5eb18c7
- languageName: node
- linkType: hard
-
"@types/file-saver@npm:2.0.7":
version: 2.0.7
resolution: "@types/file-saver@npm:2.0.7"
@@ -9568,22 +9508,6 @@ __metadata:
languageName: node
linkType: hard
-"@types/http-errors@npm:*":
- version: 2.0.4
- resolution: "@types/http-errors@npm:2.0.4"
- checksum: 10/1f3d7c3b32c7524811a45690881736b3ef741bf9849ae03d32ad1ab7062608454b150a4e7f1351f83d26a418b2d65af9bdc06198f1c079d75578282884c4e8e3
- languageName: node
- linkType: hard
-
-"@types/http-proxy@npm:^1.17.8":
- version: 1.17.8
- resolution: "@types/http-proxy@npm:1.17.8"
- dependencies:
- "@types/node": "npm:*"
- checksum: 10/426c910286b7d83d67199ef3d03e9b7e9f9a33e76b362fe4a7008e7d40bb638df7998a2e3b801aaa635a9ba321a161a5f200687a29814b8c53eaa42902d30e45
- languageName: node
- linkType: hard
-
"@types/ini@npm:^4":
version: 4.1.1
resolution: "@types/ini@npm:4.1.1"
@@ -9773,20 +9697,6 @@ __metadata:
languageName: node
linkType: hard
-"@types/mime@npm:*":
- version: 3.0.4
- resolution: "@types/mime@npm:3.0.4"
- checksum: 10/a6139c8e1f705ef2b064d072f6edc01f3c099023ad7c4fce2afc6c2bf0231888202adadbdb48643e8e20da0ce409481a49922e737eca52871b3dc08017455843
- languageName: node
- linkType: hard
-
-"@types/mime@npm:^1":
- version: 1.3.5
- resolution: "@types/mime@npm:1.3.5"
- checksum: 10/e29a5f9c4776f5229d84e525b7cd7dd960b51c30a0fb9a028c0821790b82fca9f672dab56561e2acd9e8eed51d431bde52eafdfef30f643586c4162f1aecfc78
- languageName: node
- linkType: hard
-
"@types/minimatch@npm:*, @types/minimatch@npm:^5.1.2":
version: 5.1.2
resolution: "@types/minimatch@npm:5.1.2"
@@ -9815,7 +9725,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/node-forge@npm:^1, @types/node-forge@npm:^1.3.0":
+"@types/node-forge@npm:^1":
version: 1.3.13
resolution: "@types/node-forge@npm:1.3.13"
dependencies:
@@ -9916,13 +9826,6 @@ __metadata:
languageName: node
linkType: hard
-"@types/qs@npm:*":
- version: 6.9.7
- resolution: "@types/qs@npm:6.9.7"
- checksum: 10/7fd6f9c25053e9b5bb6bc9f9f76c1d89e6c04f7707a7ba0e44cc01f17ef5284adb82f230f542c2d5557d69407c9a40f0f3515e8319afd14e1e16b5543ac6cdba
- languageName: node
- linkType: hard
-
"@types/ramda@npm:~0.30.0":
version: 0.30.1
resolution: "@types/ramda@npm:0.30.1"
@@ -9932,13 +9835,6 @@ __metadata:
languageName: node
linkType: hard
-"@types/range-parser@npm:*":
- version: 1.2.4
- resolution: "@types/range-parser@npm:1.2.4"
- checksum: 10/b7c0dfd5080a989d6c8bb0b6750fc0933d9acabeb476da6fe71d8bdf1ab65e37c136169d84148034802f48378ab94e3c37bb4ef7656b2bec2cb9c0f8d4146a95
- languageName: node
- linkType: hard
-
"@types/rbush@npm:4.0.0":
version: 4.0.0
resolution: "@types/rbush@npm:4.0.0"
@@ -10102,13 +9998,6 @@ __metadata:
languageName: node
linkType: hard
-"@types/retry@npm:0.12.2":
- version: 0.12.2
- resolution: "@types/retry@npm:0.12.2"
- checksum: 10/e5675035717b39ce4f42f339657cae9637cf0c0051cf54314a6a2c44d38d91f6544be9ddc0280587789b6afd056be5d99dbe3e9f4df68c286c36321579b1bf4a
- languageName: node
- linkType: hard
-
"@types/semver@npm:7.5.8":
version: 7.5.8
resolution: "@types/semver@npm:7.5.8"
@@ -10123,36 +10012,6 @@ __metadata:
languageName: node
linkType: hard
-"@types/send@npm:*":
- version: 0.17.4
- resolution: "@types/send@npm:0.17.4"
- dependencies:
- "@types/mime": "npm:^1"
- "@types/node": "npm:*"
- checksum: 10/28320a2aa1eb704f7d96a65272a07c0bf3ae7ed5509c2c96ea5e33238980f71deeed51d3631927a77d5250e4091b3e66bce53b42d770873282c6a20bb8b0280d
- languageName: node
- linkType: hard
-
-"@types/serve-index@npm:^1.9.4":
- version: 1.9.4
- resolution: "@types/serve-index@npm:1.9.4"
- dependencies:
- "@types/express": "npm:*"
- checksum: 10/72727c88d54da5b13275ebfb75dcdc4aa12417bbe9da1939e017c4c5f0c906fae843aa4e0fbfe360e7ee9df2f3d388c21abfc488f77ce58693fb57809f8ded92
- languageName: node
- linkType: hard
-
-"@types/serve-static@npm:*, @types/serve-static@npm:^1.15.5":
- version: 1.15.5
- resolution: "@types/serve-static@npm:1.15.5"
- dependencies:
- "@types/http-errors": "npm:*"
- "@types/mime": "npm:*"
- "@types/node": "npm:*"
- checksum: 10/49aa21c367fffe4588fc8c57ea48af0ea7cbadde7418bc53cde85d8bd57fd2a09a293970d9ea86e79f17a87f8adeb3e20da76aab38e1c4d1567931fa15c8af38
- languageName: node
- linkType: hard
-
"@types/sinonjs__fake-timers@npm:8.1.1":
version: 8.1.1
resolution: "@types/sinonjs__fake-timers@npm:8.1.1"
@@ -10207,15 +10066,6 @@ __metadata:
languageName: node
linkType: hard
-"@types/sockjs@npm:^0.3.36":
- version: 0.3.36
- resolution: "@types/sockjs@npm:0.3.36"
- dependencies:
- "@types/node": "npm:*"
- checksum: 10/b4b5381122465d80ea8b158537c00bc82317222d3fb31fd7229ff25b31fa89134abfbab969118da55622236bf3d8fee75759f3959908b5688991f492008f29bc
- languageName: node
- linkType: hard
-
"@types/stack-utils@npm:^2.0.0":
version: 2.0.1
resolution: "@types/stack-utils@npm:2.0.1"
@@ -10363,15 +10213,6 @@ __metadata:
languageName: node
linkType: hard
-"@types/ws@npm:^8.5.10":
- version: 8.5.10
- resolution: "@types/ws@npm:8.5.10"
- dependencies:
- "@types/node": "npm:*"
- checksum: 10/9b414dc5e0b6c6f1ea4b1635b3568c58707357f68076df9e7cd33194747b7d1716d5189c0dbdd68c8d2521b148e88184cf881bac7429eb0e5c989b001539ed31
- languageName: node
- linkType: hard
-
"@types/yargs-parser@npm:*":
version: 20.2.1
resolution: "@types/yargs-parser@npm:20.2.1"
@@ -11099,7 +10940,7 @@ __metadata:
languageName: node
linkType: hard
-"accepts@npm:~1.3.4, accepts@npm:~1.3.5, accepts@npm:~1.3.8":
+"accepts@npm:~1.3.4":
version: 1.3.8
resolution: "accepts@npm:1.3.8"
dependencies:
@@ -11329,7 +11170,7 @@ __metadata:
languageName: node
linkType: hard
-"ansi-html-community@npm:0.0.8, ansi-html-community@npm:^0.0.8":
+"ansi-html-community@npm:0.0.8":
version: 0.0.8
resolution: "ansi-html-community@npm:0.0.8"
bin:
@@ -11546,13 +11387,6 @@ __metadata:
languageName: node
linkType: hard
-"array-flatten@npm:1.1.1":
- version: 1.1.1
- resolution: "array-flatten@npm:1.1.1"
- checksum: 10/e13c9d247241be82f8b4ec71d035ed7204baa82fae820d4db6948d30d3c4a9f2b3905eb2eec2b937d4aa3565200bd3a1c500480114cff649fa748747d2a50feb
- languageName: node
- linkType: hard
-
"array-ify@npm:^1.0.0":
version: 1.0.0
resolution: "array-ify@npm:1.0.0"
@@ -12099,13 +11933,6 @@ __metadata:
languageName: node
linkType: hard
-"batch@npm:0.6.1":
- version: 0.6.1
- resolution: "batch@npm:0.6.1"
- checksum: 10/61f9934c7378a51dce61b915586191078ef7f1c3eca707fdd58b96ff2ff56d9e0af2bdab66b1462301a73c73374239e6542d9821c0af787f3209a23365d07e7f
- languageName: node
- linkType: hard
-
"bcrypt-pbkdf@npm:^1.0.0":
version: 1.0.2
resolution: "bcrypt-pbkdf@npm:1.0.2"
@@ -12282,16 +12109,6 @@ __metadata:
languageName: node
linkType: hard
-"bonjour-service@npm:^1.2.1":
- version: 1.2.1
- resolution: "bonjour-service@npm:1.2.1"
- dependencies:
- fast-deep-equal: "npm:^3.1.3"
- multicast-dns: "npm:^7.2.5"
- checksum: 10/8350d135ab8dd998a829136984d7f74bfc0667b162ab99ac98bae54d72ff7a6003c6fb7911739dfba7c56a113bd6ab06a4d4fe6719b18e66592c345663e7d923
- languageName: node
- linkType: hard
-
"boolbase@npm:^1.0.0":
version: 1.0.0
resolution: "boolbase@npm:1.0.0"
@@ -12454,15 +12271,6 @@ __metadata:
languageName: node
linkType: hard
-"bundle-name@npm:^4.1.0":
- version: 4.1.0
- resolution: "bundle-name@npm:4.1.0"
- dependencies:
- run-applescript: "npm:^7.0.0"
- checksum: 10/1d966c8d2dbf4d9d394e53b724ac756c2414c45c01340b37743621f59cc565a435024b394ddcb62b9b335d1c9a31f4640eb648c3fec7f97ee74dc0694c9beb6c
- languageName: node
- linkType: hard
-
"byte-size@npm:8.1.1":
version: 8.1.1
resolution: "byte-size@npm:8.1.1"
@@ -12477,13 +12285,6 @@ __metadata:
languageName: node
linkType: hard
-"bytes@npm:3.0.0":
- version: 3.0.0
- resolution: "bytes@npm:3.0.0"
- checksum: 10/a2b386dd8188849a5325f58eef69c3b73c51801c08ffc6963eddc9be244089ba32d19347caf6d145c86f315ae1b1fc7061a32b0c1aa6379e6a719090287ed101
- languageName: node
- linkType: hard
-
"bytes@npm:3.1.2, bytes@npm:^3.1.2":
version: 3.1.2
resolution: "bytes@npm:3.1.2"
@@ -12901,7 +12702,7 @@ __metadata:
languageName: node
linkType: hard
-"chokidar@npm:^3.3.1, chokidar@npm:^3.5.3, chokidar@npm:^3.6.0":
+"chokidar@npm:^3.3.1, chokidar@npm:^3.5.3":
version: 3.6.0
resolution: "chokidar@npm:3.6.0"
dependencies:
@@ -13434,30 +13235,6 @@ __metadata:
languageName: node
linkType: hard
-"compressible@npm:~2.0.16":
- version: 2.0.18
- resolution: "compressible@npm:2.0.18"
- dependencies:
- mime-db: "npm:>= 1.43.0 < 2"
- checksum: 10/58321a85b375d39230405654721353f709d0c1442129e9a17081771b816302a012471a9b8f4864c7dbe02eef7f2aaac3c614795197092262e94b409c9be108f0
- languageName: node
- linkType: hard
-
-"compression@npm:^1.7.4":
- version: 1.7.4
- resolution: "compression@npm:1.7.4"
- dependencies:
- accepts: "npm:~1.3.5"
- bytes: "npm:3.0.0"
- compressible: "npm:~2.0.16"
- debug: "npm:2.6.9"
- on-headers: "npm:~1.0.2"
- safe-buffer: "npm:5.1.2"
- vary: "npm:~1.1.2"
- checksum: 10/469cd097908fe1d3ff146596d4c24216ad25eabb565c5456660bdcb3a14c82ebc45c23ce56e19fc642746cf407093b55ab9aa1ac30b06883b27c6c736e6383c2
- languageName: node
- linkType: hard
-
"compute-scroll-into-view@npm:^3.1.0":
version: 3.1.0
resolution: "compute-scroll-into-view@npm:3.1.0"
@@ -13491,13 +13268,6 @@ __metadata:
languageName: node
linkType: hard
-"connect-history-api-fallback@npm:^2.0.0":
- version: 2.0.0
- resolution: "connect-history-api-fallback@npm:2.0.0"
- checksum: 10/3b26bf4041fdb33deacdcb3af9ae11e9a0b413fb14c95844d74a460b55e407625b364955dcf965c654605cde9d24ad5dad423c489aa430825aab2035859aba0c
- languageName: node
- linkType: hard
-
"connect@npm:3.7.0":
version: 3.7.0
resolution: "connect@npm:3.7.0"
@@ -13542,15 +13312,6 @@ __metadata:
languageName: node
linkType: hard
-"content-disposition@npm:0.5.4":
- version: 0.5.4
- resolution: "content-disposition@npm:0.5.4"
- dependencies:
- safe-buffer: "npm:5.2.1"
- checksum: 10/b7f4ce176e324f19324be69b05bf6f6e411160ac94bc523b782248129eb1ef3be006f6cff431aaea5e337fe5d176ce8830b8c2a1b721626ead8933f0cbe78720
- languageName: node
- linkType: hard
-
"content-disposition@npm:^1.0.0":
version: 1.0.0
resolution: "content-disposition@npm:1.0.0"
@@ -13560,7 +13321,7 @@ __metadata:
languageName: node
linkType: hard
-"content-type@npm:^1.0.5, content-type@npm:~1.0.4, content-type@npm:~1.0.5":
+"content-type@npm:^1.0.5, content-type@npm:~1.0.5":
version: 1.0.5
resolution: "content-type@npm:1.0.5"
checksum: 10/585847d98dc7fb8035c02ae2cb76c7a9bd7b25f84c447e5ed55c45c2175e83617c8813871b4ee22f368126af6b2b167df655829007b21aa10302873ea9c62662
@@ -13683,13 +13444,6 @@ __metadata:
languageName: node
linkType: hard
-"cookie-signature@npm:1.0.6":
- version: 1.0.6
- resolution: "cookie-signature@npm:1.0.6"
- checksum: 10/f4e1b0a98a27a0e6e66fd7ea4e4e9d8e038f624058371bf4499cfcd8f3980be9a121486995202ba3fca74fbed93a407d6d54d43a43f96fd28d0bd7a06761591a
- languageName: node
- linkType: hard
-
"cookie-signature@npm:^1.2.1":
version: 1.2.2
resolution: "cookie-signature@npm:1.2.2"
@@ -13697,13 +13451,6 @@ __metadata:
languageName: node
linkType: hard
-"cookie@npm:0.7.1":
- version: 0.7.1
- resolution: "cookie@npm:0.7.1"
- checksum: 10/aec6a6aa0781761bf55d60447d6be08861d381136a0fe94aa084fddd4f0300faa2b064df490c6798adfa1ebaef9e0af9b08a189c823e0811b8b313b3d9a03380
- languageName: node
- linkType: hard
-
"cookie@npm:^0.7.1, cookie@npm:^0.7.2, cookie@npm:~0.7.2":
version: 0.7.2
resolution: "cookie@npm:0.7.2"
@@ -14946,23 +14693,6 @@ __metadata:
languageName: node
linkType: hard
-"default-browser-id@npm:^5.0.0":
- version: 5.0.0
- resolution: "default-browser-id@npm:5.0.0"
- checksum: 10/185bfaecec2c75fa423544af722a3469b20704c8d1942794a86e4364fe7d9e8e9f63241a5b769d61c8151993bc65833a5b959026fa1ccea343b3db0a33aa6deb
- languageName: node
- linkType: hard
-
-"default-browser@npm:^5.2.1":
- version: 5.2.1
- resolution: "default-browser@npm:5.2.1"
- dependencies:
- bundle-name: "npm:^4.1.0"
- default-browser-id: "npm:^5.0.0"
- checksum: 10/afab7eff7b7f5f7a94d9114d1ec67273d3fbc539edf8c0f80019879d53aa71e867303c6f6d7cffeb10a6f3cfb59d4f963dba3f9c96830b4540cc7339a1bf9840
- languageName: node
- linkType: hard
-
"defaults@npm:^1.0.3":
version: 1.0.3
resolution: "defaults@npm:1.0.3"
@@ -14990,13 +14720,6 @@ __metadata:
languageName: node
linkType: hard
-"define-lazy-prop@npm:^3.0.0":
- version: 3.0.0
- resolution: "define-lazy-prop@npm:3.0.0"
- checksum: 10/f28421cf9ee86eecaf5f3b8fe875f13d7009c2625e97645bfff7a2a49aca678270b86c39f9c32939e5ca7ab96b551377ed4139558c795e076774287ad3af1aa4
- languageName: node
- linkType: hard
-
"define-properties@npm:^1.1.3, define-properties@npm:^1.2.0, define-properties@npm:^1.2.1":
version: 1.2.1
resolution: "define-properties@npm:1.2.1"
@@ -15054,13 +14777,6 @@ __metadata:
languageName: node
linkType: hard
-"depd@npm:~1.1.2":
- version: 1.1.2
- resolution: "depd@npm:1.1.2"
- checksum: 10/2ed6966fc14463a9e85451db330ab8ba041efed0b9a1a472dbfc6fbf2f82bab66491915f996b25d8517dddc36c8c74e24c30879b34877f3c4410733444a51d1d
- languageName: node
- linkType: hard
-
"deprecation@npm:^2.0.0":
version: 2.3.1
resolution: "deprecation@npm:2.3.1"
@@ -15112,13 +14828,6 @@ __metadata:
languageName: node
linkType: hard
-"detect-node@npm:^2.0.4":
- version: 2.1.0
- resolution: "detect-node@npm:2.1.0"
- checksum: 10/832184ec458353e41533ac9c622f16c19f7c02d8b10c303dfd3a756f56be93e903616c0bb2d4226183c9351c15fc0b3dba41a17a2308262afabcfa3776e6ae6e
- languageName: node
- linkType: hard
-
"devtools-protocol@npm:0.0.869402":
version: 0.0.869402
resolution: "devtools-protocol@npm:0.0.869402"
@@ -15186,15 +14895,6 @@ __metadata:
languageName: node
linkType: hard
-"dns-packet@npm:^5.2.2":
- version: 5.4.0
- resolution: "dns-packet@npm:5.4.0"
- dependencies:
- "@leichtgewicht/ip-codec": "npm:^2.0.1"
- checksum: 10/6a3827d59a7c3b9a8f211d6ba1299bb19e8abed838690d88ed5b47d739c3ac8615a6aa2cbef3a3e87bf21f69a10e78e275bc63b9b411b4263afe4b1ada325574
- languageName: node
- linkType: hard
-
"doctrine@npm:^2.1.0":
version: 2.1.0
resolution: "doctrine@npm:2.1.0"
@@ -16704,45 +16404,6 @@ __metadata:
languageName: node
linkType: hard
-"express@npm:^4.21.2":
- version: 4.21.2
- resolution: "express@npm:4.21.2"
- dependencies:
- accepts: "npm:~1.3.8"
- array-flatten: "npm:1.1.1"
- body-parser: "npm:1.20.3"
- content-disposition: "npm:0.5.4"
- content-type: "npm:~1.0.4"
- cookie: "npm:0.7.1"
- cookie-signature: "npm:1.0.6"
- debug: "npm:2.6.9"
- depd: "npm:2.0.0"
- encodeurl: "npm:~2.0.0"
- escape-html: "npm:~1.0.3"
- etag: "npm:~1.8.1"
- finalhandler: "npm:1.3.1"
- fresh: "npm:0.5.2"
- http-errors: "npm:2.0.0"
- merge-descriptors: "npm:1.0.3"
- methods: "npm:~1.1.2"
- on-finished: "npm:2.4.1"
- parseurl: "npm:~1.3.3"
- path-to-regexp: "npm:0.1.12"
- proxy-addr: "npm:~2.0.7"
- qs: "npm:6.13.0"
- range-parser: "npm:~1.2.1"
- safe-buffer: "npm:5.2.1"
- send: "npm:0.19.0"
- serve-static: "npm:1.16.2"
- setprototypeof: "npm:1.2.0"
- statuses: "npm:2.0.1"
- type-is: "npm:~1.6.18"
- utils-merge: "npm:1.0.1"
- vary: "npm:~1.1.2"
- checksum: 10/34571c442fc8c9f2c4b442d2faa10ea1175cf8559237fc6a278f5ce6254a8ffdbeb9a15d99f77c1a9f2926ab183e3b7ba560e3261f1ad4149799e3412ab66bd1
- languageName: node
- linkType: hard
-
"express@npm:^5.0.1":
version: 5.1.0
resolution: "express@npm:5.1.0"
@@ -16956,15 +16617,6 @@ __metadata:
languageName: node
linkType: hard
-"faye-websocket@npm:^0.11.3":
- version: 0.11.4
- resolution: "faye-websocket@npm:0.11.4"
- dependencies:
- websocket-driver: "npm:>=0.5.1"
- checksum: 10/22433c14c60925e424332d2794463a8da1c04848539b5f8db5fced62a7a7c71a25335a4a8b37334e3a32318835e2b87b1733d008561964121c4a0bd55f0878c3
- languageName: node
- linkType: hard
-
"faye-websocket@npm:~0.10.0":
version: 0.10.0
resolution: "faye-websocket@npm:0.10.0"
@@ -17112,21 +16764,6 @@ __metadata:
languageName: node
linkType: hard
-"finalhandler@npm:1.3.1":
- version: 1.3.1
- resolution: "finalhandler@npm:1.3.1"
- dependencies:
- debug: "npm:2.6.9"
- encodeurl: "npm:~2.0.0"
- escape-html: "npm:~1.0.3"
- on-finished: "npm:2.4.1"
- parseurl: "npm:~1.3.3"
- statuses: "npm:2.0.1"
- unpipe: "npm:~1.0.0"
- checksum: 10/4babe72969b7373b5842bc9f75c3a641a4d0f8eb53af6b89fa714d4460ce03fb92b28de751d12ba415e96e7e02870c436d67412120555e2b382640535697305b
- languageName: node
- linkType: hard
-
"finalhandler@npm:^2.1.0":
version: 2.1.0
resolution: "finalhandler@npm:2.1.0"
@@ -18529,7 +18166,6 @@ __metadata:
webpack: "npm:5.97.1"
webpack-assets-manifest: "npm:^5.1.0"
webpack-cli: "npm:6.0.1"
- webpack-dev-server: "npm:5.2.2"
webpack-livereload-plugin: "npm:3.0.2"
webpack-manifest-plugin: "npm:5.0.1"
webpack-merge: "npm:6.0.1"
@@ -18584,13 +18220,6 @@ __metadata:
languageName: node
linkType: hard
-"handle-thing@npm:^2.0.0":
- version: 2.0.1
- resolution: "handle-thing@npm:2.0.1"
- checksum: 10/441ec98b07f26819c70c702f6c874088eebeb551b242fe8fae4eab325746b82bf84ae7a1f6419547698accb3941fa26806c5f5f93c50e19f90e499065a711d61
- languageName: node
- linkType: hard
-
"handlebars@npm:^4.7.7, handlebars@npm:^4.7.8":
version: 4.7.8
resolution: "handlebars@npm:4.7.8"
@@ -18874,18 +18503,6 @@ __metadata:
languageName: node
linkType: hard
-"hpack.js@npm:^2.1.6":
- version: 2.1.6
- resolution: "hpack.js@npm:2.1.6"
- dependencies:
- inherits: "npm:^2.0.1"
- obuf: "npm:^1.0.0"
- readable-stream: "npm:^2.0.1"
- wbuf: "npm:^1.1.0"
- checksum: 10/6910e4b9d943a78fd8e84ac42729fdab9bd406789d6204ad160af9dc5aa4750fc01f208249bf7116c11dc0678207a387b4ade24e4b628b95385b251ceeeb719c
- languageName: node
- linkType: hard
-
"html-element-attributes@npm:^1.0.0":
version: 1.3.1
resolution: "html-element-attributes@npm:1.3.1"
@@ -19062,13 +18679,6 @@ __metadata:
languageName: node
linkType: hard
-"http-deceiver@npm:^1.2.7":
- version: 1.2.7
- resolution: "http-deceiver@npm:1.2.7"
- checksum: 10/9ae293b0acbfad6ed45d52c1f85f58ab062465872fd9079c80d78c6527634002d73c2a9d8c0296cc12d178a0b689bb5291d9979aad3ce71ab17a7517588adbf7
- languageName: node
- linkType: hard
-
"http-errors@npm:2.0.0, http-errors@npm:^2.0.0":
version: 2.0.0
resolution: "http-errors@npm:2.0.0"
@@ -19082,18 +18692,6 @@ __metadata:
languageName: node
linkType: hard
-"http-errors@npm:~1.6.2":
- version: 1.6.3
- resolution: "http-errors@npm:1.6.3"
- dependencies:
- depd: "npm:~1.1.2"
- inherits: "npm:2.0.3"
- setprototypeof: "npm:1.1.0"
- statuses: "npm:>= 1.4.0 < 2"
- checksum: 10/e48732657ea0b4a09853d2696a584fa59fa2a8c1ba692af7af3137b5491a997d7f9723f824e7e08eb6a87098532c09ce066966ddf0f9f3dd30905e52301acadb
- languageName: node
- linkType: hard
-
"http-parser-js@npm:>=0.5.1":
version: 0.5.6
resolution: "http-parser-js@npm:0.5.6"
@@ -19133,24 +18731,6 @@ __metadata:
languageName: node
linkType: hard
-"http-proxy-middleware@npm:^2.0.9":
- version: 2.0.9
- resolution: "http-proxy-middleware@npm:2.0.9"
- dependencies:
- "@types/http-proxy": "npm:^1.17.8"
- http-proxy: "npm:^1.18.1"
- is-glob: "npm:^4.0.1"
- is-plain-obj: "npm:^3.0.0"
- micromatch: "npm:^4.0.2"
- peerDependencies:
- "@types/express": ^4.17.13
- peerDependenciesMeta:
- "@types/express":
- optional: true
- checksum: 10/4ece416a91d52e96f8136c5f4abfbf7ac2f39becbad21fa8b158a12d7e7d8f808287ff1ae342b903fd1f15f2249dee87fabc09e1f0e73106b83331c496d67660
- languageName: node
- linkType: hard
-
"http-proxy@npm:^1.18.1":
version: 1.18.1
resolution: "http-proxy@npm:1.18.1"
@@ -19552,13 +19132,6 @@ __metadata:
languageName: node
linkType: hard
-"inherits@npm:2.0.3":
- version: 2.0.3
- resolution: "inherits@npm:2.0.3"
- checksum: 10/8771303d66c51be433b564427c16011a8e3fbc3449f1f11ea50efb30a4369495f1d0e89f0fc12bdec0bd7e49102ced5d137e031d39ea09821cb3c717fcf21e69
- languageName: node
- linkType: hard
-
"ini@npm:2.0.0":
version: 2.0.0
resolution: "ini@npm:2.0.0"
@@ -19710,13 +19283,6 @@ __metadata:
languageName: node
linkType: hard
-"ipaddr.js@npm:^2.1.0":
- version: 2.1.0
- resolution: "ipaddr.js@npm:2.1.0"
- checksum: 10/42c16d95cf451399707c2c46e605b88db1ea2b1477b25774b5a7ee96852b0bb1efdc01adbff01fedbe702ff246e1aca5c5e915a6f5a1f1485233a5f7c2eb73c2
- languageName: node
- linkType: hard
-
"ipv6-normalize@npm:1.0.1":
version: 1.0.1
resolution: "ipv6-normalize@npm:1.0.1"
@@ -19903,15 +19469,6 @@ __metadata:
languageName: node
linkType: hard
-"is-docker@npm:^3.0.0":
- version: 3.0.0
- resolution: "is-docker@npm:3.0.0"
- bin:
- is-docker: cli.js
- checksum: 10/b698118f04feb7eaf3338922bd79cba064ea54a1c3db6ec8c0c8d8ee7613e7e5854d802d3ef646812a8a3ace81182a085dfa0a71cc68b06f3fa794b9783b3c90
- languageName: node
- linkType: hard
-
"is-extendable@npm:^1.0.0":
version: 1.0.1
resolution: "is-extendable@npm:1.0.1"
@@ -20006,17 +19563,6 @@ __metadata:
languageName: node
linkType: hard
-"is-inside-container@npm:^1.0.0":
- version: 1.0.0
- resolution: "is-inside-container@npm:1.0.0"
- dependencies:
- is-docker: "npm:^3.0.0"
- bin:
- is-inside-container: cli.js
- checksum: 10/c50b75a2ab66ab3e8b92b3bc534e1ea72ca25766832c0623ac22d134116a98bcf012197d1caabe1d1c4bd5f84363d4aa5c36bb4b585fbcaf57be172cd10a1a03
- languageName: node
- linkType: hard
-
"is-installed-globally@npm:~0.4.0":
version: 0.4.0
resolution: "is-installed-globally@npm:0.4.0"
@@ -20079,13 +19625,6 @@ __metadata:
languageName: node
linkType: hard
-"is-network-error@npm:^1.0.0":
- version: 1.0.1
- resolution: "is-network-error@npm:1.0.1"
- checksum: 10/165d61500c4186c62db5a3a693d6bfa14ca40fe9b471ef4cd4f27b20ef6760880faf5386dc01ca9867531631782941fedaa94521d09959edf71f046e393c7b91
- languageName: node
- linkType: hard
-
"is-node-process@npm:^1.0.1, is-node-process@npm:^1.2.0":
version: 1.2.0
resolution: "is-node-process@npm:1.2.0"
@@ -20145,13 +19684,6 @@ __metadata:
languageName: node
linkType: hard
-"is-plain-obj@npm:^3.0.0":
- version: 3.0.0
- resolution: "is-plain-obj@npm:3.0.0"
- checksum: 10/a6ebdf8e12ab73f33530641972a72a4b8aed6df04f762070d823808303e4f76d87d5ea5bd76f96a7bbe83d93f04ac7764429c29413bd9049853a69cb630fb21c
- languageName: node
- linkType: hard
-
"is-plain-obj@npm:^4.0.0":
version: 4.1.0
resolution: "is-plain-obj@npm:4.1.0"
@@ -20388,15 +19920,6 @@ __metadata:
languageName: node
linkType: hard
-"is-wsl@npm:^3.1.0":
- version: 3.1.0
- resolution: "is-wsl@npm:3.1.0"
- dependencies:
- is-inside-container: "npm:^1.0.0"
- checksum: 10/f9734c81f2f9cf9877c5db8356bfe1ff61680f1f4c1011e91278a9c0564b395ae796addb4bf33956871041476ec82c3e5260ed57b22ac91794d4ae70a1d2f0a9
- languageName: node
- linkType: hard
-
"is@npm:^3.3.0":
version: 3.3.0
resolution: "is@npm:3.3.0"
@@ -21658,16 +21181,6 @@ __metadata:
languageName: node
linkType: hard
-"launch-editor@npm:^2.6.1":
- version: 2.6.1
- resolution: "launch-editor@npm:2.6.1"
- dependencies:
- picocolors: "npm:^1.0.0"
- shell-quote: "npm:^1.8.1"
- checksum: 10/e06d193075ac09f7f8109f10cabe464a211bf7ed4cbe75f83348d6f67bf4d9f162f06e7a1ab3e1cd7fc250b5342c3b57080618aff2e646dc34248fe499227601
- languageName: node
- linkType: hard
-
"lazy-ass@npm:^1.6.0":
version: 1.6.0
resolution: "lazy-ass@npm:1.6.0"
@@ -22622,15 +22135,6 @@ __metadata:
languageName: node
linkType: hard
-"memfs@npm:^4.6.0":
- version: 4.7.7
- resolution: "memfs@npm:4.7.7"
- dependencies:
- tslib: "npm:^2.0.0"
- checksum: 10/311633e5857c91f41021b43f00eda8d540fed2c2d9e02c780fe78de720cfb55d15ab2d5b5ce9f2576637589b82e84488f1b9ff503563e817ed65200ad24617fb
- languageName: node
- linkType: hard
-
"memoize-one@npm:6.0.0, memoize-one@npm:^6.0.0":
version: 6.0.0
resolution: "memoize-one@npm:6.0.0"
@@ -22696,13 +22200,6 @@ __metadata:
languageName: node
linkType: hard
-"merge-descriptors@npm:1.0.3":
- version: 1.0.3
- resolution: "merge-descriptors@npm:1.0.3"
- checksum: 10/52117adbe0313d5defa771c9993fe081e2d2df9b840597e966aadafde04ae8d0e3da46bac7ca4efc37d4d2b839436582659cd49c6a43eacb3fe3050896a105d1
- languageName: node
- linkType: hard
-
"merge-descriptors@npm:^2.0.0":
version: 2.0.0
resolution: "merge-descriptors@npm:2.0.0"
@@ -22724,13 +22221,6 @@ __metadata:
languageName: node
linkType: hard
-"methods@npm:~1.1.2":
- version: 1.1.2
- resolution: "methods@npm:1.1.2"
- checksum: 10/a385dd974faa34b5dd021b2bbf78c722881bf6f003bfe6d391d7da3ea1ed625d1ff10ddd13c57531f628b3e785be38d3eed10ad03cebd90b76932413df9a1820
- languageName: node
- linkType: hard
-
"micro-memoize@npm:^4.1.2":
version: 4.1.3
resolution: "micro-memoize@npm:4.1.3"
@@ -22755,14 +22245,14 @@ __metadata:
languageName: node
linkType: hard
-"mime-db@npm:>= 1.43.0 < 2, mime-db@npm:^1.54.0":
+"mime-db@npm:^1.54.0":
version: 1.54.0
resolution: "mime-db@npm:1.54.0"
checksum: 10/9e7834be3d66ae7f10eaa69215732c6d389692b194f876198dca79b2b90cbf96688d9d5d05ef7987b20f749b769b11c01766564264ea5f919c88b32a29011311
languageName: node
linkType: hard
-"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34":
+"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34":
version: 2.1.35
resolution: "mime-types@npm:2.1.35"
dependencies:
@@ -22849,13 +22339,6 @@ __metadata:
languageName: node
linkType: hard
-"minimalistic-assert@npm:^1.0.0":
- version: 1.0.1
- resolution: "minimalistic-assert@npm:1.0.1"
- checksum: 10/cc7974a9268fbf130fb055aff76700d7e2d8be5f761fb5c60318d0ed010d839ab3661a533ad29a5d37653133385204c503bfac995aaa4236f4e847461ea32ba7
- languageName: node
- linkType: hard
-
"minimatch@npm:3.0.5":
version: 3.0.5
resolution: "minimatch@npm:3.0.5"
@@ -23320,18 +22803,6 @@ __metadata:
languageName: node
linkType: hard
-"multicast-dns@npm:^7.2.5":
- version: 7.2.5
- resolution: "multicast-dns@npm:7.2.5"
- dependencies:
- dns-packet: "npm:^5.2.2"
- thunky: "npm:^1.0.2"
- bin:
- multicast-dns: cli.js
- checksum: 10/e9add8035fb7049ccbc87b1b069f05bb3b31e04fe057bf7d0116739d81295165afc2568291a4a962bee01a5074e475996816eed0f50c8110d652af5abb74f95a
- languageName: node
- linkType: hard
-
"multimatch@npm:5.0.0":
version: 5.0.0
resolution: "multimatch@npm:5.0.0"
@@ -23587,7 +23058,7 @@ __metadata:
languageName: node
linkType: hard
-"node-forge@npm:^1, node-forge@npm:^1.3.1":
+"node-forge@npm:^1.3.1":
version: 1.3.1
resolution: "node-forge@npm:1.3.1"
checksum: 10/05bab6868633bf9ad4c3b1dd50ec501c22ffd69f556cdf169a00998ca1d03e8107a6032ba013852f202035372021b845603aeccd7dfcb58cdb7430013b3daa8d
@@ -24231,13 +23702,6 @@ __metadata:
languageName: node
linkType: hard
-"obuf@npm:^1.0.0, obuf@npm:^1.1.2":
- version: 1.1.2
- resolution: "obuf@npm:1.1.2"
- checksum: 10/53ff4ab3a13cc33ba6c856cf281f2965c0aec9720967af450e8fd06cfd50aceeefc791986a16bcefa14e7898b3ca9acdfcf15b9d9a1b9c7e1366581a8ad6e65e
- languageName: node
- linkType: hard
-
"ol-ext@npm:4.0.33":
version: 4.0.33
resolution: "ol-ext@npm:4.0.33"
@@ -24285,13 +23749,6 @@ __metadata:
languageName: node
linkType: hard
-"on-headers@npm:~1.0.2":
- version: 1.0.2
- resolution: "on-headers@npm:1.0.2"
- checksum: 10/870766c16345855e2012e9422ba1ab110c7e44ad5891a67790f84610bd70a72b67fdd71baf497295f1d1bf38dd4c92248f825d48729c53c0eae5262fb69fa171
- languageName: node
- linkType: hard
-
"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0":
version: 1.4.0
resolution: "once@npm:1.4.0"
@@ -24319,18 +23776,6 @@ __metadata:
languageName: node
linkType: hard
-"open@npm:^10.0.3":
- version: 10.0.3
- resolution: "open@npm:10.0.3"
- dependencies:
- default-browser: "npm:^5.2.1"
- define-lazy-prop: "npm:^3.0.0"
- is-inside-container: "npm:^1.0.0"
- is-wsl: "npm:^3.1.0"
- checksum: 10/4dc757ad1d3d63490822f991e9cbe3a7c05b7249fca2eaa571cb7d191e5cec88bc37e15d8ef4fd740d8989a288b661d8da253caa8d98e8c97430ddbbb0ae4ed1
- languageName: node
- linkType: hard
-
"open@npm:^8.0.4, open@npm:^8.4.0, open@npm:^8.4.2":
version: 8.4.2
resolution: "open@npm:8.4.2"
@@ -24609,17 +24054,6 @@ __metadata:
languageName: node
linkType: hard
-"p-retry@npm:^6.2.0":
- version: 6.2.0
- resolution: "p-retry@npm:6.2.0"
- dependencies:
- "@types/retry": "npm:0.12.2"
- is-network-error: "npm:^1.0.0"
- retry: "npm:^0.13.1"
- checksum: 10/1a5ac16828c96c03c354f78d643dfc7aa8f8b998e1b60e27533da2c75e5cabfb1c7f88ce312e813e09a80b056011fbb372d384132e9c92d27d052bd7c282a978
- languageName: node
- linkType: hard
-
"p-timeout@npm:^3.2.0":
version: 3.2.0
resolution: "p-timeout@npm:3.2.0"
@@ -24976,7 +24410,7 @@ __metadata:
languageName: node
linkType: hard
-"parseurl@npm:^1.3.3, parseurl@npm:~1.3.2, parseurl@npm:~1.3.3":
+"parseurl@npm:^1.3.3, parseurl@npm:~1.3.3":
version: 1.3.3
resolution: "parseurl@npm:1.3.3"
checksum: 10/407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2
@@ -25095,13 +24529,6 @@ __metadata:
languageName: node
linkType: hard
-"path-to-regexp@npm:0.1.12":
- version: 0.1.12
- resolution: "path-to-regexp@npm:0.1.12"
- checksum: 10/2e30f6a0144679c1f95c98e166b96e6acd1e72be9417830fefc8de7ac1992147eb9a4c7acaa59119fb1b3c34eec393b2129ef27e24b2054a3906fc4fb0d1398e
- languageName: node
- linkType: hard
-
"path-to-regexp@npm:^1.7.0":
version: 1.9.0
resolution: "path-to-regexp@npm:1.9.0"
@@ -26117,7 +25544,7 @@ __metadata:
languageName: node
linkType: hard
-"proxy-addr@npm:^2.0.7, proxy-addr@npm:~2.0.7":
+"proxy-addr@npm:^2.0.7":
version: 2.0.7
resolution: "proxy-addr@npm:2.0.7"
dependencies:
@@ -27564,7 +26991,7 @@ __metadata:
languageName: node
linkType: hard
-"readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.6, readable-stream@npm:~2.3.6":
+"readable-stream@npm:^2.0.6, readable-stream@npm:~2.3.6":
version: 2.3.8
resolution: "readable-stream@npm:2.3.8"
dependencies:
@@ -27579,7 +27006,7 @@ __metadata:
languageName: node
linkType: hard
-"readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.0.6, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0":
+"readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0":
version: 3.6.2
resolution: "readable-stream@npm:3.6.2"
dependencies:
@@ -28107,13 +27534,6 @@ __metadata:
languageName: node
linkType: hard
-"retry@npm:^0.13.1":
- version: 0.13.1
- resolution: "retry@npm:0.13.1"
- checksum: 10/6125ec2e06d6e47e9201539c887defba4e47f63471db304c59e4b82fc63c8e89ca06a77e9d34939a9a42a76f00774b2f46c0d4a4cbb3e287268bd018ed69426d
- languageName: node
- linkType: hard
-
"reusify@npm:^1.0.4":
version: 1.0.4
resolution: "reusify@npm:1.0.4"
@@ -28356,13 +27776,6 @@ __metadata:
languageName: node
linkType: hard
-"run-applescript@npm:^7.0.0":
- version: 7.0.0
- resolution: "run-applescript@npm:7.0.0"
- checksum: 10/b02462454d8b182ad4117e5d4626e9e6782eb2072925c9fac582170b0627ae3c1ea92ee9b2df7daf84b5e9ffe14eb1cf5fb70bc44b15c8a0bfcdb47987e2410c
- languageName: node
- linkType: hard
-
"run-async@npm:^2.4.0":
version: 2.4.1
resolution: "run-async@npm:2.4.1"
@@ -28603,13 +28016,6 @@ __metadata:
languageName: node
linkType: hard
-"select-hose@npm:^2.0.0":
- version: 2.0.0
- resolution: "select-hose@npm:2.0.0"
- checksum: 10/08cdd629a394d20e9005e7956f0624307c702cf950cc0458953e9b87ea961d3b1b72ac02266bdb93ac1eec4fcf42b41db9cabe93aa2b7683d71513d133c44fb5
- languageName: node
- linkType: hard
-
"selection-is-backward@npm:^1.0.0":
version: 1.0.0
resolution: "selection-is-backward@npm:1.0.0"
@@ -28635,16 +28041,6 @@ __metadata:
languageName: node
linkType: hard
-"selfsigned@npm:^2.4.1":
- version: 2.4.1
- resolution: "selfsigned@npm:2.4.1"
- dependencies:
- "@types/node-forge": "npm:^1.3.0"
- node-forge: "npm:^1"
- checksum: 10/52536623f1cfdeb2f8b9198377f2ce7931c677ea69421238d1dc1ea2983bbe258e56c19e7d1af87035cad7270f19b7e996eaab1212e724d887722502f68e17f2
- languageName: node
- linkType: hard
-
"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.6.0":
version: 5.7.2
resolution: "semver@npm:5.7.2"
@@ -28752,21 +28148,6 @@ __metadata:
languageName: node
linkType: hard
-"serve-index@npm:^1.9.1":
- version: 1.9.1
- resolution: "serve-index@npm:1.9.1"
- dependencies:
- accepts: "npm:~1.3.4"
- batch: "npm:0.6.1"
- debug: "npm:2.6.9"
- escape-html: "npm:~1.0.3"
- http-errors: "npm:~1.6.2"
- mime-types: "npm:~2.1.17"
- parseurl: "npm:~1.3.2"
- checksum: 10/2adce2878d7e30f197e66f30e39f4a404d9ae39295c0c13849bb25e7cf976b93e883204739efd1510559588bed56f8101e32191cbe75f374c6e1e803852194cb
- languageName: node
- linkType: hard
-
"serve-static@npm:1.16.2":
version: 1.16.2
resolution: "serve-static@npm:1.16.2"
@@ -28842,13 +28223,6 @@ __metadata:
languageName: node
linkType: hard
-"setprototypeof@npm:1.1.0":
- version: 1.1.0
- resolution: "setprototypeof@npm:1.1.0"
- checksum: 10/02d2564e02a260551bab3ec95358dcfde775fe61272b1b7c488de3676a4bb79f280b5668a324aebe0ec73f0d8ba408bc2d816a609ee5d93b1a7936b9d4ba1208
- languageName: node
- linkType: hard
-
"setprototypeof@npm:1.2.0":
version: 1.2.0
resolution: "setprototypeof@npm:1.2.0"
@@ -28893,13 +28267,6 @@ __metadata:
languageName: node
linkType: hard
-"shell-quote@npm:^1.8.1":
- version: 1.8.1
- resolution: "shell-quote@npm:1.8.1"
- checksum: 10/af19ab5a1ec30cb4b2f91fd6df49a7442d5c4825a2e269b3712eded10eedd7f9efeaab96d57829880733fc55bcdd8e9b1d8589b4befb06667c731d08145e274d
- languageName: node
- linkType: hard
-
"shellwords@npm:^0.1.1":
version: 0.1.1
resolution: "shellwords@npm:0.1.1"
@@ -29344,17 +28711,6 @@ __metadata:
languageName: node
linkType: hard
-"sockjs@npm:^0.3.24":
- version: 0.3.24
- resolution: "sockjs@npm:0.3.24"
- dependencies:
- faye-websocket: "npm:^0.11.3"
- uuid: "npm:^8.3.2"
- websocket-driver: "npm:^0.7.4"
- checksum: 10/36312ec9772a0e536b69b72e9d1c76bd3d6ecf885c5d8fd6e59811485c916b8ce75f46ec57532f436975815ee14aa9a0e22ae3d9e5c0b18ea37b56d0aaaf439c
- languageName: node
- linkType: hard
-
"socks-proxy-agent@npm:^6.0.0":
version: 6.1.0
resolution: "socks-proxy-agent@npm:6.1.0"
@@ -29528,33 +28884,6 @@ __metadata:
languageName: node
linkType: hard
-"spdy-transport@npm:^3.0.0":
- version: 3.0.0
- resolution: "spdy-transport@npm:3.0.0"
- dependencies:
- debug: "npm:^4.1.0"
- detect-node: "npm:^2.0.4"
- hpack.js: "npm:^2.1.6"
- obuf: "npm:^1.1.2"
- readable-stream: "npm:^3.0.6"
- wbuf: "npm:^1.7.3"
- checksum: 10/b93b606b209ca785456bd850b8925f21a76522ee5b46701235ecff3eba17686560c27575f91863842dc843a39772f6d2f5a8755df9eaff0924d20598df18828d
- languageName: node
- linkType: hard
-
-"spdy@npm:^4.0.2":
- version: 4.0.2
- resolution: "spdy@npm:4.0.2"
- dependencies:
- debug: "npm:^4.1.0"
- handle-thing: "npm:^2.0.0"
- http-deceiver: "npm:^1.2.7"
- select-hose: "npm:^2.0.0"
- spdy-transport: "npm:^3.0.0"
- checksum: 10/d29b89e48e7d762e505a2f83b1bc2c92268bd518f1b411864ab42a9e032e387d10467bbce0d8dbf8647bf4914a063aa1d303dff85e248f7a57f81a7b18ac34ef
- languageName: node
- linkType: hard
-
"spel2js@npm:^0.2.8":
version: 0.2.8
resolution: "spel2js@npm:0.2.8"
@@ -29728,7 +29057,7 @@ __metadata:
languageName: node
linkType: hard
-"statuses@npm:>= 1.4.0 < 2, statuses@npm:~1.5.0":
+"statuses@npm:~1.5.0":
version: 1.5.0
resolution: "statuses@npm:1.5.0"
checksum: 10/c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c
@@ -30616,13 +29945,6 @@ __metadata:
languageName: node
linkType: hard
-"thunky@npm:^1.0.2":
- version: 1.1.0
- resolution: "thunky@npm:1.1.0"
- checksum: 10/825e3bd07ab3c9fd6f753c457a60957c628cacba5dd0656fd93b037c445e2828b43cf0805a9f2b16b0c5f5a10fd561206271acddb568df4f867f0aea0eb2772f
- languageName: node
- linkType: hard
-
"tiny-invariant@npm:^1.0.1, tiny-invariant@npm:^1.0.2, tiny-invariant@npm:^1.0.6, tiny-invariant@npm:^1.2.0, tiny-invariant@npm:^1.3.1, tiny-invariant@npm:^1.3.3":
version: 1.3.3
resolution: "tiny-invariant@npm:1.3.3"
@@ -31914,7 +31236,7 @@ __metadata:
languageName: node
linkType: hard
-"vary@npm:^1, vary@npm:^1.1.2, vary@npm:~1.1.2":
+"vary@npm:^1, vary@npm:^1.1.2":
version: 1.1.2
resolution: "vary@npm:1.1.2"
checksum: 10/31389debef15a480849b8331b220782230b9815a8e0dbb7b9a8369559aed2e9a7800cd904d4371ea74f4c3527db456dc8e7ac5befce5f0d289014dbdf47b2242
@@ -32085,15 +31407,6 @@ __metadata:
languageName: node
linkType: hard
-"wbuf@npm:^1.1.0, wbuf@npm:^1.7.3":
- version: 1.7.3
- resolution: "wbuf@npm:1.7.3"
- dependencies:
- minimalistic-assert: "npm:^1.0.0"
- checksum: 10/c18b51c4e1fb19705c94b93c0cf093ba014606abceee949399d56074ef1863bf4897a8d884be24e8d224d18c9ce411cf6924006d0a5430492729af51256e067a
- languageName: node
- linkType: hard
-
"wcwidth@npm:^1.0.0, wcwidth@npm:^1.0.1":
version: 1.0.1
resolution: "wcwidth@npm:1.0.1"
@@ -32232,70 +31545,6 @@ __metadata:
languageName: node
linkType: hard
-"webpack-dev-middleware@npm:^7.4.2":
- version: 7.4.2
- resolution: "webpack-dev-middleware@npm:7.4.2"
- dependencies:
- colorette: "npm:^2.0.10"
- memfs: "npm:^4.6.0"
- mime-types: "npm:^2.1.31"
- on-finished: "npm:^2.4.1"
- range-parser: "npm:^1.2.1"
- schema-utils: "npm:^4.0.0"
- peerDependencies:
- webpack: ^5.0.0
- peerDependenciesMeta:
- webpack:
- optional: true
- checksum: 10/608d101b82081a5bc6c0237f9945e14a8eefce1664c10877f3feb0042710f6c8b4288b07986505f791302d81b3c51180f679b97c91c3cdabd3fd0687a464ca1c
- languageName: node
- linkType: hard
-
-"webpack-dev-server@npm:5.2.2":
- version: 5.2.2
- resolution: "webpack-dev-server@npm:5.2.2"
- dependencies:
- "@types/bonjour": "npm:^3.5.13"
- "@types/connect-history-api-fallback": "npm:^1.5.4"
- "@types/express": "npm:^4.17.21"
- "@types/express-serve-static-core": "npm:^4.17.21"
- "@types/serve-index": "npm:^1.9.4"
- "@types/serve-static": "npm:^1.15.5"
- "@types/sockjs": "npm:^0.3.36"
- "@types/ws": "npm:^8.5.10"
- ansi-html-community: "npm:^0.0.8"
- bonjour-service: "npm:^1.2.1"
- chokidar: "npm:^3.6.0"
- colorette: "npm:^2.0.10"
- compression: "npm:^1.7.4"
- connect-history-api-fallback: "npm:^2.0.0"
- express: "npm:^4.21.2"
- graceful-fs: "npm:^4.2.6"
- http-proxy-middleware: "npm:^2.0.9"
- ipaddr.js: "npm:^2.1.0"
- launch-editor: "npm:^2.6.1"
- open: "npm:^10.0.3"
- p-retry: "npm:^6.2.0"
- schema-utils: "npm:^4.2.0"
- selfsigned: "npm:^2.4.1"
- serve-index: "npm:^1.9.1"
- sockjs: "npm:^0.3.24"
- spdy: "npm:^4.0.2"
- webpack-dev-middleware: "npm:^7.4.2"
- ws: "npm:^8.18.0"
- peerDependencies:
- webpack: ^5.0.0
- peerDependenciesMeta:
- webpack:
- optional: true
- webpack-cli:
- optional: true
- bin:
- webpack-dev-server: bin/webpack-dev-server.js
- checksum: 10/59517409cd38c01a875a03b9658f3d20d492b5b8bead9ded4a0f3d33e6857daf2d352fe89f0181dcaea6d0fbe84b0494cb4750a87120fe81cdbb3c32b499451c
- languageName: node
- linkType: hard
-
"webpack-hot-middleware@npm:^2.25.1":
version: 2.25.3
resolution: "webpack-hot-middleware@npm:2.25.3"
@@ -32501,7 +31750,7 @@ __metadata:
languageName: node
linkType: hard
-"websocket-driver@npm:>=0.5.1, websocket-driver@npm:^0.7.4":
+"websocket-driver@npm:>=0.5.1":
version: 0.7.4
resolution: "websocket-driver@npm:0.7.4"
dependencies:
@@ -32805,7 +32054,7 @@ __metadata:
languageName: node
linkType: hard
-"ws@npm:^8.18.0, ws@npm:^8.2.3, ws@npm:^8.9.0":
+"ws@npm:^8.2.3, ws@npm:^8.9.0":
version: 8.18.0
resolution: "ws@npm:8.18.0"
peerDependencies:
From 2d1fb94f2d7c8908bd95ff458d84f6b5f779fddb Mon Sep 17 00:00:00 2001
From: Ashley Harrison
Date: Fri, 18 Jul 2025 17:08:47 +0100
Subject: [PATCH 41/46] Playwright: Gate server start up with `GRAFANA_URL` env
var (#108302)
* refactor so server is created unless GRAFANA_URL is provided
* update documentation
* don't swallow errors from the server process
---
.drone.yml | 6 +++---
contribute/developer-guide.md | 8 +++++---
contribute/style-guides/e2e-plugins.md | 8 +++++---
e2e-playwright/{start-and-run-suite => start-server} | 5 +----
package.json | 1 -
pkg/build/e2e-playwright/e2e.go | 9 +++++++--
pkg/build/e2e-playwright/main.go | 1 -
playwright.config.ts | 11 ++++++++++-
scripts/drone/steps/lib.star | 2 +-
9 files changed, 32 insertions(+), 19 deletions(-)
rename e2e-playwright/{start-and-run-suite => start-server} (60%)
diff --git a/.drone.yml b/.drone.yml
index bf621c24a1e..cca7288c255 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -289,7 +289,7 @@ steps:
- commands:
- npx wait-on@7.0.1 http://$HOST:$PORT
- yarn playwright install --with-deps chromium
- - yarn e2e:playwright --grep @plugins
+ - GRAFANA_URL=http://$HOST:$PORT yarn e2e:playwright --grep @plugins
depends_on:
- grafana-server
- build-test-plugins
@@ -761,7 +761,7 @@ steps:
- commands:
- npx wait-on@7.0.1 http://$HOST:$PORT
- yarn playwright install --with-deps chromium
- - yarn e2e:playwright --grep @plugins
+ - GRAFANA_URL=http://$HOST:$PORT yarn e2e:playwright --grep @plugins
depends_on:
- grafana-server
- build-test-plugins
@@ -2986,6 +2986,6 @@ kind: secret
name: gcr_credentials
---
kind: signature
-hmac: d20f1d6e2e8347701f82114ad352f53db57dc95b5b3831941fa93d063a92b9d8
+hmac: 70e5888d6be34ca57086672bc58d6de7de0029210e4485190571452972774e54
...
diff --git a/contribute/developer-guide.md b/contribute/developer-guide.md
index f13f7ffccb3..6ed40a72edb 100644
--- a/contribute/developer-guide.md
+++ b/contribute/developer-guide.md
@@ -251,18 +251,20 @@ Each version of Playwright needs specific versions of browser binaries to operat
yarn playwright install chromium
```
-To run all tests in a headless Chromium browser and display results in the terminal. This assumes you have Grafana running on port 3000.
+The following script starts a Grafana [development server](https://github.com/grafana/grafana/blob/main/scripts/grafana-server/start-server) (same server that is being used when running e2e tests in CI) on port 3001 and runs all the Playwright tests. The development server is provisioned with the [devenv](https://github.com/grafana/grafana/blob/main/contribute/developer-guide.md#add-data-sources) dashboards, data sources and apps.
```
yarn e2e:playwright
```
-The following script starts a Grafana [development server](https://github.com/grafana/grafana/blob/main/scripts/grafana-server/start-server) (same server that is being used when running e2e tests in Drone CI) on port 3001 and runs the Playwright tests. The development server is provisioned with the [devenv](https://github.com/grafana/grafana/blob/main/contribute/developer-guide.md#add-data-sources) dashboards, data sources and apps.
+You can run against an arbitrary instance by setting the `GRAFANA_URL` environment variable:
```
-yarn e2e:playwright:server
+GRAFANA_URL=http://localhost:3000 yarn e2e:playwright
```
+Note this will not start a development server, so you must ensure that Grafana is running and accessible at the specified URL.
+
## Configure Grafana for development
The default configuration, `defaults.ini`, is located in the `conf` directory.
diff --git a/contribute/style-guides/e2e-plugins.md b/contribute/style-guides/e2e-plugins.md
index 8d6ffaca61a..e3fafa36fcf 100644
--- a/contribute/style-guides/e2e-plugins.md
+++ b/contribute/style-guides/e2e-plugins.md
@@ -32,10 +32,12 @@ You can add Playwright end-to-end tests for plugins to the [`e2e-playwright/plug
- `yarn e2e:playwright` runs all Playwright tests. Optionally, you can provide the `--project mysql` argument to run tests in a specific project.
- The `yarn e2e:playwright` script assumes you have Grafana running on `localhost:3000`. You may change this with an environment variable:
+ The `yarn e2e:playwright` command starts a Grafana [development server](https://github.com/grafana/grafana/blob/main/scripts/grafana-server/start-server) on port 3001 and runs the Playwright tests.
- `HOST=127.0.0.1 PORT=3001 yarn e2e:playwright`
+ You can run against an arbitrary instance by setting the `GRAFANA_URL` environment variable:
- The `yarn e2e:playwright:server` starts a Grafana [development server](https://github.com/grafana/grafana/blob/main/scripts/grafana-server/start-server) on port 3001 and runs the Playwright tests.
+ `GRAFANA_URL=http://localhost:3000 yarn e2e:playwright`
+
+ Note this will not start a development server, so you must ensure that Grafana is running and accessible at the specified URL.
- You can provision the development server with the [devenv](https://github.com/grafana/grafana/blob/main/contribute/developer-guide.md#add-data-sources) dashboards, data sources, and apps.
diff --git a/e2e-playwright/start-and-run-suite b/e2e-playwright/start-server
similarity index 60%
rename from e2e-playwright/start-and-run-suite
rename to e2e-playwright/start-server
index 3322f449345..6685cd472d0 100755
--- a/e2e-playwright/start-and-run-suite
+++ b/e2e-playwright/start-server
@@ -15,9 +15,6 @@ fi
if [ "$BASE_URL" != "" ]; then
echo -e "BASE_URL set, skipping starting server"
else
- # Start it in the background
- ./scripts/grafana-server/start-server $LICENSE_PATH 2>&1 > scripts/grafana-server/server.log &
- ./scripts/grafana-server/wait-for-grafana
+ ./scripts/grafana-server/start-server $LICENSE_PATH > scripts/grafana-server/server.log
fi
-PORT=3001 HOST=localhost yarn playwright test
diff --git a/package.json b/package.json
index f21cc23e2e9..5e8f3084e4c 100644
--- a/package.json
+++ b/package.json
@@ -24,7 +24,6 @@
"e2e:enterprise:dev": "./e2e/start-and-run-suite enterprise dev",
"e2e:enterprise:debug": "./e2e/start-and-run-suite enterprise debug",
"e2e:playwright": "yarn playwright test",
- "e2e:playwright:server": "yarn e2e:plugin:build && ./e2e-playwright/start-and-run-suite",
"e2e:playwright:storybook": "yarn playwright test -c playwright.storybook.config.ts",
"e2e:storybook": "PORT=9001 ./e2e/run-suite storybook true",
"e2e:plugin:build": "nx run-many -t build --projects='@test-plugins/*'",
diff --git a/pkg/build/e2e-playwright/e2e.go b/pkg/build/e2e-playwright/e2e.go
index 35579e8dd2f..81044598d3f 100644
--- a/pkg/build/e2e-playwright/e2e.go
+++ b/pkg/build/e2e-playwright/e2e.go
@@ -32,12 +32,17 @@ func RunTest(
) (*dagger.Container, error) {
playwrightCommand := buildPlaywrightCommand(opts)
+ grafanaHost, err := opts.GrafanaService.Hostname(ctx)
+ if err != nil {
+ return nil, err
+ }
+
e2eContainer := opts.FrontendContainer.
WithWorkdir("/src").
WithDirectory("/src", opts.HostSrc).
WithMountedCache(".nx", d.CacheVolume("nx-cache")).
- WithEnvVariable("HOST", grafanaHost).
- WithEnvVariable("PORT", fmt.Sprint(grafanaPort)).
+ WithEnvVariable("CI", "true").
+ WithEnvVariable("GRAFANA_URL", fmt.Sprintf("http://%s:%d", grafanaHost, grafanaPort)).
WithServiceBinding(grafanaHost, opts.GrafanaService).
WithEnvVariable("bustcache", "1").
WithEnvVariable("PLAYWRIGHT_HTML_OPEN", "never").
diff --git a/pkg/build/e2e-playwright/main.go b/pkg/build/e2e-playwright/main.go
index 09384c8614b..0a0c2cb62bb 100644
--- a/pkg/build/e2e-playwright/main.go
+++ b/pkg/build/e2e-playwright/main.go
@@ -12,7 +12,6 @@ import (
)
var (
- grafanaHost = "grafana"
grafanaPort = 3001
)
diff --git a/playwright.config.ts b/playwright.config.ts
index 648e464f387..94281dbd2d8 100644
--- a/playwright.config.ts
+++ b/playwright.config.ts
@@ -5,6 +5,7 @@ import { PluginOptions } from '@grafana/plugin-e2e';
const testDirRoot = 'e2e-playwright';
const pluginDirRoot = path.join(testDirRoot, 'plugin-e2e');
+const DEFAULT_URL = 'http://localhost:3001';
export default defineConfig({
fullyParallel: true,
@@ -16,7 +17,7 @@ export default defineConfig({
['html'], // pretty
],
use: {
- baseURL: `http://${process.env.HOST || 'localhost'}:${process.env.PORT || 3000}`,
+ baseURL: process.env.GRAFANA_URL ?? DEFAULT_URL,
trace: 'retain-on-failure',
httpCredentials: {
username: 'admin',
@@ -26,6 +27,14 @@ export default defineConfig({
permissions: ['clipboard-read', 'clipboard-write'],
provisioningRootDir: path.join(process.cwd(), process.env.PROV_DIR ?? 'conf/provisioning'),
},
+ ...(!process.env.GRAFANA_URL && {
+ webServer: {
+ command: 'yarn e2e:plugin:build && ./e2e-playwright/start-server',
+ url: DEFAULT_URL,
+ stdout: 'pipe',
+ stderr: 'pipe',
+ },
+ }),
projects: [
// Login to Grafana with admin user and store the cookie on disk for use in other tests
{
diff --git a/scripts/drone/steps/lib.star b/scripts/drone/steps/lib.star
index 63175726fd5..746c183767e 100644
--- a/scripts/drone/steps/lib.star
+++ b/scripts/drone/steps/lib.star
@@ -834,7 +834,7 @@ def playwright_e2e_tests_step():
"commands": [
"npx wait-on@7.0.1 http://$HOST:$PORT",
"yarn playwright install --with-deps chromium",
- "yarn e2e:playwright --grep @plugins",
+ "GRAFANA_URL=http://$HOST:$PORT yarn e2e:playwright --grep @plugins",
],
}
From 4e6730fee6d274c6ab26592af67877fbb0775f2d Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 18 Jul 2025 16:25:45 +0000
Subject: [PATCH 42/46] Update dependency marked to v16.1.1 (#108334)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 2 +-
packages/grafana-data/package.json | 2 +-
yarn.lock | 12 ++++++------
3 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/package.json b/package.json
index 5e8f3084e4c..6ad37c2a39d 100644
--- a/package.json
+++ b/package.json
@@ -359,7 +359,7 @@
"lru-cache": "11.1.0",
"lru-memoize": "^1.1.0",
"lucene": "^2.1.1",
- "marked": "16.1.0",
+ "marked": "16.1.1",
"memoize-one": "6.0.0",
"micro-memoize": "^4.1.2",
"ml-regression-polynomial": "^3.0.0",
diff --git a/packages/grafana-data/package.json b/packages/grafana-data/package.json
index 6f0d719075a..c8d69ea0962 100644
--- a/packages/grafana-data/package.json
+++ b/packages/grafana-data/package.json
@@ -68,7 +68,7 @@
"fast_array_intersect": "1.1.0",
"history": "4.10.1",
"lodash": "4.17.21",
- "marked": "16.1.0",
+ "marked": "16.1.1",
"marked-mangle": "1.1.11",
"moment": "2.30.1",
"moment-timezone": "0.5.47",
diff --git a/yarn.lock b/yarn.lock
index adb95b23bd1..1fcd0835152 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3121,7 +3121,7 @@ __metadata:
fast_array_intersect: "npm:1.1.0"
history: "npm:4.10.1"
lodash: "npm:4.17.21"
- marked: "npm:16.1.0"
+ marked: "npm:16.1.1"
marked-mangle: "npm:1.1.11"
moment: "npm:2.30.1"
moment-timezone: "npm:0.5.47"
@@ -18064,7 +18064,7 @@ __metadata:
lru-cache: "npm:11.1.0"
lru-memoize: "npm:^1.1.0"
lucene: "npm:^2.1.1"
- marked: "npm:16.1.0"
+ marked: "npm:16.1.1"
memoize-one: "npm:6.0.0"
micro-memoize: "npm:^4.1.2"
mini-css-extract-plugin: "npm:2.9.2"
@@ -22042,12 +22042,12 @@ __metadata:
languageName: node
linkType: hard
-"marked@npm:16.1.0":
- version: 16.1.0
- resolution: "marked@npm:16.1.0"
+"marked@npm:16.1.1":
+ version: 16.1.1
+ resolution: "marked@npm:16.1.1"
bin:
marked: bin/marked.js
- checksum: 10/f72704b5c2fc25173331c3176a7f5139ae0d5ff55ce8cb547ab4d32527ce064174343145901df5f34f410aed08fa0462d7c5570f232a5325fb536437d9f2bcde
+ checksum: 10/9f4d2d8f862e1d874f03f1b8614fbf859ae788b4a1b4174be83a65c8ea5ecabf0c991c455dcb6b650e7106fb5b65a94865b9de45667bb2471ca2272e1798971d
languageName: node
linkType: hard
From 7626508842f3a1491063368d38416b4cec7ae6fe Mon Sep 17 00:00:00 2001
From: Paul Marbach
Date: Fri, 18 Jul 2025 12:27:04 -0400
Subject: [PATCH 43/46] Table: Update e2e tests to support tableNextGen
(#108184)
* Table: Force tableNextGen to be true for Playwright and false for Cypress
* RDG query for body text contains the headers too
* add some simple tests for row height
* dial in the row height test a little more
* more updates
* filters, pagination
* try this on CI
* more updates to the tests
* more tests
* wait for some sort stuff to flush
* replace class selectors for rdg
* target the click to the anchor in the header
---
.betterer.results | 2 +-
apps/iam/pkg/apis/iam_manifest.go | 2 -
.../panel-table/table_kitchen_sink.json | 465 ++++++++++++++++++
devenv/jsonnet/dev-dashboards.libsonnet | 1 +
.../dashboard-browse-nested.spec.ts | 8 +-
.../dashboard-live-streaming.spec.ts | 18 +-
...eomap-spatial-operations-transform.spec.ts | 21 +-
.../panels-suite/panelEdit_base.spec.ts | 8 +-
.../panels-suite/table-kitchenSink.spec.ts | 331 +++++++++++++
.../panels-suite/table-sparkline.spec.ts | 29 ++
.../as-admin-user/panelEditPage.spec.ts | 12 +-
.../visualization-suggestions.spec.ts | 10 +-
.../dashboard-live-streaming.spec.ts | 2 +-
.../dashboard-live-streaming.spec.ts | 2 +-
...eomap-spatial-operations-transform.spec.ts | 8 +-
.../panels-suite/panelEdit_base.spec.ts | 2 +-
.../visualization-suggestions.spec.ts | 2 +-
...eomap-spatial-operations-transform.spec.ts | 8 +-
e2e/panels-suite/panelEdit_base.spec.ts | 2 +-
.../visualization-suggestions.spec.ts | 2 +-
.../src/selectors/components.ts | 13 +
.../Table/TableNG/Filter/Filter.tsx | 2 +
.../Table/TableNG/Filter/FilterList.tsx | 6 +-
.../Table/TableNG/Filter/FilterPopup.tsx | 7 +-
.../table/table-new/PaginationEditor.tsx | 9 +-
.../table-new/cells/AutoCellOptionsEditor.tsx | 12 +-
.../ColorBackgroundCellOptionsEditor.tsx | 29 +-
public/locales/en-US/grafana.json | 1 -
28 files changed, 953 insertions(+), 61 deletions(-)
create mode 100644 devenv/dev-dashboards/panel-table/table_kitchen_sink.json
create mode 100644 e2e-playwright/panels-suite/table-kitchenSink.spec.ts
create mode 100644 e2e-playwright/panels-suite/table-sparkline.spec.ts
diff --git a/.betterer.results b/.betterer.results
index 3a9f3dec643..0cdc8d5136e 100644
--- a/.betterer.results
+++ b/.betterer.results
@@ -3895,7 +3895,7 @@ exports[`better eslint`] = {
"public/app/plugins/panel/table/table-new/cells/ColorBackgroundCellOptionsEditor.tsx:5381": [
[0, 0, 0, "Add noMargin prop to Field components to remove built-in margins. Use layout components like Stack or Grid with the gap prop instead for consistent spacing.", "0"],
[0, 0, 0, "Add noMargin prop to Field components to remove built-in margins. Use layout components like Stack or Grid with the gap prop instead for consistent spacing.", "1"],
- [0, 0, 0, "Add noMargin prop to Field components to remove built-in margins. Use layout components like Stack or Grid with the gap prop instead for consistent spacing.", "2"]
+ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "2"]
],
"public/app/plugins/panel/table/table-new/cells/ImageCellOptionsEditor.tsx:5381": [
[0, 0, 0, "Add noMargin prop to Field components to remove built-in margins. Use layout components like Stack or Grid with the gap prop instead for consistent spacing.", "0"],
diff --git a/apps/iam/pkg/apis/iam_manifest.go b/apps/iam/pkg/apis/iam_manifest.go
index 2ae327f76e6..7d62b0245a4 100644
--- a/apps/iam/pkg/apis/iam_manifest.go
+++ b/apps/iam/pkg/apis/iam_manifest.go
@@ -14,8 +14,6 @@ import (
v0alpha1 "github.com/grafana/grafana/apps/iam/pkg/apis/iam/v0alpha1"
)
-var ()
-
var appManifestData = app.ManifestData{
AppName: "iam",
Group: "iam.grafana.app",
diff --git a/devenv/dev-dashboards/panel-table/table_kitchen_sink.json b/devenv/dev-dashboards/panel-table/table_kitchen_sink.json
new file mode 100644
index 00000000000..6123deb638d
--- /dev/null
+++ b/devenv/dev-dashboards/panel-table/table_kitchen_sink.json
@@ -0,0 +1,465 @@
+{
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": {
+ "type": "grafana",
+ "uid": "-- Grafana --"
+ },
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0, 211, 255, 1)",
+ "name": "Annotations & Alerts",
+ "type": "dashboard"
+ }
+ ]
+ },
+ "editable": true,
+ "fiscalYearStartMonth": 0,
+ "graphTooltip": 0,
+ "id": 138,
+ "links": [],
+ "panels": [
+ {
+ "datasource": {
+ "type": "grafana-testdata-datasource",
+ "uid": "PD8C576611E62080A"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "custom": {
+ "align": "auto",
+ "cellOptions": {
+ "type": "auto",
+ "wrapText": false
+ },
+ "filterable": true,
+ "inspect": false,
+ "wrapHeaderText": false
+ },
+ "fieldMinMax": true,
+ "links": [],
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": 0
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "A"
+ },
+ "properties": [
+ {
+ "id": "custom.cellOptions",
+ "value": {
+ "mode": "lcd",
+ "type": "gauge"
+ }
+ },
+ {
+ "id": "min",
+ "value": 0
+ },
+ {
+ "id": "max",
+ "value": 100
+ },
+ {
+ "id": "custom.width",
+ "value": 300
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Info"
+ },
+ "properties": [
+ {
+ "id": "links",
+ "value": [
+ {
+ "targetBlank": true,
+ "title": "Google this term",
+ "url": "https://google.com/search?q=${__value:percentencode}"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Min"
+ },
+ "properties": []
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Max"
+ },
+ "properties": []
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "State"
+ },
+ "properties": []
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Time"
+ },
+ "properties": [
+ {
+ "id": "custom.cellOptions",
+ "value": {
+ "type": "auto"
+ }
+ },
+ {
+ "id": "unit",
+ "value": "dateTimeFromNow"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Image"
+ },
+ "properties": [
+ {
+ "id": "custom.cellOptions",
+ "value": {
+ "alt": "${__value}",
+ "type": "image"
+ }
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/(Time|Min|Max|Info|State|Image)/"
+ },
+ "properties": [
+ {
+ "id": "custom.width",
+ "value": 110
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Info"
+ },
+ "properties": [
+ {
+ "id": "custom.cellOptions",
+ "value": {
+ "type": "color-text"
+ }
+ },
+ {
+ "id": "mappings",
+ "value": [
+ {
+ "options": {
+ "pattern": "up",
+ "result": {
+ "color": "green",
+ "index": 0
+ }
+ },
+ "type": "regex"
+ },
+ {
+ "options": {
+ "pattern": "down",
+ "result": {
+ "color": "red",
+ "index": 1
+ }
+ },
+ "type": "regex"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Min"
+ },
+ "properties": [
+ {
+ "id": "custom.cellOptions",
+ "value": {
+ "mode": "basic",
+ "type": "color-background"
+ }
+ },
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "blue",
+ "mode": "continuous-YlRd"
+ }
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Max"
+ },
+ "properties": [
+ {
+ "id": "custom.cellOptions",
+ "value": {
+ "mode": "gradient",
+ "type": "color-background"
+ }
+ },
+ {
+ "id": "color",
+ "value": {
+ "mode": "continuous-purples"
+ }
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "State"
+ },
+ "properties": [
+ {
+ "id": "displayName",
+ "value": "State"
+ },
+ {
+ "id": "custom.hidden",
+ "value": true
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Long Text"
+ },
+ "properties": [
+ {
+ "id": "custom.cellOptions",
+ "value": {
+ "type": "auto",
+ "wrapText": true
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 18,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 1,
+ "options": {
+ "cellHeight": "sm",
+ "footer": {
+ "countRows": false,
+ "enablePagination": false,
+ "fields": "",
+ "reducer": [
+ "max"
+ ],
+ "show": true
+ },
+ "frameIndex": 0,
+ "showHeader": true,
+ "sortBy": []
+ },
+ "pluginVersion": "12.1.0-pre",
+ "targets": [
+ {
+ "datasource": {
+ "type": "grafana-testdata-datasource",
+ "uid": "PD8C576611E62080A"
+ },
+ "refId": "A",
+ "scenarioId": "random_walk_table"
+ },
+ {
+ "csvContent": "Info,Image,Long Text\ndown,https://placecats.com/millie/300/300,\"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse tempus et augue et lacinia. Interdum et malesuada fames ac ante ipsum primis in faucibus. Donec eu pretium tortor. Cras venenatis sapien sed mauris gravida, ut scelerisque est fringilla. Cras lorem diam, facilisis nec malesuada in, vulputate vel enim. Etiam fringilla nisi quis felis blandit tincidunt. Cras id lacus ornare, ullamcorper nisl eget, bibendum odio. Pellentesque imperdiet, leo a imperdiet venenatis, ligula risus venenatis quam, vel euismod magna nisi sit amet leo.\"\nup,https://placecats.com/neo/300/300,\"Sed imperdiet eget diam sit amet fringilla. Curabitur quis lacus blandit, mollis diam non, accumsan tortor. Aliquam ac tellus eget dui facilisis tempor eu id nulla. Maecenas ultrices turpis eu elementum imperdiet. Fusce eget rhoncus mi, et egestas lectus. Mauris facilisis auctor enim sed malesuada. Maecenas placerat ultricies metus vitae viverra. In hac habitasse platea dictumst. Mauris ipsum nisl, dictum eu aliquam eleifend, rutrum id orci. Nullam eget dui et odio eleifend porttitor.\"\nup fast,https://placecats.com/bella/300/300,\"Proin ac libero vulputate ex vulputate pharetra ut vel lacus. Phasellus quis dolor sed leo finibus scelerisque. Ut vel finibus leo, sed viverra ipsum. Suspendisse vitae rutrum arcu. Donec sed tellus vel lectus bibendum vestibulum. Sed eu felis non velit dictum pulvinar eu et leo. Aenean et dignissim arcu. Nam luctus at neque quis efficitur. Fusce tempus at nibh a imperdiet. Nullam malesuada ac magna at facilisis. Duis pretium aliquam eros. Donec pharetra dignissim dolor non bibendum. Ut gravida mi id urna tempus, at ullamcorper felis vulputate. Duis congue augue ex, sed finibus leo ornare ut. Mauris non quam sodales, dignissim lorem eget, tincidunt mauris. Aliquam ut velit auctor, vestibulum metus sed, mollis massa.\"\ndown fast,https://placecats.com/neo_2/300/300,\"Nullam in pulvinar justo. Nunc dictum arcu ac pellentesque bibendum. Sed in erat turpis. Vestibulum eu orci ac ligula lobortis tempus. Fusce consectetur feugiat magna, eu tempor nibh vestibulum ac. Aliquam erat volutpat. Vivamus sit amet viverra enim. Quisque mollis odio nulla, nec vulputate sem placerat in. Etiam dolor sapien, pulvinar in accumsan at, consequat eget nisi. Nunc condimentum neque magna, congue consectetur dui efficitur interdum. Nam lobortis fringilla maximus. Vestibulum eu dui a velit condimentum eleifend consequat nec lectus.\"",
+ "datasource": {
+ "type": "grafana-testdata-datasource",
+ "uid": "PD8C576611E62080A"
+ },
+ "refId": "B",
+ "scenarioId": "csv_content"
+ }
+ ],
+ "title": "Table - Kitchen Sink",
+ "transformations": [
+ {
+ "id": "joinByField",
+ "options": {
+ "byField": "Info",
+ "mode": "outerTabular"
+ }
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "A": false
+ },
+ "includeByName": {},
+ "indexByName": {
+ "A": 7,
+ "Image": 5,
+ "Info": 1,
+ "Long Text": 6,
+ "Max A": 3,
+ "Min A": 2,
+ "State A": 4,
+ "Time A": 0
+ },
+ "orderBy": [],
+ "orderByMode": "manual",
+ "renameByName": {
+ "A": "Gauge",
+ "Info": "",
+ "Max A": "Max",
+ "Min A": "Min",
+ "State A": "State",
+ "Time": "Some really long title that requires wrapping",
+ "Time A": "Time",
+ "img_url": "Cat"
+ }
+ }
+ }
+ ],
+ "type": "table"
+ },
+ {
+ "id": 2,
+ "type": "table",
+ "title": "Empty Table Panel",
+ "gridPos": {
+ "x": 0,
+ "y": 0,
+ "h": 6,
+ "w": 24
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "align": "auto",
+ "cellOptions": {
+ "type": "auto"
+ },
+ "inspect": false,
+ "wrapHeaderText": false
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "value": null,
+ "color": "green"
+ },
+ {
+ "value": 80,
+ "color": "red"
+ }
+ ]
+ },
+ "color": {
+ "mode": "thresholds"
+ }
+ },
+ "overrides": []
+ },
+ "pluginVersion": "12.1.0-pre",
+ "targets": [
+ {
+ "scenarioId": "csv_content",
+ "refId": "A",
+ "csvContent": "a,b,c"
+ }
+ ],
+ "datasource": {
+ "uid": "PD8C576611E62080A",
+ "type": "grafana-testdata-datasource"
+ },
+ "options": {
+ "showHeader": true,
+ "cellHeight": "sm",
+ "footer": {
+ "show": false,
+ "reducer": [
+ "sum"
+ ],
+ "countRows": false,
+ "fields": ""
+ }
+ }
+ }
+ ],
+ "preload": false,
+ "schemaVersion": 41,
+ "tags": [],
+ "templating": {
+ "list": [
+ {
+ "baseFilters": [],
+ "datasource": {
+ "type": "grafana-testdata-datasource",
+ "uid": "PD8C576611E62080A"
+ },
+ "filters": [],
+ "name": "Filters",
+ "type": "adhoc"
+ }
+ ]
+ },
+ "time": {
+ "from": "now-6h",
+ "to": "now"
+ },
+ "timepicker": {},
+ "timezone": "",
+ "title": "Panel Tests - Table - Kitchen Sink",
+ "uid": "dcb9f5e9-8066-4397-889e-864b99555dbb",
+ "version": 1
+}
diff --git a/devenv/jsonnet/dev-dashboards.libsonnet b/devenv/jsonnet/dev-dashboards.libsonnet
index e25bdeeed09..d16f9b96c84 100644
--- a/devenv/jsonnet/dev-dashboards.libsonnet
+++ b/devenv/jsonnet/dev-dashboards.libsonnet
@@ -93,6 +93,7 @@
"rows-to-fields": (import '../dev-dashboards/transforms/rows-to-fields.json'),
"shared_queries": (import '../dev-dashboards/panel-common/shared_queries.json'),
"slow_queries_and_annotations": (import '../dev-dashboards/scenarios/slow_queries_and_annotations.json'),
+ "table_kitchen_sink": (import '../dev-dashboards/panel-table/table_kitchen_sink.json'),
"table_pagination": (import '../dev-dashboards/panel-table/table_pagination.json'),
"table_sparkline_cell": (import '../dev-dashboards/panel-table/table_sparkline_cell.json'),
"table_tests": (import '../dev-dashboards/panel-table/table_tests.json'),
diff --git a/e2e-playwright/dashboards-suite/dashboard-browse-nested.spec.ts b/e2e-playwright/dashboards-suite/dashboard-browse-nested.spec.ts
index 7f88e462deb..7dfbf455176 100644
--- a/e2e-playwright/dashboards-suite/dashboard-browse-nested.spec.ts
+++ b/e2e-playwright/dashboards-suite/dashboard-browse-nested.spec.ts
@@ -7,6 +7,12 @@ const NUM_ROOT_DASHBOARDS = 60;
const NUM_NESTED_FOLDERS = 60;
const NUM_NESTED_DASHBOARDS = 60;
+test.use({
+ featureToggles: {
+ tableNextGen: true,
+ },
+});
+
// TODO change this test so it doesn't conflict with the existing dashboard browse test
// probably needs a separate user
test.describe.skip(
@@ -101,7 +107,7 @@ test.describe.skip(
await expect(page.getByText('Nested folder 00')).toBeVisible();
// Get the table body container for scrolling
- const tableBody = page.getByTestId(selectors.pages.BrowseDashboards.table.body).locator('> div');
+ const tableBody = page.getByRole('grid');
// Scroll the page and check visibility of next set of items
await tableBody.evaluate((el) => el.scrollTo(0, 2100));
diff --git a/e2e-playwright/dashboards-suite/dashboard-live-streaming.spec.ts b/e2e-playwright/dashboards-suite/dashboard-live-streaming.spec.ts
index 79ae94c5e96..dcebf98884d 100644
--- a/e2e-playwright/dashboards-suite/dashboard-live-streaming.spec.ts
+++ b/e2e-playwright/dashboards-suite/dashboard-live-streaming.spec.ts
@@ -2,6 +2,12 @@ import { test, expect } from '@grafana/plugin-e2e';
import testDashboard from '../dashboards/DashboardLiveTest.json';
+test.use({
+ featureToggles: {
+ tableNextGen: true,
+ },
+});
+
test.describe(
'Dashboard Live streaming support',
{
@@ -31,18 +37,10 @@ test.describe(
}
});
- test('Should receive streaming data', async ({ gotoDashboardPage, selectors }) => {
+ test('Should receive streaming data', async ({ gotoDashboardPage, selectors, page }) => {
const dashboardPage = await gotoDashboardPage({ uid: dashboardUID });
await expect(dashboardPage.getByGrafanaSelector(selectors.components.Panels.Panel.title('Live'))).toBeVisible();
- await expect
- .poll(
- async () =>
- await dashboardPage
- .getByGrafanaSelector(selectors.components.Panels.Visualization.Table.body)
- .getByRole('row')
- .count()
- )
- .toBeGreaterThan(5);
+ await expect.poll(async () => await page.getByRole('grid').getByRole('row').count()).toBeGreaterThan(5);
});
}
);
diff --git a/e2e-playwright/panels-suite/geomap-spatial-operations-transform.spec.ts b/e2e-playwright/panels-suite/geomap-spatial-operations-transform.spec.ts
index 10df0887a0f..dc625ea4adc 100644
--- a/e2e-playwright/panels-suite/geomap-spatial-operations-transform.spec.ts
+++ b/e2e-playwright/panels-suite/geomap-spatial-operations-transform.spec.ts
@@ -2,13 +2,19 @@ import { test, expect } from '@grafana/plugin-e2e';
const DASHBOARD_ID = 'P2jR04WVk';
+test.use({
+ featureToggles: {
+ tableNextGen: true,
+ },
+});
+
test.describe(
'Panels test: Geomap spatial operations',
{
tag: ['@panels'],
},
() => {
- test('Tests location auto option', async ({ gotoDashboardPage, selectors }) => {
+ test('Tests location auto option', async ({ gotoDashboardPage, selectors, page }) => {
const dashboardPage = await gotoDashboardPage({
uid: DASHBOARD_ID,
queryParams: new URLSearchParams({ editPanel: '1' }),
@@ -40,12 +46,12 @@ test.describe(
await locationInput.press('Enter');
await dashboardPage.getByGrafanaSelector(selectors.components.PanelEditor.toggleTableView).click({ force: true });
- const tableHeader = dashboardPage.getByGrafanaSelector(selectors.components.Panels.Visualization.Table.header);
+ const tableHeader = page.getByRole('grid').getByRole('row').first();
await expect(tableHeader).toBeVisible();
await expect(tableHeader.getByText('Point')).toBeVisible();
});
- test('Tests location coords option', async ({ gotoDashboardPage, dashboardPage, selectors }) => {
+ test('Tests location coords option', async ({ gotoDashboardPage, dashboardPage, selectors, page }) => {
await gotoDashboardPage({ uid: DASHBOARD_ID, queryParams: new URLSearchParams({ editPanel: '1' }) });
await dashboardPage.getByGrafanaSelector(selectors.components.Tab.title('Transformations')).click();
@@ -90,7 +96,7 @@ test.describe(
await longitudeInput.press('Enter');
await dashboardPage.getByGrafanaSelector(selectors.components.PanelEditor.toggleTableView).click({ force: true });
- const tableHeader = dashboardPage.getByGrafanaSelector(selectors.components.Panels.Visualization.Table.header);
+ const tableHeader = page.getByRole('grid').getByRole('row').first();
await expect(tableHeader).toBeVisible();
await expect(tableHeader.getByText('Point')).toBeVisible();
});
@@ -99,6 +105,7 @@ test.describe(
gotoDashboardPage,
dashboardPage,
selectors,
+ page,
}) => {
await gotoDashboardPage({ uid: DASHBOARD_ID, queryParams: new URLSearchParams({ editPanel: '1' }) });
@@ -136,12 +143,12 @@ test.describe(
await geohashFieldInput.press('Enter');
await dashboardPage.getByGrafanaSelector(selectors.components.PanelEditor.toggleTableView).click({ force: true });
- const tableHeader = dashboardPage.getByGrafanaSelector(selectors.components.Panels.Visualization.Table.header);
+ const tableHeader = page.getByRole('grid').getByRole('row').first();
await expect(tableHeader).toBeVisible();
await expect(tableHeader.getByText('State 1')).toBeVisible();
});
- test('Tests location lookup option', async ({ gotoDashboardPage, dashboardPage, selectors }) => {
+ test('Tests location lookup option', async ({ gotoDashboardPage, dashboardPage, selectors, page }) => {
await gotoDashboardPage({ uid: DASHBOARD_ID, queryParams: new URLSearchParams({ editPanel: '1' }) });
await dashboardPage.getByGrafanaSelector(selectors.components.Tab.title('Transformations')).click();
@@ -186,7 +193,7 @@ test.describe(
await gazetteerFieldInput.press('Enter');
await dashboardPage.getByGrafanaSelector(selectors.components.PanelEditor.toggleTableView).click({ force: true });
- const tableHeader = dashboardPage.getByGrafanaSelector(selectors.components.Panels.Visualization.Table.header);
+ const tableHeader = page.getByRole('grid').getByRole('row').first();
await expect(tableHeader).toBeVisible();
await expect(tableHeader.getByText('Geometry')).toBeVisible();
});
diff --git a/e2e-playwright/panels-suite/panelEdit_base.spec.ts b/e2e-playwright/panels-suite/panelEdit_base.spec.ts
index 66584d0387b..da98e8089f5 100644
--- a/e2e-playwright/panels-suite/panelEdit_base.spec.ts
+++ b/e2e-playwright/panels-suite/panelEdit_base.spec.ts
@@ -2,6 +2,12 @@ import { test, expect } from '@grafana/plugin-e2e';
const PANEL_UNDER_TEST = 'Lines 500 data points';
+test.use({
+ featureToggles: {
+ tableNextGen: true,
+ },
+});
+
test.describe(
'Panels test: Panel edit base',
{
@@ -65,7 +71,7 @@ test.describe(
// Check that table view works
await expect(dashboardPage.getByGrafanaSelector(selectors.components.Panels.Panel.loadingBar(''))).toHaveCount(0);
await dashboardPage.getByGrafanaSelector(selectors.components.PanelEditor.toggleTableView).click({ force: true });
- const tableHeader = dashboardPage.getByGrafanaSelector(selectors.components.Panels.Visualization.Table.header);
+ const tableHeader = page.getByRole('grid').getByRole('row').first();
await expect(tableHeader).toBeVisible();
await expect(tableHeader.getByText('A-series')).toBeVisible();
diff --git a/e2e-playwright/panels-suite/table-kitchenSink.spec.ts b/e2e-playwright/panels-suite/table-kitchenSink.spec.ts
new file mode 100644
index 00000000000..29fea517fae
--- /dev/null
+++ b/e2e-playwright/panels-suite/table-kitchenSink.spec.ts
@@ -0,0 +1,331 @@
+import { Page, Locator } from '@playwright/test';
+
+import { test, expect } from '@grafana/plugin-e2e';
+
+test.use({
+ viewport: { width: 1600, height: 1080 },
+ featureToggles: {
+ tableNextGen: true,
+ },
+});
+
+// helper utils
+const getCell = async (loc: Page | Locator, rowIdx: number, colIdx: number) =>
+ loc
+ .getByRole('row')
+ .nth(rowIdx)
+ .getByRole(rowIdx === 0 ? 'columnheader' : 'gridcell')
+ .nth(colIdx);
+
+const getCellHeight = async (loc: Page | Locator, rowIdx: number, colIdx: number) => {
+ const cell = await getCell(loc, rowIdx, colIdx);
+ return (await cell.boundingBox())?.height ?? 0;
+};
+
+test.describe(
+ 'Panels test: Table - Kitchen Sink',
+ {
+ tag: ['@panels'],
+ },
+ () => {
+ test('Tests word wrap, hover overflow, and cell inspect', async ({ gotoDashboardPage, selectors, page }) => {
+ const dashboardPage = await gotoDashboardPage({
+ uid: 'dcb9f5e9-8066-4397-889e-864b99555dbb',
+ queryParams: new URLSearchParams({ editPanel: '1' }),
+ });
+
+ await expect(
+ dashboardPage.getByGrafanaSelector(selectors.components.Panels.Panel.title('Table - Kitchen Sink'))
+ ).toBeVisible();
+
+ // text wrapping is enabled by default on this panel.
+ await expect(getCellHeight(page, 1, 5)).resolves.toBeGreaterThan(100);
+
+ // toggle the lorem ipsum column's wrap text toggle and confirm that the height shrinks.
+ await dashboardPage
+ .getByGrafanaSelector(selectors.components.PanelEditor.OptionsPane.fieldLabel('Wrap text'))
+ .last()
+ .click();
+ await expect(getCellHeight(page, 1, 5)).resolves.toBeLessThan(100);
+
+ // test that hover overflow works.
+ const loremIpsumCell = await getCell(page, 1, 5);
+ await loremIpsumCell.hover();
+ await expect(getCellHeight(page, 1, 5)).resolves.toBeGreaterThan(100);
+ await (await getCell(page, 1, 6)).hover();
+ await expect(getCellHeight(page, 1, 5)).resolves.toBeLessThan(100);
+
+ // enable cell inspect, confirm that hover no longer triggers.
+ await dashboardPage
+ .getByGrafanaSelector(
+ selectors.components.PanelEditor.OptionsPane.fieldLabel('Cell options Cell value inspect')
+ )
+ .first()
+ .locator('label[for="custom.inspect"]')
+ .click();
+ await loremIpsumCell.hover();
+ await expect(getCellHeight(page, 1, 5)).resolves.toBeLessThan(100);
+
+ // click cell inspect, check that cell inspection pops open in the side as we'd expect.
+ await loremIpsumCell.getByLabel('Inspect value').click();
+ const loremIpsumText = await loremIpsumCell.textContent();
+ expect(loremIpsumText).toBeDefined();
+ await expect(page.getByRole('dialog').getByText(loremIpsumText!)).toBeVisible();
+ });
+
+ test('Tests visibility and display name via overrides', async ({ gotoDashboardPage, selectors, page }) => {
+ const dashboardPage = await gotoDashboardPage({
+ uid: 'dcb9f5e9-8066-4397-889e-864b99555dbb',
+ queryParams: new URLSearchParams({ editPanel: '1' }),
+ });
+
+ await expect(
+ dashboardPage.getByGrafanaSelector(selectors.components.Panels.Panel.title('Table - Kitchen Sink'))
+ ).toBeVisible();
+
+ // confirm that "State" column is hidden by default.
+ expect(page.getByRole('row').nth(0)).not.toContainText('State');
+
+ // toggle the "State" column visibility and test that it appears before re-hiding it.
+ // FIXME this selector is utterly godawful, but there's no way to give testIds or aria-labels or anything to
+ // the panel editor builder. we should fix that to make e2e's easier to write for our team.
+ const hideStateColumnSwitch = page.locator('[id="Override 12"]').locator('label').last();
+ await hideStateColumnSwitch.click();
+ expect(page.getByRole('row').nth(0)).toContainText('State');
+
+ // now change the display name of the "State" column.
+ // FIXME it would be good to have a better selector here too.
+ const displayNameInput = page.locator('[id="Override 12"]').locator('input[value="State"]').last();
+ await displayNameInput.fill('State (renamed)');
+ await displayNameInput.press('Enter');
+ expect(page.getByRole('row').nth(0)).toContainText('State (renamed)');
+ });
+
+ // we test niche cases for sorting, filtering, pagination, etc. in a unit tests already.
+ // we mainly want to test the happiest paths for these in e2es as well to check for integration
+ // issues, but the unit tests can confirm that the internal logic works as expected much more quickly and thoroughly.
+ // hashtag testing pyramid.
+ test('Tests sorting by column', async ({ gotoDashboardPage, selectors, page }) => {
+ const dashboardPage = await gotoDashboardPage({
+ uid: 'dcb9f5e9-8066-4397-889e-864b99555dbb',
+ queryParams: new URLSearchParams({ editPanel: '1' }),
+ });
+
+ await expect(
+ dashboardPage.getByGrafanaSelector(selectors.components.Panels.Panel.title('Table - Kitchen Sink'))
+ ).toBeVisible();
+
+ // click the "State" column header to sort it.
+ const stateColumnHeader = await getCell(page, 0, 1);
+
+ await stateColumnHeader.getByText('Info').click();
+ await expect(stateColumnHeader).toHaveAttribute('aria-sort', 'ascending');
+ expect(getCell(page, 1, 1)).resolves.toContainText('down'); // down or down fast
+
+ await stateColumnHeader.getByText('Info').click();
+ await expect(stateColumnHeader).toHaveAttribute('aria-sort', 'descending');
+ expect(getCell(page, 1, 1)).resolves.toContainText('up'); // up or up fast
+
+ await stateColumnHeader.getByText('Info').click();
+ await expect(stateColumnHeader).not.toHaveAttribute('aria-sort');
+ });
+
+ test('Tests filtering within a column', async ({ gotoDashboardPage, selectors, page }) => {
+ const dashboardPage = await gotoDashboardPage({
+ uid: 'dcb9f5e9-8066-4397-889e-864b99555dbb',
+ queryParams: new URLSearchParams({ editPanel: '1' }),
+ });
+
+ await expect(
+ dashboardPage.getByGrafanaSelector(selectors.components.Panels.Panel.title('Table - Kitchen Sink'))
+ ).toBeVisible();
+
+ const stateColumnHeader = page.getByRole('columnheader').filter({ hasText: 'Info' });
+
+ // get the first value in the "State" column, filter it out, then check that it went away.
+ const firstStateValue = (await (await getCell(page, 1, 1)).textContent())!;
+ await stateColumnHeader
+ .getByTestId(selectors.components.Panels.Visualization.TableNG.Filters.HeaderButton)
+ .click();
+ const filterContainer = dashboardPage.getByGrafanaSelector(
+ selectors.components.Panels.Visualization.TableNG.Filters.Container
+ );
+
+ await expect(filterContainer).toBeVisible();
+
+ // select all, then click the first value to unselect it, filtering it out.
+ await filterContainer.getByTestId(selectors.components.Panels.Visualization.TableNG.Filters.SelectAll).click();
+ await filterContainer.getByTitle(firstStateValue, { exact: true }).locator('label').click();
+ await filterContainer.getByRole('button', { name: 'Ok' }).click();
+
+ // make sure the filter container closed when we clicked "Ok".
+ await expect(filterContainer).not.toBeVisible();
+
+ // did it actually filter out our value?
+ await expect(getCell(page, 1, 1)).resolves.not.toHaveText(firstStateValue);
+ });
+
+ test('Tests pagination, row height adjustment', async ({ gotoDashboardPage, selectors, page }) => {
+ const rowRe = /([\d]+) - ([\d]+) of ([\d]+) rows/;
+ const getRowStatus = async (page: Page | Locator) => {
+ const text = (await page.getByText(rowRe).textContent()) ?? '';
+ const match = text.match(rowRe);
+ return {
+ start: parseInt(match?.[1] ?? '0', 10),
+ end: parseInt(match?.[2] ?? '0', 10),
+ total: parseInt(match?.[3] ?? '0', 10),
+ };
+ };
+
+ const dashboardPage = await gotoDashboardPage({
+ uid: 'dcb9f5e9-8066-4397-889e-864b99555dbb',
+ queryParams: new URLSearchParams({ editPanel: '1' }),
+ });
+
+ await expect(
+ dashboardPage.getByGrafanaSelector(selectors.components.Panels.Panel.title('Table - Kitchen Sink'))
+ ).toBeVisible();
+
+ await page
+ .getByLabel(selectors.components.PanelEditor.OptionsPane.fieldLabel(`Enable pagination`), { exact: true })
+ .click();
+
+ // because of text wrapping, we're guaranteed to only be showing a single row when we enable pagination.
+ await expect(page.getByText(/([\d]+) - ([\d]+) of ([\d]+) rows/)).toBeVisible();
+
+ // disable text wrap and see the number of rows.
+ await dashboardPage
+ .getByGrafanaSelector(selectors.components.PanelEditor.OptionsPane.fieldLabel('Wrap text'))
+ .last()
+ .click();
+
+ // any number of rows that is not "1" is allowed here, we don't want to police the exact number of rows that
+ // are rendered since there are tons of factors which could effect this. we do want to grab this number for comparison
+ // in a second, though.
+ const smallRowStatus = await getRowStatus(page);
+ expect(smallRowStatus.end).toBeGreaterThan(1);
+ expect(page.getByRole('grid').getByRole('row')).toHaveCount(smallRowStatus.end + 1);
+
+ // change cell height to Large
+ await dashboardPage
+ .getByGrafanaSelector(selectors.components.PanelEditor.OptionsPane.fieldLabel('Table Cell height'))
+ .locator('input')
+ .last()
+ .click();
+ const largeRowStatus = await getRowStatus(page);
+ expect(largeRowStatus.end).toBeLessThan(smallRowStatus.end);
+ expect(page.getByRole('grid').getByRole('row')).toHaveCount(largeRowStatus.end + 1);
+
+ // click a page over with the directional nav
+ await page.getByLabel('next page').click();
+ const nextPageStatus = await getRowStatus(page);
+ expect(nextPageStatus.start).toBe(largeRowStatus.end + 1);
+ expect(nextPageStatus.end).toBe(largeRowStatus.end * 2);
+ expect(nextPageStatus.total).toBe(largeRowStatus.total);
+
+ // click a page number
+ await page
+ .getByTestId('data-testid panel content')
+ .getByRole('navigation')
+ .getByText('4', { exact: true })
+ .click();
+ const fourthPageStatus = await getRowStatus(page);
+ expect(fourthPageStatus.start).toBe(largeRowStatus.end * 3 + 1);
+ expect(fourthPageStatus.end).toBe(largeRowStatus.end * 4);
+ expect(fourthPageStatus.total).toBe(largeRowStatus.total);
+ });
+
+ test('Tests DataLinks (single and multi) and actions', async ({ gotoDashboardPage, selectors, page }) => {
+ const addDataLink = async (title: string, url: string) => {
+ await dashboardPage
+ .getByGrafanaSelector(
+ selectors.components.PanelEditor.OptionsPane.fieldLabel('Data links and actions Data links')
+ )
+ .locator('button')
+ .filter({ hasText: 'Add link' })
+ .click();
+
+ // DataLinks dialog has popped open - fill it in and add a global datalink.
+ await expect(page.getByRole('dialog')).toBeVisible();
+ await page.getByRole('dialog').locator('#link-title').fill(title);
+ await page.getByRole('dialog').locator('#data-link-input [contenteditable="true"]').focus();
+ await page.getByRole('dialog').locator('#data-link-input [contenteditable="true"]').fill(url);
+ await page.getByRole('dialog').locator('#data-link-input [contenteditable="true"]').blur();
+ await page.getByRole('dialog').getByRole('button', { name: 'Save' }).click();
+ await expect(page.getByRole('dialog')).not.toBeVisible();
+ };
+
+ const dashboardPage = await gotoDashboardPage({
+ uid: 'dcb9f5e9-8066-4397-889e-864b99555dbb',
+ queryParams: new URLSearchParams({ editPanel: '1' }),
+ });
+
+ await expect(
+ dashboardPage.getByGrafanaSelector(selectors.components.Panels.Panel.title('Table - Kitchen Sink'))
+ ).toBeVisible();
+
+ // disable text wrapping for this test to make it easier to click the links, the long lorem ipsum
+ // can push the links off the screen.
+ await dashboardPage
+ .getByGrafanaSelector(selectors.components.PanelEditor.OptionsPane.fieldLabel('Wrap text'))
+ .last()
+ .click();
+
+ // Info column has a single DataLink by default.
+ const infoCell = await getCell(page, 1, 1);
+ await expect(infoCell.locator('a')).toBeVisible();
+ expect(infoCell.locator('a')).toHaveAttribute('href');
+ expect(infoCell.locator('a')).not.toHaveAttribute('aria-haspopup');
+
+ // now, add a DataLink to the whole table
+ await addDataLink('Test link', 'https://grafana.com');
+
+ // add a DataLink to the whole table, all cells will now have a single link.
+ const colCount = await page.getByRole('row').nth(1).getByRole('gridcell').count();
+ for (let colIdx = 0; colIdx < colCount; colIdx++) {
+ const cell = await getCell(page, 1, colIdx);
+ await expect(cell.locator('a')).toBeVisible();
+ expect(cell.locator('a')).toHaveAttribute('href');
+ expect(cell.locator('a')).not.toHaveAttribute('aria-haspopup', 'menu');
+ }
+
+ const headerContainer = dashboardPage.getByGrafanaSelector(selectors.components.Panels.Panel.headerContainer);
+
+ // add another data link. now we'll check that the multi-link popups work.
+ await addDataLink('Another test link', 'https://grafana.com/foo');
+
+ // loop thru the columns, click the links, observe that the tooltip appears, and close the tooltip.
+ for (let colIdx = 0; colIdx < colCount; colIdx++) {
+ const cell = await getCell(page, 1, colIdx);
+ if (colIdx === 1) {
+ // the Info column should still have its single link.
+ expect(cell.locator('a')).not.toHaveAttribute('aria-haspopup', 'menu');
+ continue;
+ }
+
+ await cell.locator('a').click({ force: true });
+ await expect(page.getByTestId(selectors.components.DataLinksActionsTooltip.tooltipWrapper)).toBeVisible();
+
+ await headerContainer.click(); // convenient just to click the header to close the tooltip.
+ await expect(page.getByTestId(selectors.components.DataLinksActionsTooltip.tooltipWrapper)).not.toBeVisible();
+ }
+
+ // add an Action to the whole table and check that the action button is added to the tooltip.
+ // TODO -- saving for another day.
+ });
+
+ test('Empty Table panel', async ({ gotoDashboardPage, selectors }) => {
+ const dashboardPage = await gotoDashboardPage({
+ uid: 'dcb9f5e9-8066-4397-889e-864b99555dbb',
+ queryParams: new URLSearchParams({ editPanel: '2' }),
+ });
+
+ await expect(
+ dashboardPage.getByGrafanaSelector(selectors.components.Panels.Panel.PanelDataErrorMessage)
+ ).toBeVisible();
+ await expect(
+ dashboardPage.getByGrafanaSelector(selectors.components.Panels.Panel.title('Table - Kitchen Sink'))
+ ).not.toBeVisible();
+ });
+ }
+);
diff --git a/e2e-playwright/panels-suite/table-sparkline.spec.ts b/e2e-playwright/panels-suite/table-sparkline.spec.ts
new file mode 100644
index 00000000000..16dc55f3df4
--- /dev/null
+++ b/e2e-playwright/panels-suite/table-sparkline.spec.ts
@@ -0,0 +1,29 @@
+import { test, expect } from '@grafana/plugin-e2e';
+
+test.use({
+ viewport: { width: 1280, height: 1080 },
+ featureToggles: {
+ tableNextGen: true,
+ },
+});
+
+test.describe(
+ 'Panels test: Table - Sparkline',
+ {
+ tag: ['@panels'],
+ },
+ () => {
+ test('Tests sparkline tables are successfully rendered', async ({ gotoDashboardPage, selectors, page }) => {
+ await gotoDashboardPage({
+ uid: 'd6373b49-1957-4f00-9218-ee2120d3ecd9',
+ queryParams: new URLSearchParams({ editPanel: '2' }),
+ });
+
+ await expect(page.getByRole('grid')).toBeVisible();
+
+ const uplotCount = await page.locator('.uplot').count();
+ const rowCount = await page.getByRole('row').count();
+ expect(uplotCount).toBe(rowCount - 1);
+ });
+ }
+);
diff --git a/e2e-playwright/plugin-e2e/plugin-e2e-api-tests/as-admin-user/panelEditPage.spec.ts b/e2e-playwright/plugin-e2e/plugin-e2e-api-tests/as-admin-user/panelEditPage.spec.ts
index 4772a9717e8..577a758d97e 100644
--- a/e2e-playwright/plugin-e2e/plugin-e2e-api-tests/as-admin-user/panelEditPage.spec.ts
+++ b/e2e-playwright/plugin-e2e/plugin-e2e-api-tests/as-admin-user/panelEditPage.spec.ts
@@ -11,6 +11,12 @@ const STANDARD_OTIONS_CATEGORY = 'Standard options';
const DISPLAY_NAME_LABEL = 'Display name';
const REACT_TABLE_DASHBOARD = { uid: 'U_bZIMRMk' };
+test.use({
+ featureToggles: {
+ tableNextGen: true,
+ },
+});
+
test.describe(
'plugin-e2e-api-tests admin',
{
@@ -53,7 +59,7 @@ test.describe(
).toHaveText(scenarios.map((s) => s.name));
});
- test('mocked query data response', async ({ panelEditPage, selectors }) => {
+ test('mocked query data response', async ({ panelEditPage, page }) => {
await panelEditPage.mockQueryDataResponse(successfulDataQuery, 200);
await panelEditPage.datasource.set('gdev-testdata');
await panelEditPage.setVisualization(TABLE_VIZ_NAME);
@@ -63,9 +69,9 @@ test.describe(
formatExpectError('Did not expect panel error to be displayed after query execution')
).toBeHidden();
await expect(
- panelEditPage.getByGrafanaSelector(selectors.components.Panels.Visualization.Table.body),
+ page.getByRole('grid'),
formatExpectError('Expected certain select options to be displayed after clicking on the select input')
- ).toHaveText('val1val2val3val4');
+ ).toHaveText(/val1val2val3val4/);
});
});
diff --git a/e2e-playwright/various-suite/visualization-suggestions.spec.ts b/e2e-playwright/various-suite/visualization-suggestions.spec.ts
index 964af821caa..38c6f30d298 100644
--- a/e2e-playwright/various-suite/visualization-suggestions.spec.ts
+++ b/e2e-playwright/various-suite/visualization-suggestions.spec.ts
@@ -1,5 +1,11 @@
import { test, expect } from '@grafana/plugin-e2e';
+test.use({
+ featureToggles: {
+ tableNextGen: true,
+ },
+});
+
test.describe(
'Visualization suggestions',
{
@@ -39,9 +45,7 @@ test.describe(
await panelEditPage.getByGrafanaSelector(selectors.components.VisualizationPreview.card('Table')).click();
// Verify table header is visible
- await expect(
- panelEditPage.getByGrafanaSelector(selectors.components.Panels.Visualization.Table.header)
- ).toBeVisible();
+ await expect(page.getByRole('grid').getByRole('row').first()).toBeVisible();
});
}
);
diff --git a/e2e/dashboards-suite/dashboard-live-streaming.spec.ts b/e2e/dashboards-suite/dashboard-live-streaming.spec.ts
index 089b3ec4beb..0623c8c30c7 100644
--- a/e2e/dashboards-suite/dashboard-live-streaming.spec.ts
+++ b/e2e/dashboards-suite/dashboard-live-streaming.spec.ts
@@ -9,7 +9,7 @@ describe.skip('Dashboard Live streaming support', () => {
});
it('Should receive streaming data', () => {
- e2e.flows.openDashboard({ uid: 'live-e2e-test' });
+ e2e.flows.openDashboard({ uid: 'live-e2e-test', queryParams: { '__feature.tableNextGen': false } });
cy.wait(1000);
e2e.components.Panels.Panel.title('Live').should('exist');
e2e.components.Panels.Visualization.Table.body().find('[role="row"]').should('have.length.at.least', 5);
diff --git a/e2e/old-arch/dashboards-suite/dashboard-live-streaming.spec.ts b/e2e/old-arch/dashboards-suite/dashboard-live-streaming.spec.ts
index b91ccf5c270..5798b669f6f 100644
--- a/e2e/old-arch/dashboards-suite/dashboard-live-streaming.spec.ts
+++ b/e2e/old-arch/dashboards-suite/dashboard-live-streaming.spec.ts
@@ -8,7 +8,7 @@ describe('Dashboard Live streaming support', () => {
});
it('Should receive streaming data', () => {
- e2e.flows.openDashboard({ uid: 'live-e2e-test' });
+ e2e.flows.openDashboard({ uid: 'live-e2e-test', queryParams: { '__feature.tableNextGen': false } });
cy.wait(1000);
e2e.components.Panels.Panel.title('Live').should('exist');
e2e.components.Panels.Visualization.Table.body().find('[role="row"]').should('have.length.at.least', 5);
diff --git a/e2e/old-arch/panels-suite/geomap-spatial-operations-transform.spec.ts b/e2e/old-arch/panels-suite/geomap-spatial-operations-transform.spec.ts
index f8aab30de2f..7c8d3d4f197 100644
--- a/e2e/old-arch/panels-suite/geomap-spatial-operations-transform.spec.ts
+++ b/e2e/old-arch/panels-suite/geomap-spatial-operations-transform.spec.ts
@@ -8,7 +8,7 @@ describe.skip('Geomap spatial operations', () => {
});
it.skip('Tests location auto option', () => {
- e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { editPanel: 1 } });
+ e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { '__feature.tableNextGen': false, editPanel: 1 } });
e2e.components.Tab.title('Transform data').should('be.visible').click();
e2e.components.Transforms.addTransformationButton().scrollIntoView().should('be.visible').click();
@@ -26,7 +26,7 @@ describe.skip('Geomap spatial operations', () => {
});
it('Tests location coords option', () => {
- e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { editPanel: 1 } });
+ e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { '__feature.tableNextGen': false, editPanel: 1 } });
e2e.components.Tab.title('Transform data').should('be.visible').click();
e2e.components.Transforms.addTransformationButton().scrollIntoView().should('be.visible').click();
@@ -50,7 +50,7 @@ describe.skip('Geomap spatial operations', () => {
});
it('Tests geoshash field column appears in table view', () => {
- e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { editPanel: 1 } });
+ e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { '__feature.tableNextGen': false, editPanel: 1 } });
e2e.components.Tab.title('Transform data').should('be.visible').click();
e2e.components.Transforms.addTransformationButton().scrollIntoView().should('be.visible').click();
@@ -73,7 +73,7 @@ describe.skip('Geomap spatial operations', () => {
});
it('Tests location lookup option', () => {
- e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { editPanel: 1 } });
+ e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { '__feature.tableNextGen': false, editPanel: 1 } });
e2e.components.Tab.title('Transform data').should('be.visible').click();
e2e.components.Transforms.addTransformationButton().scrollIntoView().should('be.visible').click();
diff --git a/e2e/old-arch/panels-suite/panelEdit_base.spec.ts b/e2e/old-arch/panels-suite/panelEdit_base.spec.ts
index 744c41ed8ce..8691382f90f 100644
--- a/e2e/old-arch/panels-suite/panelEdit_base.spec.ts
+++ b/e2e/old-arch/panels-suite/panelEdit_base.spec.ts
@@ -11,7 +11,7 @@ describe('Panel edit tests', () => {
cy.intercept({
pathname: '/api/ds/query',
}).as('query');
- e2e.flows.openDashboard({ uid: 'TkZXxlNG3' });
+ e2e.flows.openDashboard({ uid: 'TkZXxlNG3', queryParams: { '__feature.tableNextGen': false } });
cy.wait('@query');
e2e.flows.openPanelMenuItem(e2e.flows.PanelMenuItems.Edit, PANEL_UNDER_TEST);
diff --git a/e2e/old-arch/various-suite/visualization-suggestions.spec.ts b/e2e/old-arch/various-suite/visualization-suggestions.spec.ts
index aef309ea452..c5dfb03ef93 100644
--- a/e2e/old-arch/various-suite/visualization-suggestions.spec.ts
+++ b/e2e/old-arch/various-suite/visualization-suggestions.spec.ts
@@ -6,7 +6,7 @@ describe('Visualization suggestions', () => {
});
it('Should be shown and clickable', () => {
- e2e.flows.openDashboard({ uid: 'aBXrJ0R7z', queryParams: { editPanel: 9 } });
+ e2e.flows.openDashboard({ uid: 'aBXrJ0R7z', queryParams: { '__feature.tableNextGen': false, editPanel: 9 } });
// Try visualization suggestions
e2e.components.PanelEditor.toggleVizPicker().click();
diff --git a/e2e/panels-suite/geomap-spatial-operations-transform.spec.ts b/e2e/panels-suite/geomap-spatial-operations-transform.spec.ts
index 615e69996a4..4eb24162791 100644
--- a/e2e/panels-suite/geomap-spatial-operations-transform.spec.ts
+++ b/e2e/panels-suite/geomap-spatial-operations-transform.spec.ts
@@ -8,7 +8,7 @@ describe.skip('Geomap spatial operations', () => {
});
it('Tests location auto option', () => {
- e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { editPanel: 1 } });
+ e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { '__feature.tableNextGen': false, editPanel: 1 } });
e2e.components.Tab.title('Transformations').should('be.visible').click();
e2e.components.Transforms.addTransformationButton().scrollIntoView().should('be.visible').click();
@@ -26,7 +26,7 @@ describe.skip('Geomap spatial operations', () => {
});
it('Tests location coords option', () => {
- e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { editPanel: 1 } });
+ e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { '__feature.tableNextGen': false, editPanel: 1 } });
e2e.components.Tab.title('Transformations').should('be.visible').click();
e2e.components.Transforms.addTransformationButton().scrollIntoView().should('be.visible').click();
@@ -50,7 +50,7 @@ describe.skip('Geomap spatial operations', () => {
});
it('Tests geoshash field column appears in table view', () => {
- e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { editPanel: 1 } });
+ e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { '__feature.tableNextGen': false, editPanel: 1 } });
e2e.components.Tab.title('Transformations').should('be.visible').click();
e2e.components.Transforms.addTransformationButton().scrollIntoView().should('be.visible').click();
@@ -73,7 +73,7 @@ describe.skip('Geomap spatial operations', () => {
});
it('Tests location lookup option', () => {
- e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { editPanel: 1 } });
+ e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { '__feature.tableNextGen': false, editPanel: 1 } });
e2e.components.Tab.title('Transformations').should('be.visible').click();
e2e.components.Transforms.addTransformationButton().scrollIntoView().should('be.visible').click();
diff --git a/e2e/panels-suite/panelEdit_base.spec.ts b/e2e/panels-suite/panelEdit_base.spec.ts
index 67717fb06b3..d48879e5a8d 100644
--- a/e2e/panels-suite/panelEdit_base.spec.ts
+++ b/e2e/panels-suite/panelEdit_base.spec.ts
@@ -13,7 +13,7 @@ describe('Panel edit tests', () => {
cy.intercept({
pathname: '/api/ds/query',
}).as('query');
- e2e.flows.openDashboard({ uid: 'TkZXxlNG3' });
+ e2e.flows.openDashboard({ uid: 'TkZXxlNG3', queryParams: { '__feature.tableNextGen': false } });
cy.wait('@query');
e2e.components.Panels.Panel.title('Lines 500 data points')
diff --git a/e2e/various-suite/visualization-suggestions.spec.ts b/e2e/various-suite/visualization-suggestions.spec.ts
index aef309ea452..c5dfb03ef93 100644
--- a/e2e/various-suite/visualization-suggestions.spec.ts
+++ b/e2e/various-suite/visualization-suggestions.spec.ts
@@ -6,7 +6,7 @@ describe('Visualization suggestions', () => {
});
it('Should be shown and clickable', () => {
- e2e.flows.openDashboard({ uid: 'aBXrJ0R7z', queryParams: { editPanel: 9 } });
+ e2e.flows.openDashboard({ uid: 'aBXrJ0R7z', queryParams: { '__feature.tableNextGen': false, editPanel: 9 } });
// Try visualization suggestions
e2e.components.PanelEditor.toggleVizPicker().click();
diff --git a/packages/grafana-e2e-selectors/src/selectors/components.ts b/packages/grafana-e2e-selectors/src/selectors/components.ts
index 93e5a545d8c..adf4f2efbfe 100644
--- a/packages/grafana-e2e-selectors/src/selectors/components.ts
+++ b/packages/grafana-e2e-selectors/src/selectors/components.ts
@@ -481,6 +481,19 @@ export const versionedComponents = {
'10.2.0': 'data-testid table body',
},
},
+ TableNG: {
+ Filters: {
+ HeaderButton: {
+ '12.1.0': 'data-testid tableng header filter',
+ },
+ Container: {
+ '12.1.0': 'data-testid tablenf filter container',
+ },
+ SelectAll: {
+ '12.1.0': 'data-testid tableng filter select-all',
+ },
+ },
+ },
},
},
VizLegend: {
diff --git a/packages/grafana-ui/src/components/Table/TableNG/Filter/Filter.tsx b/packages/grafana-ui/src/components/Table/TableNG/Filter/Filter.tsx
index 6f2c55fc3d7..2f219a4dd06 100644
--- a/packages/grafana-ui/src/components/Table/TableNG/Filter/Filter.tsx
+++ b/packages/grafana-ui/src/components/Table/TableNG/Filter/Filter.tsx
@@ -2,6 +2,7 @@ import { css, cx } from '@emotion/css';
import { useRef, useState } from 'react';
import { Field, GrafanaTheme2, SelectableValue } from '@grafana/data';
+import { selectors } from '@grafana/e2e-selectors';
import { useStyles2 } from '../../../../themes/ThemeContext';
import { Icon } from '../../../Icon/Icon';
@@ -61,6 +62,7 @@ export const Filter = ({
className={styles.headerFilter}
ref={ref}
type="button"
+ data-testid={selectors.components.Panels.Visualization.TableNG.Filters.HeaderButton}
onClick={(ev) => {
setPopoverVisible(true);
ev.stopPropagation();
diff --git a/packages/grafana-ui/src/components/Table/TableNG/Filter/FilterList.tsx b/packages/grafana-ui/src/components/Table/TableNG/Filter/FilterList.tsx
index 783c25f0691..b482f66a60f 100644
--- a/packages/grafana-ui/src/components/Table/TableNG/Filter/FilterList.tsx
+++ b/packages/grafana-ui/src/components/Table/TableNG/Filter/FilterList.tsx
@@ -4,6 +4,7 @@ import * as React from 'react';
import { FixedSizeList as List, ListChildComponentProps } from 'react-window';
import { GrafanaTheme2, formattedValueToString, getValueFormat, SelectableValue } from '@grafana/data';
+import { selectors } from '@grafana/e2e-selectors';
import { Trans } from '@grafana/i18n';
import { useStyles2, useTheme2 } from '../../../../themes/ThemeContext';
@@ -160,7 +161,10 @@ export const FilterList = ({ options, values, caseSensitive, onChange, searchFil
>
{ItemRenderer}
-
+
{/* This is just blocking click events from bubbeling and should not have a keyboard interaction. */}
{/* eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */}
-
+
{field && }
diff --git a/public/app/plugins/panel/table/table-new/PaginationEditor.tsx b/public/app/plugins/panel/table/table-new/PaginationEditor.tsx
index 0bfa20b565b..6434c75e1b9 100644
--- a/public/app/plugins/panel/table/table-new/PaginationEditor.tsx
+++ b/public/app/plugins/panel/table/table-new/PaginationEditor.tsx
@@ -1,6 +1,7 @@
import * as React from 'react';
import { StandardEditorProps } from '@grafana/data';
+import { selectors } from '@grafana/e2e-selectors';
import { Switch } from '@grafana/ui';
export function PaginationEditor({ onChange, value, context }: StandardEditorProps) {
@@ -11,5 +12,11 @@ export function PaginationEditor({ onChange, value, context }: StandardEditorPro
onChange(event?.currentTarget.checked);
};
- return ;
+ return (
+
+ );
}
diff --git a/public/app/plugins/panel/table/table-new/cells/AutoCellOptionsEditor.tsx b/public/app/plugins/panel/table/table-new/cells/AutoCellOptionsEditor.tsx
index 7213d4f29a2..5aae9d65b7a 100644
--- a/public/app/plugins/panel/table/table-new/cells/AutoCellOptionsEditor.tsx
+++ b/public/app/plugins/panel/table/table-new/cells/AutoCellOptionsEditor.tsx
@@ -1,5 +1,6 @@
+import { selectors } from '@grafana/e2e-selectors';
import { t } from '@grafana/i18n';
-import { TableAutoCellOptions, TableColorTextCellOptions } from '@grafana/schema';
+import { TableAutoCellOptions, TableColoredBackgroundCellOptions, TableColorTextCellOptions } from '@grafana/schema';
import { Field, Switch } from '@grafana/ui';
import { TableCellEditorProps } from '../TableCellOptionEditor';
@@ -7,9 +8,8 @@ import { TableCellEditorProps } from '../TableCellOptionEditor';
export const AutoCellOptionsEditor = ({
cellOptions,
onChange,
-}: TableCellEditorProps) => {
+}: TableCellEditorProps) => {
// Handle row coloring changes
-
const onWrapTextChange = () => {
cellOptions.wrapText = !cellOptions.wrapText;
onChange(cellOptions);
@@ -17,7 +17,11 @@ export const AutoCellOptionsEditor = ({
return (
-
+
);
};
diff --git a/public/app/plugins/panel/table/table-new/cells/ColorBackgroundCellOptionsEditor.tsx b/public/app/plugins/panel/table/table-new/cells/ColorBackgroundCellOptionsEditor.tsx
index b1ecbfc4862..b7d5d2ab3dc 100644
--- a/public/app/plugins/panel/table/table-new/cells/ColorBackgroundCellOptionsEditor.tsx
+++ b/public/app/plugins/panel/table/table-new/cells/ColorBackgroundCellOptionsEditor.tsx
@@ -1,10 +1,13 @@
import { SelectableValue } from '@grafana/data';
+import { selectors } from '@grafana/e2e-selectors';
import { t } from '@grafana/i18n';
import { TableCellBackgroundDisplayMode, TableColoredBackgroundCellOptions } from '@grafana/schema';
import { Field, RadioButtonGroup, Switch } from '@grafana/ui';
import { TableCellEditorProps } from '../TableCellOptionEditor';
+import { AutoCellOptionsEditor } from './AutoCellOptionsEditor';
+
const colorBackgroundOpts: Array> = [
{ value: TableCellBackgroundDisplayMode.Basic, label: 'Basic' },
{ value: TableCellBackgroundDisplayMode.Gradient, label: 'Gradient' },
@@ -14,7 +17,6 @@ export const ColorBackgroundCellOptionsEditor = ({
onChange,
}: TableCellEditorProps) => {
// Set the display mode on change
-
const onCellOptionsChange = (v: TableCellBackgroundDisplayMode) => {
cellOptions.mode = v;
onChange(cellOptions);
@@ -25,23 +27,19 @@ export const ColorBackgroundCellOptionsEditor = ({
onChange(cellOptions);
};
- // Handle row coloring changes
- const onWrapTextChange = () => {
- cellOptions.wrapText = !cellOptions.wrapText;
- onChange(cellOptions);
- };
-
return (
<>
+
-
-
-
-
+
+
+ {
+ cellOptions.wrapText = updatedCellOptions.wrapText;
+ onChange(cellOptions);
+ }}
+ />
>
);
};
diff --git a/public/locales/en-US/grafana.json b/public/locales/en-US/grafana.json
index 5b1b640db0b..aeeb66f2cac 100644
--- a/public/locales/en-US/grafana.json
+++ b/public/locales/en-US/grafana.json
@@ -11953,7 +11953,6 @@
},
"label-apply-to-entire-row": "Apply to entire row",
"label-background-display-mode": "Background display mode",
- "label-wrap-text": "Wrap text",
"wrap-text": "Wrap text"
},
"column-alignment-options": {
From f34127c449fff6a4b7be01c840909982d3e0b7cf Mon Sep 17 00:00:00 2001
From: Sarah Zinger
Date: Fri, 18 Jul 2025 14:14:44 -0400
Subject: [PATCH 44/46] Query Service: Fix Time Bug (#108337)
---
pkg/expr/nodes.go | 7 +-
.../mt_datasource_client_builder.go | 20 +++
pkg/services/query/query.go | 7 +-
pkg/services/query/query_test.go | 142 +++++++++++++++---
4 files changed, 156 insertions(+), 20 deletions(-)
diff --git a/pkg/expr/nodes.go b/pkg/expr/nodes.go
index 44455f0bb9f..83212715625 100644
--- a/pkg/expr/nodes.go
+++ b/pkg/expr/nodes.go
@@ -408,7 +408,12 @@ func (dn *DSNode) Execute(ctx context.Context, now time.Time, _ mathexp.Vars, s
}
} else {
// transform request from backend.QueryDataRequest to k8s request
- k8sReq := &data.QueryDataRequest{}
+ k8sReq := &data.QueryDataRequest{
+ TimeRange: data.TimeRange{
+ From: req.Queries[0].TimeRange.From.Format(time.RFC3339),
+ To: req.Queries[0].TimeRange.To.Format(time.RFC3339),
+ },
+ }
for _, q := range req.Queries {
var dataQuery data.DataQuery
err := json.Unmarshal(q.JSON, &dataQuery)
diff --git a/pkg/services/mtdsclient/mt_datasource_client_builder.go b/pkg/services/mtdsclient/mt_datasource_client_builder.go
index 2499812b9d3..d5108aef4e2 100644
--- a/pkg/services/mtdsclient/mt_datasource_client_builder.go
+++ b/pkg/services/mtdsclient/mt_datasource_client_builder.go
@@ -64,3 +64,23 @@ func NewMtDatasourceClientBuilderWithClientSupplier(
logger: logger,
}
}
+
+func NewTestMTDSClientBuilder(isMultiTenant bool, mockClient clientapi.QueryDataClient) MTDatasourceClientBuilder {
+ return &testBuilder{
+ mockClient: mockClient,
+ isMultitenant: isMultiTenant,
+ }
+}
+
+type testBuilder struct {
+ mockClient clientapi.QueryDataClient
+ isMultitenant bool
+}
+
+func (b *testBuilder) BuildClient(pluginId string, uid string) (clientapi.QueryDataClient, bool) {
+ if !b.isMultitenant {
+ return nil, false
+ }
+
+ return b.mockClient, true
+}
diff --git a/pkg/services/query/query.go b/pkg/services/query/query.go
index 4cc718e2cf6..d3f05438e45 100644
--- a/pkg/services/query/query.go
+++ b/pkg/services/query/query.go
@@ -295,7 +295,12 @@ func (s *ServiceImpl) handleQuerySingleDatasource(ctx context.Context, user iden
return s.pluginClient.QueryData(ctx, req)
} else { // multi tenant flow
// transform request from backend.QueryDataRequest to k8s request
- k8sReq := &data.QueryDataRequest{}
+ k8sReq := &data.QueryDataRequest{
+ TimeRange: data.TimeRange{
+ From: req.Queries[0].TimeRange.From.Format(time.RFC3339),
+ To: req.Queries[0].TimeRange.To.Format(time.RFC3339),
+ },
+ }
for _, q := range req.Queries {
var dataQuery data.DataQuery
err := json.Unmarshal(q.JSON, &dataQuery)
diff --git a/pkg/services/query/query_test.go b/pkg/services/query/query_test.go
index 542e85e8a0b..e4d430aa5b3 100644
--- a/pkg/services/query/query_test.go
+++ b/pkg/services/query/query_test.go
@@ -12,6 +12,7 @@ import (
"time"
"github.com/grafana/grafana-plugin-sdk-go/backend"
+ data "github.com/grafana/grafana-plugin-sdk-go/experimental/apis/data/v0alpha1"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
@@ -24,6 +25,7 @@ import (
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/infra/tracing"
"github.com/grafana/grafana/pkg/plugins"
+ "github.com/grafana/grafana/pkg/registry/apis/query/clientapi"
"github.com/grafana/grafana/pkg/services/contexthandler"
"github.com/grafana/grafana/pkg/services/contexthandler/ctxkey"
contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model"
@@ -50,7 +52,7 @@ func TestMain(m *testing.M) {
func TestIntegrationParseMetricRequest(t *testing.T) {
t.Run("Test a simple single datasource query", func(t *testing.T) {
- tc := setup(t)
+ tc := setup(t, false, nil)
mr := metricRequestWithQueries(t, `{
"refId": "A",
"datasource": {
@@ -74,7 +76,7 @@ func TestIntegrationParseMetricRequest(t *testing.T) {
})
t.Run("Test a single datasource query with expressions", func(t *testing.T) {
- tc := setup(t)
+ tc := setup(t, false, nil)
mr := metricRequestWithQueries(t, `{
"refId": "A",
"datasource": {
@@ -114,7 +116,7 @@ func TestIntegrationParseMetricRequest(t *testing.T) {
})
t.Run("Test a simple mixed datasource query", func(t *testing.T) {
- tc := setup(t)
+ tc := setup(t, false, nil)
mr := metricRequestWithQueries(t, `{
"refId": "A",
"datasource": {
@@ -147,7 +149,7 @@ func TestIntegrationParseMetricRequest(t *testing.T) {
})
t.Run("Test a mixed datasource query with expressions", func(t *testing.T) {
- tc := setup(t)
+ tc := setup(t, false, nil)
mr := metricRequestWithQueries(t, `{
"refId": "A",
"datasource": {
@@ -208,7 +210,7 @@ func TestIntegrationParseMetricRequest(t *testing.T) {
})
t.Run("Header validation", func(t *testing.T) {
- tc := setup(t)
+ tc := setup(t, false, nil)
mr := metricRequestWithQueries(t, `{
"refId": "A",
"datasource": {
@@ -250,7 +252,7 @@ func TestIntegrationParseMetricRequest(t *testing.T) {
})
t.Run("Test a duplicated refId", func(t *testing.T) {
- tc := setup(t)
+ tc := setup(t, false, nil)
mr := metricRequestWithQueries(t, `{
"refId": "A",
"datasource": {
@@ -271,7 +273,7 @@ func TestIntegrationParseMetricRequest(t *testing.T) {
func TestIntegrationQueryDataMultipleSources(t *testing.T) {
t.Run("can query multiple datasources", func(t *testing.T) {
- tc := setup(t)
+ tc := setup(t, false, nil)
query1, err := simplejson.NewJson([]byte(`
{
"datasource": {
@@ -320,7 +322,7 @@ func TestIntegrationQueryDataMultipleSources(t *testing.T) {
})
t.Run("can query multiple datasources with an expression present", func(t *testing.T) {
- tc := setup(t)
+ tc := setup(t, false, nil)
query1, err := simplejson.NewJson([]byte(`
{
"datasource": {
@@ -386,7 +388,7 @@ func TestIntegrationQueryDataMultipleSources(t *testing.T) {
})
t.Run("error is returned in query when one of the queries fails", func(t *testing.T) {
- tc := setup(t)
+ tc := setup(t, false, nil)
query1, _ := simplejson.NewJson([]byte(`
{
@@ -426,7 +428,7 @@ func TestIntegrationQueryDataMultipleSources(t *testing.T) {
})
t.Run("ignores a deprecated datasourceID", func(t *testing.T) {
- tc := setup(t)
+ tc := setup(t, false, nil)
query1, err := simplejson.NewJson([]byte(`
{
"datasource": {
@@ -452,7 +454,63 @@ func TestIntegrationQueryDataMultipleSources(t *testing.T) {
})
}
-func setup(t *testing.T) *testContext {
+func TestIntegrationQueryDataWithMTDSClient(t *testing.T) {
+ t.Run("can run a simple datasource query with a mt ds client", func(t *testing.T) {
+ stubbedResponse := &backend.QueryDataResponse{Responses: make(backend.Responses)}
+ testClient := &testClient{
+ queryDataStubbedResponse: stubbedResponse,
+ }
+ tc := setup(t, true, testClient)
+ mr := metricRequestWithQueries(t, `{
+ "refId": "A",
+ "datasource": {
+ "uid": "gIEkMvIVz",
+ "type": "postgres"
+ }
+ }`, `{
+ "refId": "B",
+ "datasource": {
+ "uid": "gIEkMvIVz",
+ "type": "postgres"
+ }
+ }`)
+ mr.From = "2022-01-01"
+ mr.To = "2022-01-02"
+ ctx := context.Background()
+ _, err := tc.queryService.QueryData(ctx, tc.signedInUser, true, mr)
+ require.NoError(t, err)
+
+ assert.Equal(t, data.QueryDataRequest{
+ TimeRange: data.TimeRange{
+ From: "2022-01-01T00:00:00Z",
+ To: "2022-01-02T00:00:00Z",
+ },
+ Queries: []data.DataQuery{
+ {
+ CommonQueryProperties: data.CommonQueryProperties{
+ RefID: "A",
+ Datasource: &data.DataSourceRef{
+ Type: "postgres",
+ UID: "gIEkMvIVz",
+ },
+ },
+ },
+ {
+ CommonQueryProperties: data.CommonQueryProperties{
+ RefID: "B",
+ Datasource: &data.DataSourceRef{
+ Type: "postgres",
+ UID: "gIEkMvIVz",
+ },
+ },
+ },
+ },
+ Debug: false,
+ }, testClient.queryDataLastCalledWith)
+ })
+}
+
+func setup(t *testing.T, isMultiTenant bool, mockClient clientapi.QueryDataClient) *testContext {
dss := []*datasources.DataSource{
{UID: "gIEkMvIVz", Type: "postgres"},
{UID: "sEx6ZvSVk", Type: "testdata"},
@@ -468,24 +526,55 @@ func setup(t *testing.T) *testContext {
sqlStore, cfg := db.InitTestDBWithCfg(t)
secretsService := secretsmng.SetupTestService(t, fakes.NewFakeSecretsStore())
ss := secretskvs.NewSQLSecretsKVStore(sqlStore, secretsService, log.New("test.logger"))
+
fakeDatasourceService := &fakeDatasources.FakeDataSourceService{
DataSources: dss,
SimulatePluginFailure: false,
}
- pCtxProvider := plugincontext.ProvideService(cfg,
- localcache.ProvideService(), &pluginstore.FakePluginStore{
+ pCtxProvider := plugincontext.ProvideService(
+ cfg,
+ localcache.ProvideService(),
+ &pluginstore.FakePluginStore{
PluginList: []pluginstore.Plugin{
{JSONData: plugins.JSONData{ID: "postgres"}},
{JSONData: plugins.JSONData{ID: "testdata"}},
{JSONData: plugins.JSONData{ID: "mysql"}},
},
- }, &fakeDatasources.FakeCacheService{}, fakeDatasourceService,
- pluginSettings.ProvideService(sqlStore, secretsService), pluginconfig.NewFakePluginRequestConfigProvider(),
+ },
+ &fakeDatasources.FakeCacheService{},
+ fakeDatasourceService,
+ pluginSettings.ProvideService(sqlStore, secretsService),
+ pluginconfig.NewFakePluginRequestConfigProvider(),
+ )
+
+ var mtdsClientBuilder mtdsclient.MTDatasourceClientBuilder
+ if isMultiTenant {
+ mtdsClientBuilder = mtdsclient.NewTestMTDSClientBuilder(isMultiTenant, mockClient)
+ } else {
+ mtdsClientBuilder = mtdsclient.NewTestMTDSClientBuilder(false, nil)
+ }
+
+ exprService := expr.ProvideService(
+ &setting.Cfg{ExpressionsEnabled: true},
+ pc,
+ pCtxProvider,
+ featuremgmt.WithFeatures(),
+ nil,
+ tracing.InitializeTracerForTest(),
+ mtdsClientBuilder,
)
- exprService := expr.ProvideService(&setting.Cfg{ExpressionsEnabled: true}, pc, pCtxProvider,
- featuremgmt.WithFeatures(), nil, tracing.InitializeTracerForTest(), mtdsclient.NewNullMTDatasourceClientBuilder())
- queryService := ProvideService(setting.NewCfg(), dc, exprService, rv, pc, pCtxProvider, mtdsclient.NewNullMTDatasourceClientBuilder()) // provider belonging to this package
+
+ queryService := ProvideService(
+ setting.NewCfg(),
+ dc,
+ exprService,
+ rv,
+ pc,
+ pCtxProvider,
+ mtdsClientBuilder,
+ )
+
return &testContext{
pluginContext: pc,
secretStore: ss,
@@ -573,3 +662,20 @@ func (c *fakePluginClient) QueryData(ctx context.Context, req *backend.QueryData
return &backend.QueryDataResponse{Responses: make(backend.Responses)}, nil
}
+
+type testClient struct {
+ queryDataLastCalledWith data.QueryDataRequest
+ queryDataStubbedResponse *backend.QueryDataResponse
+ queryDataStubbedError error
+}
+
+func (c *testClient) QueryData(ctx context.Context, req data.QueryDataRequest) (*backend.QueryDataResponse, error) {
+ c.queryDataLastCalledWith = req
+ if c.queryDataStubbedError != nil {
+ return nil, c.queryDataStubbedError
+ }
+ if c.queryDataStubbedResponse != nil {
+ return c.queryDataStubbedResponse, nil
+ }
+ return nil, errors.New("no response stubbed")
+}
From 17ba3ec321c0a73e2b271d3f044ea1a77d0e1fec Mon Sep 17 00:00:00 2001
From: Luminessa Starlight
Date: Fri, 18 Jul 2025 15:14:57 -0400
Subject: [PATCH 45/46] Chore: Disable renovate automerge (#108344)
disable renovate automerge
---
.github/renovate.json5 | 1 -
1 file changed, 1 deletion(-)
diff --git a/.github/renovate.json5 b/.github/renovate.json5
index aa28c25a240..005d0d5b503 100644
--- a/.github/renovate.json5
+++ b/.github/renovate.json5
@@ -28,7 +28,6 @@
postUpdateOptions: ["yarnDedupeHighest"],
packageRules: [
{
- automerge: true,
matchCurrentVersion: "!/^0/",
matchUpdateTypes: ["patch"],
matchPackageNames: ["!/^@?storybook/", "!/^@locker/"],
From 5097dd5c7d0048085798ae74daba26c2a7bc068c Mon Sep 17 00:00:00 2001
From: Yuri Tseretyan
Date: Fri, 18 Jul 2025 15:16:17 -0400
Subject: [PATCH 46/46] Alerting: Send templates from extra configuration to
remote Alertmanager (#107981)
* extract logging of MergedResult into method
* convert GetMergedTemplateDefinitions to return PostableApiTemplate
* update mergeExtracConfigs to return GrafanaAlertmanagerConfig
* pass by value, not pointer
* add template definition to payload
* update tests
* rename to Templates
* log merge results
* fix reference in workspace
---
go.work | 2 +-
.../api/tooling/definitions/alertmanager.go | 59 +++++++++++--------
.../tooling/definitions/alertmanager_test.go | 10 ++--
pkg/services/ngalert/notifier/alertmanager.go | 30 ++--------
pkg/services/ngalert/remote/alertmanager.go | 43 +++++++++-----
.../ngalert/remote/alertmanager_test.go | 15 +++--
.../client/alertmanager_configuration.go | 20 ++++---
pkg/services/ngalert/remote/client/mimir.go | 2 +-
pkg/services/ngalert/remote/compat.go | 13 ----
9 files changed, 97 insertions(+), 97 deletions(-)
delete mode 100644 pkg/services/ngalert/remote/compat.go
diff --git a/go.work b/go.work
index 8d1fff1ed6a..98e83d1c070 100644
--- a/go.work
+++ b/go.work
@@ -24,6 +24,6 @@ use (
./pkg/semconv
)
-replace github.com/prometheus/alertmanager => github.com/grafana/prometheus-alertmanager v0.25.1-0.20250604130045-92c8f6389b36
+replace github.com/prometheus/alertmanager => github.com/grafana/prometheus-alertmanager v0.25.1-0.20250620093340-be61a673dee6
replace github.com/crewjam/saml => github.com/grafana/saml v0.4.15-0.20240917091248-ae3bbdad8a56
diff --git a/pkg/services/ngalert/api/tooling/definitions/alertmanager.go b/pkg/services/ngalert/api/tooling/definitions/alertmanager.go
index dfd39e73f56..c73486d277a 100644
--- a/pkg/services/ngalert/api/tooling/definitions/alertmanager.go
+++ b/pkg/services/ngalert/api/tooling/definitions/alertmanager.go
@@ -5,10 +5,10 @@ import (
"encoding/json"
"errors"
"fmt"
+ "strings"
"time"
"github.com/go-openapi/strfmt"
- alertingTemplates "github.com/grafana/alerting/templates"
amv2 "github.com/prometheus/alertmanager/api/v2/models"
"github.com/prometheus/alertmanager/config"
"github.com/prometheus/alertmanager/pkg/labels"
@@ -17,6 +17,7 @@ import (
"github.com/grafana/alerting/definition"
alertingmodels "github.com/grafana/alerting/models"
+
"github.com/grafana/grafana/pkg/apimachinery/errutil"
)
@@ -267,9 +268,32 @@ type (
PostableApiReceiver = definition.PostableApiReceiver
PostableGrafanaReceivers = definition.PostableGrafanaReceivers
ReceiverType = definition.ReceiverType
- MergeResult = definition.MergeResult
)
+type MergeResult definition.MergeResult
+
+func (m MergeResult) LogContext() []any {
+ if len(m.RenamedReceivers) == 0 && len(m.RenamedTimeIntervals) == 0 {
+ return nil
+ }
+ logCtx := make([]any, 0, 4)
+ if len(m.RenamedTimeIntervals) > 0 {
+ rcvBuilder := strings.Builder{}
+ for from, to := range m.RenamedReceivers {
+ rcvBuilder.WriteString(fmt.Sprintf("'%s'->'%s',", from, to))
+ }
+ logCtx = append(logCtx, "renamedReceivers", fmt.Sprintf("[%s]", rcvBuilder.String()[0:rcvBuilder.Len()-1]))
+ }
+ if len(m.RenamedTimeIntervals) > 0 {
+ rcvBuilder := strings.Builder{}
+ for from, to := range m.RenamedTimeIntervals {
+ rcvBuilder.WriteString(fmt.Sprintf("'%s'->'%s',", from, to))
+ }
+ logCtx = append(logCtx, "renamedTimeIntervals", fmt.Sprintf("[%s]", rcvBuilder.String()[0:rcvBuilder.Len()-1]))
+ }
+ return logCtx
+}
+
const (
GrafanaReceiverType = definition.GrafanaReceiverType
AlertmanagerReceiverType = definition.AlertmanagerReceiverType
@@ -779,31 +803,20 @@ func (c *PostableUserConfig) GetMergedAlertmanagerConfig() (MergeResult, error)
return MergeResult{}, fmt.Errorf("failed to get mimir alertmanager config: %w", err)
}
- return definition.Merge(c.AlertmanagerConfig, mcfg, opts)
+ m, err := definition.Merge(c.AlertmanagerConfig, mcfg, opts)
+ if err != nil {
+ return MergeResult{}, fmt.Errorf("failed to merge alertmanager config: %w", err)
+ }
+ return MergeResult(m), nil
}
-// GetMergedTemplateDefinitions converts the given PostableUserConfig's TemplateFiles to a slice of TemplateDefinitions.
-func (c *PostableUserConfig) GetMergedTemplateDefinitions() []alertingTemplates.TemplateDefinition {
- out := make([]alertingTemplates.TemplateDefinition, 0, len(c.TemplateFiles))
- for name, tmpl := range c.TemplateFiles {
- out = append(out, alertingTemplates.TemplateDefinition{
- Name: name,
- Template: tmpl,
- Kind: alertingTemplates.GrafanaKind,
- })
- }
- if len(c.ExtraConfigs) == 0 {
+// GetMergedTemplateDefinitions converts the given PostableUserConfig's TemplateFiles to a slice of Templates.
+func (c *PostableUserConfig) GetMergedTemplateDefinitions() []definition.PostableApiTemplate {
+ out := definition.TemplatesMapToPostableAPITemplates(c.TemplateFiles, definition.GrafanaTemplateKind)
+ if len(c.ExtraConfigs) == 0 || len(c.ExtraConfigs[0].TemplateFiles) == 0 {
return out
}
- // support only one config for now
- for name, tmpl := range c.ExtraConfigs[0].TemplateFiles {
- out = append(out, alertingTemplates.TemplateDefinition{
- Name: name,
- Template: tmpl,
- Kind: alertingTemplates.MimirKind,
- })
- }
- return out
+ return append(out, definition.TemplatesMapToPostableAPITemplates(c.ExtraConfigs[0].TemplateFiles, definition.MimirTemplateKind)...)
}
func (c *PostableUserConfig) UnmarshalJSON(b []byte) error {
diff --git a/pkg/services/ngalert/api/tooling/definitions/alertmanager_test.go b/pkg/services/ngalert/api/tooling/definitions/alertmanager_test.go
index 5f6fb5c2390..7c18af905e4 100644
--- a/pkg/services/ngalert/api/tooling/definitions/alertmanager_test.go
+++ b/pkg/services/ngalert/api/tooling/definitions/alertmanager_test.go
@@ -6,7 +6,7 @@ import (
"strings"
"testing"
- alertingTemplates "github.com/grafana/alerting/templates"
+ "github.com/grafana/alerting/definition"
"github.com/prometheus/alertmanager/config"
"github.com/prometheus/alertmanager/pkg/labels"
"github.com/prometheus/common/model"
@@ -383,21 +383,21 @@ func TestPostableUserConfig_GetMergedTemplateDefinitions(t *testing.T) {
require.Len(t, result, tc.expectedTemplates)
templateMap := make(map[string]string)
- kindMap := make(map[string]alertingTemplates.Kind)
+ kindMap := make(map[string]definition.TemplateKind)
for _, tmpl := range result {
- templateMap[tmpl.Name] = tmpl.Template
+ templateMap[tmpl.Name] = tmpl.Content
kindMap[tmpl.Name] = tmpl.Kind
}
for name, content := range tc.config.TemplateFiles {
require.Equal(t, content, templateMap[name])
- require.Equal(t, alertingTemplates.GrafanaKind, kindMap[name])
+ require.Equal(t, definition.GrafanaTemplateKind, kindMap[name])
}
if len(tc.config.ExtraConfigs) > 0 {
for name, content := range tc.config.ExtraConfigs[0].TemplateFiles {
require.Equal(t, content, templateMap[name])
- require.Equal(t, alertingTemplates.MimirKind, kindMap[name])
+ require.Equal(t, definition.MimirTemplateKind, kindMap[name])
}
}
})
diff --git a/pkg/services/ngalert/notifier/alertmanager.go b/pkg/services/ngalert/notifier/alertmanager.go
index faf85e3f07a..8c833c14a2b 100644
--- a/pkg/services/ngalert/notifier/alertmanager.go
+++ b/pkg/services/ngalert/notifier/alertmanager.go
@@ -7,7 +7,6 @@ import (
"encoding/json"
"fmt"
"strconv"
- "strings"
"time"
alertingNotify "github.com/grafana/alerting/notify"
@@ -325,29 +324,6 @@ func (am *alertmanager) aggregateInhibitMatchers(rules []config.InhibitRule, amu
}
}
-func logMergeResult(l log.Logger, m apimodels.MergeResult) {
- if len(m.RenamedReceivers) == 0 && len(m.RenamedTimeIntervals) == 0 {
- return
- }
-
- logCtx := make([]any, 0, 4)
- if len(m.RenamedTimeIntervals) > 0 {
- rcvBuilder := strings.Builder{}
- for from, to := range m.RenamedReceivers {
- rcvBuilder.WriteString(fmt.Sprintf("'%s'->'%s',", from, to))
- }
- logCtx = append(logCtx, "renamedReceivers", fmt.Sprintf("[%s]", rcvBuilder.String()[0:rcvBuilder.Len()-1]))
- }
- if len(m.RenamedTimeIntervals) > 0 {
- rcvBuilder := strings.Builder{}
- for from, to := range m.RenamedTimeIntervals {
- rcvBuilder.WriteString(fmt.Sprintf("'%s'->'%s',", from, to))
- }
- logCtx = append(logCtx, "renamedTimeIntervals", fmt.Sprintf("[%s]", rcvBuilder.String()[0:rcvBuilder.Len()-1]))
- }
- l.Info("Configurations merged successfully but some resources were renamed", logCtx...)
-}
-
// applyConfig applies a new configuration by re-initializing all components using the configuration provided.
// It returns a boolean indicating whether the user config was changed and an error.
// It is not safe to call concurrently.
@@ -361,9 +337,11 @@ func (am *alertmanager) applyConfig(ctx context.Context, cfg *apimodels.Postable
if err != nil {
return false, fmt.Errorf("failed to get full alertmanager configuration: %w", err)
}
- logMergeResult(am.logger, mergeResult)
+ if logInfo := mergeResult.LogContext(); len(logInfo) > 0 {
+ am.logger.Info("Configurations merged successfully but some resources were renamed", logInfo...)
+ }
amConfig := mergeResult.Config
- templates := cfg.GetMergedTemplateDefinitions()
+ templates := alertingNotify.PostableAPITemplatesToTemplateDefinitions(cfg.GetMergedTemplateDefinitions())
// Now add autogenerated config to the route.
err = AddAutogenConfig(ctx, am.logger, am.Store, am.Base.TenantID(), &amConfig, skipInvalid)
diff --git a/pkg/services/ngalert/remote/alertmanager.go b/pkg/services/ngalert/remote/alertmanager.go
index d80f6967692..83ffef2251f 100644
--- a/pkg/services/ngalert/remote/alertmanager.go
+++ b/pkg/services/ngalert/remote/alertmanager.go
@@ -12,6 +12,7 @@ import (
"time"
"github.com/go-openapi/strfmt"
+ "github.com/grafana/alerting/definition"
amalert "github.com/prometheus/alertmanager/api/v2/client/alert"
amalertgroup "github.com/prometheus/alertmanager/api/v2/client/alertgroup"
amgeneral "github.com/prometheus/alertmanager/api/v2/client/general"
@@ -290,10 +291,10 @@ func (am *Alertmanager) CompareAndSendConfiguration(ctx context.Context, config
}
// Decrypt and merge extra configs
- if err := am.mergeExtraConfigs(ctx, decryptedCfg); err != nil {
+ payload, err := am.mergeExtraConfigs(ctx, decryptedCfg)
+ if err != nil {
return fmt.Errorf("unable to merge extra configurations: %w", err)
}
- payload := PostableUserConfigToGrafanaAlertmanagerConfig(decryptedCfg)
rawPayload, err := json.Marshal(payload)
if err != nil {
return fmt.Errorf("unable to marshal decrypted configuration: %w", err)
@@ -352,27 +353,36 @@ func decrypter(ctx context.Context, crypto Crypto) models.DecryptFn {
}
// mergeExtraConfigs decrypts and applies merged configuration if extra configs exist.
-func (am *Alertmanager) mergeExtraConfigs(ctx context.Context, config *apimodels.PostableUserConfig) error {
+func (am *Alertmanager) mergeExtraConfigs(ctx context.Context, config *apimodels.PostableUserConfig) (remoteClient.GrafanaAlertmanagerConfig, error) {
if len(config.ExtraConfigs) == 0 {
- return nil
+ return remoteClient.GrafanaAlertmanagerConfig{
+ TemplateFiles: config.TemplateFiles,
+ AlertmanagerConfig: config.AlertmanagerConfig,
+ Templates: nil,
+ }, nil
}
if err := am.crypto.DecryptExtraConfigs(ctx, config); err != nil {
- return fmt.Errorf("unable to decrypt extra configs: %w", err)
+ return remoteClient.GrafanaAlertmanagerConfig{}, fmt.Errorf("unable to decrypt extra configs: %w", err)
}
mergeResult, err := config.GetMergedAlertmanagerConfig()
if err != nil {
- return fmt.Errorf("unable to get merged Alertmanager configuration: %w", err)
+ return remoteClient.GrafanaAlertmanagerConfig{}, fmt.Errorf("unable to get merged Alertmanager configuration: %w", err)
}
- config.AlertmanagerConfig = mergeResult.Config
- // Clear ExtraConfigs to avoid re-processing them later
- config.ExtraConfigs = nil
-
- return nil
+ if logctx := mergeResult.LogContext(); len(logctx) > 0 {
+ am.log.Debug("Configurations merged successfully but some resources were renamed", logctx...)
+ }
+ templates := definition.TemplatesMapToPostableAPITemplates(config.ExtraConfigs[0].TemplateFiles, definition.MimirTemplateKind)
+ return remoteClient.GrafanaAlertmanagerConfig{
+ // TODO keep sending Grafana templates as a map to not break old Mimir
+ TemplateFiles: config.TemplateFiles,
+ AlertmanagerConfig: mergeResult.Config,
+ Templates: templates,
+ }, nil
}
-func (am *Alertmanager) sendConfiguration(ctx context.Context, cfg *remoteClient.GrafanaAlertmanagerConfig, hash string, createdAt int64, isDefault bool) error {
+func (am *Alertmanager) sendConfiguration(ctx context.Context, cfg remoteClient.GrafanaAlertmanagerConfig, hash string, createdAt int64, isDefault bool) error {
am.metrics.ConfigSyncsTotal.Inc()
if err := am.mimirClient.CreateGrafanaAlertmanagerConfig(
ctx,
@@ -455,10 +465,10 @@ func (am *Alertmanager) SaveAndApplyConfig(ctx context.Context, cfg *apimodels.P
return err
}
- if err := am.mergeExtraConfigs(ctx, decryptedCfg); err != nil {
+ payload, err := am.mergeExtraConfigs(ctx, decryptedCfg)
+ if err != nil {
return fmt.Errorf("unable to merge extra configurations: %w", err)
}
- payload := PostableUserConfigToGrafanaAlertmanagerConfig(decryptedCfg)
rawCfg, err := json.Marshal(payload)
if err != nil {
return err
@@ -484,7 +494,10 @@ func (am *Alertmanager) SaveAndApplyDefaultConfig(ctx context.Context) error {
return err
}
- payload := PostableUserConfigToGrafanaAlertmanagerConfig(decryptedCfg)
+ payload := remoteClient.GrafanaAlertmanagerConfig{
+ TemplateFiles: c.TemplateFiles,
+ AlertmanagerConfig: decryptedCfg.AlertmanagerConfig,
+ }
rawCfg, err := json.Marshal(payload)
if err != nil {
return err
diff --git a/pkg/services/ngalert/remote/alertmanager_test.go b/pkg/services/ngalert/remote/alertmanager_test.go
index 5aad1a47a1a..8e0b639734c 100644
--- a/pkg/services/ngalert/remote/alertmanager_test.go
+++ b/pkg/services/ngalert/remote/alertmanager_test.go
@@ -484,12 +484,18 @@ func TestCompareAndSendConfiguration(t *testing.T) {
test, err := notifier.Load([]byte(testGrafanaConfigWithSecret))
require.NoError(t, err)
- cfgWithDecryptedSecret := PostableUserConfigToGrafanaAlertmanagerConfig(test)
+ cfgWithDecryptedSecret := client.GrafanaAlertmanagerConfig{
+ TemplateFiles: test.TemplateFiles,
+ AlertmanagerConfig: test.AlertmanagerConfig,
+ }
testAutogenRoutes, err := notifier.Load([]byte(testGrafanaConfigWithSecret))
require.NoError(t, err)
require.NoError(t, testAutogenFn(nil, nil, 0, &testAutogenRoutes.AlertmanagerConfig, false))
- cfgWithAutogenRoutes := PostableUserConfigToGrafanaAlertmanagerConfig(testAutogenRoutes)
+ cfgWithAutogenRoutes := client.GrafanaAlertmanagerConfig{
+ TemplateFiles: testAutogenRoutes.TemplateFiles,
+ AlertmanagerConfig: testAutogenRoutes.AlertmanagerConfig,
+ }
// Calculate hashes for expected configurations
cfgWithDecryptedSecretBytes, err := json.Marshal(cfgWithDecryptedSecret)
@@ -506,9 +512,10 @@ func TestCompareAndSendConfiguration(t *testing.T) {
require.NoError(t, err)
r, err := cfgWithExtraUnmerged.GetMergedAlertmanagerConfig()
require.NoError(t, err)
- cfgWithExtraMerged := &client.GrafanaAlertmanagerConfig{
+ cfgWithExtraMerged := client.GrafanaAlertmanagerConfig{
TemplateFiles: cfgWithExtraUnmerged.TemplateFiles,
AlertmanagerConfig: r.Config,
+ Templates: definition.TemplatesMapToPostableAPITemplates(cfgWithExtraUnmerged.ExtraConfigs[0].TemplateFiles, definition.MimirTemplateKind),
}
cfgWithExtraMergedBytes, err := json.Marshal(cfgWithExtraMerged)
require.NoError(t, err)
@@ -827,7 +834,7 @@ func TestCompareAndSendConfigurationWithExtraConfigs(t *testing.T) {
// Return an empty config to ensure it gets replaced
w.Header().Add("content-type", "application/json")
require.NoError(t, json.NewEncoder(w).Encode(client.UserGrafanaConfig{
- GrafanaAlertmanagerConfig: &client.GrafanaAlertmanagerConfig{},
+ GrafanaAlertmanagerConfig: client.GrafanaAlertmanagerConfig{},
}))
return
}
diff --git a/pkg/services/ngalert/remote/client/alertmanager_configuration.go b/pkg/services/ngalert/remote/client/alertmanager_configuration.go
index 35239700ea7..998f785ffd6 100644
--- a/pkg/services/ngalert/remote/client/alertmanager_configuration.go
+++ b/pkg/services/ngalert/remote/client/alertmanager_configuration.go
@@ -17,24 +17,26 @@ const (
)
type GrafanaAlertmanagerConfig struct {
+ // TODO this needs to be deleted once Mimir is updated
TemplateFiles map[string]string `yaml:"template_files" json:"template_files"`
AlertmanagerConfig definition.PostableApiAlertingConfig `yaml:"alertmanager_config" json:"alertmanager_config"`
+ Templates []definition.PostableApiTemplate `yaml:"templates,omitempty" json:"templates,omitempty"`
}
func (u *GrafanaAlertmanagerConfig) MarshalJSON() ([]byte, error) {
- // this is special marshaling that makes sure that secrets are not masked
+ // This is special marshaling that makes sure that secrets are not masked.
type cfg GrafanaAlertmanagerConfig
return definition.MarshalJSONWithSecrets((*cfg)(u))
}
type UserGrafanaConfig struct {
- GrafanaAlertmanagerConfig *GrafanaAlertmanagerConfig `json:"configuration"`
- Hash string `json:"configuration_hash"`
- CreatedAt int64 `json:"created"`
- Default bool `json:"default"`
- Promoted bool `json:"promoted"`
- ExternalURL string `json:"external_url"`
- SmtpConfig SmtpConfig `json:"smtp_config"`
+ GrafanaAlertmanagerConfig GrafanaAlertmanagerConfig `json:"configuration"`
+ Hash string `json:"configuration_hash"`
+ CreatedAt int64 `json:"created"`
+ Default bool `json:"default"`
+ Promoted bool `json:"promoted"`
+ ExternalURL string `json:"external_url"`
+ SmtpConfig SmtpConfig `json:"smtp_config"`
// TODO: Remove once everything can be sent in the 'SmtpConfig' field.
SmtpFrom string `json:"smtp_from"`
@@ -64,7 +66,7 @@ func (mc *Mimir) GetGrafanaAlertmanagerConfig(ctx context.Context) (*UserGrafana
return gc, nil
}
-func (mc *Mimir) CreateGrafanaAlertmanagerConfig(ctx context.Context, cfg *GrafanaAlertmanagerConfig, hash string, createdAt int64, isDefault bool) error {
+func (mc *Mimir) CreateGrafanaAlertmanagerConfig(ctx context.Context, cfg GrafanaAlertmanagerConfig, hash string, createdAt int64, isDefault bool) error {
payload, err := definition.MarshalJSONWithSecrets(&UserGrafanaConfig{
GrafanaAlertmanagerConfig: cfg,
Hash: hash,
diff --git a/pkg/services/ngalert/remote/client/mimir.go b/pkg/services/ngalert/remote/client/mimir.go
index 3bf10465076..59c3a6ad1ee 100644
--- a/pkg/services/ngalert/remote/client/mimir.go
+++ b/pkg/services/ngalert/remote/client/mimir.go
@@ -30,7 +30,7 @@ type MimirClient interface {
DeleteGrafanaAlertmanagerState(ctx context.Context) error
GetGrafanaAlertmanagerConfig(ctx context.Context) (*UserGrafanaConfig, error)
- CreateGrafanaAlertmanagerConfig(ctx context.Context, configuration *GrafanaAlertmanagerConfig, hash string, createdAt int64, isDefault bool) error
+ CreateGrafanaAlertmanagerConfig(ctx context.Context, configuration GrafanaAlertmanagerConfig, hash string, createdAt int64, isDefault bool) error
DeleteGrafanaAlertmanagerConfig(ctx context.Context) error
TestTemplate(ctx context.Context, c alertingNotify.TestTemplatesConfigBodyParams) (*alertingNotify.TestTemplatesResults, error)
diff --git a/pkg/services/ngalert/remote/compat.go b/pkg/services/ngalert/remote/compat.go
deleted file mode 100644
index 8914bc96728..00000000000
--- a/pkg/services/ngalert/remote/compat.go
+++ /dev/null
@@ -1,13 +0,0 @@
-package remote
-
-import (
- "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions"
- "github.com/grafana/grafana/pkg/services/ngalert/remote/client"
-)
-
-func PostableUserConfigToGrafanaAlertmanagerConfig(config *definitions.PostableUserConfig) *client.GrafanaAlertmanagerConfig {
- return &client.GrafanaAlertmanagerConfig{
- TemplateFiles: config.TemplateFiles,
- AlertmanagerConfig: config.AlertmanagerConfig,
- }
-}