lib/model/eval.js
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,};