1 import { Component, Input, OnChanges, OnInit } from '@angular/core';
2 import { DomSanitizer, SafeUrl } from '@angular/platform-browser';
4 import { SettingsService } from '~/app/shared/api/settings.service';
5 import { Icons } from '~/app/shared/enum/icons.enum';
8 selector: 'cd-grafana',
9 templateUrl: './grafana.component.html',
10 styleUrls: ['./grafana.component.scss']
12 export class GrafanaComponent implements OnInit, OnChanges {
24 styles: Record<string, string> = {};
25 dashboardExist = true;
30 readonly DEFAULT_TIME: string = 'from=now-1h&to=now';
43 constructor(private sanitizer: DomSanitizer, private settingsService: SettingsService) {
46 name: $localize`Last 5 minutes`,
47 value: 'from=now-5m&to=now'
50 name: $localize`Last 15 minutes`,
51 value: 'from=now-15m&to=now'
54 name: $localize`Last 30 minutes`,
55 value: 'from=now-30m&to=now'
58 name: $localize`Last 1 hour (Default)`,
59 value: 'from=now-1h&to=now'
62 name: $localize`Last 3 hours`,
63 value: 'from=now-3h&to=now'
66 name: $localize`Last 6 hours`,
67 value: 'from=now-6h&to=now'
70 name: $localize`Last 12 hours`,
71 value: 'from=now-12h&to=now'
74 name: $localize`Last 24 hours`,
75 value: 'from=now-24h&to=now'
78 name: $localize`Yesterday`,
79 value: 'from=now-1d%2Fd&to=now-1d%2Fd'
82 name: $localize`Today so far`,
83 value: 'from=now%2Fd&to=now'
86 name: $localize`Day before yesterday`,
87 value: 'from=now-2d%2Fd&to=now-2d%2Fd'
90 name: $localize`Last 2 days`,
91 value: 'from=now-2d&to=now'
94 name: $localize`This day last week`,
95 value: 'from=now-7d%2Fd&to=now-7d%2Fd'
98 name: $localize`Previous week`,
99 value: 'from=now-1w%2Fw&to=now-1w%2Fw'
102 name: $localize`This week so far`,
103 value: 'from=now%2Fw&to=now'
106 name: $localize`Last 7 days`,
107 value: 'from=now-7d&to=now'
110 name: $localize`Previous month`,
111 value: 'from=now-1M%2FM&to=now-1M%2FM'
114 name: $localize`This month so far`,
115 value: 'from=now%2FM&to=now'
118 name: $localize`Last 30 days`,
119 value: 'from=now-30d&to=now'
122 name: $localize`Last 90 days`,
123 value: 'from=now-90d&to=now'
126 name: $localize`Last 6 months`,
127 value: 'from=now-6M&to=now'
130 name: $localize`Last 1 year`,
131 value: 'from=now-1y&to=now'
134 name: $localize`Previous year`,
135 value: 'from=now-1y%2Fy&to=now-1y%2Fy'
138 name: $localize`This year so far`,
139 value: 'from=now%2Fy&to=now'
142 name: $localize`Last 2 years`,
143 value: 'from=now-2y&to=now'
146 name: $localize`Last 5 years`,
147 value: 'from=now-5y&to=now'
153 this.time = this.DEFAULT_TIME;
157 three: 'grafana_three',
161 this.datasource = this.type === 'metrics' ? 'Dashboard1' : 'Loki';
163 this.settingsService.ifSettingConfigured('api/grafana/url', (url) => {
164 this.grafanaExist = true;
165 this.loading = false;
166 this.baseUrl = url + '/d/';
169 this.panelStyle = this.styles[this.grafanaStyle];
174 .validateGrafanaDashboardUrl(this.uid)
175 .subscribe((data: any) => (this.dashboardExist = data === 200));
176 if (this.type === 'metrics') {
177 this.url = `${this.baseUrl}${this.uid}/${this.grafanaPath}&refresh=2s&var-datasource=${this.datasource}${this.mode}&${this.time}`;
179 this.url = `${this.baseUrl.slice(0, -2)}${this.grafanaPath}orgId=1&left=["now-1h","now","${
181 }",{"refId":"A"}]${this.mode}`;
183 this.grafanaSrc = this.sanitizer.bypassSecurityTrustResourceUrl(this.url);
186 onTimepickerChange() {
187 if (this.grafanaExist) {
193 this.time = this.DEFAULT_TIME;
194 if (this.grafanaExist) {
200 if (this.grafanaExist) {