É possível executar simulações usando a demonstração da Web fornecida ou chamando a API REST diretamente.
Entrada e saída
Os arquivos de entrada e saída usam o bucket do Cloud Storage da configuração do Terraform.
O diretório de entrada precisa conter os arquivos metrics_config.zip e publisher_config.zip. É possível definir o caminho para ele conforme necessário.
O bucket de saídas contém um diretório simulations, que armazena cada simulação pelo ID. Cada diretório de simulação contém uma pasta de entrada com os arquivos de entrada copiados e uma pasta de saída. A pasta de saída contém o relatório de bugs, o arquivo logcat e os arquivos do simulador gerados.
Usar a demonstração da Web
A plataforma inclui um aplicativo da Web baseado em Flutter para fins de demonstração que permite visualizar, criar e gerenciar simulações. Recomendamos que você crie sua própria interface do usuário adaptada às suas necessidades.
O app de demonstração é implantado no App Engine e exige que os usuários façam login com uma Conta do Google. Isso é protegido usando um ID do cliente OAuth 2.0 configurado no seu projeto do Google Cloud. A conta conectada precisa ter permissões do IAM para invocar as funções do Cloud implantadas. Consulte Gerenciar o acesso ao Cloud Functions
para instruções sobre como conceder as permissões necessárias às contas de usuário, como
o papel de Invocador do Cloud Functions (roles/cloudfunctions.invoker).
Fluxo de trabalho do usuário
- Fazer login: você faz login com sua Conta do Google, autenticada usando o processo OAuth 2.0.
- Visualizar simulações: a página principal lista todas as simulações anteriores e atuais consultando o banco de dados do Firestore, que contém todas as informações de execução.
- Criar uma simulação: navegue até um formulário para programar uma nova simulação
clicando no botão de ação
+no canto inferior direito. Você fornece vários parâmetros, incluindo o caminho de entrada, o ID da build e o tipo de instância. Para mais informações, consulte Criar uma simulação. - Monitorar o status: a lista de simulações é atualizada para mostrar o status da
nova simulação (
PENDING,RUNNING,COMPLETED, etc.). - Visualizar resultados: depois que uma simulação é concluída, é possível visualizar os relatórios e artefatos gerados. Os arquivos de entrada, relatórios de saída, registros, Logcat e relatórios de bugs são armazenados no Cloud Storage.
- Excluir uma simulação: é possível cancelar uma simulação programada ou em execução.
Uso da API
Para automação e integração com outros sistemas, é possível usar a API REST.
O marcador CLOUD_FUNCTION_URL
usado na seção "Autenticação" e nas definições de endpoint se refere ao
URL base da função do Cloud que está sendo invocada. É possível encontrar URLs de funções no console do Google Cloud na página Cloud Functions ; o URL de cada função é mostrado na guia Acionador da página Detalhes da função. Como alternativa, é possível encontrar esses URLs nas saídas do Terraform impressas após a execução de um comando apply.
Autenticação
Todas as solicitações de API precisam ser autenticadas com um token de identidade que comprove a identidade do autor da chamada. A identidade (conta de usuário ou de serviço) precisa ter permissões de Invocador do Cloud Functions na função de destino.
1. Invocação do usuário (local e CLI) Ao invocar a API de uma máquina local ou de um ambiente que não seja do Google Cloud, é necessário usar um token de identidade emitido pelo Google obtido para uma conta de usuário.
TOKEN=$(gcloud auth print-identity-token)2. Invocação da conta de serviço (no Google Cloud) Ao invocar a API de um recurso do Google Cloud (por exemplo, uma VM do Compute Engine, outra função do Cloud ou um cluster do Kubernetes), use a identidade da conta de serviço anexada ao recurso. O token precisa ser buscado no servidor de metadados do recurso.
TOKEN=$(curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=CLOUD_FUNCTION_URL" -H "Metadata-Flavor: Google")
Inclua o token recuperado no cabeçalho Authorization das solicitações como um token Bearer.
Endpoints
Os endpoints voltados ao usuário da pilha de simulação de telemetria do Cloud permitem criar e excluir simulações ou ler informações de simulação do banco de dados.
Criar uma simulação
Esse endpoint cria uma nova solicitação de simulação e a programa para execução.
- Endpoint:
POST https://CLOUD_FUNCTION_URL/simulation-orchestrator-receive-request Corpo da solicitação:
{ "build_id": "latest", "file_path": "inputs/my-test-case/", "instance_type": "n1-standard-8", "owner": "user@example.com", "max_simulation_time": 300, "max_report_count": 5 }build_id(string): a tag da imagem Docker do agente a ser usada (por exemplo, "latest"). Importante: ela precisa corresponder a uma tag definida no mapa de imagens permitido da infraestrutura (por exemplo, "latest", "stable"). O sistema rejeita tags desconhecidas se um mapa SHA256 for definido no Terraform.file_path(string): o caminho no bucket do GCS para a pasta que contémmetrics_config.zipepublisher_config.zip.instance_type(string): o tipo de máquina do Compute Engine. Esse tipo precisa oferecer suporte à virtualização aninhada, como as sériesn1,n2out2d. Para mais informações, consulte a visão geral da virtualização aninhada.owner(string): o e-mail do usuário que está iniciando a simulação.max_simulation_time(inteiro): o tempo máximo em segundos que a simulação é executada.max_report_count(inteiro): o número de relatórios de telemetria após os quais a simulação termina.
Resposta de sucesso (200 OK):
{ "id": "sim-a1b2c3d4e5f6" }
Excluir uma simulação
Esse endpoint cancela uma simulação pendente ou em execução e exclui os recursos associados a ela.
- Endpoint:
POST https://CLOUD_FUNCTION_URL/simulation-orchestrator-delete-simulation - Cabeçalhos:
Content-Type: application/json
Corpo da solicitação:
{ "id": "sim-a1b2c3d4e5f6" }Resposta de sucesso (200 OK): um objeto JSON vazio
{}.
Ler dados de simulação
Para ler dados de simulação, é possível interagir com a função simulation-reader.
Esses endpoints usam o método GET para recuperar o histórico, o status e a configuração do sistema.
1. Listar simulações
Recupera uma lista paginada de simulações com suporte para filtragem e classificação.
- Endpoint:
GET https://CLOUD_FUNCTION_URL/simulation-reader/simulations Parâmetros de consulta (todos opcionais):
status(string): filtra por status da simulação (running,Simulation request received,cancelledoucompleted).owner(string): filtra pelo e-mail do proprietário.sort_by(string): campo para classificar por (received_at,status_updated_at,started_at). O padrão éreceived_at.sort_order(string): direção de classificação,ascoudesc. O padrão édesc.page_size(inteiro): número de resultados por página. O padrão é 20.page_token(string): token para buscar a próxima página de resultados.
Exemplo de solicitação:
curl -H "Authorization: Bearer $TOKEN" "https://CLOUD_FUNCTION_URL/simulation-reader/simulations?status=completed&owner=user@example.com&sort_by=status_updated_at"Resposta de sucesso (200 OK):
- Retorna um objeto JSON que contém uma matriz de simulações e um
next_page_tokenopcional.
{ "simulations": [ { "id": "1234-abcd", "owner": "some@email.com", "status": "completed", "status_updated_at": "2025-12-05T14:50:00.952Z", "received_at": "2025-12-05T14:46:43.106Z", "started_at": "2025-12-05T14:47:05.848Z", "ended_at": "0001-01-01T00:00:00Z", "instance_id": "sim-1234-abcd", "ip": "10.156.15.230", "build_id": "europe-west3-docker.pkg.dev/your-project/simulation/simulation-agent:latest", "instance_type": "n1-standard-8", "file_path": "gs://your-project-simulation_files/path/", "max_simulation_time": 60, "max_report_count": 1 }, { "id": "5678-efgh", "owner": "some@email.com", "status": "completed", "status_updated_at": "2025-11-07T14:49:54.25Z", "received_at": "2025-11-07T14:46:54.959Z", "started_at": "2025-11-07T14:47:13.714Z", "ended_at": "0001-01-01T00:00:00Z", "instance_id": "sim-5678-efgh", "ip": "10.156.15.221", "build_id": "europe-west3-docker.pkg.dev/your-project/simulation/simulation-agent:latest", "instance_type": "n1-standard-8", "file_path": "gs://your-project-simulation_files/path/", "max_simulation_time": 60, "max_report_count": 1 } ], "next_page_token": "M7bydGsAptLncj8SOCb1" }- Retorna um objeto JSON que contém uma matriz de simulações e um
2. Receber uma simulação específica
Recupera os detalhes completos de uma simulação específica pelo ID.
Endpoint:
GET https://CLOUD_FUNCTION_URL/simulation-reader/simulations/[SIMULATION_ID]Resposta de sucesso (200 OK): retorna um objeto JSON que contém os detalhes da simulação solicitada.
{ "id": "1234-abcd", "owner": "some@email.com", "status": "completed", "status_updated_at": "2025-12-05T14:50:00.952Z", "received_at": "2025-12-05T14:46:43.106Z", "started_at": "2025-12-05T14:47:05.848Z", "ended_at": "0001-01-01T00:00:00Z", "instance_id": "sim-1234-abcd", "ip": "10.156.15.230", "build_id": "europe-west3-docker.pkg.dev/your-project/simulation/simulation-agent:latest", "instance_type": "n1-standard-8", "file_path": "gs://your-project-simulation_files/path/", "max_simulation_time": 60, "max_report_count": 1 }
3. Receber métricas e configuração do sistema
Esses endpoints fornecem insights sobre a carga e a configuração atuais da infraestrutura de simulação.
Receber contagem de execução: retorna a contagem de simulações em execução.
Endpoint:
GET https://CLOUD_FUNCTION_URL/simulation-reader/simulations/running/countResposta de sucesso (200 OK):
{ "count": 0 }
Receber o número máximo de VMs simultâneas: retorna o número máximo configurado de VMs em execução simultânea.
Endpoint:
GET https://CLOUD_FUNCTION_URL/simulation-reader/config/max-running-vmsResposta de sucesso (200 OK):
{ "max_running_vms": 5 }