Giter VIP home page Giter VIP logo

team_dashboard's Introduction

Team Dashboard

Team Dashboard lets you visualize your team's metrics all in one place (see Screenshots). It is build to be shown on a big screen in your team's space.

Heroku hosted Demo

It has built-in support for Graphite, Ganglia, Jenkins, Travis CI, Errbit, New Relic, Pingdom, Sensu and more and makes it really easy to add more data sources.

It is implemented as a Rails app and uses ActiveRecord to store your custom dashboards configuration.

Support via Team Dashboard Google Group

News

Team Dashboard 2.0.0 is available (March 5, 2013)

The final release is now available. More details in the Changelog!

Team Dashboard 2 RC2 is available (April 14, 2013)

Lots of new features and bugfixes. This is (hopefully) the last release candidate!

Read the Changelog!

Team Dashboard 2 RC1 is available (March 16, 2013)

Please checkout the Changelog and read the Migration Guide.

Getting Started

Debian Stable Prerequisites

Install bundler and the required libraries for gem compilation:

apt-get install bundler libxml2-dev libz-dev libmysqlclient-dev libxslt-dev

Download, install, and start

Clone the repository:

git clone git://github.com/fdietz/team_dashboard.git

Run bundler:

bundle install

On Windows the unicorn gem is not supported (the installation of the kgio gem will fail). But you can use thin instead (see Stack Overflow Issue).

Create a database.yml from the example config. Note, that this will overwrite your existing configuration using MySQL:

cp config/database.example.yml config/database.yml

Create the database and run migrations:

rake db:create && rake db:migrate

There is an initial "Demo" source and sample dashboards provided. Generate these via:

rake populate

Start the Rails server:

rails s

or use unicon directly:

bundle exec unicorn -c config/unicorn.rb

Running the build

Run the Rails unit/functional tests:

rake

Run the javascript unit tests (using karma):

karma start

Note, that it requires NodeJS to be installed. There's a package.json provided to install the dependencies using npm install command.

Configuration

System-wide configuration settings reside in config/secrets.yml.

For example when configuring graphite you can see the configuration settings in secrets.yml:

graphite_url: <%= ENV['GRAPHITE_URL'] %>

You can either change the configuration there or set the environment variable when starting the rails app:

GRAPHITE_URL=http://localhost:8080 rails s

Use environment variables in production instead of storing your secret information directly in secrets.yml. When deploying on Heroku you can set these as described in Configuration and Config Vars.

Alternatively, you can decide to remove secrets.yml from source control and instead link to a yml file existing on the production environment only. This is most commonly used when deploying with capistrano.

The configuration was changed to resemble the Rails 4.1 secrets.yml feature in order to support an easy upgrade path.

All data sources reside in app/models/sources and provide source code documentation with further details.

Dashboard Widgets

A dashboard in Team Dashboard consists of multiple Widgets, which request data from a data source via AJAX request.

All widgets have a name, time interval in which to update themselves and a data source as a common configuration.

You can easily add your own data source plugins (Data Source Plugins Developer Guide) and implement custom widgets (Widget Developer Guide).

Available Widgets

Graph Widget

The graph widget shows a time series line or area graph. Use it to show number of visits on your web page or number of currently online users and follow-up on trends.

It currently supports Graphite and Ganglia.

Number Widget

Shows the current integer value provided by the data source, the percentage of change compared to the previous value and an optional label. Use it to show for the example the number of errors on specific systems or the number of users.

It currently supports a New Relic, Hockey App, http proxy data source and Issue counter for Jira Filters.

Boolean Widget

Shows the current boolean value provided by the data source and an optional label. Use it to show for example the success of a Jenkins build or the health status of a system.

It currently supports Pingdom, arbitrary shell commands and a http proxy data source.

Alert Widget

It is similar to the Boolean Widget. It is designed to show the alerts of your system. The idea behind was introducing a possibility for linking the dashboard with the Sensu monitoring framework and displaying the alerts and the respective messages.

It currently supports Sensu.

CI (Continous Integration Server) Widget

Shows the current build status for a given project.

It currently supports Jenkins and Travis CI.

Exception Tracker Widget

Shows the number of unresolved errors in your exception tracker, and when the last error occurred. It currently supports Errbit.

Status Table Widget

Shows data in a table format with an overall status (like the alert widget) and individual row status with a label and a value.

It currently supports using a json file as input.

Credits & Contributors

Thanks go to Martin Tschischauskas and Marno Krahmer who worked with me on the first iteration which was build as part of a XING Hackathon Project.

The MIT License

Copyright (c) 2012 Frederik Dietz

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

team_dashboard's People

Contributors

attiasr avatar averell23 avatar bobziuchkovski avatar draganmileski avatar fdietz avatar frankmt avatar hamann avatar jbianquetti avatar leejones avatar luxflux avatar ndbroadbent avatar newloki avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

team_dashboard's Issues

Separate periods for each target on graph widget

It would be useful for my team if we could graph on the same chart a specific target for this week and also last week, so we can compare how the activity is increasing or decreasing from one week to another.

In order to do that the user would need to select a specific period for each target, which is not possible at the moment.

Memory Leak

After running maybe 3 hours, the chromium process of team_dashboard (develeopment environment) uses about 1,5Gb RAM (chrome://memory-redirect). I'm using 2 Counter and 2 Graph widgets. Each of them updates in a 10 second interval.

I don't know where the problem lies. I'll check now with firefox to see wether it is browser specific or not. Do you experience also such a memory usage?

Tagging support for dashboard list

Allow to organize dashboards by tags.

I imagine this to include a simply tag filter for the dashboard index page and simple way to assign tags.

Source Plugins can specify additional config params

Source plugins should implement a fields method to specify additional config params:

def fields
[
{ :name => "http_proxy_url", :title => "Proxy Url", :mandatory => true },
{ :name => "value_path", :title => "Value Path" },
]
end

These additional fields will automatically be available in the widget configuration dialog.

Initial commit done: #ceb3bc0

Read-only/Presentation mode for dashboard

When running the dashboard on screen for presentation only we should hide all edit buttons and other interaction possibilities. Focus should be on the data!

I can see already see a presentation button for the dashboard!

Zoom graph chart

Would be useful to have an option to zoom the graph chart and inspect historical data, eg select different date ranges and drilldown deeply into data

Target/Metric fetching should be deferred to the target browser dialog

Currently, when opening the widget edit dialog (or selecting a different source) we fetch all the available metrics and only after they are fetched we show the actual list of targets.

Instead we want to render the target list right away. Only when opening the target browser dialog we should fetch the list of available metrics. A loading indicator should show the progress.

Make Graph widged more readable for two sources

Hi There,

I think that it will good to be able to see information lengend on the bottom of the graph widget, containing info what is represented by particular color of the line in the graph. Also, the "0" number on the Y-axis is half hidden.

Graphite Target selection

We have about 10400 metrics in graphite. So the target selection autocompletion is quite laggy :) I think memcache would be quite cool or we could start with saving them to the database at first. What do you think about it?

Also the longest paths have up to 83 signs, so the field is way to small to display the full path and even with the line break it is not so easy to use :)
What do you think about a tree view like the one the Graphite composer uses?

Add widget which embeds any URL

It should be easy to display a widget with via URL, which might return HTML (via iFrame) or an image.

One use case could be to actually only embed a generated graph image from graphite directly. The graphite url api supports parameters as for example: width, height, graphOnly and bgColor. So, it actually looks pretty decent.

Dashboard behaves strange when you reload the browser page

When i reload the page on the browser all widgets get stuck in the left upper corner and overlap each other. Moreover, the widgets that have x value >1 become widgets with x=1 and the content is overflowing. Then i try to reopen it by selecting Dashboards/(TheDashboard) and then everything is fine again

SSL certificate verification issue

