X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=commands%2Fjobs.py;h=c043d7048e094d8463f6f40b6f9f26b9a6c3c7dc;hb=606f9b6618e0e0659d4029c607eaa04d9b3501cc;hp=64073bb1a840047985d6f7c949e942cd3d2cf4bb;hpb=aaf1f0cac95c1e3baf0228751db882316eae35c7;p=tools%2Fsat.git diff --git a/commands/jobs.py b/commands/jobs.py index 64073bb..c043d70 100644 --- a/commands/jobs.py +++ b/commands/jobs.py @@ -26,9 +26,17 @@ import csv import shutil import itertools import re -import paramiko + +# generate problem +try: + import paramiko +except: + paramiko = "import paramiko impossible" + pass import src + + import src.ElementTree as etree STYLESHEET_GLOBAL = "jobs_global_report.xsl" @@ -292,8 +300,7 @@ class Job(object): " job --jobs_config " + os.path.join(self.machine.sat_path, self.name_remote_jobs_pyconf) + - " --name " + - self.name) + " --name " + self.name) if prefix: self.command = prefix + ' "' + self.command +'"' @@ -512,24 +519,13 @@ class Job(object): self._has_finished = True self._has_timouted = True self._Tf = time.time() - (out_kill, _) = self.kill_remote_process() + (out_kill, __) = self.kill_remote_process() self.out += "TIMEOUT \n" + out_kill self.err += "TIMEOUT : %s seconds elapsed\n" % str(self.timeout) try: self.get_log_files() except Exception as e: - # The 2 following lines must be suppressed after the bug is fixed - print("The error type: ") - print(type(e)) - print("The error: ") - print(e) - print("Local scope:") - print(dir()) - print("The str type: ") - print(type(str)) - print("str: ") - print(str) - self.err += _("Unable to get remote log files!") + self.err += _("Unable to get remote log files!\n%s\n" % str(e)) def total_duration(self): """Give the total duration of the job @@ -832,6 +828,16 @@ class Jobs(object): self.logger.flush() res_copy = machine.copy_sat(self.runner.cfg.VARS.salometoolsway, self.job_file_path) + + # set the local settings of sat on the remote machine using + # the init command + (__, out_dist, __) = machine.exec_command( + os.path.join(machine.sat_path, + "sat init --base default --workdir" + " default --log_dir default"), + self.logger) + out_dist.read() + # get the remote machine distribution using a sat command (__, out_dist, __) = machine.exec_command( os.path.join(machine.sat_path, @@ -840,14 +846,6 @@ class Jobs(object): machine.distribution = out_dist.read().decode().replace("\n", "") - # set the local settings of sat on the remote machine using - # the init command - (__, __, __) = machine.exec_command( - os.path.join(machine.sat_path, - "sat init --base unknown --workdir unknown" - " --log_dir unknown"), - self.logger) - # Print the status of the copy if res_copy == 0: self.logger.write('\r%s' % @@ -1662,6 +1660,38 @@ def get_config_file_path(job_config_name, l_cfg_dir): break return found, file_jobs_cfg +def develop_factorized_jobs(config_jobs): + '''update information about the jobs for the file xml_file + + :param config_jobs Config: the config corresponding to the jos description + ''' + developed_jobs_list = [] + for jb in config_jobs.jobs: + # case where the jobs are not developed + if type(jb.machine) == type(""): + developed_jobs_list.append(jb) + continue + # Case where the jobs must be developed + # Example: + # machine : ["CO7.2 physique", ["CO6.4 physique", $MONDAY, $TUESDAY ], "FD22"] + name_job = jb.name + for machine in jb.machine: + new_job = src.pyconf.deepCopyMapping(jb) + # case where there is a jobs on the machine corresponding to all + # days in when variable. + if type(machine) == type(""): + new_job.machine = machine + new_job.name = name_job + " / " + machine + else: + # case the days are re defined + new_job.machine = machine[0] + new_job.name = name_job + " / " + machine[0] + new_job.when = machine[1:] + developed_jobs_list.append(new_job) + + config_jobs.jobs = developed_jobs_list + + ## # Describes the command def description(): @@ -1730,6 +1760,9 @@ def run(args, runner, logger): "Job that was given in only_jobs option parameters\n") config_jobs.jobs = l_jb + # Parse the config jobs in order to develop all the factorized jobs + develop_factorized_jobs(config_jobs) + # Make a unique file that contain all the jobs in order to use it # on every machine name_pyconf = "_".join([os.path.basename(path)[:-len('.pyconf')] @@ -1751,6 +1784,7 @@ def run(args, runner, logger): logger, path_pyconf, config_jobs) + # SSH connection to all machines today_jobs.ssh_connection_all_machines() if options.test_connection: @@ -1768,9 +1802,12 @@ def run(args, runner, logger): files_to_copy = [] files_to_copy.append(os.path.join(xsl_dir, STYLESHEET_GLOBAL)) files_to_copy.append(os.path.join(xsl_dir, STYLESHEET_BOARD)) + files_to_copy.append(os.path.join(xsl_dir, "command.xsl")) files_to_copy.append(os.path.join(xsl_dir, "running.gif")) for file_path in files_to_copy: - shutil.copy2(file_path, log_dir) + # OP We use copy instead of copy2 to update the creation date + # So we can clean the LOGS directories easily + shutil.copy(file_path, log_dir) # Instanciate the Gui in order to produce the xml files that contain all # the boards