Skip to content

Commit 21984dd

Browse files
log are detailed, updates can be selected
1 parent 5439897 commit 21984dd

File tree

7 files changed

+79
-32
lines changed

7 files changed

+79
-32
lines changed

asset-manifest.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"files": {
33
"main.css": "/static/css/main.02152627.css",
4-
"main.js": "/static/js/main.e18b8229.js",
4+
"main.js": "/static/js/main.0714d193.js",
55
"static/media/roboto-all-500-normal.woff": "/static/media/roboto-all-500-normal.0ab669b7a0d19b178f57.woff",
66
"static/media/roboto-all-700-normal.woff": "/static/media/roboto-all-700-normal.a457fde362a540fcadff.woff",
77
"static/media/roboto-all-400-normal.woff": "/static/media/roboto-all-400-normal.c5d001fa922fa66a147f.woff",
@@ -36,10 +36,10 @@
3636
"static/media/roboto-greek-ext-700-normal.woff2": "/static/media/roboto-greek-ext-700-normal.bd9854c751441ccc1a70.woff2",
3737
"index.html": "/index.html",
3838
"main.02152627.css.map": "/static/css/main.02152627.css.map",
39-
"main.e18b8229.js.map": "/static/js/main.e18b8229.js.map"
39+
"main.0714d193.js.map": "/static/js/main.0714d193.js.map"
4040
},
4141
"entrypoints": [
4242
"static/css/main.02152627.css",
43-
"static/js/main.e18b8229.js"
43+
"static/js/main.0714d193.js"
4444
]
4545
}

index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Pioreactor"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><script defer="defer" src="/static/js/main.e18b8229.js"></script><link href="/static/css/main.02152627.css" rel="stylesheet"></head><body><div id="root"></div></body></html>
1+
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Pioreactor"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><script defer="defer" src="/static/js/main.0714d193.js"></script><link href="/static/css/main.02152627.css" rel="stylesheet"></head><body><div id="root"></div></body></html>

pioreactorui/api.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -328,13 +328,14 @@ def set_clocktime() -> ResponseReturnValue:
328328

329329
# util
330330
def get_level_string(min_level: str) -> str:
331+
min_level = min_level.lower()
331332
levels = {
332-
"DEBUG": ["ERROR", "WARNING", "NOTICE", "INFO", "DEBUG"],
333-
"INFO": ["ERROR", "NOTICE", "INFO", "WARNING"],
334-
"WARNING": ["ERROR", "WARNING"],
335-
"ERROR": ["ERROR"],
333+
"debug": ["ERROR", "WARNING", "NOTICE", "INFO", "DEBUG"],
334+
"info": ["ERROR", "NOTICE", "INFO", "WARNING"],
335+
"warning": ["ERROR", "WARNING"],
336+
"error": ["ERROR"],
336337
}
337-
selected_levels = levels.get(min_level, levels["INFO"])
338+
selected_levels = levels.get(min_level, levels["info"])
338339
return " or ".join(f'level == "{level}"' for level in selected_levels)
339340

340341

@@ -367,6 +368,7 @@ def get_exp_logs(experiment: str) -> ResponseReturnValue:
367368
"""Shows event logs from all units, uses pagination."""
368369

369370
skip = int(request.args.get("skip", 0))
371+
min_level = request.args.get("min_level", "INFO")
370372

371373
try:
372374
recent_logs = query_app_db(
@@ -376,9 +378,10 @@ def get_exp_logs(experiment: str) -> ResponseReturnValue:
376378
on h.pioreactor_unit = l.pioreactor_unit
377379
and h.assigned_at <= l.timestamp
378380
and l.timestamp <= coalesce(h.unassigned_at, STRFTIME('%Y-%m-%dT%H:%M:%f000Z', 'NOW'))
379-
WHERE (l.experiment=? OR l.experiment=?)
381+
WHERE (l.experiment=? )
382+
AND ({get_level_string(min_level)})
380383
ORDER BY l.timestamp DESC LIMIT 50 OFFSET {skip};""",
381-
(experiment, UNIVERSAL_EXPERIMENT),
384+
(experiment,),
382385
)
383386

384387
except Exception as e:
@@ -393,11 +396,13 @@ def get_logs() -> ResponseReturnValue:
393396
"""Shows event logs from all units, uses pagination."""
394397

395398
skip = int(request.args.get("skip", 0))
399+
min_level = request.args.get("min_level", "INFO")
396400

397401
try:
398402
recent_logs = query_app_db(
399403
f"""SELECT l.timestamp, level, l.pioreactor_unit, message, task, l.experiment
400404
FROM logs AS l
405+
WHERE ({get_level_string(min_level)})
401406
ORDER BY l.timestamp DESC LIMIT 50 OFFSET {skip};"""
402407
)
403408

@@ -443,6 +448,7 @@ def get_logs_for_unit_and_experiment(pioreactor_unit: str, experiment: str) -> R
443448
"""Shows event logs from all units, uses pagination."""
444449

445450
skip = int(request.args.get("skip", 0))
451+
min_level = request.args.get("min_level", "INFO")
446452

447453
try:
448454
recent_logs = query_app_db(
@@ -454,6 +460,7 @@ def get_logs_for_unit_and_experiment(pioreactor_unit: str, experiment: str) -> R
454460
and l.timestamp <= coalesce(h.unassigned_at, STRFTIME('%Y-%m-%dT%H:%M:%f000Z', 'NOW') )
455461
WHERE (l.experiment=? or l.experiment=?)
456462
AND (l.pioreactor_unit=? or l.pioreactor_unit=?)
463+
AND ({get_level_string(min_level)})
457464
ORDER BY l.timestamp DESC LIMIT 50 OFFSET {skip};""",
458465
(experiment, UNIVERSAL_EXPERIMENT, pioreactor_unit, UNIVERSAL_IDENTIFIER),
459466
)
@@ -470,12 +477,14 @@ def get_logs_for_unit(pioreactor_unit: str) -> ResponseReturnValue:
470477
"""Shows event logs from all units, uses pagination."""
471478

