Skip to content
Snippets Groups Projects
Commit 6ac87315 authored by ddamiron's avatar ddamiron
Browse files

update data-logs report:

add paginator
add tabs
update css
parent 8e2740c5
No related branches found
No related tags found
5 merge requests!10New updated datalog,!9add all datalog components and services into angular gui,!8update Datalog research input,!7Datalog research input,!14Version 1.3.0
Showing
with 729 additions and 41 deletions
...@@ -13,7 +13,8 @@ import { FormatDetailComponent } from './formats/detail/format-detail.component' ...@@ -13,7 +13,8 @@ import { FormatDetailComponent } from './formats/detail/format-detail.component'
import { FormatFormComponent } from './formats/edit/format-form.component'; import { FormatFormComponent } from './formats/edit/format-form.component';
import { ImageUploadComponent } from './image-upload/image-upload.component'; import { ImageUploadComponent } from './image-upload/image-upload.component';
import { NotificationsComponent } from './notifications/notifications.component'; import { NotificationsComponent } from './notifications/notifications.component';
import { LogsDataComponent } from './logs-dashboard/report/logs-data/logs-data.component'; import { LogsInfoComponent } from './logs-dashboard/report/logs-info/logs-info.component';
import { LogsErrorComponent } from './logs-dashboard/report/logs-error/logs-error.component';
import { LogsGraphComponent } from './logs-dashboard/report/logs-graph/logs-graph.component'; import { LogsGraphComponent } from './logs-dashboard/report/logs-graph/logs-graph.component';
import { LogsSessionsComponent } from './logs-dashboard/logs-sessions/logs-sessions.component'; import { LogsSessionsComponent } from './logs-dashboard/logs-sessions/logs-sessions.component';
import { LogsSlugsComponent } from './logs-dashboard/logs-slugs/logs-slugs.component'; import { LogsSlugsComponent } from './logs-dashboard/logs-slugs/logs-slugs.component';
...@@ -38,7 +39,8 @@ export { ...@@ -38,7 +39,8 @@ export {
FormatFormComponent, FormatFormComponent,
ImageUploadComponent, ImageUploadComponent,
NotificationsComponent, NotificationsComponent,
LogsDataComponent, LogsInfoComponent,
LogsErrorComponent,
LogsGraphComponent, LogsGraphComponent,
LogsSessionsComponent, LogsSessionsComponent,
LogsSlugsComponent, LogsSlugsComponent,
...@@ -65,7 +67,8 @@ export const AppComponents = [ ...@@ -65,7 +67,8 @@ export const AppComponents = [
FormatFormComponent, FormatFormComponent,
ImageUploadComponent, ImageUploadComponent,
NotificationsComponent, NotificationsComponent,
LogsDataComponent, LogsInfoComponent,
LogsErrorComponent,
LogsGraphComponent, LogsGraphComponent,
LogsSessionsComponent, LogsSessionsComponent,
LogsSlugsComponent, LogsSlugsComponent,
......
<!-- <div class="columns is-centered is-marginless">
<label class="btn btn-outline-secondary" *ngFor="let logType of logTypes">
<input type="checkbox" class="checkbox" [(ngModel)]="logType.selected"> {{logType.name}}
</label>
</div> -->
<div class="columns is-centered is-marginless paginator-container">
<!-- this.paginator.limit: {{this.paginator.limit}}<br>
pageIndex: {{ this.paginator.pageIndex }}<br>
lenght: {{this.paginator.length}}<br> -->
</div>
<div class="section">
<div class="columns is-centered is-marginless">
<div class="column has-text-left">
<div *ngFor="let oneStepData of allStepsData; let i=index; let odd=odd; let even=even;">
<div *ngIf="oneStepData" (click)='getLogsSelector(oneStepData._id.step, oneStepData.counts);'>
<div class="table entity-list-table">
<div class="columns is-marginless">
<div class="column is-6 has-text-left">
<p>Step: {{oneStepData._id.step}}</p>
</div>
</div>
<div class="columns is-marginless">
<div class="column is-6 has-text-left">
<p>Durée: {{oneStepData.totalHoursSpent}}h : {{oneStepData.totalMinutesSpent}}m :
{{oneStepData.totalSecondsSpent}}s</p>
</div>
<div class="column is-6 has-text-right">
<div class="arrows" [ngClass]="{'is-displayed': displayedStep === oneStepData._id.step}">
<svg xmlns="https://www.w3.org/2000/svg" id="chevron" viewBox="0 0 15 9">
<path
d="M7.5 7.5c-.1 0-.3-.1-.4-.1l-6-6C1 1.1 1 .8 1.1.6s.5-.2.7 0l5.6 5.6L13 .6c.2-.2.5-.2.7 0s.2.5 0 .7l-6 6c.1.1-.1.2-.2.2z"
class="brandcolor" />
<path
d="M7.5 7.5c-.1 0-.3-.1-.4-.1l-6-6C1 1.1 1 .8 1.1.6s.5-.2.7 0l5.6 5.6L13 .6c.2-.2.5-.2.7 0s.2.5 0 .7l-6 6c.1.1-.1.2-.2.2z"
class="brandcolor" />
</svg>
</div>
</div>
</div>
<div class="columns is-marginless">
<div class="column is-6 has-text-left">
<p>Erreur(s): {{oneStepData.counts.ERROR}}</p>
</div>
<div class="column is-6 has-text-left">
<p>Info(s): {{oneStepData.counts.INFO}}</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="column has-text-left">
<div class="mini-log-card" *ngIf="allLogs?.lenght==0">
<p>No DATA</p>
</div>
<!-- <div class="mini-error-card" *ngIf="!allErrorLogs?.lenght>0">
<p>No DATA</p>
</div> -->
<app-paginator [length]="paginator.length" [pageSize]="paginator.limit"
[pageSizeOptions]="paginator.pageSizeOptions" [pageIndex]="paginator.pageIndex" [pagesToShow]="5"
[showFirstLastButtons]="true" (page)="changePagination($event)" (pageSizeChanged)="changePageSize($event)">
</app-paginator>
<div *ngFor="let oneErrorLog of allErrorLogs">
<div class="mini-error-card" *ngIf="oneErrorLog">
<span>
<p>slug: {{oneErrorLog.slug}} </p>
<p>uuid: {{oneErrorLog.uuid}} </p>
<p>sessionId: {{oneErrorLog.session_id}} </p>
<h3>
<p>step: {{oneErrorLog.step}}</p>
<p>status: {{oneErrorLog.status}}</p>
<p>info: {{oneErrorLog.info}}</p>
<p>progress-ratio: {{oneErrorLog.progress_ratio}}</p>
</h3>
</span>
</div>
</div>
<div>
</div>
</div>
</div>
</div>
\ No newline at end of file
...@@ -53,5 +53,8 @@ figure { ...@@ -53,5 +53,8 @@ figure {
.arrows.is-displayed svg { .arrows.is-displayed svg {
transform: rotate(-90deg); transform: rotate(-90deg);
} }
.paginator-container{
background-color: yellowgreen;
}
import { Component, OnChanges, SimpleChanges, Input } from '@angular/core';
import { DataLogsService } from 'src/app/services/data-logs.service';
import { ActivatedRoute, ParamMap } from '@angular/router';
import { switchMap } from 'rxjs/operators';
import { ILogs } from 'src/app/models/logs.model';
import { FormsModule } from '@angular/forms';
import { PaginatorOptions } from 'src/app/models/paginator-options.model';
import { Subscription } from 'rxjs';
@Component({
selector: 'app-logs-error',
templateUrl: './logs-error.component.html',
styleUrls: ['./logs-error.component.scss'],
})
export class LogsErrorComponent implements OnChanges {
@Input() childUuid: string = '';
@Input() childSessionId: string = '';
@Input() childSlug: string;
searchChangeSub: Subscription;
selectedStep = {
step:'main',
nbErrors: 0,
nbInfos: 0,
};
displayedStep: string = 'none';
logTypes: any = [
{
name : 'erreurs',
selected : true,
},
{
name : 'infos',
selected : false,
},
];
uuid: string;
sessionId: string;
slug: string;
data: any;
stepData: ILogs;
allStepsData: any;
allErrorLogs: any;
allLogs: any;
nbSessionId: number;
nbUuid: number;
nbSlug: number;
// Paginator options
paginator: PaginatorOptions;
pageSizeOptions = [5, 10, 25, 100];
sessionIdList: [string];
constructor(
private dataLogsService: DataLogsService,
private route: ActivatedRoute,
) {
this.paginator = {
pageIndex: this.dataLogsService.pageNumber,
length: 1,
limit: this.dataLogsService.limit,
pageSizeOptions: [5, 10, 20],
};
}
ngOnChanges(changes: SimpleChanges): void {
this.data = [];
this.slug = this.childSlug;
this.allStepsData = [];
this.allErrorLogs = [];
this.getLogsSteps();
this.searchChangeSub = this.dataLogsService.searchChange$.subscribe(
() => {
this.paginator.limit = this.dataLogsService.limit;
this.paginator.pageIndex = this.dataLogsService.pageNumber;
if (this.logTypes[0].selected === true) {
this.getErrorStepsLogs(this.selectedStep.step, this.selectedStep.nbErrors, this.paginator.pageIndex);
}
if (this.logTypes[1].selected === true) {
this.getSimpleStepsLogs(this.selectedStep.step, this.selectedStep.nbInfos, this.paginator.pageIndex);
}
},
);
}
getLogsSteps() {
if ((this.childUuid != null) && (this.childSessionId != null)) {
// console.log('parameters', this.childUuid, this.childSessionId);
this.dataLogsService.getAllStepsDuration(
this.childUuid,
this.childSessionId,
).subscribe((results) => {
console.log('getAllStepsDuration results', results);
this.allStepsData = results;
},
);
}
}
getLogsSelector(step, counts) {
this.selectedStep.step = step;
this.selectedStep.nbErrors = counts.ERROR;
this.selectedStep.nbInfos = counts.INFO;
this.allErrorLogs = [];
this.allLogs = [];
this.displayedStep = step;
if (this.logTypes[0].selected === true) {
this.getErrorStepsLogs(step, this.selectedStep.nbErrors, 1);
}
if (this.logTypes[1].selected === true) {
this.getSimpleStepsLogs(step, this.selectedStep.nbInfos, 1);
}
}
getErrorStepsLogs(step, nbErrors, pageNumber) {
if ((this.childUuid != null) && (this.childSessionId != null)) {
// console.log('parameters', this.childUuid, this.childSessionId);
this.dataLogsService.getLogsStepsLogs(
step,
this.childSessionId,
this.childUuid,
'ERROR',
nbErrors,
pageNumber,
).subscribe((results) => {
// console.log('results', results);
this.allErrorLogs = results;
this.paginator.limit = this.dataLogsService.limit;
this.paginator.pageIndex = this.dataLogsService.pageNumber;
this.paginator.length = this.dataLogsService.length;
},
);
}
}
getSimpleStepsLogs(step, nbInfos, pageNumber) {
if ((this.childUuid != null) && (this.childSessionId != null)) {
// console.log('parameters', this.childUuid, this.childSessionId);
this.dataLogsService.getLogsStepsLogs(
step,
this.childSessionId,
this.childUuid,
'INFO',
nbInfos,
pageNumber,
).subscribe((results) => {
// console.log('results', results);
this.allLogs = results;
this.paginator.limit = this.dataLogsService.limit;
this.paginator.pageIndex = this.dataLogsService.pageNumber;
this.paginator.length = this.dataLogsService.length;
},
);
}
}
// When pagination is changed by user, we update datasetList with new pagination options
changePagination(pageIndex) {
this.dataLogsService.paginationChanged(this.paginator.limit, pageIndex);
}
changePageSize(pageSize) {
this.dataLogsService.paginationChanged(pageSize, 1);
}
}
<p> <ng-container>
</p> <div>
<div class="graph-component"> <div class="section">
<div *ngFor="let data of this.graphData"> <div class="graph-component">
<div *ngFor="let timestamp of data.timestamps"> <div class="columns is-left ">
</div> <p>slug: {{childSlug}} &nbsp; sessionId: {{childSessionId}} </p>
</div>
<div class="columns is-left ">
<p>uuid: {{childUuid}} </p>
</div>
<a class="button button-gl is-centered" (click)="replotGraph()">
Reload Chart
</a>
<div class="columns is-centered">
<div class="graph-div-canvas">
</div> <canvas id="graphCanvas">{{ chart }}</canvas>
<a class="button button-gl is-centered" (click)="replotGraph()">
Reload Chart
</a>
<div class="graph-div-canvas">
<p>uuid: {{childUuid}} </p>
<p>sessionId: {{childSessionId}} </p>
<p>slug: {{childSlug}} </p>
<canvas id="graphCanvas">{{ chart }}</canvas>
</div>
</div>
</div>
</div>
</div> </div>
</div> </ng-container>
\ No newline at end of file
.graph-div-canvas{ .graph-div-canvas{
width: 95%; width: 80%;
left: 10%;
} }
\ No newline at end of file
<div class="section"> <!-- <div class="columns is-centered is-marginless">
<label class="btn btn-outline-secondary" *ngFor="let logType of logTypes"> <label class="btn btn-outline-secondary" *ngFor="let logType of logTypes">
<input type="checkbox" [(ngModel)]="logType.selected"> {{logType.name}} <input type="checkbox" class="checkbox" [(ngModel)]="logType.selected"> {{logType.name}}
</label> </label>
</div> -->
<div class="columns is-centered is-marginless paginator-container">
<!-- this.paginator.limit: {{this.paginator.limit}}<br>
pageIndex: {{ this.paginator.pageIndex }}<br>
lenght: {{this.paginator.length}}<br> -->
</div> </div>
<div class="section"> <div class="section">
<div class="columns is-centered is-marginless"> <div class="columns is-centered is-marginless">
<div class="column has-text-left"> <div class="column has-text-left">
<div *ngFor="let oneStepData of allStepsData">
<div class="mini-info-card" *ngIf="oneStepData" (click)='getLogsSelector(oneStepData._id.step);'>
<div class="table">
<div class="columns is-marginless">
<div class="column is-3 has-text-left">
</div>
<div class="column is-5 has-text-center">
<h3>Step: {{oneStepData._id.step}}</h3>
</div>
<div class="column is-2 has-text-left">
</div>
</div>
<div class="columns is-marginless">
<div class="column is-5 has-text-left">
<span>
<h3>
<p>total-time: {{oneStepData.totalHoursSpent}}h : {{oneStepData.totalMinutesSpent}}m :
{{oneStepData.totalSecondsSpent}}s </p>
<p>Info(s): {{oneStepData.counts.INFO}}</p>
<p>Erreur(s): {{oneStepData.counts.ERROR}}</p>
</h3>
</span>
</div>
<div class="column is-6 has-text-right"> <div *ngFor="let oneStepData of allStepsData; let i=index; let odd=odd; let even=even;">
<br> <div *ngIf="oneStepData" (click)='getLogsSelector(oneStepData._id.step, oneStepData.counts);'>
<span> <div class="table entity-list-table">
<div class="arrows" [ngClass]="{'is-displayed': displayedStep === oneStepData._id.step}"> <div class="columns is-marginless">
<svg xmlns="https://www.w3.org/2000/svg" id="chevron" viewBox="0 0 15 9"> <div class="column is-6 has-text-left">
<path <p>Step: {{oneStepData._id.step}}</p>
d="M7.5 7.5c-.1 0-.3-.1-.4-.1l-6-6C1 1.1 1 .8 1.1.6s.5-.2.7 0l5.6 5.6L13 .6c.2-.2.5-.2.7 0s.2.5 0 .7l-6 6c.1.1-.1.2-.2.2z" </div>
class="brandcolor" /> </div>
<path <div class="columns is-marginless">
d="M7.5 7.5c-.1 0-.3-.1-.4-.1l-6-6C1 1.1 1 .8 1.1.6s.5-.2.7 0l5.6 5.6L13 .6c.2-.2.5-.2.7 0s.2.5 0 .7l-6 6c.1.1-.1.2-.2.2z" <div class="column is-6 has-text-left">
class="brandcolor" /> <p>Durée: {{oneStepData.totalHoursSpent}}h : {{oneStepData.totalMinutesSpent}}m :
</svg> {{oneStepData.totalSecondsSpent}}s</p>
</div> </div>
</span> <div class="column is-6 has-text-right">
<div class="arrows" [ngClass]="{'is-displayed': displayedStep === oneStepData._id.step}">
<svg xmlns="https://www.w3.org/2000/svg" id="chevron" viewBox="0 0 15 9">
<path
d="M7.5 7.5c-.1 0-.3-.1-.4-.1l-6-6C1 1.1 1 .8 1.1.6s.5-.2.7 0l5.6 5.6L13 .6c.2-.2.5-.2.7 0s.2.5 0 .7l-6 6c.1.1-.1.2-.2.2z"
class="brandcolor" />
<path
d="M7.5 7.5c-.1 0-.3-.1-.4-.1l-6-6C1 1.1 1 .8 1.1.6s.5-.2.7 0l5.6 5.6L13 .6c.2-.2.5-.2.7 0s.2.5 0 .7l-6 6c.1.1-.1.2-.2.2z"
class="brandcolor" />
</svg>
</div> </div>
</div>
</div>
<div class="columns is-marginless">
<div class="column is-6 has-text-left">
<p>Erreur(s): {{oneStepData.counts.ERROR}}</p>
</div> </div>
</div> <div class="column is-6 has-text-left">
<p>Info(s): {{oneStepData.counts.INFO}}</p>
</div>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -59,7 +64,10 @@ ...@@ -59,7 +64,10 @@
<!-- <div class="mini-error-card" *ngIf="!allErrorLogs?.lenght>0"> <!-- <div class="mini-error-card" *ngIf="!allErrorLogs?.lenght>0">
<p>No DATA</p> <p>No DATA</p>
</div> --> </div> -->
<app-paginator [length]="paginator.length" [pageSize]="paginator.limit"
[pageSizeOptions]="paginator.pageSizeOptions" [pageIndex]="paginator.pageIndex" [pagesToShow]="5"
[showFirstLastButtons]="true" (page)="changePagination($event)" (pageSizeChanged)="changePageSize($event)">
</app-paginator>
<div *ngFor="let oneLog of allLogs"> <div *ngFor="let oneLog of allLogs">
<div class="mini-log-card" *ngIf="oneLog"> <div class="mini-log-card" *ngIf="oneLog">
...@@ -74,6 +82,7 @@ ...@@ -74,6 +82,7 @@
<p>progress-ratio: {{oneLog.progress_ratio}}</p> <p>progress-ratio: {{oneLog.progress_ratio}}</p>
</h3> </h3>
</span> </span>
</div> </div>
</div> </div>
...@@ -94,6 +103,10 @@ ...@@ -94,6 +103,10 @@
</span> </span>
</div> </div>
</div> </div>
<div>
</div>
</div> </div>
</div> </div>
</div> </div>
\ No newline at end of file
@import "../../../../../scss/variables.scss";
@import "../../../../../../node_modules/bulma/sass/utilities/_all.sass";
figure {
text-align: center;
}
figure img{
max-width: 150px;
display: inline-block;
margin-top: 20px;
}
.card-header-title {
justify-content: center;
}
.mini-info-card{
margin-top: 20px;
padding: 20px;
background-color: yellow;
}
.mini-log-card{
margin-top: 20px;
padding: 20px;
background-color: greenyellow;
}
.mini-error-card{
margin-top: 20px;
padding: 20px;
background-color: red;
}
.input-field{
width: 200%;
margin-top: 20px;
}
.hidden {
display: none;
}
.arrows {
svg {
width: 16px;
fill: $grey-dark-color;
transform: rotate(0deg);
}
}
.arrows.is-displayed svg {
transform: rotate(-90deg);
}
.paginator-container{
background-color: yellowgreen;
}
...@@ -4,16 +4,25 @@ import { ActivatedRoute, ParamMap } from '@angular/router'; ...@@ -4,16 +4,25 @@ import { ActivatedRoute, ParamMap } from '@angular/router';
import { switchMap } from 'rxjs/operators'; import { switchMap } from 'rxjs/operators';
import { ILogs } from 'src/app/models/logs.model'; import { ILogs } from 'src/app/models/logs.model';
import { FormsModule } from '@angular/forms'; import { FormsModule } from '@angular/forms';
import { PaginatorOptions } from 'src/app/models/paginator-options.model';
import { Subscription } from 'rxjs';
@Component({ @Component({
selector: 'app-logs-data', selector: 'app-logs-info',
templateUrl: './logs-data.component.html', templateUrl: './logs-info.component.html',
styleUrls: ['./logs-data.component.scss'], styleUrls: ['./logs-info.component.scss'],
}) })
export class LogsDataComponent implements OnChanges { export class LogsInfoComponent implements OnChanges {
@Input() childUuid: string = ''; @Input() childUuid: string = '';
@Input() childSessionId: string = ''; @Input() childSessionId: string = '';
@Input() childSlug: string; @Input() childSlug: string;
searchChangeSub: Subscription;
selectedStep = {
step:'main',
nbErrors: 0,
nbInfos: 0,
};
displayedStep: string = 'none'; displayedStep: string = 'none';
logTypes: any = [ logTypes: any = [
{ {
...@@ -36,13 +45,21 @@ export class LogsDataComponent implements OnChanges { ...@@ -36,13 +45,21 @@ export class LogsDataComponent implements OnChanges {
nbSessionId: number; nbSessionId: number;
nbUuid: number; nbUuid: number;
nbSlug: number; nbSlug: number;
tempStep: string = ''; // Paginator options
paginator: PaginatorOptions;
pageSizeOptions = [5, 10, 25, 100];
sessionIdList: [string]; sessionIdList: [string];
constructor( constructor(
private dataLogsService: DataLogsService, private dataLogsService: DataLogsService,
private route: ActivatedRoute, private route: ActivatedRoute,
) { } ) {
this.paginator = {
pageIndex: this.dataLogsService.pageNumber,
length: 1,
limit: this.dataLogsService.limit,
pageSizeOptions: [5, 10, 20],
};
}
ngOnChanges(changes: SimpleChanges): void { ngOnChanges(changes: SimpleChanges): void {
this.data = []; this.data = [];
...@@ -50,6 +67,18 @@ export class LogsDataComponent implements OnChanges { ...@@ -50,6 +67,18 @@ export class LogsDataComponent implements OnChanges {
this.allStepsData = []; this.allStepsData = [];
this.allErrorLogs = []; this.allErrorLogs = [];
this.getLogsSteps(); this.getLogsSteps();
this.searchChangeSub = this.dataLogsService.searchChange$.subscribe(
() => {
this.paginator.limit = this.dataLogsService.limit;
this.paginator.pageIndex = this.dataLogsService.pageNumber;
if (this.logTypes[0].selected === true) {
this.getErrorStepsLogs(this.selectedStep.step, this.selectedStep.nbErrors, this.paginator.pageIndex);
}
if (this.logTypes[1].selected === true) {
this.getSimpleStepsLogs(this.selectedStep.step, this.selectedStep.nbInfos, this.paginator.pageIndex);
}
},
);
} }
getLogsSteps() { getLogsSteps() {
...@@ -66,19 +95,21 @@ export class LogsDataComponent implements OnChanges { ...@@ -66,19 +95,21 @@ export class LogsDataComponent implements OnChanges {
); );
} }
} }
getLogsSelector(step) { getLogsSelector(step, counts) {
this.tempStep = step; this.selectedStep.step = step;
this.selectedStep.nbErrors = counts.ERROR;
this.selectedStep.nbInfos = counts.INFO;
this.allErrorLogs = []; this.allErrorLogs = [];
this.allLogs = []; this.allLogs = [];
this.displayedStep = step; this.displayedStep = step;
if (this.logTypes[0].selected === true) { if (this.logTypes[0].selected === true) {
this.getErrorStepsLogs(step); this.getErrorStepsLogs(step, this.selectedStep.nbErrors, 1);
} }
if (this.logTypes[1].selected === true) { if (this.logTypes[1].selected === true) {
this.getSimpleStepsLogs(step); this.getSimpleStepsLogs(step, this.selectedStep.nbInfos, 1);
} }
} }
getErrorStepsLogs(step) { getErrorStepsLogs(step, nbErrors, pageNumber) {
if ((this.childUuid != null) && (this.childSessionId != null)) { if ((this.childUuid != null) && (this.childSessionId != null)) {
// console.log('parameters', this.childUuid, this.childSessionId); // console.log('parameters', this.childUuid, this.childSessionId);
...@@ -87,14 +118,19 @@ export class LogsDataComponent implements OnChanges { ...@@ -87,14 +118,19 @@ export class LogsDataComponent implements OnChanges {
this.childSessionId, this.childSessionId,
this.childUuid, this.childUuid,
'ERROR', 'ERROR',
nbErrors,
pageNumber,
).subscribe((results) => { ).subscribe((results) => {
// console.log('results', results); // console.log('results', results);
this.allErrorLogs = results; this.allErrorLogs = results;
this.paginator.limit = this.dataLogsService.limit;
this.paginator.pageIndex = this.dataLogsService.pageNumber;
this.paginator.length = this.dataLogsService.length;
}, },
); );
} }
} }
getSimpleStepsLogs(step) { getSimpleStepsLogs(step, nbInfos, pageNumber) {
if ((this.childUuid != null) && (this.childSessionId != null)) { if ((this.childUuid != null) && (this.childSessionId != null)) {
// console.log('parameters', this.childUuid, this.childSessionId); // console.log('parameters', this.childUuid, this.childSessionId);
...@@ -103,11 +139,25 @@ export class LogsDataComponent implements OnChanges { ...@@ -103,11 +139,25 @@ export class LogsDataComponent implements OnChanges {
this.childSessionId, this.childSessionId,
this.childUuid, this.childUuid,
'INFO', 'INFO',
nbInfos,
pageNumber,
).subscribe((results) => { ).subscribe((results) => {
// console.log('results', results); // console.log('results', results);
this.allLogs = results; this.allLogs = results;
this.paginator.limit = this.dataLogsService.limit;
this.paginator.pageIndex = this.dataLogsService.pageNumber;
this.paginator.length = this.dataLogsService.length;
}, },
); );
} }
} }
// When pagination is changed by user, we update datasetList with new pagination options
changePagination(pageIndex) {
this.dataLogsService.paginationChanged(this.paginator.limit, pageIndex);
}
changePageSize(pageSize) {
this.dataLogsService.paginationChanged(pageSize, 1);
}
} }
...@@ -2,12 +2,25 @@ ...@@ -2,12 +2,25 @@
<div class="section page-container"> <div class="section page-container">
<app-page-header [pageInfo]="pageHeaderInfo" [goToThisUrl]='previousUrl' [hideBackButton]="false"></app-page-header> <app-page-header [pageInfo]="pageHeaderInfo" [goToThisUrl]='previousUrl' [hideBackButton]="false"></app-page-header>
<app-logs-graph [childUuid]="uuid" [childSessionId]="sessionId" [childSlug]="slug"></app-logs-graph> <ul class="tabs-container">
<div class="columns is-centered "> <li *ngFor="let tab of tabs" (click)="tabsToggler(tab.name)" [ngClass]="{'is-active':tab.isActive}">
<!-- [routerLink]="tab.fullRouterLinkPath" routerLinkActive="is-active" -->
<span class="tab-label">{{ tab.name }}</span>
</li>
</ul>
<app-logs-graph [hidden]="!isToggled" [childUuid]="uuid" [childSessionId]="sessionId" [childSlug]="slug"></app-logs-graph>
<div class="columns is-centered " [hidden]="isToggled">
<hr> <hr>
<h3>Détails de la session:</h3> <h3>Détails de la session:</h3>
<hr> <hr>
</div> </div>
<app-logs-data [childUuid]="uuid" [childSessionId]="sessionId" [childSlug]="slug"></app-logs-data>
<app-logs-info [hidden]="isToggled||isToggled==undefined" [childUuid]="uuid" [childSessionId]="sessionId" [childSlug]="slug"></app-logs-info>
<app-logs-error [hidden]="isToggled!=undefined" [childUuid]="uuid" [childSessionId]="sessionId" [childSlug]="slug"></app-logs-error>
</div> </div>
</ng-container> </ng-container>
\ No newline at end of file
@import "../../../../../scss/variables.scss";
@import "../../../../../../node_modules/bulma/sass/utilities/_all.sass";
figure {
text-align: center;
}
figure img{
max-width: 150px;
display: inline-block;
margin-top: 20px;
}
.card-header-title {
justify-content: center;
}
.mini-log-card{
margin-top: 20px;
padding: 20px;
background-color: yellow;
}
.input-field{
width: 200%;
margin-top: 20px;
}
.hidden {
display: none;
}
.icon {
cursor: pointer;
&:hover {
.fa-plus {
color: lightblue;
}
.fa-trash {
color: #d5232a;
}
}
}
.tabs-container {
display: flex;
align-content: stretch;
flex-wrap: wrap;
border-bottom: 1px solid $grey-super-light-color;
li {
display: flex;
align-items: center;
padding-right: 2rem;
padding-bottom: 0.4rem;
padding-top: 0.4rem;
cursor: pointer;
position: relative;
margin-bottom: 1px;
width: 50%;
@media screen and (min-width: $tablet) {
width: 33%;
padding-right: 3rem;
}
@media screen and (min-width: $desktop) {
width: 20%;
}
}
li:last-child {
padding-right: 0;
}
.tab-label {
font-size: 1rem;
font-weight: 500;
color: $brand-color;
}
li:hover {
.tab-label {
font-weight: 700;
}
}
li:focus{
.tab-label {
color: $tomato-color;
font-weight: 700;
}
}
li.is-active {
.tab-label {
color: $tomato-color;
font-weight: 600;
}
}
li::after {
content: '';
display: block;
height: 2px;
background: $tomato-color;
width: 0;
position: absolute;
bottom: -2px;
}
li.is-active::after {
transition: width 0.3s;
width: 100%;
}
}
.full-width { .full-width {
width: 100%; width: 100%;
} }
......
...@@ -5,6 +5,7 @@ import { filter, switchMap } from 'rxjs/operators'; ...@@ -5,6 +5,7 @@ import { filter, switchMap } from 'rxjs/operators';
import { Format } from 'src/app/models/format.model'; import { Format } from 'src/app/models/format.model';
import { DataLogsService } from 'src/app/services/data-logs.service'; import { DataLogsService } from 'src/app/services/data-logs.service';
import { IPageHeaderInfo } from 'src/app/models/page.model'; import { IPageHeaderInfo } from 'src/app/models/page.model';
import { ISimpleTab } from 'src/app/models/basic-tabs.model';
@Component({ @Component({
selector: 'app-logs-report', selector: 'app-logs-report',
...@@ -16,6 +17,7 @@ export class LogsReportComponent implements OnInit { ...@@ -16,6 +17,7 @@ export class LogsReportComponent implements OnInit {
title: 'Data-Logs Report', title: 'Data-Logs Report',
}; };
responseArray: any = []; responseArray: any = [];
isToggled: boolean = true;
form: FormGroup; form: FormGroup;
title: string; title: string;
slug: string ; slug: string ;
...@@ -26,7 +28,20 @@ export class LogsReportComponent implements OnInit { ...@@ -26,7 +28,20 @@ export class LogsReportComponent implements OnInit {
urlCode: string = ''; urlCode: string = '';
isSession:boolean = false; isSession:boolean = false;
previousUrl: string; previousUrl: string;
tabs: ISimpleTab[] = [
{
name: 'Graph',
isActive: true,
},
{
name: 'Infos',
isActive: false,
},
{
name: 'Errors',
isActive: false,
},
];
constructor( constructor(
private _dataLogsService: DataLogsService, private _dataLogsService: DataLogsService,
private _route: ActivatedRoute, private _route: ActivatedRoute,
...@@ -59,4 +74,27 @@ export class LogsReportComponent implements OnInit { ...@@ -59,4 +74,27 @@ export class LogsReportComponent implements OnInit {
); );
} }
tabsToggler(tabName) {
if (tabName === 'Graph') {
this.isToggled = true;
this.tabs[1].isActive = false;
this.tabs[0].isActive = true;
this.tabs[2].isActive = false;
}
if (tabName === 'Infos') {
this.isToggled = false;
this.tabs[1].isActive = true;
this.tabs[0].isActive = false;
this.tabs[2].isActive = false;
}
if (tabName === 'Errors') {
this.isToggled = undefined;
this.tabs[2].isActive = true;
this.tabs[1].isActive = false;
this.tabs[0].isActive = false;
}
}
} }
...@@ -39,6 +39,7 @@ export class PaginatorComponent implements OnInit { ...@@ -39,6 +39,7 @@ export class PaginatorComponent implements OnInit {
this.scrollTop(); this.scrollTop();
if (this.pageIndex + 1 <= this.totalPages()) { if (this.pageIndex + 1 <= this.totalPages()) {
this.page.emit(this.pageIndex + 1); this.page.emit(this.pageIndex + 1);
console.log(this.pageIndex + 1);
} }
} }
...@@ -58,6 +59,8 @@ export class PaginatorComponent implements OnInit { ...@@ -58,6 +59,8 @@ export class PaginatorComponent implements OnInit {
changePageSize(size: number) { changePageSize(size: number) {
this.pageSize = size; this.pageSize = size;
this.pageSizeChanged.emit(this.pageSize); this.pageSizeChanged.emit(this.pageSize);
console.log(this.pageSize);
} }
getPages(): number[] { getPages(): number[] {
......
...@@ -11,19 +11,24 @@ export class DataLogsService { ...@@ -11,19 +11,24 @@ export class DataLogsService {
resourceServiceUrl: string; resourceServiceUrl: string;
limit: number; limit: number;
pageNumber: number; pageNumber: number;
length: number;
sortOptions: { sortOptions: {
value: string, value: string,
order: string, order: string,
}; };
private _launchNewAggregationSubject: Subject<any>; private _launchNewAggregationSubject: Subject<any>;
private _searchChangeSubject: Subject<any>;
constructor( constructor(
private _httpClient: HttpClient) { private _httpClient: HttpClient) {
this.resourceServiceUrl = `${APP_CONFIG.restHeartAggregations.url}`; this.resourceServiceUrl = `${APP_CONFIG.restHeartAggregations.url}`;
this._launchNewAggregationSubject = new Subject<any>(); this._launchNewAggregationSubject = new Subject<any>();
this.limit = 10; this._searchChangeSubject = new Subject<any>();
this.limit = 5;
this.pageNumber = 1; this.pageNumber = 1;
this.length = 1;
} }
uuidToSessionId(uuid): Observable<any[]> { uuidToSessionId(uuid): Observable<any[]> {
...@@ -159,11 +164,15 @@ export class DataLogsService { ...@@ -159,11 +164,15 @@ export class DataLogsService {
); );
} }
getLogsStepsLogs(step, sessionId, uuid, loglevel): Observable<any[]> { getLogsStepsLogs(step, sessionId, uuid, loglevel, nbLogs, pageNumber): Observable<any[]> {
const query = { step, uuid, loglevel, session_id : sessionId }; const query = { step, uuid, loglevel, session_id : sessionId };
const stringQuery = JSON.stringify(query); let stringQuery = JSON.stringify(query);
this.length = nbLogs;
this.pageNumber = pageNumber;
stringQuery += `&pagesize=${(this.limit)}`;
stringQuery += `&page=${(pageNumber)}`;
const aggregationEndPoint = '?filter='; const aggregationEndPoint = '?filter=';
return this._httpClient.get<any[]>(this.resourceServiceUrl + aggregationEndPoint + stringQuery).pipe( return this._httpClient.get<any>(this.resourceServiceUrl + aggregationEndPoint + stringQuery).pipe(
map((response) => { map((response) => {
return response; return response;
}), }),
...@@ -194,4 +203,24 @@ export class DataLogsService { ...@@ -194,4 +203,24 @@ export class DataLogsService {
} }
/* PAGINATION */
paginationChanged(limit: number, pageNumber: number) {
console.log('inside pagination changed : ', limit, pageNumber);
this.limit = limit;
this.pageNumber = pageNumber;
this._searchChangeSubject.next();
}
reverseSortOrder(): void {
if (this.sortOptions.order === 'asc') {
this.sortOptions.order = 'desc';
} else {
this.sortOptions.order = 'asc';
}
}
get searchChange$(): Observable<string> {
return this._searchChangeSubject.asObservable();
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment