Oliver Giles
a7aac62897
fix SQLITE_DETERMINISTIC compile error under old sqlite3
...
the centos7 version of sqlite3 doesn't have SQLITE_DETERMINISTIC
2018-09-28 12:43:46 +03:00
Oliver Giles
08b3f25a22
Replace boost/filesystem with kj/filesystem
...
Lose the boost dependency since recent versions of capnproto's kj
also provide a nice filesystem library. Take the opportunity to
refactor the Run object to become more than POD and to encapsulate
some of the functionality that was done in the Laminar class
Part of #49 refactor
2018-09-28 12:43:40 +03:00
Oliver Giles
132d40e6a3
resolves #50 : badge url
...
Implements serving of an SVG badge at the url /badge/JOB.svg which
prettily shows the job's current status
2018-09-10 14:51:43 +03:00
Oliver Giles
ab7be5a6c9
resolves #52 : timeout prevents .after script
...
Mark .after scripts as executing even after a timeout abort
2018-09-09 12:15:23 +03:00
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
1f122518dd
resolves #64 : graph jumps to previous values
...
Ensure the old chart is completely removed before loading a new
set of values due to different page or sort options
2018-08-24 13:32:07 +03:00
Oliver Giles
f2bbfd91bb
charts: set linear minimum to 0
2018-08-24 13:31:29 +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
e506142fa4
Update Chart.js to latest: 2.7.2
...
Adapt to new API. This removes a few workarounds and should
contribute nicely to #44 , #45 and #57
2018-07-20 14:18:12 +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
078e0e9882
improve websocket handling
...
The previous implementation meant that messages could get lost if
both sending and receiving were scheduled to be processed in the
same event loop cycle. This commit separates the two channels
more clearly, while still allowing the close event in the receive
side to cancel the whole pipeline
Part of #49 refactor
2018-07-06 12:33:04 +03:00
Oliver Giles
4c2aa2680f
Implement websocket communication with kj-http
...
Now that capnp/kj provides http and websocket functions, replace
the excellent websocketpp library with the kj functions. This
removes a dependency and allows for more consistent idiomatic
code. Thanks websocketpp, it was great to have you along!
This should enable parts of the refactor described in #49
2018-06-30 20:34:56 +03:00
Oliver Giles
0b15939f90
resolves #59 : pagination doesn't work after reconnect
...
A subtle tweak to the websocket logic needed to handle
this edge case. Better comments added.
2018-06-30 20:19:54 +03:00
Oliver Giles
d241d6757f
resolves #58 : 'connecting' overlay not removed
...
Now that the 'status' message can be used also as an update
(since 2a14567
), extra care has to be taken with the popup
reconnecting overlay
2018-06-30 19:42:11 +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
ce81be85c7
resolves #48 : custom css ineffectual behind reverse proxy
...
Caddy (and probably other webservers) add a Content-Type header
when one was not supplied by the application backend. Under Chromium,
the css file is not interpreted if the webserver delivers it with
Content-Type: text/plain, althugh it does work if no Content-Type
header is set. To prevent the frontend proxy from adding the wrong
header, set it correctly in the first place
2018-05-04 07:48:48 +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
a5d8b985f1
laminarc: replace start with run
2018-04-06 13:43:38 +03:00
Oliver Giles
4d2388c271
resolves #33 : laminar start output should reference run number
2018-04-06 13:35:02 +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
3b267967cf
resolves #31 : exception thrown on bad file descriptor
...
Read or writes to bad file descriptors threw exceptions, just log
this instead. Also make sure that LaminarClients are removed from
the list of clients when a connection is aggressively dropped, and
add test
2018-01-27 13:11:40 +02:00
Oliver Giles
5ff3bbe2bb
add basic tests for conf, database and run
2018-01-26 13:07:02 +02:00
David Kalnischkies
ae961b97cb
replace gif status indicators with unicode symbols
2018-01-08 08:03:46 +02:00
Oliver Giles
6e4c89bd73
improve web notification format
2018-01-05 10:50:50 +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
3b0efcac9d
resolves #23 : In-browser notification
...
This implements web notifications on job completion. Opt-in
by default, the preference is saved in js localStorage and
can be toggled directly on any page
2017-12-29 17:18:43 +02:00
Oliver Giles
93b428529e
webui may be modified with custom style.css
2017-12-29 11:14:20 +02:00
Oliver Giles
e1a0c7bd0b
resolves #24 : notify and reconnect interrupted connections
...
A notification is shown on the webui when the websocket
connection is lost, and periodic retry is attempted
2017-12-23 17:15:48 +02:00
Václav Valíček
1bd4300d1b
Enable colored output for output logs
2017-12-21 08:57:24 +02:00
Oliver Giles
1f23ec5fb2
escape html tags in log output
...
While normally this isn't enough to prevent XSS, this output will only
appear in the body of a <pre>, and anyway the scripts are semi-privileged
2017-12-21 08:46:00 +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
bb9486e066
use compliant include guards
2017-12-20 08:24:25 +02:00
Oliver Giles
9e1a65ccee
server: minor websocket client handler refactor
...
Now explicitly closed connections on the client side are
closed with a clean error code. This is motivated by upcoming
work to detect broken websockets and automatically reconnect
2017-12-16 18:21:33 +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
e371f8ca5a
server: use regular char array as buffer
...
This approach finally solves the crash under hardened gentoo
discussed in #19
2017-12-07 18:28:12 +02:00
Oliver Giles
4c63cef7ac
remove unnecessary attach()
2017-12-06 21:59:22 +02:00
Oliver Giles
272176a6a5
server: allocate a single buffer per file descriptor
2017-12-06 21:51:50 +02:00
Oliver Giles
b70e501d6d
attempt to solve segfault under hardened gentoo
...
Can't reproduce this locally, but looks like using a std::string
as an arbitrary buffer is causing problems. See #19
2017-12-06 09:24:35 +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
7dce535264
webui: navbar with square corners
2017-12-02 20:52:34 +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
07c024e6ed
resolves #21 : executors graph incorrect after refresh
2017-12-02 19:10:00 +02:00
Oliver Giles
288b950f9e
resolves #20 : queued runs lost on job page refresh
2017-12-02 19:06:54 +02:00
Oliver Giles
9685563338
debug: don't assert on signo != SIGCHLD
2017-12-02 18:54:39 +02:00
Oliver Giles
ea133382b0
improve run status icon consistency
2017-12-02 18:30:45 +02:00
Oliver Giles
2214bef262
show first run of a job on all jobs page
2017-12-02 17:55:32 +02:00
palica
c7c70538c3
formating changes for time display
2017-12-01 14:12:03 +02:00
Oliver Giles
e94f4e2651
resolves #16 : first run of a job does not update duration
2017-11-18 11:26:04 +02:00
Oliver Giles
298f72f81b
fix duplicated progress spinner on run page
2017-11-07 19:04:49 +02:00
Oliver Giles
ce0a127a30
Dynamically update duration on job page
...
Show dynamically updating duration for active jobs on the
job page. This adds to the resolution for #8
2017-11-07 08:35:49 +02:00
Oliver Giles
309654ef8a
Merge pull request #13 from palica/patch-1
...
typo
2017-11-07 08:30:06 +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
palica
3c658abb27
typo
2017-11-07 01:37:21 +01:00
Oliver Giles
022aa0d804
Show active job running time on dashboard
2017-11-06 19:22:03 +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
7a7c5bc5aa
resolves #10 : make total build graph semi-transparent
2017-11-06 07:38:04 +02:00
Oliver Giles
7d47bc4b89
resolves #8 : show execution time of the running job
2017-11-06 07:38:04 +02:00
Oliver Giles
576159d8e9
send correct Content-Type header for static resources
2017-10-31 20:07:12 +02:00
Oliver Giles
32426ee34f
rundir could not be kept, use consistent naming
2017-10-14 17:51:24 +03:00
Oliver Giles
47ef181043
if https then use wss
2017-09-23 14:36:04 +03:00
Oliver Giles
6c853f045e
archive url must be absolute
2017-09-23 11:11:38 +03:00
Oliver Giles
0e31fed78e
fix pedantic 32-bit compile error
2017-09-22 19:00:55 +03:00
Oliver Giles
91baf358da
plain run vars override vars from parameterized triggers
2017-08-16 09:09:01 +03:00
Oliver Giles
636dfb8651
use shorter build vars in traditional style
2017-08-16 09:08:57 +03:00
Oliver Giles
0b9fb54b02
laminarc: read LAMINAR_BIND_RPC
2017-08-15 08:41:53 +03:00
Oliver Giles
b7644494fc
unlink unix sockets before binding
2017-08-15 08:33:15 +03:00
Oliver Giles
713462f37f
update progress bar when navigating between Runs
...
When navigating between Run pages, the jobsRunning array used
by the ProgressUpdater was cleared after the status message had
inserted the new Run instead of before
2017-08-15 08:33:15 +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
c12fb3f030
remove unnecessary default parameter
2017-08-12 15:10:06 +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
ab99af7ca7
implement general-purpose locks
2017-08-10 07:40:30 +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
1bcb2c8dfe
remove no longer used frontend templates
2017-07-31 08:31:43 +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
Oliver Giles
ad9837fd96
frontend: replace angular with vue
2017-07-13 21:59:59 +03:00
Oliver Giles
4e911756bc
update copyright year
2016-07-25 15:00:49 +03:00
Oliver Giles
2ea27d46ed
implement proper child cleanup
2016-07-25 14:59:45 +03:00
Oliver Giles
7b7de751e3
fix for new non-COW std::strings
2016-07-23 18:07:33 +03:00
Oliver Giles
82b39c2961
compress logs in database
2015-12-06 13:47:43 +01:00
Oliver Giles
1eb6a9138e
better message on execl failure
2015-12-06 12:41:38 +01:00
Oliver Giles
e7fe117426
don't log full file paths, remove use of KJ_DBG
2015-12-06 12:36:12 +01:00
Oliver Giles
99fd47de68
order recent builds in job page chronologically
2015-12-06 12:20:14 +01:00
Oliver Giles
f181c87d3b
report running state, only show spinner when actually running
2015-12-06 12:15:05 +01:00
Oliver Giles
87ebf91f1e
don't show previous build button for first job run
2015-12-06 11:54:34 +01:00
Oliver Giles
10d7ad8960
create db with primary key and index
2015-12-06 11:53:06 +01:00
Oliver Giles
e40fb52554
output a warning when archive exists instead of failing
2015-12-06 11:37:24 +01:00
Oliver Giles
d44d5ba0e6
boost compatibility
2015-11-19 21:43:08 +01:00
Oliver Giles
56a8301e85
increment busyExecutors only when queueing cannot fail
2015-11-01 11:35:46 +01:00
Oliver Giles
695b52c101
error on non-existent job
2015-11-01 11:35:07 +01:00
Oliver Giles
cb954f0ff8
FE cleanup, send missing messages
2015-11-01 11:34:18 +01:00
Oliver Giles
16081adb30
add missing enum conversion
2015-11-01 11:30:18 +01:00
Oliver Giles
beede38643
propagate job_completed message to run page
2015-11-01 11:29:06 +01:00
Oliver Giles
e140221c72
cleanup, dynamically present artifacts
2015-11-01 11:28:22 +01:00
Oliver Giles
b3cd9929b7
client: when job fails, still wait for others to complete
2015-11-01 11:25:43 +01:00
Oliver Giles
2b6cbc18b1
spinner+progress
2015-11-01 11:24:28 +01:00
Oliver Giles
1e0a2ebc36
frontend love
2015-09-26 22:54:27 +02:00
Oliver Giles
0df97e95fd
support for job and node tags
2015-09-24 22:02:11 +02:00
Oliver Giles
79c3ee5fcb
fix spelling mistake
2015-09-24 21:07:48 +02:00
Oliver Giles
3ee5b4f8f6
better socket closing
2015-09-23 08:15:08 +02:00
Oliver Giles
f923762c7e
server cleanup, fix logic error in early promise resolution
2015-09-21 22:30:50 +02:00
Oliver Giles
cf9bee07db
add favicon, nav logo
2015-09-20 19:57:05 +02:00
Oliver Giles
a729a6782e
implement display and serving of archived artifacts
2015-09-19 17:24:20 +02:00
Oliver Giles
dbc75000a5
readability: move runFinished into its own function
2015-09-19 15:41:19 +02:00
Oliver Giles
50dd7b47af
use an empty string for the default node name
2015-09-19 15:40:53 +02:00
Oliver Giles
1caeeabbfd
expose lNode
2015-09-19 15:40:09 +02:00
Oliver Giles
ae59da1245
implement LAMINAR_KEEP_WORKDIR
2015-09-19 15:29:07 +02:00
Oliver Giles
291428ef2d
add support for global, node and job level env files
2015-09-19 14:55:16 +02:00
Oliver Giles
f260b7813c
remove iniparser, laminar.conf must be sourced
2015-09-19 14:36:03 +02:00
Oliver Giles
cf10d5c795
expose lArchive
2015-09-19 13:40:00 +02:00
Oliver Giles
2147346493
expose lResult and lLastResult
2015-09-19 10:38:34 +02:00
Oliver Giles
a2701dcfd9
Initial commit
2015-09-13 22:25:26 +02:00