Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 17 additions & 21 deletions src/AppCommon/Commands/SqsCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,41 +74,37 @@ protected override async Task<QueueDetails> GetData(CancellationToken cancellati

var tasks = queueNames.Select(async queueName =>
{
var datapoints = (await aws.GetMMetricsData(queueName, cancellationToken)).OrderBy(d => d.Timestamp).ToArray();
var response = await aws.GetMMetricsData(queueName, cancellationToken);
var datapoints = response.ToDictionary(
k => DateOnly.FromDateTime(k.Timestamp.Value),
v => (long)v.Sum.GetValueOrDefault(0)
);

var maxThroughput = datapoints.Values.Max();

var maxThroughput = datapoints is { Length: > 0 } ?
(long)datapoints.Select(d => d.Sum.GetValueOrDefault(0)).Max() : 0L;
// Since we get 365 days of data, if there's no throughput in that amount of time, hard to legitimately call it an endpoint
if (maxThroughput > 0)
{
var startTime = DateOnly.FromDateTime(datapoints.First().Timestamp.Value);
var endTime = DateOnly.FromDateTime(datapoints.Last().Timestamp.Value);
DateOnly currentDate = startTime;
var dailyData = new Dictionary<DateOnly, DailyThroughput>();
while (currentDate <= endTime)
{
dailyData.Add(currentDate, new DailyThroughput { MessageCount = 0, DateUTC = currentDate });
var startTime = datapoints.Keys.Min();
var endTime = datapoints.Keys.Max();

currentDate = currentDate.AddDays(1);
}
var dailyData = new List<DailyThroughput>(endTime.DayNumber - startTime.DayNumber + 1);

foreach (var datapoint in datapoints)
for (var currentDate = startTime; currentDate <= endTime; currentDate = currentDate.AddDays(1))
{
// There is a bug in the AWS SDK. The timestamp is actually UTC time, eventhough the DateTime returned type says Local
// See https://github.com/aws/aws-sdk-net/issues/167
// So do not convert the timestamp to UTC time!
if (datapoint.Timestamp.HasValue)
datapoints.TryGetValue(currentDate, out var count);
dailyData.Add(new DailyThroughput
{
currentDate = DateOnly.FromDateTime(datapoint.Timestamp.Value);
dailyData[currentDate] = new DailyThroughput { MessageCount = (long)datapoint.Sum.GetValueOrDefault(0), DateUTC = currentDate };
}
MessageCount = count,
DateUTC = currentDate
});
}

data.Add(new QueueThroughput
{
QueueName = queueName,
Throughput = maxThroughput,
DailyThroughputFromBroker = [.. dailyData.Values]
DailyThroughputFromBroker = [.. dailyData]
});
}

Expand Down
4 changes: 2 additions & 2 deletions src/Query/AmazonSQS/AwsQuery.cs
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,8 @@ public async Task<List<Datapoint>> GetMMetricsData(string queueName, Cancellatio
{
Namespace = "AWS/SQS",
MetricName = "NumberOfMessagesDeleted",
StartTime = StartDate.ToDateTime(TimeOnly.MinValue),
EndTime = EndDate.ToDateTime(TimeOnly.MaxValue),
StartTime = StartDate.ToDateTime(TimeOnly.MinValue, DateTimeKind.Utc),
EndTime = EndDate.AddDays(1).ToDateTime(TimeOnly.MinValue, DateTimeKind.Utc), // Exclusive
Period = 24 * 60 * 60, // 1 day
Statistics = ["Sum"],
Dimensions = [
Expand Down