I have an issue with SSL certificate verification. Looks like it's not valid (enough) and so I want to disable the verification (for now). I only could solve this by adding to various places:

http.verify_mode = OpenSSL::SSL::VERIFY_NONE

or

::HttpService.request(url, :ssl => {:verify => false})

Any chance or ideas how to configure this globally? Sth. like default HttpService params??

Graph renders sawtooth pattern due to incorrect null values handling

rickshaw.js can't handle null values, that is why we replace these with integer 0 values instead.

But, in case of missing datapoints this creates a sawtooth graph, which always connects real data points to a zero (therefore not really existing) datapoint.

Our goal should be to simply not draw the zeros and leave an area of the graph blank, but not drawing anything.

I've tested this with other graph libraries like flotr successfully, but still have to find a way to do this with rickshaw.js.

fix travis ci build

We've setup a build but due to missing database.yml and existance of database tables in mysql it fails

Graph widget support for Graphite constantLine, drawAsInfinite, events functions

All these functions return a datapoints array which doesn't match a request graph target. Whereas the graph has datapoints for each timestamp, the constantLine has only a single datapoint.

rickshaw.js can't handle that and throws the following error message :

Uncaught series cannot have differing numbers of points: 60 vs 1; see Rickshaw.Series.zeroFill()

(this happens in the this.validateSeries() function, before even trying to render the graph)

So we have to either adapt the datapoints json on the server or client side. Client side would be nicer since it keeps the data source plugins simple. It might be possible that its actually cleaner to support specific things, like a horizontal or vertical line in the graph (as an overlay) explicitly on the server side though.

Adding a graphite function with function browser dialog throws errors and locks screen for several seconds

This is the error complete error messages. The same error happens with the target browser dialog called from the function editor dialog

