Beispiel #1
0
 def btn_delete(self):
     self.progressBar.setValue(0)
     idx = self.tableView.currentIndex().row()
     logging.debug("Select row {}.".format(idx))
     job = job_control.jobs()
     job.delete(idx)
     logging.debug("Reload tableview.")
     self.load_job()
     self.progressBar.setValue(100)
Beispiel #2
0
 def __init__(self, proxy, proxy_host, proxy_port, server, parent=None):
     logging.debug("Thread update_jobs created.")
     super(update_jobs, self).__init__(parent)
     self.proxy = proxy
     self.proxy_port = proxy_port
     self.proxy_host = proxy_host
     self.server = server
     with open('server_list.json', 'r') as fp:
         self.server_list = json.load(fp)
     self.jobs = job_control.jobs()
Beispiel #3
0
 def edit_job_info(self, item):
     prop = ["name", "status", "id"]
     j = job_control.jobs()
     if item.column() > 3:
         raise Exception("Column numbers exceeds.")
     if item.column() == 3:
         data = item.text().split('@')
         if len(data) != 2:
             raise Exception("Invalid remote address was given.")
         j.job_list[item.row()]['user'] = data[0]
         j.job_list[item.row()]['server'] = data[1]
     else:
         j.job_list[item.row()][prop[item.column()]] = str(item.text())
     print(j.job_list)
     j.save()
     self.load_job()
Beispiel #4
0
    def submit_job(self, remote, local, dos2unix=False):
        logging.debug("Start submit {} to {}@{}:{}".format(
            local, self.data['user'], self.data['server'], remote))
        folder = os.path.split(local)[-1]
        sFile = None
        for i in os.listdir(local):
            if os.path.isfile("{}/{}".format(local, i)):
                print(i)
                print(os.path.splitext(i)[-1])
                if os.path.splitext(i)[-1] == ".sbatch":
                    logging.debug("Find sbatch file {}".format(i))
                    sFile = i
                    break
        if sFile is None:
            logging.error("Error: No sbatch file found.")
            return True
        if dos2unix:
            tool.dos2unix(local)
        logging.debug("Start submit folder")
        self.upload(local, remote)
        logging.info("Upload Success.")
        logging.debug("Start submit sbatch")
        stdin, stdout, stderr = self.ssh.exec_command(
            "cd {}/{};sbatch {}".format(remote, folder, sFile))
        res, err = stdout.read().decode().replace('\n',
                                                  ''), stderr.read().decode()
        if err != '':
            logging.error("Script submit error for {}@{}:{}".format(
                self.data['user'], self.data['server'], err))
            return False
        logging.info("script submit return: {}".format(res))
        job_status = self.update_job_status(res.split(" ")[-1])
        logging.info("Query job.")
        job_list = job_control.jobs()

        job_list.add_job(res.split(" ")[-1],
                         self.data['server'],
                         self.data['user'],
                         '{}/{}'.format(remote, folder),
                         local,
                         job_status,
                         job_name=tool.get_job_name(f"{local}/{sFile}"))
        logging.info("Function upload down.")
Beispiel #5
0
 def load_job(self):
     logging.debug("Load job info.")
     show_hide = self.checkBox_3.isChecked()
     logging.debug("Show hide job:{}".format(show_hide))
     status_color_list = {
         "COMPLETED": [72, 209, 204],
         "CANCELLED": [255, 165, 0],
         "CANCELLED+": [255, 165, 0],
         "RUNNING": [0, 255, 127],
         "PENDING": [255, 255, 0],
         "FAILED": [255, 0, 0],
     }
     self.job_list = job_control.jobs().job_list
     self.job_data = QStandardItemModel(len(self.job_list), 4)
     self.job_data.setHorizontalHeaderLabels(
         ["Name", "status", "id", "server"])
     for i in range(len(self.job_list)):
         if 'name' in self.job_list[i]:
             self.job_data.setItem(i, 0,
                                   QStandardItem(self.job_list[i]['name']))
         else:
             self.job_data.setItem(i, 0, QStandardItem(''))
         self.job_data.setItem(i, 1,
                               QStandardItem(self.job_list[i]['status']))
         self.job_data.setItem(i, 2, QStandardItem(self.job_list[i]['id']))
         self.job_data.setItem(
             i, 3,
             QStandardItem("{}@{}".format(self.job_list[i]['user'],
                                          self.job_list[i]['server'])))
         if self.job_list[i]['status'] in status_color_list.keys():
             color = status_color_list[self.job_list[i]['status']]
             for j in range(0, 4):
                 self.job_data.item(i, j).setBackground(
                     QBrush(QColor(color[0], color[1], color[2])))
     self.tableView.setModel(self.job_data)
     for i in range(len(self.job_list)):
         self.tableView.showRow(i)
         if (show_hide is False) and self.job_list[i]['hide']:
             logging.debug("Hide job {}.".format(self.job_list[i]['id']))
             self.tableView.hideRow(i)
     self.tableView.horizontalHeader().setSectionResizeMode(1)
     self.job_data.itemChanged.connect(self.edit_job_info)