Live Chat
Welcome to the ESA Earth Observation Framework (EOF) website! If you have any questions about EOF, I’m here to help.
06/04/2023

ESA EO Framework (EOF) – CSC – Long Term Archive Interface Control Document

Reference: ESA-EOPG-EOPGC-IF-2
Version: 1.9
Author: ESA
Diffusion: internal GS interface
Download file:

ESA UNCLASSIFIED - For ESA Official Use Only

1 Introduction

1.1 Purpose and Scope

The purpose of this document is to specify the interfaces of the Long Term Archive (LTA) within the Copernicus Space Component (CSC) Ground Segment (GS) as part of the overall CSC ESA Operations Framework.

In particular this document aims to specify an https RESTful Application Programming Interface (API) of the LTA through which Copernicus Sentinel data products may be queried and downloaded by authorised users.

This specification uses the latest OData v4 standard for RESTful. 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 the LTA and overview of the use cases supported

-Section 3: Description of the interfaces

-Sections 4 and 5: Annexes, containing OData metadata description and compliance test suites

1.3 Applicable Documents

[AD-1] CSC Sentinel-1 Product Unit Definition and Metadata ICD [ESA-EOPG-EOPGC-SP-01]

[AD-2] CSC Sentinel-2 Product Unit Definition and Metadata ICD [ESA-EOPG-EOPGC-SP-02]

[AD-3] CSC Sentinel-3 Product Unit Definition and Metadata ICD [ESA-EOPG-EOPGC-SP-03]

[AD-4] CSC Sentinel-5P Product Unit Definition and Metadata ICD [ESA-EOPG-EOPGC-SP-04]

[AD-5] CSC POD Product Unit Definition and Metadata ICD [ESA-EOPG-EOPGC-SP-5]

[AD-6] CSC Common Entity Definition Document [ESA-EOPG-EOPGC-IF-5]

[AD-7] Copernicus Data Space Ecosystem - Traceability Service Interface Control Document [CDSE-TRC-TSY]

[AD-8] OData Version 4.01. Part 1: Protocol
http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html

[AD-9]OData Version 4.01. Part 2: URL Conventions
http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html

[AD-10]OData JSON Format Version 4.01
http://docs.oasis-open.org/odata/odata-json-format/v4.01/odata-json-format-v4.01.html

[AD-11]"The GeoJSON Format", RFC 7946, August 2016.
http://tools.ietf.org/html/rfc7946

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]OGC Earth Observation Metadata profile of Observations & Measurements
http://docs.opengeospatial.org/is/10-157r4/10-157r4.html

[RD-4]OGC EO Dataset Metadata GeoJSON(-LD) Encoding Standard
https://docs.ogc.org/is/17-003r2/17-003r2.html

[RD-5] Production Interface Delivery Point ICD [ESA-EOPG-EOPGC-IF-3]

[RD-6]Data Protection (GDPR)
https://ec.europa.eu/info/law/law-topic/data-protection_en

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

[RD-8] Auxiliary Data Interface Delivery Point ICD [ESA-EOPG-EOPGC-IF-10]

1.5 Definitions

AIP – Archive Interface delivery Point – the interface delivery point for products requested from the LTA

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

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

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

Product – Packaged set of data files corresponding to EO or auxiliary product format specification

Order – A client request for a data product to be retrieved by the LTA and staged on the Archive Interface Delivery Point (AIP), thereby making it available for download by the requesting user.

Bulk Request – A client request to trigger the creation of a Bulk, defined by a list of products or query filter parameters and a Batch size. The LTA breaks the Bulk into Batches, based on the Batch size provided and the most efficient ordering of products.

Batch Order – A client request to trigger the delivery of products making up a particular Batch (resulting from a Bulk) from the LTA to the AIP, from where they can subsequently be downloaded.

Subscription – A client request for notification of future products entering the LTA which fulfil particular query filter parameters. A Subscription can optionally request for such products to be automatically Ordered by the LTA, thus staged on the AIP and made available for download.

Priority – The LTA manages a priority scheme for all retrievals. Priority is defined as an integer e.g. 1-100 (with 100 being the highest priority) and product retrievals from the archive are managed in the order of priority. A user is assigned a default priority and a maximum priority.

Quota – Refers to a restriction in the usage of the LTA - e.g. the number of orders being processed in parallel (i.e. in status in_progress) which a user may have ongoing at a particular time.

1.6 List of Acronyms

AD – Applicable Document

AIP – Archive Interface delivery Point

API  – Application Programming Interface

CSC  – Copernicus Space Component

E2E  – End-to-End

EO  – Earth Observation

ESA  – European Space Agency

FIFO  – First In, First Out

GS  – Ground Segment

HTTP(S) – Hypertext Transfer Protocol (Secure)

ID  – Identifier

ICD  – Interface Control Document

JSON  – JavaScript Object Notation

LTA – Long Term Archive

OData  – Open Data Protocol

POD  – Precise Orbit Determination

PRIP  – PRoduction Interface delivery Point

RD  – Reference Document

URI  – Uniform Resource Identifier

UTC  – Coordinated Universal Time

UUID  – Universally Unique Identifier

2 Overview

2.1 Context

Picture 1

Figure 1: Long Term Archive (LTA) Overall Context

Multiple LTAs are necessary in the Copernicus GS architecture to ensure redundant geographically separated safe storage for needs of all Sentinel missions. The same LTA may serve one single Sentinel mission or several Sentinel missions. Each LTA operates autonomously with respect to the other LTAs.

As a consumer of data the LTA interfaces with:

-the Systematic Processing and Routine Quality Control elements, through the Production Interface delivery Point (PRIP) to retrieve the Sentinel products files to be stored in the LTA

-the Auxiliary Data Gathering element, through the Auxiliary Data Gathering Interface delivery Point (AUXIP) to retrieve the auxiliary files to be stored in the LTA

-the Precise Orbit Determination element, through a POD Auxiliary Interface delivery Point (POD AUXIP), to retrieve the POD information to be stored in the LTA

The interfaces to these producer services are governed by the Production Interface delivery Point ICD [RD-5] and the Auxiliary Data Interface Delivery Point [RD-8].

As a provider of data the LTA interfaces with multiple clients:

-the Data Access and On-Demand Production elements, through the Archive Interface delivery Point

-the E2E Operations Performance Monitoring element, to provide the reporting information required for the E2E operations monitoring

-potentially the other LTA instances, and other clients such as Cal/Val users requiring data not otherwise available through the Data Access

The interface to these clients for the access to the API and delivery of Products is the so called Archive Interface delivery Point, governed by this ICD.


2.2 Nominal Use Scenario Description

The nominal use scenarios for the LTA are shown in the figure below and introduced in the following sections.

Picture 12

Figure 2: Long-Term Data Archiving Services System Use-Case Diagram

2.3 Ingest Product

The LTA service builds its archive and product catalogue from the ingested products. The LTA routinely downloads the latest products from the Production Interface Delivery Point (PRIP) and Auxiliary data Interface delivery Points (AUXIPs – describing the delivery points of the Auxiliary Data Gathering and POD Services), which follow the specifications described in [RD-5] and [RD-8], respectively. The metadata required for the product catalogue defined in the relevant Product Unit Definition and Metadata ICD [AD-1] to [AD-5].

2.4 Bulk Product Ingestion

The LTA service may take advantage of bulk retrieval interfaces of another reference LTA for the ingestion of large sets of data. The bulk product ingestion may use a catalogue export from the reference LTA to avoid un-necessarily parsing the individual products for the metadata. The catalogue export function is described in section 3.3.2. The bulk product ingestion may use the bulk product retrieval interface of the reference LTA to retrieve the data in the most efficient manner for the reference LTA (e.g. one that optimises tape access or caching strategies). The bulk retrieval interface is described in section 3.5.

2.5 Query Product Catalogue

The query catalogue function is provided through the API described in section 3.3. The API is used to identify required products that may be retrieved from the LTA and, via their identifiers, to trigger the product retrieval. The product catalogue can be queried for specific named products or lists of products, or products matching more complex query criteria. The LTA product catalogue provides an export function to provide the metadata in a bulk format.

2.6 Retrieve Product

The retrieve product function is also provided through the API as described in section 3.4. The retrieve product is implemented via an order triggering the delivery of the required product on the Archive Interface delivery Point (AIP) following which the product may be accessed for a limited amount of time and downloaded from the AIP.

2.7 Bulk Product Retrieve

The bulk product retrieve function is provided through the API as described in section 3.5. The bulk product retrieve provides a filter query to define the list of products to be staged, in general it leaves the LTA to define the most efficient order of data extraction by defining batches of data.

2.8 Delete Product

The product delete function is not provided directly to clients via API. Deleted products are removed from the Product Catalogue triggered by a local procedure, their history and the rationale for deletion is provided through the external product traceability service.

2.9 Bulk Delete Product

The bulk product delete function is not provided through a client API. Deleted products are removed in the Product Catalogue triggered by a local procedure, their history and the rationale for deletion is provided through the external product traceability service.

2.10 Subscription

The subscribe function provides a call-back mechanism by which a client may be informed of any new or deleted product in the LTA matching certain query criteria and optionally the requiring the delivery of the product to the AIP. The API is described in section 3.6

2.11 Reporting

The reporting function enables the generation of LTA service performance reports, and EO data population reports, and may be used for end-to-end monitoring purposes.

2.12 Registration and Authorisation

The registration and authorisation function provides the possibility to register user clients which need to interact with the LTA service. For each registered client, the Service Manager is able to define role-based access rights corresponding to the types of ground segment actors (see section 3.7). Each individual client is assigned to one role, defining the corresponding LTA functions permitted to be executed for the client.

2.13 Accounting

The accounting function provides the possibility to define limits (quota) for the use of the LTA service per client and LTA function to prevent IT resource overflows and to define different priorities for concurrent clients. The following limitations shall be supported:

Retrieve Product, Bulk Product Retrieval, Product Download: number of concurrent orders/downloads and total per set duration

If a client reaches one of the limits when calling an LTA service function, it is notified with a corresponding return message including information about the current function use, the limitation imposed.

2.14 Traceability

The LTA services interfaces with the CSC Traceability and Certification service to verify and provide traces for data origin and integrity.


3 Long term archive client API Description

The following sections describe the client API of the LTA. The LTA may support further internal interfaces through APIs to support the local LTA service operations, but only the standard interfaces described in this ICD shall be offered towards any client.

3.1 Interface Configuration

Only entitled clients are allowed to request products from the LTA. As part of every request to the API of the LTA, the client triggering the requests will identify themselves via Explicit identification.

The API shall support at least the following two methods of authentication:

- HTTP Basic Authentication

- 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.

Although HTTP Basic Authentication should be supported for the purpose of testing and initial phases, it shall not represent the main authentication method used. 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 grant: https://tools.ietf.org/html/rfc6749#section-4.3.

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

-User Credentials (username, 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 3.8).

-User Roles – For assigning the functionality available to the client (see section 3.8.1.1)

-User Quota – LTA Requests may be limited by a quota mechanism (see section 3.8.2).

-Order Priority - Product retrievals from the archive are managed in the order of priority, with priority defined as an integer e.g. 1-100 (with 100 being the highest priority). Although priority may be assigned on a per order basis by the user, its assignation is limited by two parameters set as part of user configuration:

oDefault Priority – The priority assigned if the user does not set a priority with an order (e.g. 50)

oMaximum Priority – The maximum priority with a user may assign to an order (e.g. 100)

It should be noted that some of these attributes (e.g. User Credentials) may be managed externally of the OData LTA implementation, e.g. as part of an OAuth 2.0 system. When a new user request arrives from ESA, the LTA Service shall manage this as part of the service initialisation. The password together with any other credentials required for authentication will be communicated by the LTA service provider directly to the user, by using the user e-mail.

3.2 Basic LTA Product Entity Model

The figure below shows the LTA basic Product Entity model.

Picture 9

Figure 3: Product Entity Model

Products Properties

Type

M

Description

Example

Id

Guid

Y

It is a universally unique identifier (UUID). The Id is a local identifier for the product instance within the LTA, assigned during the product ingestion.

2b17b57d-fff4-4645-b539-91f305c27c69

Name

String

Y

Data file name

S1A_IW_SLC__1SDV_ 20160117T103451_ 20160117T103518_ 009533_ 0094_D46A.SAFE.zip

ContentType

String

Y

The Mime type of the product

application/octet-stream

ContentLength

Int64

Y

Actual size in bytes (B) of the downloadable product package

4737286945

OriginDate

DateTimeOffset

Y

Date and time of the product at the source (e.g. Publication date time on the PRIP). Time is in UTC in the format YYYY-MM-DDThh:mm:ss.sssZ

2018-01-17T12:56:05.232Z

PublicationDate

DateTimeOffset

Y

Publication date and time of the product (time at which the product becomes accessible for retrieval to the client within the LTA). Time is in UTC in the format YYYY-MM-DDThh:mm:ss.sssZ