select select Sizzle jQuery.fn.extend.find jQuery.fn.jQuery.init jQuery jQuery.event.dispatch jQuery.event.add.elemData.handle.eventHandle jQuery.event.trigger jQuery.fn.extend.trigger jQuery.extend.each jQuery.fn.jQuery.each jQuery.fn.extend.trigger jQuery.each.jQuery.fn.(anonymous function) a.fn.extend.focus Modal.enforceFocus jQuery.event.dispatch jQuery.event.add.elemData.handle.eventHandle jQuery.event.trigger jQuery.fn.extend.trigger jQuery.extend.each jQuery.fn.jQuery.each jQuery.fn.extend.trigger jQuery.each.jQuery.fn.(anonymous function) a.fn.extend.focus Modal.enforceFocus jQuery.event.dispatch jQuery.event.add.elemData.handle.eventHandle jQuery.event.trigger jQuery.fn.extend.trigger jQuery.extend.each jQuery.fn.jQuery.each jQuery.fn.extend.trigger jQuery.each.jQuery.fn.(anonymous function) a.fn.extend.focus Modal.enforceFocus jQuery.event.dispatch jQuery.event.add.elemData.handle.eventHandle jQuery.event.trigger jQuery.fn.extend.trigger jQuery.extend.each jQuery.fn.jQuery.each jQuery.fn.extend.trigger jQuery.each.jQuery.fn.(anonymous function) a.fn.extend.focus Modal.enforceFocus jQuery.event.dispatch jQuery.event.add.elemData.handle.eventHandle jQuery.event.trigger jQuery.fn.extend.trigger jQuery.extend.each jQuery.fn.jQuery.each jQuery.fn.extend.trigger jQuery.each.jQuery.fn.(anonymous function) a.fn.extend.focus Modal.enforceFocus jQuery.event.dispatch jQuery.event.add.elemData.handle.eventHandle jQuery.event.trigger jQuery.fn.extend.trigger jQuery.extend.each jQuery.fn.jQuery.each jQuery.fn.extend.trigger jQuery.each.jQuery.fn.(anonymous function) a.fn.extend.focus Modal.enforceFocus jQuery.event.dispatch jQuery.event.add.elemData.handle.eventHandle jQuery.event.trigger jQuery.fn.extend.trigger jQuery.extend.each jQuery.fn.jQuery.each jQuery.fn.extend.trigger jQuery.each.jQuery.fn.(anonymous function) a.fn.extend.focus Modal.enforceFocus jQuery.event.dispatch jQuery.event.add.elemData.handle.eventHandle jQuery.event.trigger jQuery.fn.extend.trigger jQuery.extend.each jQuery.fn.jQuery.each jQuery.fn.extend.trigger jQuery.each.jQuery.fn.(anonymous function) a.fn.extend.focus Modal.enforceFocus jQuery.event.dispatch jQuery.event.add.elemData.handle.eventHandle jQuery.event.trigger jQuery.fn.extend.trigger jQuery.extend.each jQuery.fn.jQuery.each jQuery.fn.extend.trigger jQuery.each.jQuery.fn.(anonymous function) a.fn.extend.focus Modal.enforceFocus jQuery.event.dispatch jQuery.event.add.elemData.handle.eventHandle jQuery.event.trigger jQuery.fn.extend.trigger jQuery.extend.each jQuery.fn.jQuery.each jQuery.fn.extend.trigger jQuery.each.jQuery.fn.(anonymous function) a.fn.extend.focus Modal.enforceFocus jQuery.event.dispatch jQuery.event.add.elemData.handle.eventHandle jQuery.event.trigger jQuery.fn.extend.trigger jQuery.extend.each jQuery.fn.jQuery.each jQuery.fn.extend.trigger jQuery.each.jQuery.fn.(anonymous function) a.fn.extend.focus Modal.enforceFocus jQuery.event.dispatch jQuery.event.add.elemData.handle.eventHandle jQuery.event.trigger jQuery.fn.extend.trigger jQuery.extend.each jQuery.fn.jQuery.each jQuery.fn.extend.trigger jQuery.each.jQuery.fn.(anonymous function) a.fn.extend.focus Modal.enforceFocus jQuery.event.dispatch jQuery.event.add.elemData.handle.eventHandle jQuery.event.trigger jQuery.fn.extend.trigger jQuery.extend.each jQuery.fn.jQuery.each jQuery.fn.extend.trigger jQuery.each.jQuery.fn.(anonymous function) a.fn.extend.focus Modal.enforceFocus jQuery.event.dispatch jQuery.event.add.elemData.handle.eventHandle jQuery.event.trigger jQuery.fn.extend.trigger jQuery.extend.each jQuery.fn.jQuery.each jQuery.fn.extend.trigger jQuery.each.jQuery.fn.(anonymous function) a.fn.extend.focus Modal.enforceFocus jQuery.event.dispatch jQuery.event.add.elemData.handle.eventHandle jQuery.event.trigger jQuery.fn.extend.trigger jQuery.extend.each jQuery.fn.jQuery.each jQuery.fn.extend.trigger jQuery.each.jQuery.fn.(anonymous function) a.fn.extend.focus Modal.enforceFocus jQuery.event.dispatch jQuery.event.add.elemData.handle.eventHandle jQuery.event.trigger jQuery.fn.extend.trigger jQuery.extend.each jQuery.fn.jQuery.each jQuery.fn.extend.trigger jQuery.each.jQuery.fn.(anonymous function) a.fn.extend.focus Modal.enforceFocus jQuery.event.dispatch jQuery.event.add.elemData.handle.eventHandle jQuery.event.trigger jQuery.fn.extend.trigger jQuery.extend.each jQuery.fn.jQuery.each jQuery.fn.extend.trigger jQuery.each.jQuery.fn.(anonymous function) a.fn.extend.focus Modal.enforceFocus jQuery.event.dispatch jQuery.event.add.elemData.handle.eventHandle jQuery.event.trigger jQuery.fn.extend.trigger jQuery.extend.each jQuery.fn.jQuery.each jQuery.fn.extend.trigger jQuery.each.jQuery.fn.(anonymous function) a.fn.extend.focus Modal.enforceFocus jQuery.event.dispatch jQuery.event.add.elemData.handle.eventHandle jQuery.event.trigger jQuery.fn.extend.trigger jQuery.extend.each jQuery.fn.jQuery.each jQuery.fn.extend.trigger jQuery.each.jQuery.fn.(anonymous function) a.fn.extend.focus Modal.enforceFocus jQuery.event.dispatch jQuery.event.add.elemData.handle.eventHandle jQuery.event.trigger jQuery.fn.extend.trigger

