-
Notifications
You must be signed in to change notification settings - Fork 72
Expand file tree
/
Copy pathmessage-queue.js
More file actions
51 lines (42 loc) · 1.4 KB
/
Copy pathmessage-queue.js
File metadata and controls
51 lines (42 loc) · 1.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
"use strict";
// Dependency
const Scheduler = require('./scheduler');
const slackSender = require('./slack-sender');
/**
*
* @param {Object} config
* @param {boolean} config.buffer
* @param {number} config.buffer_seconds
* @param {number} config.buffer_max_seconds
* @param {number} config.queue_max
* @param {number} config.slack_url
* @constructor
*/
function MessageQueue(config) {
this.config = config;
this.messageQueue = [];
this.scheduler = new Scheduler(config);
}
/**
* Sends the message to Slack's Incoming Webhook.
* If buffer is enabled, the message is added to queue and sending is postponed for couple of seconds.
*
* @param {Message} message
*/
MessageQueue.prototype.addMessageToQueue = function(message) {
const self = this;
if (!this.config.buffer || !(this.config.buffer_seconds > 0)) {
// No sending buffer defined. Send directly to Slack.
slackSender.sendToSlack([message], self.config);
} else {
// Add message to buffer
this.messageQueue.push(message);
// Plan send the enqueued messages
this.scheduler.schedule(function() {
// Remove waiting messages from global queue
const messagesToSend = self.messageQueue.splice(0, self.messageQueue.length);
slackSender.sendToSlack(messagesToSend, self.config);
});
}
}
module.exports = MessageQueue;