diff options
author | Chocobozzz <me@florianbigard.com> | 2021-10-20 14:23:32 +0200 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2021-10-20 14:33:38 +0200 |
commit | 64553e8809271df1113e9143426a27f234410a74 (patch) | |
tree | beba7a8d4016b74dd3b85e8081482a3ea6d00eaf /client | |
parent | 1243729899082a71b3a3efb759df1478d9ea5c83 (diff) | |
download | PeerTube-64553e8809271df1113e9143426a27f234410a74.tar.gz PeerTube-64553e8809271df1113e9143426a27f234410a74.tar.zst PeerTube-64553e8809271df1113e9143426a27f234410a74.zip |
Add ability to filter logs by tags
Diffstat (limited to 'client')
6 files changed, 32 insertions, 19 deletions
diff --git a/client/src/app/+admin/system/logs/logs.component.html b/client/src/app/+admin/system/logs/logs.component.html index b2c7f84bc..18011b205 100644 --- a/client/src/app/+admin/system/logs/logs.component.html +++ b/client/src/app/+admin/system/logs/logs.component.html | |||
@@ -28,6 +28,8 @@ | |||
28 | </ng-option> | 28 | </ng-option> |
29 | </ng-select> | 29 | </ng-select> |
30 | 30 | ||
31 | <my-select-tags i18n-placeholder placeholder="Filter logs by tags" [(ngModel)]="tagsOneOf" (ngModelChange)="refresh()"></my-select-tags> | ||
32 | |||
31 | <my-button i18n-label label="Refresh" icon="refresh" (click)="refresh()"></my-button> | 33 | <my-button i18n-label label="Refresh" icon="refresh" (click)="refresh()"></my-button> |
32 | </div> | 34 | </div> |
33 | 35 | ||
diff --git a/client/src/app/+admin/system/logs/logs.component.scss b/client/src/app/+admin/system/logs/logs.component.scss index fefa7efc2..be66d563b 100644 --- a/client/src/app/+admin/system/logs/logs.component.scss +++ b/client/src/app/+admin/system/logs/logs.component.scss | |||
@@ -52,9 +52,7 @@ | |||
52 | @include peertube-select-container(150px); | 52 | @include peertube-select-container(150px); |
53 | } | 53 | } |
54 | 54 | ||
55 | my-button, | 55 | > * { |
56 | .peertube-select-container, | ||
57 | ng-select { | ||
58 | @include margin-left(10px); | 56 | @include margin-left(10px); |
59 | } | 57 | } |
60 | } | 58 | } |
diff --git a/client/src/app/+admin/system/logs/logs.component.ts b/client/src/app/+admin/system/logs/logs.component.ts index 865ab80a2..06237522a 100644 --- a/client/src/app/+admin/system/logs/logs.component.ts +++ b/client/src/app/+admin/system/logs/logs.component.ts | |||
@@ -23,6 +23,7 @@ export class LogsComponent implements OnInit { | |||
23 | startDate: string | 23 | startDate: string |
24 | level: LogLevel | 24 | level: LogLevel |
25 | logType: 'audit' | 'standard' | 25 | logType: 'audit' | 'standard' |
26 | tagsOneOf: string[] = [] | ||
26 | 27 | ||
27 | constructor ( | 28 | constructor ( |
28 | private logsService: LogsService, | 29 | private logsService: LogsService, |
@@ -51,20 +52,28 @@ export class LogsComponent implements OnInit { | |||
51 | load () { | 52 | load () { |
52 | this.loading = true | 53 | this.loading = true |
53 | 54 | ||
54 | this.logsService.getLogs({ isAuditLog: this.isAuditLog(), level: this.level, startDate: this.startDate }) | 55 | const tagsOneOf = this.tagsOneOf.length !== 0 |
55 | .subscribe({ | 56 | ? this.tagsOneOf |
56 | next: logs => { | 57 | : undefined |
57 | this.logs = logs | 58 | |
58 | 59 | this.logsService.getLogs({ | |
59 | setTimeout(() => { | 60 | isAuditLog: this.isAuditLog(), |
60 | this.logsElement.nativeElement.scrollIntoView({ block: 'end', inline: 'nearest' }) | 61 | level: this.level, |
61 | }) | 62 | startDate: this.startDate, |
62 | }, | 63 | tagsOneOf |
64 | }).subscribe({ | ||
65 | next: logs => { | ||
66 | this.logs = logs | ||
67 | |||
68 | setTimeout(() => { | ||
69 | this.logsElement.nativeElement.scrollIntoView({ block: 'end', inline: 'nearest' }) | ||
70 | }) | ||
71 | }, | ||
63 | 72 | ||
64 | error: err => this.notifier.error(err.message), | 73 | error: err => this.notifier.error(err.message), |
65 | 74 | ||
66 | complete: () => this.loading = false | 75 | complete: () => this.loading = false |
67 | }) | 76 | }) |
68 | } | 77 | } |
69 | 78 | ||
70 | isAuditLog () { | 79 | isAuditLog () { |
diff --git a/client/src/app/+admin/system/logs/logs.service.ts b/client/src/app/+admin/system/logs/logs.service.ts index 0c222cad2..ea7e08b9b 100644 --- a/client/src/app/+admin/system/logs/logs.service.ts +++ b/client/src/app/+admin/system/logs/logs.service.ts | |||
@@ -2,7 +2,7 @@ import { Observable } from 'rxjs' | |||
2 | import { catchError, map } from 'rxjs/operators' | 2 | import { catchError, map } from 'rxjs/operators' |
3 | import { HttpClient, HttpParams } from '@angular/common/http' | 3 | import { HttpClient, HttpParams } from '@angular/common/http' |
4 | import { Injectable } from '@angular/core' | 4 | import { Injectable } from '@angular/core' |
5 | import { RestExtractor } from '@app/core' | 5 | import { RestExtractor, RestService } from '@app/core' |
6 | import { LogLevel } from '@shared/models' | 6 | import { LogLevel } from '@shared/models' |
7 | import { environment } from '../../../../environments/environment' | 7 | import { environment } from '../../../../environments/environment' |
8 | import { LogRow } from './log-row.model' | 8 | import { LogRow } from './log-row.model' |
@@ -14,22 +14,25 @@ export class LogsService { | |||
14 | 14 | ||
15 | constructor ( | 15 | constructor ( |
16 | private authHttp: HttpClient, | 16 | private authHttp: HttpClient, |
17 | private restService: RestService, | ||
17 | private restExtractor: RestExtractor | 18 | private restExtractor: RestExtractor |
18 | ) {} | 19 | ) {} |
19 | 20 | ||
20 | getLogs (options: { | 21 | getLogs (options: { |
21 | isAuditLog: boolean | 22 | isAuditLog: boolean |
22 | startDate: string | 23 | startDate: string |
24 | tagsOneOf?: string[] | ||
23 | level?: LogLevel | 25 | level?: LogLevel |
24 | endDate?: string | 26 | endDate?: string |
25 | }): Observable<any[]> { | 27 | }): Observable<any[]> { |
26 | const { isAuditLog, startDate } = options | 28 | const { isAuditLog, startDate, endDate, tagsOneOf } = options |
27 | 29 | ||
28 | let params = new HttpParams() | 30 | let params = new HttpParams() |
29 | params = params.append('startDate', startDate) | 31 | params = params.append('startDate', startDate) |
30 | 32 | ||
31 | if (!isAuditLog) params = params.append('level', options.level) | 33 | if (!isAuditLog) params = params.append('level', options.level) |
32 | if (options.endDate) params.append('endDate', options.endDate) | 34 | if (endDate) params = params.append('endDate', options.endDate) |
35 | if (tagsOneOf) params = this.restService.addArrayParams(params, 'tagsOneOf', tagsOneOf) | ||
33 | 36 | ||
34 | const path = isAuditLog | 37 | const path = isAuditLog |
35 | ? LogsService.BASE_AUDIT_LOG_URL | 38 | ? LogsService.BASE_AUDIT_LOG_URL |
diff --git a/client/src/app/shared/shared-forms/select/select-tags.component.html b/client/src/app/shared/shared-forms/select/select-tags.component.html index e1cd50882..de6cee6db 100644 --- a/client/src/app/shared/shared-forms/select/select-tags.component.html +++ b/client/src/app/shared/shared-forms/select/select-tags.component.html | |||
@@ -2,7 +2,7 @@ | |||
2 | [items]="availableItems" | 2 | [items]="availableItems" |
3 | [(ngModel)]="selectedItems" | 3 | [(ngModel)]="selectedItems" |
4 | (ngModelChange)="onModelChange()" | 4 | (ngModelChange)="onModelChange()" |
5 | i18n-placeholder placeholder="Enter a new tag" | 5 | [placeholder]="placeholder" |
6 | [maxSelectedItems]="5" | 6 | [maxSelectedItems]="5" |
7 | [clearable]="true" | 7 | [clearable]="true" |
8 | [addTag]="true" | 8 | [addTag]="true" |
diff --git a/client/src/app/shared/shared-forms/select/select-tags.component.ts b/client/src/app/shared/shared-forms/select/select-tags.component.ts index 93d199037..bef04de8a 100644 --- a/client/src/app/shared/shared-forms/select/select-tags.component.ts +++ b/client/src/app/shared/shared-forms/select/select-tags.component.ts | |||
@@ -16,6 +16,7 @@ import { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms' | |||
16 | export class SelectTagsComponent implements ControlValueAccessor { | 16 | export class SelectTagsComponent implements ControlValueAccessor { |
17 | @Input() availableItems: string[] = [] | 17 | @Input() availableItems: string[] = [] |
18 | @Input() selectedItems: string[] = [] | 18 | @Input() selectedItems: string[] = [] |
19 | @Input() placeholder = $localize`Enter a new tag` | ||
19 | 20 | ||
20 | propagateChange = (_: any) => { /* empty */ } | 21 | propagateChange = (_: any) => { /* empty */ } |
21 | 22 | ||