Skip to content

Commit eb2607a

Browse files
author
Mahak Jain
committed
Deal with paging parameters
1 parent ee4a412 commit eb2607a

File tree

3 files changed

+133
-46
lines changed

3 files changed

+133
-46
lines changed

src/AlertsManagement/AlertsManagement/ActionRuleCommands/GetAzureActionRule.cs

Lines changed: 53 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -205,11 +205,13 @@ protected override void ProcessRecordInternal()
205205
case ListActionRulesParameterSet:
206206
case ListActionRulesByTargetResourceIdParameterSet:
207207
case ListActionRulesByTargetResourceGroupParameterSet:
208-
IPage<ActionRule> actionRuleList = new Page<ActionRule>();
208+
IPage<ActionRule> pageResult = new Page<ActionRule>();
209209
List<ActionRule> resultList = new List<ActionRule>();
210+
bool listByResourceGroup = false;
211+
210212
if (string.IsNullOrWhiteSpace(ResourceGroupName))
211213
{
212-
actionRuleList = this.AlertsManagementClient.ActionRules.ListBySubscriptionWithHttpMessagesAsync(
214+
pageResult = this.AlertsManagementClient.ActionRules.ListBySubscriptionWithHttpMessagesAsync(
213215
targetResource: TargetResourceId,
214216
targetResourceType: TargetResourceType,
215217
targetResourceGroup: TargetResourceGroup,
@@ -222,22 +224,11 @@ protected override void ProcessRecordInternal()
222224
name: Name
223225
).Result.Body;
224226

225-
// Deal with paging in response
226-
resultList = actionRuleList.ToList();
227-
var nextPageLink = actionRuleList.NextPageLink;
228-
while (!string.IsNullOrEmpty(nextPageLink))
229-
{
230-
var pageResult = this.AlertsManagementClient.ActionRules.ListBySubscriptionNextWithHttpMessagesAsync(nextPageLink);
231-
foreach (var pageItem in pageResult.Result.Body)
232-
{
233-
resultList.Add(pageItem);
234-
}
235-
nextPageLink = pageResult.Result.Body.NextPageLink;
236-
}
227+
listByResourceGroup = false;
237228
}
238229
else
239230
{
240-
actionRuleList = this.AlertsManagementClient.ActionRules.ListByResourceGroupWithHttpMessagesAsync(
231+
pageResult = this.AlertsManagementClient.ActionRules.ListByResourceGroupWithHttpMessagesAsync(
241232
resourceGroupName: ResourceGroupName,
242233
targetResource: TargetResourceId,
243234
targetResourceType: TargetResourceType,
@@ -251,24 +242,58 @@ protected override void ProcessRecordInternal()
251242
name: Name
252243
).Result.Body;
253244

254-
// Deal with paging in response
255-
resultList = actionRuleList.ToList();
256-
var nextPageLink = actionRuleList.NextPageLink;
257-
while (!string.IsNullOrEmpty(nextPageLink))
245+
listByResourceGroup = true;
246+
}
247+
248+
// Deal with paging in response
249+
ulong first = MyInvocation.BoundParameters.ContainsKey("First") ? this.PagingParameters.First : ulong.MaxValue;
250+
ulong skip = MyInvocation.BoundParameters.ContainsKey("Skip") ? this.PagingParameters.Skip : 0;
251+
252+
// Any items before this count should be return
253+
ulong lastCount = MyInvocation.BoundParameters.ContainsKey("First") ? skip + first : ulong.MaxValue;
254+
ulong currentCount = 0;
255+
var nextPageLink = pageResult.NextPageLink;
256+
257+
do
258+
{
259+
List<ActionRule> tempList = pageResult.ToList();
260+
if (currentCount + (ulong)tempList.Count - 1 < skip)
261+
{
262+
// skip the whole chunk if they are all in skip
263+
currentCount += (ulong)tempList.Count;
264+
}
265+
else
258266
{
259-
var pageResult = this.AlertsManagementClient.ActionRules.ListByResourceGroupNextWithHttpMessagesAsync(nextPageLink);
260-
foreach (var pageItem in pageResult.Result.Body)
267+
foreach (ActionRule currentActionRule in tempList)
261268
{
262-
resultList.Add(pageItem);
269+
// not return "skip" count of items in the begin, and only return "first" count of items after that.
270+
if (currentCount >= skip && currentCount < lastCount)
271+
{
272+
resultList.Add(currentActionRule);
273+
}
274+
currentCount++;
275+
if (currentCount >= lastCount)
276+
{
277+
break;
278+
}
263279
}
264-
nextPageLink = pageResult.Result.Body.NextPageLink;
265280
}
266-
}
267281

268-
foreach (var result in resultList)
269-
{
270-
WriteObject(result.Properties.GetType());
271-
}
282+
if (!string.IsNullOrEmpty(nextPageLink))
283+
{
284+
if (listByResourceGroup)
285+
{
286+
pageResult = this.AlertsManagementClient.ActionRules.ListByResourceGroupNextWithHttpMessagesAsync(nextPageLink).Result.Body;
287+
}
288+
else
289+
{
290+
pageResult = this.AlertsManagementClient.ActionRules.ListBySubscriptionNextWithHttpMessagesAsync(nextPageLink).Result.Body;
291+
}
292+
nextPageLink = pageResult.NextPageLink;
293+
}
294+
295+
} while (!string.IsNullOrEmpty(nextPageLink) && currentCount < lastCount);
296+
272297
WriteObject(resultList.Select((r) => new PSActionRule(r)), enumerateCollection: true);
273298
break;
274299

src/AlertsManagement/AlertsManagement/AlertCommands/GetAzureAlert.cs

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,9 @@ protected override void ProcessRecordInternal()
293293
switch (ParameterSetName)
294294
{
295295
case AlertsListByFilterParameterSet:
296-
var alertsList = this.AlertsManagementClient.Alerts.GetAllWithHttpMessagesAsync(
296+
List<Alert> resultList = new List<Alert>();
297+
IPage<Alert> pageResult = new Page<Alert>();
298+
pageResult = this.AlertsManagementClient.Alerts.GetAllWithHttpMessagesAsync(
297299
targetResource: TargetResourceId,
298300
targetResourceType: TargetResourceType,
299301
targetResourceGroup: TargetResourceGroup,
@@ -314,17 +316,46 @@ protected override void ProcessRecordInternal()
314316
).Result.Body;
315317

316318
// Deal with paging in response
317-
var resultList = alertsList.ToList();
318-
var nextPageLink = alertsList.NextPageLink;
319-
while (!string.IsNullOrEmpty(nextPageLink))
319+
ulong first = MyInvocation.BoundParameters.ContainsKey("First") ? this.PagingParameters.First : ulong.MaxValue;
320+
ulong skip = MyInvocation.BoundParameters.ContainsKey("Skip") ? this.PagingParameters.Skip : 0;
321+
322+
// Any items before this count should be return
323+
ulong lastCount = MyInvocation.BoundParameters.ContainsKey("First") ? skip + first : ulong.MaxValue;
324+
ulong currentCount = 0;
325+
var nextPageLink = pageResult.NextPageLink;
326+
327+
do
320328
{
321-
var pageResult = this.AlertsManagementClient.Alerts.GetAllNextWithHttpMessagesAsync(nextPageLink);
322-
foreach (var pageItem in pageResult.Result.Body)
329+
List<Alert> tempList = pageResult.ToList();
330+
if (currentCount + (ulong)tempList.Count - 1 < skip)
331+
{
332+
// skip the whole chunk if they are all in skip
333+
currentCount += (ulong)tempList.Count;
334+
}
335+
else
323336
{
324-
resultList.Add(pageItem);
337+
foreach (Alert currentAlert in tempList)
338+
{
339+
// not return "skip" count of items in the begin, and only return "first" count of items after that.
340+
if (currentCount >= skip && currentCount < lastCount)
341+
{
342+
resultList.Add(currentAlert);
343+
}
344+
currentCount++;
345+
if (currentCount >= lastCount)
346+
{
347+
break;
348+
}
349+
}
325350
}
326-
nextPageLink = pageResult.Result.Body.NextPageLink;
327-
}
351+
352+
if (!string.IsNullOrEmpty(nextPageLink))
353+
{
354+
pageResult = this.AlertsManagementClient.Alerts.GetAllNextWithHttpMessagesAsync(nextPageLink).Result.Body;
355+
nextPageLink = pageResult.NextPageLink;
356+
}
357+
358+
} while (!string.IsNullOrEmpty(nextPageLink) && currentCount < lastCount);
328359

329360
WriteObject(resultList.Select((r) => new PSAlert(r)), enumerateCollection: true);
330361
break;

src/AlertsManagement/AlertsManagement/SmartGroupCommands/GetAzureSmartGroup.cs

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -78,24 +78,55 @@ protected override void ProcessRecordInternal()
7878
switch (ParameterSetName)
7979
{
8080
case SmartGroupsListByFilterParameterSet:
81-
var smartGroupsList = this.AlertsManagementClient.SmartGroups.GetAllWithHttpMessagesAsync(
81+
IPage<SmartGroup> pageResult = new Page<SmartGroup>();
82+
List<SmartGroup> resultList = new List<SmartGroup>();
83+
pageResult = this.AlertsManagementClient.SmartGroups.GetAllWithHttpMessagesAsync(
8284
sortBy: SortBy,
8385
sortOrder: SortOrder,
8486
timeRange: TimeRange
8587
).Result.Body;
8688

8789
// Deal with paging in response
88-
var resultList = smartGroupsList.ToList();
89-
var nextPageLink = smartGroupsList.NextPageLink;
90-
while (!string.IsNullOrEmpty(nextPageLink))
90+
ulong first = MyInvocation.BoundParameters.ContainsKey("First") ? this.PagingParameters.First : ulong.MaxValue;
91+
ulong skip = MyInvocation.BoundParameters.ContainsKey("Skip") ? this.PagingParameters.Skip : 0;
92+
93+
// Any items before this count should be return
94+
ulong lastCount = MyInvocation.BoundParameters.ContainsKey("First") ? skip + first : ulong.MaxValue;
95+
ulong currentCount = 0;
96+
var nextPageLink = pageResult.NextPageLink;
97+
98+
do
9199
{
92-
var pageResult = this.AlertsManagementClient.SmartGroups.GetAllNextWithHttpMessagesAsync(nextPageLink);
93-
foreach (var pageItem in pageResult.Result.Body)
100+
List<SmartGroup> tempList = pageResult.ToList();
101+
if (currentCount + (ulong)tempList.Count - 1 < skip)
102+
{
103+
// skip the whole chunk if they are all in skip
104+
currentCount += (ulong)tempList.Count;
105+
}
106+
else
94107
{
95-
resultList.Add(pageItem);
108+
foreach (SmartGroup currentSmartGroup in tempList)
109+
{
110+
// not return "skip" count of items in the begin, and only return "first" count of items after that.
111+
if (currentCount >= skip && currentCount < lastCount)
112+
{
113+
resultList.Add(currentSmartGroup);
114+
}
115+
currentCount++;
116+
if (currentCount >= lastCount)
117+
{
118+
break;
119+
}
120+
}
96121
}
97-
nextPageLink = pageResult.Result.Body.NextPageLink;
98-
}
122+
123+
if (!string.IsNullOrEmpty(nextPageLink))
124+
{
125+
pageResult = this.AlertsManagementClient.SmartGroups.GetAllNextWithHttpMessagesAsync(nextPageLink).Result.Body;
126+
nextPageLink = pageResult.NextPageLink;
127+
}
128+
129+
} while (!string.IsNullOrEmpty(nextPageLink) && currentCount < lastCount);
99130

100131
WriteObject(resultList.Select((r) => new PSSmartGroup(r)), enumerateCollection: true);
101132
break;

0 commit comments

Comments
 (0)