var app = angular.module('sentinelDashboardApp');
app.controller('IdentityCtl', ['$scope', '$stateParams', 'IdentityService',
'ngDialog', 'FlowServiceV1', 'DegradeService', 'AuthorityRuleService', 'ParamFlowService', 'MachineService',
'$interval', '$location', '$timeout',
function ($scope, $stateParams, IdentityService, ngDialog,
FlowService, DegradeService, AuthorityRuleService, ParamFlowService, MachineService, $interval, $location, $timeout) {
$scope.app = $stateParams.app;
$scope.currentPage = 1;
$scope.pageSize = 16;
$scope.totalPage = 1;
$scope.totalCount = 0;
$scope.identities = [];
// 数据自动刷新频率, 默认10s
var DATA_REFRESH_INTERVAL = 30;
$scope.isExpand = true;
$scope.searchKey = '';
$scope.firstExpandAll = false;
$scope.isTreeView = true;
$scope.macsInputConfig = {
searchField: ['text', 'value'],
persist: true,
create: false,
maxItems: 1,
render: {
item: function (data, escape) {
return '
' + escape(data.text) + '
';
}
},
onChange: function (value, oldValue) {
$scope.macInputModel = value;
}
};
$scope.table = null;
var flowRuleDialog;
var flowRuleDialogScope;
$scope.addNewFlowRule = function (resource) {
if (!$scope.macInputModel) {
return;
}
var mac = $scope.macInputModel.split(':');
flowRuleDialogScope = $scope.$new(true);
flowRuleDialogScope.currentRule = {
enable: false,
strategy: 0,
grade: 1,
controlBehavior: 0,
resource: resource,
limitApp: 'default',
clusterMode: false,
clusterConfig: {
thresholdType: 0
},
app: $scope.app,
ip: mac[0],
port: mac[1]
};
flowRuleDialogScope.flowRuleDialog = {
title: '新增流控规则',
type: 'add',
confirmBtnText: '新增',
saveAndContinueBtnText: '新增并继续添加',
showAdvanceButton: true
};
// $scope.flowRuleDialog = {
// showAdvanceButton : true
// };
flowRuleDialogScope.saveRule = saveFlowRule;
flowRuleDialogScope.saveRuleAndContinue = saveFlowRuleAndContinue;
flowRuleDialogScope.onOpenAdvanceClick = function () {
flowRuleDialogScope.flowRuleDialog.showAdvanceButton = false;
};
flowRuleDialogScope.onCloseAdvanceClick = function () {
flowRuleDialogScope.flowRuleDialog.showAdvanceButton = true;
};
flowRuleDialog = ngDialog.open({
template: '/app/views/dialog/flow-rule-dialog.html',
width: 680,
overlay: true,
scope: flowRuleDialogScope
});
};
function saveFlowRule() {
if (!FlowService.checkRuleValid(flowRuleDialogScope.currentRule)) {
return;
}
FlowService.newRule(flowRuleDialogScope.currentRule).success(function (data) {
if (data.code === 0) {
flowRuleDialog.close();
let url = '/dashboard/flow/' + $scope.app;
$location.path(url);
} else {
alert('失败:' + data.msg);
}
}).error((data, header, config, status) => {
alert('未知错误');
});
}
function saveFlowRuleAndContinue() {
if (!FlowService.checkRuleValid(flowRuleDialogScope.currentRule)) {
return;
}
FlowService.newRule(flowRuleDialogScope.currentRule).success(function (data) {
if (data.code === 0) {
flowRuleDialog.close();
} else {
alert('失败:' + data.msg);
}
});
}
var degradeRuleDialog;
var degradeRuleDialogScope;
$scope.addNewDegradeRule = function (resource) {
if (!$scope.macInputModel) {
return;
}
var mac = $scope.macInputModel.split(':');
degradeRuleDialogScope = $scope.$new(true);
degradeRuleDialogScope.currentRule = {
enable: false,
grade: 0,
strategy: 0,
resource: resource,
limitApp: 'default',
minRequestAmount: 5,
statIntervalMs: 1000,
app: $scope.app,
ip: mac[0],
port: mac[1]
};
degradeRuleDialogScope.degradeRuleDialog = {
title: '新增熔断规则',
type: 'add',
confirmBtnText: '新增',
saveAndContinueBtnText: '新增并继续添加'
};
degradeRuleDialogScope.saveRule = saveDegradeRule;
degradeRuleDialogScope.saveRuleAndContinue = saveDegradeRuleAndContinue;
degradeRuleDialog = ngDialog.open({
template: '/app/views/dialog/degrade-rule-dialog.html',
width: 680,
overlay: true,
scope: degradeRuleDialogScope
});
};
function saveDegradeRule() {
if (!DegradeService.checkRuleValid(degradeRuleDialogScope.currentRule)) {
return;
}
DegradeService.newRule(degradeRuleDialogScope.currentRule).success(function (data) {
if (data.code === 0) {
degradeRuleDialog.close();
var url = '/dashboard/degrade/' + $scope.app;
$location.path(url);
} else {
alert('失败:' + data.msg);
}
});
}
function saveDegradeRuleAndContinue() {
if (!DegradeService.checkRuleValid(degradeRuleDialogScope.currentRule)) {
return;
}
DegradeService.newRule(degradeRuleDialogScope.currentRule).success(function (data) {
if (data.code === 0) {
degradeRuleDialog.close();
} else {
alert('失败:' + data.msg);
}
});
}
let authorityRuleDialog;
let authorityRuleDialogScope;
function saveAuthorityRule() {
let ruleEntity = authorityRuleDialogScope.currentRule;
if (!AuthorityRuleService.checkRuleValid(ruleEntity.rule)) {
return;
}
AuthorityRuleService.addNewRule(ruleEntity).success((data) => {
if (data.success) {
authorityRuleDialog.close();
let url = '/dashboard/authority/' + $scope.app;
$location.path(url);
} else {
alert('添加规则失败:' + data.msg);
}
}).error((data) => {
if (data) {
alert('添加规则失败:' + data.msg);
} else {
alert("添加规则失败:未知错误");
}
});
}
function saveAuthorityRuleAndContinue() {
let ruleEntity = authorityRuleDialogScope.currentRule;
if (!AuthorityRuleService.checkRuleValid(ruleEntity.rule)) {
return;
}
AuthorityRuleService.addNewRule(ruleEntity).success((data) => {
if (data.success) {
authorityRuleDialog.close();
} else {
alert('添加规则失败:' + data.msg);
}
}).error((data) => {
if (data) {
alert('添加规则失败:' + data.msg);
} else {
alert("添加规则失败:未知错误");
}
});
}
$scope.addNewAuthorityRule = function (resource) {
if (!$scope.macInputModel) {
return;
}
let mac = $scope.macInputModel.split(':');
authorityRuleDialogScope = $scope.$new(true);
authorityRuleDialogScope.currentRule = {
app: $scope.app,
ip: mac[0],
port: mac[1],
rule: {
resource: resource,
strategy: 0,
limitApp: '',
}
};
authorityRuleDialogScope.authorityRuleDialog = {
title: '新增授权规则',
type: 'add',
confirmBtnText: '新增',
saveAndContinueBtnText: '新增并继续添加'
};
authorityRuleDialogScope.saveRule = saveAuthorityRule;
authorityRuleDialogScope.saveRuleAndContinue = saveAuthorityRuleAndContinue;
authorityRuleDialog = ngDialog.open({
template: '/app/views/dialog/authority-rule-dialog.html',
width: 680,
overlay: true,
scope: authorityRuleDialogScope
});
};
let paramFlowRuleDialog;
let paramFlowRuleDialogScope;
function saveParamFlowRule() {
let ruleEntity = paramFlowRuleDialogScope.currentRule;
if (!ParamFlowService.checkRuleValid(ruleEntity.rule)) {
return;
}
ParamFlowService.addNewRule(ruleEntity).success((data) => {
if (data.success) {
paramFlowRuleDialog.close();
let url = '/dashboard/paramFlow/' + $scope.app;
$location.path(url);
} else {
alert('添加热点规则失败:' + data.msg);
}
}).error((data) => {
if (data) {
alert('添加热点规则失败:' + data.msg);
} else {
alert("添加热点规则失败:未知错误");
}
});
}
function saveParamFlowRuleAndContinue() {
let ruleEntity = paramFlowRuleDialogScope.currentRule;
if (!ParamFlowService.checkRuleValid(ruleEntity.rule)) {
return;
}
ParamFlowService.addNewRule(ruleEntity).success((data) => {
if (data.success) {
paramFlowRuleDialog.close();
} else {
alert('添加热点规则失败:' + data.msg);
}
}).error((data) => {
if (data) {
alert('添加热点规则失败:' + data.msg);
} else {
alert("添加热点规则失败:未知错误");
}
});
}
$scope.addNewParamFlowRule = function (resource) {
if (!$scope.macInputModel) {
return;
}
let mac = $scope.macInputModel.split(':');
paramFlowRuleDialogScope = $scope.$new(true);
paramFlowRuleDialogScope.currentRule = {
app: $scope.app,
ip: mac[0],
port: mac[1],
rule: {
resource: resource,
grade: 1,
paramFlowItemList: [],
count: 0,
limitApp: 'default',
controlBehavior: 0,
durationInSec: 1,
burstCount: 0,
maxQueueingTimeMs: 0,
clusterMode: false,
clusterConfig: {
thresholdType: 0,
fallbackToLocalWhenFail: true,
}
}
};
paramFlowRuleDialogScope.paramFlowRuleDialog = {
title: '新增热点规则',
type: 'add',
confirmBtnText: '新增',
saveAndContinueBtnText: '新增并继续添加',
supportAdvanced: false,
showAdvanceButton: true
};
paramFlowRuleDialogScope.saveRule = saveParamFlowRule;
paramFlowRuleDialogScope.saveRuleAndContinue = saveParamFlowRuleAndContinue;
// paramFlowRuleDialogScope.onOpenAdvanceClick = function () {
// paramFlowRuleDialogScope.paramFlowRuleDialog.showAdvanceButton = false;
// };
// paramFlowRuleDialogScope.onCloseAdvanceClick = function () {
// paramFlowRuleDialogScope.paramFlowRuleDialog.showAdvanceButton = true;
// };
paramFlowRuleDialog = ngDialog.open({
template: '/app/views/dialog/param-flow-rule-dialog.html',
width: 680,
overlay: true,
scope: paramFlowRuleDialogScope
});
};
var searchHandler;
$scope.searchChange = function (searchKey) {
$timeout.cancel(searchHandler);
searchHandler = $timeout(function () {
$scope.searchKey = searchKey;
$scope.isExpand = true;
$scope.firstExpandAll = true;
reInitIdentityDatas();
$scope.firstExpandAll = false;
}, 600);
};
$scope.initTreeTable = function () {
// if (!$scope.table) {
com_github_culmat_jsTreeTable.register(window);
$scope.table = window.treeTable($('#identities'));
// }
};
$scope.expandAll = function () {
$scope.isExpand = true;
};
$scope.collapseAll = function () {
$scope.isExpand = false;
};
$scope.treeView = function () {
$scope.isTreeView = true;
queryIdentities();
};
$scope.listView = function () {
$scope.isTreeView = false;
queryIdentities();
};
function queryAppMachines() {
MachineService.getAppMachines($scope.app).success(
function (data) {
if (data.code === 0) {
if (data.data) {
$scope.machines = [];
$scope.macsInputOptions = [];
data.data.forEach(function (item) {
if (item.healthy) {
$scope.macsInputOptions.push({
text: item.ip + ':' + item.port,
value: item.ip + ':' + item.port
});
}
});
}
if ($scope.macsInputOptions.length > 0) {
$scope.macInputModel = $scope.macsInputOptions[0].value;
}
} else {
$scope.macsInputOptions = [];
}
}
);
}
// Fetch all machines by current app name.
queryAppMachines();
$scope.$watch('macInputModel', function () {
if ($scope.macInputModel) {
reInitIdentityDatas();
}
});
$scope.$on('$destroy', function () {
$interval.cancel(intervalId);
});
var intervalId;
function reInitIdentityDatas() {
// $interval.cancel(intervalId);
queryIdentities();
// intervalId = $interval(function () {
// queryIdentities();
// }, DATA_REFRESH_INTERVAL * 1000);
};
function queryIdentities() {
var mac = $scope.macInputModel.split(':');
if (mac == null || mac.length < 2) {
return;
}
if ($scope.isTreeView) {
IdentityService.fetchIdentityOfMachine(mac[0], mac[1], $scope.searchKey).success(
function (data) {
if (data.code == 0 && data.data) {
$scope.identities = data.data;
$scope.totalCount = $scope.identities.length;
} else {
$scope.identities = [];
$scope.totalCount = 0;
}
}
);
} else {
IdentityService.fetchClusterNodeOfMachine(mac[0], mac[1], $scope.searchKey).success(
function (data) {
if (data.code == 0 && data.data) {
$scope.identities = data.data;
$scope.totalCount = $scope.identities.length;
} else {
$scope.identities = [];
$scope.totalCount = 0;
}
}
);
}
};
$scope.queryIdentities = queryIdentities;
}]);