How to use machineId method in Cypress

Best JavaScript code snippet using cypress

cluster_app_server_list.js

Source:cluster_app_server_list.js Github

copy

Full Screen

1var app = angular.module('sentinelDashboardApp');2app.controller('SentinelClusterAppServerListController', ['$scope', '$stateParams', 'ngDialog',3 'MachineService', 'ClusterStateService',4 function ($scope, $stateParams, ngDialog, MachineService, ClusterStateService) {5 $scope.app = $stateParams.app;6 const UNSUPPORTED_CODE = 4041;7 const CLUSTER_MODE_CLIENT = 0;8 const CLUSTER_MODE_SERVER = 1;9 const DEFAULT_CLUSTER_SERVER_PORT = 18730;10 const DEFAULT_NAMESPACE = 'default';11 const DEFAULT_MAX_ALLOWED_QPS = 20000;12 // tmp for dialog temporary data.13 $scope.tmp = {14 curClientChosen: [],15 curRemainingClientChosen: [],16 curChosenServer: {},17 };18 $scope.remainingMachineList = [];19 function convertSetToString(set) {20 if (set === undefined) {21 return '';22 }23 if (set.length === 1 && set[0] === DEFAULT_NAMESPACE) {24 return DEFAULT_NAMESPACE;25 }26 let s = '';27 for (let i = 0; i < set.length; i++) {28 let ns = set[i];29 if (ns !== DEFAULT_NAMESPACE) {30 s = s + ns;31 if (i < set.length - 1) {32 s = s + ',';33 }34 }35 }36 return s;37 }38 function convertStrToNamespaceSet(str) {39 if (str === undefined || str === '') {40 return [];41 }42 let arr = [];43 let spliced = str.split(',');44 spliced.forEach((v) => {45 arr.push(v.trim());46 });47 return arr;48 }49 function processAppSingleData(data) {50 if (data.state.server && data.state.server.namespaceSet) {51 data.state.server.namespaceSetStr = convertSetToString(data.state.server.namespaceSet);52 data.mode = data.state.stateInfo.mode;53 }54 }55 function removeFromArr(arr, v) {56 for (let i = 0; i < arr.length; i++) {57 if (arr[i] === v) {58 arr.splice(i, 1);59 break;60 }61 }62 }63 function removeFromArrIf(arr, f) {64 for (let i = 0; i < arr.length; i++) {65 if (f(arr[i]) === true) {66 arr.splice(i, 1);67 break;68 }69 }70 }71 function resetAssignDialogChosen() {72 $scope.tmp.curClientChosen = [];73 $scope.tmp.curRemainingClientChosen = [];74 }75 function generateMachineId(e) {76 return e.ip + '@' + e.commandPort;77 }78 function applyClusterMap(appClusterMachineList) {79 if (!appClusterMachineList) {80 return;81 }82 let tmpMap = new Map();83 let serverCommandPortMap = new Map();84 $scope.clusterMap = [];85 $scope.remainingMachineList = [];86 let tmpServerList = [];87 let tmpClientList = [];88 appClusterMachineList.forEach((e) => {89 if (e.mode === CLUSTER_MODE_CLIENT) {90 tmpClientList.push(e);91 } else if (e.mode === CLUSTER_MODE_SERVER) {92 tmpServerList.push(e);93 } else {94 $scope.remainingMachineList.push(generateMachineId(e));95 }96 });97 tmpServerList.forEach((e) => {98 let ip = e.ip;99 let machineId = ip + '@' + e.commandPort;100 let group = {101 ip: ip,102 machineId: machineId,103 port: e.state.server.port,104 clientSet: [],105 namespaceSetStr: e.state.server.namespaceSetStr,106 maxAllowedQps: e.state.server.flow.maxAllowedQps,107 belongToApp: true,108 };109 if (!tmpMap.has(machineId)) {110 tmpMap.set(machineId, group);111 }112 serverCommandPortMap.set(ip + ':' + e.state.server.port, e.commandPort);113 });114 tmpClientList.forEach((e) => {115 let ip = e.ip;116 let machineId = ip + '@' + e.commandPort;117 let targetServer = e.state.client.clientConfig.serverHost;118 let targetPort = e.state.client.clientConfig.serverPort;119 if (targetServer === undefined || targetServer === '' ||120 targetPort === undefined || targetPort <= 0) {121 $scope.remainingMachineList.push(generateMachineId(e));122 return;123 }124 let serverHostPort = targetServer + ':' + targetPort;125 if (serverCommandPortMap.has(serverHostPort)) {126 let serverCommandPort = serverCommandPortMap.get(serverHostPort);127 let g;128 if (serverCommandPort < 0) {129 // Not belong to this app.130 g = tmpMap.get(serverHostPort);131 } else {132 // Belong to this app.133 g = tmpMap.get(targetServer + '@' + serverCommandPort);134 }135 g.clientSet.push(machineId);136 } else {137 let group = {138 ip: targetServer,139 machineId: serverHostPort,140 port: targetPort,141 clientSet: [machineId],142 belongToApp: false,143 };144 tmpMap.set(serverHostPort, group);145 // Indicates that it's not belonging to current app.146 serverCommandPortMap.set(serverHostPort, -1);147 }148 // if (!tmpMap.has(serverHostPort)) {149 // let group = {150 // ip: targetServer,151 // machineId: targetServer,152 // port: targetPort,153 // clientSet: [machineId],154 // belongToApp: false,155 // };156 // tmpMap.set(targetServer, group);157 // } else {158 // let g = tmpMap.get(targetServer);159 // g.clientSet.push(machineId);160 // }161 });162 tmpMap.forEach((v) => {163 if (v !== undefined) {164 $scope.clusterMap.push(v);165 }166 });167 }168 $scope.notChosenServer = (id) => {169 return id !== $scope.serverAssignDialogData.serverData.currentServer;170 };171 $scope.onCurrentServerChange = () => {172 resetAssignDialogChosen();173 };174 $scope.moveToServerGroup = () => {175 $scope.tmp.curRemainingClientChosen.forEach(e => {176 $scope.serverAssignDialogData.serverData.clientSet.push(e);177 removeFromArr($scope.remainingMachineList, e);178 });179 resetAssignDialogChosen();180 };181 $scope.moveToRemainingSharePool = () => {182 $scope.tmp.curClientChosen.forEach(e => {183 $scope.remainingMachineList.push(e);184 removeFromArr($scope.serverAssignDialogData.serverData.clientSet, e);185 });186 resetAssignDialogChosen();187 };188 function parseIpFromMachineId(machineId) {189 if (machineId.indexOf(':') !== -1) {190 return machineId.split(':')[0];191 }192 if (machineId.indexOf('@') === -1) {193 return machineId;194 }195 let arr = machineId.split('@');196 return arr[0];197 }198 function retrieveClusterAssignInfoOfApp() {199 ClusterStateService.fetchClusterUniversalStateOfApp($scope.app).success(function (data) {200 if (data.code === 0 && data.data) {201 $scope.loadError = undefined;202 $scope.appClusterMachineList = data.data;203 $scope.appClusterMachineList.forEach(processAppSingleData);204 applyClusterMap($scope.appClusterMachineList);205 } else {206 $scope.appClusterMachineList = {};207 if (data.code === UNSUPPORTED_CODE) {208 $scope.loadError = {message: '该应用的 Sentinel 客户端不支持集群限流,请升级至 1.4.0 以上版本并引入相关依赖。'}209 } else {210 $scope.loadError = {message: data.msg};211 }212 }213 }).error(() => {214 $scope.loadError = {message: '未知错误'};215 });216 }217 $scope.newServerDialog = () => {218 retrieveClusterAssignInfoOfApp();219 $scope.serverAssignDialogData = {220 title: '新增 Token Server',221 type: 'add',222 confirmBtnText: '保存',223 serverData: {224 serverType: 0,225 clientSet: [],226 serverPort: DEFAULT_CLUSTER_SERVER_PORT,227 maxAllowedQps: DEFAULT_MAX_ALLOWED_QPS,228 }229 };230 $scope.serverAssignDialog = ngDialog.open({231 template: '/app/views/dialog/cluster/cluster-server-assign-dialog.html',232 width: 1000,233 overlay: true,234 scope: $scope235 });236 };237 $scope.modifyServerAssignConfig = (serverVO) => {238 let id = serverVO.id;239 ClusterStateService.fetchClusterUniversalStateOfApp($scope.app).success(function (data) {240 if (data.code === 0 && data.data) {241 $scope.loadError = undefined;242 $scope.appClusterMachineList = data.data;243 $scope.appClusterMachineList.forEach(processAppSingleData);244 applyClusterMap($scope.appClusterMachineList);245 let clusterMap = $scope.clusterMap;246 let d;247 for (let i = 0; i < clusterMap.length; i++) {248 if (clusterMap[i].machineId === id) {249 d = clusterMap[i];250 }251 }252 if (!d) {253 alert('状态错误');254 return;255 }256 $scope.serverAssignDialogData = {257 title: 'Token Server 分配编辑',258 type: 'edit',259 confirmBtnText: '保存',260 serverData: {261 currentServer: d.machineId,262 belongToApp: serverVO.belongToApp,263 serverPort: d.port,264 clientSet: d.clientSet,265 }266 };267 if (d.maxAllowedQps !== undefined) {268 $scope.serverAssignDialogData.serverData.maxAllowedQps = d.maxAllowedQps;269 }270 $scope.serverAssignDialog = ngDialog.open({271 template: '/app/views/dialog/cluster/cluster-server-assign-dialog.html',272 width: 1000,273 overlay: true,274 scope: $scope275 });276 } else {277 if (data.code === UNSUPPORTED_CODE) {278 $scope.loadError = {message: '该应用的 Sentinel 客户端不支持集群限流,请升级至 1.4.0 以上版本并引入相关依赖。'}279 } else {280 $scope.loadError = {message: data.msg};281 }282 }283 }).error(() => {284 $scope.loadError = {message: '未知错误'};285 });286 };287 function getRemainingMachineList() {288 return $scope.remainingMachineList.filter((e) => $scope.notChosenServer(e));289 }290 function doApplyNewSingleServerAssign() {291 let ok = confirm('是否确认执行变更?');292 if (!ok) {293 return;294 }295 let serverData = $scope.serverAssignDialogData.serverData;296 let belongToApp = serverData.serverType == 0; // don't modify here!297 let machineId = serverData.currentServer;298 let request = {299 clusterMap: {300 machineId: machineId,301 ip: parseIpFromMachineId(machineId),302 port: serverData.serverPort,303 clientSet: serverData.clientSet,304 belongToApp: belongToApp,305 maxAllowedQps: serverData.maxAllowedQps,306 },307 remainingList: getRemainingMachineList(),308 };309 ClusterStateService.applyClusterSingleServerAssignOfApp($scope.app, request).success((data) => {310 if (data.code === 0 && data.data) {311 let failedServerSet = data.data.failedServerSet;312 let failedClientSet = data.data.failedClientSet;313 if (failedClientSet.length === 0 && failedServerSet.length === 0) {314 alert('全部推送成功');315 } else {316 let failedSet = [];317 if (failedServerSet) {318 failedServerSet.forEach((e) => {319 failedSet.push(e);320 });321 }322 if (failedClientSet) {323 failedClientSet.forEach((e) => {324 failedSet.push(e);325 });326 }327 alert('推送完毕。失败机器列表:' + JSON.stringify(failedSet));328 }329 location.reload();330 } else {331 if (data.code === UNSUPPORTED_CODE) {332 alert('该应用的 Sentinel 客户端不支持集群限流,请升级至 1.4.0 以上版本并引入相关依赖。');333 } else {334 alert('推送失败:' + data.msg);335 }336 }337 }).error(() => {338 alert('未知错误');339 });340 }341 function doApplySingleServerAssignEdit() {342 let ok = confirm('是否确认执行变更?');343 if (!ok) {344 return;345 }346 let serverData = $scope.serverAssignDialogData.serverData;347 let machineId = serverData.currentServer;348 let request = {349 clusterMap: {350 machineId: machineId,351 ip: parseIpFromMachineId(machineId),352 port: serverData.serverPort,353 clientSet: serverData.clientSet,354 belongToApp: serverData.belongToApp,355 },356 remainingList: $scope.remainingMachineList,357 };358 if (serverData.maxAllowedQps !== undefined) {359 request.clusterMap.maxAllowedQps = serverData.maxAllowedQps;360 }361 ClusterStateService.applyClusterSingleServerAssignOfApp($scope.app, request).success((data) => {362 if (data.code === 0 && data.data) {363 let failedServerSet = data.data.failedServerSet;364 let failedClientSet = data.data.failedClientSet;365 if (failedClientSet.length === 0 && failedServerSet.length === 0) {366 alert('全部推送成功');367 } else {368 let failedSet = [];369 failedServerSet.forEach(failedSet.push);370 failedClientSet.forEach(failedSet.push);371 alert('推送完毕。失败机器列表:' + JSON.stringify(failedSet));372 }373 location.reload();374 } else {375 if (data.code === UNSUPPORTED_CODE) {376 alert('该应用的 Sentinel 客户端不支持集群限流,请升级至 1.4.0 以上版本并引入相关依赖。');377 } else {378 alert('推送失败:' + data.msg);379 }380 }381 }).error(() => {382 alert('未知错误');383 });384 }385 $scope.saveAssignForDialog = () => {386 if (!checkAssignDialogValid()) {387 return;388 }389 if ($scope.serverAssignDialogData.type === 'add') {390 doApplyNewSingleServerAssign();391 } else if ($scope.serverAssignDialogData.type === 'edit') {392 doApplySingleServerAssignEdit();393 } else {394 alert('未知的操作');395 }396 };397 function checkAssignDialogValid() {398 let serverData = $scope.serverAssignDialogData.serverData;399 if (serverData.currentServer === undefined || serverData.currentServer === '') {400 alert('请指定有效的 Token Server');401 return false;402 }403 if (serverData.serverPort === undefined || serverData.serverPort <= 0 || serverData.serverPort > 65535) {404 alert('请输入合法的端口值');405 return false;406 }407 if (serverData.maxAllowedQps !== undefined && serverData.maxAllowedQps < 0) {408 alert('请输入合法的最大允许 QPS');409 return false;410 }411 return true;412 }413 $scope.viewConnectionDetail = (serverVO) => {414 $scope.connectionDetailDialogData = {415 serverData: serverVO416 };417 $scope.connectionDetailDialog = ngDialog.open({418 template: '/app/views/dialog/cluster/cluster-server-connection-detail-dialog.html',419 width: 700,420 overlay: true,421 scope: $scope422 });423 };424 function generateRequestLimitDataStr(limitData) {425 if (limitData.length === 1 && limitData[0].namespace === DEFAULT_NAMESPACE) {426 return 'default: ' + limitData[0].currentQps + ' / ' + limitData[0].maxAllowedQps;427 }428 for (let i = 0; i < limitData.length; i++) {429 let crl = limitData[i];430 if (crl.namespace === $scope.app) {431 return '' + crl.currentQps + ' / ' + crl.maxAllowedQps;432 }433 }434 return '0';435 }436 function processServerListData(serverVO) {437 if (serverVO.state && serverVO.state.namespaceSet) {438 serverVO.state.namespaceSetStr = convertSetToString(serverVO.state.namespaceSet);439 }440 if (serverVO.state && serverVO.state.requestLimitData) {441 serverVO.state.requestLimitDataStr = generateRequestLimitDataStr(serverVO.state.requestLimitData);442 }443 }444 $scope.generateConnectionSet = (data) => {445 let connectionSet = data;446 let s = '';447 if (connectionSet) {448 s = s + '[';449 for (let i = 0; i < connectionSet.length; i++) {450 s = s + connectionSet[i].address;451 if (i < connectionSet.length - 1) {452 s = s + ', ';453 }454 }455 s = s + ']';456 } else {457 s = '[]';458 }459 return s;460 };461 function retrieveClusterServerInfo() {462 ClusterStateService.fetchClusterServerStateOfApp($scope.app).success(function (data) {463 if (data.code === 0 && data.data) {464 $scope.loadError = undefined;465 $scope.serverVOList = data.data;466 $scope.serverVOList.forEach(processServerListData);467 } else {468 $scope.serverVOList = {};469 if (data.code === UNSUPPORTED_CODE) {470 $scope.loadError = {message: '该应用的 Sentinel 客户端不支持集群限流,请升级至 1.4.0 以上版本并引入相关依赖。'}471 } else {472 $scope.loadError = {message: data.msg};473 }474 }475 }).error(() => {476 $scope.loadError = {message: '未知错误'};477 });478 }479 retrieveClusterServerInfo();480 let confirmUnbindServerDialog;481 $scope.unbindServer = (id) => {482 $scope.pendingUnbindIds = [id];483 $scope.confirmDialog = {484 title: '移除 Token Server',485 type: 'unbind_token_server',486 attentionTitle: '请确认是否移除以下 Token Server(该 server 下的 client 也会解除分配)',487 attention: id + '',488 confirmBtnText: '移除',489 };490 confirmUnbindServerDialog = ngDialog.open({491 template: '/app/views/dialog/confirm-dialog.html',492 scope: $scope,493 overlay: true494 });495 };496 function apiUnbindServerAssign(ids) {497 ClusterStateService.applyClusterServerBatchUnbind($scope.app, ids).success((data) => {498 if (data.code === 0 && data.data) {499 let failedServerSet = data.data.failedServerSet;500 let failedClientSet = data.data.failedClientSet;501 if (failedClientSet.length === 0 && failedServerSet.length === 0) {502 alert('成功');503 } else {504 alert('操作推送完毕,部分失败机器列表:' + JSON.stringify(failedClientSet));505 }506 location.reload();507 } else {508 if (data.code === UNSUPPORTED_CODE) {509 alert('该应用的 Sentinel 客户端不支持集群限流,请升级至 1.4.0 以上版本并引入相关依赖。');510 } else {511 alert('推送失败:' + data.msg);512 }513 }514 }).error(() => {515 alert('未知错误');516 });517 // confirmUnbindServerDialog.close();518 }519 // Confirm function for confirm dialog.520 $scope.confirm = () => {521 if ($scope.confirmDialog.type === 'unbind_token_server') {522 apiUnbindServerAssign($scope.pendingUnbindIds);523 } else {524 console.error('Error dialog when unbinding token server');525 }526 };...

Full Screen

Full Screen

machines.js

Source:machines.js Github

copy

Full Screen

1/**2 * This module contains Redux bits for loading tenancy external ips.3 */4import { merge, map } from 'rxjs/operators';5import { combineEpics, ofType } from 'redux-observable';6import { createTenancyResource, nextStateEntry } from './resource';7import { actions as externalIpActions } from './external-ips';8const {9 actions: resourceActions,10 actionCreators: resourceActionCreators,11 reducer: resourceReducer,12 epic: resourceEpic13} = createTenancyResource('machine', {14 isActive: machine => (['BUILD', 'DELETED'].includes(machine.status.type) || !!machine.task),15 // Just convert the string date to a Date object16 transform: machine =>17 machine.hasOwnProperty('created') ?18 { ...machine, created: new Date(machine.created) } :19 machine20});21export const actions = {22 ...resourceActions,23 FETCH_LOGS: 'TENANCIES/MACHINE/FETCH_LOGS',24 FETCH_LOGS_SUCCEEDED: 'TENANCIES/MACHINE/FETCH_LOGS_SUCCEEDED',25 FETCH_LOGS_FAILED: 'TENANCIES/MACHINE/FETCH_LOGS_FAILED',26 FETCH_FIREWALL_RULES: 'TENANCIES/MACHINE/FETCH_FIREWALL_RULES',27 FETCH_FIREWALL_RULES_SUCCEEDED: 'TENANCIES/MACHINE/FETCH_FIREWALL_RULES_SUCCEEDED',28 FETCH_FIREWALL_RULES_FAILED: 'TENANCIES/MACHINE/FETCH_FIREWALL_RULES_FAILED',29 ADD_FIREWALL_RULE: 'TENANCIES/MACHINE/ADD_FIREWALL_RULE',30 ADD_FIREWALL_RULE_SUCCEEDED: 'TENANCIES/MACHINE/ADD_FIREWALL_RULE_SUCCEEDED',31 ADD_FIREWALL_RULE_FAILED: 'TENANCIES/MACHINE/ADD_FIREWALL_RULE_FAILED',32 REMOVE_FIREWALL_RULE: 'TENANCIES/MACHINE/REMOVE_FIREWALL_RULE',33 REMOVE_FIREWALL_RULE_SUCCEEDED: 'TENANCIES/MACHINE/REMOVE_FIREWALL_RULE_SUCCEEDED',34 REMOVE_FIREWALL_RULE_FAILED: 'TENANCIES/MACHINE/REMOVE_FIREWALL_RULE_FAILED',35 START: 'TENANCIES/MACHINE/START',36 START_SUCCEEDED: 'TENANCIES/MACHINE/START_SUCCEEDED',37 START_FAILED: 'TENANCIES/MACHINE/START_FAILED',38 STOP: 'TENANCIES/MACHINE/STOP',39 STOP_SUCCEEDED: 'TENANCIES/MACHINE/STOP_SUCCEEDED',40 STOP_FAILED: 'TENANCIES/MACHINE/STOP_FAILED',41 RESTART: 'TENANCIES/MACHINE/RESTART',42 RESTART_SUCCEEDED: 'TENANCIES/MACHINE/RESTART_SUCCEEDED',43 RESTART_FAILED: 'TENANCIES/MACHINE/RESTART_FAILED',44};45export const actionCreators = {46 ...resourceActionCreators,47 fetchLogs: (tenancyId, machineId) => ({48 type: actions.FETCH_LOGS,49 tenancyId,50 machineId,51 apiRequest: true,52 // All errors are reported via the modal UI53 failSilently: true,54 successAction: actions.FETCH_LOGS_SUCCEEDED,55 failureAction: actions.FETCH_LOGS_FAILED,56 options: {57 url: `/api/tenancies/${tenancyId}/machines/${machineId}/logs/`,58 method: 'GET'59 }60 }),61 fetchFirewallRules: (tenancyId, machineId) => ({62 type: actions.FETCH_FIREWALL_RULES,63 tenancyId,64 machineId,65 apiRequest: true,66 // All errors are reported via the modal UI67 failSilently: true,68 successAction: actions.FETCH_FIREWALL_RULES_SUCCEEDED,69 failureAction: actions.FETCH_FIREWALL_RULES_FAILED,70 options: {71 url: `/api/tenancies/${tenancyId}/machines/${machineId}/firewall_rules/`,72 method: 'GET'73 }74 }),75 addFirewallRule: (tenancyId, machineId, data) => ({76 type: actions.ADD_FIREWALL_RULE,77 tenancyId,78 machineId,79 apiRequest: true,80 successAction: actions.ADD_FIREWALL_RULE_SUCCEEDED,81 failureAction: actions.ADD_FIREWALL_RULE_FAILED,82 options: {83 url: `/api/tenancies/${tenancyId}/machines/${machineId}/firewall_rules/`,84 method: 'POST',85 body: data || {}86 }87 }),88 removeFirewallRule: (tenancyId, machineId, ruleId) => ({89 type: actions.REMOVE_FIREWALL_RULE,90 tenancyId,91 machineId,92 ruleId,93 apiRequest: true,94 successAction: actions.REMOVE_FIREWALL_RULE_SUCCEEDED,95 failureAction: actions.REMOVE_FIREWALL_RULE_FAILED,96 options: {97 url: `/api/tenancies/${tenancyId}/machines/${machineId}/firewall_rules/${ruleId}/`,98 method: 'DELETE'99 }100 }),101 start: (tenancyId, machineId) => ({102 type: actions.START,103 tenancyId,104 machineId,105 apiRequest: true,106 successAction: actions.START_SUCCEEDED,107 failureAction: actions.START_FAILED,108 options: {109 url: `/api/tenancies/${tenancyId}/machines/${machineId}/start/`,110 method: 'POST'111 }112 }),113 stop: (tenancyId, machineId) => ({114 type: actions.STOP,115 tenancyId,116 machineId,117 apiRequest: true,118 successAction: actions.STOP_SUCCEEDED,119 failureAction: actions.STOP_FAILED,120 options: {121 url: `/api/tenancies/${tenancyId}/machines/${machineId}/stop/`,122 method: 'POST'123 }124 }),125 restart: (tenancyId, machineId) => ({126 type: actions.RESTART,127 tenancyId,128 machineId,129 apiRequest: true,130 successAction: actions.RESTART_SUCCEEDED,131 failureAction: actions.RESTART_FAILED,132 options: {133 url: `/api/tenancies/${tenancyId}/machines/${machineId}/restart/`,134 method: 'POST'135 }136 })137};138export function reducer(state, action) {139 switch(action.type) {140 case actions.FETCH_LOGS:141 // Only register the fetch if we know about the machine142 if( state.data.hasOwnProperty(action.machineId) )143 return {144 ...state,145 data: Object.assign(146 {},147 state.data,148 nextStateEntry(149 state,150 action.machineId,151 { fetchingLogs: true }152 )153 ),154 };155 else156 return state;157 case actions.FETCH_LOGS_SUCCEEDED:158 // Only store the logs if we already know about the machine159 if( state.data.hasOwnProperty(action.request.machineId) )160 return {161 ...state,162 data: Object.assign(163 {},164 state.data,165 nextStateEntry(166 state,167 action.request.machineId,168 {169 logs: action.payload.logs,170 fetchingLogs: false,171 fetchLogsError: undefined172 }173 )174 ),175 };176 else177 return state;178 case actions.FETCH_LOGS_FAILED:179 // Only store the error if we already know about the machine180 if( state.data.hasOwnProperty(action.request.machineId) )181 return {182 ...state,183 data: Object.assign(184 {},185 state.data,186 nextStateEntry(187 state,188 action.request.machineId,189 { fetchLogsError: action.payload, fetchingLogs: false }190 )191 ),192 };193 else194 return state;195 case actions.FETCH_FIREWALL_RULES:196 // Only register the fetch if we know about the machine197 if( state.data.hasOwnProperty(action.machineId) )198 return {199 ...state,200 data: Object.assign(201 {},202 state.data,203 nextStateEntry(204 state,205 action.machineId,206 { fetchingFirewallRules: true }207 )208 ),209 };210 else211 return state;212 case actions.FETCH_FIREWALL_RULES_SUCCEEDED:213 // Only store the logs if we already know about the machine214 if( state.data.hasOwnProperty(action.request.machineId) )215 return {216 ...state,217 data: Object.assign(218 {},219 state.data,220 nextStateEntry(221 state,222 action.request.machineId,223 {224 firewallRules: action.payload,225 fetchingFirewallRules: false,226 fetchFirewallRulesError: undefined227 }228 )229 ),230 };231 else232 return state;233 case actions.FETCH_FIREWALL_RULES_FAILED:234 // Only store the error if we already know about the machine235 if( state.data.hasOwnProperty(action.request.machineId) )236 return {237 ...state,238 data: Object.assign(239 {},240 state.data,241 nextStateEntry(242 state,243 action.request.machineId,244 {245 fetchFirewallRulesError: action.payload,246 fetchingFirewallRules: false247 }248 )249 ),250 };251 else252 return state;253 case actions.ADD_FIREWALL_RULE:254 // Only register the fetch if we know about the machine255 if( state.data.hasOwnProperty(action.machineId) )256 return {257 ...state,258 data: Object.assign(259 {},260 state.data,261 nextStateEntry(262 state,263 action.machineId,264 { addingFirewallRule: true }265 )266 ),267 };268 else269 return state;270 case actions.ADD_FIREWALL_RULE_SUCCEEDED:271 // Only store the logs if we already know about the machine272 if( state.data.hasOwnProperty(action.request.machineId) )273 return {274 ...state,275 data: Object.assign(276 {},277 state.data,278 nextStateEntry(279 state,280 action.request.machineId,281 {282 firewallRules: action.payload,283 addingFirewallRule: false284 }285 )286 ),287 };288 else289 return state;290 case actions.ADD_FIREWALL_RULE_FAILED:291 // Only store the error if we already know about the machine292 if( state.data.hasOwnProperty(action.request.machineId) )293 return {294 ...state,295 data: Object.assign(296 {},297 state.data,298 nextStateEntry(299 state,300 action.request.machineId,301 { addingFirewallRule: false }302 )303 ),304 };305 else306 return state;307 case actions.REMOVE_FIREWALL_RULE:308 // Only register the fetch if we know about the machine309 if( state.data.hasOwnProperty(action.machineId) )310 return {311 ...state,312 data: Object.assign(313 {},314 state.data,315 nextStateEntry(316 state,317 action.machineId,318 { removingFirewallRule: action.ruleId }319 )320 ),321 };322 else323 return state;324 case actions.REMOVE_FIREWALL_RULE_SUCCEEDED:325 // Only store the logs if we already know about the machine326 if( state.data.hasOwnProperty(action.request.machineId) )327 return {328 ...state,329 data: Object.assign(330 {},331 state.data,332 nextStateEntry(333 state,334 action.request.machineId,335 {336 firewallRules: action.payload,337 removingFirewallRule: undefined338 }339 )340 ),341 };342 else343 return state;344 case actions.REMOVE_FIREWALL_RULE_FAILED:345 // Only store the error if we already know about the machine346 if( state.data.hasOwnProperty(action.request.machineId) )347 return {348 ...state,349 data: Object.assign(350 {},351 state.data,352 nextStateEntry(353 state,354 action.request.machineId,355 { removingFirewallRule: undefined }356 )357 ),358 };359 else360 return state;361 case actions.START:362 case actions.STOP:363 case actions.RESTART:364 // Only set the updating flag to true if we know about the machine365 if( state.data.hasOwnProperty(action.machineId) )366 return {367 ...state,368 data: Object.assign(369 {},370 state.data,371 nextStateEntry(372 state,373 action.machineId,374 { updating: true }375 )376 ),377 };378 else379 return state;380 case actions.START_SUCCEEDED:381 case actions.STOP_SUCCEEDED:382 case actions.RESTART_SUCCEEDED:383 // The updated machine is in the payload, so merge it384 return {385 ...state,386 data: Object.assign(387 {},388 state.data,389 nextStateEntry(390 state,391 action.payload.id,392 { ...action.payload, updating: false }393 )394 ),395 };396 case actions.START_FAILED:397 case actions.STOP_FAILED:398 case actions.RESTART_FAILED:399 // Only set the updating flag to false if we know about the machine400 if( state.data.hasOwnProperty(action.request.machineId) )401 return {402 ...state,403 data: Object.assign(404 {},405 state.data,406 nextStateEntry(407 state,408 action.request.machineId,409 { updating: false }410 )411 ),412 };413 else414 return state;415 // When an external IP is being updated to set the machine ID, mark416 // that machine as updating417 case externalIpActions.UPDATE:418 if( state.data.hasOwnProperty(action.options.body.machine_id) )419 return {420 ...state,421 data: Object.assign(422 {},423 state.data,424 nextStateEntry(425 state,426 action.options.body.machine_id,427 { updating: true }428 )429 ),430 };431 else432 return state;433 case externalIpActions.UPDATE_SUCCEEDED:434 case externalIpActions.UPDATE_FAILED:435 if( state.data.hasOwnProperty(action.request.options.body.machine_id) )436 return {437 ...state,438 data: Object.assign(439 {},440 state.data,441 nextStateEntry(442 state,443 action.request.options.body.machine_id,444 { updating: false }445 )446 ),447 };448 else449 return state;450 default:451 // Any other actions, apply the resource reducer452 return resourceReducer(state, action);453 }454}455export const epic = combineEpics(456 resourceEpic,457 // When a power action takes place on a machine, refresh the machine458 action$ => action$.pipe(459 ofType(actions.START_SUCCEEDED),460 merge(action$.pipe(ofType(actions.STOP_SUCCEEDED))),461 merge(action$.pipe(ofType(actions.RESTART_SUCCEEDED))),462 map(action =>463 actionCreators.fetchOne(action.request.tenancyId, action.payload.id)464 )465 )...

Full Screen

Full Screen

datamediator.js

Source:datamediator.js Github

copy

Full Screen

1/**2 * @fileOverview Deferred data loader / cacher singleton. Provides vboxDataMediator3 * @author Ian Moore (imoore76 at yahoo dot com)4 * @version $Id: datamediator.js 591 2015-04-11 22:40:47Z imoore76 $5 * @copyright Copyright (C) 2010-2015 Ian Moore (imoore76 at yahoo dot com)6 */78/**9 * vboxVMDataMediator10 * 11 * @see jQuery.deferred12 * @namespace vboxVMDataMediator13 */14var vboxVMDataMediator = {15 16 /* Promises for data */17 promises : {18 'getVMDetails':{},19 'getVMRuntimeData':{}20 },21 22 /* Holds Basic VM data */23 vmData : null,24 25 /* Holds VM details */26 vmDetailsData : {},27 28 /* Holds VM runtime data */29 vmRuntimeData : {},30 31 /* Expire cached promise / data */32 expireVMDetails: function(vmid) {33 vboxVMDataMediator.promises.getVMDetails[vmid] = null;34 vboxVMDataMediator.vmDetailsData[vmid] = null;35 },36 expireVMRuntimeData: function(vmid) {37 vboxVMDataMediator.promises.getVMRuntimeData[vmid] = null;38 vboxVMDataMediator.vmRuntimeData[vmid] = null;39 },40 expireAll: function() {41 for(var i in vboxVMDataMediator.promises) {42 if(typeof(i) != 'string') continue;43 vboxVMDataMediator.promises[i] = {};44 }45 vboxVMDataMediator.vmData = null;46 vboxVMDataMediator.vmRuntimeData = {};47 vboxVMDataMediator.vmDetailsData = {};48 },49 50 /**51 * Get basic vm data52 * 53 * @param vmid {String} ID of VM54 * @returns {Object} vm data55 */56 getVMData: function(vmid) {57 58 // VMList must exist59 if(!vboxVMDataMediator.vmData) {60 return;61 }62 63 return vboxVMDataMediator.vmData[vmid];64 65 },66 67 /**68 * Return list of machines, subscribe to running VM events69 * and start the event listener70 * 71 * @returns {Object} promise72 */73 getVMList: function() {74 75 // Return array from existing data76 if(vboxVMDataMediator.vmData) {77 var list = [];78 for(var i in vboxVMDataMediator.vmData) {79 if(typeof i != 'string') continue;80 if(i == 'host') continue;81 list.push(vboxVMDataMediator.vmData[i]);82 }83 return list;84 }85 86 87 var mList = $.Deferred();88 $.when(vboxAjaxRequest('vboxGetMachines')).done(function(d) {89 90 var vmData = {};91 var subscribeList = [];9293 for(var i = 0; i < d.responseData.length; i++) {94 95 // Enforce VM ownership96 if($('#vboxPane').data('vboxConfig').enforceVMOwnership && !$('#vboxPane').data('vboxSession').admin && d.vmlist[i].owner != $('#vboxPane').data('vboxSession').user) {97 continue;98 }99100 vmData[d.responseData[i].id] = d.responseData[i];101 102 if(vboxVMStates.isRunning({'state':d.responseData[i].state}) || vboxVMStates.isPaused({'state':d.responseData[i].state}))103 subscribeList[subscribeList.length] = d.responseData[i].id;104 105 }106 107 // Start event listener108 $.when(vboxEventListener.start(subscribeList)).done(function(){109 vboxVMDataMediator.vmData = vmData;110 mList.resolve(d.responseData); 111 112 }).fail(function() {113 mList.reject();114 });115 116 117 }).fail(function() {118 mList.reject();119 });120 121 return mList.promise();122 },123 124 /**125 * Get VM details data126 * 127 * @param vmid {String} ID of VM to get data for128 * @param forceRefresh {Boolean} force refresh of VM data129 * @returns {Object} vm data or promise130 */131 getVMDetails: function(vmid, forceRefresh) {132 133 // Data exists134 if(vboxVMDataMediator.vmDetailsData[vmid] && !forceRefresh) {135 vboxVMDataMediator.promises.getVMDetails[vmid] = null;136 return vboxVMDataMediator.vmDetailsData[vmid];137 }138 139 // Promise does not yet exist?140 if(!vboxVMDataMediator.promises.getVMDetails[vmid]) {141 142 vboxVMDataMediator.promises.getVMDetails[vmid] = $.Deferred();143144 $.when(vboxAjaxRequest('machineGetDetails',{vm:vmid})).done(function(d){145 vboxVMDataMediator.vmDetailsData[d.responseData.id] = d.responseData;146 vboxVMDataMediator.promises.getVMDetails[vmid].resolve(d.responseData);147 }).fail(function(){148 vboxVMDataMediator.promises.getVMDetails[vmid].reject();149 vboxVMDataMediator.promises.getVMDetails[vmid] = null;150 });151152 } 153 return vboxVMDataMediator.promises.getVMDetails[vmid];154 },155 156 /**157 * Get VM's runtime data158 * 159 * @param vmid {String} ID of VM to get data for160 * @returns {Object} VM runtime data or promise161 */162 getVMRuntimeData: function(vmid) {163164 // Data exists165 if(vboxVMDataMediator.vmRuntimeData[vmid]) {166 vboxVMDataMediator.promises.getVMRuntimeData[vmid] = null;167 return vboxVMDataMediator.vmRuntimeData[vmid];168 }169 170 // Promise does not yet exist?171 if(!vboxVMDataMediator.promises.getVMRuntimeData[vmid]) {172 173 vboxVMDataMediator.promises.getVMRuntimeData[vmid] = $.Deferred();174175 $.when(vboxAjaxRequest('machineGetRuntimeData',{vm:vmid})).done(function(d){176 vboxVMDataMediator.vmRuntimeData[d.responseData.id] = d.responseData;177 if(vboxVMDataMediator.promises.getVMRuntimeData[vmid])178 vboxVMDataMediator.promises.getVMRuntimeData[vmid].resolve(d.responseData);179 }).fail(function(){180 vboxVMDataMediator.promises.getVMRuntimeData[vmid].reject();181 vboxVMDataMediator.promises.getVMRuntimeData[vmid] = null;182 });183184 } 185 return vboxVMDataMediator.promises.getVMRuntimeData[vmid];186 },187 188 /**189 * Return all data for a VM190 * @param vmid {String} ID of VM to get data for191 * @returns promise192 */193 getVMDataCombined : function(vmid) {194 195 // Special case for 'host'196 if(vmid == 'host') {197 var def = $.Deferred();198 $.when(vboxVMDataMediator.getVMDetails(vmid)).done(function(d){199 def.resolve(d);200 }).fail(function(){201 def.reject();202 });203 return def.promise();204 }205 206 if(!vboxVMDataMediator.vmData[vmid]) return;207 208 var runtime = function() { return {};};209 if(vboxVMStates.isRunning({'state':vboxVMDataMediator.vmData[vmid].state}) || vboxVMStates.isPaused({'state':vboxVMDataMediator.vmData[vmid].state})) {210 runtime = vboxVMDataMediator.getVMRuntimeData(vmid);211 }212 213 var def = $.Deferred();214 $.when(vboxVMDataMediator.getVMDetails(vmid), runtime, vboxVMDataMediator.getVMData(vmid)).done(function(d1,d2,d3){215 def.resolve($.extend(true,{},d1,d2,d3));216 }).fail(function(){217 def.reject();218 });219 return def.promise();220 221 },222 223 /**224 * Get new VM data225 * @param vmid {String} ID of VM to get data for226 * @returns {Object} promise227 */228 refreshVMData : function(vmid) {229 230 // Special case for host231 if(vmid == 'host') {232 $('#vboxPane').trigger('vboxOnMachineDataChanged', [{machineId:'host'}]);233 $('#vboxPane').trigger('vboxEvents', [[{eventType:'OnMachineDataChanged',machineId:'host'}]]);234 return;235 }236 237 if(!vboxVMDataMediator.vmData[vmid]) return;238 239 var def = $.Deferred();240 $.when(vboxAjaxRequest('vboxGetMachines',{'vm':vmid})).done(function(d) {241 vm = d.responseData[0];242 vboxVMDataMediator.vmData[vm.id] = vm;243 def.resolve();244 $('#vboxPane').trigger('vboxOnMachineDataChanged', [{machineId:vm.id,enrichmentData:vm}]);245 $('#vboxPane').trigger('vboxEvents', [[{eventType:'OnMachineDataChanged',machineId:vm.id,enrichmentData:vm}]]);246 }).fail(function(){247 def.reject();248 });249 250 return def.promise();251 }252253};254255/* Events to bind for vboxVMDataMediator when everything is loaded */256$(document).ready(function(){257258 /*259 * 260 * VirtualBox events261 * 262 */263 264 // Raw event to data handlers265 $('#vboxPane').on('vboxOnMachineDataChanged',function(e, eventData) {266 267 vboxVMDataMediator.expireVMDetails(eventData.machineId);268 vboxVMDataMediator.expireVMRuntimeData(eventData.machineId);269 270 if(vboxVMDataMediator.vmData[eventData.machineId] && eventData.enrichmentData) {271 $.extend(true, vboxVMDataMediator.vmData[eventData.machineId], eventData.enrichmentData);272 // $.extend doesn't seem to handle this for some reason273 vboxVMDataMediator.vmData[eventData.machineId].groups = eventData.enrichmentData.groups; 274 }275 276 // Machine state change277 }).on('vboxOnMachineStateChanged', function(e, eventData) {278279 // Only care about it if its in our list280 if(vboxVMDataMediator.vmData[eventData.machineId]) {281 282 vboxVMDataMediator.vmData[eventData.machineId].state = eventData.state;283 vboxVMDataMediator.vmData[eventData.machineId].lastStateChange = eventData.enrichmentData.lastStateChange;284 vboxVMDataMediator.vmData[eventData.machineId].currentStateModified = eventData.enrichmentData.currentStateModified;285 286 // If it's running, subscribe to its events287 if(vboxVMStates.isRunning({'state':eventData.state}) || vboxVMStates.isPaused({'state':eventData.state})) {288 289 // If we already have runtime data, assume we were already subscribed290 if(!vboxVMDataMediator.vmRuntimeData[eventData.machineId]) {291 292 // Tell event listener to subscribe to this machine's events293 vboxEventListener.subscribeVMEvents(eventData.machineId);294 }295 296 } else {297 vboxVMDataMediator.expireVMRuntimeData(eventData.machineId);298 }299 }300 301 // Session state change302 }).on('vboxOnSessionStateChanged', function(e, eventData) {303 304 if(vboxVMDataMediator.vmData[eventData.machineId])305 vboxVMDataMediator.vmData[eventData.machineId].sessionState = eventData.state;306307 308 // Snapshot changed309 }).on('vboxOnSnapshotTaken vboxOnSnapshotDeleted vboxOnSnapshotChanged vboxOnSnapshotRestored',function(e,eventData) {310 311 if(vboxVMDataMediator.vmData[eventData.machineId]) {312 313 vboxVMDataMediator.vmData[eventData.machineId].currentSnapshotName = eventData.enrichmentData.currentSnapshotName;314 vboxVMDataMediator.vmData[eventData.machineId].currentStateModified = eventData.enrichmentData.currentStateModified;315 316 // Get media again317 $.when(vboxAjaxRequest('vboxGetMedia')).done(function(d){$('#vboxPane').data('vboxMedia',d.responseData);});318 319 }320 if(vboxVMDataMediator.vmDetailsData[eventData.machineId])321 vboxVMDataMediator.vmDetailsData[eventData.machineId].snapshotCount = eventData.enrichmentData.snapshotCount;322 323 // Expire all data for a VM when machine is unregistered324 }).on('vboxOnMachineRegistered', function(e, eventData) {325 326 if(!eventData.registered) {327 vboxVMDataMediator.expireVMDetails(eventData.machineId);328 vboxVMDataMediator.expireVMRuntimeData(eventData.machineId);329 vboxVMDataMediator.vmData[eventData.machineId] = null;330 331 } else if(eventData.enrichmentData) {332 333 // Enforce VM ownership334 if($('#vboxPane').data('vboxConfig').enforceVMOwnership && !$('#vboxPane').data('vboxSession').admin && eventData.enrichmentData.owner != $('#vboxPane').data('vboxSession').user) {335 return;336 }337 338 vboxVMDataMediator.vmData[eventData.enrichmentData.id] = eventData.enrichmentData;339340 }341342 //}).on('vboxOnCPUChanged', function(e, vmid) {343 344 /*345 case 'OnCPUChanged':346 $data['cpu'] = $eventDataObject->cpu;347 $data['add'] = $eventDataObject->add;348 $data['dedupId'] .= '-' . $data['cpu'];349 break;350 */351352 }).on('vboxOnNetworkAdapterChanged', function(e, eventData) {353 354 if(vboxVMDataMediator.vmRuntimeData[eventData.machineId]) {355 $.extend(vboxVMDataMediator.vmRuntimeData[eventData.machineId].networkAdapters[eventData.networkAdapterSlot], eventData.enrichmentData);356 }357 358359 /* Storage controller of VM changed */360 //}).on('vboxOnStorageControllerChanged', function() {361 /*362 case 'OnStorageControllerChanged':363 $data['machineId'] = $eventDataObject->machineId;364 $data['dedupId'] .= '-'. $data['machineId'];365 break;366 */367 368 }).on('vboxOnMediumChanged', function(e, eventData) {369 370 /* Medium attachment changed */371 if(vboxVMDataMediator.vmRuntimeData[eventData.machineId]) {372 for(var a = 0; a < vboxVMDataMediator.vmRuntimeData[eventData.machineId].storageControllers.length; a++) {373 if(vboxVMDataMediator.vmRuntimeData[eventData.machineId].storageControllers[a].name == eventData.controller) {374 for(var b = 0; b < vboxVMDataMediator.vmRuntimeData[eventData.machineId].storageControllers[a].mediumAttachments.length; b++) {375 if(vboxVMDataMediator.vmRuntimeData[eventData.machineId].storageControllers[a].mediumAttachments[b].port == eventData.port &&376 vboxVMDataMediator.vmRuntimeData[eventData.machineId].storageControllers[a].mediumAttachments[b].device == eventData.device) {377 378 vboxVMDataMediator.vmRuntimeData[eventData.machineId].storageControllers[a].mediumAttachments[b].medium = (eventData.medium ? {id:eventData.medium} : null);379 break;380 }381 }382 break;383 }384 }385 }386 387 /* Shared folders changed */388 //}).on('vboxOnSharedFolderChanged', function() {389390 // VRDE runtime info391 }).on('vboxOnVRDEServerChanged', function(e, eventData) {392393 if(vboxVMDataMediator.vmRuntimeData[eventData.machineId]) {394 $.extend(true,vboxVMDataMediator.vmRuntimeData[eventData.machineId].VRDEServer, eventData.enrichmentData);395 }396397 398 // This only fires when it is enabled399 }).on('vboxOnVRDEServerInfoChanged', function(e, eventData) {400401 if(vboxVMDataMediator.vmRuntimeData[eventData.machineId]) {402 vboxVMDataMediator.vmRuntimeData[eventData.machineId].VRDEServerInfo.port = eventData.enrichmentData.port;403 vboxVMDataMediator.vmRuntimeData[eventData.machineId].VRDEServer.enabled = eventData.enrichmentData.enabled;404 }405406 407 // Execution cap408 }).on('vboxOnCPUExecutionCapChanged', function(e, eventData) {409 410 if(vboxVMDataMediator.vmRuntimeData[eventData.machineId]) {411 vboxVMDataMediator.vmRuntimeData[eventData.machineId].CPUExecutionCap = eventData.executionCap;412 }413414 // Special cases for where phpvirtualbox keeps its extra data415 }).on('vboxOnExtraDataChanged', function(e, eventData) {416 417 // No vm id is a global change418 if(!eventData.machineId || !vboxVMDataMediator.vmData[eventData.machineId]) return;419 420 switch(eventData.key) {421422 // Startup mode423 case 'pvbx/startupMode':424 if(vboxVMDataMediator.vmDetailsData[eventData.machineId])425 vboxVMDataMediator.vmDetailsData[eventData.machineId].startupMode = eventData.value;426 break;427 428 // Owner429 case 'phpvb/sso/owner':430 vboxVMDataMediator.vmData[eventData.machineId].owner = eventData.value;431 break;432 433 // Custom icon434 case 'phpvb/icon':435 436 vboxVMDataMediator.vmData[eventData.machineId].customIcon = eventData.value;437 438 if(vboxVMDataMediator.vmDetailsData[eventData.machineId])439 vboxVMDataMediator.vmDetailsData[eventData.machineId].customIcon = eventData.value;440 441 442 break;443 444 // First time run445 case 'GUI/FirstRun':446 if(vboxVMDataMediator.vmDetailsData[eventData.machineId])447 vboxVMDataMediator.vmDetailsData[eventData.machineId].GUI.FirstRun = eventData.value;448 break;449 450 }451 452 453 /*454 * 455 * phpVirtualBox events456 * 457 */458 459 // Expire everything when host changes460 }).on('hostChange',function(){461 vboxVMDataMediator.expireAll();462 463 });464 ...

Full Screen

Full Screen

cluster_app_assign_manage.js

Source:cluster_app_assign_manage.js Github

copy

Full Screen

1var app = angular.module('sentinelDashboardApp');2app.controller('SentinelClusterAppAssignManageController', ['$scope', '$stateParams', 'ngDialog',3 'MachineService', 'ClusterStateService',4 function ($scope, $stateParams, ngDialog, MachineService, ClusterStateService) {5 $scope.app = $stateParams.app;6 const UNSUPPORTED_CODE = 4041;7 const CLUSTER_MODE_CLIENT = 0;8 const CLUSTER_MODE_SERVER = 1;9 const DEFAULT_CLUSTER_SERVER_PORT = 18730;10 $scope.tmp = {11 curClientChosen: [],12 curRemainingClientChosen: [],13 curChosenServer: {},14 };15 function convertSetToString(set) {16 if (set === undefined) {17 return '';18 }19 let s = '';20 for (let i = 0; i < set.length; i++) {21 s = s + set[i];22 if (i < set.length - 1) {23 s = s + ',';24 }25 }26 return s;27 }28 function convertStrToNamespaceSet(str) {29 if (str === undefined || str === '') {30 return [];31 }32 let arr = [];33 let spliced = str.split(',');34 spliced.forEach((v) => {35 arr.push(v.trim());36 });37 return arr;38 }39 function processAppSingleData(data) {40 if (data.state.server && data.state.server.namespaceSet) {41 data.state.server.namespaceSetStr = convertSetToString(data.state.server.namespaceSet);42 data.mode = data.state.stateInfo.mode;43 }44 }45 function removeFromArr(arr, v) {46 for (let i = 0; i < arr.length; i++) {47 if (arr[i] === v) {48 arr.splice(i, 1);49 break;50 }51 }52 }53 function resetChosen() {54 $scope.tmp.curClientChosen = [];55 $scope.tmp.curRemainingClientChosen = [];56 }57 function generateMachineId(e) {58 return e.ip + '@' + e.commandPort;59 }60 function applyClusterMap(appClusterMachineList) {61 if (!appClusterMachineList) {62 return;63 }64 let tmpMap = new Map();65 $scope.clusterMap = [];66 $scope.remainingClientAddressList = [];67 let tmpServerList = [];68 let tmpClientList = [];69 appClusterMachineList.forEach((e) => {70 if (e.mode === CLUSTER_MODE_CLIENT) {71 tmpClientList.push(e);72 } else if (e.mode === CLUSTER_MODE_SERVER) {73 tmpServerList.push(e);74 } else {75 $scope.remainingClientAddressList.push(generateMachineId(e));76 }77 });78 tmpServerList.forEach((e) => {79 let ip = e.ip;80 let machineId = ip + '@' + e.commandPort;81 let group = {82 ip: ip,83 machineId: machineId,84 port: e.state.server.port,85 clientSet: [],86 namespaceSetStr: e.state.server.namespaceSetStr,87 belongToApp: true,88 };89 if (!tmpMap.has(ip)) {90 tmpMap.set(ip, group);91 }92 });93 tmpClientList.forEach((e) => {94 let ip = e.ip;95 let machineId = ip + '@' + e.commandPort;96 let targetServer = e.state.client.clientConfig.serverHost;97 let targetPort = e.state.client.clientConfig.serverPort;98 if (targetServer === undefined || targetServer === '' ||99 targetPort === undefined || targetPort <= 0) {100 $scope.remainingClientAddressList.push(generateMachineId(e));101 return;102 }103 if (!tmpMap.has(targetServer)) {104 let group = {105 ip: targetServer,106 machineId: targetServer,107 port: targetPort,108 clientSet: [machineId],109 belongToApp: false,110 };111 tmpMap.set(targetServer, group);112 } else {113 let g = tmpMap.get(targetServer);114 g.clientSet.push(machineId);115 }116 });117 tmpMap.forEach((v) => {118 if (v !== undefined) {119 $scope.clusterMap.push(v);120 }121 });122 }123 $scope.onCurrentServerChange = () => {124 resetChosen();125 };126 $scope.remainingClientAddressList = [];127 $scope.moveToServerGroup = () => {128 let chosenServer = $scope.tmp.curChosenServer;129 if (!chosenServer || !chosenServer.machineId) {130 return;131 }132 $scope.tmp.curRemainingClientChosen.forEach(e => {133 chosenServer.clientSet.push(e);134 removeFromArr($scope.remainingClientAddressList, e);135 });136 resetChosen();137 };138 $scope.moveToRemainingSharePool = () => {139 $scope.tmp.curClientChosen.forEach(e => {140 $scope.remainingClientAddressList.push(e);141 removeFromArr($scope.tmp.curChosenServer.clientSet, e);142 });143 resetChosen();144 };145 function parseIpFromMachineId(machineId) {146 if (machineId.indexOf('@') === -1) {147 return machineId;148 }149 let arr = machineId.split('@');150 return arr[0];151 }152 $scope.addToServerList = () => {153 let group;154 $scope.tmp.curRemainingClientChosen.forEach(e => {155 group = {156 machineId: e,157 ip: parseIpFromMachineId(e),158 port: DEFAULT_CLUSTER_SERVER_PORT,159 clientSet: [],160 namespaceSetStr: 'default,' + $scope.app,161 belongToApp: true,162 };163 $scope.clusterMap.push(group);164 removeFromArr($scope.remainingClientAddressList, e);165 $scope.tmp.curChosenServer = group;166 });167 resetChosen();168 };169 $scope.removeFromServerList = () => {170 let chosenServer = $scope.tmp.curChosenServer;171 if (!chosenServer || !chosenServer.machineId) {172 return;173 }174 chosenServer.clientSet.forEach((e) => {175 if (e !== undefined) {176 $scope.remainingClientAddressList.push(e);177 }178 });179 if (chosenServer.belongToApp || chosenServer.machineId.indexOf('@') !== -1) {180 $scope.remainingClientAddressList.push(chosenServer.machineId);181 } else {182 alert('提示:非本应用内机器将不会置回空闲列表中');183 }184 removeFromArr($scope.clusterMap, chosenServer);185 resetChosen();186 if ($scope.clusterMap.length > 0) {187 $scope.tmp.curChosenServer = $scope.clusterMap[0];188 $scope.onCurrentServerChange();189 } else {190 $scope.tmp.curChosenServer = {};191 }192 };193 function retrieveClusterAppInfo() {194 ClusterStateService.fetchClusterUniversalStateOfApp($scope.app).success(function (data) {195 if (data.code === 0 && data.data) {196 $scope.loadError = undefined;197 $scope.appClusterMachineList = data.data;198 $scope.appClusterMachineList.forEach(processAppSingleData);199 applyClusterMap($scope.appClusterMachineList);200 if ($scope.clusterMap.length > 0) {201 $scope.tmp.curChosenServer = $scope.clusterMap[0];202 $scope.onCurrentServerChange();203 }204 } else {205 $scope.appClusterMachineList = {};206 if (data.code === UNSUPPORTED_CODE) {207 $scope.loadError = {message: '该应用的 Sentinel 客户端不支持集群限流,请升级至 1.4.0 以上版本并引入相关依赖。'}208 } else {209 $scope.loadError = {message: data.msg};210 }211 }212 }).error(() => {213 $scope.loadError = {message: '未知错误'};214 });215 }216 retrieveClusterAppInfo();217 $scope.saveAndApplyAssign = () => {218 let ok = confirm('是否确认执行变更?');219 if (!ok) {220 return;221 }222 let cm = $scope.clusterMap;223 if (!cm) {224 cm = [];225 }226 cm.forEach((e) => {227 e.namespaceSet = convertStrToNamespaceSet(e.namespaceSetStr);228 });229 cm.namespaceSet = convertStrToNamespaceSet(cm.namespaceSetStr);230 let request = {231 clusterMap: cm,232 remainingList: $scope.remainingClientAddressList,233 };234 ClusterStateService.applyClusterFullAssignOfApp($scope.app, request).success((data) => {235 if (data.code === 0 && data.data) {236 let failedServerSet = data.data.failedServerSet;237 let failedClientSet = data.data.failedClientSet;238 if (failedClientSet.length === 0 && failedServerSet.length === 0) {239 alert('全部推送成功');240 } else {241 alert('推送完毕。token server 失败列表:' + JSON.stringify(failedServerSet) +242 '; token client 失败列表:' + JSON.stringify(failedClientSet));243 }244 retrieveClusterAppInfo();245 } else {246 if (data.code === UNSUPPORTED_CODE) {247 alert('该应用的 Sentinel 客户端不支持集群限流,请升级至 1.4.0 以上版本并引入相关依赖。');248 } else {249 alert('推送失败:' + data.msg);250 }251 }252 }).error(() => {253 alert('未知错误');254 });255 };...

Full Screen

Full Screen

cluster_app_server_manage.js

Source:cluster_app_server_manage.js Github

copy

Full Screen

1var app = angular.module('sentinelDashboardApp');2app.controller('SentinelClusterAppAssignManageController', ['$scope', '$stateParams', 'ngDialog',3 'MachineService', 'ClusterStateService',4 function ($scope, $stateParams, ngDialog, MachineService, ClusterStateService) {5 $scope.app = $stateParams.app;6 const UNSUPPORTED_CODE = 4041;7 const CLUSTER_MODE_CLIENT = 0;8 const CLUSTER_MODE_SERVER = 1;9 const DEFAULT_CLUSTER_SERVER_PORT = 18730;10 $scope.tmp = {11 curClientChosen: [],12 curRemainingClientChosen: [],13 curChosenServer: {},14 };15 function convertSetToString(set) {16 if (set === undefined) {17 return '';18 }19 let s = '';20 for (let i = 0; i < set.length; i++) {21 s = s + set[i];22 if (i < set.length - 1) {23 s = s + ',';24 }25 }26 return s;27 }28 function convertStrToNamespaceSet(str) {29 if (str === undefined || str === '') {30 return [];31 }32 let arr = [];33 let spliced = str.split(',');34 spliced.forEach((v) => {35 arr.push(v.trim());36 });37 return arr;38 }39 function processAppSingleData(data) {40 if (data.state.server && data.state.server.namespaceSet) {41 data.state.server.namespaceSetStr = convertSetToString(data.state.server.namespaceSet);42 data.mode = data.state.stateInfo.mode;43 }44 }45 function removeFromArr(arr, v) {46 for (let i = 0; i < arr.length; i++) {47 if (arr[i] === v) {48 arr.splice(i, 1);49 break;50 }51 }52 }53 function resetChosen() {54 $scope.tmp.curClientChosen = [];55 $scope.tmp.curRemainingClientChosen = [];56 }57 function generateMachineId(e) {58 return e.ip + '@' + e.commandPort;59 }60 function applyClusterMap(appClusterMachineList) {61 if (!appClusterMachineList) {62 return;63 }64 let tmpMap = new Map();65 $scope.clusterMap = [];66 $scope.remainingClientAddressList = [];67 let tmpServerList = [];68 let tmpClientList = [];69 appClusterMachineList.forEach((e) => {70 if (e.mode === CLUSTER_MODE_CLIENT) {71 tmpClientList.push(e);72 } else if (e.mode === CLUSTER_MODE_SERVER) {73 tmpServerList.push(e);74 } else {75 $scope.remainingClientAddressList.push(generateMachineId(e));76 }77 });78 tmpServerList.forEach((e) => {79 let ip = e.ip;80 let machineId = ip + '@' + e.commandPort;81 let group = {82 ip: ip,83 machineId: machineId,84 port: e.state.server.port,85 clientSet: [],86 namespaceSetStr: e.state.server.namespaceSetStr,87 belongToApp: true,88 };89 if (!tmpMap.has(ip)) {90 tmpMap.set(ip, group);91 }92 });93 tmpClientList.forEach((e) => {94 let ip = e.ip;95 let machineId = ip + '@' + e.commandPort;96 let targetServer = e.state.client.clientConfig.serverHost;97 let targetPort = e.state.client.clientConfig.serverPort;98 if (targetServer === undefined || targetServer === '' ||99 targetPort === undefined || targetPort <= 0) {100 $scope.remainingClientAddressList.push(generateMachineId(e));101 return;102 }103 if (!tmpMap.has(targetServer)) {104 let group = {105 ip: targetServer,106 machineId: targetServer,107 port: targetPort,108 clientSet: [machineId],109 belongToApp: false,110 };111 tmpMap.set(targetServer, group);112 } else {113 let g = tmpMap.get(targetServer);114 g.clientSet.push(machineId);115 }116 });117 tmpMap.forEach((v) => {118 if (v !== undefined) {119 $scope.clusterMap.push(v);120 }121 });122 }123 $scope.onCurrentServerChange = () => {124 resetChosen();125 };126 $scope.remainingClientAddressList = [];127 $scope.moveToServerGroup = () => {128 let chosenServer = $scope.tmp.curChosenServer;129 if (!chosenServer || !chosenServer.machineId) {130 return;131 }132 $scope.tmp.curRemainingClientChosen.forEach(e => {133 chosenServer.clientSet.push(e);134 removeFromArr($scope.remainingClientAddressList, e);135 });136 resetChosen();137 };138 $scope.moveToRemainingSharePool = () => {139 $scope.tmp.curClientChosen.forEach(e => {140 $scope.remainingClientAddressList.push(e);141 removeFromArr($scope.tmp.curChosenServer.clientSet, e);142 });143 resetChosen();144 };145 function parseIpFromMachineId(machineId) {146 if (machineId.indexOf('@') === -1) {147 return machineId;148 }149 let arr = machineId.split('@');150 return arr[0];151 }152 $scope.addToServerList = () => {153 let group;154 $scope.tmp.curRemainingClientChosen.forEach(e => {155 group = {156 machineId: e,157 ip: parseIpFromMachineId(e),158 port: DEFAULT_CLUSTER_SERVER_PORT,159 clientSet: [],160 namespaceSetStr: 'default,' + $scope.app,161 belongToApp: true,162 };163 $scope.clusterMap.push(group);164 removeFromArr($scope.remainingClientAddressList, e);165 $scope.tmp.curChosenServer = group;166 });167 resetChosen();168 };169 $scope.removeFromServerList = () => {170 let chosenServer = $scope.tmp.curChosenServer;171 if (!chosenServer || !chosenServer.machineId) {172 return;173 }174 chosenServer.clientSet.forEach((e) => {175 if (e !== undefined) {176 $scope.remainingClientAddressList.push(e);177 }178 });179 if (chosenServer.belongToApp || chosenServer.machineId.indexOf('@') !== -1) {180 $scope.remainingClientAddressList.push(chosenServer.machineId);181 } else {182 alert('提示:非本应用内机器将不会置回空闲列表中');183 }184 removeFromArr($scope.clusterMap, chosenServer);185 resetChosen();186 if ($scope.clusterMap.length > 0) {187 $scope.tmp.curChosenServer = $scope.clusterMap[0];188 $scope.onCurrentServerChange();189 } else {190 $scope.tmp.curChosenServer = {};191 }192 };193 function retrieveClusterAppInfo() {194 ClusterStateService.fetchClusterUniversalStateOfApp($scope.app).success(function (data) {195 if (data.code === 0 && data.data) {196 $scope.loadError = undefined;197 $scope.appClusterMachineList = data.data;198 $scope.appClusterMachineList.forEach(processAppSingleData);199 applyClusterMap($scope.appClusterMachineList);200 if ($scope.clusterMap.length > 0) {201 $scope.tmp.curChosenServer = $scope.clusterMap[0];202 $scope.onCurrentServerChange();203 }204 } else {205 $scope.appClusterMachineList = {};206 if (data.code === UNSUPPORTED_CODE) {207 $scope.loadError = {message: '该应用的 Sentinel 客户端不支持集群限流,请升级至 1.4.0 以上版本并引入相关依赖。'}208 } else {209 $scope.loadError = {message: data.msg};210 }211 }212 }).error(() => {213 $scope.loadError = {message: '未知错误'};214 });215 }216 retrieveClusterAppInfo();217 $scope.saveAndApplyAssign = () => {218 let ok = confirm('是否确认执行变更?');219 if (!ok) {220 return;221 }222 let cm = $scope.clusterMap;223 if (!cm) {224 cm = [];225 }226 cm.forEach((e) => {227 e.namespaceSet = convertStrToNamespaceSet(e.namespaceSetStr);228 });229 cm.namespaceSet = convertStrToNamespaceSet(cm.namespaceSetStr);230 let request = {231 clusterMap: cm,232 remainingList: $scope.remainingClientAddressList,233 };234 ClusterStateService.applyClusterFullAssignOfApp($scope.app, request).success((data) => {235 if (data.code === 0 && data.data) {236 let failedServerSet = data.data.failedServerSet;237 let failedClientSet = data.data.failedClientSet;238 if (failedClientSet.length === 0 && failedServerSet.length === 0) {239 alert('全部推送成功');240 } else {241 alert('推送完毕。token server 失败列表:' + JSON.stringify(failedServerSet) +242 '; token client 失败列表:' + JSON.stringify(failedClientSet));243 }244 retrieveClusterAppInfo();245 } else {246 if (data.code === UNSUPPORTED_CODE) {247 alert('该应用的 Sentinel 客户端不支持集群限流,请升级至 1.4.0 以上版本并引入相关依赖。');248 } else {249 alert('推送失败:' + data.msg);250 }251 }252 }).error(() => {253 alert('未知错误');254 });255 };...

Full Screen

Full Screen

machine-repository.js

Source:machine-repository.js Github

copy

Full Screen

1const {Machine, DailyRecord, DailyAnalysis, MonthlyAnalysis} = require('../models');2const { APIError, STATUS_CODES } = require('../../utils/app-errors');3class MachineRepository {4 async createMachine({machineId, machNo, label}){5 try{6 const newMachine = new Machine({7 machineId: machineId,8 machNo: machNo,9 label: label,10 dailyRecords: [],11 dailyAnalyses: [],12 monthlyAnalyses: [],13 })14 await newMachine.save();15 return newMachine;16 }catch(err){17 throw new APIError('API Error', STATUS_CODES.INTERNAL_ERROR, 'Unable to Create Machine');18 }19 }20 async findMachineByNo({ machNo }){21 try{22 const machineData = await Machine.findOne({machNo: machNo});23 return machineData;24 }catch(err){25 throw new APIError('API Error', STATUS_CODES.INTERNAL_ERROR, 'Error on Finding Machine By Machine Number');26 }27 }28 async findMachineById({ machineId }){29 try{30 const machineData = await Machine.findOne({machineId: machineId});31 return machineData;32 }catch(err){33 throw new APIError('API Error', STATUS_CODES.INTERNAL_ERROR, 'Error on Finding Machine By Machine Id');34 }35 }36 async addMachineDailyRecords({machineId, day, month, year, historyRecords}){37 try{38 const selectedMachine = await Machine.findOne({machineId: machineId});39 if (selectedMachine){40 const newDailyRecord = new DailyRecord({41 day: day,42 month: month,43 year: year,44 machineId: machineId,45 historyRecords: historyRecords46 })47 await newDailyRecord.save();48 selectedMachine.dailyRecords.push(newDailyRecord);49 }50 return await selectedMachine.save();51 52 }catch(err){53 throw new APIError('API Error', STATUS_CODES.INTERNAL_ERROR, 'Error on Add Machine Daily Records');54 }55 }56 async addMachineDailyAnalyses({machineId, day, month, year, machErrors, lineData}){57 try{58 const selectedMachine = await Machine.findOne({machineId: machineId});59 if (selectedMachine){60 const newDailyAnalysis = new DailyAnalysis({61 day: day,62 month: month,63 year: year,64 machineId: machineId,65 machErrors: machErrors,66 lineData: lineData67 })68 await newDailyAnalysis.save();69 selectedMachine.dailyAnalyses.push(newDailyAnalysis);70 }71 return await selectedMachine.save();72 73 }catch(err){74 throw new APIError('API Error', STATUS_CODES.INTERNAL_ERROR, 'Error on Add Machine Daily Analysis');75 }76 }77 async doesMonthlyAnalysisExists({month, year}){78 MonthlyAnalysis.findOne({month: month, year: year}, (err, doc) => {79 if (err){80 throw new APIError('API Error', STATUS_CODES.INTERNAL_ERROR, 'Error on Does Monthly Analysis Exists');81 }82 if (doc){83 return true;84 } else {85 return false;86 }87 })88 }89 async addMachineMonthlyAnalyses({machineId, month, year, pieData}){90 try{91 const selectedMachine = await Machine.findOne({machineId: machineId});;92 if (selectedMachine){93 const newMonthlyAnalysis = new MonthlyAnalysis({94 month: month,95 year: year,96 machineId: machineId,97 pieData: pieData,98 })99 await newMonthlyAnalysis.save();100 selectedMachine.monthlyAnalyses.push(newMonthlyAnalysis);101 }102 return await selectedMachine.save();103 104 }catch(err){105 throw new APIError('API Error', STATUS_CODES.INTERNAL_ERROR, 'Error on Add Machine Monthly Analysis');106 }107 }108 async updateMachineMonthlyAnalyses({machineId, month, year, pieData}){ 109 try{110 const selectedMonthlyAnalyses = await MonthlyAnalysis.findOne({machineId: machineId, month: month, year: year});111 if (selectedMonthlyAnalyses) {112 let oldPieData = selectedMonthlyAnalyses.pieData;113 let {offline, disabled, idle, running, diagnostic, deuplicate, error, firmwareDoesntExist, satellite, reader} = oldPieData;114 let newOffline = offline + pieData.offline;115 let newDisabled = disabled + pieData.disabled;116 let newIdle = idle + pieData.idle;117 let newRunning = running + pieData.running;118 let newDiagnostic = diagnostic + pieData.diagnostic;119 let newDeuplicate = deuplicate + pieData.deuplicate;120 let newError = error + pieData.error;121 let newFirmwareDoesntExist = firmwareDoesntExist + pieData.firmwareDoesntExist;122 let newSatellite = satellite + pieData.satellite;123 let newReader = reader + pieData.reader;124 let newData = {offline: newOffline, disabled: newDisabled, idle: newIdle, running: newRunning, diagnostic: newDiagnostic, deuplicate: newDeuplicate, error: newError, firmwareDoesntExist: newFirmwareDoesntExist, satellite: newSatellite, reader: newReader};125 const oldMonthlyAnalysis = await MonthlyAnalysis.findOneAndUpdate({machineId: machineId, month: month, year: year} , {pieData: newData});126 return oldMonthlyAnalysis;127 }128 }catch(err){129 throw new APIError('API Error', STATUS_CODES.INTERNAL_ERROR, 'Error on Update Machine Monthly Analyses');130 }131 }132 async findDailyRecordsByMonthAfterDay({machineId, day, month, year}){133 try{134 if(day == -1){135 const queryData = await DailyRecord.findOne({machineId: machineId, month: month, year: year}).populate('historyRecords');136 return queryData;137 } else{138 const queryData = await DailyRecord.findOne({machineId: machineId, month: month, year: year, day: { $gte: day}}).populate('historyRecords');139 return queryData;140 }141 } catch (err) {142 throw new APIError('API Error', STATUS_CODES.INTERNAL_ERROR, 'Error on Find Daily Records By Month After Day');143 }144 }145 async findDailyRecordsByDay({machineId, day, month, year}){146 try{147 const queryData = await DailyRecord.findOne({machineId: machineId, month: month, year: year, day: day}).populate('historyRecords');148 return queryData;149 } catch (err) {150 throw new APIError('API Error', STATUS_CODES.INTERNAL_ERROR, 'Error on Find Daily Records By Day');151 }152 }153 async findMonthAnalyses({machineId, month, year}){154 try{155 const queryData = await MonthlyAnalysis.findOne({machineId: machineId, month: month, year: year});156 return queryData;157 } catch (err) {158 throw new APIError('API Error', STATUS_CODES.INTERNAL_ERROR, 'Error on Find Monthly Analyses');159 }160 }161 async findDayAnalyses({machineId, day, month, year}){162 try{163 const queryData = await DailyAnalysis.findOne({machineId: machineId, day: day, month: month, year: year});164 return queryData;165 } catch (err) {166 throw new APIError('API Error', STATUS_CODES.INTERNAL_ERROR, 'Error on Find Daily Analyses');167 }168 }169}...

Full Screen

Full Screen

machineManage.js

Source:machineManage.js Github

copy

Full Screen

1function removeMachine(id, ip) {2 var removeMachineBtn = document.getElementById(id);3 removeMachineBtn.disabled = true;4 $.get(5 '/manage/machine/checkMachineInstances.json',6 {7 ip: ip,8 },9 function(data){10 var machineHasInstance = data.machineHasInstance;11 var alertMsg;12 if (machineHasInstance == true) {13 alertMsg = "该机器ip=" + ip + "还有运行中的Redis节点,确认要删除吗?";14 } else {15 alertMsg = "确认要删除ip=" + ip + "吗?";16 }17 if (confirm(alertMsg)) {18 location.href = "/manage/machine/delete.do?machineIp="+ip;19 } else {20 removeMachineBtn.disabled = false;21 }22 }23 );24}25function saveOrUpdateMachine(machineId){26 var ip = document.getElementById("ip" + machineId);27 var room = document.getElementById("room" + machineId);28 var mem = document.getElementById("mem" + machineId);29 var cpu = document.getElementById("cpu" + machineId);30 var virtual = document.getElementById("virtual" + machineId);31 var realIp = document.getElementById("realIp" + machineId);32 var machineType = document.getElementById("machineType" + machineId);33 var extraDesc = document.getElementById("extraDesc" + machineId);34 var collect = document.getElementById("collect" + machineId);35 if(ip.value == ""){36 alert("IP不能为空!");37 ip.focus();38 return false;39 }40 if(room.value == ""){41 alert("机房不能为空!");42 room.focus();43 return false;44 }45 if(mem.value == ""){46 alert("内存不能为空!");47 mem.focus();48 return false;49 }50 if(cpu.value == ""){51 alert("CPU不能为空!");52 cpu.focus();53 return false;54 }55 if(virtual.value == ""){56 alert("是否虚机为空!");57 virtual.focus();58 return false;59 }60 var addMachineBtn = document.getElementById("addMachineBtn" + machineId);61 addMachineBtn.disabled = true;62 63 $.post(64 '/manage/machine/add.json',65 {66 ip: ip.value,67 room: room.value,68 mem: mem.value,69 cpu: cpu.value,70 virtual: virtual.value,71 realIp: realIp.value,72 id:machineId,73 machineType: machineType.value,74 extraDesc: extraDesc.value,75 collect: collect.value76 },77 function(data){78 if(data.result){79 $("#machineInfo" + machineId).html("<div class='alert alert-error' ><button class='close' data-dismiss='alert'>×</button><strong>Success!</strong>更新成功,窗口会自动关闭</div>");80 var targetId = "#addMachineModal" + machineId;81 setTimeout("$('" + targetId +"').modal('hide');window.location.reload();",1000);82 }else{83 addMachineBtn.disabled = false;84 $("#machineInfo" + machineId).html("<div class='alert alert-error' ><button class='close' data-dismiss='alert'>×</button><strong>Error!</strong>更新失败!</div>");85 }86 }87 );...

Full Screen

Full Screen

defect.js

Source:defect.js Github

copy

Full Screen

1const defectRepository = require('./repository/defect')2const machineRepository = require('./repository/machine')3const { InvalidError } = require('./errors')4const { DefectStatusEnum } = require('./enums')5const getDefect = async (machineId) => {6 await machineRepository.machineExists(machineId)7 const defect = defectRepository.find(machineId)8 return {9 data: { defect }10 }11}12const createDefect = async ({ personalNumber, description, machineId }) => {13 const defect = await defectRepository.createDefect({14 personalNumber,15 description,16 machineId17 })18 console.info(`Successfully set the defect for machine ${machineId} with ${description} by - ${personalNumber}`)19 return {20 data: {21 message: 'Successfully set the defect',22 defect23 }24 }25}26const getDefects = async (machineId) => {27 await machineRepository.machineExists(machineId)28 const defects = await defectRepository.getDefectsByMachineId(machineId)29 return {30 data: { defects }31 }32}33const setDefectStatus = async ({ machineId, defectTime, status }) => {34 if (!Object.values(DefectStatusEnum).some(v => v === status)) {35 throw new InvalidError(`Invalid defect status: ${status}`)36 }37 await machineRepository.machineExists(machineId)38 await defectRepository.setDefectStatusForMachineId(machineId)39 let successMessage = 'Successfully updated the status of defect'40 if (status === DefectStatusEnum.STUCK_HEADER) {41 await machineRepository.setMachineStatus({ machineId, status })42 successMessage = `Successfully updated and set the status of the machine ${machineId}`43 }44 console.info(successMessage)45 return {46 data: {47 message: successMessage48 }49 }50}51const getAll = async ({ limit, offset }) => {52 const defects = await defectRepository.getDefectsByStatuses({53 statuses: Object.values(DefectStatusEnum),54 pagination: {55 limit,56 offset57 }58 })59 return defects60}61module.exports = {62 getDefect,63 createDefect,64 getDefects,65 setDefectStatus,66 getAll...

Full Screen

Full Screen

Using AI Code Generation

copy

Full Screen

1describe('My First Test', function() {2 it('Does not do much!', function() {3 cy.machineId().then((machineId) => {4 console.log(machineId)5 })6 })7})8Cypress.Commands.add('machineId', () => {9 return cy.task('getMachineId')10})11module.exports = (on, config) => {12 on('task', {13 getMachineId() {14 return require('node-machine-id').machineIdSync()15 },16 })17}

Full Screen

Using AI Code Generation

copy

Full Screen

1const machineId = require('node-machine-id');2describe('My First Test', () => {3 it('Does not do much!', () => {4 expect(true).to.equal(true)5 })6})7it('machineId', () => {8 cy.log(machineId.machineIdSync());9})10it('machineId', () => {11 cy.log(machineId.machineIdSync());12})13it('machineId', () => {14 cy.log(machineId.machineIdSync());15})16it('machineId', () => {17 cy.log(machineId.machineIdSync());18})19it('machineId', () => {20 cy.log(machineId.machineIdSync());21})22it('machineId', () => {23 cy.log(machineId.machineIdSync());24})25it('machineId', () => {26 cy.log(machineId.machineIdSync());27})28it('machineId', () => {29 cy.log(machineId.machineIdSync());30})31it('machineId', () => {32 cy.log(machineId.machineIdSync());33})34it('machineId', () => {35 cy.log(machineId.machineIdSync());36})37it('machineId', () => {38 cy.log(machineId.machineIdSync());39})40it('machineId', () => {41 cy.log(machineId.machineIdSync());42})43it('machineId', () => {44 cy.log(machineId.machineIdSync());45})46it('machineId', () => {47 cy.log(machineId.machineIdSync());48})49it('machineId', () => {50 cy.log(machineId.machineIdSync());51})52it('machineId', () => {53 cy.log(machineId.machineIdSync());54})

Full Screen

Using AI Code Generation

copy

Full Screen

1describe('My First Test', function() {2 it('Does not do much!', function() {3 cy.machineId().then((machineId) => {4 cy.log(machineId);5 });6 });7});8describe('My First Test', function() {9 it('Does not do much!', function() {10 cy.machineId().then((machineId) => {11 cy.log(machineId);12 });13 });14});15describe('My First Test', function() {16 it('Does not do much!', function() {17 cy.machineId().then((machineId) => {18 cy.log(machineId);19 });20 });21});22describe('My First Test', function() {23 it('Does not do much!', function() {24 cy.machineId().then((machineId) => {25 cy.log(machineId);26 });27 });28});29describe('My First Test', function() {30 it('Does not do much!', function() {31 cy.machineId().then((machineId) => {32 cy.log(machineId);33 });34 });35});36describe('My First Test', function() {37 it('Does not do much!', function() {38 cy.machineId().then((machineId) => {39 cy.log(machineId);40 });41 });42});43describe('My First Test', function() {44 it('Does not do much!', function() {45 cy.machineId().then((machineId) => {46 cy.log(machineId);47 });48 });49});50describe('My First Test', function() {51 it('Does not do much!', function() {52 cy.machineId().then((machineId) => {53 cy.log(machineId);54 });55 });56});57describe('My First Test', function() {58 it('Does not do much!', function() {59 cy.machineId().then((machineId) => {60 cy.log(machineId);61 });62 });63});64describe('My First Test', function() {65 it('Does not do much!', function() {

Full Screen

Using AI Code Generation

copy

Full Screen

1import { machineId } from 'node-machine-id';2describe('My First Test', function () {3 it('Does not do much!', function () {4 cy.log(machineId(true));5 cy.contains('type').click();6 cy.url().should('include', '/commands/actions');7 cy.get('.action-email')8 .type('

Full Screen

Using AI Code Generation

copy

Full Screen

1describe('My First Test', function() {2 it('Does not do much!', function() {3 cy.machineId().then((machineId) => {4 console.log(machineId)5 })6 })7})

Full Screen

Using AI Code Generation

copy

Full Screen

1describe('Cypress Machine ID', () => {2 it('Get Machine ID', () => {3 cy.machineId().then((machineId) => {4 cy.log(machineId)5 })6 })7})8Cypress.Commands.add('machineId', () => {9 return cy.task('machineId')10})11module.exports = (on, config) => {12 on('task', {13 machineId() {14 return require('node-machine-id').machineIdSync()15 }16 })17}18{19}20{21}22module.exports = (on, config) => {23 on('task', {24 machineId() {25 return require('node-machine-id').machineIdSync()26 }27 })28}29Cypress.Commands.add('machineId', () => {30 return cy.task('machineId')31})32describe('Cypress Machine ID', () => {33 it('Get Machine ID', () => {34 cy.machineId().then((machineId) => {35 cy.log(machineId)36 })37 })38})

Full Screen

Using AI Code Generation

copy

Full Screen

1describe('My First Test', function() {2 it('Does not do much!', function() {3 cy.machineId().then((id) => {4 console.log(id);5 })6 })7})8module.exports = (on, config) => {9 require('cypress-machine-id')(on, config)10}11require('cypress-machine-id')12describe('My First Test', function() {13 it('Does not do much!', function() {14 cy.machineId().then((id) => {15 console.log(id);16 })17 })18})19const { machineId } = require('cypress-machine-id')20machineId().then((id) => {21 console.log(id);22})23describe('My First Test', function() {24 it('Does not do much!', function() {25 cy.machineId().then((id) => {26 console.log(id);27 })28 })29})30If you find any bugs or have any questions, please file an issue on [GitHub](

Full Screen

Using AI Code Generation

copy

Full Screen

1describe('Test Machine Id', () => {2 it('should return machine id', () => {3 cy.machineId()4 .then((id) => {5 console.log('Machine Id is', id);6 });7 });8});9describe('Test Machine Id', () => {10 it('should return machine id', () => {11 const id = cy.machineIdSync();12 console.log('Machine Id is', id);13 });14});15describe('Test Machine Id', () => {16 it('should return machine id', () => {17 cy.machineIdAsync()18 .then((id) => {19 console.log('Machine Id is', id);20 });21 });22});23describe('Test Machine Id', () => {24 it('should return machine id', async () => {25 const id = await cy.machineIdAsync();26 console.log('Machine Id is', id);27 });28});29describe('Test Machine Id', () => {30 it('should return machine id', async () => {31 const id = await cy.machineIdAsync();32 console.log('Machine Id is', id);33 });34});35describe('Test Machine Id', () => {36 it('should return machine id', async () => {37 try {38 const id = await cy.machineIdAsync();39 console.log('Machine Id is', id);40 } catch (e) {41 console.error('Error in getting machine id', e);42 }43 });44});45describe('Test Machine Id', () => {46 it('should return machine id', async () => {47 try {48 const id = await cy.machineIdAsync();49 console.log('Machine Id is', id);50 expect(id).to.be.a('string');51 } catch (e) {52 console.error('Error in getting machine id', e);53 }54 });55});56describe('Test Machine Id', () => {

Full Screen

Cypress Tutorial

Cypress is a renowned Javascript-based open-source, easy-to-use end-to-end testing framework primarily used for testing web applications. Cypress is a relatively new player in the automation testing space and has been gaining much traction lately, as evidenced by the number of Forks (2.7K) and Stars (42.1K) for the project. LambdaTest’s Cypress Tutorial covers step-by-step guides that will help you learn from the basics till you run automation tests on LambdaTest.

Chapters:

  1. What is Cypress? -
  2. Why Cypress? - Learn why Cypress might be a good choice for testing your web applications.
  3. Features of Cypress Testing - Learn about features that make Cypress a powerful and flexible tool for testing web applications.
  4. Cypress Drawbacks - Although Cypress has many strengths, it has a few limitations that you should be aware of.
  5. Cypress Architecture - Learn more about Cypress architecture and how it is designed to be run directly in the browser, i.e., it does not have any additional servers.
  6. Browsers Supported by Cypress - Cypress is built on top of the Electron browser, supporting all modern web browsers. Learn browsers that support Cypress.
  7. Selenium vs Cypress: A Detailed Comparison - Compare and explore some key differences in terms of their design and features.
  8. Cypress Learning: Best Practices - Take a deep dive into some of the best practices you should use to avoid anti-patterns in your automation tests.
  9. How To Run Cypress Tests on LambdaTest? - Set up a LambdaTest account, and now you are all set to learn how to run Cypress tests.

Certification

You can elevate your expertise with end-to-end testing using the Cypress automation framework and stay one step ahead in your career by earning a Cypress certification. Check out our Cypress 101 Certification.

YouTube

Watch this 3 hours of complete tutorial to learn the basics of Cypress and various Cypress commands with the Cypress testing at LambdaTest.

Run Cypress automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful