1 INTRODUCTION

1.1 Purpose and Scope

The purpose of this document is to specify https RESTful Application Programming Interfaces (APIs) through which CADU data may be discovered and downloaded by authorised users following the patterns and principles defined in the other CSC GS interface delivery points. The CADU Interface delivery Points (CADIP) describes a standard pick-up point for all Sentinel CADU data collected or generated by the Acquisition Services – Ground Stations– to be interfaced by the CSC Production Services.

This specification uses the latest OData v4 standard for REST-ful APIs. The API interface is intended to be compliant with the OData v4 standard, however, it is not necessary to fully implement the OData v4 standard. Compliance to the ICD can be considered as an API contract with a set of API OData v4 style calls, which have to be supported, that shall follow OData query conventions such as URL syntax, filter syntax, content accessing conventions, etc.

1.2 Structure of the Document

This document is structured as follows:

  • Section 1 (this section): Introduction, providing document structure, reference documents and definitions/acronyms

  • Section 2: Provides the context of CADIPs and overview of the use cases supported

  • Section 3: Description of interfaces

  • Section 4: Client administration management

  • Section 5: Description of Monitoring and Reporting

  • Appendices: OData metadata description and API compliance test suites

1.3 Applicable Documents

1.4 Reference Documents

[RD-1] OData Documentation – OData – the Best Way to REST – v4.01 ISO standard http://www.odata.org/documentation/

[RD-2] OData Protocol http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html

[RD-3] The OAuth 2.0 Authorization Framework – Authorization Code Grant, October 2012, Internet Engineering Task Force (IETF) https://tools.ietf.org/html/rfc6749#section-4.1

[RD-4] CSC - ESA Ground Segment Operations Framework – Architecture [ESA-EOPG-EOPGC-TN-7]

[RD-5] Copernicus Space Component Ground Segment Operations Glossary [ESA-EOPG-EOPGC-TN-13]

1.5 Definitions

API – Application Programming Interface – a set of routines, protocols, and tools for building software applications.

Client – any HTTP client performing HTTP/OData requests to the CADIP

DataSessionFile – Data File delivered through the CADIP, i.e. Data Session Data Block.

Quota – Refers to a restriction in the usage of the CADIP - e.g. the number of parallel downloads which a user may have ongoing at a particular time.

Use Case – is a list of actions or event steps, typically defining the interactions between an actor and a system, to achieve a goal.

For additional definitions relevant to the CSC please refer to [RD-5].

1.6 List of Acronyms

AD Applicable Document

API Application Programming Interface

CADU Channel Access Data Unit

CSC Copernicus Space Component

DSDB Data Session Data Block

E2E End-to-End

EO Earth Observation

ESA European Space Agency

GS Ground Segment

HTTP(S) Hypertext Transfer Protocol (Secure)

ID Identifier

ICD Interface Control Document

JSON JavaScript Object Notation

OData Open Data Protocol

RD Reference Document

REST Representational State Transfer

URI Uniform Resource Identifier

URL Uniform Resource Locator

UTC Coordinated Universal Time

UUID Universally Unique Identifier

For additional descriptions of acronyms please refer to [RD-5].

2 OVERVIEW

2.1 CADU Data Interface Delivery Point Description

The CADU Interface delivery Point (CADIP) is a pick-up point for Sentinel CADU data. The CADIP allows clients to straightforwardly discover and retrieve available data files through a standard OData RESTful API. Clients of the CADIP are intended to be downloaders whose principal use case requires systematic (or at least regular) retrieval of published CADU data. Principal clients of the CADIP will be the Systematic Production services, end-to-end Operations Performance monitoring, Reference System. The API and standard use scenario allow authorised clients to discover, with a simple set of filters, the list of files which need to be retrieved, for example since the last check, and then to perform the downloads.

The CADIP is deployed on a public cloud infrastructure. The interface between the X-band Ground Station and the data delivery point is an interface internal to the service provided by the acquisition service provider, which is therefore free to use the most suitable protocol/transfer mechanism to ensure that CADU (Data Session Data Block DSDB) files are available for download at the data delivery point.

The below information (in line with relevant applicable requirements) is reported in order to provide full transparency to the processing entity on the data transfer features and on the availability of data for download:

  • The DSDB files are transferred as soon as they are available and using parallel transfer as necessary.

  • No partial files are exposed on the data delivery point. All files are visible on the CADIP only once they have been fully transferred and can be immediately downloaded by the receiving entity.

  • When a file transfer is interrupted, an attempt to resume the file transfer is made, or else the partially transferred file is deleted and the transfer is restarted.

  • Multiple nominal sessions can be transferred in parallel as well as multiple retransfer session.

2.2 Interface Configuration

Only entitled clients are allowed to request Data Session Files from the CADIP. As part of every request to the CADIP, the client triggering the requests will identify themselves via Explicit identification.

The API shall support the following two methods of authentication:

  • HTTP Basic Authentication (not to be used operationally)

  • OAuth 2.0

HTTP Basic Authentication represents a simple and easy method, consisting of a client placing the username and password inside the authorization header of the request. The username and password are encoded with base64, an encoding technique that converts the username and password into a set of 64 characters in order to ensure safe transmission. It is mandatory to use Basic Authentication in conjunction with HTTPS in order to provide sufficient security to prevent unauthorized users from discovering the authentication information. HTTP Basic Authentication may be used only for the minimum compliance testing (Appendix B).

