build-canaries / nevergreen Goto Github PK
View Code? Open in Web Editor NEW:baby_chick: A build monitor with attitude
Home Page: https://nevergreen.io
License: Eclipse Public License 1.0
:baby_chick: A build monitor with attitude
Home Page: https://nevergreen.io
License: Eclipse Public License 1.0
Travis info: http://docs.travis-ci.com/user/cc-menu/
Circle CI info: https://circleci.com/docs/polling-project-status
It would be nice to be able to quickly remove a build from the watch list for a configurable period, a few days or hours.
e.g. we currently have builds that depend on external integration points and we don't expect them to go green for a number of days. we want to supress the red status temporarily, but don't want to forget to re-enable the watch at some point in the future
currently we reload the page every 5 seconds, this would be nice if it was configurable.
If builds are all green. Allow the user to specify a URL for an image to load and displayed fullscreen.
This allows people to build their own monitors and then reuse our endpoints
This could be in the colour of the crayola version. And would link back to the github page.
This will result in massive changes to the clojure backend code as most of it wouldn't be required anymore.
Differentiate from user error 4xx and server error 5xx.
This can be used to tidy up #30
Currently they just use the min-width attribute in css which for certain screen sizes doesn't work correctly so you end up with just 1 or 2 columns instead of 3
I loaded the config screen after configuring previously and since cctray xml was already set Nevergreen tried to automatically fetch it. This resulted in the entire screen getting 'locked' by the loading widget 'forever'.
My guess would be this is because we just haven't set a timeout for the socket trying to fetch the xml.
Copy paste of faulty cctray.xml: https://gist.github.com/joejag/6b014d6d6a03122c3fe7
The first time a certain cctray xml is loaded there is no point of showing the new label on every single project.
We shouldn't have to force the user to remember the /config url. Let's put an onmousemove with timeout action on the monitor page, so when you move the mouse a button appears at the bottom of the page with a link to the config page.
To make things match up, The config page now has a 'watch' button at the bottom, rather than to the right of the cctray URL.
As it says in the title
simple html and javascript
this is annoying if you copy the url into the input and it has space it fails to get the projects
Slightly bad UX. It looks like you can press 'watch' straight away, but you can't as the saveProjects() handle is only first saved when you choose a project.
Better experience for new folk. Don't select projects so they still go to the config page.
New UI concept.
Other notes;
A possible solution https://www.npmjs.com/package/minifyify
If the network is slow or the xml very large it can take a noticeable amount of time and currently it looks like nothing is happening
Should we add all other options (e.g. #9, #24) to an "advanced config" section that is collapsed by default?
For example, where the current success text
label is would be replaced by an advanced
label of some kind which once clicked slides open to reveal the other options.
I'll try and attach a mock up of the idea tomorrow.
Currently it relies on getting the projects once then doing a check on the returned data, which may result in the projects being fetched again with the correct :server option. It also only detects the Go server, which incorrectly includes Snap.
This could probably be done using the url.
For both the config and main monitor screens
Currently the server doesn't really log anything so it's difficult to know what's going on.
For example issue #30 happened while the server was running in 'monitor mode' but I didn't know if it was happening intermittently on some calls or on every call and my internet was just being slow (which may have been part of the cause).
We should have an access log for every endpoint at least.
What is the best way to log? Just using clojure tools logging?
The loading spinner overlay should block the entire page until the call returns
We get a Javascript error as the name
field is missing for: https://nevergreen.herokuapp.com/test_data.xml
They should then all be fetched and aggregated together to form a single build view.
The admin screen would need to change to allow multiple urls to be specified and we'd probably want to highlight which xml file each project came from in some way.
In my opinion the main monitor view should stay the same.
Browserify allows you to organise your code better, like Require.JS does.
This allows us to not depend on global scope, and makes our JS into one file.
As a negative tradeoff, it will mean we will now have a pre-processor stage.
We will have one initialiser JS file, each class will take dependencies as function arguments to allow us to test easily.
This will allow us to move the js source code under src
Travis CI cctray.xml do not work as we throw an error during SSL handshake
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
........
........
........
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
URL: https://api.travis-ci.org/repositories/rails/rails/cc.xml
Not sure if this is something we pass to Java to disable, or something we can put in the clj-cctray library to tell it not to check. We should prefer not adding config to load nevergreen.
This shouldn't be done at the same time as issue #12
This will allow us to add specific parsing options for that particular CI server, currently this is only important for Go and Snap.
Now we always try and perform the Go/Snap specific parsing.
We could also just ask on the config screen but working it out automatically seems nicer if we can consistently.
java.lang.NullPointerException: null
Reflector.java:301 clojure.lang.Reflector.invokeNoArgInstanceMember
reader.clj:13 clj-cctray.reader/http-read-unsecured->String
reader.clj:23 clj-cctray.reader/xml-reader
parser.clj:10 clj-cctray.parser/to-map
parser.clj:22 clj-cctray.parser/get-projects
core.clj:36 clj-cctray.core/get-projects
RestFn.java:439 clojure.lang.RestFn.invoke
api.clj:22 nevergreen.api/get-interesting-projects
app.clj:25 nevergreen.app/fn
core.clj:99 compojure.core/make-route[fn]
core.clj:45 compojure.core/if-route[fn]
core.clj:30 compojure.core/if-method[fn]
core.clj:112 compojure.core/routing[fn]
core.clj:2515 clojure.core/some
core.clj:112 compojure.core/routing
RestFn.java:139 clojure.lang.RestFn.applyTo
core.clj:626 clojure.core/apply
core.clj:117 compojure.core/routes[fn]
keyword_params.clj:32 ring.middleware.keyword-params/wrap-keyword-params[fn]
nested_params.clj:75 ring.middleware.nested-params/wrap-nested-params[fn]
params.clj:58 ring.middleware.params/wrap-params[fn]
multipart_params.clj:107 ring.middleware.multipart-params/wrap-multipart-params[fn]
flash.clj:31 ring.middleware.flash/wrap-flash[fn]
session.clj:85 ring.middleware.session/wrap-session[fn]
Var.java:379 clojure.lang.Var.invoke
reload.clj:18 ring.middleware.reload/wrap-reload[fn]
stacktrace.clj:17 ring.middleware.stacktrace/wrap-stacktrace-log[fn]
stacktrace.clj:80 ring.middleware.stacktrace/wrap-stacktrace-web[fn]
jetty.clj:18 ring.adapter.jetty/proxy-handler[fn]
(Unknown Source) ring.adapter.jetty.proxy$org.eclipse.jetty.server.handler.AbstractHandler$ff19274a.handle
HandlerWrapper.java:116 org.eclipse.jetty.server.handler.HandlerWrapper.handle
Server.java:363 org.eclipse.jetty.server.Server.handle
AbstractHttpConnection.java:483 org.eclipse.jetty.server.AbstractHttpConnection.handleRequest
AbstractHttpConnection.java:931 org.eclipse.jetty.server.AbstractHttpConnection.content
AbstractHttpConnection.java:992 org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content
HttpParser.java:856 org.eclipse.jetty.http.HttpParser.parseNext
HttpParser.java:240 org.eclipse.jetty.http.HttpParser.parseAvailable
AsyncHttpConnection.java:82 org.eclipse.jetty.server.AsyncHttpConnection.handle
SelectChannelEndPoint.java:628 org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle
SelectChannelEndPoint.java:52 org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run
QueuedThreadPool.java:608 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob
QueuedThreadPool.java:543 org.eclipse.jetty.util.thread.QueuedThreadPool$3.run
Thread.java:745 java.lang.Thread.run
This might help in deciding if the project should be included or not.
We currently output the same file for our JavaScript and CSS, could this result in having caching issues when we release new versions?
If the user navigates back to the config screen, any new projects that didn't exist the last time they checked should be highlighted in some way
Once the screen is resized to a certain minimum size stop showing the projects in columns and just stack them all in rows.
The main target for Nevergreen is TVs and monitors to act as a team build monitor, so this is not high priority, but if it's easy it would be nice for individuals to be able to load on a phone.
Edit: I've changed this issue to just making the UI responsive including all the configuration tabs.
does not do anything just now
On the 'tracking - config' page if the url is blank, we should render a box of the usual cctray locations. We can put this text where we currently show the projects and the include/exclude all buttons.
We should hide the include/exclude buttons until the URL is added
The list of usual locations can be found on our README.
This will make it much easier to find and select the correct projects
Especially (or perhaps only) for projects that were previously selected for inclusion.
Needs some proper UX love but here are some ideas:
For the release I just uploaded the jar I built locally.
We should add a release promotion build to our SnapCI while following these instructions: https://developer.github.com/v3/repos/releases/
This could be done via the config screen and saved into local storage
Add to pre-push
After the build has been configured, returning to the config by going to /config.html causes the project list to be filled with the monitored projects.
The page works normally if you get there via /config (without .html extension)
Pick one at random to display when the success screen is shown
Then the "save" button could just become "start monitoring" or something similar.
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.