[TIC-Web] Update The Function For The Image Creation. 60/120360/1
authorHeekyoung, Oh <heekyoung.oh@samsung.com>
Wed, 22 Mar 2017 11:31:18 +0000 (20:31 +0900)
committerHeekyoung, Oh <heekyoung.oh@samsung.com>
Wed, 22 Mar 2017 11:36:03 +0000 (20:36 +0900)
- Limited Contions are added.
- The jobs that an image creation are runned only 4 at the same time

Change-Id: I5f897dfa0ef365687aca053d3f38ff3262869404
Signed-off-by: Heekyoung, Oh <heekyoung.oh@samsung.com>
controller/mic.js
controller/socketio.js
public/src/css/style.css
public/src/js/page/job.js
public/src/js/widget/JobTableItem.js

index 46a8cae..132e0ee 100644 (file)
@@ -18,24 +18,60 @@ var AppConfig = require('../config.json');
 var logger = JL('mic.js');
 
 var Mic = {};
-var ps = null;
+
+/**
+ * Process Manager
+ * ObjectArray
+ * processMgr = {
+ *   'jobId': jobId,
+ *   'jobProcessId': pid
+ *  });
+ */
+var processMgr = [];
 
 Mic.isAvailable = function isAvailable() {
-    return (ps === null);
+    if (processMgr.length > 0 && processMgr.length <= 4) {
+        return true;
+    }
+    return false;
 }
 
-Mic.kill = function kill() {
-    if (ps === null) {
+Mic.kill = function kill(paramObj) {
+    var strJobId, psIndex, psObj, psId;
+    logger.info('MIC Kill: paramObj = ' + JSON.stringify(paramObj));
+
+    if (this.isAvailable() === false) {
         return;
     }
-    TreeKill(ps.pid, 'SIGKILL');
-    ps = null;
+
+    strJobId = paramObj.jobId;
+
+    psIndex = _.findIndex(processMgr, function (o) {
+        return o.jobId == strJobId;
+    })
+
+    if (psIndex < 0) {
+        return;
+    }
+    psObj = processMgr[psIndex];
+    psId = psObj.jobProcessId;
+
+    TreeKill(psId, 'SIGKILL');
+    processMgr.pop(psIndex);
 }
 
-Mic.process = function process(command, callback) {
+Mic.process = function process(command, callback, jobId) {
+    var ps;
+
     // execution
     ps = exec(command);
 
+    // Process Manager - add
+    processMgr.push({
+        'jobId': jobId,
+        'jobProcessId': ps.pid
+    });
+
     ps.stdout.on('data', callback.stdout || function (out) {
         process.stdout.write(out);
     });
@@ -100,8 +136,14 @@ Mic.create = function create(paramObj, io) {
                 sendMsg(AppConfig.EVENT.SOCKET.FS_IMAGE_ADD_FAIL, 'Failed (' + code + ')');
             },
             exit: function (code) {
-                // code is the final exit code of the process, otherwise null
-                ps = null;
+                // code is the final exit code of the process
+                var psIndex = _.findIndex(processMgr, function (o) {
+                    return o.jobId == strJobId;
+                });
+                if (psIndex >= 0) {
+                    processMgr.pop(psIndex);
+                }
+
                 logger.error('Terminated (' + code + ')');
                 if (code === 0) {
                     sendMsg(AppConfig.EVENT.SOCKET.FS_IMAGE_ADD_FINISH, {
@@ -116,7 +158,8 @@ Mic.create = function create(paramObj, io) {
                     });
                 }
             }
-        }
+        },
+        paramObj.jobId
     );
 };
 
index fdd7fbc..902722e 100644 (file)
@@ -26,8 +26,8 @@ var listen = function listen (server) {
         /**
          * AppConfig.EVENT.SOCKET.FS_IMAGE_ADD_KILL = 'ws/fs/image/add/kill'
          */
-        socket.on(AppConfig.EVENT.SOCKET.FS_IMAGE_ADD_KILL, function () {
-            Mic.kill();
+        socket.on(AppConfig.EVENT.SOCKET.FS_IMAGE_ADD_KILL, function (data) {
+            Mic.kill(data);
 
             io.sockets.emit(AppConfig.EVENT.SOCKET.MIC_AVAILABLE_TO, Mic.isAvailable());
         });
index 4f86ef9..a768a5b 100644 (file)
@@ -173,6 +173,7 @@ body {
     display: inline-block;
     width: 100%;
     text-align: center;
+    overflow: scroll;
 }
 #tic-job-section .panel-heading .pull-right {
     margin-top: -20px;
@@ -263,8 +264,9 @@ tr.extended_job_table_row:hover td {
     overflow: auto;
 }
 #tic-image-list {
+    height: calc(100vh - 285px);
     display: inline-block;
-    overflow: auto;
+    overflow: scroll;
     text-overflow: ellipsis;
     width: 100%;
 }
index 5dea968..5142c09 100644 (file)
@@ -73,9 +73,17 @@ define([
 
                     // bind events - cancel button
                     $('#tic-job-table a.btncancel').on('click', function (e) {
+                        var msgData, jobId;
                         e.preventDefault();
+
                         $(this).addClass('btnnotactive');
-                        client.emit(AppConfig.EVENT.SOCKET.FS_IMAGE_ADD_KILL);
+
+                        jobId = $(this).data('jobid');
+                        msgData = {
+                            jobId: jobId
+                        };
+
+                        client.emit(AppConfig.EVENT.SOCKET.FS_IMAGE_ADD_KILL, msgData);
                     });
                 }
             });
index 3353960..4923d22 100644 (file)
@@ -29,7 +29,7 @@ define([
             '<td><a class="tic-job-list-btn btndownload btnnotactive">Download</a></td>',
             '<td><%= jobImageSize %></td>',
             '<td><%= jobUptime %></td>',
-            '<td><a class="tic-job-list-btn btncancel <%= classJobCancel %>" title="Cancel">Cancel</a></td>',
+            '<td><a class="tic-job-list-btn btncancel <%= classJobCancel %>" data-jobid="<%= jobNum %>" title="Cancel">Cancel</a></td>',
             '<td><a class="tic-job-list-btn <%= classJobKsPath %>" href="<%= jobKsPath %>" title="Kickstarter File">KS</a></td>',
             '<td><a class="tic-job-list-btn" href="<%= jobLogPath %>" title="Log">Log</a></td>',
         '</tr>',