Administra operaciones de larga duración

En esta página, se describe cómo administrar el ciclo de vida de una operación de larga duración de la API de Cloud Healthcare.

Las operaciones de larga duración (LRO) se muestran cuando las llamadas a un método pueden tardar mucho tiempo en completarse. La API de Cloud Healthcare crea LRO para varios métodos. Un ejemplo es el método para crear un conjunto de datos, projects.locations.datasets.create. Cuando se llama a projects.locations.datasets.create, la API de Cloud Healthcare crea una LRO para realizar un seguimiento del estado de creación del conjunto de datos. La API de Cloud Healthcare proporciona las API de operaciones que te permiten verificar el estado de las LRO. También puedes enumerar las LRO.

Las LRO se administran a nivel del conjunto de datos. Si llamas a un método que muestra una LRO, como projects.locations.datasets.dicomStores.import, para ver el estado de la LRO, realiza una solicitud al conjunto de datos superior del almacén DICOM.

Además de la API de REST, las siguientes fuentes generan operaciones de larga duración cuando llamas a los métodos enumerados en Métodos que muestran una operación de larga duración:

Puedes administrar tus LRO de la API de Cloud Healthcare mediante Google Cloud Console, la herramienta de línea de comandos de gcloud o la API de REST.

Ten en cuenta que el registro de una LRO se conserva aproximadamente 30 días después de que esta finaliza, lo que significa que no puedes ver ni enumerar una LRO después de ese punto.

Métodos que muestran una operación de larga duración

Los siguientes métodos muestran una LRO:

Operaciones del conjunto de datos:

Operaciones DICOM:

Operaciones FHIR:

Obtén detalles sobre una operación de larga duración

En los siguientes ejemplos, se muestra cómo obtener detalles sobre una LRO.

Ten en cuenta que la versión de la API de Cloud Healthcare que se muestra en la respuesta cuando se obtienen detalles sobre una LRO será la misma que la versión de la API del método que inició la LRO.

Console

Después de llamar a un método mediante la herramienta gcloud o la API que muestra un LRO, puedes ver los detalles sobre el LRO en Cloud Console.

  1. En Cloud Console, ve a la página Conjuntos de datos.

    Ir a la página Conjuntos de datos

  2. Haz clic en el nombre del conjunto de datos que contiene la operación de larga duración que deseas ver.
  3. Haz clic en Operaciones.

Se muestra una lista de las LRO del conjunto de datos y su estado. Para ver los registros de errores en Cloud Logging, haz clic en el ícono de más información en la última columna y, luego, en Ver detalles en Stackdriver. Para obtener más información, consulta Visualiza los registros de errores en Cloud Logging.

gcloud

El siguiente ejemplo funciona con la versión v1beta1 de la API de Cloud Healthcare.

Supongamos que recibes la siguiente respuesta después de llamar a gcloud beta healthcare datasets deidentify:

Request issued for: [DATASET_ID]
Waiting for operation [OPERATION_ID] to complete...

La respuesta muestra que la API de Cloud Healthcare creó una LRO con un ID de operación. El comando continúa ejecutándose hasta que finaliza, momento en el que genera lo siguiente:

Request issued for: [DATASET_ID]
Waiting for operation [OPERATION_ID] to complete...done
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID

Para obtener detalles sobre una LRO, ejecuta el comando gcloud beta healthcare operations describe y especifica el ID del conjunto de datos y el ID de la operación.

gcloud beta healthcare operations describe OPERATION_ID --dataset=DATASET_ID

También puedes recuperar el ID de la operación si enumeras las operaciones de larga duración de la base de datos.

Si la solicitud se realiza correctamente, el símbolo del sistema muestra los detalles de la operación.

done: true
metadata:
'@type': type.googleapis.com/google.cloud.healthcare.v1beta1.OperationMetadata
apiMethodName: google.cloud.healthcare.v1beta1.dataset.DatasetService.DeidentifyDataset
createTime: '2019-01-01T00:00:00Z'
endTime: '2019-01-01T00:00:00Z'
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID
response:
'@type': type.googleapis.com/google.cloud.healthcare.v1beta1.dataset.DeidentifySummary

