fix lint, fix aggregate count, add translations

This commit is contained in:
FrancescoMolinaro
2023-12-29 12:23:45 +01:00
parent fec6550cba
commit 01a41570d6
13 changed files with 110 additions and 69 deletions

View File

@@ -8,7 +8,7 @@
<a ngbNavLink>{{'admin-notify-dashboard.metrics' | translate}}</a> <a ngbNavLink>{{'admin-notify-dashboard.metrics' | translate}}</a>
<ng-template ngbNavContent> <ng-template ngbNavContent>
<div id="metrics"> <div id="metrics">
<ds-admin-notify-metrics [boxesConfig]="notifyMetricsRows$ | async"></ds-admin-notify-metrics> <ds-admin-notify-metrics *ngIf="(notifyMetricsRows$ | async)?.length" [boxesConfig]="notifyMetricsRows$ | async"></ds-admin-notify-metrics>
</div> </div>
</ng-template> </ng-template>
</li> </li>

View File

@@ -1,20 +1,20 @@
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { SearchService } from "../../core/shared/search/search.service"; import { SearchService } from '../../core/shared/search/search.service';
import { environment } from "../../../environments/environment"; import { environment } from '../../../environments/environment';
import { PaginatedSearchOptions } from "../../shared/search/models/paginated-search-options.model"; import { PaginatedSearchOptions } from '../../shared/search/models/paginated-search-options.model';
import { PaginationComponentOptions } from "../../shared/pagination/pagination-component-options.model"; import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model';
import { import {
listableObjectComponent listableObjectComponent
} from "../../shared/object-collection/shared/listable-object/listable-object.decorator"; } from '../../shared/object-collection/shared/listable-object/listable-object.decorator';
import { ViewMode } from "../../core/shared/view-mode.model"; import { ViewMode } from '../../core/shared/view-mode.model';
import { Context } from "../../core/shared/context.model"; import { Context } from '../../core/shared/context.model';
import { AdminNotifySearchResult } from "./models/admin-notify-message-search-result.model"; import { AdminNotifySearchResult } from './models/admin-notify-message-search-result.model';
import { forkJoin, Observable } from "rxjs"; import { forkJoin, Observable } from 'rxjs';
import { getFirstCompletedRemoteData } from "../../core/shared/operators"; import { getFirstCompletedRemoteData } from '../../core/shared/operators';
import { map } from "rxjs/operators"; import { map } from 'rxjs/operators';
import { SearchObjects } from "../../shared/search/models/search-objects.model"; import { SearchObjects } from '../../shared/search/models/search-objects.model';
import { AdminNotifyMetricsBox, AdminNotifyMetricsRow } from "./admin-notify-metrics/admin-notify-metrics.model"; import { AdminNotifyMetricsBox, AdminNotifyMetricsRow } from './admin-notify-metrics/admin-notify-metrics.model';
import { DSpaceObject } from "../../core/shared/dspace-object.model"; import { DSpaceObject } from '../../core/shared/dspace-object.model';
@listableObjectComponent(AdminNotifySearchResult, ViewMode.GridElement, Context.AdminSearch) @listableObjectComponent(AdminNotifySearchResult, ViewMode.GridElement, Context.AdminSearch)
@@ -25,7 +25,7 @@ import { DSpaceObject } from "../../core/shared/dspace-object.model";
}) })
export class AdminNotifyDashboardComponent implements OnInit{ export class AdminNotifyDashboardComponent implements OnInit{
public notifyMetricsRows$: Observable<AdminNotifyMetricsRow[]> public notifyMetricsRows$: Observable<AdminNotifyMetricsRow[]>;
private metricsConfig = environment.notifyMetrics; private metricsConfig = environment.notifyMetrics;
private singleResultOptions = Object.assign(new PaginationComponentOptions(), { private singleResultOptions = Object.assign(new PaginationComponentOptions(), {
@@ -52,7 +52,7 @@ export class AdminNotifyDashboardComponent implements OnInit{
) )
).pipe( ).pipe(
map(metricBoxes => this.mapUpdatedBoxesToMetricsRows(metricBoxes)) map(metricBoxes => this.mapUpdatedBoxesToMetricsRows(metricBoxes))
) );
} }
/** /**
@@ -61,30 +61,47 @@ export class AdminNotifyDashboardComponent implements OnInit{
* @param searchObject The object to map * @param searchObject The object to map
* @private * @private
*/ */
private mapSearchObjectsToMetricsBox(searchObject: SearchObjects<DSpaceObject>) : AdminNotifyMetricsBox { private mapSearchObjectsToMetricsBox(searchObject: SearchObjects<DSpaceObject>): AdminNotifyMetricsBox {
const objectConfig = searchObject.configuration;
const count = searchObject.pageInfo.totalElements; const count = searchObject.pageInfo.totalElements;
const objectConfig = searchObject.configuration;
const metricsBoxes = [].concat(...this.metricsConfig.map((config) => config.boxes)); const metricsBoxes = [].concat(...this.metricsConfig.map((config) => config.boxes));
return { return {
...metricsBoxes.find(box => box.config === objectConfig), ...metricsBoxes.find(box => box.config === objectConfig),
count count
} };
} }
/** /**
* Function to map updated boxes with count to each row of the configuration * Function to map updated boxes with count to each row of the configuration
* *
* @param boxes The object to map * @param boxesWithCount The object to map
* @private * @private
*/ */
private mapUpdatedBoxesToMetricsRows(boxes: AdminNotifyMetricsBox[]) : AdminNotifyMetricsRow[] { private mapUpdatedBoxesToMetricsRows(boxesWithCount: AdminNotifyMetricsBox[]): AdminNotifyMetricsRow[] {
return this.metricsConfig.map(row => { return this.metricsConfig.map(row => {
return { return {
...row, ...row,
boxes: row.boxes.map(box => boxes.find(boxWithCount => boxWithCount.config === box.config)) boxes: row.boxes.map(rowBox => {
.filter(box => !!box) if (rowBox.isRowAggregateCount) {
} const currentRowBoxesWithCount = row.boxes.filter(box => !box.isRowAggregateCount)
}) .map(notAggregateBox => {
return {
...notAggregateBox,
count: boxesWithCount.find(boxWithCount => boxWithCount.config === notAggregateBox.config)?.count
}
})
return {
...rowBox,
count: currentRowBoxesWithCount.map(box => box.count).reduce((accumulator, currentValue) => {
return accumulator + currentValue;
},0)
};
} else {
return boxesWithCount.find(boxWithCount => boxWithCount.config === rowBox.config);
}
})
};
});
} }
} }