2018-01-17T14:46:03.788Z

ModificationDate

DateTimeOffset

Y

Date when the product metadata was last modified. Time is in UTC in the format YYYY-MM-DDThh:mm:ss.sssZ

2018-01-19T18:00:00.000Z

Online

Boolean

Y

Indication of the presence of the product in the AIP, available for immediate download. This property can change in time and should be used taking into account EvictionDate.

true

EvictionDate

DateTimeOffset

N

Date when the data file will be removed from the Archive delivery Interface Point. Time is in UTC in the format YYYY-MM-DDThh:mm:ss.sssZ

Only provided if Online = true

2018-01-22T18:00:00.000Z

Checksum (Algorithm , Value and ChecksumDate)

Checksum[]

Y

Represents the known checksums for the product’s physical data, providing a unique value for supporting download integrity check. At least MD5 checksum is mandatory. Each checksum also includes the ChecksumDate when it was calculated, in UTC in the format YYYY-MM-DDThh:mm:ss.sssZ.

"Checksum":

[

{

"Algorithm":"MD5",

"Value":"E8A303BF3D85200

514F727DB60E7DB65"

"ChecksumDate":"2018-01-22T18:00:00.000Z",

}

]

ContentDate

TimeRange

Y

The sensing range period. Start and end times are in UTC in the format YYYY-MM-DDThh:mm:ss.sssZ

"ContentDate":

{

"Start":"2016-01-17T10:34:51.922Z",

"End":"2016-01-17T10:35:18.872Z"

}

Footprint

Geography

N

Footprint of the product. “Polygon” is used only as an example here, as it represents the most common type of footprint. However, this will correspond to the type of footprint of the product, which can also be e.g. LineString, MultiLineString, etc.

geography'SRID=4326;

Polygon((),(-41.15749 66.766701,-31.740927 67.629135,-31.479883 66.860405,-40.616844 66.011871,-41.15749 66.766701))'

GeoFootprint

Geography

N

Mandatory for georeferenced products, following the definition in [RFC7946 ], with the following modification, according to [OData JSON Format Version 4.01 – Section 7.1]:

-Keys should be ordered with type first, then coordinates, then any other keys

“Polygon” is used only as an example here, as it represents the most common type of GeoFootprint. However, the type will correspond to the type of footprint of the product, which can also be e.g. LineString, MultiLineString, etc.

"GeoFootprint":{

"type": "Polygon",

"coordinates": [

[

[-59.3169, 2.6367],

[-63.105, -14.0539],

[-60.8506, -14.4245],

[-57.1309, 2.3269],

[-59.3169, 2.6367]

]

]

}

Table 1: Product Entity Description

As Attribute values will require different data types, they are based on derived entity types such as StringAttribute, DateTimeOffsetAttribute, IntegerAttribute etc (see figure 3).

For the full list of applicable attributes, refer to [AD-1], [AD-2], [AD-3], [AD-4], [AD-5].

Attribute Properties

Type

M

Description

Example

Name

String

Y

String name of the attribute

platformShortName

ValueType

String

Y

The type of attribute. This shall correspond to the following:

- String

- Integer

- DateTimeOffset

- Boolean

- Double

String

Value

Depends on ValueType

The value of the attribute, depending on the ValueType

SENTINEL-2

Table 2: Attribute Entity Description

The response to an $expand=Attributes query shall include at least the attribute properties listed in Table 2.

Example of $expand=Attributes Query:

https://<service-root-uri>/odata/v1/Products?$filter=contains(Name,'IW_RAW__0N') and ContentDate/Start gt 2022-06-26T00:00:00.000Z and ContentDate/End lt 2022-06-26T10:00:00.000Z&$top=1$$expand=Attributes

Example of $expand=Attributes Query Response:

HTTP/1.1 200 OK

{

"@odata.context": "$metadata#Products(Attributes())",

"value": [

{

"Id": "06c91249-b275-4811-9a55-a8d11b534945",

"Name": "S1A_IW_RAW__0NSH_20220626T050533_20220626T051038_043829_053B7F_203C.SAFE.zip",

"EvictionDate": "9999-12-31T23:59:59.999Z",

"ModificationDate": "2022-06-26T06:30:34.558Z",

"OriginDate": "2022-06-26T06:14:55.468Z",

"PublicationDate": "2022-06-26T06:30:34.558Z",

"ContentLength": 47649797,

"Online": true,

"ContentType": "application/zip",

"ContentDate": {

"Start": "2022-06-26T05:05:33.863Z",

"End": "2022-06-26T05:10:38.849Z"

},

"Checksum": [

{

"Algorithm": "MD5",

"Value": "235f8cac56705aee78b4c8bbb45c7604",

"ChecksumDate": "2022-06-26T06:14:55.468Z"

}

],

"Footprint": "geography'SRID=4326;POLYGON((-59.3169 2.6367,-63.105 -14.0539,-60.8506 -14.4245,-57.1309 2.3269,-59.3169 2.6367))",

"GeoFootprint":{

"type": "Polygon",

"coordinates": [

[

[

-59.3169,

2.6367

],

[

-63.105,

-14.0539

],

[

-60.8506,

-14.4245

],

[

-57.1309,

2.3269

],

[

-59.3169,

2.6367

]

]

],

},

"Attributes": [

{

"Name": "polarisationChannels",

"ValueType": "String",

"Value": "HH"

},

{

"Name": "productType",

"ValueType": "String",

"Value": "IW_RAW__0N"

},

{

"Name": "cycleNumber",

"ValueType": "Integer",

"Value": 265

},

{

"Name": "relativeOrbitNumber",

"ValueType": "Integer",

"Value": 43829

},

{

"Name": "processingCenter",

"ValueType": "String",

"Value": "S1 Production Service-SERCO"

},

{

"Name": "completionTimeFromAscendingNode",

"ValueType": "Double",

"Value": 4646455.264

},

{

"Name": "processingDate",

"ValueType": "DateTimeOffset",

"Value": "2022-06-26T06:11:22.535Z"

},

{

"Name": "datatakeID",

"ValueType": "Integer",

"Value": 342911

},

{

"Name": "orbitNumber",

"ValueType": "Integer",

"Value": 43829

},

{

"Name": "productConsolidation",

"ValueType": "String",

"Value": "FULL"

},

{

"Name": "endingDateTime",

"ValueType": "DateTimeOffset",

"Value": "2022-06-26T05:10:38.849Z"

},

{

"Name": "qualityDataObjectID",

"ValueType": "String",

"Value": "measurementData"

},

{

"Name": "coordinates",

"ValueType": "String",

"Value": "-59.3169 2.6367,-63.105 -14.0539,-60.8506 -14.4245,-57.1309 2.3269,-59.3169 2.6367'"

},

{

"Name": "orbitDirection",

"ValueType": "String",

"Value": "ASCENDING"

},

{

"Name": "sliceProductFlag",

"ValueType": "Boolean",

"Value": false

},

{

"Name": "beginningDateTime",

"ValueType": "DateTimeOffset",

"Value": "2022-06-26T05:05:33.863Z"

},

{

"Name": "instrumentConfigurationID",

"ValueType": "Integer",

"Value": 7

},

{

"Name": "startTimeFromAscendingNode",

"ValueType": "Double",

"Value": 4341469.328

},

{

"Name": "instrumentShortName",

"ValueType": "String",

"Value": "SAR"

},

{

"Name": "productClass",

"ValueType": "String",

"Value": "N"

},

{

"Name": "platformShortName",

"ValueType": "String",

"Value": "SENTINEL-1"

},

{

"Name": "platformSerialIdentifier",

"ValueType": "String",

"Value": "A"

}

]

}

]

}

3.3 Query Products Catalogue

The Query Products Catalogue function is achieved through standard APIs according to the Entity Model described in section 3.2.

3.3.1 Query Products

Some of the main query possibilities are outlined below, filter conditions may be combined.

3.3.1.1 Query by Name

The most basic way to query products from within the LTA is to perform queries based on the filename, using string functions.

Function

Description

contains

The contains function returns records with names containing a particular string at any position

endswith

The endswith function returns true if the first parameter string value ends with the second parameter string value, otherwise it returns false

startswith

The startswith function returns true if the first parameter string value starts with the second parameter string value, otherwise it returns false

The list of products starting with the filename “S1B_EW_”can be retrieved as follows:

https://<service-root-uri>/odata/v1/Products?$filter=startswith(Name,'S1B_EW_')

The following query will return all products containing “S3B_ SL_1_RBT__” :

https://<service-root-uri>/odata/v1/Products?$filter=contains(Name,'S3B_ SL_1_RBT')

3.3.1.2 Query by List

An alternative to using Query by Name for a multiple product query, in cases where the list of queried products is longer than what can be contained in the URI, the Query by List is to be used. Such a query would use the POST method to execute a ‘query by list’ action on a list of products contained in the body. For example:

POST http://<service-root-uri>/odata/v1/Products/OData.CSC.FilterList

{

"FilterProducts":

[

     {"Name": "product1"},

     {"Name": "product2"}, 

     {"Name": "product3"} 

     etc.

   ]

}

3.3.1.3 Query by Product Publication Date

The list of products published in the AIP between two dates can be obtained as follows:

https://<service-root-uri>/odata/v1/Products?$filter=PublicationDate gt 2017-05-15T00:00:00.000Z and PublicationDate lt 2017-05-16T00:00:00.000Z

3.3.1.4 Query by Sensing Date

The list of products filtered by sensing date criteria can be retrieved for example as follows:

https://<service-root-uri>/odata/v1/Products?$filter=ContentDate/Start gt 2019-05-15T00:00:00.000Z and ContentDate/End lt 2019-05-16T00:00:00.000Z

3.3.1.5 Query by Geographic Criteria

The list of products filtered by geographical criteria can be retrieved as follows:

https://<service-root-uri>/odata/v1/Products?$filter=OData.CSC.Intersects(area=geography'SRID=4326;POLYGON((-127.89734578345 45.234534534,-127.89734578345 45.234534534,-127.89734578345 45.234534534,-127.89734578345 45.234534534))')

It must be noted that this is a non-native OData function. It is introduced as a custom function extension: http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_ActionFunctionExtensibility ; with the following signature:

Edm.Boolean OData.CSC.Intersects(Edm.GeographyPolygon,Edm.GeographyPolygon)

3.3.1.6 Query by Attributes

In order that the LTA provides a precise metadata model it is important that each LTA use precisely the same metadata element from the product. [AD-1], [AD-2], [AD-3], [AD-4], [AD-5] provide the definition of the minimum metadata that shall be catalogued for each product, and their origin within the product.

The list of products associated with a particular attribute Name value can be obtained as follows:

https://<service-root-uri>/odata/v1/Products?$filter=Attributes/OData.CSC.ValueTypeAttribute/any(att:att/Name eq '[Attribute.Name]' and att/OData.CSC.ValueTypeAttribute/Value eq '[Attribute.Value]')

Products can also be queried by using a combination of attributes as in the example below:

https://<service-root-uri>/odata/v1/Products?$filter=Attributes/OData.CSC.StringAttribute/any(att:att/Name eq 'productType' and att/OData.CSC.StringAttribute/Value eq 'MSI_L0__GR') and Attributes/OData.CSC.StringAttribute/any(att:att/Name eq 'processorVersion' and att/OData.CSC.StringAttribute/Value eq '02.13')

3.3.1.7 Additional Options

Query functions shall be supported on all properties of the Product 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. 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>/Products?$orderby=PublicationDate desc

Will return a list of products 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 LTA AIP, $top shall accept a maximum value of at least 1000.

For example:

https://<service-root-uri>/Products$top=1000&$filter=startswith(Name,'S2')

Will return the first 1000 Sentinel-2 products currently available on the AIP.

$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>/Products$skip=100&$filter=startswith(Name,'S2')

Will return the all Sentinel-2 products currently available on the LTA AIP, 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>/Products$count=true&$filter=startswith(Name,'S2')

Will return the number of Sentinel-2 products currently available on the AIP

3.3.1.8 Query Products Response

For each product element in the Products List, the full set of properties detailed in Table 1 are provided:

Example (JSON format):

HTTP/1.1 200 OK

{

"@odata.context": "$metadata#Products/$entity",

"value":

[

{

"@odata.mediaContentType": "application/octet-stream",

"Id": "e872683a-ea5b-455d-bfb2-fb304cbfbacb",

"Name": "S1B_IW_SLC__1SDV_20161224T235308_20161224T235335_003545_006104_0DD6.SAFE.zip",

"ContentType": "application/octet-stream",

"ContentLength": 4063869137,

"OriginDate": "2016-12-25T11:43:00.000Z",

"PublicationDate": "2016-12-25T13:18:00.048Z",

"ModificationDate": "2016-12-26T13:02:30.096Z",

"Online": true,

"EvictionDate": "2016-12-28T13:18:00.048Z",

"Checksum":

[

{

"Algorithm": "MD5",

"Value": "E8A303BF3D85200514F727DB60E7DB65",

"ChecksumDate": "2016-01-20T10:34:51.922Z",

}

],

"ContentDate":

{

"Start": "2016-01-17T10:34:51.922Z",

"End": "2016-01-17T10:35:18.872Z"

}

"Footprint": "geography'SRID=4326;Polygon((-41.15749 66.766701,-31.740927 67.629135,-31.479883 66.860405,-40.616844 66.011871,-41.15749 66.766701))'",

"GeoFootprint":{

"type": "Polygon",

"coordinates": [

 [

  [-41.15749, 66.766701],

  [-31.740927, 67.629135],

  [-31.479883, 66.860405],

  [-40.616844, 66.011871],

  [-41.15749, 66.766701]

]

]

}

}

]

}

