From 17ea7e8e905951b5fe15e4b4aa04a8c5897f7774 Mon Sep 17 00:00:00 2001
From: rdaforno <reto.daforno@tik.ee.ethz.ch>
Date: Mon, 13 Jan 2020 15:18:59 +0100
Subject: [PATCH] scripts fixed

---
 testmanagementserver/test_to_linkmap.py | 14 +++++++-------
 webserver/testmanagement/user.ini       |  2 ++
 webserver/user/include/libflocklab.php  | 20 ++++++++++++++++----
 3 files changed, 25 insertions(+), 11 deletions(-)

diff --git a/testmanagementserver/test_to_linkmap.py b/testmanagementserver/test_to_linkmap.py
index 6f2b403..3e6c139 100755
--- a/testmanagementserver/test_to_linkmap.py
+++ b/testmanagementserver/test_to_linkmap.py
@@ -7,7 +7,7 @@ __license__        = "GPL"
 
 import sys, os, getopt, tempfile, shutil, re, time, errno, io, logging, traceback, __main__, csv, tarfile
 from datetime import datetime
-import struct import *
+from struct import *
 # Import local libraries
 from lib.flocklab import SUCCESS
 import lib.flocklab as flocklab
@@ -117,14 +117,14 @@ def TestToLinkmap(testid=None, cn=None, cur=None):
     
     # Process CSV file ---
     logger.debug("Processing CSV file...")
-    packetreader = csv.reader(open(_serial_service_file, 'rb'), delimiter=',')
+    packetreader = csv.reader(open(_serial_service_file, 'r'), delimiter=',')
     for packetinfo in packetreader:
         if re.search("^observer_id", packetinfo[1]):
             continue
         # nx_uint16_t num_messages;
         # nx_uint16_t sender_id;
         # nx_uint16_t num_received;
-        packet = packetinfo[4].decode('hex')
+        packet = bytes.fromhex(packetinfo[4])
         data = unpack(">7xB%dx" % (len(packet) - 8), packet)
         if data[0] == 7:
             # link measurement