View File

@@ -1 +0,0 @@
<p>admin-notify-logs works!</p>

View File

@@ -3,7 +3,8 @@ export interface AdminNotifyMetricsBox {
textColor?: string; textColor?: string;
title: string; title: string;
config: string; config: string;
count?: number count?: number;
isRowAggregateCount?: boolean;
} }
export interface AdminNotifyMetricsRow { export interface AdminNotifyMetricsRow {

View File

@@ -1,6 +1,6 @@
import { AdminNotifyMessage } from "./admin-notify-message.model"; import { AdminNotifyMessage } from './admin-notify-message.model';
import { searchResultFor } from "../../../shared/search/search-result-element-decorator"; import { searchResultFor } from '../../../shared/search/search-result-element-decorator';
import { SearchResult } from "../../../shared/search/models/search-result.model"; import { SearchResult } from '../../../shared/search/models/search-result.model';
@searchResultFor(AdminNotifyMessage) @searchResultFor(AdminNotifyMessage)

View File

@@ -1,8 +1,8 @@
import { deserialize, inheritSerialization } from 'cerialize'; import { deserialize, inheritSerialization } from 'cerialize';
import { typedObject } from "../../../core/cache/builders/build-decorators"; import { typedObject } from '../../../core/cache/builders/build-decorators';
import { ADMIN_NOTIFY_MESSAGE } from "./admin-notify-message.resource-type"; import { ADMIN_NOTIFY_MESSAGE } from './admin-notify-message.resource-type';
import { excludeFromEquals } from "../../../core/utilities/equals.decorators"; import { excludeFromEquals } from '../../../core/utilities/equals.decorators';
import { DSpaceObject } from "../../../core/shared/dspace-object.model"; import { DSpaceObject } from '../../../core/shared/dspace-object.model';
/** /**
* A message that includes admin notify info * A message that includes admin notify info

View File

@@ -1,4 +1,4 @@
import { ResourceType } from "../../../core/shared/resource-type"; import { ResourceType } from '../../../core/shared/resource-type';
/** /**
* The resource type for AdminNotifyMessage * The resource type for AdminNotifyMessage

View File

@@ -197,7 +197,7 @@ import {
import { SubmissionCoarNotifyConfig } from '../submission/sections/section-coar-notify/submission-coar-notify.config'; import { SubmissionCoarNotifyConfig } from '../submission/sections/section-coar-notify/submission-coar-notify.config';
import { NotifyRequestsStatus } from '../item-page/simple/notify-requests-status/notify-requests-status.model'; import { NotifyRequestsStatus } from '../item-page/simple/notify-requests-status/notify-requests-status.model';
import { NotifyRequestsStatusDataService } from './data/notify-services-status-data.service'; import { NotifyRequestsStatusDataService } from './data/notify-services-status-data.service';
import { AdminNotifyMessage } from "../admin/admin-notify-dashboard/models/admin-notify-message.model"; import { AdminNotifyMessage } from '../admin/admin-notify-dashboard/models/admin-notify-message.model';
/** /**

View File

@@ -1,7 +1,7 @@
import { Component, Input } from '@angular/core'; import { Component, Input } from '@angular/core';
import { import {
AdminNotifyMetricsBox AdminNotifyMetricsBox
} from "../../admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.model"; } from '../../admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.model';
@Component({ @Component({
selector: 'ds-notification-box', selector: 'ds-notification-box',

View File

@@ -3449,6 +3449,26 @@
"admin-notify-dashboard.logs": "Notify logs", "admin-notify-dashboard.logs": "Notify logs",
"admin-notify-dashboard.received-ldn": "Number of received LDN",
"admin-notify-dashboard.generated-ldn": "Number of generated LDN",
"admin-notify-dashboard.accepted": "Accepted",
"admin-notify-dashboard.processed": "Processed LDN",
"admin-notify-dashboard.failure": "Failure",
"admin-notify-dashboard.untrusted": "Untrusted",
"admin-notify-dashboard.delivered": "Delivered",
"admin-notify-dashboard.queued": "Queued",
"admin-notify-dashboard.queued-for-retry": "Queued for retry",
"admin-notify-dashboard.involved-items": "Involved items",
"admin.notify.dashboard.breadcrumbs": "Dashboard", "admin.notify.dashboard.breadcrumbs": "Dashboard",
"orgunit.listelement.badge": "Organizational Unit", "orgunit.listelement.badge": "Organizational Unit",

View File

@@ -25,7 +25,7 @@ import { FilterVocabularyConfig } from './filter-vocabulary-config';
import { DiscoverySortConfig } from './discovery-sort.config'; import { DiscoverySortConfig } from './discovery-sort.config';
import { import {
AdminNotifyMetricsRow AdminNotifyMetricsRow
} from "../app/admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.model"; } from '../app/admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.model';
interface AppConfig extends Config { interface AppConfig extends Config {
ui: UIServerConfig; ui: UIServerConfig;

View File

@@ -25,7 +25,7 @@ import { FilterVocabularyConfig } from './filter-vocabulary-config';
import { DiscoverySortConfig } from './discovery-sort.config'; import { DiscoverySortConfig } from './discovery-sort.config';
import { import {
AdminNotifyMetricsRow AdminNotifyMetricsRow
} from "../app/admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.model"; } from '../app/admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.model';
export class DefaultAppConfig implements AppConfig { export class DefaultAppConfig implements AppConfig {
production = false; production = false;
@@ -449,66 +449,68 @@ export class DefaultAppConfig implements AppConfig {
notifyMetrics: AdminNotifyMetricsRow[] = [ notifyMetrics: AdminNotifyMetricsRow[] = [
{ {
title: 'Number of received LDN', title: 'admin-notify-dashboard.received-ldn',
boxes: [ boxes: [
{ {
color: '#B8DAFF', color: '#B8DAFF',
title: 'Accepted', title: 'admin-notify-dashboard.accepted',
config: 'NOTIFY.incoming.accepted' config: 'NOTIFY.incoming.accepted'
}, },
{ {
color: '#D4EDDA', color: '#D4EDDA',
title: 'Processed LDN', title: 'admin-notify-dashboard.processed',
config: 'NOTIFY.incoming.processed' config: 'NOTIFY.incoming.processed'
}, },
{ {
color: '#FDBBC7', color: '#FDBBC7',
title: 'Failure', title: 'admin-notify-dashboard.failure',
config: 'NOTIFY.incoming.failure' config: 'NOTIFY.incoming.failure'
}, },
{ {
color: '#FDBBC7', color: '#FDBBC7',
title: 'Untrusted', title: 'admin-notify-dashboard.untrusted',
config: 'NOTIFY.incoming.untrusted' config: 'NOTIFY.incoming.untrusted'
}, },
{ {
color: '#43515F', color: '#43515F',
title: 'Involved items', title: 'admin-notify-dashboard.involved-items',
textColor: '#fff', textColor: '#fff',
config: '' config: '',
isRowAggregateCount: true
}, },
] ]
}, },
{ {
title: 'Number of generated LDN', title: 'admin-notify-dashboard.generated-ldn',
boxes: [ boxes: [
{ {
color: '#D4EDDA', color: '#D4EDDA',
title: 'Delivered', title: 'admin-notify-dashboard.delivered',
config: 'NOTIFY.outgoing.delivered' config: 'NOTIFY.outgoing.delivered'
}, },
{ {
color: '#B8DAFF', color: '#B8DAFF',
title: 'Queued', title: 'admin-notify-dashboard.queued',
config: 'NOTIFY.outgoing.queued' config: 'NOTIFY.outgoing.queued'
}, },
{ {
color: '#FDEEBB', color: '#FDEEBB',
title: 'Queued for retry', title: 'admin-notify-dashboard.queued-for-retry',
config: 'NOTIFY.outgoing.queued_for_retry' config: 'NOTIFY.outgoing.queued_for_retry'
}, },
{ {
color: '#FDBBC7', color: '#FDBBC7',
title: 'Failure', title: 'admin-notify-dashboard.failure',
config: 'NOTIFY.outgoing.failure' config: 'NOTIFY.outgoing.failure'
}, },
{ {
color: '#43515F', color: '#43515F',
title: 'Involved items', title: 'admin-notify-dashboard.involved-items',
textColor: '#fff', textColor: '#fff',
config: '' config: '',
isRowAggregateCount: true
}, },
] ]
} }
] ];
} }

View File

@@ -321,64 +321,66 @@ export const environment: BuildConfig = {
notifyMetrics: [ notifyMetrics: [
{ {
title: 'Number of received LDN', title: 'admin-notify-dashboard.received-ldn',
boxes: [ boxes: [
{ {
color: '#B8DAFF', color: '#B8DAFF',
title: 'Accepted', title: 'admin-notify-dashboard.accepted',
config: 'NOTIFY.incoming.accepted' config: 'NOTIFY.incoming.accepted'
}, },
{ {
color: '#D4EDDA', color: '#D4EDDA',
title: 'Processed LDN', title: 'admin-notify-dashboard.processed',
config: 'NOTIFY.incoming.processed' config: 'NOTIFY.incoming.processed'
}, },
{ {
color: '#FDBBC7', color: '#FDBBC7',
title: 'Failure', title: 'admin-notify-dashboard.failure',
config: 'NOTIFY.incoming.failure' config: 'NOTIFY.incoming.failure'
}, },
{ {
color: '#FDBBC7', color: '#FDBBC7',
title: 'Untrusted', title: 'admin-notify-dashboard.untrusted',
config: 'NOTIFY.incoming.untrusted' config: 'NOTIFY.incoming.untrusted'
}, },
{ {
color: '#43515F', color: '#43515F',
title: 'Incoming LDM messages', title: 'admin-notify-dashboard.involved-items',
textColor: '#fff', textColor: '#fff',
config: '' config: '',
isRowAggregateCount: true
}, },
] ]
}, },
{ {
title: 'Number of generated LDN', title: 'admin-notify-dashboard.generated-ldn',
boxes: [ boxes: [
{ {
color: '#D4EDDA', color: '#D4EDDA',
title: 'Delivered', title: 'admin-notify-dashboard.delivered',
config: 'NOTIFY.outgoing.delivered' config: 'NOTIFY.outgoing.delivered'
}, },
{ {
color: '#B8DAFF', color: '#B8DAFF',
title: 'Queued', title: 'admin-notify-dashboard.queued',
config: 'NOTIFY.outgoing.queued' config: 'NOTIFY.outgoing.queued'
}, },
{ {
color: '#FDEEBB', color: '#FDEEBB',
title: 'Queued for retry', title: 'admin-notify-dashboard.queued-for-retry',
config: 'NOTIFY.outgoing.queued_for_retry' config: 'NOTIFY.outgoing.queued_for_retry'
}, },
{ {
color: '#FDBBC7', color: '#FDBBC7',
title: 'Failure', title: 'admin-notify-dashboard.failure',
config: 'NOTIFY.outgoing.failure' config: 'NOTIFY.outgoing.failure'
}, },
{ {
color: '#43515F', color: '#43515F',
title: 'Outgoing LDM messages', title: 'admin-notify-dashboard.involved-items',
textColor: '#fff', textColor: '#fff',
config: '' config: '',
isRowAggregateCount: true
}, },
] ]
} }