use of edu.cmu.tetradapp.app.hpc.manager.HpcJobManager in project tetrad by cmu-phil.
the class HpcJobsScheduledTask method run.
// Pooling job status from HPC nodes
@Override
public void run() {
TetradDesktop desktop = (TetradDesktop) DesktopController.getInstance();
if (desktop == null)
return;
final HpcAccountManager hpcAccountManager = desktop.getHpcAccountManager();
// No Hpc Account in the first place, no need to proceed!
List<HpcAccount> hpcAccounts = hpcAccountManager.getHpcAccounts();
if (hpcAccounts == null || hpcAccounts.isEmpty())
return;
final HpcJobManager hpcJobManager = desktop.getHpcJobManager();
// LOGGER.debug("HpcJobsScheduledTask: " + new Date(System.currentTimeMillis()));
// Load active jobs: Status (0 = Submitted; 1 = Running; 2 = Kill
// Request)
Map<HpcAccount, Set<HpcJobInfo>> submittedHpcJobInfos = hpcJobManager.getSubmittedHpcJobInfoMap();
for (HpcAccount hpcAccount : submittedHpcJobInfos.keySet()) {
LOGGER.debug("HpcJobsScheduledTask: " + hpcAccount.getConnectionName());
Set<HpcJobInfo> hpcJobInfos = submittedHpcJobInfos.get(hpcAccount);
// Pid-HpcJobInfo map
Map<Long, HpcJobInfo> hpcJobInfoMap = new HashMap<>();
for (HpcJobInfo hpcJobInfo : hpcJobInfos) {
if (hpcJobInfo.getPid() != null) {
long pid = hpcJobInfo.getPid().longValue();
hpcJobInfoMap.put(pid, hpcJobInfo);
LOGGER.debug("id: " + hpcJobInfo.getId() + " : " + hpcJobInfo.getAlgoId() + ": pid: " + pid + " : " + hpcJobInfo.getResultFileName());
} else {
LOGGER.debug("id: " + hpcJobInfo.getId() + " : " + hpcJobInfo.getAlgoId() + ": no pid! : " + hpcJobInfo.getResultFileName());
hpcJobInfos.remove(hpcJobInfo);
}
}
// Finished job map
HashMap<Long, HpcJobInfo> finishedJobMap = new HashMap<>();
for (HpcJobInfo job : hpcJobInfos) {
finishedJobMap.put(job.getPid(), job);
}
try {
List<JobInfo> jobInfos = hpcJobManager.getRemoteActiveJobs(hpcAccountManager, hpcAccount);
for (JobInfo jobInfo : jobInfos) {
LOGGER.debug("Remote pid: " + jobInfo.getId() + " : " + jobInfo.getAlgoId() + " : " + jobInfo.getResultFileName());
long pid = jobInfo.getId();
if (finishedJobMap.containsKey(pid)) {
finishedJobMap.remove(pid);
}
int remoteStatus = jobInfo.getStatus();
String recentStatusText = (remoteStatus == 0 ? "Submitted" : (remoteStatus == 1 ? "Running" : "Kill Request"));
// Local job
HpcJobInfo hpcJobInfo = hpcJobInfoMap.get(pid);
// map
HpcJobLog hpcJobLog = hpcJobManager.getHpcJobLog(hpcJobInfo);
if (hpcJobInfo != null) {
int status = hpcJobInfo.getStatus();
if (status != remoteStatus) {
// Update status
hpcJobInfo.setStatus(remoteStatus);
hpcJobManager.updateHpcJobInfo(hpcJobInfo);
hpcJobLog.setLastUpdatedTime(new Date(System.currentTimeMillis()));
String log = "Job status changed to " + recentStatusText;
LOGGER.debug(hpcJobInfo.getAlgoId() + " : id : " + hpcJobInfo.getId() + " : pid : " + pid);
LOGGER.debug(log);
hpcJobManager.logHpcJobLogDetail(hpcJobLog, remoteStatus, log);
}
}
}
// Download finished jobs' results
if (finishedJobMap.size() > 0) {
Set<ResultFile> resultFiles = hpcJobManager.listRemoteAlgorithmResultFiles(hpcAccountManager, hpcAccount);
Set<String> resultFileNames = new HashSet<>();
for (ResultFile resultFile : resultFiles) {
resultFileNames.add(resultFile.getName());
// LOGGER.debug(hpcAccount.getConnectionName()
// + " Result : " + resultFile.getName());
}
for (HpcJobInfo hpcJobInfo : finishedJobMap.values()) {
// Job
// is
// done
// or
// killed or
// time-out
HpcJobLog hpcJobLog = hpcJobManager.getHpcJobLog(hpcJobInfo);
String recentStatusText = "Job finished";
// Finished
int recentStatus = 3;
if (hpcJobInfo.getStatus() == 2) {
recentStatusText = "Job killed";
// Killed
recentStatus = 4;
}
hpcJobInfo.setStatus(recentStatus);
hpcJobManager.updateHpcJobInfo(hpcJobInfo);
// LOGGER.debug("hpcJobInfo: id: "
// + hpcJobInfo.getId() + " : "
// + hpcJobInfo.getStatus());
hpcJobManager.logHpcJobLogDetail(hpcJobLog, recentStatus, recentStatusText);
LOGGER.debug(hpcJobInfo.getAlgoId() + " : id : " + hpcJobInfo.getId() + " : " + recentStatusText);
GeneralAlgorithmEditor editor = hpcJobManager.getGeneralAlgorithmEditor(hpcJobInfo);
if (editor != null) {
LOGGER.debug("GeneralAlgorithmEditor is not null");
String resultJsonFileName = hpcJobInfo.getResultJsonFileName();
String errorResultFileName = hpcJobInfo.getErrorResultFileName();
if (resultFileNames.contains(resultJsonFileName)) {
// Result Downloaded
recentStatus = 5;
String json = downloadAlgorithmResultFile(hpcAccountManager, hpcJobManager, hpcAccount, resultJsonFileName, editor);
if (!json.toLowerCase().contains("not found")) {
editor.setAlgorithmResult(json);
}
String log = "Result downloaded";
hpcJobManager.logHpcJobLogDetail(hpcJobLog, recentStatus, log);
LOGGER.debug(hpcJobInfo.getAlgoId() + " : id : " + hpcJobInfo.getId() + " : " + log);
} else if (resultFileNames.contains(errorResultFileName)) {
// Error Result Downloaded
recentStatus = 6;
String error = downloadAlgorithmResultFile(hpcAccountManager, hpcJobManager, hpcAccount, errorResultFileName, editor);
if (!error.toLowerCase().contains("not found")) {
editor.setAlgorithmErrorResult(error);
}
String log = "Error Result downloaded";
hpcJobManager.logHpcJobLogDetail(hpcJobLog, recentStatus, log);
LOGGER.debug(hpcJobInfo.getAlgoId() + " : id : " + hpcJobInfo.getId() + " : " + log);
} else {
// Try again
Thread.sleep(5000);
String json = downloadAlgorithmResultFile(hpcAccountManager, hpcJobManager, hpcAccount, resultJsonFileName, editor);
if (!json.toLowerCase().contains("not found")) {
editor.setAlgorithmResult(json);
// Result Downloaded
recentStatus = 5;
String log = "Result downloaded";
hpcJobManager.logHpcJobLogDetail(hpcJobLog, recentStatus, log);
LOGGER.debug(hpcJobInfo.getAlgoId() + " : id : " + hpcJobInfo.getId() + " : " + log);
} else {
String error = downloadAlgorithmResultFile(hpcAccountManager, hpcJobManager, hpcAccount, errorResultFileName, editor);
if (!error.toLowerCase().contains("not found")) {
editor.setAlgorithmErrorResult(error);
// Error Result
recentStatus = 6;
// Downloaded
String log = "Error Result downloaded";
hpcJobManager.logHpcJobLogDetail(hpcJobLog, recentStatus, log);
LOGGER.debug(hpcJobInfo.getAlgoId() + " : id : " + hpcJobInfo.getId() + " : " + log);
} else {
// Result Not Found
recentStatus = 7;
String log = resultJsonFileName + " not found";
hpcJobManager.logHpcJobLogDetail(hpcJobLog, recentStatus, log);
LOGGER.debug(hpcJobInfo.getAlgoId() + " : id : " + hpcJobInfo.getId() + " : " + log);
}
}
}
}
hpcJobManager.removeFinishedHpcJob(hpcJobInfo);
}
} else {
LOGGER.debug("No finished job yet.");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
use of edu.cmu.tetradapp.app.hpc.manager.HpcJobManager in project tetrad by cmu-phil.
the class DeleteHpcJobInfoAction method actionPerformed.
@Override
public void actionPerformed(ActionEvent e) {
JTable table = (JTable) e.getSource();
int modelRow = Integer.valueOf(e.getActionCommand());
DefaultTableModel finishedJobTableModel = (DefaultTableModel) table.getModel();
long jobId = Long.valueOf(finishedJobTableModel.getValueAt(modelRow, HpcJobActivityEditor.ID_COLUMN).toString()).longValue();
int answer = JOptionPane.showConfirmDialog(parentComp, "Would you like to delete this HPC job id: " + jobId + "?", "Delete HPC job", JOptionPane.YES_NO_OPTION);
if (answer == JOptionPane.NO_OPTION)
return;
TetradDesktop desktop = (TetradDesktop) DesktopController.getInstance();
final HpcJobManager hpcJobManager = desktop.getHpcJobManager();
HpcJobInfo hpcJobInfo = hpcJobManager.findHpcJobInfoById(Long.valueOf(finishedJobTableModel.getValueAt(modelRow, HpcJobActivityEditor.ID_COLUMN).toString()).longValue());
if (hpcJobInfo != null) {
// Update table
finishedJobTableModel.removeRow(modelRow);
table.updateUI();
hpcJobManager.removeHpcJobInfoTransaction(hpcJobInfo);
}
}
use of edu.cmu.tetradapp.app.hpc.manager.HpcJobManager in project tetrad by cmu-phil.
the class HpcJobActivityEditor method getActiveRowData.
private Vector<Vector<String>> getActiveRowData(final TetradDesktop desktop, final List<HpcAccount> exclusiveHpcAccounts) throws Exception {
final Vector<Vector<String>> activeRowData = new Vector<>();
final HpcJobManager hpcJobManager = desktop.getHpcJobManager();
Map<Long, HpcJobInfo> activeHpcJobInfoMap = null;
// Pending
Map<HpcAccount, Set<HpcJobInfo>> pendingHpcJobInfoMap = hpcJobManager.getPendingHpcJobInfoMap();
pendingDisplayHpcJobInfoSet.clear();
for (HpcAccount hpcAccount : pendingHpcJobInfoMap.keySet()) {
if (exclusiveHpcAccounts != null && !exclusiveHpcAccounts.contains(hpcAccount)) {
continue;
}
Set<HpcJobInfo> pendingHpcJobSet = pendingHpcJobInfoMap.get(hpcAccount);
for (HpcJobInfo hpcJobInfo : pendingHpcJobSet) {
// For monitoring purpose
pendingDisplayHpcJobInfoSet.add(hpcJobInfo);
if (activeHpcJobInfoMap == null) {
activeHpcJobInfoMap = new HashMap<>();
}
activeHpcJobInfoMap.put(hpcJobInfo.getId(), hpcJobInfo);
}
}
// Submitted
Map<HpcAccount, Set<HpcJobInfo>> submittedHpcJobInfoMap = hpcJobManager.getSubmittedHpcJobInfoMap();
submittedDisplayHpcJobInfoSet.clear();
for (HpcAccount hpcAccount : submittedHpcJobInfoMap.keySet()) {
if (exclusiveHpcAccounts != null && !exclusiveHpcAccounts.contains(hpcAccount)) {
continue;
}
Set<HpcJobInfo> submittedHpcJobSet = submittedHpcJobInfoMap.get(hpcAccount);
for (HpcJobInfo hpcJobInfo : submittedHpcJobSet) {
// For monitoring purpose
submittedDisplayHpcJobInfoSet.add(hpcJobInfo);
if (activeHpcJobInfoMap == null) {
activeHpcJobInfoMap = new HashMap<>();
}
activeHpcJobInfoMap.put(hpcJobInfo.getId(), hpcJobInfo);
}
}
if (activeHpcJobInfoMap != null) {
List<Long> activeJobIds = new ArrayList<>(activeHpcJobInfoMap.keySet());
Collections.sort(activeJobIds);
Collections.reverse(activeJobIds);
for (Long jobId : activeJobIds) {
final HpcJobInfo hpcJobInfo = activeHpcJobInfoMap.get(jobId);
Vector<String> rowData = new Vector<>();
HpcJobLog hpcJobLog = hpcJobManager.getHpcJobLog(hpcJobInfo);
// Local job id
rowData.add(hpcJobInfo.getId().toString());
int status = hpcJobInfo.getStatus();
switch(status) {
case -1:
rowData.add("Pending");
break;
case 0:
rowData.add("Submitted");
break;
case 1:
rowData.add("Running");
break;
case 2:
rowData.add("Kill Request");
break;
}
// Locally added time
rowData.add(FilePrint.fileTimestamp(hpcJobLog.getAddedTime().getTime()));
// HPC node name
HpcAccount hpcAccount = hpcJobInfo.getHpcAccount();
rowData.add(hpcAccount.getConnectionName());
// Algorithm
rowData.add(hpcJobInfo.getAlgoId());
// Dataset uploading progress
AlgorithmParamRequest algorParamReq = hpcJobInfo.getAlgorithmParamRequest();
String datasetPath = algorParamReq.getDatasetPath();
int progress = hpcJobManager.getUploadFileProgress(datasetPath);
if (progress > -1 && progress < 100) {
rowData.add("" + progress + "%");
} else {
rowData.add("Done");
}
// Prior Knowledge uploading progress
String priorKnowledgePath = algorParamReq.getPriorKnowledgePath();
if (priorKnowledgePath != null) {
progress = hpcJobManager.getUploadFileProgress(priorKnowledgePath);
if (progress > -1 && progress < 100) {
rowData.add("" + progress + "%");
} else {
rowData.add("Done");
}
} else {
rowData.add("Skipped");
}
if (status > -1) {
// Submitted time
rowData.add(FilePrint.fileTimestamp(hpcJobInfo.getSubmittedTime().getTime()));
// HPC job id
rowData.add(hpcJobInfo.getPid() != null ? "" + hpcJobInfo.getPid() : "");
} else {
rowData.add("");
rowData.add("");
}
// Last update time
rowData.add(FilePrint.fileTimestamp(hpcJobLog.getLastUpdatedTime().getTime()));
// Cancel job
rowData.add("Cancel");
activeRowData.add(rowData);
}
}
return activeRowData;
}
use of edu.cmu.tetradapp.app.hpc.manager.HpcJobManager in project tetrad by cmu-phil.
the class HpcJobActivityEditor method buildActivityContent.
private void buildActivityContent(final JPanel activityPanel, final TetradDesktop desktop) throws Exception {
jobsTable = new JTable();
jobsTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
final JScrollPane scrollTablePane = new JScrollPane(jobsTable);
tabbedPane = new JTabbedPane();
final JPanel activeJobsPanel = new JPanel(new BorderLayout());
activeJobsPanel.add(scrollTablePane, BorderLayout.CENTER);
tabbedPane.add("Active Jobs", activeJobsPanel);
final KillHpcJobAction killJobAction = new KillHpcJobAction(this);
final JPanel finishedJobsPanel = new JPanel(new BorderLayout());
tabbedPane.add("Finished Jobs", finishedJobsPanel);
final DeleteHpcJobInfoAction deleteJobAction = new DeleteHpcJobInfoAction(this);
ChangeListener changeListener = new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
JTabbedPane sourceTabbedPane = (JTabbedPane) e.getSource();
int index = sourceTabbedPane.getSelectedIndex();
if (index == 0) {
finishedJobsPanel.remove(scrollTablePane);
activeJobsPanel.add(scrollTablePane, BorderLayout.CENTER);
try {
final Vector<String> activeColumnNames = genActiveJobColumnNames();
final Vector<Vector<String>> activeRowData = getActiveRowData(desktop, checkedHpcAccountList);
final DefaultTableModel activeJobTableModel = new HpcJobInfoTableModel(activeRowData, activeColumnNames, KILL_BUTTON_COLUMN);
jobsTable.setModel(activeJobTableModel);
if (activeRowData.size() > 0) {
new ButtonColumn(jobsTable, killJobAction, KILL_BUTTON_COLUMN);
}
adjustActiveJobsWidthColumns(jobsTable);
jobsTable.updateUI();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} else if (index == 1) {
activeJobsPanel.remove(scrollTablePane);
finishedJobsPanel.add(scrollTablePane, BorderLayout.CENTER);
try {
final Vector<String> finishedColumnNames = genFinishedJobColumnNames();
final Vector<Vector<String>> finishedRowData = getFinishedRowData(desktop, checkedHpcAccountList);
final DefaultTableModel finishedJobTableModel = new HpcJobInfoTableModel(finishedRowData, finishedColumnNames, DELETE_BUTTON_COLUMN);
jobsTable.setModel(finishedJobTableModel);
if (finishedRowData.size() > 0) {
new ButtonColumn(jobsTable, deleteJobAction, DELETE_BUTTON_COLUMN);
}
adjustFinishedJobsWidthColumns(jobsTable);
jobsTable.updateUI();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
};
tabbedPane.addChangeListener(changeListener);
activityPanel.add(tabbedPane, BorderLayout.CENTER);
final HpcJobManager hpcJobManager = desktop.getHpcJobManager();
// Start active job updater
pendingJobUpdater = new PendingHpcJobUpdaterTask(hpcJobManager, this);
submittedJobUpdater = new SubmittedHpcJobUpdaterTask(hpcJobManager, this);
tabbedPane.setSelectedIndex(-1);
tabbedPane.setSelectedIndex(0);
startUpdaters();
}
use of edu.cmu.tetradapp.app.hpc.manager.HpcJobManager in project tetrad by cmu-phil.
the class GeneralAlgorithmEditor method doRemoteCompute.
private void doRemoteCompute(final GeneralAlgorithmRunner runner, final HpcAccount hpcAccount) throws Exception {
// **********************
// Show progress panel *
// **********************
Frame ancestor = (Frame) JOptionUtils.centeringComp().getTopLevelAncestor();
final JDialog progressDialog = new JDialog(ancestor, "HPC Job Submission's Progress...", false);
Dimension progressDim = new Dimension(500, 150);
JTextArea progressTextArea = new JTextArea();
progressTextArea.setPreferredSize(progressDim);
progressTextArea.setEditable(false);
JScrollPane progressScroller = new JScrollPane(progressTextArea);
progressScroller.setAlignmentX(LEFT_ALIGNMENT);
progressDialog.setLayout(new BorderLayout());
progressDialog.getContentPane().add(progressScroller, BorderLayout.CENTER);
progressDialog.pack();
Dimension screenDim = Toolkit.getDefaultToolkit().getScreenSize();
progressDialog.setLocation((screenDim.width - progressDim.width) / 2, (screenDim.height - progressDim.height) / 2);
progressDialog.setVisible(true);
int totalProcesses = 4;
String newline = "\n";
String tab = "\t";
int progressTextLength = 0;
DataModel dataModel = runner.getDataModel();
// 1. Generate temp file
Path file = null;
Path prior = null;
try {
// ****************************
// Data Preparation Progress *
// ****************************
String dataMessage = String.format("1/%1$d Data Preparation", totalProcesses);
progressTextArea.append(dataMessage);
progressTextArea.append(tab);
progressTextLength = progressTextArea.getText().length();
progressTextArea.append("Preparing...");
progressTextArea.updateUI();
file = Files.createTempFile("Tetrad-data-", ".txt");
// LOGGER.info(file.toAbsolutePath().toString());
List<String> tempLine = new ArrayList<>();
// Header
List<Node> variables = dataModel.getVariables();
if ((variables == null || variables.isEmpty()) && runner.getSourceGraph() != null) {
variables = runner.getSourceGraph().getNodes();
}
String vars = StringUtils.join(variables.toArray(), tab);
tempLine.add(vars);
// Data
DataSet dataSet = (DataSet) dataModel;
for (int i = 0; i < dataSet.getNumRows(); i++) {
String line = null;
for (int j = 0; j < dataSet.getNumColumns(); j++) {
String cell = null;
if (dataSet.isContinuous()) {
cell = String.valueOf(dataSet.getDouble(i, j));
} else {
cell = String.valueOf(dataSet.getInt(i, j));
}
if (line == null) {
line = cell;
} else {
line = line + "\t" + cell;
}
}
tempLine.add(line);
}
// for (String line : tempLine) {
// LOGGER.info(line);
// }
Files.write(file, tempLine);
// Get file's MD5 hash and use it as its identifier
String datasetMd5 = MessageDigestHash.computeMD5Hash(file);
progressTextArea.replaceRange("Done", progressTextLength, progressTextArea.getText().length());
progressTextArea.append(newline);
progressTextArea.updateUI();
// ***************************************
// Prior Knowledge Preparation Progress *
// ***************************************
String priorMessage = String.format("2/%1$d Prior Knowledge Preparation", totalProcesses);
progressTextArea.append(priorMessage);
progressTextArea.append(tab);
progressTextLength = progressTextArea.getText().length();
progressTextArea.append("Preparing...");
progressTextArea.updateUI();
// 2. Generate temp prior knowledge file
Knowledge2 knowledge = (Knowledge2) dataModel.getKnowledge();
if (knowledge != null && !knowledge.isEmpty()) {
prior = Files.createTempFile(file.getFileName().toString(), ".prior");
knowledge.saveKnowledge(Files.newBufferedWriter(prior));
progressTextArea.replaceRange("Done", progressTextLength, progressTextArea.getText().length());
progressTextArea.append(newline);
progressTextArea.updateUI();
} else {
progressTextArea.replaceRange("Skipped", progressTextLength, progressTextArea.getText().length());
progressTextArea.append(newline);
progressTextArea.updateUI();
}
// Get knowledge file's MD5 hash and use it as its identifier
String priorKnowledgeMd5 = null;
if (prior != null) {
priorKnowledgeMd5 = MessageDigestHash.computeMD5Hash(prior);
}
// *******************************************
// Algorithm Parameter Preparation Progress *
// *******************************************
String algorMessage = String.format("3/%1$d Algorithm Preparation", totalProcesses);
progressTextArea.append(algorMessage);
progressTextArea.append(tab);
progressTextLength = progressTextArea.getText().length();
progressTextArea.append("Preparing...");
progressTextArea.updateUI();
// 3.1 Algorithm Id, Independent Test Id, Score Id
AlgorithmModel algoModel = algorithmList.getSelectedValue();
String algoId = algoModel.getAlgorithm().getAnnotation().command();
// Test
String testId = null;
if (indTestComboBox.isEnabled()) {
IndependenceTestModel indTestModel = indTestComboBox.getItemAt(indTestComboBox.getSelectedIndex());
testId = indTestModel.getIndependenceTest().getAnnotation().command();
}
// Score
String scoreId = null;
if (scoreComboBox.isEnabled()) {
ScoreModel scoreModel = scoreComboBox.getItemAt(scoreComboBox.getSelectedIndex());
scoreId = scoreModel.getScore().getAnnotation().command();
}
// 3.2 Parameters
AlgorithmParamRequest algorithmParamRequest = new AlgorithmParamRequest();
// Test and score
algorithmParamRequest.setTestId(testId);
algorithmParamRequest.setScoreId(scoreId);
// Dataset and Prior paths
String datasetPath = file.toAbsolutePath().toString();
LOGGER.info(datasetPath);
algorithmParamRequest.setDatasetPath(datasetPath);
algorithmParamRequest.setDatasetMd5(datasetMd5);
if (prior != null) {
String priorKnowledgePath = prior.toAbsolutePath().toString();
LOGGER.info(priorKnowledgePath);
algorithmParamRequest.setPriorKnowledgePath(priorKnowledgePath);
algorithmParamRequest.setPriorKnowledgeMd5(priorKnowledgeMd5);
}
// VariableType
if (dataModel.isContinuous()) {
algorithmParamRequest.setVariableType("continuous");
} else if (dataModel.isDiscrete()) {
algorithmParamRequest.setVariableType("discrete");
} else {
algorithmParamRequest.setVariableType("mixed");
}
// FileDelimiter
// Pre-determined
String fileDelimiter = "tab";
algorithmParamRequest.setFileDelimiter(fileDelimiter);
Set<AlgorithmParameter> AlgorithmParameters = new HashSet<>();
Parameters parameters = runner.getParameters();
List<String> parameterNames = runner.getAlgorithm().getParameters();
for (String parameter : parameterNames) {
String value = parameters.get(parameter).toString();
LOGGER.info("parameter: " + parameter + "\tvalue: " + value);
if (value != null) {
AlgorithmParameter algorParam = new AlgorithmParameter();
algorParam.setParameter(parameter);
algorParam.setValue(value);
AlgorithmParameters.add(algorParam);
}
}
algorithmParamRequest.setAlgorithmParameters(AlgorithmParameters);
String maxHeapSize = null;
do {
maxHeapSize = JOptionPane.showInputDialog(progressDialog, "Enter Your Request Java Max Heap Size (GB):", "5");
} while (maxHeapSize != null && !StringUtils.isNumeric(maxHeapSize));
if (maxHeapSize != null) {
JvmOptions jvmOptions = new JvmOptions();
jvmOptions.setMaxHeapSize(Integer.parseInt(maxHeapSize));
algorithmParamRequest.setJvmOptions(jvmOptions);
}
// Hpc parameters
final HpcAccountManager hpcAccountManager = desktop.getHpcAccountManager();
JsonWebToken jsonWebToken = HpcAccountUtils.getJsonWebToken(hpcAccountManager, hpcAccount);
if (jsonWebToken.getWallTime() != null) {
// User allowed to customize the job's wall time
String[] wallTime = jsonWebToken.getWallTime();
Object userwallTime = JOptionPane.showInputDialog(progressDialog, "Wall Time:", "Choose Your Wall Time (in Hour)", JOptionPane.QUESTION_MESSAGE, null, wallTime, wallTime[0]);
if (wallTime != null && userwallTime != null) {
HpcParameter hpcParameter = new HpcParameter();
hpcParameter.setKey("walltime");
hpcParameter.setValue(userwallTime.toString());
LOGGER.info("walltime: " + userwallTime.toString());
Set<HpcParameter> hpcParameters = new HashSet<>();
hpcParameters.add(hpcParameter);
algorithmParamRequest.setHpcParameters(hpcParameters);
}
}
progressTextArea.replaceRange("Done", progressTextLength, progressTextArea.getText().length());
progressTextArea.append(newline);
progressTextArea.updateUI();
// ********************************
// Adding HPC Job Queue Progress *
// ********************************
String dbMessage = String.format("4/%1$d HPC Job Queue Submission", totalProcesses);
progressTextArea.append(dbMessage);
progressTextArea.append(tab);
progressTextLength = progressTextArea.getText().length();
progressTextArea.append("Preparing...");
progressTextArea.updateUI();
HpcJobManager hpcJobManager = desktop.getHpcJobManager();
// 4.1 Save HpcJobInfo
hpcJobInfo = new HpcJobInfo();
hpcJobInfo.setAlgoId(algoId);
hpcJobInfo.setAlgorithmParamRequest(algorithmParamRequest);
hpcJobInfo.setStatus(-1);
hpcJobInfo.setHpcAccount(hpcAccount);
hpcJobManager.submitNewHpcJobToQueue(hpcJobInfo, this);
progressTextArea.replaceRange("Done", progressTextLength, progressTextArea.getText().length());
progressTextArea.append(newline);
progressTextArea.updateUI();
this.jsonResult = null;
JOptionPane.showMessageDialog(ancestor, "The " + hpcJobInfo.getAlgoId() + " job on the " + hpcJobInfo.getHpcAccount().getConnectionName() + " node is in the queue successfully!");
} catch (IOException exception) {
LOGGER.error("", exception);
} finally {
progressDialog.setVisible(false);
progressDialog.dispose();
}
(new HpcJobActivityAction("")).actionPerformed(null);
}
Aggregations