[CORD-2742] Remove elements from the service graph
Change-Id: Ibcb9fac4428f0b168ff66fab3219b8357e732dc5
diff --git a/src/app/service-graph/services/graph.store.ts b/src/app/service-graph/services/graph.store.ts
index 0dd6653..0edba0f 100644
--- a/src/app/service-graph/services/graph.store.ts
+++ b/src/app/service-graph/services/graph.store.ts
@@ -23,6 +23,7 @@
import {BehaviorSubject} from 'rxjs/BehaviorSubject';
import {Observable} from 'rxjs/Observable';
import {IXosBaseModel, IXosSgLink, IXosSgNode} from '../interfaces';
+import {IWSEvent, IWSEventService} from '../../datasources/websocket/global';
export interface IXosGraphStore {
@@ -41,7 +42,8 @@
static $inject = [
'$log',
'XosModelStore',
- 'XosDebouncer'
+ 'XosDebouncer',
+ 'WebSocket'
];
// graphs
@@ -64,7 +66,8 @@
constructor (
private $log: ng.ILogService,
private XosModelStore: IXosModelStoreService,
- private XosDebouncer: IXosDebouncer
+ private XosDebouncer: IXosDebouncer,
+ private webSocket: IWSEventService,
) {
this.$log.info('[XosGraphStore] Setup');
@@ -72,6 +75,34 @@
this.ServiceGraphSubject = new BehaviorSubject(this.serviceGraph);
this.loadData();
+
+ // handle model deletion
+ this.webSocket.list()
+ .filter((e: IWSEvent) => {
+
+ const model = this.getModelType(e.msg.object);
+
+ switch (model) {
+ case 'service':
+ case 'serviceinstance':
+ case 'instance':
+ case 'network':
+ return true;
+ case 'servicedependency':
+ case 'serviceinstanceLink':
+ // NOTE ServiceDependency are considered links, they are automatically removed by the graph library
+ return false;
+ default:
+ return false;
+ }
+ })
+ .subscribe((event: IWSEvent) => {
+ if (event.deleted) {
+ const nodeId = this.getNodeId(event.msg.object);
+ this.serviceGraph.removeNode(nodeId);
+ this.efficientNext(this.ServiceGraphSubject, this.serviceGraph);
+ }
+ });
}
$onDestroy() {