Skip to content
Snippets Groups Projects
Commit bea4085e authored by Daniel Manja's avatar Daniel Manja
Browse files

Include newer slurm job generator

Closes #374
parent 538be2f3
No related branches found
No related tags found
2 merge requests!673Automated merge from preview to main,!672Include newer slurm job generator
...@@ -16,21 +16,21 @@ ...@@ -16,21 +16,21 @@
<button type="button" class="collapsible">General</button> <button type="button" class="collapsible">General</button>
<div class="content"> <div class="content">
<div class="row"> <div class="row">
<label class="cell-name">Job name</label> <label class="cell-name">Job name (<tt>-J, --job-name</tt>) </label>
<div class="cell-tooltip"> <div class="cell-tooltip">
<img id="job-name-info" class="info-img" src="../misc/info.png" title="help"> <img id="job-name-info" class="info-img" src="../misc/info.png" title="help">
</div> </div>
<input id="job-name" class="cell-input" type="text"> <input id="job-name" class="cell-input" type="text">
</div> </div>
<div class="row"> <div class="row">
<label class="cell-name">Account</label> <label class="cell-name">Project (<tt>-A, --account</tt>)</label>
<div class="cell-tooltip"> <div class="cell-tooltip">
<img id="account-info" class="info-img" src="../misc/info.png" title="help"> <img id="account-info" class="info-img" src="../misc/info.png" title="help">
</div> </div>
<input id="account" class="cell-input" type="text"> <input id="account" class="cell-input" type="text">
</div> </div>
<div class="row"> <div class="row">
<label class="cell-name">Email</label> <label class="cell-name">Email (<tt>--mail-user, --mail-type</tt>)</label>
<div class="cell-tooltip"> <div class="cell-tooltip">
<img id="mail-info" class="info-img" src="../misc/info.png" title="help"> <img id="mail-info" class="info-img" src="../misc/info.png" title="help">
</div> </div>
...@@ -51,56 +51,56 @@ ...@@ -51,56 +51,56 @@
<div class="content"> <div class="content">
<div class="partition-input"> <div class="partition-input">
<div class="row"> <div class="row">
<label class="cell-name">Time limit</label> <label class="cell-name">Time limit (<tt>-t, --time</tt>)</label>
<div class="cell-tooltip"> <div class="cell-tooltip">
<img class="info-img" src="../misc/info.png" title="days-hours:minutes:seconds"> <img id="time-info" class="info-img" src="../misc/info.png" title="days-hours:minutes:seconds">
</div> </div>
<input id="time" class="cell-input" type="text" placeholder="00-00:00:00"> <input id="time" class="cell-input" type="text" placeholder="00-00:00:00">
<label id="time-text" class="limits cell-input"></label> <label id="time-text" class="limits cell-input"></label>
</div> </div>
<div class="row"> <div class="row">
<label class="cell-name">Partition</label> <label class="cell-name">Partition (<tt>-p, --partition</tt>)</label>
<div class="cell-tooltip"> <div class="cell-tooltip">
<img class="info-img" src="../misc/info.png" title="help"> <img id="partition-info" class="info-img" src="../misc/info.png" title="help">
</div> </div>
<select id="partition" class="cell-input"></select> <select id="partition" class="cell-input"></select>
</div> </div>
<div class="row"> <div class="row">
<label class="cell-name">Nodes</label> <label class="cell-name">Nodes (<tt>-N, --nodes</tt>)</label>
<div class="cell-tooltip"> <div class="cell-tooltip">
<img class="info-img" src="../misc/info.png" title="help"> <img id="nodes-info" class="info-img" src="../misc/info.png" title="help">
</div> </div>
<input id="nodes" class="cell-input" type="number" min="1"> <input id="nodes" class="cell-input" type="number">
<label id="nodes-text" class="limits cell-input"></label> <label id="nodes-text" class="limits cell-input"></label>
</div> </div>
<div class="row"> <div class="row">
<label class="cell-name">Tasks</label> <label class="cell-name">Tasks (<tt>-n, --ntasks</tt>)</label>
<div class="cell-tooltip"> <div class="cell-tooltip">
<img class="info-img" src="../misc/info.png" title="help"> <img id="tasks-info" class="info-img" src="../misc/info.png" title="help">
</div> </div>
<input id="tasks" class="cell-input" type="number" min="1"> <input id="tasks" class="cell-input" type="number">
<label id="tasks-text" class="limits cell-input"></label> <label id="tasks-text" class="limits cell-input"></label>
</div> </div>
<div class="row"> <div class="row">
<label class="cell-name">Tasks/node</label> <label class="cell-name">Tasks/node</label>
<div class="cell-tooltip"> <div class="cell-tooltip">
<img class="info-img" src="../misc/info.png" title="help"> <img id="tasks/node-info" class="info-img" src="../misc/info.png" title="help">
</div> </div>
<input id="tasks/node" class="cell-input" type="number" min="1"> <input id="tasks/node" class="cell-input" type="number">
<label id="tasks/node-text" class="limits cell-input"></label> <label id="tasks/node-text" class="limits cell-input"></label>
</div> </div>
<div class="row"> <div class="row">
<label class="cell-name">CPUs/task</label> <label class="cell-name">CPUs per task (<tt>-c, --cpus-per-task</tt>)</label>
<div class="cell-tooltip"> <div class="cell-tooltip">
<img class="info-img" src="../misc/info.png" title="help"> <img id="cpus-info" class="info-img" src="../misc/info.png" title="help">
</div> </div>
<input id="cpus" class="cell-input" type="number" min="1"> <input id="cpus" class="cell-input" type="number">
<label id="cpus-text" class="limits cell-input"></label> <label id="cpus-text" class="limits cell-input"></label>
</div> </div>
<div id="div-thread" class="row"> <div id="div-thread" class="row">
<span class="cell-name"></span> <span class="cell-name"></span>
<div class="cell-tooltip"> <div class="cell-tooltip">
<img class="info-img" src="../misc/info.png" title="help"> <img id="nomultithread-info" class="info-img" src="../misc/info.png" title="help">
</div> </div>
<div class="cell-input"> <div class="cell-input">
<input id="nomultithread" class="cell" type="checkbox"> <input id="nomultithread" class="cell" type="checkbox">
...@@ -108,28 +108,28 @@ ...@@ -108,28 +108,28 @@
</div> </div>
</div> </div>
<div id="div-gpu" class="row"> <div id="div-gpu" class="row">
<label class="cell-name">GPUs/node</label> <label class="cell-name">GPUs per node (<tt>--gpus-per-node</tt>)</label>
<div class="cell-tooltip"> <div class="cell-tooltip">
<img class="info-img" src="../misc/info.png" title="help"> <img id="gpus-info" class="info-img" src="../misc/info.png" title="help">
</div> </div>
<input id="gpus" class="cell-input" type="number" min="1"> <input id="gpus" class="cell-input" type="number">
<label id="gpus-text" class="limits cell-input"></label> <label id="gpus-text" class="limits cell-input"></label>
</div> </div>
<div id="div-gpu/task" class="row"> <div id="div-gpu/task" class="row">
<label class="cell-name">GPUs/task</label> <label class="cell-name">GPUs per task (<tt>--gpus-per-task</tt>)</label>
<div class="cell-tooltip"> <div class="cell-tooltip">
<img class="info-img" src="../misc/info.png" title="help"> <img id="gpus/task-info" class="info-img" src="../misc/info.png" title="help">
</div> </div>
<input id="gpus/task" class="cell-input" type="number" min="1"> <input id="gpus/task" class="cell-input" type="number">
<label id="gpus/task-text" class="limits cell-input"></label> <label id="gpus/task-text" class="limits cell-input"></label>
</div> </div>
<div class="row"> <div class="row">
<label class="cell-name">RAM/CPU</label> <label class="cell-name">Memory per CPU (<tt>--mem-per-cpu</tt>)</label>
<div class="cell-tooltip"> <div class="cell-tooltip">
<img class="info-img" src="../misc/info.png" title="help"> <img id="mem-info" class="info-img" src="../misc/info.png" title="help">
</div> </div>
<div class="cell-input"> <div class="cell-input">
<input id="mem" type="number" min="1"> <input id="mem" type="number">
<select id="byte"> <select id="byte">
<option value="M" title="placeholder" selected="selected">MiB</option> <option value="M" title="placeholder" selected="selected">MiB</option>
<option value="G" title="placeholder">GiB</option> <option value="G" title="placeholder">GiB</option>
...@@ -140,11 +140,11 @@ ...@@ -140,11 +140,11 @@
<div class="row"> <div class="row">
<span class="cell-name"></span> <span class="cell-name"></span>
<div class="cell-tooltip"> <div class="cell-tooltip">
<img class="info-img" src="../misc/info.png" title="help"> <img id="exclusive-info" class="info-img" src="../misc/info.png" title="help">
</div> </div>
<div class="cell-input"> <div class="cell-input">
<input id="exclusive" type="checkbox"> <input id="exclusive" type="checkbox">
<lable for="exclusive">Exclusive</lable> <lable for="exclusive">Exclusive (<tt>--exclusive</tt>)</lable>
</div> </div>
</div> </div>
</div> </div>
...@@ -155,119 +155,113 @@ ...@@ -155,119 +155,113 @@
<button type="button" class="collapsible">Files</button> <button type="button" class="collapsible">Files</button>
<div class="content"> <div class="content">
<div class="input"> <div class="row">
<div class="row"> <label class="cell-name">Executable</label>
<label class="cell-name">Executable</label> <div class="cell-tooltip">
<div class="cell-tooltip"> <img id="executable-info" class="info-img" src="../misc/info.png" title="help">
<img class="info-img" src="../misc/info.png" title="help">
</div>
<input id="executable" class="cell-input executable" type="text">
</div> </div>
<div class="row"> <input id="executable" class="cell-input executable" type="text">
<span class="cell-name"></span> </div>
<div class="cell-tooltip"> <div class="row">
<img class="info-img" src="../misc/info.png" title="help"> <span class="cell-name"></span>
</div> <div class="cell-tooltip">
<div class="cell-input"> <img id="one-output-info" class="info-img" src="../misc/info.png" title="help">
<input id="one-output" type="checkbox">
<lable for="one-output">just one output file</lable>
</div>
</div> </div>
<div class="row"> <div class="cell-input">
<label class="cell-name">Output file</label> <input id="one-output" type="checkbox">
<div class="cell-tooltip"> <lable for="one-output">just one output file</lable>
<img class="info-img" src="../misc/info.png" title="help">
</div>
<input id="output-file" class="cell-input" type="text">
</div> </div>
<div id="err-div" class="row"> </div>
<label class="cell-name">Error file</label> <div class="row">
<div class="cell-tooltip"> <label class="cell-name">Output file (<tt>-o, --output</tt>) </label>
<img class="info-img" src="../misc/info.png" title="help"> <div class="cell-tooltip">
</div> <img id="output-file-info" class="info-img" src="../misc/info.png" title="help">
<input id="error-file" class="cell-input" type="text"> </div>
<input id="output-file" class="cell-input" type="text">
</div>
<div id="err-div" class="row">
<label class="cell-name">Error file (<tt>-e, --error</tt>) </label>
<div class="cell-tooltip">
<img id="error-file-info" class="info-img" src="../misc/info.png" title="help">
</div> </div>
<input id="error-file" class="cell-input" type="text">
</div> </div>
</div> </div>
<button type="button" class="collapsible">Advanced</button> <button type="button" class="collapsible">Advanced</button>
<div class="content"> <div class="content">
<div class="input"> <div class="row">
<div class="row"> <label class="cell-name">Array (<tt>-a, --array</tt>)</label>
<label class="cell-name">Array</label> <div class="cell-tooltip">
<div class="cell-tooltip"> <img id="array-info" class="info-img" src="../misc/info.png" title="help">
<img class="info-img" src="../misc/info.png" title="help">
</div>
<input id="array" class="cell-input" type="text" placeholder="1-5">
</div> </div>
<div class="row"> <input id="array" class="cell-input" type="text" placeholder="1-5">
<label class="cell-name">Dependency</label> </div>
<div class="cell-tooltip"> <div class="row">
<img class="info-img" src="../misc/info.png" title="help"> <label class="cell-name">Dependency (<tt>-d, --dependency</tt>)</label>
</div> <div class="cell-tooltip">
<div class="cell-input"> <img id="dependency-info" class="info-img" src="../misc/info.png" title="help">
<select id="type-depend"> </div>
<option value="none" title="placeholder" selected="selected"></option> <div class="cell-input">
<option value="after" title="placeholder">after</option> <select id="type-depend">
<option value="afterany" title="placeholder">afterany</option> <option value="none" title="placeholder" selected="selected"></option>
<option value="afterburstbuffer" title="placeholder">afterburstbuffer</option> <option value="after" title="placeholder">after</option>
<option value="aftercorr" title="placeholder">aftercorr</option> <option value="afterany" title="placeholder">afterany</option>
<option value="afternotok" title="placeholder">afternotok</option> <option value="afterburstbuffer" title="placeholder">afterburstbuffer</option>
<option value="afterok" title="placeholder">afterok</option> <option value="aftercorr" title="placeholder">aftercorr</option>
<option value="singleton" title="placeholder">singleton</option> <option value="afternotok" title="placeholder">afternotok</option>
</select> <option value="afterok" title="placeholder">afterok</option>
<input id="jobid" class="hidden" type="text" placeholder="jobid"> <option value="singleton" title="placeholder">singleton</option>
</div> </select>
<input id="jobid" class="hidden" type="text" placeholder="jobid">
</div> </div>
</div> </div>
</div> </div>
<button type="button" class="collapsible">Workspace</button> <button type="button" class="collapsible">Workspace</button>
<div class="content"> <div class="content">
<div class="input"> <div class="row">
<div class="row"> <span class="cell-name"></span>
<span class="cell-name"></span> <div class="cell-tooltip">
<div class="cell-tooltip"> <img id="ws-alloc-info" class="info-img" src="../misc/info.png" title="help">
<img class="info-img" src="../misc/info.png" title="help">
</div>
<div class="cell-input">
<input id="check-workspace" type="checkbox">
<label for="check-workspace">Allocate a workspace</label>
</div>
</div> </div>
<div class="row hidden"> <div class="cell-input">
<label class="cell-name">Filesystem</label> <input id="check-workspace" type="checkbox">
<div class="cell-tooltip"> <label for="check-workspace">Allocate a workspace</label>
<img class="info-img" src="../misc/info.png" title="help">
</div>
<select id="workspace-filesystem" class="cell-input"></select>
</div> </div>
<div class="row hidden"> </div>
<label class="cell-name">Name</label> <div class="row hidden">
<div class="cell-tooltip"> <label class="cell-name">Filesystem</label>
<img class="info-img" src="../misc/info.png" title="help"> <div class="cell-tooltip">
</div> <img id="ws-filesystem-info" class="info-img" src="../misc/info.png" title="help">
<input id="name" class="cell-input" type="text">
</div> </div>
<div class="row hidden"> <select id="workspace-filesystem" class="cell-input"></select>
<label class="cell-name">Duration</label> </div>
<div class="cell-tooltip"> <div class="row hidden">
<img class="info-img" src="../misc/info.png" title="help"> <label class="cell-name">Name</label>
</div> <div class="cell-tooltip">
<div class="cell-input"> <img id="ws-name-info" class="info-img" src="../misc/info.png" title="help">
<input id="duration" type="number" min="1">
<label id="duration-text" class="limits"></label>
</div>
</div> </div>
<div class="row hidden"> <input id="name" class="cell-input" type="text">
<span class="cell-name"></span> </div>
<div class="cell-tooltip"> <div class="row hidden">
<img class="info-img" src="../misc/info.png" title="help"> <label class="cell-name">Duration</label>
</div> <div class="cell-tooltip">
<div class="cell-input"> <img id="ws-duration-info" class="info-img" src="../misc/info.png" title="help">
<input id="check-delete" type="checkbox"> </div>
<label for="check-delete">Delete after job</label> <div class="cell-input">
</div> <input id="duration" type="number" min="1">
<label id="duration-text" class="limits"></label>
</div>
</div>
<div class="row hidden">
<span class="cell-name"></span>
<div class="cell-tooltip">
<img id="ws-delete-info" class="info-img" src="../misc/info.png" title="help">
</div>
<div class="cell-input">
<input id="check-delete" type="checkbox">
<label for="check-delete">Delete after job</label>
</div> </div>
</div> </div>
</div> </div>
...@@ -284,7 +278,7 @@ ...@@ -284,7 +278,7 @@
<script> <script>
// dictionary containing the limits for the different partitions // dictionary containing the limits for the different partitions
const limits = { const limitsPartition = {
'gpu2' : gpu2 = { 'gpu2' : gpu2 = {
'MaxTime' : 'INFINITE', 'MaxTime' : 'INFINITE',
'DefaultTime' : 480, 'DefaultTime' : 480,
...@@ -298,26 +292,13 @@ ...@@ -298,26 +292,13 @@
'mem/node' : 62000, 'mem/node' : 62000,
'gpu/node' : 4 'gpu/node' : 4
}, },
'gpu2-interactive' : gpu2_interactive = {
'MaxTime' : 480,
'DefaultTime' : 10,
'Sockets' : 2,
'cpu/socket' : 12,
'threads' : 1,
'nodes' : 59,
'cores/node' : 24,
'ht_cores/node' : 24,
'mem/core' : 2583,
'mem/node' : 62000,
'gpu/node' : 4
},
'haswell' : haswell = { 'haswell' : haswell = {
'MaxTime' : 'INFINITE', 'MaxTime' : 'INFINITE',
'DefaultTime' : 480, 'DefaultTime' : 480,
'Sockets' : 2, 'Sockets' : 2,
'cpu/socket' : 12, 'cpu/socket' : 12,
'threads' : 1, 'threads' : 1,
'nodes' : 1435, 'nodes' : 1399,
'cores/node' : 24, 'cores/node' : 24,
'ht_cores/node' : 24, 'ht_cores/node' : 24,
'mem/core' : 2541, 'mem/core' : 2541,
...@@ -330,7 +311,7 @@ ...@@ -330,7 +311,7 @@
'Sockets' : 2, 'Sockets' : 2,
'cpu/socket' : 12, 'cpu/socket' : 12,
'threads' : 1, 'threads' : 1,
'nodes' : 1284, 'nodes' : 1266,
'cores/node' : 24, 'cores/node' : 24,
'ht_cores/node' : 24, 'ht_cores/node' : 24,
'mem/core' : 2541, 'mem/core' : 2541,
...@@ -363,32 +344,6 @@ ...@@ -363,32 +344,6 @@
'mem/node' : 254000, 'mem/node' : 254000,
'gpu/node' : 0 'gpu/node' : 0
}, },
'haswell64long' : haswell64long = {
'MaxTime' : 'INFINITE',
'DefaultTime' : 480,
'Sockets' : 2,
'cpu/socket' : 12,
'threads' : 1,
'nodes' : 878,
'cores/node' : 24,
'ht_cores/node' : 24,
'mem/core' : 2541,
'mem/node' : 61000,
'gpu/node' : 0
},
'haswell64extralong' : haswell64extralong = {
'MaxTime' : 'INFINITE',
'DefaultTime' : 480,
'Sockets' : 2,
'cpu/socket' : 12,
'threads' : 1,
'nodes' : 698,
'cores/node' : 24,
'ht_cores/node' : 24,
'mem/core' : 2541,
'mem/node' : 61000,
'gpu/node' : 0
},
'haswell64ht' : haswell64ht = { 'haswell64ht' : haswell64ht = {
'MaxTime' : 'INFINITE', 'MaxTime' : 'INFINITE',
'DefaultTime' : 480, 'DefaultTime' : 480,
...@@ -402,19 +357,6 @@ ...@@ -402,19 +357,6 @@
'mem/node' : 61000, 'mem/node' : 61000,
'gpu/node' : 0 'gpu/node' : 0
}, },
'interactive' : interactive = {
'MaxTime' : 480,
'DefaultTime' : 30,
'Sockets' : 2,
'cpu/socket' : 12,
'threads' : 1,
'nodes' : 8,
'cores/node' : 24,
'ht_cores/node' : 24,
'mem/core' : 2541,
'mem/node' : 61000,
'gpu/node' : 0
},
'smp2' : smp2 = { 'smp2' : smp2 = {
'MaxTime' : 'INFINITE', 'MaxTime' : 'INFINITE',
'DefaultTime' : 480, 'DefaultTime' : 480,
...@@ -467,19 +409,6 @@ ...@@ -467,19 +409,6 @@
'mem/node' : 95000, 'mem/node' : 95000,
'gpu/node' : 3 'gpu/node' : 3
}, },
'ml-all' : ml_all = {
'MaxTime' : 'INFINITE',
'DefaultTime' : 60,
'Sockets' : 2,
'cpu/socket' : 22,
'threads' : 4,
'nodes' : 32,
'cores/node' : 44,
'ht_cores/node' : 176,
'mem/core' : 1443,
'mem/node' : 254000,
'gpu/node' : 6
},
'ml' : ml = { 'ml' : ml = {
'MaxTime' : 'INFINITE', 'MaxTime' : 'INFINITE',
'DefaultTime' : 60, 'DefaultTime' : 60,
...@@ -493,43 +422,6 @@ ...@@ -493,43 +422,6 @@
'mem/node' : 254000, 'mem/node' : 254000,
'gpu/node' : 6 'gpu/node' : 6
}, },
'ml-interactive' : ml_interactive = {
'MaxTime' : 480,
'DefaultTime' : 10,
'Sockets' : 2,
'cpu/socket' : 22,
'threads' : 4,
'nodes' : 2,
'cores/node' : 44,
'ht_cores/node' : 176,
'mem/core' : 1443,
'mem/node' : 254000,
'gpu/node' : 6
},
'nvme' : nvme = {
'MaxTime' : 'INFINITE',
'DefaultTime' : 60,
'Sockets' : 2,
'cpu/socket' : 8,
'threads' : 2,
'nodes' : 90,
'cores/node' : 16,
'ht_cores/node' : 32,
'mem/core' : 1875,
'mem/node' : 60000,
'gpu/node' : 0
},
'datamover' : datamover = {
'Sockets' : 2,
'cpu/socket' : 8,
'threads' : 1,
'nodes' : 2,
'cores/node' : 16,
'ht_cores/node' : 16,
'mem/core' : 3875,
'mem/node' : 62000,
'gpu/node' : 0
},
'romeo' : romeo = { 'romeo' : romeo = {
'MaxTime' : 'INFINITE', 'MaxTime' : 'INFINITE',
'DefaultTime' : 480, 'DefaultTime' : 480,
...@@ -543,19 +435,6 @@ ...@@ -543,19 +435,6 @@
'mem/node' : 505000, 'mem/node' : 505000,
'gpu/node' : 0 'gpu/node' : 0
}, },
'romeo-interactive' : romeo_interactive = {
'MaxTime' : 480,
'DefaultTime' : 10,
'Sockets' : 2,
'cpu/socket' : 64,
'threads' : 2,
'nodes' : 2,
'cores/node' : 128,
'ht_cores/node' : 256,
'mem/core' : 1972,
'mem/node' : 505000,
'gpu/node' : 0
},
'julia' : julia = { 'julia' : julia = {
'MaxTime' : 'INFINITE', 'MaxTime' : 'INFINITE',
'DefaultTime' : 480, 'DefaultTime' : 480,
...@@ -581,58 +460,6 @@ ...@@ -581,58 +460,6 @@
'mem/core' : 10312, 'mem/core' : 10312,
'mem/node' : 990000, 'mem/node' : 990000,
'gpu/node' : 8 'gpu/node' : 8
},
'alpha-interactive' : alpha_interactive = {
'MaxTime' : 'INFINITE',
'DefaultTime' : 480,
'Sockets' : 2,
'cpu/socket' : 24,
'threads' : 2,
'nodes' : 2,
'cores/node' : 48,
'ht_cores/node' : 96,
'mem/core' : 10312,
'mem/node' : 990000,
'gpu/node' : 8
},
'htw-gpu' : htw_gpu = {
'MaxTime' : 'INFINITE',
'DefaultTime' : 480,
'Sockets' : 2,
'cpu/socket' : 24,
'threads' : 2,
'nodes' : 5,
'cores/node' : 48,
'ht_cores/node' : 96,
'mem/core' : 10312,
'mem/node' : 990000,
'gpu/node' : 8
},
'beaker-interactive' : beaker_interactive = {
'MaxTime' : 480,
'DefaultTime' : 10,
'Sockets' : 2,
'cpu/socket' : 16,
'threads' : 2,
'nodes' : 2,
'cores/node' : 32,
'ht_cores/node' : 64,
'mem/core' : 7890,
'mem/node' : 505000,
'gpu/node' : 0
},
'beaker' : beaker = {
'MaxTime' : 'INFINITE',
'DefaultTime' : 480,
'Sockets' : 2,
'cpu/socket' : 16,
'threads' : 2,
'nodes' : 114,
'cores/node' : 32,
'ht_cores/node' : 64,
'mem/core' : 7890,
'mem/node' : 505000,
'gpu/node' : 0
} }
}; };
...@@ -656,16 +483,132 @@ ...@@ -656,16 +483,132 @@
} }
}; };
// dictionary for the min and max values // dictionary containing the texts and link for the info icons
const info = {
'job-name': {
'text': 'Specify a name for the job allocation. The specified name will appear along with the job id number when querying running jobs on the system. (default: name of the job file)',
'link': 'https://slurm.schedmd.com/sbatch.html#OPT_job-name'
},
'account': {
'text': 'Charge resources used by this job to specified project.',
'link': 'https://slurm.schedmd.com/sbatch.html#OPT_account'
},
'mail': {
'text': 'Specify which user is send a email notification of state changes as defined by --mail-type.',
'link': 'https://slurm.schedmd.com/sbatch.html#OPT_mail-user'
},
'time': {
'text': 'Set the total run time limit of the job allocation. When the time limit is reached, each task in each job step is sent SIGTERM followed by SIGKILL. The default time limit is the partition\'s default time limit. (currently only supports ddd-hh:mm:ss and hh:mm:ss)',
'link': 'https://slurm.schedmd.com/sbatch.html#OPT_time'
},
'partition': {
'text': 'Request a specific partition for the resource allocation. If the job can use more than one partition, specify their names in a comma separate list and the one offering earliest initiation will be used with no regard given to the partition name ordering. (default: default paritition of the system)',
'link': 'https://slurm.schedmd.com/sbatch.html#OPT_partition'
},
'nodes': {
'text': 'Request that number of nodes be allocated to this job.',
'link': 'https://slurm.schedmd.com/sbatch.html#OPT_nodes'
},
'tasks': {
'text': 'Request that many MPI tasks (default: one task per node)',
'link': 'https://slurm.schedmd.com/sbatch.html#OPT_ntasks'
},
'tasks/node': {
'text': 'Allocate that many tasks per node.',
'link': 'https://slurm.schedmd.com/sbatch.html#OPT_ntasks-per-node'
},
'cpus': {
'text': 'Request that number of processors per MPI task. This is needed for multithreaded (e.g. OpenMP) jobs; typically <N> should be equal to OMP_NUM_THREADS',
'link': 'https://slurm.schedmd.com/sbatch.html#OPT_cpus-per-task'
},
'nomultithread': {
'text': '[don\'t] use extra threads with in-core multi-threading which can benefit communication intensive applications.',
'link': 'https://slurm.schedmd.com/sbatch.html#OPT_[no]multithread'
},
'gpus': {
'text': 'help text for gpus',
'link': 'https://slurm.schedmd.com/sbatch.html#OPT_gpus'
},
'gpus/task': {
'text': 'help text for gpus/task',
'link': 'test'
},
'mem': {
'text': 'Specify the real memory required per node.',
'link': 'https://slurm.schedmd.com/sbatch.html#OPT_output'
},
'exclusive': {
'text': 'The job allocation can not share nodes with other running job. Exclusive usage of compute nodes; you will be charged for all CPUs/cores on the node',
'link': 'https://slurm.schedmd.com/sbatch.html#OPT_exclusive'
},
'executable': {
'text': 'help text for executable',
'link': 'test'
},
'one-output': {
'text': 'help text for one-output',
'link': 'test'
},
'output-file': {
'text': 'File to save all normal output (stdout) (default: slurm-%j.out)',
'link': 'https://slurm.schedmd.com/sbatch.html#OPT_output'
},
'error-file': {
'text': 'File to save all error output (stderr) (default: slurm-%j.out)',
'link': 'https://slurm.schedmd.com/sbatch.html#OPT_error'
},
'array': {
'text': 'help text for array',
'link': 'test'
},
'dependency': {
'text': 'help text for dependency',
'link': 'test'
},
'ws-alloc': {
'text': 'help text for allocate workspace',
'link': 'test'
},
'ws-filesystem': {
'text': 'help text for filesystem',
'link': 'test'
},
'ws-name': {
'text': 'help text for ws name',
'link': 'test'
},
'ws-duration': {
'text': 'help text for duration',
'link': 'test'
},
'ws-delete': {
'text': 'help text for delete workspace',
'link': 'test'
}
};
// dictionary for the max values
var maxValues = { var maxValues = {
'nodes' : 0, 'nodes' : 1,
'tasks' : 0, 'tasks' : 1,
'tasks/node' : 0, 'tasks/node' : 1,
'cpus' : 0, 'cpus' : 1,
'gpus' : 0,
'gpus/task' : 0,
'mem' : 1,
'duration': 1
}
// dictionary for the min values
var minValues = {
'nodes' : 1,
'tasks' : 1,
'tasks/node' : 1,
'cpus' : 1,
'gpus' : 0, 'gpus' : 0,
'gpus/task' : 0, 'gpus/task' : 0,
'mem' : 0, 'mem' : 1,
'duration': 0 'duration': 1
} }
/** /**
...@@ -687,7 +630,7 @@ ...@@ -687,7 +630,7 @@
+ document.getElementById('time').value; + document.getElementById('time').value;
} else { } else {
outputText.innerText += '\n#SBATCH --time=' outputText.innerText += '\n#SBATCH --time='
+ limits[document.getElementById('partition').value]['DefaultTime']; + limitsPartition[document.getElementById('partition').value]['DefaultTime'];
} }
outputText.innerText += '\n#SBATCH --partition=' outputText.innerText += '\n#SBATCH --partition='
+ document.getElementById('partition').value; + document.getElementById('partition').value;
...@@ -698,7 +641,7 @@ ...@@ -698,7 +641,7 @@
outputText.innerText += '\n#SBATCH --ntasks=' outputText.innerText += '\n#SBATCH --ntasks='
+ document.getElementById('tasks').value; + document.getElementById('tasks').value;
} }
if (document.getElementById('tasks/node').value !== '' && document.getElementById('gpus').value !== '') { if (document.getElementById('tasks/node').value !== '' && document.getElementById('gpus').value === '') {
outputText.innerText += '\n#SBATCH --ntasks-per-node=' outputText.innerText += '\n#SBATCH --ntasks-per-node='
+ document.getElementById('tasks/node').value; + document.getElementById('tasks/node').value;
} else if (document.getElementById('tasks/node').value !== '') { } else if (document.getElementById('tasks/node').value !== '') {
...@@ -830,7 +773,7 @@ ...@@ -830,7 +773,7 @@
let element = document.getElementById(field); let element = document.getElementById(field);
let elementText = document.getElementById(field + '-text'); let elementText = document.getElementById(field + '-text');
let value = Number(document.getElementById(field).value); let value = Number(document.getElementById(field).value);
let min = Number(document.getElementById(field).min); let min = Number(minValues[field]);
let max = Number(maxValues[field]); let max = Number(maxValues[field]);
if (value >= min && value <= max || document.getElementById(field).value === '') { if (value >= min && value <= max || document.getElementById(field).value === '') {
element.style.backgroundColor = ''; element.style.backgroundColor = '';
...@@ -925,7 +868,7 @@ ...@@ -925,7 +868,7 @@
document.getElementById('time').style.backgroundColor = 'rgb(255, 121, 121)'; document.getElementById('time').style.backgroundColor = 'rgb(255, 121, 121)';
} else { } else {
document.getElementById('time').style.backgroundColor = ''; document.getElementById('time').style.backgroundColor = '';
setMinDuration() setLimitDuration()
} }
}); });
...@@ -934,7 +877,7 @@ ...@@ -934,7 +877,7 @@
*/ */
var fillInfo = function() { var fillInfo = function() {
let panelText = document.getElementById('info-panel'); let panelText = document.getElementById('info-panel');
let partitionLimits = limits[document.getElementById('partition').value]; let partitionLimits = limitsPartition[document.getElementById('partition').value];
panelText.innerText = partitionLimits['info']; panelText.innerText = partitionLimits['info'];
panelText.innerText += '\nNodes: ' + partitionLimits['nodes']; panelText.innerText += '\nNodes: ' + partitionLimits['nodes'];
...@@ -949,9 +892,9 @@ ...@@ -949,9 +892,9 @@
* Function to fill the tooltip about the partitions * Function to fill the tooltip about the partitions
*/ */
var fillTooltips = function() { var fillTooltips = function() {
for (const [key, value] of Object.entries(limits)) { for (const [key, value] of Object.entries(limitsPartition)) {
let panelText = document.getElementById(key); let panelText = document.getElementById(key);
let partitionLimits = limits[key]; let partitionLimits = limitsPartition[key];
panelText.title = partitionLimits['info']; panelText.title = partitionLimits['info'];
panelText.title += '\nNodes: ' + partitionLimits['nodes']; panelText.title += '\nNodes: ' + partitionLimits['nodes'];
...@@ -986,170 +929,271 @@ ...@@ -986,170 +929,271 @@
let panelText = document.getElementById(field); let panelText = document.getElementById(field);
panelText.title = 'Limits by current setting:'; panelText.title = 'Limits by current setting:';
panelText.title += '\nmin: ' + panelText.min; panelText.title += '\nmin: ' + minValues[field];
panelText.title += '\nmax: ' + maxValues[field]; panelText.title += '\nmax: ' + maxValues[field];
panelText.title += '\nEmpty the field if unneeded' panelText.title += '\nEmpty the field if unneeded'
// set limit labels // set limit labels
let limitText = document.getElementById(field + '-text'); let limitText = document.getElementById(field + '-text');
limitText.innerText = 'min: ' + panelText.min; limitText.innerText = 'min: ' + minValues[field];
limitText.innerText += ' max: ' + maxValues[field]; limitText.innerText += ' max: ' + maxValues[field];
} }
/** /**
* Set the max for the tasks field * Get the value of a field, or its maximum
*/ */
var setMaxTasks = function() { var getValue = function(field, type) {
let number = 0;
// get field value
rawNodes = document.getElementById(field).value;
// set to maximum if value is undefined or out of range
if (
rawNodes !== ''
&& Number(rawNodes) >= minValues[field]
&& Number(rawNodes) <= maxValues[field]
) {
number = Number(document.getElementById(field).value);
} else {
number = type === 'min' ? minValues[field] : maxValues[field];
}
return number;
}
/**
* Set the limits for the nodes field
*/
var setLimitNodes = function() {
// get partition limits from dictionary // get partition limits from dictionary
let partitionLimits = limits[document.getElementById('partition').value]; let partitionLimits = limitsPartition[document.getElementById('partition').value];
let nodes = 0; // set max for nodes
// set number of nodes maxValues['nodes'] = partitionLimits['nodes'];
if (document.getElementById('nodes').value !== '') {
nodes = Number(document.getElementById('nodes').value); // set min for nodes
if (
document.getElementById('tasks').value !== ''
&& document.getElementById('tasks/node').value !== ''
) {
let tasks = getValue('tasks', 'min');
let tasksPerNode = getValue('tasks/node', 'min');
minValues['nodes'] = Math.ceil(tasks / tasksPerNode);
} else { } else {
nodes = maxValues['nodes']; minValues['nodes'] = 1;
} }
// set max for tasks // set min for nodes
if (document.getElementById('nomultithread').checked === true) { setTooltips('nodes');
maxValues['tasks'] = nodes * partitionLimits['cores/node']; }
/**
* Set the limits for the tasks field
*/
var setLimitTasks = function() {
// get partition limits from dictionary
let partitionLimits = limitsPartition[document.getElementById('partition').value];
// set max
let nodes = getValue('nodes', 'max');
let taskPerNode = getValue('tasks/node', 'max');
// multithreading
let limit = document.getElementById('nomultithread').checked === true ? 'cores/node' : 'ht_cores/node';
maxValues['tasks'] = nodes * partitionLimits[limit];
// limit if nodes and tasks/node
if (
document.getElementById('tasks/node').value !== ''
&& document.getElementById('nodes').value !== ''
) {
maxValues['tasks'] = taskPerNode * nodes;
} else { } else {
maxValues['tasks'] = nodes * partitionLimits['ht_cores/node']; minValues['tasks/node'] = 1;
}
if (document.getElementById('tasks/node').value !== '' && document.getElementById('nodes').value !== '') {
maxValues['tasks'] = Number(document.getElementById('tasks/node').value)
* Number(document.getElementById('nodes').value);
} }
// tasks per node // set min
if (document.getElementById('nomultithread').checked === true) { nodes = getValue('nodes', 'min');
maxValues['tasks/node'] = partitionLimits['cores/node']; minValues['tasks'] = nodes;
setTooltips('tasks');
}
/**
* Set the limits for tasks per node field
*/
var setLimitTasksPerNode = function() {
// get partition limits from dictionary
let partitionLimits = limitsPartition[document.getElementById('partition').value];
// set max
let nodes = getValue('nodes', 'max');
let tasks = getValue('tasks', 'max');
// multithreading
let limit = document.getElementById('nomultithread').checked === true ? 'cores/node' : 'ht_cores/node';
maxValues['tasks/node'] = partitionLimits[limit];
//set min
nodes = getValue('nodes', 'min');
tasks = getValue('tasks', 'min');
if (
document.getElementById('tasks').value !== ''
&& document.getElementById('nodes').value !== ''
) {
minValues['tasks/node'] = Math.ceil(tasks / nodes);
} else { } else {
maxValues['tasks/node'] = partitionLimits['ht_cores/node']; minValues['tasks/node'] = 1;
} }
if (document.getElementById('gpus').value !== '' && document.getElementById('nodes').value !== '' && document.getElementById('tasks').value !== '') {
document.getElementById('tasks/node').min = Number(document.getElementById('tasks').value) // set min and max for --mincpus if gpus are allocated
/ Number(document.getElementById('nodes').value); if (
maxValues['tasks/node'] = Number(document.getElementById('tasks').value) document.getElementById('gpus').value !== ''
/ Number(document.getElementById('nodes').value); && document.getElementById('nodes').value !== ''
} else { && document.getElementById('tasks').value !== ''
document.getElementById('tasks/node').min = 1; ) {
minValues['tasks/node'] = Math.ceil(tasks / nodes);
nodes = getValue('nodes', 'max');
tasks = getValue('tasks', 'max');
maxValues['tasks/node'] = Math.floor(tasks / nodes);
} }
setTooltips('tasks'); // set tooltips
setTooltips('tasks/node'); setTooltips('tasks/node');
} }
/** /**
* Set the max for the cpus or gpus field * Set the limits for cpu per task field
*
* @param {string} field The id for the field, for which the max has to be updated
*/ */
var setMaxCpuGpu = function(field) { var setLimitCpu = function() {
// get partition limits from dictionary // get partition limits from dictionary
let partitionLimits = limits[document.getElementById('partition').value]; let partitionLimits = limitsPartition[document.getElementById('partition').value];
// get the partition limit and base for the respective field // set max
if (field === 'cpus') { // multithreading
if (document.getElementById('nomultithread').checked === true) { let limit = document.getElementById('nomultithread').checked === true ? 'cores/node' : 'ht_cores/node';
limit = 'cores/node'; let nodes = getValue('nodes', 'max');
} else { let tasks = getValue('tasks', 'max');
limit = 'ht_cores/node'; let tasksPerNode = getValue('tasks/node', 'max');
} let maxValue = [partitionLimits[limit]];
} else if (field === 'gpus/task') { maxValue.push(Math.floor(partitionLimits[limit] / Math.ceil(tasks / nodes)));
limit = 'gpu/node'; maxValue.push(Math.floor(partitionLimits[limit] / tasksPerNode));
maxValues['cpus'] = Math.min.apply(null, maxValue);
// set max for cpus if gpus are set
if (
document.getElementById('gpus').value !== ''
&& document.getElementById('gpus').value !== '0'
&& document.getElementById('exclusive').checked !== true
) {
let gpus = getValue('gpus', 'max');
maxValues[field] = Math.floor(gpus / partitionLimits['gpu/node'] * partitionLimits[limit]);
} }
//set min
minValues['cpus'] = 1;
// set tooltips
setTooltips('cpus');
}
// get value from base /**
let tasks = document.getElementById('tasks').value; * Set the limits for gpu per node field
let tasksNode = document.getElementById('tasks/node').value; */
// set number of nodes var setLimitGpu = function() {
let nodes = 0; // get partition limits from dictionary
if (document.getElementById('nodes').value !== '') { let partitionLimits = limitsPartition[document.getElementById('partition').value];
nodes = Number(document.getElementById('nodes').value);
// set max for gpus
maxValues['gpus'] = partitionLimits['gpu/node'];
setTooltips('gpus');
//set min
if (document.getElementById('gpus/task').value !== '') {
let tasks = getValue('tasks', 'min');
let nodes = getValue('nodes', 'min');
let gpusPerTask = getValue('gpus/task', 'min');
minValues['gpus'] = Math.ceil(tasks / nodes * gpusPerTask);
} else { } else {
nodes = maxValues['nodes']; minValues['gpus'] = 0;
} }
// set tooltips
setTooltips('gpus');
}
/**
* Set the limits for the gpus per task field
*/
var setLimitGpuPerTask = function() {
// get partition limits from dictionary
let partitionLimits = limitsPartition[document.getElementById('partition').value];
// get value from base
let tasks = getValue('tasks', 'max');
let tasksNode = getValue('tasks/node', 'max');
let nodes = getValue('nodes', 'max');
// set new max // set new max
let maxValue = [partitionLimits[limit]]; let maxValue = [partitionLimits['gpu/node']];
if (tasks !== '') { if (tasks !== '') {
maxValue.push(Math.floor(partitionLimits[limit] / Math.ceil(Number(tasks) / Number(nodes)))); maxValue.push(Math.floor(partitionLimits['gpu/node'] / Math.ceil(Number(tasks) / Number(nodes))));
} }
if (tasksNode !== '') { if (tasksNode !== '') {
maxValue.push(Math.floor(partitionLimits[limit] / Number(document.getElementById('tasks/node').value))); maxValue.push(Math.floor(partitionLimits['gpu/node'] / Number(document.getElementById('tasks/node').value)));
} }
maxValues[field] = Math.min.apply(null, maxValue); maxValues['gpus/task'] = Math.min.apply(null, maxValue);
// set tooltips for new limits
setTooltips('gpus/task');
}
// set max for cpus if gpus are set /**
if (document.getElementById('gpus').value !== '' && document.getElementById('gpus').value !== '0' && field === 'cpus' && document.getElementById('exclusive').checked !== true) { * Update the max for memory per cpu values
maxValues[field] = Math.floor(Number(document.getElementById('gpus').value) / partitionLimits['gpu/node'] * partitionLimits[limit]); */
var setLimitMem = function() {
// get partition limits from dictionary
let partitionLimits = limitsPartition[document.getElementById('partition').value];
maxValues['mem'] = partitionLimits['mem/core'];
if (document.getElementById('nomultithread').checked === true) {
maxValues['mem'] *= partitionLimits['threads'];
} }
// set tooltips for new limits if (document.getElementById('byte').value === 'G') {
setTooltips(field); maxValues['mem'] = Math.floor(maxValues['mem'] / 1024);
}
setTooltips('mem');
} }
/** /**
* Set the max for the duration field * Set the limits for the duration field
*/ */
var setMaxDuration = function() { var setLimitDuration = function() {
// get partition limits from dictionary // get partition limits from dictionary
let workspaceLimits = limitsWorkspace[document.getElementById('workspace-filesystem').value]; let workspaceLimits = limitsWorkspace[document.getElementById('workspace-filesystem').value];
// set new max // set new max
maxValues['duration'] = workspaceLimits['duration']; maxValues['duration'] = workspaceLimits['duration'];
// set tooltips for new limits
setTooltips('duration');
}
/** //set min
* Set the min for the duration field
*/
var setMinDuration = function() {
// get days and hours from walltime // get days and hours from walltime
let reArray = /^(([0-9]{1,3})-)?([0-9]{2}):([0-9]{2}):([0-9]{2})$/; let reArray = /^(([0-9]{1,3})-)?([0-9]{2}):([0-9]{2}):([0-9]{2})$/;
let match = reArray.exec(document.getElementById('time').value); let match = reArray.exec(document.getElementById('time').value);
if (match === null) {
setTooltips('duration');
return;
}
// if days are defined or not // if days are defined or not
if (match[2]) { if (match[2]) {
document.getElementById('duration').min = Number(match[2]) + Math.ceil(Number(match[3]) / 24); minValues['duration'] = Number(match[2]);
} else {
document.getElementById('duration').min = Math.ceil(Number(match[3]) / 24);
} }
minValues['duration'] += Math.ceil(Number(match[3]) / 24);
if ((Number(match[4]) !== 0 || Number(match[5]) !== 0) && Number(match[3]) % 24 === 0) { if ((Number(match[4]) !== 0 || Number(match[5]) !== 0) && Number(match[3]) % 24 === 0) {
document.getElementById('duration').min = Number(document.getElementById('duration').min) + 1; minValues['duration'] += 1;
} }
// set tooltips for new limits // set tooltips for new limits
setTooltips('duration'); setTooltips('duration');
} }
/**
* Update the value und max for CPU values
*/
var memUpdate = function() {
// 0 limit if no cpus are selected
if (document.getElementById('cpus').value === '0' || document.getElementById('cpus').value === '') {
maxValues['mem'] = '0';
} else {
// get partition limits from dictionary
let partitionLimits = limits[document.getElementById('partition').value];
maxValues['mem'] = partitionLimits['mem/core'];
}
if (document.getElementById('nomultithread').checked === true) {
maxValues['mem'] *= 2;
}
if (document.getElementById('byte').value === 'G') {
maxValues['mem'] = Math.floor(maxValues['mem'] / 1024);
}
setTooltips('mem');
}
/** /**
* Update the value und max for CPU and GPU values * Update the value und max for CPU and GPU values
*/ */
var cpugpuLimitChange = function() { var LimitChange = function() {
setMaxCpuGpu('cpus'); setLimitNodes();
setLimitTasks();
setLimitTasksPerNode();
setLimitCpu();
if (document.getElementById('div-gpu').style.display !== 'none') { if (document.getElementById('div-gpu').style.display !== 'none') {
setMaxCpuGpu('gpus/task'); setLimitGpu();
setLimitGpuPerTask();
} }
setLimitMem();
setLimitDuration();
} }
/** /**
...@@ -1157,7 +1201,7 @@ ...@@ -1157,7 +1201,7 @@
*/ */
var partitionLimitChange = function() { var partitionLimitChange = function() {
// get partition limits from dictionary // get partition limits from dictionary
let partitionLimits = limits[document.getElementById('partition').value]; let partitionLimits = limitsPartition[document.getElementById('partition').value];
// hide the GPU field, if partition do not have GPUs // hide the GPU field, if partition do not have GPUs
if (partitionLimits['gpu/node'] === 0) { if (partitionLimits['gpu/node'] === 0) {
document.getElementById('div-gpu').style.display = 'none'; document.getElementById('div-gpu').style.display = 'none';
...@@ -1169,42 +1213,30 @@ ...@@ -1169,42 +1213,30 @@
document.getElementById('div-gpu/task').style.display = ''; document.getElementById('div-gpu/task').style.display = '';
} }
// hide the multithreading field if it isnt supported // hide the multithreading field if it isnt supported
if (partitionLimits['cores/node'] === partitionLimits['ht_cores/node']) { if (partitionLimits['threads'] === 1) {
document.getElementById('div-thread').style.display = 'none'; document.getElementById('div-thread').style.display = 'none';
document.getElementById('nomultithread').checked = false; document.getElementById('nomultithread').checked = false;
} else { } else {
document.getElementById('div-thread').style.display = ''; document.getElementById('div-thread').style.display = '';
} }
// set new max for nodes
maxValues['nodes'] = partitionLimits['nodes'];
setTooltips('nodes');
// set max for gpus
maxValues['gpus'] = partitionLimits['gpu/node'];
setTooltips('gpus');
// update other values // update other values
setMaxTasks(); LimitChange();
cpugpuLimitChange();
memUpdate();
} }
// set up event listeners, if field change // set up event listeners, if field change
document.getElementById('partition').addEventListener('change', partitionLimitChange); document.getElementById('partition').addEventListener('change', partitionLimitChange);
document.getElementById('partition').addEventListener('change', fillInfo); document.getElementById('partition').addEventListener('change', fillInfo);
document.getElementById('tasks').addEventListener('change', cpugpuLimitChange); document.getElementById('nodes').addEventListener('change', LimitChange);
document.getElementById('byte').addEventListener('change', memUpdate); document.getElementById('tasks').addEventListener('change', LimitChange);
document.getElementById('nodes').addEventListener('change', cpugpuLimitChange); document.getElementById('tasks/node').addEventListener('change', LimitChange);
document.getElementById('nodes').addEventListener('change', setMaxTasks); document.getElementById('cpus').addEventListener('change', LimitChange);
document.getElementById('tasks').addEventListener('change', memUpdate); document.getElementById('gpus').addEventListener('change', LimitChange);
document.getElementById('tasks').addEventListener('change', setMaxTasks); document.getElementById('gpus/task').addEventListener('change', LimitChange);
document.getElementById('gpus').addEventListener('change', setMaxTasks); document.getElementById('mem').addEventListener('change', LimitChange);
document.getElementById('gpus').addEventListener('change', cpugpuLimitChange); document.getElementById('byte').addEventListener('change', setLimitMem);
document.getElementById('tasks/node').addEventListener('change', setMaxTasks); document.getElementById('exclusive').addEventListener('change', LimitChange);
document.getElementById('tasks/node').addEventListener('change', cpugpuLimitChange); document.getElementById('nomultithread').addEventListener('change', LimitChange);
document.getElementById('cpus').addEventListener('change', memUpdate); document.getElementById('workspace-filesystem').addEventListener('change', setLimitDuration);
document.getElementById('exclusive').addEventListener('change', memUpdate);
document.getElementById('exclusive').addEventListener('change', cpugpuLimitChange);
document.getElementById('nomultithread').addEventListener('change', partitionLimitChange);
document.getElementById('workspace-filesystem').addEventListener('change', setMaxDuration);
// hide jobid field if unneeded // hide jobid field if unneeded
document.getElementById('type-depend').addEventListener('change', function() { document.getElementById('type-depend').addEventListener('change', function() {
...@@ -1243,7 +1275,7 @@ ...@@ -1243,7 +1275,7 @@
// set up of partition options // set up of partition options
let select = document.getElementById('partition'); let select = document.getElementById('partition');
for (const [key, value] of Object.entries(limits)) { for (const [key, value] of Object.entries(limitsPartition)) {
let option = document.createElement('option'); let option = document.createElement('option');
option.id = key; option.id = key;
option.value = key; option.value = key;
...@@ -1269,17 +1301,15 @@ ...@@ -1269,17 +1301,15 @@
} }
// set up info texts // set up info texts
// const infoMap = JSON.parse(text); for (const [key, value] of Object.entries(info)) {
// for (const [key, value] of Object.entries(infoMap)) { document.getElementById(key + '-info').title = value['text'];
// document.getElementById(key + '-info').title = value['text']; }
// }
// initialize UI // initialize UI
partitionLimitChange(); partitionLimitChange();
fillInfo(); fillInfo();
fillTooltips(); fillTooltips();
fillTooltipsWorkspace(); fillTooltipsWorkspace();
setMaxDuration();
</script> </script>
</body> </body>
</html> </html>
...@@ -261,6 +261,9 @@ body { ...@@ -261,6 +261,9 @@ body {
img { img {
display: block; display: block;
} }
label {
font-size: .7rem;
}
pre { pre {
background-color: lightgrey; background-color: lightgrey;
border-color: black; border-color: black;
...@@ -284,11 +287,13 @@ body { ...@@ -284,11 +287,13 @@ body {
.info-pre { .info-pre {
display: flex; display: flex;
padding: 5px; padding: 5px;
width: 275px;
font-size: .7rem;
} }
.limits { .limits {
color: rgb(255, 121, 121); color: rgb(255, 121, 121);
display: none; display: none;
margin-left: 10px; margin-left: 7px;
} }
button.output { button.output {
padding: 8px; padding: 8px;
...@@ -302,7 +307,7 @@ body { ...@@ -302,7 +307,7 @@ body {
div.output { div.output {
margin: 15px 0px; margin: 15px 0px;
} }
/* tablelike layout */ /* tablelike layout */
.input { .input {
display: block; display: block;
...@@ -317,7 +322,8 @@ body { ...@@ -317,7 +322,8 @@ body {
display: flex; display: flex;
height: 25px; height: 25px;
align-items: center; align-items: center;
width: 125px; width: 300px;
font-size: .7rem;
} }
.cell-tooltip { .cell-tooltip {
align-items: center; align-items: center;
...@@ -331,21 +337,21 @@ body { ...@@ -331,21 +337,21 @@ body {
vertical-align: middle; vertical-align: middle;
} }
.executable { .executable {
width: 500px; width: 650px;
} }
.mail { .mail {
width: 350px; width: 350px;
} }
.partition-input { .partition-input {
float: left; float: left;
width: 650px; width: 72.5;
} }
.partition-info { .partition-info {
display: flex; display: flex;
float: left; float: right;
width: calc(30%); width: calc(27.5%);
} }
/* collapsible */ /* collapsible */
.active { .active {
background-color: #5a7094 !important; background-color: #5a7094 !important;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment