diff --git a/README.md b/README.md index 2ec8bbc..a2b6245 100644 --- a/README.md +++ b/README.md @@ -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.... diff --git a/SunGather/exports/webserver.py b/SunGather/exports/webserver.py index 2f6b88b..3200918 100644 --- a/SunGather/exports/webserver.py +++ b/SunGather/exports/webserver.py @@ -7,6 +7,7 @@ class export_webserver(object): html_body = "Pending Data Retrieval" + metrics = "" def __init__(self): False @@ -25,9 +26,12 @@ def configure(self, config, inverter): def publish(self, inverter): body = "

Sungather v" + __version__ + "

" + metrics = "" for register, value in inverter.latest_scrape.items(): - body = body + f"" + body += f"" + metrics += f"{str(register)}{{address=\"{str(inverter.getRegisterAddress(register))}\", unit=\"{str(inverter.getRegisterUnit(register))}\"}} {str(value)}\n" export_webserver.html_body = body + f"
Address
RegisterValue
{str(inverter.getRegisterAddress(register))}{str(register)}{str(value)} {str(inverter.getRegisterUnit(register))}
{str(inverter.getRegisterAddress(register))}{str(register)}{str(value)} {str(inverter.getRegisterUnit(register))}

Total {len(inverter.latest_scrape)} registers" + export_webserver.metrics = metrics body = "

" for setting, value in inverter.client_config.items(): @@ -35,18 +39,26 @@ def publish(self, inverter): for setting, value in inverter.inverter_config.items(): body = body + f"" export_webserver.html_body = export_webserver.html_body + body + f"
ConfigurationValue
{str(setting)}{str(value)}

" - + 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("SunGather", "utf-8")) - self.wfile.write(bytes("", "utf-8")) - self.wfile.write(bytes(export_webserver.html_body, "utf-8")) - self.wfile.write(bytes("", "utf-8")) - self.wfile.write(bytes("", "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("SunGather", "utf-8")) + self.wfile.write(bytes("", "utf-8")) + self.wfile.write(bytes(export_webserver.html_body, "utf-8")) + self.wfile.write(bytes("", "utf-8")) + self.wfile.write(bytes("", "utf-8")) + + def log_message(self, format, *args): pass