Commit 7720bfab by Damien Castanier Committed by GitHub

Templating: Add new global built-in variables (#21790)

* Add new global built-in variables #20523
new branch from master

* #20523 Revert change on __from and __to like requested

* #20523 simplify contextSrv access

* #20523 simplify contextSrv access

* #20523 repair jest tests
parent 93195fac
...@@ -347,6 +347,18 @@ This variable is only available in the Singlestat panel and can be used in the p ...@@ -347,6 +347,18 @@ This variable is only available in the Singlestat panel and can be used in the p
Currently only supported for Prometheus data sources. This variable represents the range for the current dashboard. It is calculated by `to - from`. It has a millisecond and a second representation called `$__range_ms` and `$__range_s`. Currently only supported for Prometheus data sources. This variable represents the range for the current dashboard. It is calculated by `to - from`. It has a millisecond and a second representation called `$__range_ms` and `$__range_s`.
### The $__dashboard Variable
> Only available in Grafana v6.6+
This variable is the UID of the current dashboard.
`${__dashboard.name}` is the name of the current dashboard.
### The $__org Variable
> Only available in Grafana v6.6+
This variable is the ID of the current organization.
`${__org.name}` is the name of the current organization.
## Repeating Panels ## Repeating Panels
Template variables can be very useful to dynamically change your queries across a whole dashboard. If you want Template variables can be very useful to dynamically change your queries across a whole dashboard. If you want
......
...@@ -6,6 +6,12 @@ import $q from 'q'; ...@@ -6,6 +6,12 @@ import $q from 'q';
import { dateTime } from '@grafana/data'; import { dateTime } from '@grafana/data';
import { CustomVariable } from '../custom_variable'; import { CustomVariable } from '../custom_variable';
jest.mock('app/core/core', () => ({
contextSrv: {
user: { orgId: 1, orgName: 'TestOrg' },
},
}));
describe('VariableSrv', function(this: any) { describe('VariableSrv', function(this: any) {
const ctx = { const ctx = {
datasourceSrv: {}, datasourceSrv: {},
...@@ -26,6 +32,7 @@ describe('VariableSrv', function(this: any) { ...@@ -26,6 +32,7 @@ describe('VariableSrv', function(this: any) {
this.variables = vars; this.variables = vars;
}, },
updateIndex: () => {}, updateIndex: () => {},
setGlobalVariable: (name: string, variable: any) => {},
replace: (str: any) => replace: (str: any) =>
str.replace(this.regex, (match: string) => { str.replace(this.regex, (match: string) => {
return match; return match;
......
...@@ -6,6 +6,12 @@ import { DashboardModel } from '../../dashboard/state/DashboardModel'; ...@@ -6,6 +6,12 @@ import { DashboardModel } from '../../dashboard/state/DashboardModel';
// @ts-ignore // @ts-ignore
import $q from 'q'; import $q from 'q';
jest.mock('app/core/core', () => ({
contextSrv: {
user: { orgId: 1, orgName: 'TestOrg' },
},
}));
describe('VariableSrv init', function(this: any) { describe('VariableSrv init', function(this: any) {
const templateSrv = { const templateSrv = {
init: (vars: any) => { init: (vars: any) => {
...@@ -13,6 +19,7 @@ describe('VariableSrv init', function(this: any) { ...@@ -13,6 +19,7 @@ describe('VariableSrv init', function(this: any) {
}, },
variableInitialized: () => {}, variableInitialized: () => {},
updateIndex: () => {}, updateIndex: () => {},
setGlobalVariable: (name: string, variable: any) => {},
replace: (str: string) => replace: (str: string) =>
str.replace(this.regex, match => { str.replace(this.regex, match => {
return match; return match;
......
...@@ -14,7 +14,7 @@ import { DashboardModel } from 'app/features/dashboard/state/DashboardModel'; ...@@ -14,7 +14,7 @@ import { DashboardModel } from 'app/features/dashboard/state/DashboardModel';
import { TimeRange, AppEvents } from '@grafana/data'; import { TimeRange, AppEvents } from '@grafana/data';
import { CoreEvents } from 'app/types'; import { CoreEvents } from 'app/types';
import { UrlQueryMap } from '@grafana/runtime'; import { UrlQueryMap } from '@grafana/runtime';
import { appEvents } from 'app/core/core'; import { appEvents, contextSrv } from 'app/core/core';
export class VariableSrv { export class VariableSrv {
dashboard: DashboardModel; dashboard: DashboardModel;
...@@ -55,6 +55,24 @@ export class VariableSrv { ...@@ -55,6 +55,24 @@ export class VariableSrv {
) )
.then(() => { .then(() => {
this.templateSrv.updateIndex(); this.templateSrv.updateIndex();
this.templateSrv.setGlobalVariable('__dashboard', {
value: {
name: dashboard.title,
uid: dashboard.uid,
toString: function() {
return this.uid;
},
},
});
this.templateSrv.setGlobalVariable('__org', {
value: {
name: contextSrv.user.orgName,
id: contextSrv.user.id,
toString: function() {
return this.id;
},
},
});
}); });
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment