Commit 74277323bd3a46701e45a9a99c68565ec0867fc8

Authored by Artem Babak
1 parent e7b153b9

EdgeEvents with Status

... ... @@ -20,7 +20,14 @@ import {
20 20 EntityTableColumn,
21 21 EntityTableConfig
22 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 31 import {TimePageLink} from '@shared/models/page/page-link';
25 32 import {TranslateService} from '@ngx-translate/core';
26 33 import {DatePipe} from '@angular/common';
... ... @@ -40,6 +47,8 @@ import {
40 47 } from '@home/components/event/event-content-dialog.component';
41 48 import {sortObjectKeys} from '@core/utils';
42 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 53 export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> {
45 54
... ... @@ -57,11 +66,13 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> {
57 66 }
58 67
59 68 eventTypes: Array<EventType | DebugEventType>;
  69 + queueStartTs: any;
60 70
61 71 constructor(private eventService: EventService,
62 72 private dialogService: DialogService,
63 73 private translate: TranslateService,
64 74 private ruleChainService: RuleChainService,
  75 + private attributeService: AttributeService,
65 76 private datePipe: DatePipe,
66 77 private dialog: MatDialog,
67 78 public entityId: EntityId,
... ... @@ -111,6 +122,7 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> {
111 122
112 123 fetchEvents(pageLink: TimePageLink): Observable<PageData<Event>> {
113 124 if (this.eventTypeValue === EventType.EDGE_EVENT) {
  125 + this.loadEdgeInfo();
114 126 return this.eventService.getEdgeEvents(this.entityId, pageLink);
115 127 } else {
116 128 return this.eventService.getEvents(this.entityId, this.eventType, this.tenantId, pageLink);
... ... @@ -182,6 +194,11 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> {
182 194 (entity) => entity.action, entity => ({}), false),
183 195 new EntityTableColumn<Event>('entityId', 'event.entityId', '100%',
184 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 202 new EntityActionTableColumn<Event>('data', 'event.data',
186 203 {
187 204 name: this.translate.instant('action.view'),
... ... @@ -291,7 +308,7 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> {
291 308 }
292 309
293 310 manageEdgeEventContent(entity) {
294   - var content = '';
  311 + var content: string;
295 312 switch (entity.type) {
296 313 case EdgeEventType.RELATION:
297 314 content = entity.body;
... ... @@ -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 25 import { DialogService } from '@core/services/dialog.service';
26 26 import { DebugEventType, EventType } from '@shared/models/event.models';
27 27 import { RuleChainService } from "@core/http/rule-chain.service";
  28 +import {AttributeService} from "@core/http/attribute.service";
28 29
29 30 @Component({
30 31 selector: 'tb-event-table',
... ... @@ -80,6 +81,7 @@ export class EventTableComponent implements OnInit {
80 81 constructor(private eventService: EventService,
81 82 private dialogService: DialogService,
82 83 private translate: TranslateService,
  84 + private attributeService: AttributeService,
83 85 private ruleChainService: RuleChainService,
84 86 private datePipe: DatePipe,
85 87 private dialog: MatDialog) {
... ... @@ -92,6 +94,7 @@ export class EventTableComponent implements OnInit {
92 94 this.dialogService,
93 95 this.translate,
94 96 this.ruleChainService,
  97 + this.attributeService,
95 98 this.datePipe,
96 99 this.dialog,
97 100 this.entityIdValue,
... ...
... ... @@ -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 120 export class DateEntityTableColumn<T extends BaseData<HasId>> extends EntityTableColumn<T> {
112 121 constructor(key: string,
113 122 title: string,
... ...
... ... @@ -19,7 +19,6 @@ import { TenantId } from '@shared/models/id/tenant-id';
19 19 import { EntityId } from '@shared/models/id/entity-id';
20 20 import { EventId } from './id/event-id';
21 21 import { ContentType } from '@shared/models/constants';
22   -import { EntityType } from '@shared/models/entity-type.models'
23 22
24 23 export enum EventType {
25 24 ERROR = 'ERROR',
... ... @@ -55,6 +54,18 @@ export enum EdgeEventType {
55 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 69 export const eventTypeTranslations = new Map<EventType | DebugEventType, string>(
59 70 [
60 71 [EventType.ERROR, 'event.type-error'],
... ...