| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- ///<reference path="../../headers/common.d.ts" />
- import angular from 'angular';
- import _ from 'lodash';
- import $ from 'jquery';
- import coreModule from 'app/core/core_module';
- import appEvents from 'app/core/app_events';
- interface Variable {
- }
- class ConstantVariable implements Variable {
- constructor(private model) {
- }
- }
- class CustomVariable implements Variable {
- constructor(private model) {
- }
- }
- class IntervalVariable implements Variable {
- constructor(private model) {
- }
- }
- class QueryVariable implements Variable {
- constructor(private model,
- private variableSrv: VariableSrv,
- private datasourceSrv) {
- _.extend(this, model);
- }
- updateOptions() {
- return this.datasourceSrv.get(this.datasource)
- .then(_.partial(this.updateOptionsFromMetricFindQuery, variable))
- .then(_.partial(this.updateTags, variable))
- .then(_.partial(this.validateVariableSelectionState, variable));
- }
- }
- class DatasourceVariable implements Variable {
- constructor(private model) {
- }
- }
- export class VariableSrv {
- dashboard: any;
- variables: any;
- variableLock: any;
- /** @ngInject */
- constructor(
- private $q,
- private $rootScope,
- private datasourceSrv,
- private $location,
- private templateSrv,
- private timeSrv) {
- }
- init(dashboard) {
- this.variableLock = {};
- this.dashboard = dashboard;
- this.variables = dashboard.templating.list.map(item => {
- return new QueryVariable(item, this);
- });
- this.templateSrv.init(this.variables);
- return this.$q.when();
- }
- updateOptions(variable) {
- return variable.updateOptions();
- }
- variableUpdated(variable) {
- // if there is a variable lock ignore cascading update because we are in a boot up scenario
- if (this.variableLock[variable.name]) {
- return this.$q.when();
- }
- var promises = _.map(this.variables, otherVariable => {
- if (otherVariable === variable) {
- return;
- }
- if (this.templateSrv.containsVariable(otherVariable.regex, variable.name) ||
- this.templateSrv.containsVariable(otherVariable.query, variable.name) ||
- this.templateSrv.containsVariable(otherVariable.datasource, variable.name)) {
- return this.updateOptions(otherVariable);
- }
- });
- return this.$q.all(promises);
- }
- }
- coreModule.service('variableSrv', VariableSrv);
|