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 FunctionCovered by
Query ProductsSTAC API (see STAC Requirements and Recommendations for EOF Services)
Catalog Exportsexport STAC catalogue into Geoparquet as a specific process ?
not public endpoint
Product OrderProcesses API (see Product Order)
Product DownloadSTAC API (Use STAC item asset hrefs to download products?)
Bulk Product OrderProcesses API with several defined processes
Subscriptionsnew 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:

STAC-AIP-Gap-Analysis.pptx


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 NamePossible values / ExampleCommonCommentProposed solution
Online
  • true
  • false



to be stated in the ICD : 

Offline : item with no assets

Online : item with assets

Order extension field order:status:

  • orderable=Offline
  • succeeded=Online


Propose extension for estimated_date ??






Product Order

  

Figure: Product Retrieval Nominal Sequence

API

LTA Client Use CaseOperationRequestResponse
Submit Product OrderPOST /processes/ProductOrder/execution

Header:

  • Prefer=respond-async

Body:

  • process-execute-request

Header:

  • Location=JobStatusURL

Body:

  • job-status
Get Order StatusGET /jobs/{jobId}
Body: job-status
Get Order ResultGET /jobs/{jobId}/results
Body: job-result
Cancel OrderDELETE /jobs/{jobId}
Body: job-status
List processesGET /processes
Body: process-list
Describe Product Order processGET /processes/ProductOrder
Body: process-description

Data Model Mapping from OData API to Processes API

OData Field

Processes API Field

DescriptionMapping to Processing API objects



process-description

process-execute-request

job-status

job-result

Idproduct_idREQUIRED. Product name without file extension. Shall we use the product URL instead which also contains the collection identifier?$.inputs.product_id$.inputs.product_id

PrioritypriorityPriority 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



OrderSizeorder_sizeActual 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
EvictionDateeviction_dateDate 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
NotificationEndpointsuccessUriURI used by the LTA for product download readiness notifications, should these be required. If not provided, no notifications will be sent.
$.subscriber.successUri


inProgressUriURI 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


failedUriURI 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?




Statusstatus

Current status of the job.  One of: "accepted" "running" "successful" "failed" "dismissed" 



$.status
StatusMessagemessageMore detailed status message

$.message
SubmissionDatecreatedDate and time at which the order was received by the LTA. Formatted as ISO8601 string.

$.created
EstimatedDate?




CompletedDatefinishedDate and time when the product was available for download from the Archive delivery Interface Point. Formatted as ISO8601 string.

$.finished
N/AidIdentifier of the process. Always "ProductOrder"$.id


N/AversionVersion of the process$.version


N/AtitleA narrative description of the process$.title


N/AdescriptionDetailed description of the process$.description


N/AkeywordsList of keywords that can be associated with the process$.keywords


N/AjobControlOptionsList 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/AoutputTransmissionList 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" operationDetails Response of queryOGC reference link
Product Order Request

/processes/{ProcessID}/execution

Query type : POST

ProcessID = ProductRetrieve

Input parameters

  • product_identifier
  • priority
  • collection_identifier (???)

Response by default :

  • jobID → ID of the Order
  • status (value set to "accepted") → Status 
  • type (value set to "process")
  • message → StatusMessage
  • created → SubmissionDate

Mandatory information not supported by the standard : 

  • EstimatedDate (as a STAC attribute or with finished ?)
  • Priority

https://docs.ogc.org/is/18-062r2/18-062r2.html#toc32

Order Status Query




/jobs/{JobID}

Query type : GET

JobID = ID returned by the execute query

Status of Job : 

  • jobID → ID of the Order
  • status → Status
  • message → StatusMessage
  • started
  • finished → CompletedDate (if status is "successful") 

Information not supported by the standard : 

  • OrderSize
  • EvictionDate

https://docs.ogc.org/is/18-062r2/18-062r2.html#toc47



List completed jobs

(NEW)

/jobs

Query type : GET

Parameters:

  • processID (should be "ProductRetrieve")
  • status (should be "successful" for completed orders)
  • datetime (filter on "SubmissionDate")


List of completed Jobs with their ID and following parameters : 

  • jobID → ID of the Order
  • status (value set to "successful") → Status
  • message → StatusMessage
  • finished → CompletedDate

Information not supported by the standard : 

  • OrderSize
  • EvictionDate

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 : 

  • OrderSize
  • EvictionDate
  • ProductLink (optional & not in the current ICD)

https://docs.ogc.org/is/18-062r2/18-062r2.html#toc34

Product Staging NotificationCallback 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 statusOGC API - Processes status

queued

accepted
in_progressrunning
completedsuccessful
failedfailed
cancelleddismissed

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") 

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 


  • No labels

2 Comments

  1. STAC-AIP-Gap-Analysis.pptx
    STAC published and unpublished properties belongs to timestamps extension. They are note described in common metadata 
    1. You are not logged in. Any changes you make will be marked as anonymous. You may want to Log In if you already have an account.
  2. 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)