refs #2605. Added new status 'sent'
testing/ogGui-multibranch/pipeline/head There was a failure building this commit Details

pull/35/head
Manuel Aranda Rosales 2025-08-06 16:48:16 +02:00
parent e5524b233e
commit 1ad29b27e3
10 changed files with 76 additions and 5 deletions

View File

@ -1,4 +1,9 @@
# Changelog
## [0.19.0] - 2025-08-06
### Added
- Se ha añadido un nuevo estado "enviado" para cuando se ejecuten acciones a equipos en estado Windows o Linux
---
## [0.18.0] - 2025-08-04
### Added
- Se ha añadido la posibilidad de visualizar logs en tiempo real de Grafana. Tanto en los componentes como en los clientes.

View File

@ -117,6 +117,11 @@
color: white;
}
.chip-sent {
background-color: #b19cd9 !important;
color: white;
}
.status-progress-flex {
display: flex;
align-items: center;

View File

@ -72,9 +72,11 @@
text="{{ 'tracesProgressStepText' | translate }}">
<mat-chip [ngClass]="{
'chip-pending': trace.status === 'pending',
'chip-sent': trace.status === 'sent'
}">
{{
trace.status === 'pending' ? 'Pendiente' :
trace.status === 'sent' ? 'Enviado' :
trace.status
}}
</mat-chip>

View File

@ -335,6 +335,12 @@ table {
font-weight: 500;
}
.chip-sent {
background-color: #b19cd9 !important;
color: white !important;
font-weight: 500;
}
.status-progress-flex {
display: flex;
align-items: center;
@ -359,6 +365,7 @@ table {
.status-indicator.pending { background-color: #17a2b8; }
.status-indicator.in-progress { background-color: #ffc107; }
.status-indicator.cancelled { background-color: #6c757d; }
.status-indicator.sent { background-color: #b19cd9; }
/* Opciones de cliente */
.client-option {

View File

@ -96,7 +96,8 @@
'chip-success': trace.status === 'success',
'chip-pending': trace.status === 'pending',
'chip-in-progress': trace.status === 'in-progress',
'chip-cancelled': trace.status === 'cancelled'
'chip-cancelled': trace.status === 'cancelled',
'chip-sent': trace.status === 'sent'
}">
{{
trace.status === 'failed' ? 'Error' :
@ -104,6 +105,7 @@
trace.status === 'success' ? 'Completado' :
trace.status === 'pending' ? 'Pendiente' :
trace.status === 'cancelled' ? 'Cancelado' :
trace.status === 'sent' ? 'Enviado' :
trace.status
}}
</mat-chip>

View File

@ -238,6 +238,17 @@
color: #212529;
}
.stat-sent {
border-left-color: #b19cd9;
background: #b19cd9;
color: white;
}
.stat-sent .stat-number,
.stat-sent .stat-label {
color: white;
}
.stat-number {
font-size: 2rem;
font-weight: bold;
@ -523,6 +534,12 @@ table {
font-weight: 500;
}
.chip-sent {
background-color: #b19cd9 !important;
color: white !important;
font-weight: 500;
}
.status-progress-flex {
display: flex;
align-items: center;
@ -546,6 +563,7 @@ table {
.status-indicator.pending { background-color: #17a2b8; }
.status-indicator.in-progress { background-color: #ffc107; }
.status-indicator.cancelled { background-color: #6c757d; }
.status-indicator.sent { background-color: #b19cd9; }
.client-option {
display: flex;

View File

@ -57,6 +57,13 @@
<div class="stat-number">{{ getStatusCount('in-progress') }}</div>
<div class="stat-label">{{ 'inProgress' | translate }}</div>
</div>
<div class="stat-card stat-sent clickable"
[class.active-filter]="isFilterActive('sent')"
(click)="filterBySent()"
matTooltip="Ver trazas enviadas">
<div class="stat-number">{{ getStatusCount('sent') }}</div>
<div class="stat-label">{{ 'sent' | translate }}</div>
</div>
</div>
<div class="filters-section" joyrideStep="filtersStep" text="{{ 'filtersStepText' | translate }}">
@ -146,6 +153,12 @@
{{ 'cancelled' | translate }}
</div>
</mat-option>
<mat-option [value]="'sent'">
<div class="status-option">
<div class="status-indicator sent"></div>
{{ 'sent' | translate }}
</div>
</mat-option>
</mat-select>
<button *ngIf="commandStatusInput.value" mat-icon-button matSuffix aria-label="Clear input search"
(click)="clearStatusFilter($event, commandStatusInput)">
@ -232,7 +245,8 @@
'chip-success': trace.status === 'success',
'chip-pending': trace.status === 'pending',
'chip-in-progress': trace.status === 'in-progress',
'chip-cancelled': trace.status === 'cancelled'
'chip-cancelled': trace.status === 'cancelled',
'chip-sent': trace.status === 'sent'
}">
{{
trace.status === 'failed' ? ('failed' | translate) :
@ -240,6 +254,7 @@
trace.status === 'success' ? ('successful' | translate) :
trace.status === 'pending' ? ('pending' | translate) :
trace.status === 'cancelled' ? ('cancelled' | translate) :
trace.status === 'sent' ? ('sent' | translate) :
trace.status
}}
</mat-chip>

View File

@ -51,6 +51,7 @@ export class TaskLogsComponent implements OnInit, OnDestroy {
pending: number;
inProgress: number;
cancelled: number;
sent: number;
today: number;
} = {
total: 0,
@ -59,6 +60,7 @@ export class TaskLogsComponent implements OnInit, OnDestroy {
pending: 0,
inProgress: 0,
cancelled: 0,
sent: 0,
today: 0
};
@ -204,6 +206,8 @@ export class TaskLogsComponent implements OnInit, OnDestroy {
return this.totalStats.inProgress;
case 'cancelled':
return this.totalStats.cancelled;
case 'sent':
return this.totalStats.sent;
case 'today':
return this.totalStats.today;
default:
@ -470,7 +474,7 @@ export class TaskLogsComponent implements OnInit, OnDestroy {
}
private calculateLocalStats(): void {
const statuses = ['success', 'failed', 'pending', 'in-progress', 'cancelled'];
const statuses = ['success', 'failed', 'pending', 'in-progress', 'cancelled', 'sent'];
const requests = statuses.map(status =>
this.http.get<any>(`${this.baseUrl}/traces?status=${status}&page=1&itemsPerPage=1`)
);
@ -485,8 +489,8 @@ export class TaskLogsComponent implements OnInit, OnDestroy {
forkJoin([totalRequest, ...requests, todayRequest]).subscribe(
(responses) => {
const totalData = responses[0];
const statusData = responses.slice(1, 6);
const todayData = responses[6];
const statusData = responses.slice(1, 7);
const todayData = responses[7];
this.totalStats = {
total: totalData['hydra:totalItems'],
@ -495,6 +499,7 @@ export class TaskLogsComponent implements OnInit, OnDestroy {
pending: statusData[2]['hydra:totalItems'],
inProgress: statusData[3]['hydra:totalItems'],
cancelled: statusData[4]['hydra:totalItems'],
sent: statusData[5]['hydra:totalItems'],
today: todayData['hydra:totalItems']
};
},
@ -508,6 +513,7 @@ export class TaskLogsComponent implements OnInit, OnDestroy {
pending: this.traces.filter(trace => trace.status === 'pending').length,
inProgress: this.traces.filter(trace => trace.status === 'in-progress').length,
cancelled: this.traces.filter(trace => trace.status === 'cancelled').length,
sent: this.traces.filter(trace => trace.status === 'sent').length,
today: this.traces.filter(trace => trace.executedAt && todayString && trace.executedAt.startsWith(todayString)).length
};
}
@ -652,6 +658,13 @@ export class TaskLogsComponent implements OnInit, OnDestroy {
this.loadTraces();
}
filterBySent(): void {
this.resetAllFilters();
this.filters['status'] = 'sent';
this.activeFilter = 'sent';
this.loadTraces();
}
isFilterActive(filterType: string): boolean {
return this.activeFilter === filterType;
}
@ -668,6 +681,8 @@ export class TaskLogsComponent implements OnInit, OnDestroy {
return 'Trazas fallidas';
case 'in-progress':
return 'Trazas en progreso';
case 'sent':
return 'Trazas enviadas';
default:
return '';
}

View File

@ -573,6 +573,7 @@
"busyEquipments": "Busy Equipment",
"pending": "Pending",
"cancelled": "Cancelled",
"sent": "Sent",
"cancelImageTransmission": "Cancel image transmission",
"success": "Success",
"limpiarAcciones": "Clear actions",

View File

@ -578,6 +578,7 @@
"organizationalStructure": "Estructura Organizacional",
"pending": "Pendiente",
"cancelled": "Cancelado",
"sent": "Enviado",
"cancelImageTransmission": "Cancelar transmisión de imagen",
"success": "Exitoso",
"limpiarAcciones": "Limpiar acciones",