diff --git a/ui/src/app/common/types.constant.js b/ui/src/app/common/types.constant.js
index a4036362c9..960527f3b3 100644
--- a/ui/src/app/common/types.constant.js
+++ b/ui/src/app/common/types.constant.js
@@ -600,6 +600,10 @@ export default angular.module('thingsboard.types', [])
stats: {
value: "STATS",
name: "event.type-stats"
+ },
+ edgeEvent: {
+ value: "EDGE_EVENT",
+ name: "event.type-edge-event"
}
},
debugEventType: {
diff --git a/ui/src/app/event/event-header-edge-event.tpl.html b/ui/src/app/event/event-header-edge-event.tpl.html
new file mode 100644
index 0000000000..cdd9dfb20f
--- /dev/null
+++ b/ui/src/app/event/event-header-edge-event.tpl.html
@@ -0,0 +1,23 @@
+
+
event.event-time
+event.event-type
+edge.entity-id
+edge.event-action
+event.success
+edge.entity-info
diff --git a/ui/src/app/event/event-header.directive.js b/ui/src/app/event/event-header.directive.js
index ce0fe4e81c..efe3dab21c 100644
--- a/ui/src/app/event/event-header.directive.js
+++ b/ui/src/app/event/event-header.directive.js
@@ -19,6 +19,7 @@ import eventHeaderLcEventTemplate from './event-header-lc-event.tpl.html';
import eventHeaderStatsTemplate from './event-header-stats.tpl.html';
import eventHeaderErrorTemplate from './event-header-error.tpl.html';
import eventHeaderDebugRuleNodeTemplate from './event-header-debug-rulenode.tpl.html';
+import eventHeaderEdgeEventTemplate from './event-header-edge-event.tpl.html'
/* eslint-enable import/no-unresolved, import/default */
@@ -45,6 +46,9 @@ export default function EventHeaderDirective($compile, $templateCache, types) {
case types.debugEventType.debugRuleChain.value:
template = eventHeaderDebugRuleNodeTemplate;
break;
+ case types.eventType.edgeEvent.value:
+ template = eventHeaderEdgeEventTemplate;
+ break;
}
return $templateCache.get(template);
}
diff --git a/ui/src/app/event/event-row-edge-event.tpl.html b/ui/src/app/event/event-row-edge-event.tpl.html
new file mode 100644
index 0000000000..a42e39d811
--- /dev/null
+++ b/ui/src/app/event/event-row-edge-event.tpl.html
@@ -0,0 +1,36 @@
+
+{{event.createdTime | date : 'yyyy-MM-dd HH:mm:ss'}}
+{{event.edgeEventAction}}
+{{event.entityId}}
+{{event.entityType}}
+{{event.success ? 'event.success' : 'event.failed'}}
+
+
+
+ {{ 'action.view' | translate }}
+
+
+ more_horiz
+
+
+
+
diff --git a/ui/src/app/event/event-row.directive.js b/ui/src/app/event/event-row.directive.js
index eec8a1aff6..ae337cfb38 100644
--- a/ui/src/app/event/event-row.directive.js
+++ b/ui/src/app/event/event-row.directive.js
@@ -21,11 +21,12 @@ import eventRowLcEventTemplate from './event-row-lc-event.tpl.html';
import eventRowStatsTemplate from './event-row-stats.tpl.html';
import eventRowErrorTemplate from './event-row-error.tpl.html';
import eventRowDebugRuleNodeTemplate from './event-row-debug-rulenode.tpl.html';
+import eventRowEdgeEventTemplate from './event-row-edge-event.tpl.html';
/* eslint-enable import/no-unresolved, import/default */
/*@ngInject*/
-export default function EventRowDirective($compile, $templateCache, $mdDialog, $document, types) {
+export default function EventRowDirective($compile, $templateCache, $mdDialog, $document, $translate, types, toast, entityService) {
var linker = function (scope, element, attrs) {
@@ -47,6 +48,9 @@ export default function EventRowDirective($compile, $templateCache, $mdDialog, $
case types.debugEventType.debugRuleChain.value:
template = eventRowDebugRuleNodeTemplate;
break;
+ case types.eventType.edgeEvent.value:
+ template = eventRowEdgeEventTemplate;
+ break;
}
return $templateCache.get(template);
}
@@ -86,6 +90,36 @@ export default function EventRowDirective($compile, $templateCache, $mdDialog, $
});
}
+ scope.showEdgeEntityContent = function($event, title, contentType) {
+ var onShowingCallback = {
+ onShowing: function(){}
+ }
+ if (!contentType) {
+ contentType = null;
+ }
+ entityService.getEntity(scope.event.entityType, scope.event.entityId, {}).then(
+ function success(info) {
+ var content = angular.toJson(info);
+ $mdDialog.show({
+ controller: 'EventContentDialogController',
+ controllerAs: 'vm',
+ templateUrl: eventErrorDialogTemplate,
+ locals: {content: content, title: title, contentType: contentType, showingCallback: onShowingCallback},
+ parent: angular.element($document[0].body),
+ fullscreen: true,
+ targetEvent: $event,
+ multiple: true,
+ onShowing: function(scope, element) {
+ onShowingCallback.onShowing(scope, element);
+ }
+ });
+ },
+ function fail() {
+ toast.showError($translate.instant('edge.load-entity-error'));
+ }
+ );
+ }
+
scope.checkTooltip = function($event) {
var el = $event.target;
var $el = angular.element(el);
diff --git a/ui/src/app/event/event-table.directive.js b/ui/src/app/event/event-table.directive.js
index ff002f069e..7f21dfd57f 100644
--- a/ui/src/app/event/event-table.directive.js
+++ b/ui/src/app/event/event-table.directive.js
@@ -24,6 +24,27 @@ import eventTableTemplate from './event-table.tpl.html';
/*@ngInject*/
export default function EventTableDirective($compile, $templateCache, $rootScope, types, eventService) {
+ var edgeData = [
+ {
+ "createdTime": 1593592774537,
+ "tenantId": "63746950-bb76-11ea-9f96-69d7782607f7",
+ "edgeId": "85bb84b0-bb78-11ea-8472-c3dbdeb0fd97",
+ "edgeEventAction": "ASSIGNED_TO_EDGE",
+ "entityId": "640055a0-bb76-11ea-9f96-69d7782607f7",
+ "entityType": "DEVICE",
+ "success": true,
+ },
+ {
+ "createdTime": 1593592774538,
+ "tenantId": "63746950-bb76-11ea-9f96-69d7782607f7",
+ "edgeId": "85bb84b0-bb78-11ea-8472-c3dbdeb0fd97",
+ "edgeEventAction": "CREDENTIALS_UPDATED",
+ "entityId": "640055a0-bb76-11ea-9f96-69d7782607f8",
+ "entityType": "DEVICE",
+ "success": false
+ }
+ ]
+
var linker = function (scope, element, attrs) {
var template = $templateCache.get(eventTableTemplate);
@@ -98,7 +119,7 @@ export default function EventTableDirective($compile, $templateCache, $rootScope
},
fetchMoreItems_: function () {
- if (scope.events.hasNext && !scope.events.pending) {
+ if (scope.events.hasNext && !scope.events.pending && scope.eventType !== "EDGE_EVENT") {
if (scope.entityType && scope.entityId && scope.eventType && scope.tenantId) {
var promise = eventService.getEvents(scope.entityType, scope.entityId,
scope.eventType, scope.tenantId, scope.events.nextPageLink);
@@ -125,12 +146,16 @@ export default function EventTableDirective($compile, $templateCache, $rootScope
scope.events.hasNext = false;
}
}
+ if (scope.eventType === "EDGE_EVENT") {
+ scope.events.data = edgeData;
+ scope.events.nextPageLink = false;
+ scope.events.hasNext = null;
+ }
}
};
scope.$watch("entityId", function(newVal, prevVal) {
if (newVal && !angular.equals(newVal, prevVal)) {
- scope.resetFilter();
scope.reload();
}
});
@@ -141,7 +166,7 @@ export default function EventTableDirective($compile, $templateCache, $rootScope
}
});
- scope.$watch("timewindow", function(newVal, prevVal) {
+ scope.$watch("createdTime", function(newVal, prevVal) {
if (newVal && !angular.equals(newVal, prevVal)) {
scope.reload();
}
diff --git a/ui/src/app/locale/locale.constant-en_US.json b/ui/src/app/locale/locale.constant-en_US.json
index d6b186c42e..57c54c2556 100644
--- a/ui/src/app/locale/locale.constant-en_US.json
+++ b/ui/src/app/locale/locale.constant-en_US.json
@@ -791,14 +791,17 @@
"name": "Name",
"name-required": "Name is required.",
"description": "Description",
- "events": "Events",
+ "entity-info": "Entity info",
"details": "Details",
+ "events": "Events",
"copy-id": "Copy Edge Id",
"id-copied-message": "Edge Id has been copied to clipboard",
"permissions": "Permissions",
"edge-required": "Edge required",
"edge-type": "Edge type",
"edge-type-required": "Edge type is required.",
+ "event-action": "Event action",
+ "entity-id": "Entity ID",
"select-edge-type": "Select edge type",
"assign-to-customer": "Assign to customer",
"assign-to-customer-text": "Please select the customer to assign the edge(s)",
@@ -818,6 +821,7 @@
"make-private-edge-text": "After the confirmation the edge and all its data will be made private and won't be accessible by others.",
"import": "Import edge",
"label": "Label",
+ "load-entity-error": "Could not load entity info",
"assign-new-edge": "Assign new edge",
"manage-edge-dashboards": "Manage edge dashboards",
"unassign-from-edge": "Unassign from edge",
@@ -1082,6 +1086,7 @@
"type-debug-rule-chain": "Debug",
"no-events-prompt": "No events found",
"error": "Error",
+ "type-edge-event": "Downlink",
"alarm": "Alarm",
"event-time": "Event time",
"server": "Server",