blob: 5ab5d0f4442796cf749690e9b5165c7dbf7ab1f0 [file] [log] [blame]
(function () {
'use strict';
angular.module('xos.diagnostic')
.directive('logicTopology', function(){
return {
restrict: 'E',
scope: {
subscribers: '=',
selected: '='
},
bindToController: true,
controllerAs: 'vm',
templateUrl: 'templates/logicTopology.tpl.html',
controller: function($element, $log, $scope, $rootScope, $timeout, d3, LogicTopologyHelper, Node, Tenant, Ceilometer, serviceTopologyConfig, ChartData){
$log.info('Logic Plane');
var svg;
this.selectedInstances = [];
this.hideInstanceStats = true;
var _this = this;
const handleSvg = (el) => {
d3.select($element[0]).select('svg').remove();
svg = d3.select(el)
.append('svg')
.style('width', `${el.clientWidth}px`)
.style('height', `${el.clientHeight}px`);
}
const loadGlobalScope = () => {
ChartData.getLogicTree()
.then((tree) => {
LogicTopologyHelper.updateTree(svg);
});
}
loadGlobalScope();
$scope.$watch(() => this.selected, (selected) => {
if(selected){
ChartData.selectSubscriber(selected);
LogicTopologyHelper.updateTree(svg);
}
else{
ChartData.removeSubscriber();
LogicTopologyHelper.updateTree(svg);
}
});
$rootScope.$on('instance.detail.hide', () => {
this.hideInstanceStats = true;
$timeout(() => {
this.selectedInstances = [];
ChartData.highlightInstances([]);
LogicTopologyHelper.updateTree(svg);
}, 500);
});
$rootScope.$on('instance.detail', (evt, service) => {
ChartData.getInstanceStatus(service)
.then((instances) => {
LogicTopologyHelper.updateTree(svg);
})
.catch(e => {
_this.error = 'Service statistics are not available at this time. Please try again later.'
$timeout(() => {
_this.error = null;
}, 2000);
})
});
d3.select(window)
.on('resize.logic', () => {
handleSvg($element[0]);
LogicTopologyHelper.setupTree(svg);
LogicTopologyHelper.updateTree(svg);
});
handleSvg($element[0]);
LogicTopologyHelper.setupTree(svg);
this.selectSubscriberModal = () => {
this.openSelectSubscriberModal = true;
$scope.$apply();
};
this.subscriberStatusModal = () => {
this.openSubscriberStatusModal = true;
$scope.$apply();
};
// listen for subscriber modal event
$rootScope.$on('subscriber.modal.open', () => {
if(ChartData.currentSubscriber){
this.subscriberStatusModal();
}
else{
this.selectSubscriberModal();
}
});
// listen for subscriber modal event
$rootScope.$on('subscriber.modal.open', () => {
if(ChartData.currentSubscriber){
this.currentSubscriber = ChartData.currentSubscriber;
this.subscriberStatusModal();
}
else{
this.selectSubscriberModal();
}
});
}
};
});
})();