...
- to have a first version of ICD before Summer time and share with LTA service providers to gather first comments
- to present LTA ICD during the next checkpoint (September or October)
AIP Functions - Overview
LTA Function | Covered by |
---|---|
Query Products | STAC API (see STAC Requirements and Recommendations for EOF Services) |
Catalog Exports | export STAC catalogue into Geoparquet as a specific process ? not public endpoint |
Product Order | Processes API (see Product Order) |
Product Download | STAC API (Use STAC item asset hrefs to download products?) |
Bulk Product Order | Processes API with several defined processes |
Subscriptions | new OGC Pub/Sub standard ??? feedback from CDSE to see |
Query Product
The following presentation contains a short gap analysis regarding STAC and the AIP of the LTA service:
...
Property Name | Possible values / Example | Common | Comment | Proposed solution |
---|---|---|---|---|
Online |
| to be stated in the ICD : Offline : item with no assets Online : item with assets | Order extension field order:status:
Propose extension for estimated_date ?? | |
Product Order
Anchor | ||||
---|---|---|---|---|
|
Figure: Product Retrieval Nominal Sequence
API
LTA Client Use Case | Operation | Request | Response |
---|---|---|---|
Submit Product Order | POST /processes/ProductOrder/execution | Header:
Body:
| Header:
Body:
|
Get Order Status | GET /jobs/{jobId} | Body: job-status | |
Get Order Result | GET /jobs/{jobId}/results | Body: job-result | |
Cancel Order | DELETE /jobs/{jobId} | Body: job-status | |
List processes | GET /processes | Body: process-list | |
Describe Product Order process | GET /processes/ProductOrder | Body: process-description |
Data Model Mapping from OData API to Processes API
OData Field | Processes API Field | Description | Mapping to Processing API objects | |||
---|---|---|---|---|---|---|
process-description | process-execute-request | job-status | job-result | |||
Id | product_id | REQUIRED. Product name without file extension. Shall we use the product URL instead which also contains the collection identifier? | $.inputs.product_id | $.inputs.product_id | ||
Priority | priority | 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. | $.inputs.priority | $.inputs.priority and $.outputs.priority | ||
OrderSize | order_size | Actual size in bytes 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/job is in status "successful". | $.outputs.order_size | $.outputs.order_size | $.order_size | |
EvictionDate | eviction_date | Date when the Product related to the order will be removed from the Archive delivery Interface Point. Only provided if the order/job is in status "successful". | $.outputs.eviction_date | $.outputs.eviction_date | $.eviction_date | |
NotificationEndpoint | successUri | URI used by the LTA for product download readiness notifications, should these be required. If not provided, no notifications will be sent. | $.subscriber.successUri | |||
inProgressUri | URI used by the LTA for notifications to indicate updates in the progress of the order. If not provided, no notifications will be sent. | $.subscriber.inProgressUri | ||||
failedUri | URI used by the LTA for notifications indicating that the product retrieval failed. If not provided, no notifications will be sent. | $.subscriber.failedUri | ||||
NotificationEpUsername | ? | CDSE feedback ?? | ||||
NotificationEpPassword | ? | |||||
Status | status | Current status of the job. One of: "accepted" "running" "successful" "failed" "dismissed" | $.status | |||
StatusMessage | message | More detailed status message | $.message | |||
SubmissionDate | created | Date and time at which the order was received by the LTA. Formatted as ISO8601 string. | $.created | |||
EstimatedDate | ? | |||||
CompletedDate | finished | Date and time when the product was available for download from the Archive delivery Interface Point. Formatted as ISO8601 string. | $.finished | |||
N/A | id | Identifier of the process. Always "ProductOrder" | $.id | |||
N/A | version | Version of the process | $.version | |||
N/A | title | A narrative description of the process | $.title | |||
N/A | description | Detailed description of the process | $.description | |||
N/A | keywords | List of keywords that can be associated with the process | $.keywords | |||
N/A | jobControlOptions | List of options that indicates whether the process can be invoked synchronously, asynchronously, or either. One or more of: "sync-execute" "async-execute" "dismiss" | $.jobContolOptions | |||
N/A | outputTransmission | List of specifications that indicates how the results of a process are retrieved; either by value or by reference. One of: "value" "reference" | $.outputTransmission |
Retrieval functions
Retrieve Product
...
Call from LTA Client | "OGC API - Processes" operation | Details | Response of query | OGC reference link |
---|---|---|---|---|
Product Order Request | /processes/{ProcessID}/execution | Query type : POST ProcessID = ProductRetrieve Input parameters :
| Response by default :
Mandatory information not supported by the standard :
| |
Order Status Query | /jobs/{JobID} | Query type : GET JobID = ID returned by the execute query | Status of Job :
Information not supported by the standard :
| https://docs.ogc.org/is/18-062r2/18-062r2.html#toc47 |
List completed jobs (NEW) | /jobs | Query type : GET Parameters:
| List of completed Jobs with their ID and following parameters :
Information not supported by the standard :
| |
Get result of Order query (NEW) | /jobs/{JobID}/results | Query type : GET JobID = ID returned by the execute query Returns a JSON response with output parameters set for the completed order | A process result will contain the following information :
| |
Product Staging Notification | Callback mechanism for completed jobs : requires to add a subscriber property in the order request (notification endpoint) | To assess : authorisation for callback | https://docs.ogc.org/is/18-062r2/18-062r2.html#toc52 | |
Retrieve process description (NEW) | /processes/{ProcessID} | Query type : GET ProcessID = ProductRetrieve | Response depending on the process definition (see below) | https://docs.ogc.org/is/18-062r2/18-062r2.html#toc35 |
...
Below is a process definition for a "ProductRetrieveProductOrder" process
Code Block |
---|
{ "id": "ProductRetrieve", "title": "Order LTA for product retrieving", "description": "This asynchronous process specifies one product to retrieve from LTA, through its identifier", "version": "1.0.0", "jobControlOptions": [ "async-execute" ], "outputTransmission": [ "value" ], "inputs": { "ProductId": { "title": "Product identifier", "description": "Identifier of the product to retrieve", "minOccurs": 1, "maxOccurs": 1, "schema": { "type": "string" } }, "Priority": { "title": "Order priority", "description": "Priority of the order. It is an integer from 1-100,", "minOccurs": 0, "maxOccurs": 1, "schema": { "type": "integer", "minimum": 1, "maximum": 100 } } }, "outputs": { "ProductLink": { "schema": { "type": "string" } }, "EvictionDate": { "schema": { "type": "string", "format": "dateTime" } }, "OrderSize": { "schema": { "type": "integer" } } }, "response": "document", "links": [ { "href": "https://lta.ordering.copernicus.eu/processes/ProductRetrieve/execution", "rel": "http://www.opengis.net/def/rel/ogc/1.0/execute", "title": "Execute endpoint" } ] } |
...
→ offer the user to automatically execute the batch orders or not (as a parameter of "Bulk Create Request")
Links
Compliance tests
https://cite.ogc.org/teamengine/about/ogcapi-processes-1.0/1.0/site/
https://github.com/opengeospatial/teamengine
Reference
https://github.com/opengeospatial/ogcapi-processes?tab=readme-ov-file