settings.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. panel_names : [],
  23. default_route : '/dashboard/file/default.json',
  24. grafana_index : 'grafana-dash',
  25. elasticsearch_all_disabled : false,
  26. timezoneOffset : null,
  27. unsaved_changes_warning : true
  28. };
  29. // This initializes a new hash on purpose, to avoid adding parameters to
  30. // config.js without providing sane defaults
  31. var settings = {};
  32. _.each(defaults, function(value, key) {
  33. settings[key] = typeof options[key] !== 'undefined' ? options[key] : defaults[key];
  34. });
  35. var parseBasicAuth = function(datasource) {
  36. var passwordEnd = datasource.url.indexOf('@');
  37. if (passwordEnd > 0) {
  38. var userStart = datasource.url.indexOf('//') + 2;
  39. var userAndPassword = datasource.url.substring(userStart, passwordEnd);
  40. var bytes = crypto.charenc.Binary.stringToBytes(userAndPassword);
  41. datasource.basicAuth = crypto.util.bytesToBase64(bytes);
  42. var urlHead = datasource.url.substring(0, userStart);
  43. datasource.url = urlHead + datasource.url.substring(passwordEnd + 1);
  44. }
  45. return datasource;
  46. };
  47. var parseMultipleHosts = function(datasource) {
  48. datasource.urls = _.map(datasource.url.split(","), function (url) { return url.trim(); });
  49. return datasource;
  50. };
  51. if (options.graphiteUrl) {
  52. settings.datasources = {
  53. graphite: {
  54. type: 'graphite',
  55. url: options.graphiteUrl,
  56. default: true
  57. }
  58. };
  59. }
  60. _.each(settings.datasources, function(datasource, key) {
  61. datasource.name = key;
  62. parseBasicAuth(datasource);
  63. if (datasource.type === 'influxdb') { parseMultipleHosts(datasource); }
  64. });
  65. var elasticParsed = parseBasicAuth({ url: settings.elasticsearch });
  66. settings.elasticsearchBasicAuth = elasticParsed.basicAuth;
  67. settings.elasticsearch = elasticParsed.url;
  68. return settings;
  69. };
  70. });