Objectives
- 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:
This table focuses on product properties that should be exposed by AIP instances and that are not currently backed by STAC Core or extensions.
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
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
Queries
text in red relates to requirements not supported by the OGC API- Processes standard
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 |
JobStatus value correspondance
Odata status | OGC API - Processes status |
---|---|
queued | accepted |
in_progress | running |
completed | successful |
failed | failed |
cancelled | dismissed |
Process definition
Below is a process definition for a "ProductOrder" process
{ "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" } ] }
Bulk Product Retrieve
The bulk is defined by a list of products or query filter parameters and a batch size
1st level assumption: not "as is" in the OGC standard.
Ideas :
- Create a specific Process for "Bulk Create Request".
- query filter parameters : the process parameters == filters
- list of products : one parameter as a list of product IDs
- BatchOrder List Request : is the result of the "Bulk Create Request" Process
- Create a specific Process for "BatchOrder trigger"
Good to simplify the current way to do bulk (many batch orders to trigger !!)
Trigger all the batches automatically
→ 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
2 Comments
Olivier Gaquiere
Olivier Gaquiere
Retrieval API : analyze if it can be described with OGC API Processes
Analyze also novelties brought by next version of OGC API Processes (1.1, 2.0)
Add Comment