mirror of
https://github.com/alexhopeoconnor/SunGather.git
synced 2026-10-04 02:48:12 +10:00
Merge pull request #55 from michbeck100/feature/prometheus-export
adds /metrics endpoint with prometheus format
This commit is contained in:
@@ -39,6 +39,7 @@ Has multiple export locations out of the box:
|
||||
* MQTT - Load into MQTT, and optionally Home Assistance including Discovery
|
||||
* PVOutput - Load into PVOutput.org
|
||||
* InfluxDB - Load data directly into InfluxDB (v1.8 or v2.x)
|
||||
* Prometheus - Scrape from /metrics endpoint
|
||||
* Simple webserver showing collected data
|
||||
* Rasberry Pi Docker support
|
||||
* and more coming....
|
||||
|
||||
@@ -7,6 +7,7 @@ import logging
|
||||
|
||||
class export_webserver(object):
|
||||
html_body = "Pending Data Retrieval"
|
||||
metrics = ""
|
||||
def __init__(self):
|
||||
False
|
||||
|
||||
@@ -25,9 +26,12 @@ class export_webserver(object):
|
||||
|
||||
def publish(self, inverter):
|
||||
body = "<h3>Sungather v" + __version__ + "</h3></p><table><th>Address</th><tr><th>Register</th><th>Value</th></tr>"
|
||||
metrics = ""
|
||||
for register, value in inverter.latest_scrape.items():
|
||||
body = body + f"<tr><td>{str(inverter.getRegisterAddress(register))}</td><td>{str(register)}</td><td>{str(value)} {str(inverter.getRegisterUnit(register))}</td></tr>"
|
||||
body += f"<tr><td>{str(inverter.getRegisterAddress(register))}</td><td>{str(register)}</td><td>{str(value)} {str(inverter.getRegisterUnit(register))}</td></tr>"
|
||||
metrics += f"{str(register)}{{address=\"{str(inverter.getRegisterAddress(register))}\", unit=\"{str(inverter.getRegisterUnit(register))}\"}} {str(value)}\n"
|
||||
export_webserver.html_body = body + f"</table><p>Total {len(inverter.latest_scrape)} registers"
|
||||
export_webserver.metrics = metrics
|
||||
|
||||
body = "</p></p><table><tr><th>Configuration</th><th>Value</th></tr>"
|
||||
for setting, value in inverter.client_config.items():
|
||||
@@ -35,18 +39,26 @@ class export_webserver(object):
|
||||
for setting, value in inverter.inverter_config.items():
|
||||
body = body + f"<tr><td>{str(setting)}</td><td>{str(value)}</td></tr>"
|
||||
export_webserver.html_body = export_webserver.html_body + body + f"</table></p>"
|
||||
|
||||
|
||||
return True
|
||||
|
||||
class MyServer(BaseHTTPRequestHandler):
|
||||
def do_GET(self):
|
||||
self.send_response(200)
|
||||
self.send_header("Content-type", "text/html")
|
||||
self.end_headers()
|
||||
self.wfile.write(bytes("<html><head><title>SunGather</title><meta charset='UTF-8'><meta http-equiv='refresh' content='15'></head>", "utf-8"))
|
||||
self.wfile.write(bytes("<body>", "utf-8"))
|
||||
self.wfile.write(bytes(export_webserver.html_body, "utf-8"))
|
||||
self.wfile.write(bytes("</table>", "utf-8"))
|
||||
self.wfile.write(bytes("</body></html>", "utf-8"))
|
||||
if self.path == '/metrics':
|
||||
self.send_response(200)
|
||||
self.send_header("Content-type", "text/plain")
|
||||
self.end_headers()
|
||||
self.wfile.write(bytes(export_webserver.metrics, "utf-8"))
|
||||
else:
|
||||
self.send_response(200)
|
||||
self.send_header("Content-type", "text/html")
|
||||
self.end_headers()
|
||||
self.wfile.write(bytes("<html><head><title>SunGather</title><meta charset='UTF-8'><meta http-equiv='refresh' content='15'></head>", "utf-8"))
|
||||
self.wfile.write(bytes("<body>", "utf-8"))
|
||||
self.wfile.write(bytes(export_webserver.html_body, "utf-8"))
|
||||
self.wfile.write(bytes("</table>", "utf-8"))
|
||||
self.wfile.write(bytes("</body></html>", "utf-8"))
|
||||
|
||||
|
||||
def log_message(self, format, *args):
|
||||
pass
|
||||
|
||||
Reference in New Issue
Block a user