fromScript.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. define([
  2. 'angular',
  3. 'jquery',
  4. 'config',
  5. 'lodash',
  6. 'kbn',
  7. 'moment'
  8. ],
  9. function (angular, $, config, _, kbn, moment) {
  10. "use strict";
  11. var module = angular.module('grafana.routes');
  12. module.config(function($routeProvider) {
  13. $routeProvider
  14. .when('/dashboard/script/:jsFile', {
  15. templateUrl: 'app/partials/dashboard.html',
  16. controller : 'DashFromScriptProvider',
  17. reloadOnSearch: false,
  18. });
  19. });
  20. module.controller('DashFromScriptProvider', function($scope, $rootScope, $http, $routeParams, $q, dashboardSrv, datasourceSrv, $timeout) {
  21. var execute_script = function(result) {
  22. var services = {
  23. dashboardSrv: dashboardSrv,
  24. datasourceSrv: datasourceSrv,
  25. $q: $q,
  26. };
  27. /*jshint -W054 */
  28. var script_func = new Function('ARGS','kbn','_','moment','window','document','$','jQuery', 'services', result.data);
  29. var script_result = script_func($routeParams, kbn, _ , moment, window, document, $, $, services);
  30. // Handle async dashboard scripts
  31. if (_.isFunction(script_result)) {
  32. var deferred = $q.defer();
  33. script_result(function(dashboard) {
  34. $timeout(function() {
  35. deferred.resolve({ data: dashboard });
  36. });
  37. });
  38. return deferred.promise;
  39. }
  40. return { data: script_result };
  41. };
  42. var script_load = function(file) {
  43. var url = 'app/dashboards/'+file.replace(/\.(?!js)/,"/") + '?' + new Date().getTime();
  44. return $http({ url: url, method: "GET" })
  45. .then(execute_script)
  46. .then(null,function(err) {
  47. console.log('Script dashboard error '+ err);
  48. $scope.appEvent('alert-error', ["Script Error", "Please make sure it exists and returns a valid dashboard"]);
  49. return false;
  50. });
  51. };
  52. script_load($routeParams.jsFile).then(function(result) {
  53. $scope.initDashboard(result.data, $scope);
  54. });
  55. });
  56. });