Skip to content

feat: add AllAsync helpers for wireless packet loss and appliance/cellular gateway uplink statuses (#435) - #436

Merged
rolandbanks merged 1 commit into
mainfrom
feature/435-paging-packet-loss-and-uplink-statuses
Sep 30, 2026
Merged

rolandbanks merged 1 commit into
mainfrom
feature/435-paging-packet-loss-and-uplink-statuses

Conversation

@rolandbanks

Copy link
Copy Markdown
Contributor

Merge with a merge commit (not squash or rebase). The changelog label 1.74.18 assumes this is the next merge into main; if anything lands first, bump the label.

What

Closes #435. Three organization-wide calls now have ...AllAsync helpers that follow the Link header to the last page through MerakiClient.GetAllAsync, like the existing helpers:

Helper Endpoint
GetOrganizationWirelessDevicesPacketLossAllAsync GET /organizations/{organizationId}/wireless/devices/packetLoss/byDevice
GetOrganizationApplianceUplinkStatusesAllAsync GET /organizations/{organizationId}/appliance/uplink/statuses
GetOrganizationCellularGatewayUplinkStatusesAllAsync GET /organizations/{organizationId}/cellularGateway/uplink/statuses

Each is backed by a new internal ...ApiResponseAsync method on the same route. The single-page methods are unchanged.

Why: the single-page methods return only the first page (at most 1,000 items) and give no sign that more exist, so larger organizations were silently cut off. Found in production.

Already released as 1.70.146 from hotfix/435-paging-packet-loss-and-uplink-statuses (cut from the 1.70.145 tag, commit 53d4561) for consumers still on the 1.70 line and Refit 15. This PR is the same commit cherry-picked onto main, with its own changelog entry and the skill note below.

Also: members the spec does not document

Testing against live organizations found four Uplinks members that Meraki returns but the v1.74.0 spec does not document: radioAccessTechnology, iccid2, msisdn2 and imei. The gap report cannot find these by design, so they are recorded in a new section of .github/skills/meraki-api-update/SKILL.md.

The model is deliberately left alone: every value seen apart from radioAccessTechnology[].type was null, so there is nothing to take their types from yet. With the default JsonMissingMemberHandling.Ignore they are harmless. Under ThrowOnError, as the live tests use, the existing single-page uplink status calls fail on an organization whose devices report them.

Compatibility

The three interfaces gain internal members, so a type outside the library that implements IWirelessDevicePacketLoss, IApplianceUplinkStatuses or ICellularGatewayUplinkStatuses no longer compiles. That matches the interfaces that already carry ...ApiResponseAsync members.

Verification

dotnet build Meraki.Api.Test (main, Refit 16.3.0)                0 Error(s), 6 pre-existing CS0618 warnings
UplinkStatusesAndPacketLossPagingTests + MerakiClientPagerTests  Total: 12, Errors: 0, Failed: 0

The offline tests build the Refit clients with MerakiClient's settings over a handler that serves canned pages. They show every page is followed, the filters and time window are sent on every page, one page means one request, and a failing later page throws rather than returning the first page.

Read-only live tests, run by hand on the 1.70 line:

  • Packet loss: on a large organization the helper returned every page where the single-page call returned the first 1,000 only, with no serial repeated across pages.
  • Appliance and cellular gateway uplink statuses: pass, but only trivially, because the organization used returned no uplinks. On the large organization the existing single-page call fails first under ThrowOnError, before the helper runs, because of the undocumented members above. The multi-page behaviour of these two helpers is covered by the offline tests.

MS-26925

🤖 Generated with Claude Code

…lular gateway uplink statuses (#435)

The single-page methods return only the first page (at most 1,000
items) and give no sign that more exist, so larger organizations were
silently cut off. GetOrganizationWirelessDevicesPacketLossAllAsync,
GetOrganizationApplianceUplinkStatusesAllAsync and
GetOrganizationCellularGatewayUplinkStatusesAllAsync follow the Link
header across every page through MerakiClient.GetAllAsync, and are
all-or-nothing like the other helpers (#355).

Offline tests: UplinkStatusesAndPacketLossPagingTests. Read-only live
tests: OrganizationTests, Appliance.Uplinks.StatusesTests and
CellularGateway.Uplink.StatusesTests.

Cherry-picked from 53d4561, released as 1.70.146 on the 1.70 line.
Also adds a meraki-api-update skill section listing the Uplinks members
Meraki returns but the v1.74.0 spec does not document, which the gap
report cannot find.

MS-26925
@rolandbanks
rolandbanks merged commit 926aca5 into main Sep 30, 2026
3 of 4 checks passed
@codacy-production

codacy-production Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

Not up to standards ⛔

🔴 Issues 1 medium

Alerts:
⚠ 1 issue (≤ 0 issues of at least minor severity)

Results:
1 new issue

Category Results
Complexity 1 medium

View in Codacy

🟢 Metrics 10 complexity

Metric Results
Complexity 10

View in Codacy

🟢 Coverage 100.00% diff coverage · +0.46% coverage variation

Metric Results
Coverage variation ✅ +0.46% coverage variation
Diff coverage ✅ 100.00% diff coverage

View coverage diff in Codacy

Coverage variation details
Coverable lines Covered lines Coverage
Common ancestor commit (7633d4c) 7841 2915 37.18%
Head commit (2dd81aa) 7884 (+43) 2967 (+52) 37.63% (+0.46%)

Coverage variation is the difference between the coverage for the head and common ancestor commits of the pull request branch: <coverage of head commit> - <coverage of common ancestor commit>

Diff coverage details
Coverable lines Covered lines Diff coverage
Pull request (#436) 43 43 100.00%

Diff coverage is the percentage of lines that are covered by tests out of the coverable lines that the pull request added or modified: <covered lines added or modified>/<coverable lines added or modified> * 100%

AI Reviewer: run a review on demand. To trigger the first review automatically, go to your organization or repository integration settings. AI can make mistakes. Always validate suggestions.

Run reviewer

TIP This summary will be updated as you push new changes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add AllAsync paging for wireless packet loss by device, and for appliance and cellular gateway uplink statuses

1 participant