This patch adds json to the mqtt monitoring package. #216

Open
McUles wants to merge 6 commits from McUles/firmware:master into master
3 changed files with 4 additions and 5 deletions
Showing only changes of commit 4721f2086e - Show all commits

View File

@ -0,0 +1 @@
*/5 * * * * sleep $(/usr/bin/random 70 85); /usr/sbin/json-mqtt-proxy

View File

@ -1,7 +1,7 @@
#!/bin/sh
MACADDR=$(cat /sys/class/net/br-client/address | /bin/sed 's/://g')
MACADDR=$(/bin/sed 's/://g' < /sys/class/net/br-client/address)
SCRIPT_DATA_FILE=$(uci get nodewatcher.@script[0].data_file).json
if [ -n "$(uci -q get fff.mqtt.server)" ] ; then
mosquitto_pub -h "$(uci get fff.mqtt.server)" -p 1883 -t /monitoring/v2/$MACADDR -f $SCRIPT_DATA_FILE
mosquitto_pub -h "$(uci get fff.mqtt.server)" -p 1883 -t /monitoring/v2/"$MACADDR" -f "$SCRIPT_DATA_FILE"

Das -m "$(cat $SCRIPT_DATA_FILE)" ist vermutlich nicht so geschickt. Irgendwann ist nämlich auch mal der Puffer für Kommandozeile voll :)

Meine lokale man page sagt:

       -f, --file
           Send the contents of a file as the message.

Kann das das openwrt mosquitto_pub vielleicht auch?
Alternativ gibt es auch noch:

       -s, --stdin-file
           Send a message read from stdin, sending the entire content as a
           single message.

Damit könnte man sich das zwischenspeichern in einer Datei eventuell komplett sparen.

Das `-m "$(cat $SCRIPT_DATA_FILE)"` ist vermutlich nicht so geschickt. Irgendwann ist nämlich auch mal der Puffer für Kommandozeile voll :) Meine lokale man page sagt: ``` -f, --file Send the contents of a file as the message. ``` Kann das das openwrt `mosquitto_pub` vielleicht auch? Alternativ gibt es auch noch: ``` -s, --stdin-file Send a message read from stdin, sending the entire content as a single message. ``` Damit könnte man sich das zwischenspeichern in einer Datei eventuell komplett sparen.

Die Datei direkt übergeben mit -f funktioniert.
Einsparen der Datei wird nicht so einfach funktionieren weil die einzelnen Scripts die Datei öffnen und ergänzen.
Hier werden auch in vorherige Nodes Daten eingefügt.
Wenn es hier noch eine schlauere Idee gibt, gerne.

Die Datei direkt übergeben mit -f funktioniert. Einsparen der Datei wird nicht so einfach funktionieren weil die einzelnen Scripts die Datei öffnen und ergänzen. Hier werden auch in vorherige Nodes Daten eingefügt. Wenn es hier noch eine schlauere Idee gibt, gerne.

Ich würde die Datei gerne behalten. Es kann ja sein das jemand (also irgendein Script o.ä.) anders auch an die json ran will und was damit tun will und nicht nur der mqtt. Wir sollten Nodewatcher-json und mqtt mMn getrennt halten.

Eventuell sollte man daraus sogar 2 Patches machen:

  1. das ganze json-nodewatcher Zeug => was am Ende die Datei nach /tmp/irgendwas legt
  2. nodewatcherjson-to-mqtt-proxy => was die Datei /tmp/irgendwas holt und ins mqtt stopft.

(Name frei erfunden, gerne anpassen ;))
Im Moment sind die Patches ja eh ein ziemliches durcheinander und sollten noch sortiert werden.

Mittelfristig müsste man dann überlegen ob man dem Monitoring wieder ein API verpasst wo man die json hinwirft oder ob das Monitoring auch einfach auf den mqtt zugreift und sich dort die Daten holt, mir wäre letztes deutlich lieber weil man dann weniger in der Firmware pflegen muss.

