| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- define([
- 'angular',
- 'moment',
- 'lodash',
- 'jquery',
- 'app/core/utils/kbn',
- 'app/core/utils/datemath',
- './impression_store'
- ],
- function (angular, moment, _, $, kbn, dateMath, impressionStore) {
- 'use strict';
- kbn = kbn.default;
- var module = angular.module('grafana.services');
- module.service('dashboardLoaderSrv', function(backendSrv,
- dashboardSrv,
- datasourceSrv,
- $http, $q, $timeout,
- contextSrv, $routeParams,
- $rootScope) {
- var self = this;
- this._dashboardLoadFailed = function(title, snapshot) {
- snapshot = snapshot || false;
- return {
- meta: { canStar: false, isSnapshot: snapshot, canDelete: false, canSave: false, canEdit: false, dashboardNotFound: true },
- dashboard: {title: title }
- };
- };
- this.loadDashboard = function(type, slug) {
- var promise;
- if (type === 'script') {
- promise = this._loadScriptedDashboard(slug);
- } else if (type === 'snapshot') {
- promise = backendSrv.get('/api/snapshots/' + $routeParams.slug)
- .catch(function() {
- return self._dashboardLoadFailed("Snapshot not found", true);
- });
- } else {
- promise = backendSrv.getDashboard($routeParams.type, $routeParams.slug)
- .catch(function() {
- return self._dashboardLoadFailed("Not found");
- });
- }
- promise.then(function(result) {
- if (result.meta.dashboardNotFound !== true) {
- impressionStore.impressions.addDashboardImpression(result.dashboard.id);
- }
- return result;
- });
- return promise;
- };
- this._loadScriptedDashboard = function(file) {
- var url = 'public/dashboards/'+file.replace(/\.(?!js)/,"/") + '?' + new Date().getTime();
- return $http({ url: url, method: "GET" })
- .then(this._executeScript).then(function(result) {
- return { meta: { fromScript: true, canDelete: false, canSave: false, canStar: false}, dashboard: result.data };
- }, function(err) {
- console.log('Script dashboard error '+ err);
- $rootScope.appEvent('alert-error', ["Script Error", "Please make sure it exists and returns a valid dashboard"]);
- return self._dashboardLoadFailed('Scripted dashboard');
- });
- };
- this._executeScript = function(result) {
- var services = {
- dashboardSrv: dashboardSrv,
- datasourceSrv: datasourceSrv,
- $q: $q,
- };
- /*jshint -W054 */
- var script_func = new Function('ARGS','kbn','dateMath','_','moment','window','document','$','jQuery', 'services', result.data);
- var script_result = script_func($routeParams, kbn, dateMath, _ , moment, window, document, $, $, services);
- // Handle async dashboard scripts
- if (_.isFunction(script_result)) {
- var deferred = $q.defer();
- script_result(function(dashboard) {
- $timeout(function() {
- deferred.resolve({ data: dashboard });
- });
- });
- return deferred.promise;
- }
- return { data: script_result };
- };
- });
- });
|