1
0
mirror of https://github.com/ohwgiles/laminar.git synced 2024-09-28 14:30:45 +00:00
Commit Graph

75 Commits

Author SHA1 Message Date
Oliver Giles
a2d30ad2ea resolves #62: add average line to build time graphs 2018-09-08 21:02:58 +03:00
Oliver Giles
010af57ed4 resolves #45: new graphs
- regressions and recoveries: list of jobs whose run status changed,
  ordered first by currently failing jobs, secondly by count of jobs
  since the status change, descending for currently failing jobs and
  ascending for currently passing jobs
- low pass rates: list of the jobs with the worst pass rates calculated
  over all time
- run time changes: jobs with the largest changes in build time. This
  is calculated as the difference between the range and the standard
  deviation over the past 10 runs.
- average run time distribution: shows the number of jobs in the
  system divided into buckets based on their average runtime
2018-09-08 18:16:30 +03:00
Oliver Giles
2349791676 resolves #47: jobs don't refresh on jobs page
The computed list of filtered jobs wasn't updated when a notification
was received from the server. Switch to using a method rather than a
computed property to fix this. Also add tags to jobs reported in
job_started and job_completed notifications
2018-08-24 13:10:00 +03:00
Oliver Giles
8bcce4d5cc resolves #40: implement frontend sorting
This feature allows runs to be sorted by result, number, start time
or duration, in ascending or descending order, on the Job page. Request
is processed server-side so that the correct page division can be done.
Currently running jobs are not sorted.
2018-08-24 12:15:40 +03:00
Oliver Giles
a81492e5bc use kj's onChildExit mechanism
This reduces code and allows for more idiosyncratic use of Promises.
Requires latest capnproto git.

Part of #49 refactor
2018-08-03 14:36:24 +03:00
Oliver Giles
4ffc22c657 use promises to control job runs
This is a refactor that more cleanly uses the kj framework for handling
processes spawned by Runs. This obviates the workaround introduced back in
ff42dae7cc, and incidentally now requires c++14.

Part of #49 refactor
2018-07-20 17:40:56 +03:00
Oliver Giles
d29715c0ec Reuse MappedFileImpl for reading custom css
This is nicer than slurping and removes a whole function. A further
improvement could be to retain the mapping permanently open.

