|
@@ -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
|
+ |