config_ctrl.ts 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import _ from 'lodash';
  2. import { SyntheticEvent } from 'react';
  3. export class PostgresConfigCtrl {
  4. static templateUrl = 'partials/config.html';
  5. current: any;
  6. datasourceSrv: any;
  7. showTimescaleDBHelp: boolean;
  8. /** @ngInject */
  9. constructor($scope, datasourceSrv) {
  10. this.datasourceSrv = datasourceSrv;
  11. this.current.jsonData.sslmode = this.current.jsonData.sslmode || 'verify-full';
  12. this.current.jsonData.postgresVersion = this.current.jsonData.postgresVersion || 903;
  13. this.showTimescaleDBHelp = false;
  14. this.autoDetectFeatures();
  15. }
  16. autoDetectFeatures() {
  17. if (!this.current.id) {
  18. return;
  19. }
  20. this.datasourceSrv.loadDatasource(this.current.name).then(ds => {
  21. return ds.getVersion().then(version => {
  22. version = Number(version[0].text);
  23. // timescaledb is only available for 9.6+
  24. if (version >= 906) {
  25. ds.getTimescaleDBVersion().then(version => {
  26. if (version.length === 1) {
  27. this.current.jsonData.timescaledb = true;
  28. }
  29. });
  30. }
  31. const major = Math.trunc(version / 100);
  32. const minor = version % 100;
  33. let name = String(major);
  34. if (version < 1000) {
  35. name = String(major) + '.' + String(minor);
  36. }
  37. if (!_.find(this.postgresVersions, (p: any) => p.value === version)) {
  38. this.postgresVersions.push({ name: name, value: version });
  39. }
  40. this.current.jsonData.postgresVersion = version;
  41. });
  42. });
  43. }
  44. toggleTimescaleDBHelp() {
  45. this.showTimescaleDBHelp = !this.showTimescaleDBHelp;
  46. }
  47. onPasswordReset = (event: SyntheticEvent<HTMLInputElement>) => {
  48. event.preventDefault();
  49. this.current.secureJsonFields.password = false;
  50. this.current.secureJsonData = this.current.secureJsonData || {};
  51. this.current.secureJsonData.password = '';
  52. };
  53. onPasswordChange = (event: SyntheticEvent<HTMLInputElement>) => {
  54. this.current.secureJsonData = this.current.secureJsonData || {};
  55. this.current.secureJsonData.password = event.currentTarget.value;
  56. };
  57. // the value portion is derived from postgres server_version_num/100
  58. postgresVersions = [
  59. { name: '9.3', value: 903 },
  60. { name: '9.4', value: 904 },
  61. { name: '9.5', value: 905 },
  62. { name: '9.6', value: 906 },
  63. { name: '10', value: 1000 },
  64. ];
  65. }