53 lines
1.8 KiB
Go
53 lines
1.8 KiB
Go
// sqsstats.go — сбор статистики очереди shared-SQS для админ-страницы.
|
|
package handler
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"strconv"
|
|
|
|
"github.com/aws/aws-sdk-go-v2/aws"
|
|
"github.com/aws/aws-sdk-go-v2/service/sqs"
|
|
sqstypes "github.com/aws/aws-sdk-go-v2/service/sqs/types"
|
|
)
|
|
|
|
// iotAdminSQSStats — информация об очереди для мониторинга.
|
|
type iotAdminSQSStats struct {
|
|
ApproximateMessages int64 `json:"approximate_messages"`
|
|
ApproximateMessagesNotVisible int64 `json:"approximate_messages_not_visible"`
|
|
Error string `json:"error,omitempty"`
|
|
}
|
|
|
|
// collectSQSStats получает ApproximateNumberOfMessages из очереди телеметрии.
|
|
func (h *Handler) collectSQSStats(ctx context.Context) iotAdminSQSStats {
|
|
if h.SQS == nil {
|
|
return iotAdminSQSStats{Error: "SQS client not configured"}
|
|
}
|
|
|
|
queueUrlOut, err := h.SQS.GetQueueUrl(ctx, &sqs.GetQueueUrlInput{
|
|
QueueName: aws.String(h.Cfg.SQSQueueName),
|
|
})
|
|
if err != nil {
|
|
return iotAdminSQSStats{Error: fmt.Sprintf("GetQueueUrl: %v", err)}
|
|
}
|
|
|
|
attrsOut, err := h.SQS.GetQueueAttributes(ctx, &sqs.GetQueueAttributesInput{
|
|
QueueUrl: queueUrlOut.QueueUrl,
|
|
AttributeNames: []sqstypes.QueueAttributeName{
|
|
sqstypes.QueueAttributeNameApproximateNumberOfMessages,
|
|
sqstypes.QueueAttributeNameApproximateNumberOfMessagesNotVisible,
|
|
},
|
|
})
|
|
if err != nil {
|
|
return iotAdminSQSStats{Error: fmt.Sprintf("GetQueueAttributes: %v", err)}
|
|
}
|
|
|
|
approxMsg, _ := strconv.ParseInt(attrsOut.Attributes["ApproximateNumberOfMessages"], 10, 64)
|
|
approxNotVisible, _ := strconv.ParseInt(attrsOut.Attributes["ApproximateNumberOfMessagesNotVisible"], 10, 64)
|
|
|
|
return iotAdminSQSStats{
|
|
ApproximateMessages: approxMsg,
|
|
ApproximateMessagesNotVisible: approxNotVisible,
|
|
}
|
|
}
|