@arnaldo.badin/overwatch
v1.0.0
Published
just a service that trigger tasks to notify someone or something
Downloads
2
Readme
Overwatch
Simple module that helps you to control and group-up external tasks.
Interface
- overwatch.start();
- overwatch.stop();
- overwatch.task(name, action, schedule);
- overwatch.gateway(name, action);
- overwatch.contact(contact, gateway, additional = {});
- overwatch.subscription(contact, task);
- overwatch.trigger(task, options);
- overwatch.notify(gateway, options);
Task
Can create tasks via overwatch.task function. Tasks will run each a pre-determined interval. You will need to implement a logic inside the function with you want a different interval or want to use timetables (later shown). Take an example of its declaration using classes:
const MyTask = function() {
/* ... do many things here */
}
MyTask.prototype.action = function(handler, options) {/* only trigger when called */}
MyTask.prototype.schedule = function(handler, options) {/* trigger on an interval */}
const my_task = new MyTask();
overwatch.task("my-task-name",
(...params) => {my_task.action(...params);},
(...params) => {my_task.schedule(...params);}
);
Events (action and schedule functions) are these task's functions that will be called at some point. They receive some arguments from its caller and can be used to create your own implementation. Handler itself is a link between the particular task and the gateways available (including its contacts).
/* action/schedule event */
(handler, options) => {
/* get all task's contacts (using subscriptions, later shown) */
const contacts = handler.contacts();
if (!contacts) return false;
for (let k in contacts) {
const contact = contacts[k];
const message = `Hello ${contact.name}. Do not forget you appointment!`;
/* will call gateway.action -- need to be previous declared -- */
handler.notify(contact.gateway, {contact : contact.contact, message});
}
return true;
}
Gateway
Can create gateways to manage notifications. Each gateway will have its own implementations and contacts list. Take an example of its declaration using classes:
const MyGateway = function() {
/* ... do many things here */
}
MyGateway.prototype.action = function(handler, options) {/* only trigger when called */}
const my_gat = new MyGateway();
overwatch.gateway("my-gateway-name",
(...params) => {my_gateway.action(...params);},
);
You can insert contacts and create subscriptions to those contacts:
overwatch.contact("[email protected]", "my-email-gateway", {...options});
overwatch.subscription("[email protected]", "my-appointment-task");