Jira | ||||||||
---|---|---|---|---|---|---|---|---|
|
Table of Contents |
---|
Overview
CPS temporal data query will allow allows the user to fetch data based on multiple filtering criteria. This data can be used to create graphs and help the by an analytical system to take decisions.
Filtering
...
Criteria
As it is time-series data, it can be filtered based on three main criteria:
Datetime
- Data after specified
Datetime
- Data in last X hours Data after a particular DateTime (To be supported in version 1Istanbul Release)
- Data between a date rangebefore specified DateTime
- Last X network datarecords
DataTypes in CPS Core
Dataspace & schema-set (To be supported in
version 1Istanbul Release)
- Dataspace & anchor (To be supported in version 1Istanbul Release)
- Dataspace & multiple anchors - To improve performance, if there is a need to fetch data for multiple anchors.
Payload (To be partially supported in
...
Istanbul Release)
Based on a field
or subsectionin the payload
, the entire path from the root must be provided. These criteria need schema-set to be fixed to search in the same set of anchors. The details of the format
isare defined
laterhere.
We will implement only the basic APIs first and will add complex ones when required.
Other
...
Parameters
There are other parameters, listed below, that can have an impact on the response.
No | Name | Type | Default | Purpose | Example | |||
---|---|---|---|---|---|---|---|---|
1 | indexpageNumber | int | 0 | The query output can have many rows so it is important to limit the fetched data. To limit the number of records and to provide pagination, these two parameters can be used. pageNumber starts from "index" parameter represents the page number, starts with 0, and maxSize is the page size.0" pageLimit can't be greater than the maximum value configured in the application | ||||
2 | pageLimit | 2 | maxSize | int | 1000 | |||
3 | pointInTime | DateTime | CurrentDateTime | Pagination does not work well if new data gets added which fulfils the search criteria. The user must provide this value to avoid this issue. | Timestamp (ISO Format) | CurrentDateTime | When a user uses the APIs with pagination (by running several stateless requests), the result set can be impacted by new states stored while navigating. This can be a challenge to retrieve a consistent result set. This parameter must be used to avoid this issue. However, It will not provide a consistent result set if data, that meet search criteria, get deleted because of the cleanup triggered by the retention policy. | |
4 | sort | string | timestamp:desc | Data is by default returned sorted by the timestamp in descending order. It can be overridden and data can be sorted by multiple fields. | sort=timestamp:asc,anchor:desc |
Assumptions
- Temporal database stores full information in the payload ( CPS-192: Design data store for Temporal Service).
- Data in the response body will always contain the entire payload data.
Payload Filter
...
Format
Anchor | ||||
---|---|---|---|---|
|
The filter data can be provided on any filtered, using JSON format, on one field at any level, but it is important to provide the entire path from the root. The below mention JSON is used as an example to explain the filtering format
Code Block | ||
---|---|---|
| ||
{
"idNearRTRIC": "1",
"labels" : [ "cps", "ran"],
"nestedObject": {
"id": "4",
"
"attributes": {
"gNBDUId": 4.0,
"gNBDUName": "gnduserver4",
"gNBIdLength": 32.0
}
},
"GNBDUFunction": [
{
"idGNBDUFunction": "5",
"NRCellDU": [
{
"idNRCellDU": "13905",
"attributes": {
"nRPCI": 12.0,
"nRTAC": 310.0,
"cellLocalId": 13905.0
}
},
{
"idNRCellDU": "14655",
"attributes": {
"nRPCI": 12.0,
"nRTAC": 310.0,
"cellLocalId": 14655.0
}
}
],
"attributes": {
"gNBDUId": 5.0,
"gNBDUName": "gnduserver5",
"gNBIdLength": 32.0
}
}
]
} |
The filtering scenarios and the format to be used for each is are defined below:
No |
---|
Filter Condition | To be search | Format |
---|---|---|
1 | Top-level |
Field | idNearRTRIC | { "idNearRTRIC": "1"} |
2 |
Nested Field | nestedObject → id | { "nestedObject" : {"attributes" : {"gNBDUId": 4.0 }} } |
3 |
Value(s) in a collection | labels | { "labels": ["cps"] } |
4 | Field of an object inside a collection | GNBDUFunction → idGNBDUFunction | { "GNBDUFunction" : [ {"idGNBDUFunction" : 5 }] } |
Proposed APIs
Currently, we are not supporting all the filtering criteria defined in the overview. The below list defined the query parameters which can be used for all the endpoints.
...
The GET Endpoints contains information about the anchors and the rest of the filtering criteria are passed as query parameter. The below-mentioned query parameters are supported by all endpoints.
- after - timestamp ( ISO Format) to consider data created after the specified Timestamp
- simplePayloadFilter - to define payload filtering criteria
- pageNumber - to define the page number (required for pagination)
- pageLimit - to limit the response size
- pointInTime - to consider data changed or added before this time.
- sort - to define the order of data in the result set
The response format for endpoints is the same and defined here
By Dataspace and Anchor
URL: GET /dataspaces/{dataspace-name}/anchors/{anchor-name}/history
Example: GET /dataspaces/{dataspace-name}/anchors/{anchor-name}/history?after=2021-03-21T00:00:00-0:00&payload=/device/port/interface[status=up and type=type1]&maxSize=500
Supported Query Parameter apart from other parameter
- after - timestamp ( ISO Format) to consider date created after the specified Timestamp
- payload - to define data filtering criteria
...
simplePayloadFilter={"idNearRTRIC":"1"}&pageLimit=500
By Dataspace and Schema-set
URL: GET /dataspaces/{dataspace-name}/schema-sets/{schema-set}
Supported Query Parameter apart from other parameter
- after - timestamp ( ISO Format) to consider date created after the specified Timestamp
- payload - to define data filtering criteria
anchors/history?schemaSet={schemaset-name}
Example: GET /dataspaces/{dataspace-name}/schema-sets/{schema-set}?anchors?schemaSet={schemaset-name}&after=2021-03-21T00:00:00-0:00
...
Return data entries for an anchor after the specified Datetime, which matches the payload format.
...
Return data entries based on provided schema-set after the specified Datetime, which matches the payload format.
&simplePayloadFilter={"idNearRTRIC":"1"}
Response Anchor responseBody responseBody
responseBody | |
responseBody |
...
name | type | |
---|---|---|
nextRecordsLink | string | added only if there are remaining records to be fetched for the query. |
previousRecordsLink | string | added only if it is not the first set of records. |
records | list | contains one record for each timestamp that meets filtering criteria. It contains header information along with data. |
...
Code Block |
---|
{ "nextRecordsLink": "cps-temporal/api/v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/history?after=2021-03-21T00:00:00-0:00&maxSize&simplePayloadFilter={"idNearRTRIC":"1"}&pageLimit=500&pointInTime=2021-04-21T00:00:00-0:00&indexpageNumber=2", "previousRecordsLink": "cps-temporal/api/v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/history?after=2021-03-21T00:00:00-0:00&maxSize&simplePayloadFilter={"idNearRTRIC":"1"}&pageLimit=500&pointInTime=2021-04-21T00:00:00-0:00&indexpageNumber=0", "records": [ { "timestamp": "1234567788889", // TODO change the format2021-03-21T00:00:00-0:00", "dataspace": "my-dataspace", "schemaSet": "my-schema-set", "anchor": "my-anchor", "data": { "status" : "UP" } } ] } |
Pros:
- Provides the ability to cache data based on URL. It is not relevant as data can change based on when the API is called.
- Can provide links for the next record and previous record link in the response itself.
- pointInTime can have the current timestamp as the default value because we can add it in the next record and previous record link as a part of the response.
Cons
- If the payload filter condition becomes longer, it will not fit within the GET URL length limit. - TODO mention it somewhere ( Assumptions / Limitations / ? )
Questions
- Should we disable caching or ask the user to pass the pointInTime parameter value?
Open Items
...