glados

Monitor remote resource for changes

Usage no npm install needed!

<script type="module">
  import glados from 'https://cdn.skypack.dev/glados';
</script>

README

Build Status

glados

Monitor remote resource for changes

  • Use the cli wrapper to send an email notification or POST to a url when the resource has changed
  • Diffs are calculated using kpdecker's diff
  • Will not start polling until client binds to 'change'
  • Use the CLI Wrapper to take action on 'change'
    • POST to an endpoint, or
    • send email notification (supports Gmail and SES)

App

var glados = require('glados')

var watcher = glados('http://example.com/sensitive_data.html', 1000*60)
.on('change',function(diff){
    // do something with diff
})
.on('error',function(err){
    // we have some problem connecting with resource
})

CLI Wrapper

See api notes below for opts

node ./bin/cli.js http://example.com/sensitive_data.html -n60000 \
-p http://myapi.example.com/notify_change \
-m volcomstoner2689@gmail.com

Forever Wrapper

Make sure this thing never goes down. Wraps cli.js with sturdiness.
Kill the process, stop the forever, reboot the instance. Baby will still be kickin.
Most recently polled data is saved to tmp file in case process dies and reboots.

./bin/forever.sh http://example.com/sensitive_data.html -n60000 \
-p http://myapi.example.com/notify_change \
-m ohsosexybrit@gmail.com
Kill Forever

Shut down what you started with forever.sh

./bin/kill_forever.sh http://example.com/sensitive_data.html
# or kill processes that contain -s (softmatch):
./bin/kill_forever.sh -s sensitive_data.html

App Api

glados( url [, pollInterval] )

returns a watcher that will monitor changes of url
url string - remote resource to watch
pollInterval int - interval in ms to check resource for changes. defaults to 1 minute

watcher.stop()

Stop watching. No further events will be fired after this is called.

watcher.on('change', function(diff, data){})

Fired when a change has been detected in remote resource
diff Array - an array of data comprising added, removed, and unchanged chunks
data Buffer - the new data, unadulterated

watcher.on('connection', function(data){})

Fired on response from initial poll
data Buffer - the response data

watcher.on('poll', function(){})

Fired immediately prior to each poll. The first 'poll' event occurs before 'connection'

watcher.on('error', function(err){})

Catch errors in the stream

CLI Api

Arguments

Applies to both cli.js and forever.sh

  • [target]
    • url of resource to watch
  • -n or --interval
    • pollInterval
    • optional, defaults to 1 minute
  • -p or --post
    • endpoint to post diff on change event
    • optional
    • supports multiple
  • -m or --email
    • email address to send diff on change event
    • optional
    • supports multiple

Email

Copy config.json to config.local.json and add credentials

Gmail

Set mailTransport to 'gmail'
Use an application password (not your personal account password)

SES

Set mailTransport to 'ses'
Set your AWS secret and key, along with an approved From address

To Do

  • Using the softmatch option (kill_forever.sh -s "substring") currently kills only the first match found, but deletes all matching saved data
    • Update script to kill all matches as advertised in readme
  • Add screenshot of pretty email to readme