Repository navigation
Expand file tree
/
Copy pathprometheustest.py
More file actions
86 lines (70 loc) · 2.9 KB
/
Copy pathprometheustest.py
File metadata and controls
86 lines (70 loc) · 2.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/usr/bin/python
from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
from prometheus_client import Gauge
import serial
import time
import json
PORT_NUMBER = 8080
# Setup Prometheus metrics.
bartemp_metric = Gauge('barometer_sensor_temperature_celcius', 'Barometric sensor temperature reading')
barpres_metric = Gauge('barometer_sensor_pressure_pascals', 'Barometric sensor pressure reading')
humidity_metric = Gauge('humidity_sensor_percent', 'Humidity sensor humidity reading')
humidity_temp_metric = Gauge('humidity_sensor_temperature_celcius', 'Humidity sensor temperature reading')
# Return the readings from the serial line.
def readSerial():
ser.write('g')
bartemp = float(ser.readline())
barpres = int(float(ser.readline()))
humidity = int(float(ser.readline()))
humtemp = int(float(ser.readline()))
return bartemp, barpres, humidity, humtemp
#This class will handles any incoming request from
#the browser
class myHandler(BaseHTTPRequestHandler):
#Handler for the GET requests
def do_GET(self):
if self.path=="/temp.json":
bartemp, barpres, humidity, humtemp = readSerial()
currenttime = time.time()
data = {'BarometerTemperature':bartemp, 'BarometerPressure':barpres, 'Humidity':humidity, 'HumidityTemperature':humtemp, 'CurrentTime':int(currenttime)}
self.send_response(200)
self.send_header('Content-type','application/json')
self.end_headers()
# Send the html message
self.wfile.write(json.dumps(data))
return
elif self.path=="/metrics":
bartemp, barpres, humidity, humtemp = readSerial()
bartemp_metric.set(bartemp)
barpres_metric.set(barpres)
humidity_metric.set(humidity)
humidity_temp_metric.set(humtemp)
registry = core.REGISTRY
params = parse_qs(urlparse(self.path).query)
if 'name[]' in params:
registry = registry.restricted_registry(params['name[]'])
try:
output = generate_latest(registry)
except:
self.send_error(500, 'error generating metric output')
raise
self.send_response(200)
self.send_header('Content-Type', CONTENT_TYPE_LATEST)
self.end_headers()
self.wfile.write(output)
return
else:
self.send_error(404,'File Not Found: %s' % self.path)
try:
#Create a web server and define the handler to manage the
#incoming request
server = HTTPServer(('', PORT_NUMBER), myHandler)
print 'Started httpserver on port ' , PORT_NUMBER
ser=serial.Serial('/dev/ttyUSB0')
time.sleep(2)
#Wait forever for incoming http requests
server.serve_forever()
except KeyboardInterrupt:
print '^C received, shutting down the web server'
server.socket.close()
ser.close()