API

Para obtener el estado y ver los detalles de una LRO, usa el método projects.locations.datasets.operations.get.

Comando curl

Para obtener detalles sobre una LRO, realiza una solicitud GET y proporciona el nombre del conjunto de datos, el ID de la operación y un token de acceso.

Supongamos que recibes la siguiente respuesta después de llamar a projects.locations.datasets.deidentify:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

El valor name en la respuesta muestra que la API de Cloud Healthcare creó una LRO llamada projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID.

En el siguiente ejemplo, se muestra cómo usar una solicitud GET para obtener detalles sobre una LRO mediante curl.

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

También puedes recuperar el nombre de la LRO si enumeras las operaciones de larga duración de la base de datos.

Si la solicitud tiene éxito, se mostrará la respuesta en formato JSON en el servidor. Cuando finaliza una LRO, el campo done se establece en true.

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}

Para sondear una LRO, invoca repetidamente el método projects.locations.datasets.operations.get hasta que finalice la operación. Usa una retirada entre cada solicitud de sondeo, por ejemplo, 10 segundos.

PowerShell

Para obtener detalles sobre una LRO, realiza una solicitud GET y proporciona el nombre del conjunto de datos, el ID de la operación y un token de acceso.

Supongamos que recibes la siguiente respuesta después de llamar a projects.locations.datasets.deidentify:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

El valor name en la respuesta muestra que la API de Cloud Healthcare creó una LRO llamada projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID.

En el siguiente ejemplo, se muestra cómo usar una solicitud GET para obtener detalles sobre una LRO mediante Windows PowerShell.

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

También puedes recuperar el nombre de la LRO si enumeras las operaciones de larga duración de la base de datos.

Si la solicitud tiene éxito, se mostrará la respuesta en formato JSON en el servidor. Cuando finaliza una LRO, el campo done se establece en true.

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}

Para sondear una LRO, invoca repetidamente el método projects.locations.datasets.operations.get hasta que finalice la operación. Usa una retirada entre cada solicitud de sondeo, por ejemplo, 10 segundos.

Enumera las operaciones de larga duración

En los siguientes ejemplos, se muestra cómo enumerar las operaciones de larga duración en un conjunto de datos.

Console

Después de llamar a métodos mediante la herramienta de gcloud o la API que muestra una LRO, puedes ver una lista de LRO en Cloud Console.

  1. En Cloud Console, ve a la página Conjuntos de datos.

    Ir a la página Conjuntos de datos

  2. Haz clic en el nombre del conjunto de datos que contiene la operación de larga duración que deseas ver.
  3. Haz clic en Operaciones.

Se muestra una lista de las LRO del conjunto de datos y su estado. Para ver los registros de errores en Cloud Logging, haz clic en el ícono de más información en la última columna y, luego, en Ver detalles en Stackdriver. Para obtener más información, consulta Visualiza los registros de errores en Cloud Logging.

gcloud

El siguiente ejemplo funciona con la versión v1beta1 de la API de Cloud Healthcare.

Para enumerar los LRO en un conjunto de datos, ejecuta el comando gcloud beta healthcare operations list.

gcloud beta healthcare operations list \
  --dataset=DATASET_ID \
  --location=LOCATION

Si la solicitud se realiza correctamente, el símbolo del sistema enumera las LRO:

ID                    LOCATION     DONE
OPERATION_ID          LOCATION       {TRUE|FALSE}
...

API

Para enumerar los LRO en un conjunto de datos, usa el método projects.locations.datasets.operations.list.

Comando curl

Para enumerar las LRO en un conjunto de datos, realiza una solicitud GET y proporciona el nombre del conjunto de datos y un token de acceso. En el siguiente ejemplo, se muestra una solicitud GET mediante curl.

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations"

Si la solicitud tiene éxito, se mostrará la respuesta en formato JSON en el servidor:

{
  "operations": [
    {
      "name": "PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
        "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
        "createTime": "CREATE_TIME",
        "endTime": "END_TIME",
        "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
      },
      "done": true,
      "response": {
        "@type": "...",
        "successStoreCount": "SUCCESS_STORE_COUNT"
      }
    },
    ...
  ]
}

PowerShell

Para enumerar las LRO en un conjunto de datos, realiza una solicitud GET y proporciona el nombre del conjunto de datos y un token de acceso. En el siguiente ejemplo, se muestra una solicitud GET mediante Windows PowerShell.

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations" | Select-Object -Expand Content

Si la solicitud tiene éxito, se mostrará la respuesta en formato JSON en el servidor:

{
  "operations": [
    {
      "name": "PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
        "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
        "createTime": "CREATE_TIME",
        "endTime": "END_TIME",
        "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
      },
      "done": true,
      "response": {
        "@type": "...",
        "successStoreCount": "SUCCESS_STORE_COUNT"
      }
    },
    ...
  ]
}

Cancela operaciones de larga duración

En los siguientes ejemplos, se muestra cómo cancelar una LRO en un conjunto de datos.

Console

Después de llamar a un método con la herramienta gcloud o la API que muestra un LRO, puedes cancelarlo en Cloud Console mientras se está procesando.

  1. En Cloud Console, ve a la página Conjuntos de datos.

    Ir a la página Conjuntos de datos

  2. Haz clic en el nombre del conjunto de datos que contiene la operación de larga duración que deseas cancelar.
  3. Haz clic en Operaciones.
  4. Para la LRO relevante, selecciona Detener operación en el menú de más información de la última columna.

API

Para cancelar las LRO de un conjunto de datos, usa el método projects.locations.datasets.operations.cancel.

Comando curl

Para cancelar una LRO en un conjunto de datos, realiza una solicitud POST y especifica la siguiente información:

  • El nombre del conjunto de datos
  • Un token de acceso
  • El ID de la operación
  • El parámetro cancel:

En el siguiente ejemplo, se muestra una solicitud POST mediante curl.

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID:cancel"

Para ver el estado de una solicitud de cancelación, realiza una solicitud GET y especifica la siguiente información:

  • El nombre del conjunto de datos
  • Un token de acceso
  • El ID de la operación

En el siguiente ejemplo, se muestra una solicitud GET mediante curl.

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

Si la solicitud tiene éxito, se mostrará la respuesta en formato JSON en el servidor:

{
  "name": "PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "API_METHOD_NAME",
    "createTime": "OPERATION_START_TIME",
    "endTime": "OPERATION_END_TIME",
    "cancelRequested": true,
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL",
    "counter": {
      "success": "SUCCESS_COUNT"
    }
  },
  "done": true,
  "error": {
    "code": 1,
    "message": "Operation cancelled by user."
  }
}

PowerShell

Para cancelar una LRO en un conjunto de datos, realiza una solicitud POST y especifica la siguiente información:

  • El nombre del conjunto de datos
  • Un token de acceso
  • El ID de la operación
  • El parámetro cancel:

En el siguiente ejemplo, se muestra una solicitud POST mediante Windows PowerShell.

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID:cancel" | Select-Object -Expand Content

Para ver el estado de una solicitud de cancelación, realiza una solicitud GET y especifica la siguiente información:

  • El nombre del conjunto de datos
  • Un token de acceso
  • El ID de la operación

En el siguiente ejemplo, se muestra una solicitud GET mediante Windows PowerShell.

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

Si la solicitud tiene éxito, se mostrará la respuesta en formato JSON en el servidor:

{
  "name": "PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "API_METHOD_NAME",
    "createTime": "OPERATION_START_TIME",
    "endTime": "OPERATION_END_TIME",
    "cancelRequested": true,
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL",
    "counter": {
      "success": "SUCCESS_COUNT"
    }
  },
  "done": true,
  "error": {
    "code": 1,
    "message": "Operation cancelled by user."
  }
}