Operationally, OAuth 2.0 is to be used (https://tools.ietf.org/html/rfc6749), as it is a more secure and powerful system, allowing for scalability of security. OAuth allows access tokens and refresh tokens to be issued to clients by an authorization server. The client then uses the access token to access the interface delivery point API. The OAuth flow / grant type, to be used is the Password Credentials: https://tools.ietf.org/html/rfc6749#section-4.3.

The definition of new clients on the CADIP side is done by configuration, creating them with the necessary attributes. The attributes to be configured per client may be:

  • User Credentials: username and password, for authentication. Usernames and any associated attributes e.g. email are to be managed as generic indicators of client and not personal information (see section 4).

  • User Quota: CADIP requests are limited by a quota mechanism. Section 4.1.1 should be referred to for further details.

Users download DataSessionFiles from the CADIP using HTTP(S) protocols.

3 CADIP INTERFACE DESCRIPTION

This section provides detail on the specific interfaces between CADIP clients and the CADIP. Where applicable, examples of message content are provided.

3.1 Nominal Use Scenario Description

The nominal use scenario for discovery and download of Files from the CADIP is described below.

  • During the downlink of a Sentinel Acquisition the service provider publishes on the CADIP interface a record of a Session, to which will be associated a record of each File and following the completion of the acquisition session will be associated a QualityInfo record for each channel used during the acquisition.

  • At the beginning of the pass, the service provider publishes the fields “DownlinkStatusOK” and DeliveryPushOK" to ‘NULL’ in the Session Table.

  • The service provider publishes the number of channels (‘NumChannels’) detected in the downlink as a record in the Session.

  • The service provider transfers the CADU files to the CADIP and publishes the files that are available for download as soon as they are complete and ready to be downloaded by the client (each file associated to a channel has a sequential BlockNumber and the final file for the session is marked as FinalBlock=true, if no files are available for a channel a null record is created with BlockNumber=0 and : FinalBlock=true). Note 1:

Note 1:

  • Null record means that Name will not be valorised and that there is no physical file to download.

Note 2:

  • Block number starts with 1, if at least one file is donloaded.

Note 3:

  • The field FinalBlock shall be set to Null at the beginning of the Session and remain set to Null until the reception of the final file.

  • When the Session is complete the service provider updates the Session record with status information and publishes the QualityInfo for each channel associated to the session with no delay.

    • When all the DSDB files are transferred, the service provider updates the fields “DownlinkStatusOK” to inform that the transfer is completed

    • When all the Qualityinfo parameters have been updated and Session parameters, , the service provider updates the fields “DownlinkStatusOK’

  • In the event of an anomaly, the station Operators compare the data from the backup chain to that of the primary chain. The backup chain consists of a second Front-End equipment working together to provide redundancy. If the data from the backup chain is of better quality, a “retransfer” is initiated by the station operator. A ticket is created in CAMS and backup chain data is published as a new session with the property Retransfer=true on the CADIP and the same ‘SessionId’

  • The CADIP client routinely polls the API to discover if a new Session is available for download from the CADIP by sending a GET Session Query. The query typically would include a filter on Satellite and discover only Sessions since the last query using the Publication Time.

  • In response, the CADIP provides the GET Session Response to provide the user with a list of Sessions.

  • For each Session the CADIP client can query the number of channels available for the Session and the list of Files which are available for download for each channel. Fields will include: Id (logical file identifier), File Name, associated channel, Publication Date, Eviction Date (time period for which data will remain on CADIP before deletion.

  • Following receipt of the GET Files List Response, the CADIP client can download the files (in parallel). If so wished, parallel requests may be limited by a quota mechanism, e.g. limiting the user a maximum number of connections in parallel

  • The list of files is updated as long as the session is not complete.

  • In parallel, for each active session, the CADIP client continues to query the Files entity to detect the new files available from the previous query.

  • Once all the expected DSDB files are published, the last file of each dedicated channel will have the FinalBlock set to true, the CADIP client doesn’t need to update the file list anymore and the ingestion will end once all the files are downloaded on the client side.

  • If the production service notices an error in the nominal data transfer, a CAMS ticket should be opened, and a retransfer requested.

See Appendix F for other UseCases.

3.2 Entity Model

The figure below shows the CADIP basic Entity model.

img-0.jpeg

Figure 2: CADIP Entity Model

Session Properties Type M Description Example
IdGuid1YIt is a universally unique identifier (UUID). The
Id is a local identifier for the Session instance
within the CADIP, assigned by the service
managing the CADIP.
2b17b57d-fff4-
4645-b539-
91f305c27c69
SessionIdStringYThis is the session ID, identifying each
acquisition
24 characters fixed string, containing digits,
defined as follows:
<SSSS><YYYY><MM><DD><hh><mm
><ss><aaaaaa>
Where we have:
<SSSS>:
satellite:
- “S1A_”
- “S1B_”
- “S1C_”
- “S1D_”
- “S2A_”
- “S2B_”
- “S2C_”
- “S2D_”
- “S3A_”
- “S3B_”
- “S3C_”
- “S3D_”
- “S5P_”
- “S7A_”
- “S7B_”
- “S7C_”
<YYYY>: 4 digits year of acquisition start
<MM>: 2 digits month of acquisition start
<DD>: 2 digits day of acquisition start <hh>: 2
digits hour of acquisition start <mm>: 2 digits
minute of acquisition start <ss>: 2 digits second
of acquisition start <aaaaaa>: 6 digits
acquisition orbit
S1A_2017050112
1534062343
NumChannelsInt64Y*This is the number of channels for the session.
Allowed values are:
1
2
3
4
1
PublicationDateDateTime
Offset
YPublication date (e.g. time at which the fist
DSDB file becomes visible to the user). Time is
in UTC in the format YYYY-MM-
DDThh:mm:ss.sssZ
2019-02-
16T12:00:00.00
0Z
SatelliteStringY3 characters identifier for the satellite:
- “S1A” for Sentinel-1A
- “S1B” for Sentinel-1B
- “S1C” for Sentinel-1C
- “S1D” for Sentinel-1D
- “S2A” for Sentinel-2A
- “S2B” for Sentinel-2B
- “S2C” for Sentinel-2C
- “S2D” for Sentinel-2D
- “S3A” for Sentinel-3A
- “S3B” for Sentinel-3B
- “S3C” for Sentinel-3C
- “S3D” for Sentinel-3D
- “S5P” for Sentinel-5p
- “S7A” for CO2M 1
- “S7B” for CO2M 2
- “S7C” for CO2M 3
S1A
StationUnitIdStringYThis is the 2 digit X-band station unit ID, that
can be used to identify different configurations
at station level, if needed
(default is 00 if only one configuration is
present or the parameter is not needed)
00
DownlinkOrbitInt64YIt is the absolute downlink orbit number of the
acquired pass.
62343
AcquisitionIdStringYAcquisition id code as from the acquisition plan
Note: This information can be used by the
Processing facility to correlate the status of the
acquisition with the Acquisiition plan if
available to the Processing facility
415_01
AntennaIdStringYIdentification of the antenna used(e.g. INU,
SIV)
FrontEndIdStringYIt is the FEP identifier
Note: Frontend ID: it is the FEP identifier.
Usually each Station used two acquisition chain
(one nominal and one in backup).
Each acquisition chain contain a FEP ID.
This can be used by the station to trace which
demodulator was used for a particular dump.
Not relevant to the processing facility
RetransferBooleanYFlags whether the session corresponds to a
retransfer
false
AntennaStatusO
K
BooleanY **It is set to the value depending on the quality of
the acquired pass at Antenna level
true
FrontEndStatus
OK
BooleanY **It is set to the value depending on the quality of
the acquired pass at Front-End processor by
evaluating FER vs. admitted thresholds.
true
false
PlannedDataStar
t
DateTime
Offset
Y**Planned Date/Time start of the downlink as
extracted from SAPF file
PlannedDataSto
p
DateTime
Offset
Y**Planned Date/Time stop of the downlink as
extracted from SAPF file
DownlinkStartDateTime
Offset
Y **Acquisition time of the first CADU in the first
DSDB
2017-05-
01T12:15:34Z
DownlinkStopDateTime
Offset
Y **Acquisition time of the last CADU in the DSDB2017-05-
01T12:31:57Z
DownlinkStatus
OK
BooleanY **Overall status of downlink:
“false” status shall be used if a problem has
been encountered during the downlink as a
warning for potential data loss or data
corruption (in any case processing should be
initiated since the problem may not effect
science data or telemetry)
true
false
DeliveryPushOKBooleanY **It is set to the value depending on the evaluation
of the data dissemination to the DDP
“false” status shall be used if a problem has
been encountered during the transfer of a DSDB
file from the station to the DDP
true
false

(*) To be confirmed by the stations that this info is available at the beginning of the session

(**) Mandatory at the session completion update of the Session entity

Table 1: Properties in GET Session Response

File Properties Type M Description Example
IdGuid2YIt is a universally unique identifier (UUID).
The Id is a local identifier for the DSDB File
instance within the CADIP, assigned by the
service managing the CADIP.
2b17b57d-fff4-4645-
b539-91f305c27c69
NameStringYData file name (refer to Annex C naming
convention – to be taken from XBIP doc)
DCS_01_S1A_201705011
21534062343_ch1_DSDB
_00001.raw
SessionIdStringSee table 1
ChannelInt64YThis is the channel. Allowed values are:
1
2
3
4
1
BlockNumberInt64YThis is the DSDB numbering, always
starting from 1 in each session
BlockNumber shall corresponds to the
DSDB numbering defined in Table 4.
It is s related to each Channel of the Session.
1
FinalBlockBooleanYSet to true if it corresponds to the final
file for the session
true
PublicationDateDateTime
Offset
YPublication date and time of the data file
Time is in UTC in the format YYYY-MM-
DDThh:mm:ss.sssZ
2019-02-
16T12:00:00.000Z
EvictionDateDateTime
Offset
NDate when the data file will be removed
from the rolling repository. Time is in UTC
in the format YYYY-MM-
DDThh:mm:ss.sssZ
The EvictionDate is optional but should be
provided if a rolling policy is in place.
The DataSession metadata Information (this
record) shall NOT be removed from the
CADIP, thus providing an historic record of
all files published during the operations
lifetime.
2019-02-
23T12:00:00.000Z
SizeInt64YSize (in Bytes) of the Data Session Data
Block file
RetransferBooleanYFlags whether the data file is part of a
retransfer
false

Table 2: Properties in GET Files Response

QualityInfo Properties Type M Description Example
ChannelInt64YThis is the channel. Allowed values are:
1
2
3
4
1
SessionIdStringSee table 1
AcquiredTFsInt64YTotal number of acquired Transfer Frames
(CADUs) for the acquisition channel
ErrorTFsInt64YTotal number of Transfer Frames with error
(as noted through Reed-Solomon decoding
in the case of S1, S2, S3, S5P, this is the
sum of unrecoverable and uncorrected
frames, or as noted through the Frame Error
Control Field in the case of CO2M)
CorrectedTFsInt64YTotal number of Reed-Solomon corrected
Transfer Frames (CADUs) [0 in case the
Frame Error Control Field]
UncorrectableTF
s
Int64YNumber of uncorrected/unrecoverable data
Transfer Frames [0 in case the Frame Error
Control Field]
DataTFsInt64YDetailed information about quality service
for frames with payload instruments's data
for corresponding channel
Transfer Frames (CADUs) from the first
synchronized to the last one (in data interval,
not including CADU filler packets)
Total number of acquired data Transfer
Frames (CADUs)
ErrorDataTFsInt64YTotal number of error data Transfer Frames
(CADUs) (as noted through Reed-Solomon
decoding in the case of S1, S2, S3, S5P, this
is the sum of unrecoverable and uncorrected
frames, or as noted through the Frame Error
Control Field in the case of CO2M)
CorrectedDataT
Fs
Int64YTotal number of Reed-Solomon corrected
data Transfer Frames (CADUs) [0 in case
the Frame Error Control Field]
UncorrectableDa
taTFs
Int64YTotal number of not corrected/unrecoverable
data TFs (CADUs) [0 in case the Frame
Error Control Field]
DeliveryStartDateTime
Offset
YActual Date/Time start of the transferring of
the first CADU chunk to CADIP for the
corresponding channel.
DeliveryStopDateTime
Offset
YActual Date/Time stop of the transferring of
the last CADU chunk completion to CADIP
for the corresponding channel..
TotalChunksInt64YTotal number of transferred chunks for the
corresponding channel
TotalVolumeInt64YOverall volume size in bytes of the
acquisition session for the corresponding
channel

Table 3: Properties in GET QualityInfo Response

¹ For this, and for all other instances of the use of ‘Guid’ for IDs in this document, it should be noted that the IDs are UUIDs (Universally Unique Identifiers) of the (OData) Guid type.

² For this, and for all other instances of the use of ‘Guid’ for IDs in this document, it should be noted that the IDs are UUIDs (Universally Unique Identifiers) of the (OData) Guid type.

3.3 Query Sessions

The Query Session function is achieved through the standard OData API constructs according to the Entity Model described in Section 3.2. By default, the Session query are to be ordered by Publication Date, in an ascending order (e.g. any query for new Session published since a previous query will find the list ordered from oldest to newest). The main query possibilities are outlined below, filter conditions may be combined.

3.3.1.1 Query by Satellite

The list of Sessions published in the CADIP for a particular Satellite:

https://<service-root-uri>/odata/v1/ Sessions?$filter=Satellite eq ‘S1A’

3.3.1.2 Query by Orbit

The list of Sessions filtered criteria can be retrieved for example as follows:

https://<service-root-uri>/odata/v1/ Sessions?$filter=DownlinkOrbit eq 62343

3.3.1.3 Query by Publication Date

The list of Sessions published in the CADIP since a reference time:

https://<service-root-uri>/odata/v1/ Sessions?$filter=PublicationDate gt 2020-05-15T00:00:00.000Z

3.3.1.4 Additional Options

Query functions shall be supported on all properties of the Sessions according to the OData $filter query option. Results ordering shall be supported according to the $orderby option; result paging shall be supported according to the $top, $skip and $count options, with the page size configurable to support at least 1000 returned results per page. Additionally, the CADIP shall support at least the “and” and “or”, “not” and “in” operators. More details on these options are provided below.

$orderby

The $orderby system query option allows clients to request resources in either ascending order using ‘asc’ or descending order using ‘desc’. If ‘asc’ or ‘desc’ not specified, then the resources will be ordered in ascending order.

For example: https://<service-root-uri>/odata/v1/Sessions?$orderby=PublicationDate desc

Will return a list of Sessions ordered by PublicationDate in descending order.

$top

The $top system query option allows clients to specify the maximum (non-negative integer) number of items returned from a query. In the case of the CADIP, $top shall accept a maximum value of at least 1000.

For example: https://<service-root-uri>/odata/v1/Sessions?$top=1000&$filter=Satellite eq ‘S1A’

Will return the list of the first 1000 Sentinel-1A Sessions registered on the CADIP.

$skip

The $skip system query option allows clients to specify a (non-negative integer) number of items excluded from the start of a query result, i.e. the query will start returning items from the provided integer+1.

For example: https://<service-root-uri>/odata/v1/Sessions?$skip=100&$&$filter=Satellite eq ‘S1A’

Will return the list of all Sentinel-1A Sessions registered on the CADIP, excluding the first 100.

$top and $skip are often applied together; in this case $skip is always applied first regardless of the order in which they appear in the query.

$count

The $count system query option allows clients to request a count of the matching resources included with the resources in the response: the number of the matching resources is returned as result.

The $count query option is useful to know the number of entities which are identified by the resource path section of the URI after having applied some filters.

For example: https://<service-root-uri>/odata/v1/ Sessions?$count=true&$filter=Satellite eq ‘S1A’ Will return the number of Sentinel-1A Sessions currently available on the CADIP.

Operators “and”, “or”, “not”, “in”

The “and” operator allows clients to combine different filter functions.

Example: https://<service-root-uri>/odata/v1/ Sessions?$filter=Satellite eq ‘S1A’ and Orbit in (62343, 62344, 62345)

3.3.2 Query Sessions Response

The GET Sessions List response is an HTTP response to the GET Sessions request. As recommended by the OData specification, the CADIP OData service should support responses in JSON.

HTTP Response Envelope

The following overall HTTP status codes may be returned with the response:

  • 200 OK: if the request is accepted and a response can be returned

  • 400 Bad Request

  • 401 Unauthorized: if the requesting client is unauthorised

  • 404 Not Found

  • 429 Too Many Requests: if a quota is exceeded (see section 4.1.1)

  • 500 Internal Server Error

In the case where the query is accepted but no Sessions are found (for example if nothing is found in the date range of the query) then the 200 OK code is returned with an empty list, instead of returning the 404 Not Found code.

Sessions Properties

For each Session element in the Sessions List, the set of properties provided is listed in Table 1 above.

Example (JSON format):

code
HTTP/1.1 200 OK
[
  
{
    
"@odata.context":  "$metadata#Sessions",
    
"Id":  "2b17b57d-fff4-4645-b539-91f305c27c69",
    
"SessionId":  "20170501121534062343",
    
"NumChannels":  4,
    
Etc.
"
"PublicationDate": "2019-02-16T12: 00: 00.000Z",
"Retransfer": false 

Etc. examples are to be completed once table 1 has been consolidated.

}
]

3.4 Query Files

In the same way as for Sessions the Query for Files associated to each session function is achieved through the standard OData API constructs according to the Entity Model described in Section 3.2. By default, the Files query are to be ordered by Publication Date, in an ascending order (e.g. any query for new Files published since a previous query will find the list ordered from oldest to newest). The main query possibilities are outlined below, filter conditions may be combined.

3.4.1.1 Query by SessionId

The list of DataSession Files published in the CADIP for a particular Satellite:

https://<service-root-uri>/odata/v1/Files?$filter=SessionId eq ‘S1A_20170501121534062343’

3.4.1.2 Query by Name

The simple way to query Files within the CADIP is to perform queries based on the filename, using string functions.

Function Description
containsThe contains function returns records with names containing a particular string at any position
endswithThe endswith function returns true if the first parameter string value ends with the second
parameter string value, otherwise it returns false
startswithThe startswith function returns true if the first parameter string value starts with the second
parameter string value, otherwise it returns false

The following query will return all DataSession Files containing the SessionId “20170501121534062343”:

https://<service-root-uri>/odata/v1/Files?$filter=contains(Name,‘20170501121534062343’)

3.4.1.3 Query by Publication Date

The list of Sessions published in the CADIP since a reference time:

https://<service-root-uri>/odata/v1/Files?$filter=PublicationDate gt 2020-05-15T00:00:00.000Z

3.4.1.4 Additional Options

As per section 3.3.1.4. results ordering shall be supported according to the $orderby option; result paging shall be supported according to the $top, $skip and $count options, with the page size configurable to support at least 1000 returned results per page and query shall support at least the “and”, “or”, “not” and “in” operators. Please refer to section 3.3.1.4. for examples.

3.4.2 Query Files Response

The GET Files List response is an HTTP response to the GET Files request. As recommended by the OData specification, the CADIP OData service shall support responses in JSON.

HTTP Response Envelope

The following overall HTTP status codes may be returned with the response:

  • 200 OK: if the request is accepted and a response can be returned

  • 400 Bad Request

  • 401 Unauthorized: if the requesting client is unauthorised

  • 404 Not Found

  • 429 Too Many Requests: if a quota is exceeded (see section 4.1.1)

  • 500 Internal Server Error

In the case where the query is accepted but no Sessions are found (for example if nothing is found in the date range of the query) then the 200 OK code is returned with an empty list, instead of returning the 404 Not Found code.

The exhaustive list of HTTP service are available in each Tailored CADIP ICD provided by the X-Band Service Providers in operations.

Files Properties

For each File element in the Files List, the set of properties provided is listed in Table 2 above.

It is assumed that at the time of response, all Files returned in a Request Files List Response are currently available online at the CADIP, i.e. EvictionDates will always be in the future.

Example (JSON format):

code
HTTP/1.1 200 OK
[
  
{
    
"@odata.context":  "$metadata#Files",
    
"@odata.mediaContentType":  "application/octet-stream",
    
"Id":  "e872683a-ea5b-455d-bfb2-fb304cbfbacb",
    
"Name":  "DCS_01_S1A_20170501121534062343_ch1_DSDB_00001.raw",
    
"SessionId":  "20170501121534062343",
    
"Channel":  1,
    
"BlockNumber":  1,
    
"FinalBlock":  true,
    
Etc.
"PublicationDate":  "2019-02-16T12:00:00.000Z",
    
"EvictionDate":  "2019-02-23T12:00:00.000Z",
    
"Retransfer":  false 

  }
]

3.5 File Download

File download over the OData API is initiated using the ‘Id’ for each File returned in the GET Files List Response. The correct URI for the download of a single File is:

https://<service-root-uri>/odata/v1/Files(Id)/$value

Where Id is the UUID assigned per File.

The download is considered in the OData protocol through the /$value URL ([RD-2] §11.2.3 “To address the media stream represented by a media entity, clients append /$value to the resource path of the media entity URL. Services may redirect from this canonical URL to the source URL of the media stream.”.

The CADIP response supports the following HTTP status codes as a minimum:

  • 200 OK

  • 307 Temporary Redirect (if applicable)

  • 400 Bad Request

  • 404 File not found or no longer available

  • 401 Unauthorized

  • 429 Too Many Requests: if the download quota is exceeded (see section 4.1.1)

  • 500 Internal Server Error

In the case where the query is accepted but no Session is found (for example if nothing is found in the date range of the query) then the 200 OK code is returned with an empty list, instead of returning the 404 Not Found code.

http byte range requests on file downloads are allowed, enabling pause/resume of downloads or the efficient split of large download into multiple chunks, and may be added as a Range Header to the Download Request, eg: “Range: bytes=0-1023”

3.6 Retrieve QualityInfo

Once a session is completed the Service Provider shall create a QualityInfo record that can be retrieved for end-to-end monitoring and reporting purposes. The QualityInfo for each channel involved in the session is retrieved via the $expand query.

3.6.1 Query QualityInfo

The QualityInfo records associated to a given Session:

https://<service-root-uri>/odata/v1/Sessions(2b17b57d-fff4-4645-b539-91f305c27c69)?$expand=QualityInfo

3.6.2 QualityInfo Response

The GET QualityInfo response is an HTTP response to the GET Files request. As recommended by the OData specification, the CADIP OData service shall support responses in JSON.

code
HTTP/1.1 200 OK
{
"@odata.context": "$metadata#Sessions(QualityInfo())",
"Id": "2b17b57d-fff4-4645-b539-91f305c27c69",
"SessionId": "20170501121534062343",
"NumChannels": 4,
Etc. examples are to be completed once table 1 has been consolidated.
"PublicationDate": "2019-02-16T12:00:00.000Z",
"Retransfer": false
Etc. examples are to be completed once table 1 has been consolidated.
"QualityInfo":
[
{
"Channel": 1,
"AntennaId": "1",
"AntennaStatus": "OK",
"StationId": "1",
Etc. examples are to be completed once table 3 has been consolidated.
}
{
"Channel": 2,
"AntennaId": "1",
"AntennaStatus": "OK",
"StationId": "1",
Etc. examples are to be completed once table 3 has been consolidated.
}
]
}

4 CLIENT ADMINISTRATION

A CADIP service enforces that only properly authenticated clients are accepted and that the access rights are applied. If a client calls an CADIP service function without permission, it is informed with a corresponding return message.

4.1.1 Quota

User quota is assigned on a per user basis and is applied to downloads for all users.

Download Quota

  • TotalDownloadsQuota: Maximum volume (GB) transfer within a defined period

  • ParallelDownloadsQuota: Maximum number of separate downloads which can be performed in parallel

Should the quota be exceeded the 429 Too Many Requests code will be returned and the client must manage resubmission of the download request at a later date.

5 MONITORING AND REPORTING

Monitoring and reporting of the CADIP activities may be performed by a dedicated client account performing API queries to retrieve information on all Sessions and Files manged by the system. Downlink Quality Information has been included in the Entity model to avoid separate reporting channels.

5.1.1 CADU Delivery Interface Points Metrics

By ensuring that the full historic set of information regarding are available within the Sessions Entity there would seem to be few additional information relevant for reporting via a separate metrics entity. Comment or feedback on this capability would be welcome.

A set of statistics listed below are typical of those which could be made available by the CADIP Systems towards a dashboard, for example, summarizing the current status of the system and its operations. Since such statistics would be relatively intensive to calculate on-demand it is assumed that they will be pre-calculated on a routine basis (e.g. daily, hourly, every 10 minutes) and cached, rather than dynamically retrieved via standard API queries.

For this Metrics only the ‘SessionId’ with ‘Retransfer’ flag set to ‘False’ shall be considered.

OData entity for the metrics relative endpoint: https://<service-root-uri>/odata/v1/Metrics

The following OData Metrics Entity provides the metrics at a reporting frequency outlined in Table 4.

Metrics Property Type Description
Name String Name of metric according to a standard naming convention
Timestamp DateTimeOffset Date/time of metric reporting. Time is in UTC in the format YYYY-MM-DDThh:mm:ss.sssZ
MetricType Enum Gauge or Counter
Gauge String Value of Gauge at reporting timestamp (mandatory if MetricType=Gauge)
Count Int64 Value of Counter at reporting timestamp (mandatory ifMetricType=Counter)
Metric Description Type Frequency
CADU.<platformShortName>.<platformSerialIdentifier>.size Cumulative volume of CADU files of mission platform (<platformShortName>.<platformSerialIdentifier>) published in the CADIP in Bytes Counter Hourly update
CADU.<platformShortName>.<platformSerialIdentifier>.count Cumulative number of CADU files of mission platform (<platformShortName>.<platformSerialIdentifier>) published in the CADIP Counter Hourly update
Download.<platformShortName>.<platformSerialIdentifier>.<ServiceAlias>.size Cumulative size of CADU files of mission platform (<platformShortName>.<platformSerialIdentifier>) downloaded (by <ServiceAlias>) in Bytes Counter Hourly update
Download.<platformShortName>.<platformSerialIdentifier>.<ServiceAlias>.completed Cumulative number of CADU file downloads of mission platform (<platformShortName>.<platformSerialIdentifier>) completed (by <ServiceAlias>) Counter Hourly update
Download.<platformShortName>.<platformSerialIdentifier>.<ServiceAlias>.failed Cumulative number of CADU downloads of mission platform (<platformShortName>.<platformSerialIdentifier>) failed (by <ServiceAlias>) Counter Hourly update

Table 4: CADIP Service Summary Reporting Statistics

The capability expected is to report the metrics for the downloads according to

  • platformShortName = SENTINEL-1, SENTINEL-2, SENTINEL-3, SENTINEL-5P,

  • platformSerialIdentifier = A, B, C, D (for S1 to S3) or – for S5P

  • ServiceAlias = the account (user) identifier for the clients downloading from the CADIP e.g. s2a_ps, s2b_ps etc.

<satellite>.size.

Cumulative volume of CADU of satellite (<satellite>) published in the CADIP in Bytes

Where <satellite> is 3 char code already defined

Download.<satellite><client>.size

Cumulative volume of CADU of satellite (<satellite>) published in the CADIP downloaded (by <client>) in Bytes

6 RETENTION POLICY

The Session records and QualityInfo records must be persistent information available for end-to-end monitoring and reporting.

The File records and associated data files may be removed after a period as indicated by the EvictionDate.

APPENDIX AODATA METADATA DESCRIPTION

code
<?xml version="1.0"?>
<edmx:Edmx Version="4.0">
  <edmx:DataServices>
    <Schema Namespace="OData.CSC">
      <EnumType Name="EnumType" IsFlags="false" UnderlyingType="Edm.Int32">
        <Member Name="Gauge" Value="0"/>
        <Member Name="Counter" Value="1"/>
      </EnumType>
      <EntityType Name="Session">
        <Key>
          <PropertyRef Name="Id"/>
        </Key>
        <Property Name="Id" Type="Edm.Guid"/>
        <Property Name="SessionId" Type="Edm.String"/>
        <Property Name="NumChannels" Type="Edm.Int64"/>
        <Property Name="PublicationDate" Type="Edm.DateTimeOffset" Precision="3"/>
        <Property Name="Satellite" Type="Edm.String"/>
        <Property Name="StationUnitId" Type="Edm.String"/>
        <Property Name="DownlinkOrbit" Type="Edm.Int64"/>
        <Property Name="AcquisitionId" Type="Edm.String"/>
        <Property Name="AntennaId" Type="Edm.String"/>
        <Property Name="FrontEndId" Type="Edm.String"/>
        <Property Name="AntennaStatusOK" Type="Edm.Boolean"/>
        <Property Name="FrontEndStatusOK" Type="Edm.Boolean"/>
        <Property Name="Retransfer" Type="Edm.Boolean"/>
        <Property Name="PlannedDataStart" Type="Edm.DateTimeOffset" Precision="6"/>
        <Property Name="PlannedDataStop " Type="Edm.DateTimeOffset" Precision="6"/>
        <Property Name="DownlinkStart" Type="Edm.DateTimeOffset" Precision="6"/>
        <Property Name="DownlinkStop" Type="Edm.DateTimeOffset" Precision="6"/>
        <Property Name="DownlinkStatusOK" Type="Edm.Boolean"/>
        <Property Name="DeliveryPushOK" Type="Edm.Boolean"/>
      </EntityType>
      <EntityType Name="File" HasStream="true">
        <Key>
          <PropertyRef Name="Id"/>
        </Key>
        <Property Name="Id" Type="Edm.Guid"/>
        <Property Name="Name" Type="Edm.String"/>
        <Property Name="SessionId" Type="Edm.String"/>
        <Property Name="Channel" Type="Edm.Int64"/>
        <Property Name="FinalBlock" Type="Edm.Boolean"/>
        <Property Name="PublicationDate" Type="Edm.DateTimeOffset" Precision="3"/>
        <Property Name="EvictionDate" Type="Edm.DateTimeOffset" Precision="3"/>
        <Property Name="Size" Type="Edm.Int64"/>
        <Property Name="Retransfer" Type="Edm.Boolean"/>
      </EntityType>
      <EntityType Name="QualityInfo">
        <Property Name="Channel" Type="Edm.Int64"/>
        <Property Name="AcquiredTFs" Type="Edm.Int64"/>
        <Property Name="ErrorTFs" Type="Edm.Int64"/>
        <Property Name="CorrectedTFs" Type="Edm.Int64"/>
        <Property Name="UncorrectableTFs" Type="Edm.Int64"/>
        <Property Name="DataTFs" Type="Edm.Int64"/>
        <Property Name="ErrorDataTFs" Type="Edm.Int64"/>
        <Property Name="CorrectedDataTFs" Type="Edm.Int64"/>
        <Property Name="UncorrectableDataTFs" Type="Edm.Int64"/>
        <Property Name="DeliveryStart" Type="Edm.DateTimeOffset" Precision="3"/>
        <Property Name="DeliveryStop" Type="Edm.DateTimeOffset" Precision="3"/>
        <Property Name="TotalChunks" Type="Edm.Int64"/>
        <Property Name="TotalVolume" Type="Edm.Int64"/>
      </EntityType>
      <EntityType Name="Metric">
        <Key>
          <PropertyRef Name="Name"/>
        </Key>
        <Property Name="Name" Type="Edm.String"/>
        <Property Name="Timestamp" Type="Edm.DateTimeOffset" Precision="3"/>
        <Property Name="MetricType" Type="OData.CSC.EnumType"/>
        <Property Name="Gauge" Type="Edm.String"/>
        <Property Name="Counter" Type="Edm.Int64"/>
      </EntityType>
      <EntityContainer Name="Container">
        <EntitySet Name="Sessions" EntityType="OData.CSC.Session">
          <NavigationPropertyBinding Path="Files" Target="Files"/>
          <NavigationPropertyBinding Path="QualityInfo" Target="QualityInfo"/>
        </EntitySet>
        <EntitySet Name="Files" EntityType="OData.CSC.File" IncludeInServiceDocument"/>
        <EntitySet Name="Metrics" EntityType="OData.CSC.Metric"/>
      </EntityContainer>
    </Schema>
  </edmx:DataServices>
</edmx:Edmx>

APPENDIX B COMPLIANCE TEST SUITE

The present Appendix provides an insight to the compliance test suite that should be provided for the ICD. The test suite is provided as a set of OData requests to be sent to the CADIP.

The proposed implementation of the test suite is designed to test the normal capabilities of the CADIP, and is implemented as a Postman (https://www.getpostman.com/) Collections JSON file (format v2.1 to be provided as an accompanying external file to this ICD: “

CADIP Compliance Test Suite Instructions

  1. Import the Postman Collection

  2. Add an CADIP Compliance environment

  3. Add service-root-uri, username and password variables according to the required CADIP configuration, as shown below.

img-1.jpeg

Session Listing Query

The first CADIP query issues a basic Session Query to the CADIP. The test is initiated by sending the request to the CADIP, using the environmental variables established, and success is indicated in the Test tab as pass or fail.

The tests performed on the Session Listing Query are formulated to verify the OData context of the response, the properties of the Session and to set the variables for one of the Files returned to be used in subsequent tests.

img-2.jpeg

The query without any filter condition returns the ordered list of Sessions published on the CADIP.

APPENDIX C DATA SESSION FILE NAMING CONVENTION

The file naming convention to be used in the CADIP interface is reported below:

  • DCS_<nn>_<sessionid>_ch<x>_DSDB_<cnt>.raw

Naming Element Description Format
<nn>This is the X-band station unit ID2 digits (default is 00 if only one configuration
is present or the parameter is not needed)
<SessionID>This is the session IDThis is the session ID, identifying each
acquisition
24 characters fixed string, containing digits,
defined as follows:
<SSSS><YYYY><MM><DD><hh><mm
><ss><aaaaaa>
Where we have:
<SSSS>:
satellite:
- “S1A_”
- “S1B_”
- “S1C_”
- “S1D_”
- “S2A_”
- “S2B_”
- “S2C_”
- “S2D_”
- “S3A_”
- “S3B_”
- “S3C_”
- “S3D_”
- “S5P_”
- “S7A_”
- “S7B_”
- “S7C_”
<YYYY>: 4 digits year of acquisition start
<MM>: 2 digits month of acquisition start
<DD>: 2 digits day of acquisition start <hh>:
2 digits hour of acquisition start <mm>: 2
digits minute of acquisition start <ss>: 2 digits
second of acquisition start <aaaaaa>: 6 digits
acquisition orbit
<x>This is the channel. Allowed values are:
- 1
- 2
- 3
- 4
1 digit.
<cnt>This is the DSDB numbering5 digits always starting from 00001 in each
session

Table 5: – Files Naming Convention

APPENDIX DRAW DSDB DATA FILES

The raw binary data transferred from the generic X-band/Ka-Band Ground Station to the data delivery point is in the form of a collection of DSDB files of predetermined size and containing an integer number of CADUs (also including RS uncorrectable CADUs). This means that CADUs are not truncated by the segmentation process.

The idle frames generated by the satellite and present in the original stream of data at the input of the Demodulator are as well consolidated as all other data.

The DSDB size is the same for both channels and is configurable in range from 50 MB to 4 GB independently per Sentinel satellite, the size of 300 MB being currently considered as a reference.

APPENDIX E CADU ANNOTATIONS

Transfer Frame and CADUs annotations are appended to each packet respectively generated or acquired by the front-end system.

The ordering of PCD bytes appended to each Transfer Frame or CADU is shown below.

Earth Receive Time

This annotation captures the ground station reception time (UTC) of the CADU in 8 bytes.

The time stamp is based on a Modified Julian Day 2000 (MJD2000) with an epoch of: 01-JAN-2000 00:00:00.000000

In short the format contains:

  • 2 byte days since epoch

  • 4 byte milliseconds

  • 2 byte microseconds

Layout:

Byte Bit Description
07 -0Day number (15 .. 8)
17 -0Day number (7 .. 0)
27 -3All zeros
22 -0Milliseconds of day (26 .. 24)
37 -0Milliseconds of day (23 .. 16)
47 -0Milliseconds of day (15 .. 8)
57 -0Milliseconds of day (7 .. 0)
67 -2All zeros
61 -0Microseconds of Milliseconds (9 .. 8)
77 -0Microseconds of Milliseconds (7 .. 0)

Table 6: Earth Receive Time Annotation Format

Relation to CCSDS Day Segmented Time Code (CDS)

This section describes the relation to CCSDS Day Segmented Day Code (CDS), as per CCSDS Blue Book 301.0-B-2, Time Code Formats

Preamble Field (P-Field):

The P-Field is implicit, i.e. it is not transmitted/part of the data stream.

Byte Value Description
1-37 -0Time code identification
47 -0Agency-defined epoch (which is Jan 1st 2000)
57 -316-bit day segment
6-72 -0microsecond resolution

Table 7: Time Field Format

Time Field (T-Field):

As specified in the «Layout» section above.

APPENDIX F RETRANSFER SCENARIO

In case of data retransfer initiated by the Acquisition Provider, a completely new session will be created for a re-transfer, not try to update the old one.

The SessionId is not the unique key describing the Session, instead we have the “Id” key (GUID = global unique id type)

So the scenario is as follows:

  1. first Session is created

Id= 2b17b57d-fff4-4645-b539-91f305c27c69 SessionId= S1A_20170501121534062343 PublicationDate=2017-05-11T12:00:00.000Z Retransfer=False Etc.

The qualityInfo associated to that is reported via https://<;service-root-uri>/odata/v1/Sessions(2b17b57d-fff4-4645-b539-91f305c27c69)?$expand=QualityInfo

  1. a second Session is created

Id= 6cd673c9-845e-4677-aebc-77afb77f9373 SessionId= S1A_20170501121534062343 PublicationDate=2017-05-11T12:15:30.1230Z Retransfer=true Etc.

The qualityInfo associated to that is separate and reported via https://<service-root-uri>/odata/v1/Sessions(6cd673c9-845e-4677-aebc-77afb77f9373)?$expand=QualityInfo