Graphs For Today

It would be nice to have the option in the Dashboard to show all the graphs only from today. Not last 3 hours but really starting at 00:00. Or even a custom Point in Time.

Will try to send a pull request...

Thanks ;-)

Refactor rendering of widgets and loading indicator

When rendering a widget, one should actually see the widget container rendered first, and as a second step the loading indicator to fetch the data. As a third step the actual data should be rendered.

Currently, this is not cleanly separated. The rendering of the widget container and the actual widget is done in a single rendering step. Then a update event fetches data and renders the widget again.

This actually also affects widget implementations because they have to deal with being rendered even though the data is not available yet.

upgrade to Rails 3.2.8 breaks drag/drop for widgets

Doing a git clone and following the "Getting Started" works/looks great ... thanks.

But doing an upgrade of Rails to 3.2.8 breaks the UI drag/drop for widgets as follows:

gem 'rails', '3.2.8' <- in Gemfile
Bundler could not find compatible versions for gem "activesupport":
In snapshot (Gemfile.lock):
activesupport (3.2.5)
In Gemfile:
rails (= 3.2.8) ruby depends on
activesupport (= 3.2.8) ruby
Running bundle update will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.

... so after doing a 'bundle update' ... the following error in Chrome's developer console appears
after any attempt to do a drag/drop on a widget:

Uncaught TypeError: Object function ( selector, context ) {
  // The jQuery object is actually just the init constructor 'enhanced'
  return new jQuery.fn.init( selector, context, rootjQuery );
} has no method 'curCSS'
jquery-ui-1.8.20.custom.min.js:6

Any suggestions on how to fix ?
Thanks

Graphite, Faraday and URL encoding

The use of farday breaks the ability to use multiple targets from graphite. The problem is, that faraday encodes many targets as something like target%5B%5D=host1.value&target%5B%5D=host2.value which equals target[]=host1.value&target[]=host2.value. This is a PHP/Rails standard and django (on which graphite is based) does not like this. It just renders an empty array. The django way is to use something like target=host1.value&target=host2.value.

