frontend/app/scripts/modules/topology/controllers/topologyCtrl.js (146 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ 'use strict'; angular.module('serviceCenter.topology', []) .controller('topologyController', ['$scope', 'httpService', 'apiConstant', function($scope, httpService, apiConstant) { $scope.getServices = function(appId) { $(".loader").show(); $scope.allAppId = []; $scope.microServices = []; $scope.prosAndCons = []; $scope.appId = ''; var url = apiConstant.api.allServices.url; var method = apiConstant.api.allServices.method; httpService.apiRequest(url, method).then(function(response) { $(".loader").hide(); if (response && response.data && response.data.allServicesDetail && response.data.allServicesDetail.length > 0) { $scope.allServicesDetail = response.data.allServicesDetail; angular.forEach(response.data.allServicesDetail, function(service) { if (!$scope.allAppId.includes(service.microService.appId) && service.microService.serviceName.toLowerCase() !== 'servicecenter') { $scope.allAppId.push(service.microService.appId); } }); if ($scope.allServicesDetail.length > 100){ $scope.appId = $scope.allAppId[0]; } else { $scope.allAppId.push("All"); $scope.appId = appId ? appId : "All"; } if ($scope.appId === "All") { $scope.microServices = []; $scope.prosAndCons = []; angular.forEach($scope.allAppId, function(appId) { $scope.getDependencies(appId); }); createTopology(); } else { $scope.microServices = []; $scope.prosAndCons = []; $scope.getDependencies(appId); createTopology(); } } else { $scope.allAppId = []; document.getElementById("topology").innerHTML = ""; } }, function(error) { $(".loader").hide(); $scope.allAppId = []; document.getElementById("topology").innerHTML = ""; }); } $scope.getServices(); $scope.getDependencies = function(appId) { angular.forEach($scope.allServicesDetail, function(service) { if (appId === service.microService.appId && service.microService.serviceName.toLowerCase() !== 'servicecenter') { var objMic = {}; var providers = []; var consumers = []; var showStatus = false; var version, registerBy; if (service.providers) { angular.forEach(service.providers, function(provider) { var objPro = {}; objPro.from = service.microService.serviceName + service.microService.appId + "#" + service.microService.version; objPro.to = provider.serviceName + provider.appId + "#" + provider.version; $scope.prosAndCons.push(objPro); providers.push(provider.serviceName + "#" + provider.version); }) } if (service.consumers) { angular.forEach(service.consumers, function(consumer) { consumers.push(consumer.serviceName + "#" + consumer.version) }) } if (service.instances) { angular.forEach(service.instances, function(instance) { if (instance.status.toLowerCase() === 'up') { showStatus = true; } }) } objMic.id = service.microService.serviceName + service.microService.appId + "#" + service.microService.version; objMic.label = service.microService.serviceName + "#" + service.microService.version; providers = providers.length > 0 ? "<br> Providers : " + providers : ""; consumers = consumers.length > 0 ? "<br> Consumers : " + consumers : ""; status = showStatus ? "<br> Status : up" : ""; version = "<br> Version : " + service.microService.version; registerBy = "<br> Register By :" + service.microService.registerBy; objMic.title = service.microService.serviceName + status + version + registerBy + providers + consumers; $scope.microServices.push(objMic); } }); } function createTopology() { var microServices = new vis.DataSet($scope.microServices); var prosAndCons = new vis.DataSet($scope.prosAndCons); var container = document.getElementById('topology'); var data = { nodes: microServices, edges: prosAndCons }; var options = { autoResize: false, height: (screen.height - 300).toString(), width: (screen.width - 325).toString(), physics: { enabled: true }, edges: { arrows: { to: { enabled: true, scaleFactor: 1, type: 'arrow' } }, arrowStrikethrough: false, length: 170 }, nodes: { shape: "circle", color: { border: "rgba(59,50,233,1)", background: "rgb(255,255,255)", highlight: { border: "rgba(226,77,233,1)", background: "rgba(130,38,255,1)" }, hover: { border: "rgba(226,77,233,1)", background: "rgba(130,38,255,1)" } }, font: { size: 17 }, shapeProperties: { borderRadius: 5 } }, interaction: { navigationButtons: true, hover: true } }; var topology = new vis.Network(container, data, options); } }]);