AutolabJS/autolabcli

View on GitHub
lib/model/eval.js

Summary

Maintainability
A
1 hr
Test Coverage
const io = require('socket.io-client');
const preferenceManager = require('../utils/preference-manager');
 
const { logger } = require('../utils/logger');
 
const handlerMiddleware = (socket) => {
const { onevent } = socket;
/* eslint-disable-next-line no-param-reassign */
socket.onevent = function newOnevent(packet) {
const args = packet.data || [];
if (!onevent.call(this, packet)) {
logger.moduleLog('error', 'Eval Model', `Unsupported socket event for ${args[0]}`);
/* eslint-disable-next-line no-param-reassign */
packet.data = ['default'].concat([args]);
onevent.call(this, packet);
}
};
};
 
const connectToSocket = () => {
const cliPrefs = preferenceManager.getPreference({ name: 'cliPrefs' });
const { host } = cliPrefs.main_server;
const { port } = cliPrefs.main_server;
 
logger.moduleLog('debug', 'Eval Model', `Opening a socket connection to http://${host}:${port}`);
 
const socket = io.connect(`http://${host}:${port}`);
handlerMiddleware(socket);
return socket;
};
 
const getRequestArray = ({
lab, idNo, commitHash, lang,
}) => [idNo, lab, commitHash, lang];
 
/* eslint-disable max-lines-per-function */
Function `socketEventHandler` has 34 lines of code (exceeds 25 allowed). Consider refactoring.
const socketEventHandler = (event, socket, data, callback) => {
let response;
switch (event) {
case 'invalid':
logger.moduleLog('error', 'Eval Model', 'Invalid options provided.');
response = {
name: 'invalid',
};
logger.moduleLog('debug', 'Eval Model', data);
callback(response);
socket.close();
break;
case 'submission_pending':
logger.moduleLog('debug', 'Eval Model', 'Submission Pending...');
response = {
name: 'submission_pending',
};
logger.moduleLog('debug', 'Eval Model', data);
callback(response);
break;
case 'scores':
logger.moduleLog('debug', 'Eval Model', 'Sucessfully Sumbitted. Evaluated results');
response = {
name: 'scores',
details: {
...data,
},
};
logger.moduleLog('debug', 'Eval Model', data);
callback(response);
socket.close();
break;
default:
logger.moduleLog('debug', 'Eval Model', data);
}
};
 
const getResponse = (socket, callback) => {
socket.on('invalid', (data) => {
socketEventHandler('invalid', socket, data, callback);
});
socket.on('submission_pending', (data) => {
socketEventHandler('submission_pending', socket, data, callback);
});
socket.on('scores', (data) => {
socketEventHandler('scores', socket, data, callback);
});
socket.on('default', (data) => {
socketEventHandler('default', socket, data, callback);
});
};
 
const evaluate = (evalOptions, callback) => {
if (evalOptions.name === 'evaluate') {
const socket = connectToSocket();
const req = getRequestArray(evalOptions.details);
getResponse(socket, callback);
socket.emit('submission', req);
} else {
callback(evalOptions);
}
};
 
module.exports = {
evaluate,
};