@@ -176,7 +176,7 @@ def TestToLinkmap(testid=None, cn=None, cur=None):
             WHERE `a`.serv_tests_key = %s
             LIMIT 1
         """
-    cur.execute(sql, str(testid))
+    cur.execute(sql % str(testid))
     ret = cur.fetchall()
     platform_fk = ret[0][0]
     platform_name = ret[0][1]
@@ -214,11 +214,11 @@ def TestToLinkmap(testid=None, cn=None, cur=None):
     
     # Store XML file in  DB ---
     logger.debug("Storing XML file in DB...")
-    cur.execute("DELETE FROM `tbl_serv_web_link_measurements` WHERE `test_fk`=%s", str(testid))
+    cur.execute("DELETE FROM `tbl_serv_web_link_measurements` WHERE `test_fk`=%s" % str(testid))
     if platform_radio is None:
-        cur.execute("INSERT INTO `tbl_serv_web_link_measurements` (`test_fk`, `platform_fk`, `links`, `begin`, `end`) VALUES (%s,%s,%s,%s,%s)", (str(testid), platform_fk, linkmap.getvalue(), datetime.fromtimestamp(starttime), datetime.fromtimestamp(stoptime)))
+        cur.execute("INSERT INTO `tbl_serv_web_link_measurements` (`test_fk`, `platform_fk`, `links`, `begin`, `end`) VALUES (%s,%s,'%s','%s','%s')" % ((str(testid), platform_fk, linkmap.getvalue(), datetime.fromtimestamp(starttime), datetime.fromtimestamp(stoptime))))
     else:
-        cur.execute("INSERT INTO `tbl_serv_web_link_measurements` (`test_fk`, `platform_fk`, `links`, `begin`, `end`, `radio`) VALUES (%s,%s,%s,%s,%s,%s)", (str(testid), platform_fk, linkmap.getvalue(), datetime.fromtimestamp(starttime), datetime.fromtimestamp(stoptime), platform_radio))
+        cur.execute("INSERT INTO `tbl_serv_web_link_measurements` (`test_fk`, `platform_fk`, `links`, `begin`, `end`, `radio`) VALUES (%s,%s,'%s','%s','%s',%s)" % (str(testid), platform_fk, linkmap.getvalue(), datetime.fromtimestamp(starttime), datetime.fromtimestamp(stoptime), platform_radio))
     cn.commit()    
 
     # Remove temp dir ---
diff --git a/webserver/testmanagement/user.ini b/webserver/testmanagement/user.ini
index e8a9cf0..3460fbd 100644
--- a/webserver/testmanagement/user.ini
+++ b/webserver/testmanagement/user.ini
@@ -45,6 +45,8 @@ scheduler = /home/flocklab/testmanagementserver/flocklab_scheduler.py
 archivedir = /home/flocklab/test_archive
 sshflags = 															;additional SSH flags
 logdir = /home/flocklab/logs										;log directory for web
+tempdir = /home/flocklab/tmp
+venvwrapper = /home/flocklab/tools/wrapper.sh                       ;activates python virtual environment (leave blank if no venv)
 
 ; viz
 [viz]
diff --git a/webserver/user/include/libflocklab.php b/webserver/user/include/libflocklab.php
index 7f43c66..cb60676 100644
--- a/webserver/user/include/libflocklab.php
+++ b/webserver/user/include/libflocklab.php
@@ -347,9 +347,20 @@ function validate_image($image, &$errors) {
     $imagefile = tempnam(sys_get_temp_dir(), 'flocklab');
     file_put_contents($imagefile, $image['data']);
     $platform_list = get_available_platforms();
-    $cmd = $CONFIG['targetimage']['imagevalidator']." --image=".$imagefile." --platform=". $platform_list[$image['platform']][0]['name']." --core=".$image['core'];
+    // copy image file to testmanagement server
+    $cmd = "ssh ".$CONFIG['testmanagementserver']['user']."@".$CONFIG['testmanagementserver']['host']." 'mkdir ".$CONFIG['testmanagementserver']['tempdir']."'";
+    exec($cmd);
+    $cmd = "scp ".$imagefile." ".$CONFIG['testmanagementserver']['user']."@".$CONFIG['testmanagementserver']['host'].":".$CONFIG['testmanagementserver']['tempdir'];
+    exec($cmd, $output, $ret);
+    if ($ret) {
+        array_push($errors, "Failed to copy file '$test_config_file' to testmanagement server.");
+        return 1;
+    }
+    $cmd = "ssh ".$CONFIG['testmanagementserver']['user']."@".$CONFIG['testmanagementserver']['host']." '".$CONFIG['testmanagementserver']['venvwrapper']." ".$CONFIG['targetimage']['imagevalidator']." --image=".$CONFIG['testmanagementserver']['tempdir']."/".basename($imagefile)." --platform=". $platform_list[$image['platform']][0]['name']." --core=".$image['core']."' 2>&1";
     exec($cmd , $output, $ret);
     unlink($imagefile);
+    $cmd = "ssh ".$CONFIG['testmanagementserver']['user']."@".$CONFIG['testmanagementserver']['host']." 'rm ".$CONFIG['testmanagementserver']['tempdir']."/".basename($imagefile)."'";
+    exec($cmd);
     if ($ret != 0) {
         array_push($validate_image_errors, "The supplied file is not a valid image for this platform.");
     }
@@ -437,14 +448,15 @@ function validate_test($test_config_file, &$errors) {
         return 1;
     }
     // execute XML validation script (runs in the virtual environment on the testmanagement server, therefore we need to use SSH here)
-    $cmd = "ssh ".$CONFIG['testmanagementserver']['user']."@".$CONFIG['testmanagementserver']['host']." '".$CONFIG['tests']['testvalidator']." -x ".$CONFIG['testmanagementserver']['tempdir']."/".basename($test_config_file)." -s ".$CONFIG['xml']['schemapath']." -u " . $_SESSION['serv_users_key']."' 2>&1";
+    $cmd = "ssh ".$CONFIG['testmanagementserver']['user']."@".$CONFIG['testmanagementserver']['host']." '".$CONFIG['testmanagementserver']['venvwrapper']." ".$CONFIG['tests']['testvalidator']." -x ".$CONFIG['testmanagementserver']['tempdir']."/".basename($test_config_file)." -s ".$CONFIG['xml']['schemapath']." -u " . $_SESSION['serv_users_key']."' 2>&1";
     exec($cmd, $output, $ret);
     if ($ret) {
     foreach ($output as $error) {
             array_push($errors, $error);
         }
     }
-    unlink($CONFIG['testmanagementserver']['tempdir']."/".basename($test_config_file));
+    $cmd = "ssh ".$CONFIG['testmanagementserver']['user']."@".$CONFIG['testmanagementserver']['host']." 'rm ".$CONFIG['testmanagementserver']['tempdir']."/".basename($test_config_file)."'";
+    exec($cmd);
     return $ret == 0;
 }
 
@@ -461,7 +473,7 @@ function validate_test($test_config_file, &$errors) {
 function trigger_scheduler() {
     global $CONFIG;
     // use SSH as a way to run the script under the user 'flocklab' on the testmanagement server
-    $cmd = "ssh ".$CONFIG['testmanagementserver']['user']."@".$CONFIG['testmanagementserver']['host']." '".$CONFIG['testmanagementserver']['scheduler']." --debug' > /dev/null 2>&1 &";
+    $cmd = "ssh ".$CONFIG['testmanagementserver']['user']."@".$CONFIG['testmanagementserver']['host']." '".$CONFIG['testmanagementserver']['venvwrapper']." ".$CONFIG['testmanagementserver']['scheduler']." --debug' > /dev/null 2>&1 &";
     exec($cmd);
 }
 
-- 
GitLab