Ich würde die Datei gerne behalten. Es kann ja sein das jemand (also irgendein Script o.ä.) anders auch an die json ran will und was damit tun will und nicht nur der mqtt. Wir sollten Nodewatcher-json und mqtt mMn getrennt halten. Eventuell sollte man daraus sogar 2 Patches machen: 1) das ganze json-nodewatcher Zeug => was am Ende die Datei nach /tmp/irgendwas legt 2) nodewatcherjson-to-mqtt-proxy => was die Datei /tmp/irgendwas holt und ins mqtt stopft. (Name frei erfunden, gerne anpassen ;)) Im Moment sind die Patches ja eh ein ziemliches durcheinander und sollten noch sortiert werden. Mittelfristig müsste man dann überlegen ob man dem Monitoring wieder ein API verpasst wo man die json hinwirft oder ob das Monitoring auch einfach auf den mqtt zugreift und sich dort die Daten holt, mir wäre letztes deutlich lieber weil man dann weniger in der Firmware pflegen muss.
fi

View File

@ -42,6 +42,4 @@ LANG=C
debug "Generate actual status data"
crawl
/usr/sbin/json-mqtt-proxy
exit 0
exit 0
McUles marked this conversation as resolved Outdated

Das gefällt mir hier nicht.

Wie schon in einem anderen Kommentar gesagt, würde ich mqtt und nodewatcher-json gerne trennen. Ich würde da sogar soweit gehen und 2 Cronjobs anlegen:

root@knoblauchsland-ths:/usr/lib/micron.d# cat fff-nodewatcher
*/5 * * * * sleep $(/usr/bin/random 0 29); /usr/sbin/nodewatcher
root@knoblauchsland-ths:/usr/lib/micron.d# cat fff-alfred-monitoring-proxy
*/5 * * * * sleep $(/usr/bin/random 70 85); /usr/sbin/alfred-monitoring-proxy
root@knoblauchsland-ths:/usr/lib/micron.d# cat fff-alfred-mqtt-proxy
*/5 * * * * sleep $(/usr/bin/random 70 85); /usr/sbin/alfred-mqtt-proxy

im moment haben wir es so, ich würde daher vorschlagen die /usr/sbin/nodewatcher-json läuft wie der /usr/sbin/nodewatcher mit sleep 0 29 und ein weiterer Cronjob nennen wir ihn nodewatcherjson-mqtt-proxy läuft dann wie der /usr/sbin/alfred-mqtt-proxy mit 70 85. Diesen 2. Cronjob würde ich dann ins fff-mqtt-monitoring Paket packen.

Als kleinen Bonus sind wir Alfred hier auf jeden Fall auch los geworden :)

Das gefällt mir hier nicht. Wie schon in einem anderen Kommentar gesagt, würde ich mqtt und nodewatcher-json gerne trennen. Ich würde da sogar soweit gehen und 2 Cronjobs anlegen: root@knoblauchsland-ths:/usr/lib/micron.d# cat fff-nodewatcher */5 * * * * sleep $(/usr/bin/random 0 29); /usr/sbin/nodewatcher root@knoblauchsland-ths:/usr/lib/micron.d# cat fff-alfred-monitoring-proxy */5 * * * * sleep $(/usr/bin/random 70 85); /usr/sbin/alfred-monitoring-proxy root@knoblauchsland-ths:/usr/lib/micron.d# cat fff-alfred-mqtt-proxy */5 * * * * sleep $(/usr/bin/random 70 85); /usr/sbin/alfred-mqtt-proxy im moment haben wir es so, ich würde daher vorschlagen die /usr/sbin/nodewatcher-json läuft wie der /usr/sbin/nodewatcher mit sleep 0 29 und ein weiterer Cronjob nennen wir ihn nodewatcherjson-mqtt-proxy läuft dann wie der /usr/sbin/alfred-mqtt-proxy mit 70 85. Diesen 2. Cronjob würde ich dann ins fff-mqtt-monitoring Paket packen. Als kleinen Bonus sind wir Alfred hier auf jeden Fall auch los geworden :)