¡Noté que el departamento de marketing de cualquier hoster está más preocupado por la calidad del servicio que el departamento de IT! E incluso responden en Twitter e incluso prometen mejorar algo… Eso por un lado, por otro lado, cuando mi sitio está muerto, no entiendo cómo sucedió y cuando – por eso busco en Twitter la respuesta: si un meteorito cayó sobre M9 o manos torcidas de nuevo! Así que decidí ayudarme a mí mismo y a los especialistas de marketing a hacer informes automáticos a Twitter cuando el sitio muere. ¡Lo haré en Node-Red, este es un análogo para adultos de Scratch! Imagen para una mejor comprensión:
Como la base utilizare este maravilloso artículo.dev.to/webhookrelay/creating-your-own-health-check-monitor-with-node-red-51fn, pero hize casi todo de manera diferente!
Node-Red está instalado ya, también debes instalarlo usa ese articulo IoT по-взрослому: на ESP8266 по MQTT через Mosquitto в Node-RED!. Todo esta operando en Orange Pi Plus
Aqui ya esta la solucion. Preguntamos al sitio web si funciona o no, si dice no 5 veces seguidas, posteamos al twitter su status!
Code
[{"id":"3de70177.6f5dce","type":"tab","label":"Flow 2","disabled":false,"info":""},{"id":"c38790b7.a3975","type":"inject","z":"3de70177.6f5dce","name":"1 min","topic":"","payload":"","payloadType":"date","repeat":"60","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":600,"wires":[["3f78434e.8b637c"]]},{"id":"3f78434e.8b637c","type":"http request","z":"3de70177.6f5dce","name":"itcooky.com","method":"GET","ret":"txt","url":"https://itcooky.com/test.html","tls":"","x":330,"y":600,"wires":[["ceebbb5c.62eaf8","f87f78c5.18fa88"]]},{"id":"ceebbb5c.62eaf8","type":"switch","z":"3de70177.6f5dce","name":"not 200 respons","property":"statusCode","propertyType":"msg","rules":[{"t":"neq","v":"200","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":500,"y":620,"wires":[["ea702142.5db75"]]},{"id":"f87f78c5.18fa88","type":"switch","z":"3de70177.6f5dce","name":"found word on web","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":"good","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":510,"y":580,"wires":[["178958c1.6fbce7"]]},{"id":"93035dbe.000c6","type":"function","z":"3de70177.6f5dce","name":"web up","func":"\nreturn {\n payload: ` ${msg.responseUrl} its OK`\n}","outputs":1,"noerr":0,"x":1080,"y":500,"wires":[["d01ee6d3.843018"]]},{"id":"330afeba.4f7082","type":"function","z":"3de70177.6f5dce","name":"web down","func":"\nreturn {\n payload: ` ${msg.responseUrl} it is DOWN at`\n}","outputs":1,"noerr":0,"x":1080,"y":700,"wires":[["c245ac03.ce738"]]},{"id":"454d2f34.514b8","type":"inject","z":"3de70177.6f5dce","name":"","topic":"","payload":"","payloadType":"date","repeat":"1","crontab":"","once":false,"onceDelay":0.1,"x":190,"y":380,"wires":[["fed3dc57.4834b"]]},{"id":"fed3dc57.4834b","type":"moment","z":"3de70177.6f5dce","name":"","topic":"","input":"","inputType":"msg","inTz":"Europe/Moscow","adjAmount":"0","adjType":"hours","adjDir":"add","format":"date","locale":"en_US","output":"time","outputType":"flow","outTz":"Europe/Moscow","x":380,"y":380,"wires":[[]]},{"id":"3b35c8fb.f5e9d8","type":"file","z":"3de70177.6f5dce","name":"Write www.log","filename":"/root/iot_data/www.log","appendNewline":true,"createDir":false,"overwriteFile":"false","x":1540,"y":580,"wires":[[]]},{"id":"f3cb04e1.0ca058","type":"function","z":"3de70177.6f5dce","name":"Add time to data","func":"var timenow=flow.get('time');\nmsg.payload = msg.payload + ' ' + timenow + ' #itcookycomstatus';\nreturn msg;","outputs":1,"noerr":0,"x":1340,"y":600,"wires":[["3b35c8fb.f5e9d8","e208bc85.2ac83"]]},{"id":"d01ee6d3.843018","type":"trigger","z":"3de70177.6f5dce","op1":"","op2":"","op1type":"pay","op2type":"pay","duration":"0","extend":true,"units":"min","reset":"reset","bytopic":"all","name":"","x":1300,"y":500,"wires":[["f3cb04e1.0ca058"]]},{"id":"c245ac03.ce738","type":"trigger","z":"3de70177.6f5dce","op1":"","op2":"","op1type":"pay","op2type":"pay","duration":"0","extend":true,"units":"min","reset":"reset","bytopic":"all","name":"","x":1300,"y":700,"wires":[["f3cb04e1.0ca058"]]},{"id":"707304cf.d7390c","type":"function","z":"3de70177.6f5dce","name":"send reset","func":"\nreturn {\n payload: `reset`\n}","outputs":1,"noerr":0,"x":1090,"y":620,"wires":[["d01ee6d3.843018"]]},{"id":"a8927f54.37138","type":"function","z":"3de70177.6f5dce","name":"send reset","func":"\nreturn {\n payload: `reset`\n}","outputs":1,"noerr":0,"x":1090,"y":560,"wires":[["c245ac03.ce738"]]},{"id":"ea702142.5db75","type":"counter","z":"3de70177.6f5dce","name":"count to 10","init":"0","step":"1","lower":"0","upper":"10","mode":"increment","outputs":1,"x":630,"y":740,"wires":[["4a9cb8c8.819ab8"]]},{"id":"ae37990e.ebade8","type":"switch","z":"3de70177.6f5dce","name":"if its 5","property":"count","propertyType":"msg","rules":[{"t":"eq","v":"5","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":930,"y":740,"wires":[["330afeba.4f7082","707304cf.d7390c"]]},{"id":"d9fd593b.9b8998","type":"function","z":"3de70177.6f5dce","name":"reset counter","func":"msg.reset = true; return msg","outputs":1,"noerr":0,"x":830,"y":520,"wires":[["ea702142.5db75"]]},{"id":"178958c1.6fbce7","type":"counter","z":"3de70177.6f5dce","name":"count to 10","init":"0","step":"1","lower":"0","upper":"10","mode":"increment","outputs":1,"x":610,"y":460,"wires":[["173d5018.b4d1d"]]},{"id":"88d5dc8d.ba9eb","type":"function","z":"3de70177.6f5dce","name":"reset counter","func":"msg.reset = true; return msg","outputs":1,"noerr":0,"x":790,"y":660,"wires":[["178958c1.6fbce7"]]},{"id":"3252995a.ea5296","type":"switch","z":"3de70177.6f5dce","name":"if its 5","property":"count","propertyType":"msg","rules":[{"t":"eq","v":"5","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":930,"y":460,"wires":[["93035dbe.000c6","a8927f54.37138"]]},{"id":"173d5018.b4d1d","type":"switch","z":"3de70177.6f5dce","name":"it its > 0","property":"count","propertyType":"msg","rules":[{"t":"gt","v":"0","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":780,"y":460,"wires":[["d9fd593b.9b8998","3252995a.ea5296"]]},{"id":"4a9cb8c8.819ab8","type":"switch","z":"3de70177.6f5dce","name":"it its > 0","property":"count","propertyType":"msg","rules":[{"t":"gt","v":"0","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":780,"y":740,"wires":[["ae37990e.ebade8","88d5dc8d.ba9eb"]]},{"id":"e208bc85.2ac83","type":"twitter out","z":"3de70177.6f5dce","name":"Tweet","x":1510,"y":620,"wires":[]}]
Ladrillo 0
Forman una variable con el tiempo. El ladrillo de la izquierda patea el ladrillo de la derecha cada segundo.
El segundo ladrillo superpone el formato de datos y lo inserta en la variable global flow.time para esta secuencia; aparecerá en el ladrillo 7
Cuidado momento , este no es un ladrillo estándar, lo instalo por separado
Ladrillo 1
¡A su izquierda hay un ladrillo que lo patea cada minuto! Para cambiar el intervalo, cambie every
Este es un ladrillo http él (cuando ladrillo izquierdo lo patea) pide https://itcooky.com/test.html y pasa la respuesta
Ladrillo 2
Estos son los switch de ladrillos que pasan la respuesta adelante segun la condición adecuada
El ladrillo inferior not 200 respos se activa si la respuesta a la solicitud de la página vino sin el código 200 (todo está bien)
El ladrillo superior está buscando la palabra good en la página, si es así, significa que es mi página y no alguna otra
Ladrillo 3
counetr este no es un ladrillo estándar, debe instalarse por separado. ¡Aquí cuenta de 0 a 10, y recibe una señal del ladrillo 5 para restablecer la puntuación a cero! Cada vez que aumenta el valor, envía este valor adelante y simultáneamente restablece el contador vecinos a cero, para que empieze a contar desde cero, cuando llegue su hora.
Ladrillo 3.1
¡Este ladrillo evita el bucle, si restablece los contadores sin él, entonces los contadores comienzan a reiniciarse entre sí en un bucle!
Ladrillo 4
Este switch normal se activa cuando se pasa el contador a 5. Después de eso, se cree que la señal funcionó, el sitio no funciona (o funciona) al mismo tiempo: se envía un mensajey se reinicia el triggerr de la opción funciona (o no funciona) para que estaba listo para trabajar cuando el estado cambió, después de recibir 5 mensajes caidos de status diferente.
Ladrillo 5
Esta es un ladrillo function que forma un mensaje que sirve para restablecer el contador
Ladrillo 6
Es solo una function que recopila el texto del mensaje para transmitir
Ladrillo 7
Este es un ladrillo maravilloso, también simplemente forma el texto y envía la palabra reset cuando se activa uno de los ladrillos 4. Esto es importante porque entonces el ladrillo 8 es el trigger que funciona aquí de esta manera: deja pasar el primero mensaje y bloquea todo lo siguiente hasta que reciba una señal de cancelación reset . Esto es necesario para que: pasa solo un mensaje a Twitter, el trigger se bloquea y ya no pasa dichos mensajes a sí mismo, luego el estado cambia nuevamente y, junto con el nuevo texto, la señal para desbloquear el trigger pasó al trigger anterior. Esto le permite no enviar un montón de mensajes idénticos.
Ladrillo 8
Es un trigger
Por cierto, se marca un trigger disparado, ahora en la foto al lado del trigger superior hay un pequeño cuadrado azul
Ladrillo 9
También es solo function forma el texto toma el mensaje recibido msg.payload y agrega el tiempo – la variable flow.time y algún otro texto en ‘ ‘
Ladrillo 10
Este ladrillo escribe mensajes en un archivo www.log
Ladrillo 11
Este es un ladrillo de tweet. En la configuración, tiene cuatro claves API allí: tomó lo mismo que para twiter a través de WordPress
Después de hacer clic en Deploy , todo comienza a funcionar. Simulo las condiciones necesarias eliminando el archivo test.html y restaurándolo con el texto good – ¡funciona!
UPDATE: ¡Mejoramos el monitoreo, nos deshacemos de los mensajes innecesarios!
Los mensajes nodeseados aparecen por:
– en el primer inicio, los mensajes pasan – el sitio está funcionando
– si el servidor con el sistema de monitoreo tiene problemas de Internet, luego de que desaparecen, también pasa un mensaje: el sitio está funcionando
Agrego un par de ladrillos al circuito
Esquema code:
[{"id":"5ae667a8.990c28","type":"tab","label":"Flow 3","disabled":false,"info":""},{"id":"d86f0b01.fc1078","type":"inject","z":"5ae667a8.990c28","name":"1 min","topic":"","payload":"","payloadType":"date","repeat":"60","crontab":"","once":false,"onceDelay":0.1,"x":270,"y":820,"wires":[["b992cd67.2391f"]]},{"id":"9a8d7311.e507a","type":"http request","z":"5ae667a8.990c28","name":"itcooky.com","method":"GET","ret":"txt","url":"https://itcooky.com","tls":"","x":430,"y":900,"wires":[["925113a1.d444b","2f4d784f.f2ebe8"]]},{"id":"925113a1.d444b","type":"switch","z":"5ae667a8.990c28","name":"not 200 respons","property":"statusCode","propertyType":"msg","rules":[{"t":"neq","v":"200","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":600,"y":920,"wires":[["9cd19e03.225d6"]]},{"id":"2f4d784f.f2ebe8","type":"switch","z":"5ae667a8.990c28","name":"found word on web","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":"ca-pub-8951271257139515","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":610,"y":880,"wires":[["436faffb.4b885"]]},{"id":"d46f96d3.12d7d8","type":"function","z":"5ae667a8.990c28","name":"web up","func":"\nreturn {\n payload: ` ${msg.responseUrl} its OK`\n}","outputs":1,"noerr":0,"x":1180,"y":800,"wires":[["efb7ffad.fda06"]]},{"id":"be5c108b.3eab5","type":"function","z":"5ae667a8.990c28","name":"web down","func":"\nreturn {\n payload: ` ${msg.responseUrl} it is DOWN at`\n}","outputs":1,"noerr":0,"x":1180,"y":1000,"wires":[["9267dbd8.407258"]]},{"id":"1a284ae1.1dcac5","type":"inject","z":"5ae667a8.990c28","name":"","topic":"","payload":"","payloadType":"date","repeat":"1","crontab":"","once":false,"onceDelay":0.1,"x":290,"y":680,"wires":[["f7482ea6.8105b"]]},{"id":"f7482ea6.8105b","type":"moment","z":"5ae667a8.990c28","name":"","topic":"","input":"","inputType":"msg","inTz":"Europe/Moscow","adjAmount":"0","adjType":"hours","adjDir":"add","format":"date","locale":"en_US","output":"time","outputType":"flow","outTz":"Europe/Moscow","x":480,"y":680,"wires":[[]]},{"id":"af783a84.80d858","type":"file","z":"5ae667a8.990c28","name":"Write www.log","filename":"/root/iot_data/www.log","appendNewline":true,"createDir":false,"overwriteFile":"false","x":1660,"y":820,"wires":[[]]},{"id":"9639759c.7c6198","type":"function","z":"5ae667a8.990c28","name":"Add time to data","func":"var timenow=flow.get('time');\nmsg.payload = msg.payload + ' ' + timenow + ' #itcookycomstatus #RUVDS https://itcooky.com/?p=5624';\nreturn msg;","outputs":1,"noerr":0,"x":1700,"y":900,"wires":[["af783a84.80d858","3957fc42.0c4ab4"]]},{"id":"efb7ffad.fda06","type":"trigger","z":"5ae667a8.990c28","op1":"","op2":"","op1type":"pay","op2type":"pay","duration":"0","extend":true,"units":"min","reset":"reset","bytopic":"all","name":"","x":1400,"y":800,"wires":[["3579b0a7.3e3bf"]]},{"id":"9267dbd8.407258","type":"trigger","z":"5ae667a8.990c28","op1":"","op2":"","op1type":"pay","op2type":"pay","duration":"0","extend":true,"units":"min","reset":"reset","bytopic":"all","name":"","x":1400,"y":1000,"wires":[["3579b0a7.3e3bf"]]},{"id":"dba48d4d.0d8b6","type":"function","z":"5ae667a8.990c28","name":"send reset","func":"\nreturn {\n payload: `reset`\n}","outputs":1,"noerr":0,"x":1190,"y":920,"wires":[["efb7ffad.fda06"]]},{"id":"462aca20.8d45d4","type":"function","z":"5ae667a8.990c28","name":"send reset","func":"\nreturn {\n payload: `reset`\n}","outputs":1,"noerr":0,"x":1190,"y":860,"wires":[["9267dbd8.407258"]]},{"id":"9cd19e03.225d6","type":"counter","z":"5ae667a8.990c28","name":"count to 10","init":"0","step":"1","lower":"0","upper":"10","mode":"increment","outputs":1,"x":730,"y":1040,"wires":[["3ca7e769.d56e28"]]},{"id":"8bf834a2.7a2388","type":"switch","z":"5ae667a8.990c28","name":"if its 5","property":"count","propertyType":"msg","rules":[{"t":"eq","v":"5","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":1030,"y":1040,"wires":[["be5c108b.3eab5","dba48d4d.0d8b6"]]},{"id":"35d0b846.bc61e8","type":"function","z":"5ae667a8.990c28","name":"reset counter","func":"msg.reset = true; return msg","outputs":1,"noerr":0,"x":930,"y":820,"wires":[["9cd19e03.225d6"]]},{"id":"436faffb.4b885","type":"counter","z":"5ae667a8.990c28","name":"count to 10","init":"0","step":"1","lower":"0","upper":"10","mode":"increment","outputs":1,"x":710,"y":760,"wires":[["748e6fa9.a3619"]]},{"id":"5ca50054.d7b44","type":"function","z":"5ae667a8.990c28","name":"reset counter","func":"msg.reset = true; return msg","outputs":1,"noerr":0,"x":890,"y":960,"wires":[["436faffb.4b885"]]},{"id":"fca0c7c6.d82e68","type":"switch","z":"5ae667a8.990c28","name":"if its 5","property":"count","propertyType":"msg","rules":[{"t":"eq","v":"5","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":1030,"y":760,"wires":[["d46f96d3.12d7d8","462aca20.8d45d4"]]},{"id":"748e6fa9.a3619","type":"switch","z":"5ae667a8.990c28","name":"it its > 0","property":"count","propertyType":"msg","rules":[{"t":"gt","v":"0","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":880,"y":760,"wires":[["35d0b846.bc61e8","fca0c7c6.d82e68"]]},{"id":"3ca7e769.d56e28","type":"switch","z":"5ae667a8.990c28","name":"it its > 0","property":"count","propertyType":"msg","rules":[{"t":"gt","v":"0","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":880,"y":1040,"wires":[["8bf834a2.7a2388","5ca50054.d7b44"]]},{"id":"2cb243e5.13928c","type":"inject","z":"5ae667a8.990c28","name":"","topic":"","payload":"Started!","payloadType":"str","repeat":"","crontab":"","once":true,"onceDelay":"","x":280,"y":540,"wires":[["efb7ffad.fda06"]]},{"id":"3579b0a7.3e3bf","type":"switch","z":"5ae667a8.990c28","name":"not a on start web up message","property":"payload","propertyType":"msg","rules":[{"t":"neq","v":"Started!","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":1470,"y":900,"wires":[["9639759c.7c6198"]]},{"id":"b992cd67.2391f","type":"http request","z":"5ae667a8.990c28","name":"google.com","method":"GET","ret":"txt","url":"https://www.google.com/","tls":"","x":310,"y":1020,"wires":[["2e2214d1.0eda6c"]]},{"id":"2e2214d1.0eda6c","type":"switch","z":"5ae667a8.990c28","name":"Check if my Internet is up","property":"statusCode","propertyType":"msg","rules":[{"t":"eq","v":"200","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":330,"y":1080,"wires":[["9a8d7311.e507a"]]},{"id":"3957fc42.0c4ab4","type":"twitter out","z":"5ae667a8.990c28","name":"Tweet","x":1700,"y":1000,"wires":[]}]
En este esquema, solicito un sitio, no un archivo específico, y busco el identificador de Google como texto; el significado de esto es, por ejemplo, que el dinero se agoto y el hoster pone en mi web site un mensaje «paga maldito», el monitoreo puede pensar que el sitio todavía está funcionando ok!
Ladrillo 1
¡Solo envía un mensaje Start! en el momente de script start
Ladrillo 1.1
El mensaje llega al trigger, se inicia, lo pasa y el siguiente no. Ladrillo 1.1 recibe este mensaje, ¡si solo el texto Start! entonces no twitea, así nos deshacemos de los tweets cuando comienza el script
Ladrillo 2
Solicita google.com si este vivo debería dar el estado de 200
Ladrillo 2.1
Recibe la respuesta, si no es 200 no deja ir adelante, significa que tenemos algun problema con Internet o Google dejo de funcionar, ¡pero lo más probable es que tengamos algun problem con nuestro Internet!
UPDATE: Agrego una cuenta de minutos de website down state!
También es útil saber cuánto tiempo website estaba no despunible, cuando comenzó el problema se sabe por la fecha del tweet, y aquí debe tenerse en cuenta que el mensaje sobre los problemas llega después de tres confirmaciones (3 minutos), y cuando comienza el trabajo, son 5.
Ladrillo 1
Este es un contador, está conectado a ladrillos con el estado del sitio. Y al reset, cuando una señal proviene de él, se restablece a 3
Ladrillo 2
Esta es una función que escribe el valor del contador de ladrillo 1 en una variable downmin
Ladrillo 3
Este ladrillo envía reset a ladrillo solo cuando se envía un mensaje de que el sitio está caído. Dado que el sitio considera no disponible con 3 minutos de inactividad, el ladrillo 1 se arroja al valor a 3
Ladrillo 4
Y el ladrillo con el texto del tweet
var timenow=flow.get('time'); var downtimenow=flow.get('downmin')-5; msg.payload = msg.payload + ' ' + timenow + '. Downtime: ' + downtimenow + ' #itcookycomstatus'; return msg;
Aquí calculamos cuántos minutos funcionó realmente el sitio, menos 5: la cantidad de buenos estados a través de los cuales se envía el tweet de sitio status up
Deja una respuesta