3.3.2 Catalogue Export

Catalogue data may be exported from the LTA in a compact format for cross-reference with other GS elements. The elements included in the catalogue export are the product properties and attribute properties, and shall be presented in JSON format corresponding to the query:

Products?$expand=Attributes&$format=json

Recognising that this may be a resource consuming query it may be preferred to cache such results in sorted lists of JSON files as routinely updated views e.g. per sensing date or per creation date, whereby exported files are organized in folders according to the following hierarchical structure: 

[SSS]: Satellite Platform short name, 3 characters (e.g. S1A, S2A, …)

[YYYY]: Sensing Year, 4 digits (e.g. 2014, 2015, …)

[MM]: Sensing Month, 2 digits (e.g. 01, 02, …)

The month folder contains the set of exported files. There is a data file for each day of the month.

Each data file lists the products having the same 'sensing start' date. 

The exported file naming convention and format is:

<SSS>_<YYYYMMDD>_<LTA>_<PROV>_catalogue_<yyyymmddhhmmss>.json

where: 

<SSS> 3 characters corresponding to the satellite platform short name S1A, S1B, S2A, etc.

<YYYYMMDD> 8 digits corresponding to the sensing start date of all the products listed in the file

<LTA>_<PROV> 8 characters corresponding to the LTA system (e.g. LTA_WXYZ, where WXYZ represents the LTA instance of the LTA provider)

<yyyymmddhhmmss> 14 digits corresponding to the year, month, day and UTC time of the catalogue snapshot. The products listed in the exported file are those available in the LTA at this date.


3.4 Retrieve Product

The Retrieve Product function allows to trigger the delivery of products from the LTA to the AIP, from where they can subsequently be downloaded. This is illustrated in the sequence diagram below.

Picture 3

Figure 4: Product Retrieval Nominal Sequence

The scenario can be described in the following steps:

-STEP 1 – Product Order

The scenario is initiated by an LTA Client submitting an Order to the LTA service. The LTA Service processes the Order, taking into account the user’s quota and priority applied, and returns a response to the Client containing the unique ID of the Order, the status (at this stage ‘in_progress’), the submission date/time of the Order, the estimated date/time at which the product will be available for download, and the priority of the Order. In the nominal scenario, the Order is accepted and the LTA Service retrieves the product and disseminates to the AIP, an activity which will be queued according to the priority or the order and other orders received (FIFO).

-STEP 2 – Product Download

oALTERNATIVE 1 – Product Staging Notification

Following the delivery of the product to the AIP the Order status is updated to ‘completed’, and the LTA Service sends the Client a Product Download Readiness Notification containing the Product ID of the staged product (and an Eviction Date). The Client is then free to submit a Product Download Request to trigger the download the product, using the Order ID or the Product ID (see section 3.4.2). This option is applicable if an Endpoint URI has been provided as part of the Order Request.

oALTERNATIVE 2 – Order Status Query
At user-defined intervals, the Client requests the status of the Order to the LTA Service. Once the LTA delivers the product to the delivery point the status is updated to ‘completed’, the eviction time is set and the product is available for download from the AIP. The Client may request the product download using the ID of the Order, or ID of the Product (see section 3.4.2).

Regarding products that are already immediately available for download from the LTA AIP (i.e. product property “Online” = “true”) the product retrieval sequence and ordering does not need to be followed. Instead, products can be directly downloaded, given that the ProductId (UUID) is known, following the query described in Section 3.4.2.

3.4.1 Product Order

The order action of the identified product triggers the staging of the data and dissemination to the AIP.

Picture 5

Figure 5: Order Model

Order Properties

Type

M

Description

Example

Id

Guid

Y

It is a universally unique identifier (UUID). The Id is a local identifier for the Order instance within the LTA, assigned upon Order creation.

2b17b57d-fff4-4645-b539-91f305c27c69

Status

JobStatus enumeration

Y

JobStatus value:

-queued

-in_progress

-completed

-failed

-cancelled

Where:

- queued means that the order has been accepted by the LTA Service, but it has not yet been triggered

- in_progress means that the ordered product is being retrieved and disseminated to the AIP

- completed means that that the ordered product was successfully disseminated to the AIP and is available for download

- failed means the retrieval and dissemination of the ordered product has failed

- cancelled means that the order has been cancelled by the user (while in status in_progress)

in_progress

StatusMessage

String

Y

Text message providing additional information on the returned status, e.g. the reason for a failure. Example values are:

If status = ‘queued’:

‘request is queued’

If status = ‘in_progress’:

‘request is under processing’

If status = ‘completed’:

‘requested product is available’

If status = ‘failed’:

‘product retrieval has failed’

‘product currently unavailable’

‘product not found on LTA’

If status = cancelled:

‘request cancelled by user’

requested product is available

OrderSize

Int64

N

Actual size in bytes (B) of the data composing the Order (which would be the ProductSize unless any transformation is performed by the LTA, e.g. band extraction)

Only provided if the order is in status completed

4737286945

SubmissionDate

DateTimeOffset

Y

Date and time at which the order was received by the LTA. Time is in UTC in the format YYYY-MM-DDThh:mm:ss.sssZ

2018-01-17T14:46:03.788Z

EstimatedDate

DateTimeOffset

Y

Estimated date and time when the product will be available for download from the Archive delivery Interface Point. Time is in UTC in the format YYYY-MM-DDThh:mm:ss.sssZ

The EstimatedDate is assigned upon initial order response and is not subsequently updated. The EstimatedDate is assigned on the basis of the retrieval queue when the order is processed (the actual CompletedDate could be impacted by subsequent incoming higher priority orders)

2018-01-22T18:00:00.000Z

CompletedDate

DateTimeOffset

N

Date and time when the product was available for download from the Archive delivery Interface Point. Time is in UTC in the format YYYY-MM-DDThh:mm:ss.sssZ

Only provided if the order is in status completed

2018-01-22T18:00:00.000Z

EvictionDate

DateTimeOffset

N

Date when the Product related to the order will be removed from the Archive delivery Interface Point. Time is in UTC in the format YYYY-MM-DDThh:mm:ss.sssZ

Only provided if the order is in status completed

2018-01-22T18:00:00.000Z

Priority

Int64

Y

Priority of the order. It is an integer from 1-100, where 100 is the highest priority.

There is always a priority associated to an order: if it is not set within the Order Request, then it is automatically set to the default priority assigned to the user. If the Order Request sets a priority higher than the highest priority assigned to the user then it is automatically set at the highest priority assigned.

50

NotificationEndpoint

String

N

URI used by the LTA for product download readiness notifications, should these be required. If not provided, no notifications will be sent.

Any URI, e.g. https://myservice/notification

NotificationEpUsername

String

N

The username associated with the Endpoint URI provided.

Mandatory if Endpoint is provided, and requires authentication.

myserviceuser

NotificationEpPassword

String

N

The password associated with the Endpoint URI provided.

Shall be suitably secured to not be disclosed in subsequent queries via the OData interfaces.

***********

Table 3: Order Entity Description

Example Order Request:

POST \

http://<service-root-uri>/odata/v1/Products(ProductId)/OData.CSC.Order

{

"Priority": 50

}

NB: ‘Priority’ is an optional argument in the order request

Example Order Response:

HTTP/1.1 201 Created

{

"@odata.context": "$metadata#OData.CSC.Order",

"Id": "2b17b57d-fff4-4645-b539-91f305c26x53",

"Status": "in_progress",

"StatusMessage": "request is under processing",

"SubmissionDate": "2019-03-27T13:55:12.390Z",

"EstimatedDate": "2019-03-27T14:02:51.390Z",

"Priority": 50

}

Example Order Status Query:

The following URI will return all Orders with completed status:

https://<service-root-uri>/odata/v1/Orders?$filter=Status eq OData.CSC.JobStatus'completed'

Example Order Status Query Response:

HTTP/1.1 200 OK

{

"@odata.context": "$metadata#Orders",

"value":

[

{

"Id": "2b17b57d-fff4-4645-b539-91f305c26x53",

"Status": "completed",

"StatusMessage": "requested product is available",

"OrderSize": 4737286945,

"SubmissionDate": "2019-03-27T13:55:12.390Z",

"EstimatedDate": "2019-03-27T14:00:00.000Z",

"CompletedDate": "2019-03-27T14:02:51.390Z",

"EvictionDate": "2019-03-30T14:02:51.390Z",

"Priority": 10

}

{

"Id": "5e26g57d-fff4-4645-b539-91f305c72h49",

"Status": "completed",

"StatusMessage": "requested product is available",

"OrderSize": 42562869174,

"SubmissionDate": "2019-03-29T18:12:00.420Z",

"EstimatedDate": "2019-03-29T20:12:00.000Z",

"CompletedDate": "2019-03-29T20:12:18.055Z",

"EvictionDate": "2019-04-01T14:02:51.390Z",

"Priority": 10

}

]

}

3.4.2 Product Download

When the ProductId (UUID) is known and the “Online” product property is “true”, a user can proceed with the product download request directly using the following query:

https://<service-root-uri>/odata/v1/Products(ProductId)/$value

On the other hand, if the product was offline and had to be ordered, once the data are staged the download over the OData API is initiated using the ‘Id’ for the Order. The correct query syntax for the download of a single product is:

https://<service-root-uri>/odata/v1/Orders(OrderId)/Product/$value

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

-200 OK

-202 Accepted (Product is being retrieved as part of an existing order but is not yet online)

-307 Temporary Redirect

-400 Bad Request (Product Id is not known in the LTA)

-404 Not Found (Product is not online)

-401 Unauthorized

-429 Too Many Requests (Quotas are exceeded)

-500 Internal Server Error

http byte range requests on full product 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.5 Bulk Product Retrieve

The Bulk Product Retrieve function allows to trigger the bulk delivery of products from the LTA to the AIP, from where they can subsequently be downloaded. The bulk is defined by a list of products or query filter parameters and a batch size. The LTA is free to determine the order of the listing of products in the batches. The client triggers the staging of the batches using the BatchOrder action trigger. Instead of the standard Product Order, a BatchOrder internally optimizes access to and retrieval from the LTA backend. As a consequence, a BatchOrder is the smallest entity of a Bulk Request.

The sequence diagram below shows the process of a Bulk Request being split by the LTA into BatchOrders, from which products are downloaded following the triggering of a BatchOrder and associated product staging.

Picture 54

Figure 6: Bulk Product Retrieval Nominal Sequence

The nominal scenario can be described in the following steps:

STEP 1 – Bulk Create

The scenario is initiated by an LTA Client submitting a Bulk Create Request to the LTA service. While the standard Order described in Section 3.4.1 is a request for a single existing product from the LTA Service, a Bulk is a request for all existing products stored in an LTA which fulfil a defined set of filter parameters. As such, the Bulk request contains the filter parameters of the order (product types, time range, footprint, etc.), a batch size defining the size of individual BatchOrders making up the Bulk (in values for total batch volume and number of products making up the BatchOrder) and an optional endpoint through which the LTA Client can be notified about product download readiness.

The LTA Service processes the Bulk Create Request, identifying all products fulfilling the Bulk and dividing them into ‘BatcheOrders’. The BatchOrder division depends on the parameters of the initial Bulk Request and any further criteria (e.g. sorting to maximize retrieval efficiency etc.) imposed at LTA Service level, for example the quota available to the user. A confirmation response is sent to the LTA Client, containing the unique identifier of the Bulk, a status (initially created), the filter parameters, the batch size (products and volume), a submission date/time.

STEP 2 – BatchOrder Query and BatchOrder Triggering

The Client performs a query to obtain the list of child BatchOrders making up the Bulk, each containing a unique BatchOrder identifier. Prior to triggering, the BatchOrders are initially in the created status. Using the BatchOrder IDs, the list of products making up each BatchOrder may also be retrieved.

The LTA Client may now trigger individual BatchOrders in the list, via the submission of the unique BatchOrder identifier and, optionally, a priority which applies to the while BatchOrder. Triggering the BatchOrder causes the status to be updated to in_progress and the LTA Service to begin the process of retrieving the child products and disseminating them to the AIP. A confirmation response is sent to the client. The LTA Service organizes the retrieval/dissemination of all products within any particular BatchOrder in a single sequence, without interruption from other requests.

