EdgeEvents with Status

This commit is contained in:
Artem Babak 2020-10-23 15:18:34 +03:00
parent e7b153b937
commit 74277323bd
4 changed files with 79 additions and 3 deletions

View File

@ -20,7 +20,14 @@ import {
EntityTableColumn, EntityTableColumn,
EntityTableConfig EntityTableConfig
} from '@home/models/entity/entities-table-config.models'; } from '@home/models/entity/entities-table-config.models';
import {DebugEventType, EdgeEventType, Event, EventType} from '@shared/models/event.models'; import {
DebugEventType,
EdgeEventType,
EdgeEventStatusColor,
edgeEventStatusColor,
Event,
EventType
} from '@shared/models/event.models';
import {TimePageLink} from '@shared/models/page/page-link'; import {TimePageLink} from '@shared/models/page/page-link';
import {TranslateService} from '@ngx-translate/core'; import {TranslateService} from '@ngx-translate/core';
import {DatePipe} from '@angular/common'; import {DatePipe} from '@angular/common';
@ -40,6 +47,8 @@ import {
} from '@home/components/event/event-content-dialog.component'; } from '@home/components/event/event-content-dialog.component';
import {sortObjectKeys} from '@core/utils'; import {sortObjectKeys} from '@core/utils';
import {RuleChainService} from "@core/http/rule-chain.service"; import {RuleChainService} from "@core/http/rule-chain.service";
import {AttributeService} from "@core/http/attribute.service";
import {AttributeScope} from "@shared/models/telemetry/telemetry.models";
export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> { export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> {
@ -57,11 +66,13 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> {
} }
eventTypes: Array<EventType | DebugEventType>; eventTypes: Array<EventType | DebugEventType>;
queueStartTs: any;
constructor(private eventService: EventService, constructor(private eventService: EventService,
private dialogService: DialogService, private dialogService: DialogService,
private translate: TranslateService, private translate: TranslateService,
private ruleChainService: RuleChainService, private ruleChainService: RuleChainService,
private attributeService: AttributeService,
private datePipe: DatePipe, private datePipe: DatePipe,
private dialog: MatDialog, private dialog: MatDialog,
public entityId: EntityId, public entityId: EntityId,
@ -111,6 +122,7 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> {
fetchEvents(pageLink: TimePageLink): Observable<PageData<Event>> { fetchEvents(pageLink: TimePageLink): Observable<PageData<Event>> {
if (this.eventTypeValue === EventType.EDGE_EVENT) { if (this.eventTypeValue === EventType.EDGE_EVENT) {
this.loadEdgeInfo();
return this.eventService.getEdgeEvents(this.entityId, pageLink); return this.eventService.getEdgeEvents(this.entityId, pageLink);
} else { } else {
return this.eventService.getEvents(this.entityId, this.eventType, this.tenantId, pageLink); return this.eventService.getEvents(this.entityId, this.eventType, this.tenantId, pageLink);
@ -182,6 +194,11 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> {
(entity) => entity.action, entity => ({}), false), (entity) => entity.action, entity => ({}), false),
new EntityTableColumn<Event>('entityId', 'event.entityId', '100%', new EntityTableColumn<Event>('entityId', 'event.entityId', '100%',
(entity) => entity.id.id, entity => ({}), false), //TODO: replace this to entity.entityId because of conflict wiht entityId model (entity) => entity.id.id, entity => ({}), false), //TODO: replace this to entity.entityId because of conflict wiht entityId model
new EntityTableColumn<Event>('status', 'event.status', '100%',
(entity) => this.updateEdgeEventStatus(entity.createdTime),
entity => ({
color: this.isPending(entity.createdTime) ? edgeEventStatusColor.get(EdgeEventStatusColor.PENDING) : edgeEventStatusColor.get(EdgeEventStatusColor.DEPLOYED)
}), false),
new EntityActionTableColumn<Event>('data', 'event.data', new EntityActionTableColumn<Event>('data', 'event.data',
{ {
name: this.translate.instant('action.view'), name: this.translate.instant('action.view'),
@ -291,7 +308,7 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> {
} }
manageEdgeEventContent(entity) { manageEdgeEventContent(entity) {
var content = ''; var content: string;
switch (entity.type) { switch (entity.type) {
case EdgeEventType.RELATION: case EdgeEventType.RELATION:
content = entity.body; content = entity.body;
@ -328,4 +345,40 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> {
} }
}); });
} }
updateEdgeEventStatus(createdTime) {
if (this.queueStartTs) {
var status: string;
if (createdTime < this.queueStartTs) {
status = this.translate.instant('edge.success');
} else {
status = this.translate.instant('edge.failed');
} }
return status;
}
}
isPending(createdTime) {
return createdTime > this.queueStartTs;
}
loadEdgeInfo() {
this.attributeService.getEntityAttributes(this.entityId, AttributeScope.SERVER_SCOPE,["queueStartTs"])
.subscribe(
attributes => this.onUpdate(attributes)
);
}
onUpdate(attributes) {
let edge = attributes.reduce(function (map, attribute) {
map[attribute.key] = attribute;
return map;
}, {});
if (edge.queueStartTs) {
this.queueStartTs = edge.queueStartTs.lastUpdateTs;
}
}
}

View File

@ -25,6 +25,7 @@ import { EventService } from '@core/http/event.service';
import { DialogService } from '@core/services/dialog.service'; import { DialogService } from '@core/services/dialog.service';
import { DebugEventType, EventType } from '@shared/models/event.models'; import { DebugEventType, EventType } from '@shared/models/event.models';
import { RuleChainService } from "@core/http/rule-chain.service"; import { RuleChainService } from "@core/http/rule-chain.service";
import {AttributeService} from "@core/http/attribute.service";
@Component({ @Component({
selector: 'tb-event-table', selector: 'tb-event-table',
@ -80,6 +81,7 @@ export class EventTableComponent implements OnInit {
constructor(private eventService: EventService, constructor(private eventService: EventService,
private dialogService: DialogService, private dialogService: DialogService,
private translate: TranslateService, private translate: TranslateService,
private attributeService: AttributeService,
private ruleChainService: RuleChainService, private ruleChainService: RuleChainService,
private datePipe: DatePipe, private datePipe: DatePipe,
private dialog: MatDialog) { private dialog: MatDialog) {
@ -92,6 +94,7 @@ export class EventTableComponent implements OnInit {
this.dialogService, this.dialogService,
this.translate, this.translate,
this.ruleChainService, this.ruleChainService,
this.attributeService,
this.datePipe, this.datePipe,
this.dialog, this.dialog,
this.entityIdValue, this.entityIdValue,

View File

@ -108,6 +108,15 @@ export class EntityActionTableColumn<T extends BaseData<HasId>> extends BaseEnti
} }
} }
export class EdgeStatusTableColumn<T extends BaseData<HasId>> extends BaseEntityTableColumn<T> {
constructor(public key: string,
public title: string,
public actionDescriptor: CellActionDescriptor<T>,
public width: string = '0px') {
super('action', key, title, width, false);
}
}
export class DateEntityTableColumn<T extends BaseData<HasId>> extends EntityTableColumn<T> { export class DateEntityTableColumn<T extends BaseData<HasId>> extends EntityTableColumn<T> {
constructor(key: string, constructor(key: string,
title: string, title: string,

View File

@ -19,7 +19,6 @@ import { TenantId } from '@shared/models/id/tenant-id';
import { EntityId } from '@shared/models/id/entity-id'; import { EntityId } from '@shared/models/id/entity-id';
import { EventId } from './id/event-id'; import { EventId } from './id/event-id';
import { ContentType } from '@shared/models/constants'; import { ContentType } from '@shared/models/constants';
import { EntityType } from '@shared/models/entity-type.models'
export enum EventType { export enum EventType {
ERROR = 'ERROR', ERROR = 'ERROR',
@ -55,6 +54,18 @@ export enum EdgeEventType {
ADMIN_SETTINGS = "ADMIN_SETTINGS" ADMIN_SETTINGS = "ADMIN_SETTINGS"
} }
export enum EdgeEventStatusColor {
DEPLOYED = "DEPLOYED",
PENDING = "PENDING"
}
export const edgeEventStatusColor = new Map<EdgeEventStatusColor, string> (
[
[EdgeEventStatusColor.DEPLOYED, '#000000'],
[EdgeEventStatusColor.PENDING, '#9e9e9e']
]
);
export const eventTypeTranslations = new Map<EventType | DebugEventType, string>( export const eventTypeTranslations = new Map<EventType | DebugEventType, string>(
[ [
[EventType.ERROR, 'event.type-error'], [EventType.ERROR, 'event.type-error'],