/** * Parameter flow control service. * * @author Eric Zhao */ angular.module('sentinelDashboardApp').service('ParamFlowService', ['$http', function ($http) { this.queryMachineRules = function(app, ip, port) { var param = { app: app, ip: ip, port: port }; return $http({ url: '/paramFlow/rules', params: param, method: 'GET' }); }; this.addNewRule = function(rule) { return $http({ url: '/paramFlow/rule', data: rule, method: 'POST' }); }; this.saveRule = function (entity) { return $http({ url: '/paramFlow/rule/' + entity.id, data: entity, method: 'PUT' }); }; this.deleteRule = function (entity) { return $http({ url: '/paramFlow/rule/' + entity.id, method: 'DELETE' }); }; function isNumberClass(classType) { return classType === 'int' || classType === 'double' || classType === 'float' || classType === 'long' || classType === 'short'; } function isByteClass(classType) { return classType === 'byte'; } function notNumberAtLeastZero(num) { return num === undefined || num === '' || isNaN(num) || num < 0; } function notGoodNumber(num) { return num === undefined || num === '' || isNaN(num); } function notGoodNumberBetweenExclusive(num, l ,r) { return num === undefined || num === '' || isNaN(num) || num < l || num > r; } function notValidParamItem(curExItem) { if (isNumberClass(curExItem.classType) && notGoodNumber(curExItem.object)) { return true; } if (isByteClass(curExItem.classType) && notGoodNumberBetweenExclusive(curExItem.object, -128, 127)) { return true; } return curExItem.object === undefined || curExItem.classType === undefined || notNumberAtLeastZero(curExItem.count); } this.checkRuleValid = function (rule) { if (!rule.resource || rule.resource === '') { alert('资源名称不能为空'); return false; } if (rule.grade != 1) { alert('未知的限流模式'); return false; } if (rule.count < 0) { alert('限流阈值必须大于等于 0'); return false; } if (rule.paramIdx === undefined || rule.paramIdx === '' || isNaN(rule.paramIdx) || rule.paramIdx < 0) { alert('热点参数索引必须大于等于 0'); return false; } if (rule.paramFlowItemList !== undefined) { for (var i = 0; i < rule.paramFlowItemList.length; i++) { var item = rule.paramFlowItemList[i]; if (notValidParamItem(item)) { alert('热点参数例外项不合法,请检查值和类型是否正确:参数为 ' + item.object + ', 类型为 ' + item.classType + ', 限流阈值为 ' + item.count); return false; } } } return true; }; }]);