1 <div *
ngIf=
"contentData">
2 <ng-container *
ngTemplateOutlet=
"logFiltersTpl"></ng-container>
8 <li ngbNavItem=
"cluster-logs">
11 <ng-template ngbNavContent
>
12 <div class=
"card bg-light mb-3"
14 <div class=
"btn-group"
17 <cd-download-button [objectItem]=
"clog"
19 fileName=
"cluster_log">
21 <cd-copy-2-clipboard-button
24 </cd-copy-2-clipboard-button>
26 <div class=
"card-body">
27 <p *
ngFor=
"let line of clog">
28 <span class=
"timestamp">{{ line.stamp | cdDate }}
</span>
29 <span class=
"priority {{ line.priority | logPriority }}">{{ line.priority }}
</span>
31 [innerHTML]=
"line.message | searchHighlight: search"></span>
34 <ng-container *
ngIf=
"clog.length != 0 else noEntriesTpl"></ng-container>
39 <li ngbNavItem=
"audit-logs">
42 <ng-template ngbNavContent
>
43 <div class=
"card bg-light mb-3"
45 <div class=
"btn-group"
47 *
ngIf=
"audit_log.length">
48 <cd-download-button [objectItem]=
"audit_log"
49 [textItem]=
"auditLogText"
52 <cd-copy-2-clipboard-button
53 [source]=
"auditLogText"
55 </cd-copy-2-clipboard-button>
57 <div class=
"card-body">
58 <p *
ngFor=
"let line of audit_log">
59 <span class=
"timestamp">{{ line.stamp | cdDate }}
</span>
60 <span class=
"priority {{ line.priority | logPriority }}">{{ line.priority }}
</span>
62 [innerHTML]=
"line.message | searchHighlight: search"></span>
65 <ng-container *
ngIf=
"audit_log.length != 0 else noEntriesTpl"></ng-container>
70 <li ngbNavItem=
"daemon-logs">
73 <ng-template ngbNavContent
>
74 <ng-container *
ngIf=
"lokiServiceStatus$ | async as lokiServiceStatus; else daemonLogsTpl">
75 <div *
ngIf=
"promtailServiceStatus$ | async as promtailServiceStatus; else daemonLogsTpl">
76 <cd-grafana [grafanaPath]=
"'explore?'"
87 <div [ngbNavOutlet]=
"nav"></div>
90 <ng-template #logFiltersTpl
>
91 <div class=
"form-inline">
92 <div class=
"form-group">
93 <label for=
"logs-priority"
94 i18n
>Priority:
</label>
95 <select id=
"logs-priority"
97 [(ngModel)]=
"priority"
98 (ngModelChange)=
"filterLogs()">
99 <option *
ngFor=
"let prio of priorities"
100 [value]=
"prio.value">{{ prio.name }}
</option>
104 <div class=
"form-group">
105 <label for=
"logs-keyword"
106 i18n
>Keyword:
</label>
107 <div class=
"input-group">
108 <div class=
"input-group-prepend">
109 <span class=
"input-group-text">
110 <i [ngClass]=
"[icons.search]"></i>
114 <input class=
"form-control"
118 (keyup)=
"filterLogs()">
120 <div class=
"input-group-append">
121 <button type=
"button"
122 class=
"btn btn-light"
123 (click)=
"clearSearchKey()">
124 <i class=
"icon-prepend {{ icons.destroy }}"></i>
130 <div class=
"form-group">
131 <label for=
"logs-date"
133 <div class=
"input-group">
134 <input class=
"form-control"
136 placeholder=
"YYYY-MM-DD"
141 [(ngModel)]=
"selectedDate"
142 (ngModelChange)=
"filterLogs()">
143 <span class=
"input-group-append">
144 <button type=
"button"
145 class=
"btn btn-light"
146 (click)=
"clearDate()">
147 <i class=
"icon-prepend {{ icons.destroy }}"></i>
153 <div class=
"form-group">
154 <label i18n
>Time range:
</label>
155 <ngb-timepicker [spinners]=
"false"
156 [(ngModel)]=
"startTime"
157 (ngModelChange)=
"filterLogs()"></ngb-timepicker>
159 <span> — </span>
161 <ngb-timepicker [spinners]=
"false"
162 [(ngModel)]=
"endTime"
163 (ngModelChange)=
"filterLogs()"></ngb-timepicker>
168 <ng-template #noEntriesTpl
>
169 <span i18n
>No log entries found. Please try to select different filter options.
</span>
172 (click)=
"resetFilter()"
173 i18n
>Reset filter.
</a>
176 <ng-template #daemonLogsTpl
>
177 <cd-alert-panel type=
"info"
178 title=
"Loki/Promtail service not running"
180 <ng-container i18n
>Please start the loki and promtail service to see these logs.
</ng-container>