Coder Social home page Coder Social logo

build-canaries / nevergreen Goto Github PK

View Code? Open in Web Editor NEW
204.0 10.0 37.0 22.45 MB

:baby_chick: A build monitor with attitude

Home Page: https://nevergreen.io

License: Eclipse Public License 1.0

JavaScript 0.99% Clojure 12.92% Shell 2.82% HTML 0.20% Dockerfile 0.04% TypeScript 77.46% SCSS 5.56%
monitor continuous-delivery continuous-deployment continuous-integration cctray gocd jenkins circleci redux ci cd ci-cd react saas travis-ci cruisecontrol continuous-testing monitoring

nevergreen's Issues

ability to 'sleep' a build for a defined period

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

Use an image for success

If builds are all green. Allow the user to specify a URL for an image to load and displayed fullscreen.

Use the clj-cctray library

This will result in massive changes to the clojure backend code as most of it wouldn't be required anymore.

Stuck attempting to load cctray xml 'forever'

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.

Add admin page link that appears on the monitor page when the user moves the mouse

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.

New UI ideas

New UI concept.

  • All screens have access to the nav/menu which can be toggled to show/hide on left.
  • Multiple cctrays concept
  • Timing section
  • Success section (choose colours, images, text) room for themes?

Other notes;

  • Should clicking/touching a build expand the box to show more details about the break
  • Limit the total number of trays
  • Can mobile show 2 builds in a row, should this be configured in settings
  • Should there be an users section, where by people could be added to be emialed, alerted if a build keeps breaking or cannot be tracked etc.

nevergreen-concept

New UI: Config screen update for DesertSand

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.

Auto detect server type better

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.

Add better server and client logging (for development)

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?

Allow multiple cctray xml files to be used

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.

Introduce Browserify for organising the JS code

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

Do not check SSL certificates - Fails on Travis

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.

Attempt to guess the CI server from the URL

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.

NullPointerException on main build screen

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

Cache busting for releases

We currently output the same file for our JavaScript and CSS, could this result in having caching issues when we release new versions?

Responsive UI

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.

Add a helpful dialog that tells people where the usual cctray location is

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.

Create functional test

  • run the clojure app
  • go to localhost/config -> click watch (we will default config to be our test data or apache)
  • make sure localhost/ returns either a cat or an

Add to pre-push

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.