STEP 3 – Product Staging Notification and Product Retrieval

There are two options via which the LTA Client can be made aware of product availability for download:

oALTERNATIVE 1 – Product Staging Notification

Following the staging of every product making up the BatchOrder, the LTA Service sends the Client a Product Download Readiness Notification containing the Product ID of the staged product (and an Eviction Date (TBC)). The Client is then free to submit a product Download Request to trigger the download of each product, using the Product ID (see section 3.4.2). This option is applicable if an Endpoint URI has been provided with the Bulk Create Request.

oALTERNATIVE 2 – BatchOrder Status Query

The Client routinely sends queries requesting the status of the BatchOrders. Once a BatchOrder status is completed, the products have been successfully staged. The Client may then submit a product Download Request to trigger the download of any product within the BatchOrder using the specific Product ID (see section 3.4.2).

The LTA Client can request the status of the Bulk or particular BatchOrder at any time. A completed status for the BatchOrder signifies that all products associated with that particular Batch Order have been successfully staged on the AIP. A completed status for Bulk signifies that all BatchOrders making up the Bulk are themselves in the completed status. However, a completed status for the Bulk does not signify that the products of a specific BatchOrder are still available via the AIP, because although the AIP must be large enough to hold an entire batch of products, it is not required that it can also hold an entire bulk of products. It is the responsibility of the client to employ flow control if bulks are too large by deferring BatchOrders while products are still being downloaded from the AIP.

Picture 11

Figure 7: Bulk & BatchOrder Model

3.5.1 Bulk and BatchOrder Model and Properties

Bulk Properties

Type

M

Description

Example

Id

Guid

Y

It is a universally unique identifier (UUID). The Id is a local identifier for the Bulk instance within the LTA, assigned upon Bulk creation.

2b17b57d-fff4-4645-b539-91f305c27c69

Status

JobStatus enumeration

Y

JobStatus value:

-created

-in_progress

-completed

-failed

-cancelled

Where:

- created means that all child BatchOrders are still themselves in status created

- in_progress means that one of more child BatchOrders are themselves in status in_progress

- completed means that all child BatchOrders are in the status completed

- failed means that one or more child BatchOrders in in status failed

- cancelled means that the Bulk has been cancelled by the user (while in status created or in_progress). If in_progress then any BatchOrders that are in_progress are still completed but further BatchOrders are rejected.

in_progress

StatusMessage

String

Y

Text message providing additional information on the returned status, e.g. the reason for a failure. Example values are:

If status = ‘created’

‘Bulk has been created but no BatchOrders have been triggered’

If status = ‘in_progress’

‘One or more BatchOrders are under processing’

If status = ‘completed’:

‘requested products of all BatchOrders comprising the Bulk are in status ‘completed’’

If status = ‘failed’:

‘at least one product retrieval has failed’

‘at least one product currently unavailable’

‘at least one product not found on LTA’

If status = cancelled:

‘Bulk cancelled by user’

One or more BatchOrders are under processing

FilterParam

String

Y

The filter parameters of the Bulk request (refers to the $filter= parameter of any Products? query)

contains(Name,'_MSI_L0__GR_')and PublicationDate gt 2018-01-17T00:00:00.000Z and PublicationDate lt 2018-01-20T00:00:00.000Z

OrderbyParam

String

N

Optional specification of the sorting order for the products within the batches. This would override any ordering from the LTA and could result in a less efficient Bulk extraction, so should be used only if critical for the organisation of the Bulk (refers to the $orderby= parameter of any Products? query)

PublicationDate desc

BatchsizeProducts

Int64

N

The maximum number of products making up each child BatchOrder making up the Bulk. If this number causes the BatchsizeVolume to be exceeded then the number is limited to that which make up the BatchsizeVolume.

The BatchsizeProducts serves as an optional information of the LTA client to the LTA service. The LTA service shall be eligible to overwrite the value specified by the client.

If not provided, a configurable default LTA BatchsizeProducts value is used.

30

BatchsizeVolume

Int64

N

The maximum volume of each child BatchOrder making up the Bulk, in GiB. This value takes precedence of the BatchsizeProducts value.

The BatchsizeVolume serves as an optional information of the LTA client to the LTA service. The LTA service shall be eligible to overwrite the value specified by the client.

If the value exceeds a configurable default maximum LTA BatchsizeVolume value, then the BatchsizeVolume is limited to this maximum value.

If not provided then the maximum default BatchsizeVolume value is used.

50

SubmissionDate

DateTimeOffset

Y

Date and time at which the bulk request was received by the LTA. Time is in UTC in the format YYYY-MM-DDThh:mm:ss.sssZ

2018-01-17T14:46:03.788Z

CompletedDate

DateTimeOffset

N

Date and time when all child BatchOrders were in status completed. Time is in UTC in the format YYYY-MM-DDThh:mm:ss.sssZ

Only provided when status is completed.

NotificationEndpoint

String

N

URI used by the LTA for product download readiness notifications, should these be required. If not provided, no notifications will be sent.

Any URI, e.g. https://myservice/notification

NotificationEpUsername

String

N

The username associated with the Endpoint URI provided.

Mandatory if Endpoint is provided, and requires authentication.

myserviceuser

NotificationEpPassword

String

N

The password associated with the Endpoint URI provided.

Shall be suitably secured to not be disclosed in subsequent queries via the OData interfaces.

***********

Table 4: Bulk Entity Description

BatchOrder Properties

Type

M

Description

Example

Id

Guid

Y

It is a universally unique identifier (UUID). The Id is a local identifier for the BatchOrder instance within the LTA, assigned upon BatchOrder creation.

2b17b57d-fff4-4645-b539-91f305c27c6982

Status

JobStatus enumeration

Y

JobStatus value:

-queued

-in_progress

-completed

-failed

-cancelled

Where:

- queued means the BatchOrder is queued and has not yet been triggered

- in_progress means that the products making up the BatchOrder are being retrieved and disseminated to the AIP

- completed means that all products making up the BatchOrder were successfully disseminated to the AIP and are available for download

- failed means the retrieval and dissemination of one or more products making up the BatchOrder has failed

- cancelled means that the BatchOrder has been cancelled by the user (while in status queued or in_progress)

in_progress

StatusMessage

String

Y

Text message providing additional information on the returned status, e.g. the reason for a failure. Example values are:

If status = ‘queued’:

‘BatchOrder request is queued’

If status = ‘in_progress’:

‘BatchOrder is under processing’

If status = ‘completed’:

‘requested products of BatchOrder are available’

If status = ‘failed’:

‘at least one product retrieval has failed’

‘at least one product currently unavailable’

‘at least one product not found on LTA’

If status = cancelled:

‘BatchOrder cancelled by user’

requested products of BatchOrder are available

OrderSize

Int64

N

Sum of actual size in bytes (B) of the data of all products making up the BatchOrder.

Only provided if the BatchOrder is in status completed

4737286945

SubmissionDate

DateTimeOffset

N

Date and time at which the BatchOrder was triggered (i.e. changed from status created to status in_progress). No SubmissionDate is provide when the BatchOrder is in status created, or in status cancelled should the BatchOrder have been cancelled before it was triggered.Time is in UTC in the format YYYY-MM-DDThh:mm:ss.sssZ

2018-01-17T14:46:03.788Z

EstimatedDate

DateTimeOffset

N

Estimated date and time when the products making up the BatchOrder will be available for download from the Archive delivery Interface Point. Time is in UTC in the format YYYY-MM-DDThh:mm:ss.sssZ

The EstimatedDate is assigned when the BatchOrder is triggered (it is not provided for status created) and is not subsequently updated. The EstimatedDate is assigned on the basis of the retrieval queue when the BatchOrder is processed (the actual CompletedDate could be impacted by subsequent incoming higher priority orders)

2018-01-22T18:00:00.000Z

CompletedDate

DateTimeOffset

N

Date and time when the products composing the BatchOrder were all available for download from the Archive delivery Interface Point. Time is in UTC in the format YYYY-MM-DDThh:mm:ss.sssZ

Only provided when Status is completed.

2018-01-22T18:00:00.000Z

Priority

Int64

N

Priority of the BatchOrder. It is an integer from 1-100, where 100 is the highest priority.

There is no priority associated with a BatchOrder when it is in status created. In other statuses there is always a priority associated to a BatchOrder: if it is not set within the BatchOrder triggering request, then it is automatically set to the default priority assigned to the user. If the BatchOrder triggering request sets a priority higher than the highest priority assigned to the user then it is automatically set at the highest priority assigned.

10

Table 5: BatchOrder Entity Description

3.5.2 Bulk and BatchOrder Examples

3.5.2.1 Step 1 – Bulk Create

i-i Bulk Create: Example Request:

POST \

http://<service-root-uri>/odata/v1/Bulks

{

"@odata.context": "$metadata#Bulk/$entity",

"FilterParam": "contains(Name,'_MSI_L0__GR_')and PublicationDate gt 2018-01-17T00:00:00.000Z and PublicationDate lt 2018-01-20T00:00:00.000Z",

"BatchsizeProducts": 30,

"BatchsizeVolume": 50,

"NotificationEndpoint": "https://myservice/notification",

"NotificationEpUsername": "myserviceuser",

"NotificationEpPassword": "*********"

}

NB: the example above will trigger Batch Staging Notifications as the optional NotificationEndpoint URL is provided. If not such NotificationEndpoint is provided with the initial Bulk Create request then no Notifications will later be sent.

i-ii Bulk Create: Example Response (JSON format):

HTTP/1.1 201 Created

{

"@odata.context": "$metadata#OData.CSC.Bulk",

"value":

[

{

"Id": "2b17b57d-fff4-4645-b539-91f305c27c69",

"Status": "created",

"StatusMessage”: "Bulk has been created but no BatchOrders have been triggered",

"FilterParam": "contains(Name,'_MSI_L0__GR_')and PublicationDate gt 2018-01-17T00:00:00.000Z and PublicationDate lt 2018-01-20T00:00:00.000Z",

"BatchsizeProducts": 30,

"BatchsizeVolume": 50,

"NotificationEndpoint": "https://myservice/notification",

"SubmissionDate": "2019-05-27T18:25:30.000Z"

}

]

}

3.5.2.2 Step 2 – BatchOrder Query and BatchOrder Triggering

i-i BatchOrders within a Bulk Query: Example Request:

http://<service-root-uri>/odata/v1/Bulks(2b17b57d-fff4-4645-b539-91f305c27c69)/BatchOrders

i-ii BatchOrders within a Bulk Query: Example Response (JSON format):

HTTP/1.1 200 OK

{

"@odata.context": "$metadata#BatchOrder/$entity",

"value":

[

{

"Id": "2b17b57d-fff4-4645-b539-91f305c83z91",

"Status": "in_progress",

"StatusMessage": "BatchOrder is under processing",

"SubmissionDate": "2019-05-27T19:25:30.000Z",

"EstimatedDate": "2019-05-27T19:35:30.000Z",

"Priority": 50

},

{

"Id": "2b17b57d-fff4-4645-b539-91f305c68f44",

"Status": "queued",

"StatusMessage": "BatchOrder request is queued"

}

]

}

ii-i BatchOrder Query: Example Request

http://<service-root-uri>/odata/v1/BatchOrders(2b17b57d-fff4-4645-b539-91f305c27d64)

ii-ii BatchOrder Query: Example Response

HTTP/1.1 200 OK

{

"@odata.context": "$metadata#BatchOrder/$entity",

"value":

[

{

"Id": "2b17b57d-fff4-4645-b539-91f305c83z91",

"Status": "in_progress",

"StatusMessage": "BatchOrder is under processing",

"SubmissionDate": "2019-05-27T19:25:30.000Z",

"EstimatedDate": "2019-05-27T19:35:30.000Z",

"Priority": 50

}

]

}

iii-i BatchOrder Query – Constituent Products: Example Request

http://<service-root-uri>/odata/v1/BatchOrders(2b17b57d-fff4-4645-b539-91f305c27d64)/Products

iii-ii BatchOrder Query – Constituent Products: Example Response (JSON format)

HTTP/1.1 200 OK

{

"@odata.context": "$metadata#Products",

"value":

[

{Product1}

{Product2}

{Product3}

{Product4}

{Product5}

{…}

]

}

See section 3.3.1.8 for the full set product of attributes returned in the response.

iv-i BatchOrder Triggering: Example Request:

BatchOrders are created upon creation of the parent Bulk, but require subsequent triggering to change the status from created to in_progress and trigger the product retrieval and dissemination to the AIP. Optionally, a priority is provided with the triggering request. BatchOrder triggering is achieved as follows:

POST \

http://<service-root-uri>/odata/v1/BatchOrders(2b17b57d-fff4-4645-b539-91f305c27e65)/OData.CSC.BatchOrder

{

"Priority": 10

}

iv-ii Batch Order: Example Response (JSON format):

HTTP/1.1 204 No Content

While the BatchOrder parameters are not provided in the triggering response, it should be noted that a BatchOrder entity will be updated as follows upon triggering:

oThe Status (and corresponding StatusMessage) will be updated from created to in_progress

oA Priority will be included, either corresponding to the priority provided with the triggering request, or the default priority assigned to the user.

oA SubmissionDate will be provided, corresponding to the date/time of the triggering request receipt.

oAn EstimatedDate will be provided.

3.5.2.3 Step 3 – Product Staging Notification and Product Retrieval

i-i BatchOrder Completion Query

If no Endpoint was provided in the Bulk (meaning no Product Staging Notifications will be send), all BatchOrders in completed status (i.e. all child products have been staged) can be retrieved as follows:

http://<service-root-uri>/odata/v1/BatchOrders?$filter=CompletedDate gt 2019-05-28T20:00:00.000Z

i-ii BatchOrder Completion Query Response

HTTP/1.1 200 OK

{

"@odata.context": "$metadata#BatchOrder/$entity",

"value":

[

{

"@odata.context": "$metadata#OData.CSC.Order",

"Id": "2b17b57d-fff4-4645-b539-91f305c27c79",

"Status": "completed",

"StatusMessage": "requested products of BatchOrder are available",

"OrderSize": 24737286691

"SubmissionDate": "2019-05-28T18:12:00.220Z",

"EstimatedDate": "2019-05-28T20:00:00.000Z",

"CompletedDate": "2019-05-28T20:08:51.390Z",

"Priority": 10

}

{

"@odata.context": "$metadata#OData.CSC.Order",

"Id": "2b17b57d-fff4-4645-b539-91f305c27c56",

"Status": "completed",

"StatusMessage": "requested products of BatchOrder are available",

"OrderSize": 34737286945,

"SubmissionDate": "2019-05-28T18:12:00.420Z",

"EstimatedDate": "2019-05-28T20:00:00.000Z",

"CompletedDate": "2019-05-28T20:12:18.055Z",

"Priority": 10

}

]

}

ii Example Product Download Readiness Notification:

POST \

http://myservice/notification

{

"@odata.context": "$metadata#Notification/$entity",

"BatchOrderId": "9e17b57d-fff4-4645-b539-91f305c76g22",

"ProductId": "e872683a-ea5b-455d-bfb2-fb304cbfbacb",

"Name": "S1B_IW_SLC__1SDV_20161224T235308_20161224T235335_003545_006104_0DD6",

"NotificationDate": "2019-05-30T22:18:09.000Z"

}

See Table 7 for details on the Notification entity.


3.6 Subscription

The Subscription function allows for the notification of future products entering the LTA, or products being deleted from it, according to the set of filter parameters supplied within the subscription request. The request can either trigger the staging of all such products (with download readiness notification) or just provide a product availability notification for each product, which may then be optionally ordered.

The sequence diagram below illustrates the subscription process.

Picture 22

Figure 8: Subscription Nominal Sequence

The nominal scenario can be described in the following steps:

STEP 1 – Subscription Create

The scenario is initiated by an LTA Client submitting a create subscription request to the LTA service. The request contains the SubscriptionEvent choice (either created or deleted), filter parameters of the subscription (product types, time range, footprint, etc.), a selection to automatically stage newly created products (true/false) and a NotificationEndpoint to which product availability/download/deletion notifications will be sent. The request is processed by the LTA Service, and a response returned which includes a unique identifier for the particular request, a status (initially running), the filter parameters, the submission date/time of the request and the stage order selection.

STEP 2 – Product Notification and Product Retrieval

Upon future identification of a new product creation or deletion matching the filter parameters of the subscription, the response of the LTA Service depends on whether or not it has been requested to automatically stage the products:

oIf SubscriptionEvent=created & StageOrder=true, the LTA Service triggers the staging of the identified product and dissemination to the AIP and, once this is complete, sends a product download readiness notification to the endpoint provided in the subscription request containing the unique OrderID of the staged product (also updating the Eviction Date within the Order entity). The Client is then free to submit a product Download Request to trigger the download of that product (see section 3.4.2).

oIf SubscriptionEvent=created and StageOrder=false, the LTA service sends a product availability notification to the endpoint provided in the subscription request. The Client is then free to order the retrieval of the product according to the nominal product retrieval scenario (see section 3.4).

oIf SubscriptionEvent=deleted, the LTA service sends a product deletion notification to the endpoint provided in the subscription request.

-A subscription continues to identify products matching the filter parameters until it is paused or cancelled.

-In case the client endpoint is unavailable and the subscription notification fails, there is no retry and the client may need to periodically check any local list of products maintained through a subscription.

-Clients shall be able to query the status of orders initiated from subscriptions.

Picture 25

Figure 9: Subscription Model

Subscription Properties

Type

M

Description

Example

Id

Guid

Y

It is a universally unique identifier (UUID). The Id is a local identifier for the Subscription instance within the LTA, assigned upon Subscription creation.

2b17b57d-fff4-4645-b539-91f305c27e11

Status

SubscriptionStatus enumeration

Y

SubscriptionStatus value:

-running

-paused

-cancelled

running

SubscriptionEvent

SubscriptionEvent enumeration

Y

The subscription event to be monitored and for which notification is provided, from:

-created

-deleted

created

FilterParam

String

Y

The filter parameters of the Subscription (refers to the $filter= parameter of any Products? query)

contains(Name,'_MSI_L0__GR_')and PublicationDate gt 2019-07-01T00:00:00.000Z and PublicationDate lt 2018-09-01T00:00:00.000Z

SubmissionDate

DateTimeOffset

Y

Date and time at which the Subscription was received by the LTA. Time is in UTC in the format YYYY-MM-DDThh:mm:ss.sssZ

2018-01-17T14:46:03.788Z

LastNotificationDate

DateTimeOffset

N

Date and time corresponding to the last time the Subscription was queried. Used by the LTA to limit the next query from the LastNotificationDate to the current date. Time is in UTC in the format YYYY-MM-DDThh:mm:ss.sssZ

Only provided following the initial Subscription query.

2018-02-05T09:00:00.000Z

StageOrder

Boolean

Y

Automatically orders the staging of products fulfilling the subscription filter parameters

Only used if SubscriptionEvent = created

true

Priority

Int64

N

Priority of the created orders resulting from the subscription. It is an integer from 1-100, where 100 is the highest priority.

Only provided if:

- SubscriptionEvent = created

AND

- the Subscription has stageOrder=true

There is always a priority associated to an order: if it is not set within the Subscription Create Request, then it is automatically set to the default priority assigned to the user. If the Subscription Create Request sets a priority higher than the highest priority assigned to the user then it is automatically set at the highest priority assigned.

10

NotificationEndpoint

String

Y

URI used by the LTA for subscription notifications

Any URI, e.g. https://myservice/notification

NotificationEpUsername

String

N

The username associated with the Endpoint URI provided

Mandatory if NotificationEndpoint requires authentication

myserviceuser

NotificationEpPassword

String

N

The password associated with the Endpoint URI provided

Mandatory if NotificationEndpoint requires authentication

***********

Table 6: Subscription Entity Description

Notification Properties

Type

M

Description

Example

ProductId

Guid

Y

The universally unique identifier (UUID) of the product being notified. Maps to Product.Id

2b17b57d-fff4-4645-b539-91f305c27c69

ProductName

String

Y

The data file name of the product being notified. Maps to Product.Name

S1A_IW_SLC__1SDV_ 20160117T103451_ 20160117T103518_ 009533_ 00DD94_D46A.SAFE.zip

SubscriptionId

Guid

N

The UUID of the Subscription being notified. Maps to Subscription.Id

Mandatory for Subscription Notifications; not provided for Batch Order Notifications

2b17b57d-fff4-4645-b539-91f305c27e11

OrderId

Guid

N

The UUID of the order being notified. Maps to Order.Id

Only provided for Subscription notifications if:

- SubscriptionEvent = created

AND

- the Subscription has StageOrder=true

Not provided for BatchOrder notifications

2b17b57d-fff4-4645-b539-91f305c54x22

BatchOrderId

Guid

N

The UUID of the BatchOrder being notified. Maps to BatchOrder.Id

Not provided for Subscription Notifications; mandatory for BatchOrder notifications

5b17b57d-fff4-4645-b539-91f305c54x33

SubscriptionEvent

SubscriptionEvent enumeration

N

The subscription event set in the parent subscription to be monitored and for which notification is provided, from:

-created

-deleted

Mandatory for Subscription Notifications; not provided for Batch Order Notifications

created

NotifictionDate

DateTimeOffset

Y

Date and time at which the notification was generated. Time is in UTC in the format YYYY-MM-DDThh:mm:ss.sssZ

2019-02-05T09:00:00.000Z

Table 7: Notification Entity Description

i-i Subscription Create: Example Request:

POST \

http://<service-root-uri>/odata/v1/Subscriptions

{

"@odata.context": "$metadata#Subscription/$entity",

"FilterParam": "contains(Name,'_MSI_L0__GR_')and PublicationDate gt 2019-07-01T00:00:00.000Z and PublicationDate lt 2019-09-01T00:00:00.000Z",

"StageOrder": true,

"Priority": 10,

"NotificationEndpoint": "https://myservice/notification",

"NotificationEpUsername": "myserviceuser",

"NotificationEpPassword": "**********"

}

i-ii Subscription Create: Example Response (JSON format):

HTTP/1.1 201 Created

{

"@odata.context": "$metadata#OData.CSC.Subscription",

"Id": "2b17b57d-fff4-4645-b539-91f305c27e11",

"Status": "running",

"FilterParam": "contains(Name,'_MSI_L0__GR_')and PublciationDate gt 2019-07-01T00:00:00.000Z and PublicationDate lt 2019-09-01T00:00:00.000Z",

"StageOrder": true,

"Priority": 10,

"SubmissionDate": "2019-05-27T18:25:30.000Z",

"Endpoint": "https://myservice/notification"

}

ii-i Example Subscription Notification: Product Download Readiness:

POST \

http://myservice/notification

{

"@odata.context": "$metadata#Notification/$entity",

"SubscriptionEvent": "created",

"ProductId": "e872683a-ea5b-455d-bfb2-fb304cbfbacb",

"ProductName": "S1B_IW_SLC__1SDV_20161224T235308_20161224T235335_003545_006104_0DD6",

"OrderId": "9e17b57d-fff4-4645-b539-91f305c76g22",

"SubscriptionId": "2b17b57d-fff4-4645-b539-91f305c27e11",

"NotificationDate": "2019-05-30T22:18:09.000Z"

}

ii-ii Example Subscription Notification: Product Availability:

POST \

http://myservice/notification

{

"@odata.context": "$metadata#Notification/$entity",

"SubscriptionEvent": "created",

"ProductId": "e872683a-ea5b-455d-bfb2-fb304cbfbacb",

"ProductName": "S1B_IW_SLC__1SDV_20161224T235308_20161224T235335_003545_006104_0DD6",

"SubscriptionId": "2b17b57d-fff4-4645-b539-91f305c27e11",

"NotificationDate": "2019-05-30T22:18:09.000Z"

}

ii-iii Example Subscription Notification: Product Deletion:

POST \

http://myservice/notification

{

"@odata.context": "$metadata#Notification/$entity",

"SubscriptionEvent": "deleted",

"ProductId": "e872683a-ea5b-455d-bfb2-fb304cbfbacb",

"ProductName": "S1B_IW_SLC__1SDV_20161224T235308_20161224T235335_003545_006104_0DD6",

"SubscriptionId": "2b17b57d-fff4-4645-b539-91f305c27e11",

"NotificationDate": "2019-05-30T22:18:09.000Z"

}

iii-i Subscription StageOrder Query: Example Request

http://<service-root-uri>/odata/v1/Subscription(‘2b17b57d-fff4-4645-b539-91f305c27c69’)/Orders

iii-ii Subscription StageOrder Query: Example Response

{

"@odata.context": "$metadata#Orders",

"value":

[

{

"Id": "2b17b57d-fff4-4645-b539-91f305c26x53",

"Status": "completed",

"StatusMessage”: ”requested product is available”,

"OrderSize”: 4737286945,

"SubmissionDate”: ”2019-03-27T13:55:12.390Z”,

"CompletedDate”: ”2019-03-27T14:02:51.390Z”,

"EvictionDate”: ”2019-03-30T14:02:51.390Z”,

"Priority": 10

}

{

"Id": "5e26g57d-fff4-4645-b539-91f305c72h49",

"Status": "in_progress",

"StatusMessage": "request is under processing",

"OrderSize": 42562869174,

"SubmissionDate": "2019-03-29T18:12:00.420Z",

"EstimatedDate": "2019-03-29T20:12:18.055Z",

"Priority": 10

}

]

}


3.7 Traceability Interface

The LTA service interfaces with the Traceability System [AD-7] to verify the origin of any data before ingestion and provide its own traceability record once the data is ingested, retrieved or deleted.

3.8 User Administration

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

3.8.1 Basic LTA User Entity Model

Figure 10: User Entity Model

The LTA User entity is a read-write entity that allows to define the system role of the user. It is identified by the key property Username. The properties assigned to each User entity are described in the table below:

User Properties

Type

M

Description

Example

Username (key)

String

Y

Username of the User

DataDissem4CollGSHub

Email

String

Y

Email of the User

datahubops@xyz.com

Created

DateTimeOffset

Y

Date and time of User creation

ServiceAlias

String

Y

Generic string to describe the client

DataAccessColhub

DefaultPriority

Int64

Y

The default order priority assigned to the User. It is an integer from 1-100, where 100 is the highest priority.

50

MaxPriority

Int64

Y

The maximum priority which can be assigned to an order by the User. It is an integer from 1-100, where 100 is the highest priority.

It must be equal to or higher than the DefaultPriority

100

Table 8: User Entity Description

Usernames associated email are to be managed as generic indicators of client and not personal information.

The ServiceAlias value can be identical to the Username, unless indicated otherwise by the Agency.

The SystemRole sub-entity, which is defined for registered Users, is described in the sections below.

3.8.1.1 SystemRole

The SystemRole entity describes the rights and capabilities granted to a user. The properties of the SystemRole entity are described in the table below:

SystemRole Properties

Type

M

Description

Example

Name (key)

RoleType enumeration

Y

Assignment of the rights and capabilities granted to a user, including:

-Order

-Bulk

-Reporting

-Download

Bulk

Description

String

Y

Textual description of the role

Allowing the user to make bulk requests

Table 9: SystemRole Entity Description

All registered clients must have one or more roles assigned. The roles available for assignment to clients may be:

Client Services

-Order The client may perform queries on the products stored within the LTA, place orders for product retrieval and create subscriptions. Users are only able to query the orders and subscriptions they themselves have created.

-Bulk – As above, and additionally able to place Bulk product retrieval requests, and query them.

Administration Services

-(Monitoring &) Reporting – Monitoring and Reporting functionality, including the permission to perform queries on all Orders, Subscriptions and Bulks which have been created by all users of the LTA.

3.8.2 Quota

User quota is assigned on a per user basis. Quota is assigned and applied to downloads for all users but may also be separately assigned applied to Orders or BatchOrders for users with the ‘Order’ or ‘Bulk’ SystemRole respectively. Therefore, users may be assigned the ‘OrderQuota’, ‘BatchOrderQuota’ and ‘DownloadQuota’, as shown below. ‘OrderQuota’/’BatchOrderQuota’ and ‘DownloadQuota’ are not linked: they are applied separately and independently at the order and download stages respectively. The quotas are not mutually exclusive and multiple or none may be assigned.

Order Quota (applicable to users with the ‘Order’ SystemRole)

-TotalOrdersQuota: Maximum number of authorized Orders which can be made in a defined period

-ParallelOrdersQuota: Maximum number of separate Orders with status ‘in_progress’ which can be running in parallel.

BatchOrder Quota (applicable to users with the ‘Bulk’ SystemRole)

-TotalBatchOrdersQuota: Maximum number of authorized BatchOrders which can be triggered in a defined period

-ParallelBatchOrdersQuota: Maximum number of separate BatchOrders with status ‘in_progress’ which can be running in parallel.

Download Quota (only applicable to users with the ‘Order’ and/or ‘Bulk’ SystemRole)

-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 Order/BatchOrder or Download request at a later date.

NB: if an Order or BatchOrder is not yet in in_progress status, it may be cancelled without impact on the Order quota.

3.9 Monitoring and Reporting

The Monitoring and Reporting role allows for the collection of data, for analysis and reporting, of LTA system activity through API queries on all Products, Orders, Subscriptions and Bulks managed by the system. When used for the reporting function the API allows the collection of data concerning the overall use of the system by registered users; used for the monitoring function the API allows to regularly collect information concerning indicators which may be used to assess whether the routine operation of the system is running within the expected bounds, such as the ingestion rate of products.

The parameters obtained for Monitoring and Reporting through the API, with example requests, are detailed in the sections below.

3.9.1 Reporting

The table below provides a possible schema for routine collection of reporting information, example queries are developed further. The time period is indicative, depending on the strategy for end-to-end monitoring and reporting.

System Entity

Reporting Statistic

Time Period

Entity Parameters Collected

Products

Products ingested, including latency for ingestion (PublicationDate-OriginDate)

10 minutes

- Count

- Name

- ContentLength (Product size)

- OriginDate

- PublicationDate

- ContentDate/Start

Orders

Orders submitted

10 minutes

- Count

- Username

- Id (Order)

- OrderSize

- SubmissionDate

- Product.Name

Orders completed and time for completion

10 minutes

- Count

- Username

- Id (Order)

- SubmissionDate

- CompletedDate

- Product.Name

Orders failed

10 minutes

- Count

- Username

- Id (Order)

- SubmissionDate

- Product.Name

Orders cancelled

10 minutes

- Count

- Username

- Id (Order)

- SubmissionDate

- Product.Name

Orders pending for over 1 day

10 minutes

- Count

- Username

- Id (Order)

- SubmissionDate

- Product.Name

Bulk

Bulks submitted

10 minutes

- Count

- Username

- Id (Bulk)

Bulks completed

10 minutes

- Count

- Username

- Id (Bulk)

Bulks failed

10 minutes

- Count

- Username

- Id (Bulk)

BatchOrder

BatchOrders submitted (triggered)

10 minutes

- Count

- Username

- Id (BatchOrder)

BatchOrders completed

10 minutes

- Count

- Username

- Id (BatchOrder)

BatchOrders failed

10 minutes

- Count

- Username

- Id (BatchOrder)

Subscriptions

Subscription in status running (total)

10 minutes

- Count

Subscriptions submitted (daily)

10 minutes

- Count

- Username

- Id (Subscription)

Table 10: LTA Reporting Statistics

Examples of the queries used to retrieve the described statistics are presented below. Descriptions are limited to a single entity and can straightforwardly be modified to the other entities reported on where necessary.

i Products published per day

The $count notation is used to return the total products published in a particular day, and the $select notation to select the product properties to be returned.

i-i Request

https://<service-root-uri>/odata/v1/Products?$count=true&$filter=PublicationDate gt 2019-01-17T00:00:00.000Z and PublicationDate lt 2019-01-18T00:00:00.000Z&$select=Name,ContentLength,OriginDate,PublicationDate,ContentDate/Start

i-ii Response (JSON format)

In the example, the count of products returned has been limited to two.

HTTP/1.1 200 OK

{

"@odata.context": "$metadata#Products/$entity",

"@odata.count": 2,

"value":

[

{

"@odata.mediaContentType": "application/octet-stream",

"Name": "S1B_IW_SLC__1SDV_20161224T235308_20161224T235335_003545_006104_0DD6",

"ContentType": "application/octet-stream",

"ContentLength": 4063869137,

"OriginDate": "2019-01-17T07:22:00.165Z",

"PublicationDate": "2019-01-17T09:18:00.048Z",

"ContentDate":

{

"Start": "2019-01-17T05:30:00.060Z"

}

}

{

"@odata.mediaContentType": "application/octet-stream",

"Name": "S1B_IW_SLC__1SDV_20191224T235516_20191224T235892_003545_006104_0DP9",

"ContentType": "application/octet-stream",

"ContentLength": 4423569265,

"OriginDate": "2019-01-17T08:01:02.306Z",

"PublicationDate": "2019-01-17T10:25:00.066Z",

"ContentDate":

{

"Start": "2019-01-17T08:34:51.922Z"

}

}

]

}

ii Orders Submitted per day

The $expand notation is used to return the required properties of the Product and User entities related to each Order matching the filter criteria.

ii-i Request

https://<service-root-uri>/odata/v1/Orders?$count=true&$filter=SubmissionDate gt 2019-01-17T00:00:00.000Z and SubmissionDate lt 2019-01-18T00:00:00.000Z&$select=Id,OrderSize,SubmissionDate&$expand=Products($select=Name),Users($select=Username)

i--ii Response (JSON format)

HTTP/1.1 200 OK

{

"@odata.context": "$metadata#Orders/$entity",

"@odata.count": 1,

"value":

[

{

"@odata.context": "$metadata#OData.CSC.Order",

"Id": "2b17b57d-fff4-4645-b539-91f305c27c43",

"OrderSize": 4737286945,

"SubmissionDate": "2019-01-17T13:55:12.390Z",

"Products":

[

{

"@odata.mediaContentType": "application/octet-stream",

"Name": "S1B_IW_SLC__1SDV_20161224T235308_20161224T235335_003545_006104_0DD6"

}

]

"Users":

[

{

"@odata.mediaContentType": "application/octet-stream",

"Username": "jroberts12"

}

]

}

]

}

iii Orders in status ‘completed’ per day and time of completion

iii-i Request

https://<service-root-uri>/odata/v1/Orders?$count=true&$filter=CompletedDate gt 2019-01-17T00:00:00.000Z and CompletedDate lt 2019-01-18T00:00:00.000Z &$select=Id,SubmissionDate,CompletedDate$expand=Products($select=Name),Users($select=Username)

iii-ii Response (JSON format)

HTTP/1.1 200 OK

{

"@odata.context": "$metadata#Orders/$entity",

"@odata.count": 1,

"value":

[

{

"@odata.context": "$metadata#OData.CSC.Order",

"Id": "2b17b57d-f ff4-4645-b539-91f305c27c12",

"SubmissionDate": "2019-01-17T13:55:12.390Z",

"CompletedDate": "2019-01-17T15:02:22.561Z",

"Products":

[

{

"@odata.mediaContentType": "application/octet-stream",

"Name": "S1B_IW_SLC__1SDV_20161224T235308_20161224T235335_003545_006104_0DD6"

}

]

"Users":

[

{

"@odata.mediaContentType": "application/octet-stream",

"Username": "jroberts12"

}

]

}

]

}

iv Orders Pending for over 1 Day

Checks for all Orders which have a Submission date prior to the start of the reporting query day and a status still in_progress.

iv-i Request

https://<service-root-uri>/odata/v1/Orders?$count=true&$filter=SubmissionDate lt 2019-01-17T00:00:00.000Z and Status eq OData.CSC.Order.JobStatus'in_progress'&$select=Id,SubmissionDate $expand=Products($select=Name),Users($select=Username)

iv-ii Response

HTTP/1.1 200 OK

{

"@odata.context": "$metadata#Orders/$entity",

"@odata.count": 1,

"value":

[

{

"@odata.context": "$metadata#OData.CSC.Order",

"Id": "2b17b57d-fff4-4645-b539-91f305c27c99",

"OrderSize": 4737286945,

"SubmissionDate": "2019-01-15T22:25:33.491Z",

"Products":

[

{

"@odata.mediaContentType": "application/octet-stream",

"Name": "S1B_IW_SLC__1SDV_20161224T235308_20161224T235335_003545_006104_0DD6"

}

]

"Users":

[

{

"@odata.mediaContentType": "application/octet-stream",

"Username": "jroberts12"

}

]

}

]

}

Download Reporting

Due to the flexibility inherent with the download via byte ranges the download reporting may be managed through the summary reporting outlined below.

3.9.2 LTA Metrics

The high-level statistics listed below are those which shall be made available by the LTA 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. The following OData Metrics Entity provides the metrics at a reporting frequency outlined in Table 11.

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)

Counter

Int64

Value of Counter at reporting timestamp

(mandatory if MetricType=Counter)

Metric

Description

Type

Frequency

Archived.<productType>.<platformShortName>.<platformSerialIdentifier>.size

Cumulative volume of <productType> of mission <platformShortName>.<platformSerialIdentifier> in archive in Bytes

Counter

10 minute update

Archived.<productType>.<platformShortName>.<platformSerialIdentifier>.count

Cumulative number of <productType> of mission <platformShortName>.<platformSerialIdentifier> in archive

Counter

10 minute update

Archived.<platformShortName>.<platformSerialIdentifier>.size

Total cumulative volume of data in archive for <platformShortName> <platformSerialIdentifier>.

Counter

Hourly update

Archived.<platformShortName>.<platformSerialIdentifier>.count

Total cumulative number of products in archive for <platformShortName> <platformSerialIdentifier>.

Counter

Hourly update

Retrieved.<productType>.<platformShortName>.<platformSerialIdentifier>.size

Cumulative volume of <productType> of mission <platformShortName>.<platformSerialIdentifier> ordered and delivered to archive interface point in Bytes

Counter

10 minute update

Retrieved.<productType>.<platformShortName>.<platformSerialIdentifier>.completed

Cumulative number of <productType> of mission <platformShortName>.<platformSerialIdentifier> ordered and delivered to archive interface point

Counter

10 minute update

Retrieved.<productType>.<platformShortName>.<platformSerialIdentifier>.failed

Cumulative number of <productType> of mission <platformShortName>.<platformSerialIdentifier> ordered and failed to be delivered to archive interface point

Counter

10 minute update