Faraday has an open bug about this and also a (pull request)[https://github.com/technoweenie/faraday/pull/186] which would fix this.

What should can we do here? One solution would be to use the fork of @sqrrrl to get the support now. We could switch to another library, but I really dislike this option as faraday beats all the others in modularity.

Proxy URL source preview mode in widget editor dialog

It should be possible to enter a url and the value_path and directly verify if it works correctly. Especially the value_path selection is error prone.

I'd like to actually see the json document and then the resulting value for given value_path.

Graphite Function Editing with Preview

Based on the discussion in #3 (#3) we want a further improved graphite configuration.

It should be possible to easily use graphite functions.

To minimize errors (wrong usage of functions, missing params, typos, etc.) we should consider a preview functionality.

Additionally, a list of available function should be shown if possible.

Fix/Simplify dashboard layout storage

Since the layout is stored separately from the widgets association to the dashboard (in the dashboards db table), they get out of sync sometimes.

Eventually you end up with a widget associated to a dashboard, but since it is not referenced in the layout it will not be shown.

Do not always re-fetch metrics/targets collection

Currently, when ever the user selected a source there's a fetch request for the metrics/targets collection. This takes quite a while.

Instead we should fetch each metric only once and keep it in a "pool" to reuse later on.

Refresh of the collection should happen automatically in the background, preferably without a specific user action.

Icinga-Web and Number Widget

Hi,

I try to integrate our icinga installation to team dashboard. icinga-web provides a neat api interface with json output.

The URI scheme is like
http://hostname/icinga-web/api/ %TARGET% / %COLUMNS% / %FILTER% / %ORDER% / %GROUPING% / %LIMIT% / %COUNTFIELD% / %OUTPUT_TYPE%

A filter is build like:
filters[AND(%column%|%operator%|%value%;%column%|%operator%|%value%)]

So a URI to get all Host in State 1 (down) is:

http://hostname/icinga-web/web/api/host/filter[AND(HOST_CURRENT_STATE%7C=%7C1)]/countColumn=COL/authkey=MYKEY/json

The output is something like:
{"result":[{"HOST_ID":"198616","HOST_OBJECT_ID":"2050","HOST_INSTANCE_ID":"1","HOST_NAME":"host.fooo","HOST_ALIAS":"host_alias","HOST_DISPLAY_NAME":"host.foo","HOST_ADDRESS":"172.0.0.123","HOST_IS_ACTIVE":"1"}],"success":"true","total":1}

But if I paste those URI to the http_proxy_url in a Number Widget, I just get the following error:
Error loading datapoints:

Internal server error: bad URI(is not URI?): http://hostname/icinga-web/web/api/host/filter[AND(HOST_CURRENT_STATE%7C=%7C1)]/countColumn=COL/authkey=MYKEY/json

Any ideas?

Improve error handling

Errors while fetching new data should be shown to the user in a helpful way.

This should allow the user to figure out if the widget configuration is wrong or if there's a connection problem, etc.

Helpful would be a human readable error message and the actual request information (request url, status code, etc.) to further simplify debugging.

Currently boolean/number sources using http_proxy will silently fail if the server responds html instead of json.

ssl assumed for port != 80 in graphite.rb

In app/models/sources/datapoints/graphite.rb:59

http.use_ssl = true if uri.port != 80
makes the assumption that anything not running on port 80 should use ssl

Wouldn't it be better to define the protocol in the environment variable at start and check with uri.scheme?

Widgets now have white background

I recently pulled the latest changes from the repo and now all my widgets look extremely ugly (the background of each widget is white, which doesn't fit the dashboard at all).

I assume this got in with the following commit:

5850981

-    className: "widget",
+    className: "widget portlet well well-small ui-widget ui-widget-content ui-corner-all",

The class well is defined in twitter boostrap with:

background-color: #f5f5f5; (pretty much white)

so I think this class needs to be overwritten or removed from the widget div

Availability to save already configured widgets

The Idea of keeping record of different dashboards is very good. One improvement for this can be if the dashboard can keep data of preconfigured widgets only. For example a showdown menu can be added next to "Lock" where the user can keep preconfigured widgets and add them when he needs them in his dashboards. This will save time in the future when the user needs to use widgets that he already configured in the past.

CI widget loses the light indicator

Sometimes the CI widget loses the light indicator and than you need to reload the page to get it back. I noticed that happens when the state is changed from "sleeping" to "building"

Jasmine tests dont seem to be working

Hi,

Im trying to run the jasmine specs but they dont seem to be passing as from today. Since I'm not completely sure if they are being maintained or not (or if there is a build somewhere), just wanted to check they should be ok.

Also would be interested in contributing to the project, but havent found any roadmap or list of issues so I can see if the things I want to do are planned or not.

Possibility of having Alert Widgets

The dashboard might become a little bit inefficient when it is used for big and complex systems where a lot of data has to be monitored. Sometimes even very big screen wont be enough to put all checks that you want. Even if you can put all of them it takes time to check them one by one whether everything is going well. One nice idea could be:

  • Monitoring only what you need in the moment and show an alert view widget on the first place of the screen when something goes wrong even if you dont have it on the current dashboard configuration.

For example if the server disk space goes above the predefined threshold and you dont have it on your dashboard, you definitely want to know it right away.

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.