Skip to content

Commit 7f416e4

Browse files
authored
Status has now a waiting time (#599)
* Status has now a waiting time * Waiting time is now dynamic
1 parent 7e7f278 commit 7f416e4

File tree

8 files changed

+69
-12
lines changed

8 files changed

+69
-12
lines changed

api/api_helpers.py

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,27 @@ def html_escape_multi(item):
8181

8282
def get_machine_list():
8383
query = """
84-
SELECT id, description, available
85-
FROM machines
86-
ORDER BY description ASC
84+
WITH timings as (
85+
SELECT
86+
machine_id,
87+
AVG(end_measurement - start_measurement)/1000000 as avg_duration
88+
FROM runs
89+
WHERE
90+
end_measurement IS NOT NULL
91+
AND created_at > NOW() - INTERVAL '30 DAY'
92+
GROUP BY machine_id
93+
) SELECT
94+
m.id, m.description, m.available,
95+
m.status_code,
96+
m.updated_at,
97+
m.sleep_time_after_job,
98+
(SELECT COUNT(id) FROM jobs as j WHERE j.machine_id = m.id AND j.state = 'WAITING') as job_amount,
99+
(SELECT avg_duration FROM timings WHERE timings.machine_id = m.id )::int as avg_duration_seconds
100+
101+
FROM machines as m
102+
ORDER BY m.description DESC
87103
"""
104+
88105
return DB().fetch_all(query)
89106

90107
def get_run_info(run_id):

docker/structure.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ CREATE TABLE machines (
88
id SERIAL PRIMARY KEY,
99
description text,
1010
available boolean DEFAULT false,
11+
status_code text,
12+
sleep_time_after_job integer,
1113
created_at timestamp with time zone DEFAULT now(),
1214
updated_at timestamp with time zone
1315
);

frontend/css/green-coding.css

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -115,13 +115,12 @@ Thanks to https://css-tricks.com/transitions-only-after-page-load/ */
115115
/* Handle collapsing on click or on small window */
116116
a,
117117
#menu {
118-
-webkit-transition: left 300ms ease-in-out;
119-
transition: left 300ms ease-in-out;
120-
118+
-webkit-transition: left 75ms ease-in-out;
119+
transition: left 75ms ease-in-out;
121120
}
122121
#main {
123-
-webkit-transition: margin-left 300ms ease-in-out;
124-
transition: margin-left 300ms ease-in-out;
122+
-webkit-transition: margin-left 75ms ease-in-out;
123+
transition: margin-left 75ms ease-in-out;
125124

126125
}
127126

@@ -262,4 +261,4 @@ a,
262261

263262
.wide.card {
264263
width: 400px !important;
265-
}
264+
}

frontend/js/helpers/main.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -165,26 +165,29 @@ async function makeAPICall(path, values=null) {
165165
/* Menu toggling */
166166
let openMenu = function(e){
167167
$(this).removeClass('closed').addClass('opened');
168-
$(this).find('i').removeClass('right').addClass('left');
169168
$('#menu').removeClass('closed').addClass('opened');
170169
$('#main').removeClass('closed').addClass('opened');
171170
setTimeout(function(){window.dispatchEvent(new Event('resize'))}, 500) // needed for the graphs to resize
171+
localStorage.setItem('menu_closed', false)
172+
172173
}
173174

174175
let closeMenu = function(e){
175176
$(this).removeClass('opened').addClass('closed');
176-
$(this).find('i').removeClass('left').addClass('right');
177177
$('#menu').removeClass('opened').addClass('closed');
178178
$('#main').removeClass('opened').addClass('closed');
179179
setTimeout(function(){window.dispatchEvent(new Event('resize'))}, 500) // needed for the graphs to resize
180+
localStorage.setItem('menu_closed', true)
180181
}
181182

182183
$(document).ready(function () {
183184
$(document).on('click','#menu-toggle.closed', openMenu);
184185
$(document).on('click','#menu-toggle.opened', closeMenu);
185186

186-
if ($(window).width() < 960) {
187+
if ($(window).width() < 960 || localStorage.getItem('menu_closed') == 'true') {
187188
$('#menu-toggle').removeClass('opened').addClass('closed');
189+
$('#menu').removeClass('opened').addClass('closed');
190+
$('#main').removeClass('opened').addClass('closed');
188191
}
189192
});
190193

frontend/js/status.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,28 @@ $(document).ready(function () {
1616
deferRender: true,
1717
order: [[7, 'desc']] // API also orders, but we need to indicate order for the user
1818
});
19+
$('#machines-table').DataTable({
20+
ajax: `${API_URL}/v1/machines`,
21+
searching: false,
22+
columns: [
23+
{ data: 0, title: 'ID'},
24+
{ data: 1, title: 'Name'},
25+
{ data: 2, title: 'Available'},
26+
{ data: 3, title: 'Status'},
27+
{ data: 4, title: 'Status date'},
28+
{ data: 5, title: 'Cooldown after Job', render: function(el) {
29+
return (el == null) ? 'awaiting info': `${el/60} Minutes`;
30+
}},
31+
{ data: 6, title: 'Waiting Jobs'},
32+
{ data: 7, title: 'Estimated waiting time', render: function(el, type, row) {
33+
34+
return (row[5] == null || row[7] == null) ? 'awaiting info' : `${( (row[7]+row[5]) * row[6]) / 60} Minutes`
35+
}},
36+
],
37+
deferRender: true,
38+
//order: [[7, 'desc']] // API also orders, but we need to indicate order for the user
39+
});
40+
41+
1942
})();
2043
});

frontend/status.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ <h1 class="ui header float left">
4444
</div>
4545
</div>
4646
</div>
47+
<h3>Machines</h3>
48+
<table id="machines-table" class="ui celled striped table"></table>
49+
4750
<h3>Jobs queue</h3>
4851
<table id="jobs-table" class="ui celled striped table"></table>
4952
</div>
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ALTER TABLE "machines" ADD COLUMN "status_code" text;
2+
ALTER TABLE "machines" ADD COLUMN "sleep_time_after_job" text;

tools/client.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,14 @@ def set_status(status_code, data=None, run_id=None):
2727
params = (status_code, GlobalConfig().config['machine']['id'], data, run_id)
2828
DB().query(query=query, params=params)
2929

30+
query = """
31+
UPDATE machines
32+
SET status_code=%s, sleep_time_after_job=%s
33+
WHERE id = %s
34+
"""
35+
params = (status_code, GlobalConfig().config['client']['sleep_time_after_job'], GlobalConfig().config['machine']['id'])
36+
DB().query(query=query, params=params)
37+
3038

3139
# pylint: disable=broad-exception-caught
3240
if __name__ == '__main__':

0 commit comments

Comments
 (0)