+
@@ -78,7 +78,7 @@
No Service Orders found for the last 15 days
-
diff --git a/src/app/landing/metrics/metrics.component.ts b/src/app/landing/metrics/metrics.component.ts
index 29d214f9589c2884870bf73d68ed9219107b6062..180c86f61c11fd37534e6788babfc06b66e3f6e9 100644
--- a/src/app/landing/metrics/metrics.component.ts
+++ b/src/app/landing/metrics/metrics.component.ts
@@ -15,6 +15,8 @@ import { ResourcesGroupByStateItem, ServiceOrdersGroupByDayItem, ServicesGroupB
import { asyncScheduler, forkJoin, scheduled } from 'rxjs';
import { catchError } from 'rxjs/internal/operators/catchError';
import * as moment from 'moment';
+import { ToastrService } from 'ngx-toastr';
+
@Component({
selector: 'app-landing',
@@ -30,30 +32,31 @@ export class MetricsComponent implements OnInit {
private serviceMetricsService: ServiceMetricsApiService,
private resourceMetricsService: ResourceMetricsApiService,
private serviceOrderMetricsService: ServiceOrderMetricsApiService,
- private nfvMetricsService: NfvMetricsApiService
+ private nfvMetricsService: NfvMetricsApiService,
+ private toast: ToastrService
) { }
isLoading: boolean = true;
config: IAppConfig
loggedIn: boolean
- registeredUsers = 9999;
- activeServices = 9999;
- registeredNSDs = 9999;
- registeredVNFs = 9999;
- registeredMANO = 9999;
- registeredResourceSpecs = 9999;
- publishedServiceSpecs = 9999;
- availableResources = 9999;
- activeServiceOrders = 9999;
- publishedProductOfferings = 9999;
- totalCreatedServices = 9999;
- totalCompletedOrders = 9999;
- totalResources = 9999;
- serviceOrdersTotal15days = 9999;
- serviceOrdersTotalMonth = 9999;
- servicesTotalMonth = 9999;
- resourcesTotalMonth = 9999;
+ registeredUsers = NaN;
+ activeServices = NaN;
+ registeredNSDs = NaN;
+ registeredVNFs = NaN;
+ registeredMANO = NaN;
+ registeredResourceSpecs = NaN;
+ publishedServiceSpecs = NaN;
+ availableResources = NaN;
+ activeServiceOrders = NaN;
+ publishedProductOfferings = NaN;
+ totalCreatedServices = NaN;
+ totalCompletedOrders = NaN;
+ totalResources = NaN;
+ serviceOrdersTotal15days = NaN;
+ serviceOrdersTotalMonth = NaN;
+ servicesTotalMonth = NaN;
+ resourcesTotalMonth = NaN;
serviceOrdersByState = [];
servicesByState: ServicesGroupByStateItem[];
@@ -118,8 +121,8 @@ export class MetricsComponent implements OnInit {
datasets: [
{
data: [],
- backgroundColor: ['#428bca', '#42ca74', '#c5ca42' ],
- hoverBackgroundColor: ['#235e91', '#24a34a', '#8d911f'],
+ backgroundColor: ['#fd8f00', '#28a745', '#dc3545' ],
+ hoverBackgroundColor: ['#d27700', '#1e873d', '#941822'],
hoverBorderColor: 'white'
}
],
@@ -131,8 +134,8 @@ export class MetricsComponent implements OnInit {
datasets: [
{
data: [],
- backgroundColor: ['#428bca', '#42ca74', '#c5ca42', '#ca42c1', '#d91424'],
- hoverBackgroundColor: ['#235e91', '#24a34a', '#8d911f', '#871880', '#941822'],
+ backgroundColor: ['#428bca', '#cab642ff', '#fd8f00', '#28a745', '#dc3545'],
+ hoverBackgroundColor: ['#235e91', '#8d911f', '#d27700', '#1e873d', '#941822'],
hoverBorderColor: 'white',
}
],
@@ -145,8 +148,8 @@ export class MetricsComponent implements OnInit {
datasets: [
{
data: [],
- backgroundColor: ['#428bca', '#c5ca42', '#42ca74', '#d91424'],
- hoverBackgroundColor: ['#235e91', '#8d911f', '#24a34a', '#941822'],
+ backgroundColor: ['#fd8f00', '#a2a3a4', '#28a745', '#d91424'],
+ hoverBackgroundColor: ['#d27700', '#818181', '#1e873d', '#941822'],
hoverBorderColor: 'white'
}
]
@@ -168,85 +171,85 @@ export class MetricsComponent implements OnInit {
forkJoin({
registeredMANO: this.nfvMetricsService.getRegisteredManoProviders().pipe(
catchError(error => {
- console.error('Failed to load registered MANO providers', error);
- return scheduled([{ registeredManoProviders: this.registeredMANO }], asyncScheduler);
+ this.toast.error('API services are not responding. Please verify service health.');
+ return scheduled([{ registeredManoProviders: NaN }], asyncScheduler);
})
),
registeredNSDs: this.nfvMetricsService.getRegisteredNsds().pipe(
catchError(error => {
- console.error('Failed to load registered NSDs', error);
- return scheduled([{ registeredNSDs: this.registeredNSDs }], asyncScheduler);
+ this.toast.error('API services are not responding. Please verify service health.');
+ return scheduled([{ registeredNSDs: NaN }], asyncScheduler);
})
),
registeredVNFs: this.nfvMetricsService.getRegisteredVnfs().pipe(
catchError(error => {
- console.error('Failed to load registered VNFs', error);
- return scheduled([{ registeredVNFs: this.registeredVNFs }], asyncScheduler);
+ this.toast.error('API services are not responding. Please verify service health.');
+ return scheduled([{ registeredVNFs: NaN }], asyncScheduler);
})
),
registeredUsers: this.generalMetricsService.getRegisteredIndividuals().pipe(
catchError(error => {
- console.error('Failed to load registered users', error);
- return scheduled([{ registeredIndividuals: this.registeredUsers }], asyncScheduler);
+ this.toast.error('API services are not responding. Please verify service health.');
+ return scheduled([{ registeredIndividuals: NaN }], asyncScheduler);
})
),
publishedServiceSpecs: this.generalMetricsService.getPublishedServiceSpecifications().pipe(
catchError(error => {
- console.error('Failed to load published specs', error);
- return scheduled([{ publishedServiceSpecifications: this.publishedServiceSpecs }], asyncScheduler);
+ this.toast.error('API services are not responding. Please verify service health.');
+ return scheduled([{ publishedServiceSpecifications: NaN }], asyncScheduler);
})
),
registeredResourceSpecs: this.generalMetricsService.getRegisteredResourceSpecifications().pipe(
catchError(error => {
- console.error('Failed to load resource specs', error);
- return scheduled([{ registeredResourceSpecifications: this.registeredResourceSpecs }], asyncScheduler);
+ this.toast.error('API services are not responding. Please verify service health.');
+ return scheduled([{ registeredResourceSpecifications: NaN }], asyncScheduler);
})
),
totalCreatedServices: this.serviceMetricsService.getTotalServices().pipe(
catchError(error => {
- console.error('Failed to load total services', error);
- return scheduled([{ totalServices: this.totalCreatedServices }], asyncScheduler);
+ this.toast.error('API services are not responding. Please verify service health.');
+ return scheduled([{ totalServices: NaN }], asyncScheduler);
})
),
activeServices: this.serviceMetricsService.getTotalServices({ state: 'ACTIVE' }).pipe(
catchError(error => {
- console.error('Failed to load active services', error);
- return scheduled([{ totalServices: this.activeServices }], asyncScheduler);
+ this.toast.error('API services are not responding. Please verify service health.');
+ return scheduled([{ totalServices: NaN }], asyncScheduler);
})
),
totalResources: this.resourceMetricsService.getTotalResources().pipe(
catchError(error => {
- console.error('Failed to load total resources', error);
- return scheduled([{ totalResources: this.totalResources }], asyncScheduler);
+ this.toast.error('API services are not responding. Please verify service health.');
+ return scheduled([{ totalResources: NaN }], asyncScheduler);
})
),
availableResources: this.resourceMetricsService.getTotalResources({ state: 'AVAILABLE' }).pipe(
catchError(error => {
- console.error('Failed to load available resources', error);
- return scheduled([{ totalResources: this.availableResources }], asyncScheduler);
+ this.toast.error('API services are not responding. Please verify service health.');
+ return scheduled([{ totalResources: NaN }], asyncScheduler);
})
),
activeServiceOrders: this.serviceOrderMetricsService.getTotalActiveServiceOrders().pipe(
catchError(error => {
- console.error('Failed to load active service orders', error);
- return scheduled([{ activeServiceOrders: this.activeServiceOrders }], asyncScheduler);
+ this.toast.error('API services are not responding. Please verify service health.');
+ return scheduled([{ activeServiceOrders: NaN }], asyncScheduler);
})
),
totalCompletedOrders: this.serviceOrderMetricsService.getTotalServiceOrders({ state: 'COMPLETED' }).pipe(
catchError(error => {
- console.error('Failed to load completed service orders', error);
- return scheduled([{ totalServiceOrders: this.totalCompletedOrders }], asyncScheduler);
+ this.toast.error('API services are not responding. Please verify service health.');
+ return scheduled([{ totalServiceOrders: NaN }], asyncScheduler);
})
),
serviceOrdersTotal15days: this.serviceOrderMetricsService.getServiceOrdersGroupedByDay({ starttime, endtime }).pipe(
catchError(error => {
- console.error('Failed to load service orders by day', error);
+ this.toast.error('API services are not responding. Please verify service health.');
return scheduled([{ serviceOrders:{ total: this.serviceOrdersTotal15days } }], asyncScheduler);
})
),
serviceOrdersGroupedByDay: this.serviceOrderMetricsService.getServiceOrdersGroupedByDay({ starttime, endtime }).pipe(
catchError(error => {
- console.error('Failed to load service orders by day', error);
+ this.toast.error('API services are not responding. Please verify service health.');
const mockGroupByDay = this.barChartLabels.map(label => {
const [day, month] = label.split('/').map(Number);
const isoDate = new Date(Date.UTC(new Date().getFullYear(), month - 1, day)).toISOString();
@@ -266,13 +269,13 @@ export class MetricsComponent implements OnInit {
),
serviceOrdersTotalMonth: this.serviceOrderMetricsService.getServiceOrdersGroupedByState({ starttime: starttimeMonth, endtime }).pipe(
catchError(error => {
- console.error('Failed to load service orders by state', error);
+ this.toast.error('API services are not responding. Please verify service health.');
return scheduled([{ serviceOrders:{ total: this.serviceOrdersTotalMonth } }], asyncScheduler);
})
),
serviceOrdersGroupedByState: this.serviceOrderMetricsService.getServiceOrdersGroupedByState({ starttime: starttimeMonth, endtime }).pipe(
catchError(error => {
- console.error('Failed to load service orders by state', error);
+ this.toast.error('API services are not responding. Please verify service health.');
return scheduled([{
serviceOrders: {
aggregations: {
@@ -287,13 +290,13 @@ export class MetricsComponent implements OnInit {
),
resourcesTotalMonth: this.resourceMetricsService.getResourcesGroupedByState({ starttime: starttimeMonth, endtime }).pipe(
catchError(error => {
- console.error('Failed to load resources by state', error);
+ this.toast.error('API services are not responding. Please verify service health.');
return scheduled([{ resources:{ total: this.resourcesTotalMonth } }], asyncScheduler);
})
),
resourcesGroupedByState: this.resourceMetricsService.getResourcesGroupedByState({ starttime: starttimeMonth, endtime }).pipe(
catchError(error => {
- console.error('Failed to load resources by state', error);
+ this.toast.error('API services are not responding. Please verify service health.');
return scheduled([{
resources: {
aggregations: {
@@ -308,13 +311,13 @@ export class MetricsComponent implements OnInit {
),
servicesTotalMonth: this.serviceMetricsService.getServicesGroupedByState({ starttime: starttimeMonth, endtime }).pipe(
catchError(error => {
- console.error('Failed to load services by state', error);
+ this.toast.error('API services are not responding. Please verify service health.');
return scheduled([{ services:{ total: this.servicesTotalMonth } }], asyncScheduler);
})
),
servicesGroupedByState: this.serviceMetricsService.getServicesGroupedByState({ starttime: starttimeMonth, endtime }).pipe(
catchError(error => {
- console.error('Failed to load services by state', error);
+ this.toast.error('API services are not responding. Please verify service health.');
return scheduled([{
services: {
aggregations: {
@@ -365,6 +368,7 @@ export class MetricsComponent implements OnInit {
.filter(item => chartLabelsServices.includes(item.key));
this.servicesData.datasets[0].data = this.servicesByState.map(data => data.count);
this.isLoading = false;
+
});
}
@@ -373,6 +377,9 @@ export class MetricsComponent implements OnInit {
this.authService.login()
}
+ isNaN(value: any): boolean {
+ return isNaN(value);
+ }
chartOptions: ChartConfiguration<'doughnut'>['options'] = {
responsive: true,
diff --git a/src/app/landing/metrics/statuscard/statuscard.component.html b/src/app/landing/metrics/statuscard/statuscard.component.html
index bdfc87762240a481973ceb85c6eeebd74eec63b3..cef80385b63005876404c7c09b9304aa26aa6734 100644
--- a/src/app/landing/metrics/statuscard/statuscard.component.html
+++ b/src/app/landing/metrics/statuscard/statuscard.component.html
@@ -21,10 +21,8 @@