initial commit
This commit is contained in:
commit
eebe1afd5d
13
Pipfile
Normal file
13
Pipfile
Normal file
@ -0,0 +1,13 @@
|
||||
[[source]]
|
||||
name = "pypi"
|
||||
url = "https://pypi.org/simple"
|
||||
verify_ssl = true
|
||||
|
||||
[dev-packages]
|
||||
|
||||
[packages]
|
||||
paho-mqtt = "*"
|
||||
prometheus-client = "*"
|
||||
|
||||
[requires]
|
||||
python_version = "3.6"
|
36
Pipfile.lock
generated
Normal file
36
Pipfile.lock
generated
Normal file
@ -0,0 +1,36 @@
|
||||
{
|
||||
"_meta": {
|
||||
"hash": {
|
||||
"sha256": "580f0831d7226ccb878b639f429faf10c3dde1880ddc99549be76d3a5cfc6ad7"
|
||||
},
|
||||
"pipfile-spec": 6,
|
||||
"requires": {
|
||||
"python_version": "3.6"
|
||||
},
|
||||
"sources": [
|
||||
{
|
||||
"name": "pypi",
|
||||
"url": "https://pypi.org/simple",
|
||||
"verify_ssl": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"default": {
|
||||
"paho-mqtt": {
|
||||
"hashes": [
|
||||
"sha256:e440a052b46d222e184be3be38676378722072fcd4dfd2c8f509fb861a7b0b79"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==1.4.0"
|
||||
},
|
||||
"prometheus-client": {
|
||||
"hashes": [
|
||||
"sha256:71cd24a2b3eb335cb800c7159f423df1bd4dcd5171b234be15e3f31ec9f622da",
|
||||
"sha256:82d609eb7bf5843d4d2a94fed9dfd352ca9f4865ed12ff99569c2249858a8e51"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==0.7.1"
|
||||
}
|
||||
},
|
||||
"develop": {}
|
||||
}
|
60
exporter.py
Normal file
60
exporter.py
Normal file
@ -0,0 +1,60 @@
|
||||
from prometheus_client import start_http_server, Summary, Gauge
|
||||
import paho.mqtt.publish as publish
|
||||
import paho.mqtt.client as mqtt
|
||||
import random
|
||||
import time
|
||||
from node_api import NodeAPI
|
||||
|
||||
client_id = "exporter"
|
||||
topics = [
|
||||
("$SYS/broker/clients/connected", 0),
|
||||
("$CONNECTED/#", 0)
|
||||
]
|
||||
|
||||
node_api = NodeAPI()
|
||||
|
||||
MQTT_CONNECTED = Gauge('mqtt_node_connected', 'MQTT node connection status', ['node', 'description'])
|
||||
MQTT_BROKER_CLIENTS = Gauge('mqtt_broker_clients', 'MQTT broker clients connected')
|
||||
|
||||
def on_connect(client, userdata, flags, rc):
|
||||
print("Connected with result code " + str(rc))
|
||||
|
||||
client.subscribe(topics)
|
||||
if rc==0:
|
||||
client.connected_flag=True
|
||||
client.publish("$CONNECTED/"+client_id, 1, retain=True)
|
||||
else:
|
||||
client.bad_connection_flag=True
|
||||
|
||||
|
||||
#def on_disconnect(client, userdata, rc):
|
||||
# client.publish(connection_topic,0,retain=True)
|
||||
|
||||
def on_message(client, userdata, msg):
|
||||
topic = msg.topic.split('/')
|
||||
|
||||
if topic[0] == "$CONNECTED":
|
||||
MQTT_CONNECTED.labels(topic[1], node_api.get(topic[1])).set(int(msg.payload))
|
||||
|
||||
if msg.topic == "$SYS/broker/clients/connected":
|
||||
MQTT_BROKER_CLIENTS.set(int(msg.payload))
|
||||
|
||||
print(msg.topic, int(msg.payload))
|
||||
|
||||
|
||||
client = mqtt.Client(client_id)
|
||||
|
||||
client.on_connect = on_connect
|
||||
#client.on_disconnect = on_disconnect
|
||||
client.on_message = on_message
|
||||
client.will_set("$CONNECTED/"+client_id, 0, qos=0, retain=True)
|
||||
client.connect('localhost')
|
||||
client.loop_start()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# Start up the server to expose the metrics.
|
||||
start_http_server(8000)
|
||||
|
||||
while True:
|
||||
time.sleep(1)
|
23
node_api.py
Normal file
23
node_api.py
Normal file
@ -0,0 +1,23 @@
|
||||
import urllib.request, urllib.parse, json
|
||||
|
||||
nodes = {}
|
||||
|
||||
class NodeAPI:
|
||||
def get(self, node):
|
||||
if node in nodes:
|
||||
return nodes[node]
|
||||
|
||||
try:
|
||||
with urllib.request.urlopen("http://logistics.dev.uctrl.net/api/nodes/"+node) as url:
|
||||
data = json.loads(url.read().decode())
|
||||
|
||||
response = {
|
||||
'title': data['data']['description'] if data['data']['description'] is not None else data['data']['project']['title'],
|
||||
'location': data['data']['location']
|
||||
}
|
||||
nodes[node] = response['title']
|
||||
|
||||
return nodes[node]
|
||||
|
||||
except urllib.error.HTTPError:
|
||||
return node.capitalize()
|
Loading…
Reference in New Issue
Block a user