-
Notifications
You must be signed in to change notification settings - Fork 30
/
queue_service.go
45 lines (37 loc) · 1.23 KB
/
queue_service.go
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
package queue
import (
"regexp"
)
// QueuingService is the interface for the message queueing service
// For example: SQS and Beanstalk implements QueuingService interface
const (
SqsQueueService = "sqs"
BeanstalkQueueService = "beanstalkd"
)
type QueuingService interface {
// GetName returns the name of the queing service
GetName() string
// poll functions polls the queue service provider is responsible to update
// the queueSpec with the polled information
// informations it updates are
//1. updateMessageSent(key, messagesSentPerMinute) i.e messagesSentPerMinute
//2. updateIdleWorkers(key, -1) i.e tells how many workers are idle
//3. updateMessage(key, approxMessagesVisible) i.e queuedMessages
poll(key string, queueSpec QueueSpec)
}
// getQueueService returns the provider name
// TODO: add validation for the queue service in the wpa custom resource
func getQueueServiceName(host, protocol string) (bool, string, error) {
matched, err := regexp.MatchString(
"^sqs.[a-z][a-z]-[a-z]*-[0-9]{1}.amazonaws.com", host)
if err != nil {
return false, "", nil
}
if matched {
return true, SqsQueueService, nil
}
if protocol == BenanstalkProtocol {
return true, BeanstalkQueueService, nil
}
return false, "", nil
}