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';
41 constructor(private sanitizer: DomSanitizer, private settingsService: SettingsService) {
44 name: $localize`Last 5 minutes`,
45 value: 'from=now-5m&to=now'
48 name: $localize`Last 15 minutes`,
49 value: 'from=now-15m&to=now'
52 name: $localize`Last 30 minutes`,
53 value: 'from=now-30m&to=now'
56 name: $localize`Last 1 hour (Default)`,
57 value: 'from=now-1h&to=now'
60 name: $localize`Last 3 hours`,
61 value: 'from=now-3h&to=now'
64 name: $localize`Last 6 hours`,
65 value: 'from=now-6h&to=now'
68 name: $localize`Last 12 hours`,
69 value: 'from=now-12h&to=now'
72 name: $localize`Last 24 hours`,
73 value: 'from=now-24h&to=now'
76 name: $localize`Yesterday`,
77 value: 'from=now-1d%2Fd&to=now-1d%2Fd'
80 name: $localize`Today so far`,
81 value: 'from=now%2Fd&to=now'
84 name: $localize`Day before yesterday`,
85 value: 'from=now-2d%2Fd&to=now-2d%2Fd'
88 name: $localize`Last 2 days`,
89 value: 'from=now-2d&to=now'
92 name: $localize`This day last week`,
93 value: 'from=now-7d%2Fd&to=now-7d%2Fd'
96 name: $localize`Previous week`,
97 value: 'from=now-1w%2Fw&to=now-1w%2Fw'
100 name: $localize`This week so far`,
101 value: 'from=now%2Fw&to=now'
104 name: $localize`Last 7 days`,
105 value: 'from=now-7d&to=now'
108 name: $localize`Previous month`,
109 value: 'from=now-1M%2FM&to=now-1M%2FM'
112 name: $localize`This month so far`,
113 value: 'from=now%2FM&to=now'
116 name: $localize`Last 30 days`,
117 value: 'from=now-30d&to=now'
120 name: $localize`Last 90 days`,
121 value: 'from=now-90d&to=now'
124 name: $localize`Last 6 months`,
125 value: 'from=now-6M&to=now'
128 name: $localize`Last 1 year`,
129 value: 'from=now-1y&to=now'
132 name: $localize`Previous year`,
133 value: 'from=now-1y%2Fy&to=now-1y%2Fy'
136 name: $localize`This year so far`,
137 value: 'from=now%2Fy&to=now'
140 name: $localize`Last 2 years`,
141 value: 'from=now-2y&to=now'
144 name: $localize`Last 5 years`,
145 value: 'from=now-5y&to=now'
151 this.time = this.DEFAULT_TIME;
155 three: 'grafana_three',
159 this.datasource = this.type === 'metrics' ? 'Dashboard1' : 'Loki';
161 this.settingsService.ifSettingConfigured('api/grafana/url', (url) => {
162 this.grafanaExist = true;
163 this.loading = false;
164 this.baseUrl = url + '/d/';
167 this.panelStyle = this.styles[this.grafanaStyle];
172 .validateGrafanaDashboardUrl(this.uid)
173 .subscribe((data: any) => (this.dashboardExist = data === 200));
174 if (this.type === 'metrics') {
175 this.url = `${this.baseUrl}${this.uid}/${this.grafanaPath}&refresh=2s&var-datasource=${this.datasource}${this.mode}&${this.time}`;
177 this.url = `${this.baseUrl.slice(0, -2)}${this.grafanaPath}orgId=1&left=["now-1h","now","${
179 }",{"refId":"A"}]${this.mode}`;
181 this.grafanaSrc = this.sanitizer.bypassSecurityTrustResourceUrl(this.url);
184 onTimepickerChange() {
185 if (this.grafanaExist) {
191 this.time = this.DEFAULT_TIME;
192 if (this.grafanaExist) {
198 if (this.grafanaExist) {