-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsqs.coffee
75 lines (68 loc) · 2.38 KB
/
sqs.coffee
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# Description
# Send AWS SQS messages to Hubot
#
# Configuration:
# HUBOT_AWS_SQS_QUEUE_URL - SQS queue to listen to, e.g. https://sqs.us-east-1.amazonaws.com/XXXXXXXXXXXXX/hubot
# HUBOT_AWS_SQS_ACCESS_KEY_ID - AWS access key id with SQS permissions
# HUBOT_AWS_SQS_SECRET_ACCESS_KEY - AWS secret key with SQS permissions
# HUBOT_AWS_SQS_REGION - (optional) Defaults to 'us-east-1'
#
#
# Author:
# Tatsuhiko Miyagawa
# @chosak
# @contolini
AWS = require 'aws-sdk'
module.exports = (robot) ->
unless process.env.HUBOT_AWS_SQS_QUEUE_URL
robot.logger.error "Disabling incoming-sqs plugin because HUBOT_AWS_SQS_QUEUE_URL is not set."
return
sqs = new AWS.SQS {
region: process.env.HUBOT_AWS_SQS_REGION or process.env.AWS_REGION or "us-east-1"
accessKeyId: process.env.HUBOT_AWS_SQS_ACCESS_KEY_ID
secretAccessKey: process.env.HUBOT_AWS_SQS_SECRET_ACCESS_KEY
}
receiver = (sqs, queue) ->
robot.logger.debug "Fetching from #{queue}"
sqs.receiveMessage {
QueueUrl: queue
MaxNumberOfMessages: 10
VisibilityTimeout: 30
WaitTimeSeconds: 20
MessageAttributeNames: [
"room"
"user"
]
}, (err, data) ->
if err?
robot.logger.error "Unable to connect to AWS SQS!"
return robot.logger.error err
else if data.Messages
data.Messages.forEach (message) ->
if not message.MessageAttributes
return robot.logger.error "SQS message is missing user and room attributes."
if not message.MessageAttributes.user
return robot.logger.error "Username is missing from SQS message."
if not message.MessageAttributes.room
return robot.logger.error "Room is missing from SQS message."
new Command({
user: message.MessageAttributes.user.StringValue
room: message.MessageAttributes.room.StringValue
}
message.Body
robot
).run()
sqs.deleteMessage {
QueueUrl: queue
ReceiptHandle: message.ReceiptHandle
}, (err, data) ->
robot.logger.error err if err?
setTimeout receiver, 50, sqs, queue
setTimeout receiver, 0, sqs, process.env.HUBOT_AWS_SQS_QUEUE_URL
class Command
constructor: (@envelope, @message, @robot) ->
run: ->
try
@robot.send @envelope, @message
catch err
@robot.logger.error err