Skip to content

Commit 156a61c

Browse files
committed
feat: enhance logstash filters component with loading state and quick create functionality
Signed-off-by: Manuel Abascal <mjabascal10@gmail.com>
1 parent 2119df8 commit 156a61c

5 files changed

Lines changed: 69 additions & 14 deletions

File tree

frontend/src/app/logstash/logstash-filters/logstash-filters.component.html

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
<div class="d-flex justify-content-between w-100 align-items-center" >
1+
<div *ngIf="filters.length > 0" class="d-flex justify-content-between w-100 align-items-center" >
22
<h6 class="font-weight-semibold m-0">Pipeline filters</h6>
3-
<button (click)="filterEdit = null;openEditJson = true"
3+
<button (click)="addCustomFilter()"
44
class="btn utm-button utm-button-primary">
55
<i class="icon-database-add mr-2"></i> Add filter
66
</button>
@@ -11,8 +11,7 @@ <h6 class="font-weight-semibold m-0">Pipeline filters</h6>
1111
<code [innerHTML]="pipeline.reloads.lastError.message | safe:'html'"></code>
1212
</div>-->
1313

14-
<div class="row w-100 m-0 mt-3 d-flex justify-content-center align-items-center container-pipeline flex-column"
15-
*ngIf="filters.length>0 && !loading">
14+
<div *ngIf="filters.length > 0 && !loading; else isLoading" class="row w-100 m-0 mt-3 d-flex justify-content-center align-items-center container-pipeline flex-column" >
1615
<span inlineSVG="assets/icons/system/DATA-FILTER.svg"
1716
class="svg-icon svg-icon-4x svg-icon-grey text-grey-300"></span>
1817
<div class="pipeline-line pipeline-{{lineColor}}">
@@ -56,6 +55,16 @@ <h6 (click)="viewFilter(filter)" class="d-flex justify-content-start align-items
5655

5756
</div>
5857

58+
<ng-template #isLoading>
59+
<div class="p-5 d-flex justify-content-center align-items-center text-blue-800">
60+
<app-utm-spinner [height]="'35px'"
61+
[label]="'Loading filters...'"
62+
[loading]="loading"
63+
[width]="'35px'">
64+
</app-utm-spinner>
65+
</div>
66+
</ng-template>
67+
5968

6069
<div *ngIf="openEditJson" class="utm-right-container">
6170
<div (click)="openEditJson= undefined" class="overlay overlay-lg"></div>
@@ -70,10 +79,12 @@ <h6 class="card-title text-blue-800 font-weight-light">
7079
<div class="close-icon"></div>
7180
</button>
7281
</div>
73-
<app-logstash-filter-create *ngIf="filter" (filterEditClose)="onFilterEditClose()"
82+
<app-logstash-filter-create *ngIf="filter"
83+
(filterEditClose)="onFilterEditClose()"
7484
[disable] = "filterEdit && filterEdit.systemOwner"
75-
(close)="openEditJson= undefined"
85+
(close)="onFilterEditDismiss()"
7686
[dataType]="filter.datatype"
77-
[filter]="filterEdit" [pipeline]="pipeline"></app-logstash-filter-create>
87+
[filter]="filterEdit" [pipeline]="pipeline">
88+
</app-logstash-filter-create>
7889
</div>
7990
</div>

