การใช้ Node.js Corn Job ตั้งเวลาแจ้งเตือนหากเว็บล่ม เข้า LineNotify

idea นี้เริ่มต้นจากเห็น feed ของเพจ scotch.io แนะนำการใช้ Node Cron Jobs พอลองอ่านดู เลยปิ๊งขึ้นมาได้ว่า มี job นึงที่ยังไม่ได้ทำ และด้วยความขี้เกียจมานั่งเฝ้า monitor ก็เลยจะทำอะไรซักอย่าง ให้มันแจ่งเตือน หากเว็บมันเข้าไม่ได้ หรือ not responded  ให้มันแจ้งเตือนเข้ามาในกลุ่ม Line หน่อย อย่างน้อยก็มีหลายๆ คนช่วยกันดู และแก้ไข หากมันใช้งานไมได้ 

Package ที่ใช้

  • node-cron : ใช้สำหรับตั้ง task schedule ให้มันทำงานตามเวลาที่กำหนด แบบ linux cron job นั้นแหละ
    $ npm install --save node-cron
  • is-reachable : เอามาเช็กสถานะของ server ว่ามันยังเข้าถึงได้หรือป่าว
    $ npm install --save is-reachable
  • line-api : เอามาส่งการแจ้งเตือน
    $ npm install --save line-api

การใช้งานของแต่ละ package ก็มีคำอธิบายไว้หมดแล้ว ค่อนข้างละเอียด เอาเป็นว่าข้ามไป code กันเลย

เตรียมเครื่องปรุง

const isReachable = require('is-reachable');
const cron = require('node-cron');
const LineAPI = require('line-api');
const notify = new LineAPI.Notify({
    token: " YOUR_TOKEN "
})

* YOUR_TOKEN ทีได้มาจาก LineNotify 

คละเคล้า

// สั่งให้มันทำงานทุกๆ 10 นาที
cron.schedule('*/10 * * * *', function () { 
    
    let d = new Date(Date.now()).toLocaleString(); //แสดงวันที่และเวลา 2018-5-31 16:30:00
    console.log("---------------------");
    console.log(`Running Cron Job ${d}`);;

    isReachable(' YOUR_SERVER_URL ').then(reachable => {
        if (!reachable) { // => false
            let msg = `SERVER : 💥 not responded`
            notify.send({
                message: msg
            })
        }
    })
});

* YOUR_SERVER_URL : ใส่เป็นชื่อ domain หรือเลข IP ก็ได้แล้วแต่สะดวก

ผลลัพท์

สรุป

ทำงานได้ดี สามารถตั้ง timeout เองได้ เผื่อช่วงไหน server อาจจะมีการใช้งานเยอะ มันเลยไม่ค่อยตอบสนอง ก็ตั้งเวลาให้นานๆ หน่อย ซึ่งตรงนี้ผมเอาไว้เช็ค service ว่ามันยังทำงานอยู่หรือป่าว ซึ่งถ้ามีหลาย server ก็เพิ่ม isReachable ไปอีกชุดนึงได้เลย มันจะทำงานต่อเนื่องกัน ซึ่งข้อดีของมันคือใช้งานง่ายมากๆ