Download.<productType>.<platformShortName>.<platformSerialIdentifier>.<ServiceAlias>.completed

Cumulative number of <productType> of mission <platformShortName>.<platformSerialIdentifier> downloads completed (by <ServiceAlias>)

Counter

10 minute update

Download.<productType>.<platformShortName>.<platformSerialIdentifier>.<ServiceAlias>.failed

Cumulative number of <productType> of mission <platformShortName>.<platformSerialIdentifier> downloads failed (by <ServiceAlias>)

Counter

10 minute update

Download.<productType>.<platformShortName>.<platformSerialIdentifier>.<SerivceAlias>.size

Cumulative size of <productType> of mission <platformShortName>.<platformSerialIdentifier> downloaded (by <ServiceAlias>) in Bytes

Counter

10 minute update

OriginToPublication.Daily.min.time.<productType>.<platformShortName>.<platformSerialIdentifier>

Daily minimum time difference in seconds between PRIP PublicationDate and LTA PublicationDate of <productType> of mission <platformShortName>.<platformSerialIdentifier> (sliding window of 24 hours)

Gauge

10 minute update

OriginToPublication.Daily.max.time.<productType>.<platformShortName>.<platformSerialIdentifier>

Daily maximum time difference in seconds between PRIP PublicationDate and LTA PublicationDate of <productType> of mission <platformShortName>.<platformSerialIdentifier> (sliding window of 24 hours)

Gauge

10 minute update

OriginToPublication.Daily.avg.time.<productType>.<platformShortName>.<platformSerialIdentifier>

Daily average time difference in seconds between PRIP PublicationDate and LTA PublicationDate of <productType> of mission <platformShortName>.<platformSerialIdentifier> (sliding window of 24 hours)

Gauge

10 minute update

OriginToPublication.Monthly.min.time.<productType>.<platformShortName>.<platformSerialIdentifier>

Monthly minimum time difference in seconds between PRIP PublicationDate and LTA PublicationDate of <productType> of mission <platformShortName>.<platformSerialIdentifier> (sliding window of last month)

Gauge

Hourly update

OriginToPublication.Monthly.max.time.<productType>.<platformShortName>.<platformSerialIdentifier>

Monthly maximum time difference in seconds between PRIP PublicationDate and LTA PublicationDate of <productType> of mission <platformShortName>.<platformSerialIdentifier> (sliding window of last month)

Gauge

Hourly update

OriginToPublication.Monthly.avg.time.<productType>.<platformShortName>.<platformSerialIdentifier>

Monthly average time difference in seconds between PRIP PublicationDate and LTA PublicationDate of <productType> of mission <platformShortName>.<platformSerialIdentifier> (sliding window of last month)

Gauge

Hourly update

SubmissionToCompletion.Daily.min.time

Minimum time from order submission to delivery on archive interface point (sliding window of 24 hours)

Gauge

10 minute update

SubmissionToCompletion.Daily.max.time

Maximum time from order submission to delivery on archive interface point (sliding window of 24 hours)

Gauge

10 minute update

SubmissionToCompletion.Daily.avg.time

Average time from order submission to delivery on archive interface point (sliding window of 24 hours)

Gauge

10 minute update

SubmissionToCompletion.Monthly.min.time

Minimum time from order submission to delivery on archive interface point (sliding window of last month)

Gauge

Hourly update

SubmissionToCompletion.Monthly.max.time

Maximum time from order submission to delivery on archive interface point (sliding window of last month)

Gauge

Hourly update

SubmissionToCompletion.Monthly.avg.time

Average time from order submission to delivery on archive interface point (sliding window of last month)

Gauge

Hourly update

Service.<KPI>.value

KPI value

Gauge

Table 11: LTA Summary Reporting Statistics

N.B. Service Alias is based on the user information.

3.10 LTA Event Recording

The LTA uses the Event Entity for recording information on events which have taken place or are planned to take place in the future. The precise scope will include, for example, planned unavailabilities of the LTA due to service or infrastructure maintenance and unplanned availabilities due to e.g. network issues.

The Event entity model and properties are described in the subsection below.

3.10.1 Event Entity Model

Picture 51

Figure 11: Event Entity Model

Event Properties

Type

M

Description

Example

Id

Guid

Y

It is a universally unique identifier (UUID). The Id is a local identifier for the Event instance within the LTA, assigned upon creation of the Event.

2b17b57d-fff4-4645-b539-91f305c27c69

Title

String

Y

Title of the event (concise summary)

Network Incident on the LTA Infrastructure (27 - 29 May 2019)

Description

String

Y

Description of the Event

The network incident that occurred on the LTA Service on 27 May 2019, causing a degradation of the product staging and retrieval services, was resolved on 29 May 2019, at 02:00 UTC.

EventCategory

EventCategory Enumeration

Y

Chosen from a predefined list of categories (single selection available):

-Service Maintenance

-Infrastructure Maintenance

-Network

-AIP

-TBD

Service Maintenance

EventDate

Time Range

Y

The Event range period. Time is in UTC in the format YYYY-MM-DDThh:mm:ss.sssZ

"EventDate":

{

"Start":"2019-05-29T10:34:51.922Z",

"End":"2019-05-29T12:35:18.872Z"

}

PublicationDate

DateTimeOffset

Y

Publication date and time of the Event entity. Time is in UTC in the format YYYY-MM-DDThh:mm:ss.sssZ

2018-01-17T14:46:03.788Z

ModificationDate

DateTimeOffset

N

Last modification date and time of the Event entity. Time is in UTC in the format YYYY-MM-DDThh:mm:ss.sssZ

2018-01-19T18:00:00.000Z

DistributionScope

DistributionScope Enumeration

N

This field is relevant only for events concerning the Service availability. Chosen from a predefined list of Data Access entities (multiple selection available):

-Long Term Archive

-Data Access

-Systematic Processing

-On-Demand Processing

Long Term Archive

InformationUrl

String

N

External link to the information within the anomaly tracking

Any URI

Table 13: Event Entity Description

4 ANNEX 1: OData Metadata Description

<?xml version="1.0"?>

<edmx:Edmx Version="4.0">

<edmx:DataServices>

<Schema Namespace="OData.CSC">

<EnumType Name="SubscriptionEvent" IsFlags="false" UnderlyingType="Edm.Int32">

<Member Name="created" Value="0"/>

<Member Name="deleted" Value="1"/>

</EnumType>

<EnumType Name="JobStatus" IsFlags="false" UnderlyingType="Edm.Int32">

<Member Name="created" Value="0"/>

<Member Name="queued" Value="1"/>

<Member Name="in_progress" Value="2"/>

<Member Name="completed" Value="3"/>

<Member Name="failed" Value="4"/>

<Member Name="cancelled" Value="5"/>

</EnumType>

<EnumType Name="EventCategory" IsFlags="false" UnderlyingType="Edm.Int32">

<Member Name="Service Maintenance" Value="0"/>

<Member Name="Infrastructure Maintenance" Value="1"/>

<Member Name="Network" Value="2"/>

<Member Name="AIP" Value="3"/>

</EnumType>

<EnumType Name="DistributionScope" IsFlags="false" UnderlyingType="Edm.Int32">

<Member Name="Long Term Archive" Value="0"/>

<Member Name="Data Access" Value="1"/>

<Member Name="Systematic Processing" Value="2"/>

<Member Name="On-Demand Processing" Value="3"/>

</EnumType>

<EnumType Name="SubscriptionStatus" IsFlags="false" UnderlyingType="Edm.Int32">

<Member Name="running" Value="0"/>

<Member Name="paused" Value="1"/>

<Member Name="cancelled" Value="2"/>

</EnumType>

<EnumType Name="EnumType" IsFlags="false" UnderlyingType="Edm.Int32">

<Member Name="Gauge" Value="0"/>

<Member Name="Counter" Value="1"/>

</EnumType>

<Function Name="Intersects" IsBound="true">
<Parameter Name="product" Type="OData.CSC.Product"/>
<Parameter Name="area" Type="Edm.Geography"/>
<ReturnType Type="Collection(OData.CSC.Product)"/>
</Function>

<EntityType Name="Bulk">

<Key>

<PropertyRef Name="Id"/>

</Key>

<Property Name="Id" Type="Edm.Guid"/>

<Property Name="Status" Type="OData.CSC.JobStatus"/>

<Property Name="StatusMessage" Type="Edm.String"/>

<Property Name="FilterParam" Type="Edm.String"/>

<Property Name="OrderbyParam" Type="Edm.String"/>

<Property Name="BatchsizeProducts" Type="Edm.Int64"/>

<Property Name="BatchsizeVolume" Type="Edm.Int64"/>

<Property Name="SubmissionDate" Type="Edm.DateTimeOffset" Precision="3"/>

<Property Name="CompletedDate" Type="Edm.DateTimeOffset" Precision="3"/>

<NavigationProperty Name="BatchOrders" Type="Collection(OData.CSC.BatchOrder)"/>

<NavigationProperty Name="Products" Type="Collection(OData.CSC.Product)"/>

</EntityType>

<EntityType Name="Event">

<Key>

<PropertyRef Name="Id"/>

</Key>

<Property Name="Id" Type="Edm.Guid"/>

<Property Name="Title" Type="Edm.String"/>

<Property Name="Description" Type="Edm.String"/>

<Property Name="EventCategory" Type="OData.CSC.EventCategory"/>

<Property Name="DistributionScope" Type="OData.CSC.DistributionScope"/>

<Property Name="EventDate" Type="OData.CSC.TimeRange"/>

<Property Name="PublicationDate" Type="Edm.DateTimeOffset" Precision="3"/>

<Property Name="ModificationDate" Type="Edm.DateTimeOffset" Precision="3"/>

<Property Name="InformationUrl" Type="Edm.String"/>

<NavigationProperty Name="Products" Type="Collection(OData.CSC.Product)"/>

</EntityType>

<EntityType Name="StringAttribute" BaseType="OData.CSC.Attribute">

<Property Name="Value" Type="Edm.String"/>

</EntityType>

<EntityType Name="IntegerAttribute" BaseType="OData.CSC.Attribute">

<Property Name="Value" Type="Edm.Int64"/>

</EntityType>

<EntityType Name="DateTimeOffsetAttribute" BaseType="OData.CSC.Attribute">

<Property Name="Value" Type="Edm.DateTimeOffset"/>

</EntityType>

<EntityType Name="DoubleAttribute" BaseType="OData.CSC.Attribute">

<Property Name="Value" Type="Edm.Double"/>

</EntityType>

</EntityType>

<EntityType Name="BooleanAttribute" BaseType="OData.CSC.Attribute">

<Property Name="Value" Type="Edm.Boolean"/>

</EntityType>

<EntityType Name="Order">

<Key>

<PropertyRef Name="Id"/>

</Key>

<Property Name="Id" Type="Edm.Guid"/>

<Property Name="Status" Type="OData.CSC.JobStatus"/>

<Property Name="StatusMessage" Type="Edm.String"/>

<Property Name="OrderSize" Type="Edm.Int64"/>

<Property Name="SubmissionDate" Type="Edm.DateTimeOffset"/>

<Property Name="EstimatedDate" Type="Edm.DateTimeOffset"/>

<Property Name="CompletedDate" Type="Edm.DateTimeOffset"/>

<Property Name="EvictionDate" Type="Edm.DateTimeOffset"/>

<Property Name="Priority" Type="Edm.Int64"/>

<NavigationProperty Name="Product" Type="OData.CSC.Product"/>

</EntityType>

<EntityType Name="Subscription">

<Key>

<PropertyRef Name="Id"/>

</Key>

<Property Name="Id" Type="Edm.Guid"/>

<Property Name="Status" Type="OData.CSC.SubscriptionStatus"/>

<Property Name="SubscriptionEvent" Type="OData.CSC.SubscriptionEvent"/>

<Property Name="FilterParam" Type="Edm.String"/>

<Property Name="Priority" Type="Edm.Int64"/>

<Property Name="SubmissionDate" Type="Edm.DateTimeOffset" Precision="3"/>

<Property Name="LastNotificationDate" Type="Edm.DateTimeOffset" Precision="3"/>

<Property Name="StageOrder" Type="Edm.Boolean"/>

</EntityType>

<EntityType Name="Product" HasStream="true">

<Key>

<PropertyRef Name="Id"/>

</Key>

<Property Name="Id" Type="Edm.Guid"/>

<Property Name="Name" Type="Edm.String"/>

<Property Name="ContentType" Type="Edm.String"/>

<Property Name="ContentLength" Type="Edm.Int64"/>

<Property Name="OriginDate" Type="Edm.DateTimeOffset" Precision="3"/>

<Property Name="PublicationDate" Type="Edm.DateTimeOffset" Precision="3"/>

<Property Name="ModificationDate" Type="Edm.DateTimeOffset" Precision="3"/>

<Property Name="Online" Type="Edm.Boolean"/>

<Property Name="EvictionDate" Type="Edm.DateTimeOffset" Precision="3"/>

