settings.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. define([
  2. 'underscore',
  3. 'crypto',
  4. ],
  5. function (_, crypto) {
  6. "use strict";
  7. return function Settings (options) {
  8. /**
  9. * To add a setting, you MUST define a default. Also,
  10. * THESE ARE ONLY DEFAULTS.
  11. * They are overridden by config.js in the root directory
  12. * @type {Object}
  13. */
  14. var defaults = {
  15. elasticsearch : "http://"+window.location.hostname+":9200",
  16. datasources : {
  17. default: {
  18. url: "http://"+window.location.hostname+":8080",
  19. default: true
  20. }
  21. },
  22. panels : ['graph', 'text'],
  23. plugins : {},
  24. default_route : '/dashboard/file/default.json',
  25. grafana_index : 'grafana-dash',
  26. elasticsearch_all_disabled : false,
  27. playlist_timespan : "1m",
  28. unsaved_changes_warning : true
  29. };
  30. // This initializes a new hash on purpose, to avoid adding parameters to
  31. // config.js without providing sane defaults
  32. var settings = {};
  33. _.each(defaults, function(value, key) {
  34. settings[key] = typeof options[key] !== 'undefined' ? options[key] : defaults[key];
  35. });
  36. var parseBasicAuth = function(datasource) {
  37. var passwordEnd = datasource.url.indexOf('@');
  38. if (passwordEnd > 0) {
  39. var userStart = datasource.url.indexOf('//') + 2;
  40. var userAndPassword = datasource.url.substring(userStart, passwordEnd);
  41. var bytes = crypto.charenc.Binary.stringToBytes(userAndPassword);
  42. datasource.basicAuth = crypto.util.bytesToBase64(bytes);
  43. var urlHead = datasource.url.substring(0, userStart);
  44. datasource.url = urlHead + datasource.url.substring(passwordEnd + 1);
  45. }
  46. return datasource;
  47. };
  48. var parseMultipleHosts = function(datasource) {
  49. datasource.urls = _.map(datasource.url.split(","), function (url) { return url.trim(); });
  50. return datasource;
  51. };
  52. if (options.graphiteUrl) {
  53. settings.datasources = {
  54. graphite: {
  55. type: 'graphite',
  56. url: options.graphiteUrl,
  57. default: true
  58. }
  59. };
  60. }
  61. _.each(settings.datasources, function(datasource, key) {
  62. datasource.name = key;
  63. parseBasicAuth(datasource);
  64. if (datasource.type === 'influxdb') { parseMultipleHosts(datasource); }
  65. });
  66. var elasticParsed = parseBasicAuth({ url: settings.elasticsearch });
  67. settings.elasticsearchBasicAuth = elasticParsed.basicAuth;
  68. settings.elasticsearch = elasticParsed.url;
  69. if (settings.plugins.panels) {
  70. settings.panels = _.union(settings.panels, settings.plugins.panels);
  71. }
  72. return settings;
  73. };
  74. });