Commit 74277323bd3a46701e45a9a99c68565ec0867fc8

Authored by Artem Babak
1 parent e7b153b9

EdgeEvents with Status

@@ -20,7 +20,14 @@ import { @@ -20,7 +20,14 @@ import {
20 EntityTableColumn, 20 EntityTableColumn,
21 EntityTableConfig 21 EntityTableConfig
22 } from '@home/models/entity/entities-table-config.models'; 22 } from '@home/models/entity/entities-table-config.models';
23 -import {DebugEventType, EdgeEventType, Event, EventType} from '@shared/models/event.models'; 23 +import {
  24 + DebugEventType,
  25 + EdgeEventType,
  26 + EdgeEventStatusColor,
  27 + edgeEventStatusColor,
  28 + Event,
  29 + EventType
  30 +} from '@shared/models/event.models';
24 import {TimePageLink} from '@shared/models/page/page-link'; 31 import {TimePageLink} from '@shared/models/page/page-link';
25 import {TranslateService} from '@ngx-translate/core'; 32 import {TranslateService} from '@ngx-translate/core';
26 import {DatePipe} from '@angular/common'; 33 import {DatePipe} from '@angular/common';
@@ -40,6 +47,8 @@ import { @@ -40,6 +47,8 @@ import {
40 } from '@home/components/event/event-content-dialog.component'; 47 } from '@home/components/event/event-content-dialog.component';
41 import {sortObjectKeys} from '@core/utils'; 48 import {sortObjectKeys} from '@core/utils';
42 import {RuleChainService} from "@core/http/rule-chain.service"; 49 import {RuleChainService} from "@core/http/rule-chain.service";
  50 +import {AttributeService} from "@core/http/attribute.service";
  51 +import {AttributeScope} from "@shared/models/telemetry/telemetry.models";