frontend/src/app/logstash/logstash-filters/logstash-filters.component.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@ import {UtmPipeline} from '../shared/types/logstash-stats.type';
1818
})
1919
export class LogstashFiltersComponent implements OnInit {
2020
@Input() pipeline: UtmPipeline;
21+
@Input() enableQuickCreate = false;
2122
filters: LogstashFilterType[] = [];
2223
filter: LogstashFilterType = {} as LogstashFilterType;
23-
loading = true;
24+
loading = false;
2425
totalItems: any;
2526
requestParams =
2627
{
@@ -42,6 +43,7 @@ export class LogstashFiltersComponent implements OnInit {
4243

4344
ngOnInit() {
4445
if (this.pipeline) {
46+
this.loading = true;
4547
this.requestParams = {
4648
...this.requestParams,
4749
pipelineId: this.pipeline.id
@@ -69,11 +71,17 @@ export class LogstashFiltersComponent implements OnInit {
6971
}
7072

7173
onFilterEditClose() {
74+
this.enableQuickCreate = false;
7275
this.requestParams.page = 0;
7376
this.getLogsFilters();
7477
this.openEditJson = false;
7578
}
7679

80+
onFilterEditDismiss() {
81+
this.enableQuickCreate = false;
82+
this.openEditJson = false;
83+
}
84+
7785
deleteFilter(filter: LogstashFilterType) {
7886
const modalFilter = this.modalService.open(ModalConfirmationComponent, {centered: true});
7987
modalFilter.componentInstance.header = 'Delete asset';
@@ -102,6 +110,10 @@ export class LogstashFiltersComponent implements OnInit {
102110
this.filters = data;
103111
this.filter = data[0] || {};
104112
this.loading = false;
113+
114+
if (this.enableQuickCreate) {
115+
this.addCustomFilter();
116+
}
105117
}
106118

107119
private onError(error) {
@@ -128,4 +140,9 @@ export class LogstashFiltersComponent implements OnInit {
128140
this.filterEdit = filter;
129141
this.openEditJson = true;
130142
}
143+
144+
addCustomFilter() {
145+
this.filterEdit = null;
146+
this.openEditJson = true;
147+
}
131148
}

frontend/src/app/logstash/logstash-pipelines/logstash-pipelines.component.html

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,20 @@ <h5 class="card-title label-header mb-0 text-uppercase label-header">
1313
*ngFor="let pipeline of logstashPipelines.pipelines"
1414
[ngClass]="{'card-pipeline-selected':pipelineDetail && pipeline.pipelineId === pipelineDetail.pipelineId}"
1515
(click)="viewPipeline(pipeline)">
16-
<h6 class="text-blue-800 d-flex justify-content-start w-100">
16+
<div class="d-flex justify-content-between w-100 align-items-center" >
17+
<h6 class="text-blue-800 d-flex justify-content-start">
1718
<span
1819
[ngClass]="pipeline.pipelineStatus==='up'?'text-success':'text-danger'"
1920
class="span-small-icon d-flex justify-content-start align-items-center">
2021
<i
2122
[ngClass]="'icon-circle2'"
2223
class="mr-2"></i></span>
23-
{{ pipeline.pipelineName }}
24-
</h6>
24+
{{ pipeline.pipelineName }}
25+
</h6>
26+
<button [ngbTooltip]="'Add filter'" (click)="addCustomFilter(pipeline)" class="btn btn-small btn-icon btn-outline-info">
27+
<i class="small-md-icon icon-database-add"></i>
28+
</button>
29+
</div>
2530
<img class="p-3 mt-2 mt-1"
2631
[alt]="pipeline.moduleName"
2732
[src]="'/assets/img/guides/logos/' + getModuleSvg(pipeline.moduleName)">
@@ -174,7 +179,10 @@ <h6 class="card-title text-blue-800 font-weight-light">
174179
*ngTemplateOutlet="pipelineEventTemplate; context: { pipeline: pipelineDetail, showColum:false }"></ng-container>
175180
</div>
176181

177-
<app-logstash-filters *ngIf="pipelineDetail" [pipeline]="pipelineDetail"></app-logstash-filters>
182+
<app-logstash-filters *ngIf="pipelineDetail"
183+
[enableQuickCreate]="enableQuickCreate"
184+
[pipeline]="pipelineDetail">
185+
</app-logstash-filters>
178186
</div>
179187
</div>
180188
</div>

frontend/src/app/logstash/logstash-pipelines/logstash-pipelines.component.scss

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,3 +387,15 @@ p {
387387
font-size: 0.88rem!important;
388388
}
389389

390+
.btn-outline-info {
391+
color: #0277bd !important;;
392+
border-color: #0277bd !important;
393+
padding: 0.175rem .75rem!important;
394+
}
395+
396+
.btn-outline-info:hover {
397+
color: #fff!important;
398+
background-color: #0277bd!important;
399+
border-color: #0277bd!important;
400+
}
401+

frontend/src/app/logstash/logstash-pipelines/logstash-pipelines.component.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export class LogstashPipelinesComponent implements OnInit, OnDestroy, AfterViewC
2424
img3: string;
2525
img4: string;
2626
img5: string;
27+
enableQuickCreate = false;
2728

2829
constructor(private elasticHealthService: ElasticHealthService,
2930
private logstashService: LogstashService,
@@ -33,10 +34,10 @@ export class LogstashPipelinesComponent implements OnInit, OnDestroy, AfterViewC
3334
ngOnInit() {
3435
this.getHealth();
3536
this.getLogstashStats();
36-
this.interval = setInterval(() => {
37+
/*this.interval = setInterval(() => {
3738
this.getHealth();
3839
this.getLogstashStats();
39-
}, 5000);
40+
}, 5000);*/
4041
this.imageChangeInterval = setInterval(() => this.setImages(), 8000);
4142
}
4243

@@ -71,6 +72,7 @@ export class LogstashPipelinesComponent implements OnInit, OnDestroy, AfterViewC
7172

7273
closeDetail() {
7374
this.pipelineDetail = null;
75+
this.enableQuickCreate = false;
7476
}
7577

7678
getClusterHealth() {
@@ -100,4 +102,9 @@ export class LogstashPipelinesComponent implements OnInit, OnDestroy, AfterViewC
100102
const icon = this.svgMap[module];
101103
return icon ? icon : 'generic.svg';
102104
}
105+
106+
addCustomFilter(pipeline: UtmPipeline) {
107+
this.enableQuickCreate = true;
108+
this.viewPipeline(pipeline);
109+
}
103110
}

0 commit comments

Comments
 (0)