Чтобы nextToken
работал, вам необходимо отправить точно такой же запрос, при этом между вызовами меняется только токен.
У вас есть id
, StartTimeUtc
и EndTimeUtc
между запросами. Инициализация их до того, как l oop исправит вашу проблему.
Попробуйте что-то вроде этого:
private static void Main(string[] args)
{
Console.Clear();
var creds = new StoredProfileAWSCredentials();
var c = new AmazonCloudWatchClient(creds, RegionEndpoint.EUCentral1);
Task<GetMetricDataResponse> t = null;
string nextToken = null;
var endTime = DateTime.UtcNow;
var startTime = endTime.AddHours(-1);
var id = "a" + Guid.NewGuid().ToString().Replace("-", "");
do
{
var req = new GetMetricDataRequest
{
EndTimeUtc = endTime,
MaxDatapoints = 10,
StartTimeUtc = startTime,
ScanBy = new ScanBy("TimestampDescending"),
NextToken = nextToken,
MetricDataQueries = new List<MetricDataQuery>
{
new MetricDataQuery
{
Id = id,
MetricStat = new MetricStat
{
Stat = "Maximum",
Metric = new Metric
{
MetricName = "CPUUtilization",
Dimensions = new List<Dimension>
{
new Dimension
{
Name = "InstanceId",
Value = "i-04f27d16c91c70119"
}
},
Namespace = "AWS/EC2"
},
Period = 60,
Unit = StandardUnit.Percent
}
}
}
};
t = c.GetMetricDataAsync(req);
t.Wait();
var usage = t.Result;
if (usage.MetricDataResults.Any())
foreach (var r in usage.MetricDataResults)
foreach (var rValue in r.Values)
Console.WriteLine(Math.Round(rValue * 100));
nextToken = t.Result.NextToken;
} while (!string.IsNullOrEmpty(nextToken));
Console.ReadKey();
}