1 import { HttpClient } from '@angular/common/http';
2 import { Injectable } from '@angular/core';
4 import _ from 'lodash';
5 import { Observable } from 'rxjs';
6 import { map } from 'rxjs/operators';
8 class SettingResponse {
18 export class SettingsService {
19 constructor(private http: HttpClient) {}
21 private settings: { [url: string]: string } = {};
23 getValues(names: string | string[]): Observable<{ [key: string]: any }> {
24 if (_.isArray(names)) {
25 names = names.join(',');
27 return this.http.get(`api/settings?names=${names}`).pipe(
28 map((resp: SettingResponse[]) => {
30 _.forEach(resp, (option: SettingResponse) => {
31 _.set(result, option.name, option.value);
38 ifSettingConfigured(url: string, fn: (value?: string) => void, elseFn?: () => void): void {
39 const setting = this.settings[url];
40 if (setting === undefined) {
41 this.http.get(url).subscribe(
43 this.settings[url] = this.getSettingsValue(data);
44 this.ifSettingConfigured(url, fn, elseFn);
47 if (resp.status !== 401) {
48 this.settings[url] = '';
52 } else if (setting !== '') {
61 // Easiest way to stop reloading external content that can't be reached
62 disableSetting(url: string) {
63 this.settings[url] = '';
66 private getSettingsValue(data: any): string {
67 return data.value || data.instance || '';
70 validateGrafanaDashboardUrl(uid: string) {
71 return this.http.get(`api/grafana/validation/${uid}`);
74 getStandardSettings(): Observable<{ [key: string]: any }> {
75 return this.http.get('ui-api/standard_settings');