Part of #49 refactor
2018-07-06 13:45:13 +03:00
Oliver Giles
758b5f2e46 resolves #37: closed connection on large files
The old implementation slurped the whole artefact into memory, and
did not ensure it remained allocated beyond the first call to write().
The new implementation uses mmap and ensures the mapping lasts until
the file has been delivered
2018-07-06 13:18:04 +03:00
Oliver Giles
2a14567b79 resolves #54: page number remembered between jobs 2018-06-16 17:07:04 +03:00
Oliver Giles
a0f586581d resolves #38: implement pagination for the job page 2018-06-01 14:51:34 +03:00
Oliver Giles
d1ca6392a4 resolves #43: limit the results displayed on home page
Limit "runs per job in last 24h" and "average runtime per job"
graphs to the top 5 in each case
2018-06-01 10:33:25 +03:00
Vaclav Valicek
fba2d226ef Show file sizes of artifacts (#53)
Show artifacts sizes in webui
2018-06-01 10:14:59 +03:00
Oliver Giles
180b5b7117 fix: spell out the constructor for gcc4.8 2018-05-14 20:54:12 +03:00
Oliver Giles
f1e4d10be3 resolves #36: queue/start/run 2018-05-12 17:56:56 +03:00
Oliver Giles
649caee297 resolves #30: job execution timeout
Add the ability to configure a timeout in seconds
after which a job run will be automatically aborted
2018-05-12 13:25:19 +03:00
Oliver Giles
083f136186 resolves #41: strange behaviour of limits
On a configuration change, update existing Nodes in Laminar's NodeMap
rather than replacing it with a new map.
2018-04-20 14:18:10 +03:00
Oliver Giles
c937362961 Update comment about loading configuration files
Dynamic reloading of config files was implemented in 216ecee7c5
2018-04-20 12:54:39 +03:00
Oliver Giles
216ecee7c5 resolves #34: watch for configuration changes
Reload the configuration if a change is detected
without requiring a server restart
2018-04-06 18:04:50 +03:00
Oliver Giles
9c256815e4 resolves #29: graceful shutdown
on SIGINT/SIGTERM:
1. stop accepting new connections
2. send SIGTERM to all child tasks
3. wait for processes to end
4. drop all websockets
2018-02-24 18:53:11 +02:00
Oliver Giles
30f2203a3b resolves #28: compensate for server/client clock skew 2018-02-03 16:52:46 +02:00
Oliver Giles
46efb07285 test: add LaminarTest stub 2018-02-03 16:47:41 +02:00
Oliver Giles
d7351c0c70 fix compile error on 32-bit Linux
On 32-bit Linux, time_t is a long. Laminar extensively uses
time_t but provided only int and int64 db access, making the
use of long ambiguous. Since there is no explicit use of int64,
and because on 32-bit Linux long and int are recognized as
different types despite being the same width, replacing the
int64 handlers with long handlers fixes the compile error
2018-01-04 08:40:10 +02:00
Oliver Giles
93b428529e webui may be modified with custom style.css 2017-12-29 11:14:20 +02:00
Oliver Giles
3129f0e73b fix pedantic compiler warnings 2017-12-21 08:19:45 +02:00
Oliver Giles
e0a130f33d add named getters to RunSet
this improves readability by removing the index-based
get<> methods in favour of explicitly named methods
2017-12-20 09:02:15 +02:00
Oliver Giles
ff42dae7cc read remaining data in run pipe when reaping
This fixes a bug where the last pieces of console output were lost. In that
case, the event loop scheduled the ended child process's SIGCHLD handler
before the handler to read the last of the process's output. We work around
that by doing an additional (non-blocking) read in the SIGCHLD handler
2017-12-09 20:27:08 +02:00
Oliver Giles
76e0e9e62a resolves #22: allow keeping N rundirs
This replaces LAMINAR_KEEP_RUNDIR (bool) with LAMINAR_KEEP_RUNDIRS (int)
2017-12-09 20:23:24 +02:00
Oliver Giles
74443c292a Fix copyright years
This reverts commit 4e911756bc.

In addition, copyright years are now expressed in the form of
(year file added)-(year file last changed)
2017-12-09 12:21:34 +02:00
Oliver Giles
9c92c5b514 don't leak file descriptors into runs 2017-12-04 20:31:23 +02:00
Oliver Giles
d91816097a resolves #19: laminard crashes under load
reading into a static buffer is a race condition that is only
manifested under load. There's no guarantee the clause in then()
will run before another task overwrites the buffer. Allocating
a local string is the only correct solution
2017-12-04 20:29:19 +02:00
Oliver Giles
28a939316c resolves #18: don't error out when rundir already exists 2017-12-02 20:52:19 +02:00
Oliver Giles
9685563338 debug: don't assert on signo != SIGCHLD 2017-12-02 18:54:39 +02:00
Oliver Giles
d3e4db1f29 show active jobs on Jobs page
Rows on the jobs page now updated also during their execution. This
improvement was discussed in #8 and #9
2017-11-07 08:21:01 +02:00
Oliver Giles
116dfaa3d0 calculate all duration in the client
This cleans up some inconsistency where sometimes 'completed-started' happened
on the client side and sometimes on the server. Also should fix the 'cumulative
time' issue mentioned in #8
2017-11-06 19:08:14 +02:00
Oliver Giles
32426ee34f rundir could not be kept, use consistent naming 2017-10-14 17:51:24 +03:00
Oliver Giles
0e31fed78e fix pedantic 32-bit compile error 2017-09-22 19:00:55 +03:00
Oliver Giles
e7aa979303 bugfix: wrong log compression limit check operator 2017-08-15 08:33:15 +03:00
Oliver Giles
b307e06a87 use comma as a tag separator instead of space 2017-08-15 08:33:15 +03:00
Oliver Giles
56d2f30976 align abstract socket address syntax to new capnp 2017-08-15 08:33:07 +03:00
Oliver Giles
eda906b805 refactor: remove transport knowledge from Laminar class
Improve the boundary between RpcImpl and LaminarInterface such
that the Laminar class doesn't require any types from kj/async.h.
The necessary logic moved from Laminar to RpcImpl and the notification
now happens by abstract virtual callback instead of kj::Promise.
Also remove the fairly useless 'wait' RPC call and drop the wrappers
around kj::PromiseFulfillerPair
2017-08-10 08:25:20 +03:00
Oliver Giles
f42325b472 implement .init script to populate workspace 2017-08-07 08:15:35 +03:00
Oliver Giles
4fc2310ed9 allow Run::addScript to accept a CWD for scripts 2017-08-07 08:07:50 +03:00
Oliver Giles
ae213b4f74 assymetric queueing logic
allow tagged job execution on an untagged node, but not
vice-versa. This allows the admin to assign tags for UI
grouping without worrying about nodes at all
2017-08-06 08:21:17 +03:00
Oliver Giles
9aa172e8f5 adapt nodes and tags to new folder structure 2017-08-06 08:19:58 +03:00
Oliver Giles
b45de55ed1 bugfix: correct path to node .before script 2017-08-06 08:19:00 +03:00
Oliver Giles
66b62f70f3 only compress logs larger than a certain size
this fixes an issue where empty or very small logs
resulted in a larger compressed log, which was
truncated and cannot be decompressed
2017-07-31 08:56:58 +03:00
Oliver Giles
3068180f8e give capnp ownership of process output fd
this fixes an intermittent issue (race condition?) where
the IoContext attempts to poll an already-closed fd
2017-07-31 08:53:50 +03:00
Oliver Giles
668ada74d1 move from directory-based to file-based job scripts 2017-07-31 08:51:46 +03:00
Oliver Giles
8080d38cfe fix reported estimated time of completion from websocket 2017-07-13 21:59:59 +03:00
Oliver Giles
492ddd2ceb "Laminar" as default page title 2017-07-13 21:59:59 +03:00