<Property Name="Checksum" Type="Collection(OData.CSC.Checksum)"/>

<Property Name="ContentDate" Type="OData.CSC.TimeRange"/>

<Property Name="Footprint" Type="Edm.Geography"/>

<Property Name="GeoFootprint" Type="Edm.Geography"/>

<NavigationProperty Name="Attributes" Type="Collection(OData.CSC.Attribute)"/>

</EntityType>

<EntityType Name="BatchOrder">

<Key>

<PropertyRef Name="Id"/>

</Key>

<Property Name="Id" Type="Edm.Guid"/>

<Property Name="Status" Type="OData.CSC.JobStatus"/>

<Property Name="StatusMessage" Type="Edm.String"/>

<Property Name="OrderSize" Type="Edm.Int64"/>

<Property Name="Priority" Type="Edm.Int64"/>

<Property Name="SubmissionDate" Type="Edm.DateTimeOffset" Precision="3"/>

<Property Name="CompletedDate" Type="Edm.DateTimeOffset" Precision="3"/>

<Property Name="EstimatedDate" Type="Edm.DateTimeOffset" Precision="3"/>

<NavigationProperty Name="Products" Type="Collection(OData.CSC.Product)"/>

</EntityType>

<EntityType Name="Attribute" Abstract="true">

<Key>

<PropertyRef Name="Name"/>

</Key>

<Property Name="Name" Type="Edm.String"/>

<Property Name="ValueType" Type="Edm.String"/>

</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>

<ComplexType Name="TimeRange">

<Property Name="Start" Type="Edm.DateTimeOffset" Nullable="false" Precision="6"/>

<Property Name="End" Type="Edm.DateTimeOffset" Nullable="false" Precision="6"/>

</ComplexType>

<ComplexType Name="Checksum">

<Property Name="Algorithm" Type="Edm.String" Nullable="false"/>

<Property Name="Value" Type="Edm.String" Nullable="false"/>

<Property Name="ChecksumDate" Type="Edm.DateTimeOffset"/>

</ComplexType>

<ComplexType Name="Property">

<Property Name="Name" Type="Edm.String" Nullable="false"/>

<Property Name="Value" Type="Edm.String" Nullable="false"/>

</ComplexType>

<Action Name="Pause" IsBound="true">

<Parameter Name="Subscription" Type="OData.CSC.Subscription" Nullable="false"/>

</Action>

<Action Name="Order" IsBound="true">

<Parameter Name="Product" Type="OData.CSC.Product" Nullable="false"/>

<Parameter Name="Priority" Type="Edm.Int32"/>

<Parameter Name="NotificationEndpoint" Type="Edm.String"/>

<Parameter Name="NotificationEpUsername" Type="Edm.String"/>

<Parameter Name="NotificationEpPassword" Type="Edm.String"/>

<ReturnType Type="OData.CSC.Order"/>

</Action>

<Action Name="BatchOrder" IsBound="true">

<Parameter Name="BatchOrder" Type="OData.CSC.BatchOrder" Nullable="false"/>

<Parameter Name="Priority" Type="Edm.Int32"/>

<ReturnType Type="OData.CSC.BatchOrder"/>

</Action>

<Action Name="FilterList" IsBound="true">

<Parameter Name="FilterProducts" Type="Collection(OData.CSC.Product)" Nullable="false"/>

<ReturnType Type="Collection(OData.CSC.Product)"/>

</Action>

<Action Name="Resume" IsBound="true">

<Parameter Name="Subscription" Type="OData.CSC.Subscription" Nullable="false"/>

<ReturnType Type="OData.CSC.Subscription"/>

</Action>

<Action Name="Cancel" IsBound="true">

<Parameter Name="Order" Type="OData.CSC.Order" Nullable="false"/>

<ReturnType Type="OData.CSC.Order"/>

</Action>

<Action Name="Cancel" IsBound="true">

<Parameter Name="Bulk" Type="OData.CSC.Bulk" Nullable="false"/>

<ReturnType Type="OData.CSC.Bulk"/>

</Action>

<Action Name="Cancel" IsBound="true">

<Parameter Name="BatchOrder" Type="OData.CSC.BatchOrder" Nullable="false"/>

<ReturnType Type="OData.CSC.BatchOrder"/>

</Action>

<Action Name="Cancel" IsBound="true">

<Parameter Name="Subscription" Type="OData.CSC.Subscription" Nullable="false"/>

<ReturnType Type="OData.CSC.Subscription"/>

</Action>

<EntityContainer Name="Container">

<EntitySet Name="Orders" EntityType="OData.CSC.Order">

<NavigationPropertyBinding Path="Product" Target="Products"/>

<NavigationPropertyBinding Path="User" Target="Users"/>

</EntitySet>

<EntitySet Name="Products" EntityType="OData.CSC.Product">

<NavigationPropertyBinding Path="Attributes" Target="Attributes"/>

</EntitySet>

<EntitySet Name="Subscriptions" EntityType="OData.CSC.Subscription">

<NavigationPropertyBinding Path="User" Target="Users"/>

</EntitySet>

<EntitySet Name="Attributes" EntityType="OData.CSC.Attribute" IncludeInServiceDocument="false"/>

<EntitySet Name="Events" EntityType="OData.CSC.Event"/>

<EntitySet Name="Bulks" EntityType="OData.CSC.Bulk">

<NavigationPropertyBinding Path="BatchOrders" Target="BatchOrders"/>

<NavigationPropertyBinding Path="Products" Target="Products"/>

<NavigationPropertyBinding Path="User" Target="Users"/>

</EntitySet>

<EntitySet Name="BatchOrders" EntityType="OData.CSC.BatchOrder">

<NavigationPropertyBinding Path="Products" Target="Products"/>

<NavigationPropertyBinding Path="User" Target="Users"/>

</EntitySet>

<EntitySet Name="StringAttributes" EntityType="OData.CSC.StringAttribute" IncludeInServiceDocument="false"/>

<EntitySet Name="IntegerAttributes" EntityType="OData.CSC.IntegerAttribute" IncludeInServiceDocument="false"/>

<EntitySet Name="DoubleAttributes" EntityType="OData.CSC.DoubleAttribute" IncludeInServiceDocument="false"/>

<EntitySet Name="BooleanAttributes" EntityType="OData.CSC.BooleanAttribute" IncludeInServiceDocument="false"/>

<EntitySet Name="DateTimeOffsetAttributes" EntityType="OData.CSC.DateTimeOffsetAttribute" IncludeInServiceDocument="false"/>

<EntitySet Name="Metrics" EntityType="OData.CSC.Metric"/>

</EntityContainer>

</Schema>

</edmx:DataServices>

</edmx:Edmx>


5 ANNEX 2: Compliance Test Suites

The present Annex provides details of the compliance test suites for the ICD. The test suites are provided as a set of OData requests to be sent to the AIP.

The current implementation of the test suites is designed to test the minimum and extended capabilities of the AIP, and are implemented as Postman (https://www.getpostman.com/ ) Collections JSON files (format v2.1). These are provided as accompanying external files: LTA-ICD_MinimumCompliance.json and LTA-ICD_ExtendedCompliance.json.

5.1 LTA Minimum Compliance Test Suite Instructions

1)Import the Postman Collection

2)Add an LTA Minimum Compliance environment

3)Add service-root-uri, username and password variables according to AIP configuration, as shown below.

Picture 17

5.1.1 Product Listing Query

Inside the LTA minimum compliance folder the first test query issues a basic product listing to the AIP. As with all tests Basic Authentication is assumed, and the username/password are set according to the variables established in the environment. The test is initiated by sending the request to the AIP and success is indicated in the Test tab as pass or fail.

Picture 18

The tests performed on the Product Listing Query are formulated to verify the OData context of the response, to verify that minimum set of metadata have been catalogued for the archived product and to set the variables for one of the products returned to be used in subsequent tests.

Picture 26

5.1.2 Product Query By Name

The second test query introduces the filter syntax, and queries for a product by name according to the variables set in the previous test.

Picture 30

The test verifies that a single result is returned with the correct name.

5.1.3 Product Query By Sensing Date

The third test introduces the query by sensing date.

Picture 31

Whereas the test checks that at least one Product is returned, manual inspection should be used to confirm that results outside the time period submitted in the query are not returned.

5.1.4 Product Details

The fourth test checks that the product can be referenced via its ID and outputs the current status offline/online to the console

Picture 32

5.1.5 Product Order

Assuming the product is offline (Online=false) the fifth test orders the product, triggering it’s delivery to the AIP for download. The test confirms that an order is made and provided an ID.

Picture 34

The test in step 5.1.4 may be repeated to verify when the data is online (Online=true) and ready for download.

5.1.6 Product Download

The sixth step tests the product download. Due to limitations in managing large file download in Postman the download request is made for only the first 1024 bytes of data. Therefore a 206 Partial Content HTTP response code is expected.

Picture 40

5.2 LTA Extended Compliance Test Suite Instructions

1)Import the Postman Collection

2)Add an LTA Extended Compliance environment

3)Add service-root-uri, username and password variables according to AIP configuration, as shown below.

The LTA Extended Compliance Test Suite, includes the Minimum Compliance Test Suite and comes with additional queries for testing the AIP.

5.2.1 Product Listing Query

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

The tests performed on the Product Listing Query are formulated to verify the OData context of the response, to verify that minimum set of metadata have been catalogued for the archived product and to set the variables for one of the products returned to be used in subsequent tests.

Picture 43

5.2.2 Product Query By Name

The second test query introduces the filter syntax, and queries for a product by name according to the variables set in the previous test.

Picture 44

The test verifies that a single result is returned with the correct name.

5.2.3 Product Query By Sensing Date

The third test introduces the query by sensing date.

Picture 59

Whereas the test checks that at least one Product is returned, manual inspection should be used to confirm that results outside the time period submitted in the query are not returned.

5.2.4 Product Query By Publication Date

The fourth test concerns the query by publication date.

Picture 60

The test checks that at least one Product is returned. However, the Publication Date period shall cover at least part of, or the full ingestion period in the LTA. This will result in the query returning multiple products. Manual inspection should be used to confirm that results outside the time period submitted in the query are not returned.

5.2.5 Product Query By Geographic Criteria

The fifth test introduces the query by geographic criteria and queries for products intersecting a polygon consisting of several geographical points.

Picture 6

The test checks that at least one Product is returned. However, since the polygon chosen for this test represents almost the entire geographical coverage of Europe, multiple products are expected to be returned.

5.2.6 Product Details

The sixth test checks that the product can be referenced via its ID and outputs the current status offline/online to the console.

Picture 62

5.2.7 Product Order

Assuming the product is offline (Online=false) the seventh test orders the product, triggering its delivery to the AIP for download. The test confirms that an order is made and provided with an ID.

Picture 11

The test in step 5.1.4 may be repeated to verify when the data is online (Online=true) and ready for download.

5.2.8 Product Download by ProductId

The eighth step tests the product download using the ProductId. Due to limitations in managing large file download in Postman the download request is made for only the first 1024 bytes of data. Therefore a 206 Partial Content HTTP response code is expected.

Picture 65

5.2.9 Product Download by OrderId

The ninth step tests the product download using the OrderId, returned in the Product Order Query (Test #7). Due to limitations in managing large file download in Postman the download request is made for only the first 1024 bytes of data. Therefore a 206 Partial Content HTTP response code is expected.

Picture 66

5.2.10 Order List Query

This test introduces the Orders listing query and should return the list of completed Orders. It is also intended to verify the OData context of the response.

Picture 4

5.2.11 Product Attributes Expand Query

This query is aimed at listing a Product’s Attributes. The test verifies the OData context of the response as well as testing that the main common Product Attributes are returned.

Picture 2

5.2.12 Product Query By Attributes

The last tests introduce the query by Attributes. Attributes are mapped to metadata as described in [AD-1], [AD-2], [AD-3], [AD-4], [AD-5]. Queries can be performed on several individual attributes or combinations of attributes. The test suite only contains a subset of the attributes described in [AD-1], [AD-2], [AD-3], [AD-4], [AD-5], in particular:

Query by instrumentShortName

Query by operationalMode

Query by orbitNumber

Query by processingDate

Query by productGroupId

Query by datastripId

Query by tileId

Query by qualityStatus

Query by cloudCover

Query by productClass

Query by timeliness

Query by combining productType and processorVersion Attributes

Query by combining platformShortName & platformSerialIdentifier Attributes

These tests verify that at least one (in several cases, at least 2) products are returned. In addition to this, some Attributes Queries tests verify that the products returned conform to the request made, through checking the content of the response body (e.g. the returned filename). Where the information requested is not a part of the filename, manual inspection should be performed in order to confirm that the returned products conform to the input attributes.

Picture 68

Note: In addition to the individual tests performed for each query, there are tests that verify the response time for all queries, except for the Product Download Queries (5.2.8 and 5.2.9), where the response time may vary significantly depending on certain factors (e.g. product size, retrieval time, etc.).

Contents

Scroll to Top