alexhsamuel / apsis Goto Github PK
View Code? Open in Web Editor NEWGeneral-purpose scheduler.
License: Other
General-purpose scheduler.
License: Other
It should confirm that all schedule args match job params.
Experiment with this... does it look good?
e.g. very pale red for error state
Add a mechanism to archive runs so they aren't visible anymore.
and shut down cleanly.
Handle exceptions carefully when:
Produce useful diagnostics and put the run into the error state.
If the apsis
program receives an error response from the REST service, it should show the error message.
When invoking ssh:
BatchMode: yes
CheckHostIP: no
StrictHostKeyChecking: no
also disable X11 forwarding and whatever else we don't need.
On a run view, show:
Hide the rerun button unless this is a the latest rerun.
The "load ## bytes" link is always displayed.
Automatically load up to N bytes... 1 MB?
If a ScheduleAction
is about to schedule an existing run, it should rerun instead?
In jobs, order the arguments in the same order they're specified in the job.
Don't query since the beginning of time.
(This repo was originally derived from github.com/alexhsamuel/ora.)
Include a link as
Provide mechanisms for scheduling a daily run other than at a daytime on that date. Possibilities:
When a run output is large, its output isn't loaded automatically. The link to load it is broken.
Uncaught TypeError: Cannot read property 'output_url' of undefined
from RunView.vue:120
When watching a run, the history does not live-update.
Add this to the run websocket? or poll?
This is partly because log history is immediately added after run transitions.
Put it in the store, so that when we come back to the view the search/filter state is still there.
When the run socket disconnects and is reconnected, we need to flush the internal runs list.
To make it easier to learn what they mean.
If ssh for starting the agent fails slowly, this blocked Scheduled
. Add a timeout.
Specify a loader with yaml.load()
.
Provide a mechanism to configure short names for programs, schedules, and actions in the config file.
$ apsis runs
Error: unknown error [API status: 500]
18:11:41.836 root [E] Traceback (most recent call last):
File "/home/alex/sw/conda/envs/apsis/lib/python3.7/site-packages/sanic/app.py", line 603, in handle_request
response = await response
File "/home/alex/dev/apsis/python/apsis/service/api.py", line 416, in runs
until =until,
TypeError: query() got an unexpected keyword argument 'until'
That way browsers' link shortcuts (middle-click etc.) will work.
So that we don't block the event loop in a huge JSON marshaling.
Percent busy? Latency for "now" tasks? Queue length?
Paragraphs get mushed together.
This column always contains the same value.
Possibly, use the additional horizontal space to expand params into individual columns.
With "since:1d", jobs that started running more than a day ago aren't shown. Running jobs should be shown regardless of the time range. Possibly blocked jobs too.
Otherwise there are duplicates.
The scheduler should start all ready runs concurrently, rather than awaiting each one to start.
If two jobs are started simultaneously on the same host as the same user, a race can cause multiple agent processes to start. Only the last one is live, as it overwrites the pid file.
Improve atomicity in apsis.agent.main
.
We want to to support hierarchical job names, e.g. folder / job
.
Currently jobs.load_yaml_files()
reads subdirectories recursively and creates job ids containing /
.
This breaks the REST API as the job id goes into URL paths and / is not allowed.
/
?Otherwise, we may emit a log message after the event loop has shut down, which will fail when it tries to add a record to an asyncio.Queue
.
This blocks until the run becomes success, failure, or error.
For expected runs, we should populate the program (i.e. bind the job program) so that API requests show it. However, don't persist the program. Likewise for precos.
It should probably navigate somewhere, like the page for the rerun.
This should not be shown for jobs that haven't been started.
In apsis log, show agent process number and other stuff.
In agent log, show agent process number on POST.
In command line agent, show proc and port of connected agent.
Better debugging of agents going up and down, to figure out why they are left behind.
apsis/service/api.py:416
still uses until
.
17:30:06.408 asyncio [E] Task was destroyed but it is pending!
task: <Task pending coro=<websocket_log() running at /Users/alex/dev/apsis/python/apsis/service/main.py:82> wait_for=<Future finished result=None> cb=[<TaskWakeupMethWrapper object at 0x11c1d1948>()]>
17:30:06.408 asyncio [E] Task was destroyed but it is pending!
task: <Task pending coro=<Sanic.handle_request() running at /Users/alex/sw/conda/envs/apsis/lib/python3.6/site-packages/sanic/app.py:556> wait_for=<Task pending coro=<websocket_log() done, defined at /Users/alex/dev/apsis/python/apsis/service/main.py:77> wait_for=<Future finished result=None> cb=[<TaskWakeupMethWrapper object at 0x11c1d1948>()]>>
17:30:06.410 asyncio [E] Task was destroyed but it is pending!
task: <Task pending coro=<WebSocketCommonProtocol.transfer_data() running at /Users/alex/sw/conda/envs/apsis/lib/python3.6/site-packages/websockets/protocol.py:530> wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at 0x11c1d1fd8>()]> cb=[<TaskWakeupMethWrapper object at 0x11c1d1bb8>()]>
17:30:06.410 asyncio [E] Task was destroyed but it is pending!
task: <Task pending coro=<WebSocketCommonProtocol.close_connection() running at /Users/alex/sw/conda/envs/apsis/lib/python3.6/site-packages/websockets/protocol.py:807> wait_for=<Task pending coro=<WebSocketCommonProtocol.transfer_data() running at /Users/alex/sw/conda/envs/apsis/lib/python3.6/site-packages/websockets/protocol.py:530> wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at 0x11c1d1fd8>()]> cb=[<TaskWakeupMethWrapper object at 0x11c1d1bb8>()]>>
Exception ignored in: <generator object WebSocketCommonProtocol.close_connection at 0x11b276db0>
Traceback (most recent call last):
File "/Users/alex/sw/conda/envs/apsis/lib/python3.6/site-packages/websockets/protocol.py", line 855, in close_connection
File "/Users/alex/sw/conda/envs/apsis/lib/python3.6/asyncio/streams.py", line 312, in close
File "/Users/alex/sw/conda/envs/apsis/lib/python3.6/asyncio/selector_events.py", line 621, in close
File "/Users/alex/sw/conda/envs/apsis/lib/python3.6/asyncio/base_events.py", line 575, in call_soon
File "/Users/alex/sw/conda/envs/apsis/lib/python3.6/asyncio/base_events.py", line 358, in _check_closed
RuntimeError: Event loop is closed
Some expected runs produce entries in run_history but their run_ids are reused for other runs if Apsis is restarted. That causes the run_history for a run_id to mix history from multiple runs.
Either store the largest run_id in the DB, or make "expected" runs real and store them in the database. Or both.
For example,
# Every hour, 10 min past the hour.
schedule:
type: interval
interval: 3600
offset: 600
It seems to show the Apsis hostname, not the name of the host on which the run was run.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.