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)
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()
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()
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.")
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)