43 52
44 export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> { 53 export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> {
45 54
@@ -57,11 +66,13 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> { @@ -57,11 +66,13 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> {
57 } 66 }
58 67
59 eventTypes: Array<EventType | DebugEventType>; 68 eventTypes: Array<EventType | DebugEventType>;
  69 + queueStartTs: any;
60 70
61 constructor(private eventService: EventService, 71 constructor(private eventService: EventService,
62 private dialogService: DialogService, 72 private dialogService: DialogService,
63 private translate: TranslateService, 73 private translate: TranslateService,
64 private ruleChainService: RuleChainService, 74 private ruleChainService: RuleChainService,
  75 + private attributeService: AttributeService,
65 private datePipe: DatePipe, 76 private datePipe: DatePipe,
66 private dialog: MatDialog, 77 private dialog: MatDialog,
67 public entityId: EntityId, 78 public entityId: EntityId,
@@ -111,6 +122,7 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> { @@ -111,6 +122,7 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> {
111 122
112 fetchEvents(pageLink: TimePageLink): Observable<PageData<Event>> { 123 fetchEvents(pageLink: TimePageLink): Observable<PageData<Event>> {
113 if (this.eventTypeValue === EventType.EDGE_EVENT) { 124 if (this.eventTypeValue === EventType.EDGE_EVENT) {
  125 + this.loadEdgeInfo();
114 return this.eventService.getEdgeEvents(this.entityId, pageLink); 126 return this.eventService.getEdgeEvents(this.entityId, pageLink);
115 } else { 127 } else {
116 return this.eventService.getEvents(this.entityId, this.eventType, this.tenantId, pageLink); 128 return this.eventService.getEvents(this.entityId, this.eventType, this.tenantId, pageLink);
@@ -182,6 +194,11 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> { @@ -182,6 +194,11 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> {
182 (entity) => entity.action, entity => ({}), false), 194 (entity) => entity.action, entity => ({}), false),
183 new EntityTableColumn<Event>('entityId', 'event.entityId', '100%', 195 new EntityTableColumn<Event>('entityId', 'event.entityId', '100%',
184 (entity) => entity.id.id, entity => ({}), false), //TODO: replace this to entity.entityId because of conflict wiht entityId model 196 (entity) => entity.id.id, entity => ({}), false), //TODO: replace this to entity.entityId because of conflict wiht entityId model
  197 + new EntityTableColumn<Event>('status', 'event.status', '100%',
  198 + (entity) => this.updateEdgeEventStatus(entity.createdTime),
  199 + entity => ({
  200 + color: this.isPending(entity.createdTime) ? edgeEventStatusColor.get(EdgeEventStatusColor.PENDING) : edgeEventStatusColor.get(EdgeEventStatusColor.DEPLOYED)
  201 + }), false),
185 new EntityActionTableColumn<Event>('data', 'event.data', 202 new EntityActionTableColumn<Event>('data', 'event.data',
186 { 203 {
187 name: this.translate.instant('action.view'), 204 name: this.translate.instant('action.view'),
@@ -291,7 +308,7 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> { @@ -291,7 +308,7 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> {
291 } 308 }
292 309
293 manageEdgeEventContent(entity) { 310 manageEdgeEventContent(entity) {
294 - var content = ''; 311 + var content: string;
295 switch (entity.type) { 312 switch (entity.type) {
296 case EdgeEventType.RELATION: 313 case EdgeEventType.RELATION:
297 content = entity.body; 314 content = entity.body;
@@ -328,4 +345,40 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> { @@ -328,4 +345,40 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> {
328 } 345 }
329 }); 346 });
330 } 347 }
  348 +
  349 + updateEdgeEventStatus(createdTime) {
  350 + if (this.queueStartTs) {
  351 + var status: string;
  352 + if (createdTime < this.queueStartTs) {
  353 + status = this.translate.instant('edge.success');
  354 + } else {
  355 + status = this.translate.instant('edge.failed');
  356 + }
  357 + return status;
  358 + }
  359 + }
  360 +
  361 + isPending(createdTime) {
  362 + return createdTime > this.queueStartTs;
  363 + }
  364 +
  365 + loadEdgeInfo() {
  366 + this.attributeService.getEntityAttributes(this.entityId, AttributeScope.SERVER_SCOPE,["queueStartTs"])
  367 + .subscribe(
  368 + attributes => this.onUpdate(attributes)
  369 + );
  370 + }
  371 +
  372 + onUpdate(attributes) {
  373 + let edge = attributes.reduce(function (map, attribute) {
  374 + map[attribute.key] = attribute;
  375 + return map;
  376 + }, {});
  377 + if (edge.queueStartTs) {
  378 + this.queueStartTs = edge.queueStartTs.lastUpdateTs;
  379 + }
  380 + }
  381 +
  382 +
331 } 383 }
  384 +
@@ -25,6 +25,7 @@ import { EventService } from '@core/http/event.service'; @@ -25,6 +25,7 @@ import { EventService } from '@core/http/event.service';
25 import { DialogService } from '@core/services/dialog.service'; 25 import { DialogService } from '@core/services/dialog.service';
26 import { DebugEventType, EventType } from '@shared/models/event.models'; 26 import { DebugEventType, EventType } from '@shared/models/event.models';
27 import { RuleChainService } from "@core/http/rule-chain.service"; 27 import { RuleChainService } from "@core/http/rule-chain.service";
  28 +import {AttributeService} from "@core/http/attribute.service";
28 29
29 @Component({ 30 @Component({
30 selector: 'tb-event-table', 31 selector: 'tb-event-table',
@@ -80,6 +81,7 @@ export class EventTableComponent implements OnInit { @@ -80,6 +81,7 @@ export class EventTableComponent implements OnInit {
80 constructor(private eventService: EventService, 81 constructor(private eventService: EventService,
81 private dialogService: DialogService, 82 private dialogService: DialogService,
82 private translate: TranslateService, 83 private translate: TranslateService,
  84 + private attributeService: AttributeService,
83 private ruleChainService: RuleChainService, 85 private ruleChainService: RuleChainService,
84 private datePipe: DatePipe, 86 private datePipe: DatePipe,
85 private dialog: MatDialog) { 87 private dialog: MatDialog) {
@@ -92,6 +94,7 @@ export class EventTableComponent implements OnInit { @@ -92,6 +94,7 @@ export class EventTableComponent implements OnInit {
92 this.dialogService, 94 this.dialogService,
93 this.translate, 95 this.translate,
94 this.ruleChainService, 96 this.ruleChainService,
  97 + this.attributeService,
95 this.datePipe, 98 this.datePipe,
96 this.dialog, 99 this.dialog,
97 this.entityIdValue, 100 this.entityIdValue,
@@ -108,6 +108,15 @@ export class EntityActionTableColumn<T extends BaseData<HasId>> extends BaseEnti @@ -108,6 +108,15 @@ export class EntityActionTableColumn<T extends BaseData<HasId>> extends BaseEnti
108 } 108 }
109 } 109 }
110 110
  111 +export class EdgeStatusTableColumn<T extends BaseData<HasId>> extends BaseEntityTableColumn<T> {
  112 + constructor(public key: string,
  113 + public title: string,
  114 + public actionDescriptor: CellActionDescriptor<T>,
  115 + public width: string = '0px') {
  116 + super('action', key, title, width, false);
  117 + }
  118 +}
  119 +
111 export class DateEntityTableColumn<T extends BaseData<HasId>> extends EntityTableColumn<T> { 120 export class DateEntityTableColumn<T extends BaseData<HasId>> extends EntityTableColumn<T> {
112 constructor(key: string, 121 constructor(key: string,
113 title: string, 122 title: string,
@@ -19,7 +19,6 @@ import { TenantId } from '@shared/models/id/tenant-id'; @@ -19,7 +19,6 @@ import { TenantId } from '@shared/models/id/tenant-id';
19 import { EntityId } from '@shared/models/id/entity-id'; 19 import { EntityId } from '@shared/models/id/entity-id';
20 import { EventId } from './id/event-id'; 20 import { EventId } from './id/event-id';
21 import { ContentType } from '@shared/models/constants'; 21 import { ContentType } from '@shared/models/constants';
22 -import { EntityType } from '@shared/models/entity-type.models'  
23 22
24 export enum EventType { 23 export enum EventType {
25 ERROR = 'ERROR', 24 ERROR = 'ERROR',
@@ -55,6 +54,18 @@ export enum EdgeEventType { @@ -55,6 +54,18 @@ export enum EdgeEventType {
55 ADMIN_SETTINGS = "ADMIN_SETTINGS" 54 ADMIN_SETTINGS = "ADMIN_SETTINGS"
56 } 55 }
57 56
  57 +export enum EdgeEventStatusColor {
  58 + DEPLOYED = "DEPLOYED",
  59 + PENDING = "PENDING"
  60 +}
  61 +
  62 +export const edgeEventStatusColor = new Map<EdgeEventStatusColor, string> (
  63 + [
  64 + [EdgeEventStatusColor.DEPLOYED, '#000000'],
  65 + [EdgeEventStatusColor.PENDING, '#9e9e9e']
  66 + ]
  67 +);
  68 +
58 export const eventTypeTranslations = new Map<EventType | DebugEventType, string>( 69 export const eventTypeTranslations = new Map<EventType | DebugEventType, string>(
59 [ 70 [
60 [EventType.ERROR, 'event.type-error'], 71 [EventType.ERROR, 'event.type-error'],