472479
skip = int(request.args.get("skip", 0))
480+
min_level = request.args.get("min_level", "INFO")
473481

474482
try:
475483
recent_logs = query_app_db(
476484
f"""SELECT l.timestamp, level, l.pioreactor_unit, message, task, l.experiment
477485
FROM logs AS l
478486
WHERE (l.pioreactor_unit=? or l.pioreactor_unit=?)
487+
AND ({get_level_string(min_level)})
479488
ORDER BY l.timestamp DESC LIMIT 50 OFFSET {skip};""",
480489
(pioreactor_unit, UNIVERSAL_IDENTIFIER),
481490
)
@@ -1121,7 +1130,9 @@ def update_app_from_release_archive() -> ResponseReturnValue:
11211130
body = request.get_json()
11221131
release_archive_location = body["release_archive_location"]
11231132
assert release_archive_location.endswith(".zip")
1124-
task = tasks.update_app_from_release_archive_across_cluster(release_archive_location)
1133+
task = tasks.update_app_from_release_archive_across_cluster(
1134+
release_archive_location, units=body["units"]
1135+
)
11251136
return create_task_response(task)
11261137

11271138

pioreactorui/tasks.py

Lines changed: 52 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -110,22 +110,58 @@ def update_app_across_cluster() -> bool:
110110

111111

112112
@huey.task()
113-
def update_app_from_release_archive_across_cluster(archive_location: str) -> bool:
114-
logger.info(f"Updating app on leader from {archive_location}")
115-
update_app_on_leader = ["pio", "update", "app", "--source", archive_location]
116-
run_and_check_call(update_app_on_leader)
117-
# remove bits if success
118-
119-
logger.info(f"Updating app and ui on workers from {archive_location}")
120-
distribute_archive_to_workers = [PIOS_EXECUTABLE, "cp", archive_location, "-y"]
121-
run(distribute_archive_to_workers)
122-
123-
update_app_across_all_workers = [PIOS_EXECUTABLE, "update", "--source", archive_location, "-y"]
124-
run(update_app_across_all_workers)
125-
126-
update_ui_on_leader = ["pio", "update", "ui", "--source", "/tmp/pioreactorui_archive.tar.gz"]
127-
run(update_ui_on_leader)
128-
return True
113+
def update_app_from_release_archive_across_cluster(archive_location: str, units: str) -> bool:
114+
if units == "$broadcast":
115+
logger.info(f"Updating app on leader from {archive_location}")
116+
update_app_on_leader = ["pio", "update", "app", "--source", archive_location]
117+
run_and_check_call(update_app_on_leader)
118+
# remove bits if success
119+
120+
logger.info(f"Updating app and ui on workers from {archive_location}")
121+
distribute_archive_to_workers = [PIOS_EXECUTABLE, "cp", archive_location, "-y"]
122+
run(distribute_archive_to_workers)
123+
124+
update_app_across_all_workers = [
125+
PIOS_EXECUTABLE,
126+
"update",
127+
"--source",
128+
archive_location,
129+
"-y",
130+
]
131+
run(update_app_across_all_workers)
132+
133+
update_ui_on_leader = [
134+
"pio",
135+
"update",
136+
"ui",
137+
"--source",
138+
"/tmp/pioreactorui_archive.tar.gz",
139+
]
140+
run(update_ui_on_leader)
141+
return True
142+
else:
143+
logger.info(f"Updating app and ui on unit {units} from {archive_location}")
144+
distribute_archive_to_workers = [
145+
PIOS_EXECUTABLE,
146+
"cp",
147+
archive_location,
148+
"-y",
149+
"--units",
150+
units,
151+
]
152+
run(distribute_archive_to_workers)
153+
154+
update_app_across_all_workers = [
155+
PIOS_EXECUTABLE,
156+
"update",
157+
"--source",
158+
archive_location,
159+
"-y",
160+
"--units",
161+
units,
162+
]
163+
run(update_app_across_all_workers)
164+
return True
129165

130166

131167
@huey.task()
Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)