Mercurial > bottledash
changeset 21:f730dd0bcf85
dynamic checking of the tile-status
author | sean |
---|---|
date | Thu, 13 Aug 2015 12:17:46 +0200 |
parents | 1a13a4ecf931 |
children | 3dfa9ed1dd8b |
files | README.txt dash.py modules/web_view/graph.html views/bottledash_view.tpl |
diffstat | 4 files changed, 217 insertions(+), 190 deletions(-) [+] |
line wrap: on
line diff
--- a/README.txt Wed Aug 12 13:45:58 2015 +0200 +++ b/README.txt Thu Aug 13 12:17:46 2015 +0200 @@ -12,3 +12,9 @@ For further details see the insctructions inside the dash.conf. + +#todo +POST-Request to update the tiles: + +curl -d service=192.168.2.3 -d status=up localhost:8080/updown +curl -d service=192.168.2.3 -d status=down localhost:8080/updown \ No newline at end of file
--- a/dash.py Wed Aug 12 13:45:58 2015 +0200 +++ b/dash.py Thu Aug 13 12:17:46 2015 +0200 @@ -173,7 +173,7 @@ if tile["source"] == str(service): tile["status"] = str(status) except KeyError: - logger.info("this tile got no source : " + str(tile)) + logger.info("this tile got no source : " + str(tile)) logger.info('------- new alert --------') @@ -183,6 +183,29 @@ return "thanks for informing bottledash! :: " + str(service) + " is " + str(status) + " !" + +@post('/ask-systemstate') +def get_systemstate(): + global tiles + service = request.forms.get('service') + + print("service: " + service) + + try: + for tile in tiles: + if tile["source"] == str(service): + # return "service : " + str(service) + " is " + str(tile["status"]) + return tile["status"] + except KeyError: + return "cannot find the service: " + str(service) + + return "did not found anything in my list for : " + service + + +@route('/static/<filename>') +def server_static(filename): + return static_file(filename, root=PATH + '/static/') + @error(404) def error404(error): return 'Nothing here, sorry <br /> 404'
--- a/modules/web_view/graph.html Wed Aug 12 13:45:58 2015 +0200 +++ b/modules/web_view/graph.html Thu Aug 13 12:17:46 2015 +0200 @@ -87,7 +87,10 @@ </style> <!-- <div id="content" style="display: inline-block"></div> --> -<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.6/d3.min.js" charset="utf-8"></script> +<!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.6/d3.min.js" charset="utf-8"></script> --> + +<script type="text/javascript" src="static/d3.v3.min.js"></script> + <script type="text/javascript"> // window.onresize = function(){
--- a/views/bottledash_view.tpl Wed Aug 12 13:45:58 2015 +0200 +++ b/views/bottledash_view.tpl Thu Aug 13 12:17:46 2015 +0200 @@ -3,207 +3,202 @@ License: GNU GPL >= v2. See LICENSE for details. --> <% - import math, os, sys, subprocess, html.parser - from datetime import date - - PATH = os.path.abspath(os.path.dirname(sys.argv[0])) - sys.path.append(PATH + "/modules") - import web_view - - ################# - # settings # - ################# - - show_top_bar = settings["show_top_bar"] - - ################# - # date and time # - ################# - - today = date.today() - weekday = ("Montag", "Dienstag", "Mittwoch", "Donnerstag", - "Freitag", "Samstag", "Sonntag")[today.weekday()] - month_name = ("Januar", "Februar", "März", "Aprill", "Mai", - "Juni", "Juli", "August", "September", "Oktober", - "November", "Dezember")[today.month-1] - - number_of_rows = 2 + import math, os, sys, subprocess, html.parser + from datetime import date - ################# - # viewport size # - ################# - vp_size = "17px" - #if len(tiles) <= 2: - # vp_size = "6vw" - #elif len(tiles) >2 and len(tiles) <=4 : - # vp_size = "5vw" - #elif len(tiles) >4 and len(tiles) <=6 : - # vp_size = "4vw" - #elif len(tiles) >6 and len(tiles) <=8 : - # vp_size = "3vw" - #end -%> -<meta http-equiv="refresh" content="5" /> -<script type="text/javascript"> - - var global_width; - var global_height; - var tile_width; - var tile_height; + PATH = os.path.abspath(os.path.dirname(sys.argv[0])) + sys.path.append(PATH + "/modules") + import web_view - var tiles = document.getElementsByClassName("tile"); - var border_width = 1; - var space_between_tiles = 8; - - var space_lr_borders; - var space_lr_margin; + ################# + # settings # + ################# - function calc_tile_with(){ - var tiles_per_row = Math.floor(tiles.length / {{number_of_rows}}); - var distance = (space_between_tiles*2) + (border_width*2); - var tile_width = ((global_width / tiles_per_row ) - distance); - return tile_width; - } + show_top_bar = settings["show_top_bar"] - function calc_tile_height(){ - var distance = (space_between_tiles*2) + (border_width*2); - var tile_height = ((global_height / {{number_of_rows}} ) - distance); - return tile_height; - } + ################# + # date and time # + ################# - function resize_content(){ - global_width = document.getElementById("content").clientWidth; - global_height = document.getElementById("content").clientHeight; + today = date.today() + weekday = ("Montag", "Dienstag", "Mittwoch", "Donnerstag", + "Freitag", "Samstag", "Sonntag")[today.weekday()] + month_name = ("Januar", "Februar", "März", "Aprill", "Mai", + "Juni", "Juli", "August", "September", "Oktober", + "November", "Dezember")[today.month-1] + + number_of_rows = 2 + + ################# + # viewport size # + ################# + vp_size = "17px" + #if len(tiles) <= 2: + # vp_size = "6vw" + #elif len(tiles) >2 and len(tiles) <=4 : + # vp_size = "5vw" + #elif len(tiles) >4 and len(tiles) <=6 : + # vp_size = "4vw" + #elif len(tiles) >6 and len(tiles) <=8 : + # vp_size = "3vw" + #end +%> + +<html> + <head> + <!-- <meta http-equiv="refresh" content="5" /> --> + <link rel="stylesheet" type="text/css" href="/static/dash_style.css"> + <style> + #content{ + min-width: 100%; + % if show_top_bar == "True": + height: 95%; + % else : + height: 100%; + %end + } + + .statusmon{ + color: white; + font-size: {{vp_size}}; + } + + .chart{ + font-size: {{vp_size}}; + } + </style> + + </head> + <body> - tile_width = calc_tile_with(); - tile_height = calc_tile_height(); - - for(var tile = 0; tile < tiles.length; tile++){ - tiles[tile].style.width= tile_width + 'px'; - tiles[tile].style.height= tile_height + 'px'; - } - } - - window.onresize = function(){ - resize_content(); - } - - document.addEventListener("DOMContentLoaded", function(event) { - resize_content(); - }); - -</script> - -<style> - *{ - margin: 0 auto; - padding: 0 auto; - font-family: "Lucida Console", Monaco, monospace; - } - - body { - overflow: hidden; - } - - #wrapper{ - background-color: #F2F2F2; - color: black; - min-width: 100%; - min-height: 100%; - } - - #topbar{ - min-width: auto; - padding-left: 8px; - padding-top: 8px; - padding-bottom: 8px; - /*height: 5%;*/ - font-family: Arial, Helvetica, sans-serif; - } - - #content{ - min-width: 100%; - % if show_top_bar == "True": - height: 95%; - % else : - height: 100%; - %end - } + <script type="text/javascript"> - .tile{ - float: left; - margin: 8px; - background-color: #FFFFFF; - border: 1px solid #999999; - border: none; - text-align:center; - vertical-align: middle; - } - - .clear{ - height: 0px; - clear: both; - } - - /*tiles types*/ - - .statusmon{ - color: white; - font-size: {{vp_size}}; - } - - .chart{ - font-size: {{vp_size}}; - } - - .active{ - border: 1px solid #00cc00; - background-color: #009900; - } - - .dead{ - border: 1px solid #cc0000; - background-color: #990000; - } + var global_width; + var global_height; + var tile_width; + var tile_height; -</style> - -<div id = "wrapper"> - % if show_top_bar == "True" : - <div id = "topbar"> - <b>{{weekday}}</b> {{today.day}}. {{month_name}} - </div> - % end - - <div id = "content"> - <% - for tile in tiles : - type = "" - tile_content = "" - status = "" + var tiles = document.getElementsByClassName("tile"); + var border_width = 1; + var space_between_tiles = 8; - if tile["type"] == "mon" : - type = "statusmon" - tile_content = tile["source"] - if tile["status"] == "up" : - status = "active" - else : - status = "dead" - end + var mon_tile_ips = []; - elif tile["type"] == "d3js" : - type = "chart" - status = tile["div_name"] - tile_content = web_view.make_chart(tile["script"], tile["div_name"]) - end - %> - <div class = "tile {{type}} {{status}}"> - {{!tile_content}} + //save the IPs if the mon-tiles + % for tile in tiles: + % if tile["type"] == "mon": + mon_tile_ips.push('{{tile["source"]}}'); + % end + % end + + var space_lr_borders; + var space_lr_margin; + + function calc_tile_with(){ + var tiles_per_row = Math.floor(tiles.length / {{number_of_rows}}); + var distance = (space_between_tiles*2) + (border_width*2); + var tile_width = ((global_width / tiles_per_row ) - distance); + return tile_width; + } + + function calc_tile_height(){ + var distance = (space_between_tiles*2) + (border_width*2); + var tile_height = ((global_height / {{number_of_rows}} ) - distance); + return tile_height; + } + + function resize_content(){ + global_width = document.getElementById("content").clientWidth; + global_height = document.getElementById("content").clientHeight; + + + tile_width = calc_tile_with(); + tile_height = calc_tile_height(); + + for(var tile = 0; tile < tiles.length; tile++){ + tiles[tile].style.width= tile_width + 'px'; + tiles[tile].style.height= tile_height + 'px'; + } + } + + function set_mon_tile_status(ip, status){ + document.getElementById(ip).className = "tile statusmon " + status; + } + + //check current state of I + function check_server_state(ip){ + var request = new XMLHttpRequest(); + var params = "service=" + ip; + request.open('POST', "http://localhost:8080/ask-systemstate", false); + request.send(params); + + // console.log(request.responseText); + return request.responseText + + } + + function check_server_state_loop() { + for (var i = 0; i < mon_tile_ips.length; i++) { + var state = check_server_state(mon_tile_ips[i]) + if (state == "up") { + set_mon_tile_status(mon_tile_ips[i], "active") + } else { + set_mon_tile_status(mon_tile_ips[i], "dead") + } + } + } + setInterval(check_server_state_loop, 10000); // Time in milliseconds + + window.onresize = function(){ + resize_content(); + } + + document.addEventListener("DOMContentLoaded", function(event) { + resize_content(); + }); + + </script> + + <div id = "wrapper"> + % if show_top_bar == "True": + <div id = "topbar"> + <b>{{weekday}}</b> {{today.day}}. {{month_name}} </div> - % end + <div id = "content"> + <% + for tile in tiles : + type = "" + tile_content = "" + status = "" + uid = "" + + if tile["type"] == "mon" : + type = "statusmon" + tile_content = tile["source"] + uid = tile["source"] + if tile["status"] == "up" : + status = "active" + else : + status = "dead" + end + + elif tile["type"] == "d3js" : + type = "chart" + uid = tile["div_name"] + tile_content = web_view.make_chart(tile["script"], tile["div_name"]) + end + %> + + <div class = "tile {{type}} {{status}}" id = {{uid}}> + {{!tile_content}} + </div> + + % end + </div> </div> -</div> + </body> +</html>