Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Jira
serverONAP JIRA
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keyCPS-251

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 
Datetime
  • Data after specified
  • 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 subsection in the payload, but it is important to provide the entire path from the root. These criteria need schema-set to be fixed to search in the same set of anchors. The details of the format are defined here

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. 

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.
NoNameTypeDefaultPurposeExample
1indexpageNumberint0

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 


2pageLimit2maxSizeint1000
3pointInTimeDateTimeCurrentDateTimeTimestamp (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

Payload Filter Format 
Anchor

...

payloadFilterFormat

...

payloadFilterFormat

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
collapsetrue
{
  "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:

NoType of fieldFilter ConditionTo be searchFormat
1Top-level fieldFieldidNearRTRIC

{ "idNearRTRIC": "1"}

2The field inside another objectNested FieldnestedObject → id{ "nestedObject" : {"attributes" :  {"gNBDUId": 4.0 }} }
3String collection field at the top levellabelsValue(s) in a collectionlabels

{ "labels": ["cps"] }

4Field of an object 4The field inside a collectionGNBDUFunction → idGNBDUFunction

{ "GNBDUFunction" : [ {"idGNBDUFunction" : 5 }]  }

Proposed APIs

Currently, we are not supporting all the filtering criteria defined in the overview.  The supported ones are defined below and are 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.

  1. after - timestamp ( ISO Format) to consider date data created after the specified Timestamp
  2. payload simplePayloadFilter - to define data payload filtering criteria
  3. index pageNumber - defined to define the page number and (required for pagination)
  4. maxSize pageLimit - To to limit the response size
  5. pointInTime - to consider data changed or added before this time.
  6. sort - to define the order of data in the result set

The response format for all get APIs 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]&maxSizesimplePayloadFilter={"idNearRTRIC":"1"}&pageLimit=500

...

By Dataspace and Schema-set

URL: ​GET /dataspaces/{dataspace-name}/schema-sets/{schema-setanchors/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&payload=/device/port/interface[status=up]simplePayloadFilter={"idNearRTRIC":"1"}

Response 
Anchor

...

responseBody

...

responseBody
nametype
nextRecordsLinkstringadded only if there are remaining records to be fetched for the query.
previousRecordsLinkstringadded only if it is not the first set of records.
recordslist

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&maxSizesimplePayloadFilter={"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"
      }
    }
  ]
}

...