Add User Experience Insights API endpoints to Connectivity Insights project - #199
Add User Experience Insights API endpoints to Connectivity Insights project#199cmhkknight wants to merge 9 commits into
Conversation
Added User Experience Insights section and related schemas for subscription details, including UserExperienceInsightsSubscriptionDetail and UserExperienceInsightsRecords.
Added user experience insights API details including request and response structures for application experience analysis.
|
Hi @maheshc01 @Kevsy @urvika-v , as discussed on #185 , @cmhkknight have added the new endpoint on POST /user-experience-insights and added user experience insights events on connectivity-insights-subscriptions. Please have a review when you have a moment! Additionally, this PR is based on x-camara-commonalities v0.6.0. If possible, merging this prior to #198 would help avoid merge conflicts. We will then submit a follow-up PR to align with x-camara-commonalities v0.8.0. |
|
as per 7/25 call: targeting for Sync 26 as part of RC2 |
- rename /user-experience-insights operationId to checkUserExperienceInsights and scope to connectivity-insights:user-experience-insights:check - add comprehensive user-experience-insights scenarios in connectivity-insights.feature (happy path and 400/401/403/404/422/429) - add user-experience subscription scenarios in connectivity-insights-subscriptions.feature and renumber scenarios sequentially (01-32)
|
Test cases have been added, and most validation hint issues have been resolved. The remaining 4 issues are all constraint-related for the city/district fields. Since these string fields do not require constraints, per CAMARA validation recommendations, no fixes are needed for them. |
| Maximum resolution in the experience analysis period. | ||
| Maximum resolution in the experience analysis period, expressed in | ||
| vertical pixels (e.g. 720, 1080, 2160). | ||
| mostResolution: |
There was a problem hiding this comment.
Can I suggest to rename this to 'majorityResolution'? 'Most' is a synonym for 'maximum' so may cause confusion with 'maxResolution'.
There was a problem hiding this comment.
Good point — 'majorityResolution' seems better. Renamed in both connectivity-insights.yaml and connectivity-insights-subscriptions.yaml.
| description: | | ||
| QoS Class Identifier or 5G QoS Identifier. | ||
|
|
||
| NetType: |
There was a problem hiding this comment.
Best to reuse the existing CAMARA definition for this from the DeviceStatus repository: https://github.com/camaraproject/DeviceStatus/blob/main/code/API_definitions/connected-network-type.yaml
There was a problem hiding this comment.
Agreed. Updated the NetType enum to 2G / 3G / 4G / 5G / UNKNOWN, aligned with ConnectedNetworkType from the DeviceStatus repo.
Note: since there is no shared commonality module for this yet, the values are defined locally rather than cross-referencing the other repo.
| pattern: '^[a-zA-Z0-9.-]+$' | ||
| description: | | ||
| String representing a Data Network as defined in clause 9A of 3GPP TS 23.003. | ||
| String representing a Data Network as defined in clause 9A of 3GPP TS 23.003; |
There was a problem hiding this comment.
"String representing a Data Network" -> "String representing a Data Network Name"
| pattern: '^\d+(\.\d+)? (bps|Kbps|Mbps|Gbps|Tbps)$' | ||
| description: | | ||
| String representing a bit rate. | ||
| String representing a bit rate, formatted as a number followed by a |
There was a problem hiding this comment.
Best to reuse the existing 'Rate ' and 'RateUntiEnum' definitions from QoS Profiles
There was a problem hiding this comment.
Done. Refactored BitRate from a string into an object { value: integer, unit: RateUnitEnum } and added a local RateUnitEnum (bps/kbps/Mbps/Gbps/Tbps), matching the QoS Profiles shape. Edited both files.
|
|
||
| ApplicationType: | ||
| description: Indicates the Application type. Negotiated by the carrier and application vendor and configured on the carrier network. | ||
| description: | |
There was a problem hiding this comment.
A few comments here:
- 'traffic class' is more accurate than 'application type', as 'type' can cover other application contexts (e.g. OS type, commercial model, genre etc.). But it's specifically the typical nature of the flow we are concerned with, so 'traffic class' is a good fit.
- negotiation of values between API consumers and operators is against the CAMARA principle of reducing operator fragmentation. So a standard set of values makes sense.
- Together, (1) and (2) suggests adopting an industry standard, e.g. 3GPP TS 23.107:
| Traffic Class | Typical Applications | Key QoS Characteristic |
|---|---|---|
| Conversational | Voice calls, video calls, telepresence | Very low delay and jitter |
| Streaming | Video/audio streaming | Continuous media flow; some delay acceptable |
| Interactive | Web browsing, database queries, online transactions | Low response time important |
| Background | Email, file transfer, backups, software downloads | Delay insensitive; reliability more important |
There was a problem hiding this comment.
That really makes sense. I completely agree that adopting a standardized set of values is essential to prevent operator fragmentation per CAMARA principles. My original intent was to use developer-friendly application categories so that developers can choose specific application types to subscribe to experience insights for a given class of applications.
However, relying on 3GPP TS 23.107 Traffic Classes is too coarse-grained for Experience Insight subscriptions. To precisely subscribe to and evaluate insights for specific application behaviors, we need a finer-grained categorization.
Thus, I suggest using a developer-friendly, semantic categorization approach with pre-defined standardized enums for Application Type:
enum:
- aigc # Generative AI services and interactive agent traffic
- file_transfer # Bulk data upload/download, cloud storage sync, and backups
- instant_messaging # Real-time text, voice messaging, and asynchronous chat
- live_streaming # Uplink live broadcast publishing (Streamer / Uplink)
- live_viewing # Downlink live stream viewing (Audience / Downlink)
- meeting # Multi-party audio/video conferencing and screen sharing
- mobile_gaming # Low-latency multiplayer online gaming and cloud gaming
- short_video # Short-form video playback and feed consumption
- vod_streaming # On-demand high-definition video streaming (VOD)
- voip # Two-party voice and video telephony callsAlternatively, should we align with the standard serviceClass enum in QoS Profiles to maintain consistency across CAMARA APIs?
There was a problem hiding this comment.
KYC use 'region' instead of city, to cover users outside of cities. Can that be adopted?
Kevsy
left a comment
There was a problem hiding this comment.
I've made some inline suggestions and comments, but the major required change is to remove the duplicate features in the tests.
Thanks @Kevsy , I'm solving on these comments. Still I'm a bit confused about the duplicate features issue, do you mean that I can remove the similar test features and put two end point together? such as: # 400 Error Scenarios
@connectivity_insights_09_no_authorization_header
Scenario: No Authorization header
Given the header "Authorization" is removed
And a valid network quality insight or user experience insight request body
When the request "checkNetworkQuality" or "checkUserExperience" is sent
Then the response code is 401
And the response property "$.status" is 401
And the response property "$.code" is "UNAUTHENTICATED"
And the response property "$.message" contains a user friendly text |
XunliYang
left a comment
There was a problem hiding this comment.
Left with two open items: applicationType definition and duplicate test features. Will update as soon as we reach a conclusion.
| Maximum resolution in the experience analysis period. | ||
| Maximum resolution in the experience analysis period, expressed in | ||
| vertical pixels (e.g. 720, 1080, 2160). | ||
| mostResolution: |
There was a problem hiding this comment.
Good point — 'majorityResolution' seems better. Renamed in both connectivity-insights.yaml and connectivity-insights-subscriptions.yaml.
| pattern: '^\d+(\.\d+)? (bps|Kbps|Mbps|Gbps|Tbps)$' | ||
| description: | | ||
| String representing a bit rate. | ||
| String representing a bit rate, formatted as a number followed by a |
There was a problem hiding this comment.
Done. Refactored BitRate from a string into an object { value: integer, unit: RateUnitEnum } and added a local RateUnitEnum (bps/kbps/Mbps/Gbps/Tbps), matching the QoS Profiles shape. Edited both files.
| pattern: '^[a-zA-Z0-9.-]+$' | ||
| description: | | ||
| String representing a Data Network as defined in clause 9A of 3GPP TS 23.003. | ||
| String representing a Data Network as defined in clause 9A of 3GPP TS 23.003; |
| description: | | ||
| QoS Class Identifier or 5G QoS Identifier. | ||
|
|
||
| NetType: |
There was a problem hiding this comment.
Agreed. Updated the NetType enum to 2G / 3G / 4G / 5G / UNKNOWN, aligned with ConnectedNetworkType from the DeviceStatus repo.
Note: since there is no shared commonality module for this yet, the values are defined locally rather than cross-referencing the other repo.
|
|
||
| ApplicationType: | ||
| description: Indicates the Application type. Negotiated by the carrier and application vendor and configured on the carrier network. | ||
| description: | |
There was a problem hiding this comment.
That really makes sense. I completely agree that adopting a standardized set of values is essential to prevent operator fragmentation per CAMARA principles. My original intent was to use developer-friendly application categories so that developers can choose specific application types to subscribe to experience insights for a given class of applications.
However, relying on 3GPP TS 23.107 Traffic Classes is too coarse-grained for Experience Insight subscriptions. To precisely subscribe to and evaluate insights for specific application behaviors, we need a finer-grained categorization.
Thus, I suggest using a developer-friendly, semantic categorization approach with pre-defined standardized enums for Application Type:
enum:
- aigc # Generative AI services and interactive agent traffic
- file_transfer # Bulk data upload/download, cloud storage sync, and backups
- instant_messaging # Real-time text, voice messaging, and asynchronous chat
- live_streaming # Uplink live broadcast publishing (Streamer / Uplink)
- live_viewing # Downlink live stream viewing (Audience / Downlink)
- meeting # Multi-party audio/video conferencing and screen sharing
- mobile_gaming # Low-latency multiplayer online gaming and cloud gaming
- short_video # Short-form video playback and feed consumption
- vod_streaming # On-demand high-definition video streaming (VOD)
- voip # Two-party voice and video telephony callsAlternatively, should we align with the standard serviceClass enum in QoS Profiles to maintain consistency across CAMARA APIs?
- rename mostResolution to majorityResolution to avoid confusion with maxResolution - rename AreaData.city to region to cover users outside cities - align NetType enum with DeviceStatus ConnectedNetworkType (2G/3G/4G/5G/UNKNOWN) - refactor BitRate into object with value + RateUnitEnum (bps/kbps/Mbps/Gbps/Tbps) - clarify Dnn description (Data Network Name)
What type of PR is this?
Add one of the following kinds:
What this PR does / why we need it:
Add User Experience Insights API endpoints to Connectivity Insights project.
This PR introduces two new capabilities:
These enhancements address the need for multi-dimensional application real-use experience analysis as discussed in issue [Discussion] Defining Boundaries for User Experience Insights API: Focusing on Multi-Dimensional Application Real-Use Experience #185, allowing developers to make data-driven application strategy adjustments based on real-use network experience.
Which issue(s) this PR fixes:
Fixes #185
Special notes for reviewers:
This API definition is based on x-camara-commonalities: 0.6.0.
Next step is to update to x-camara-commonalities: 0.8.0.
Changelog input
Additional documentation
This section can be blank.