Mercurial > bottledash
annotate dash.py @ 19:be6a1aaec717
added the post listener, write logs if someone sends a post
author | sean |
---|---|
date | Tue, 11 Aug 2015 14:18:09 +0200 |
parents | 82d66f4488cd |
children | 1a13a4ecf931 |
rev | line source |
---|---|
4
3e66e2f92770
added LICENSE and license headers in the sourcecode. Added readme
sean
parents:
3
diff
changeset
|
1 """ |
3e66e2f92770
added LICENSE and license headers in the sourcecode. Added readme
sean
parents:
3
diff
changeset
|
2 This software is part of "Bottledash" |
3e66e2f92770
added LICENSE and license headers in the sourcecode. Added readme
sean
parents:
3
diff
changeset
|
3 author: sean engelhardt > sean.engelhardt@intevation.de |
3e66e2f92770
added LICENSE and license headers in the sourcecode. Added readme
sean
parents:
3
diff
changeset
|
4 license: GNU >= V2. See LICENSE for details |
3e66e2f92770
added LICENSE and license headers in the sourcecode. Added readme
sean
parents:
3
diff
changeset
|
5 """ |
3e66e2f92770
added LICENSE and license headers in the sourcecode. Added readme
sean
parents:
3
diff
changeset
|
6 |
3
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
7 from bottle import get, post, request, view, response, route |
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
8 from bottle import template, run, static_file, error |
19
be6a1aaec717
added the post listener, write logs if someone sends a post
sean
parents:
15
diff
changeset
|
9 import os.path, sys, configparser, functools, bottle |
be6a1aaec717
added the post listener, write logs if someone sends a post
sean
parents:
15
diff
changeset
|
10 import logging |
0 | 11 |
3
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
12 CONFIG_FILE = "dash.conf" |
8 | 13 PATH = os.path.abspath(os.path.dirname(sys.argv[0])) |
14 CONFIG_PATH = PATH + "/" + CONFIG_FILE | |
15 | |
9 | 16 # Create a new list with absolute paths |
17 MY_TEMPLATE_PATH = [ | |
10 | 18 os.path.abspath(os.path.join(os.path.dirname(__file__), './views')), |
9 | 19 ] |
20 | |
21 # Patch @view() so it uses the customized path list instead of the global one | |
22 view = functools.partial(bottle.view, template_lookup=MY_TEMPLATE_PATH) | |
23 | |
3
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
24 tiles = [] |
7 | 25 settings = {} |
3
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
26 |
7 | 27 default_settings = configparser.ConfigParser() |
19
be6a1aaec717
added the post listener, write logs if someone sends a post
sean
parents:
15
diff
changeset
|
28 default_settings['settings'] = {'show_top_bar': False, 'rows': 2} |
be6a1aaec717
added the post listener, write logs if someone sends a post
sean
parents:
15
diff
changeset
|
29 |
be6a1aaec717
added the post listener, write logs if someone sends a post
sean
parents:
15
diff
changeset
|
30 #logging: |
be6a1aaec717
added the post listener, write logs if someone sends a post
sean
parents:
15
diff
changeset
|
31 |
be6a1aaec717
added the post listener, write logs if someone sends a post
sean
parents:
15
diff
changeset
|
32 logger = logging.getLogger('myapp') |
be6a1aaec717
added the post listener, write logs if someone sends a post
sean
parents:
15
diff
changeset
|
33 hdlr = logging.FileHandler(PATH + '/bottledash.log') |
be6a1aaec717
added the post listener, write logs if someone sends a post
sean
parents:
15
diff
changeset
|
34 formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') |
be6a1aaec717
added the post listener, write logs if someone sends a post
sean
parents:
15
diff
changeset
|
35 hdlr.setFormatter(formatter) |
be6a1aaec717
added the post listener, write logs if someone sends a post
sean
parents:
15
diff
changeset
|
36 logger.addHandler(hdlr) |
be6a1aaec717
added the post listener, write logs if someone sends a post
sean
parents:
15
diff
changeset
|
37 logger.setLevel(logging.INFO) |
7 | 38 |
39 ##read the config file. usually "dash.conf" | |
3
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
40 def read_config(): |
8 | 41 |
42 # print(PATH) | |
7 | 43 global settings |
3
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
44 |
8 | 45 if os.path.isfile(CONFIG_PATH) == False: |
3
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
46 write_default_config() |
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
47 |
8 | 48 print("read existing config file...") |
3
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
49 config = configparser.ConfigParser() |
8 | 50 config.read(CONFIG_PATH) |
3
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
51 |
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
52 for section in config.items(): |
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
53 if "tile" in section[0]: |
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
54 tiles.append(section[1]) |
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
55 |
7 | 56 try: |
57 if config["settings"]: | |
58 settings = config["settings"] | |
59 else: | |
60 settings = default_settings["settings"] | |
61 except KeyError: | |
62 settings = default_settings["settings"] | |
63 | |
64 ###write the default condfig file if there is none | |
3
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
65 def write_default_config(): |
8 | 66 print("there is no Config file! Creating one...") |
67 file = open(CONFIG_PATH, "w") | |
3
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
68 file.write(""" |
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
69 ### bottledash default configuration |
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
70 ### created by sean engelhardt >sean.engelhardt@intevation.de |
7 | 71 ### license: GNU GPL >= v2. See LICENSE for details |
3
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
72 ### |
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
73 ### Usage: |
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
74 ### define the tiles for the dashboard in sections |
7 | 75 |
76 # Settings: | |
77 # example: | |
78 # -------------------- | |
79 # [settings] | |
80 # show_top_bar=True | |
81 # -------------------- | |
82 # options: | |
83 # show_top_bar (True / False) [optional] | |
84 # If True, the dashboard will show the current date and the time on the top | |
85 # if False, the dashboard will not show a top-bar | |
86 # default: True | |
87 # hint: the top-bar has got a height of 5%! | |
88 | |
89 [settings] | |
14 | 90 show_top_bar=False |
7 | 91 |
92 # Tiles: | |
93 # example: | |
94 # -------------------- | |
95 # [tile1] | |
96 # type=mon | |
97 # source=192.168.0.2 | |
98 # status=up | |
99 # -------------------- | |
100 # options: | |
101 # type (mon / d3js) [required] | |
102 # tells the program what kind of tile you need. | |
103 # a "mon" tile can be used for IT infrastructure monitoring purposes | |
104 # a d3js tile can be used to display a chart | |
105 # default: - | |
106 # | |
107 # source (<IP> or <FQDN>) [required for mon-types] | |
108 # ONLY FOR MON-Type tiles! | |
109 # tells the tile which resource to watch | |
110 # default: none | |
111 # | |
112 # status: (up / down) [required] | |
113 # ONLY FOR DEBUGGING PURPOSE - WILL BE REMOVED LATER | |
114 # simulates up and down events for mon-type-tiles | |
14 | 115 # |
116 # div_name: (identifier) [required for d3js-types] | |
117 # | |
118 # script: (name of a script without extension) [required for d3js-types0] | |
119 # | |
120 | |
3
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
121 |
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
122 [tile1] |
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
123 type=mon |
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
124 source=192.168.0.2 |
14 | 125 status=down |
3
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
126 |
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
127 [tile2] |
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
128 type=mon |
7 | 129 source=192.168.2.3 |
14 | 130 status=up |
7 | 131 |
132 [tile3] | |
133 type=mon | |
134 source=192.168.4.3 | |
3
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
135 status=up |
7 | 136 |
137 [tile4] | |
14 | 138 type=d3js |
139 div_name=techintern | |
140 script=display_issues_techintern | |
7 | 141 |
3
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
142 """) |
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
143 file.close() |
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
144 |
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
145 ##Bottle |
0 | 146 @route('/') |
15 | 147 @view('bottledash_view') |
0 | 148 def call_dashboard(): |
7 | 149 return dict(tiles=tiles, settings=settings) |
0 | 150 |
19
be6a1aaec717
added the post listener, write logs if someone sends a post
sean
parents:
15
diff
changeset
|
151 @post('/updown') |
be6a1aaec717
added the post listener, write logs if someone sends a post
sean
parents:
15
diff
changeset
|
152 def updown(): |
be6a1aaec717
added the post listener, write logs if someone sends a post
sean
parents:
15
diff
changeset
|
153 service = request.forms.get('service') |
be6a1aaec717
added the post listener, write logs if someone sends a post
sean
parents:
15
diff
changeset
|
154 status = request.forms.get('status') |
be6a1aaec717
added the post listener, write logs if someone sends a post
sean
parents:
15
diff
changeset
|
155 |
be6a1aaec717
added the post listener, write logs if someone sends a post
sean
parents:
15
diff
changeset
|
156 logger.info('------- new alert --------') |
be6a1aaec717
added the post listener, write logs if someone sends a post
sean
parents:
15
diff
changeset
|
157 logger.info('Service : ' + str(service)) |
be6a1aaec717
added the post listener, write logs if someone sends a post
sean
parents:
15
diff
changeset
|
158 logger.info('Status : ' + str(status)) |
be6a1aaec717
added the post listener, write logs if someone sends a post
sean
parents:
15
diff
changeset
|
159 logger.info('--------------------------') |
be6a1aaec717
added the post listener, write logs if someone sends a post
sean
parents:
15
diff
changeset
|
160 return "thx! :: " + str(service) + " is " + str(status) + " !" |
be6a1aaec717
added the post listener, write logs if someone sends a post
sean
parents:
15
diff
changeset
|
161 |
0 | 162 @route('/config') |
163 def call_config(): | |
164 return 'Not implemented yet' | |
165 | |
166 | |
167 @route('/static/<filepath:path>') | |
168 def server_static(filepath): | |
169 return static_file(filepath, root='./static_files/') | |
170 | |
171 @error(404) | |
172 def error404(error): | |
173 return 'Nothing here, sorry <br /> 404' | |
174 | |
3
3f5bcad45756
pars a .conf | dynamic adding of divs | dynamiv VP scaling
sean
parents:
0
diff
changeset
|
175 read_config() |
7 | 176 # print(tiles) |
9 | 177 run(host='localhost', port=8080, debug=True) |