Skip to content

Commit

Permalink
docs: add async api code snippet (#25)
Browse files Browse the repository at this point in the history
* docs: add async api code snippet

* fix lint

* fix lint

* use dataformat

* fix import order

* rename to inputUri

* add pom

* update gitignore

* add pom in snapshot and install-without-bom

* add indentation

* reduce buckeet name length

* 🦉 Updates from OwlBot post-processor

See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md

* rm region tag in test

Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
  • Loading branch information
changsongd and gcf-owl-bot[bot] authored Apr 8, 2022
1 parent 4ada54b commit 715bbb3
Show file tree
Hide file tree
Showing 3 changed files with 203 additions and 6 deletions.
31 changes: 25 additions & 6 deletions optimization/snippets/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.cloud</groupId>
<artifactId>-snippets</artifactId>
<packaging>jar</packaging>
<name>Google Cloud Fleet Routing Snippets</name>
<artifactId>optimization-ai-snippets</artifactId>
<packaging>pom</packaging>
<name>Google Cloud Fleet Routing Samples Parent</name>
<url>https://github.com/googleapis/java-optimization</url>
<description>
Java idiomatic client for Google Cloud Platform services.
</description>

<!--
The parent pom defines common style checks and testing strategies for our samples.
Expand All @@ -23,14 +26,30 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<!-- [START optimizationai_install_with_bom] -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>libraries-bom</artifactId>
<version>25.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<!-- TODO: switch to libraries-bom after this artifact is included -->
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-optimization</artifactId>
<version>0.1.1</version>
</dependency>

<!-- [END optimizationai_install_with_bom] -->
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
Expand All @@ -44,4 +63,4 @@
<scope>test</scope>
</dependency>
</dependencies>
</project>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
/*
* Copyright 2022 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.optimizationai;

// [START cloudoptimization_async_api]
import com.google.api.gax.longrunning.OperationFuture;
import com.google.cloud.optimization.v1.AsyncModelMetadata;
import com.google.cloud.optimization.v1.BatchOptimizeToursRequest;
import com.google.cloud.optimization.v1.BatchOptimizeToursRequest.AsyncModelConfig;
import com.google.cloud.optimization.v1.BatchOptimizeToursResponse;
import com.google.cloud.optimization.v1.DataFormat;
import com.google.cloud.optimization.v1.FleetRoutingClient;
import com.google.cloud.optimization.v1.GcsDestination;
import com.google.cloud.optimization.v1.GcsSource;
import com.google.cloud.optimization.v1.InputConfig;
import com.google.cloud.optimization.v1.OutputConfig;

/**
* This is an example to send a request to Cloud Fleet Routing asynchronous API via Java API Client.
* A sample async_request_java.textproto file and a sample request_model_java.json file can be found
* in the resources folder.
*/
public class AsyncApi {
public static void callAsyncApi() throws Exception {
// TODO(developer): Replace these variables before running the sample.
String projectParent = "projects/{YOUR_GCP_PROJECT_ID}";
String inputUri = "gs://YOUR_GCS_PATH";
String outputUri = "gs://YOUR_SOLUTION_PATH";
callAsyncApi(projectParent, inputUri, outputUri);
}

public static void callAsyncApi(String projectParent, String inputUri, String outputUri)
throws Exception {
GcsSource gcsSource = GcsSource.newBuilder().setUri(inputUri).build();
InputConfig inputConfig =
InputConfig.newBuilder().setGcsSource(gcsSource).setDataFormat(DataFormat.JSON).build();
GcsDestination gcsDestination = GcsDestination.newBuilder().setUri(outputUri).build();
OutputConfig outputConfig =
OutputConfig.newBuilder()
.setGcsDestination(gcsDestination)
.setDataFormat(DataFormat.JSON)
.build();

AsyncModelConfig asyncModelConfig =
AsyncModelConfig.newBuilder()
.setInputConfig(inputConfig)
.setOutputConfig(outputConfig)
.build();
BatchOptimizeToursRequest request =
BatchOptimizeToursRequest.newBuilder()
.setParent(projectParent)
.addModelConfigs(asyncModelConfig)
.build();

FleetRoutingClient fleetRoutingClient = FleetRoutingClient.create();
OperationFuture<BatchOptimizeToursResponse, AsyncModelMetadata> response =
fleetRoutingClient.batchOptimizeToursAsync(request);
System.out.format("the response name: %s\n", response.getInitialFuture().get().getName());

// Block to wait for the job to finish.
response.getPollingFuture().get();
if (response.getMetadata().get().getState() == AsyncModelMetadata.State.SUCCEEDED) {
// Code to do your stuff
System.out.println("Job finished successfully.");
} else {
System.out.println(
"Job failed with message:" + response.getPollingFuture().get().getErrorMessage());
}
}
}
// [END cloudoptimization_async_api]
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
/*
* Copyright 2022 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.optimizationai;

import static com.google.common.truth.Truth.assertThat;

import com.google.api.gax.paging.Page;
import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BucketInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.util.UUID;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

/** Tests for AsyncApi sample. */
public class AsyncApiTest {
private static final String PROJECT_ID = System.getenv("GOOGLE_CLOUD_PROJECT");
private static final String PROJECT_PARENT = String.format("projects/%s", PROJECT_ID);
private static final String BUCKET_NAME =
String.format("optimizationai-test-%s", UUID.randomUUID());
private static final String INPUT_URI =
"gs://cloud-samples-data/optimization-ai/async_request_model.json";
private static final String BATCH_OUTPUT_URI =
String.format("gs://%s/code_snippets_test_output.json", BUCKET_NAME);

private ByteArrayOutputStream bout;
private PrintStream out;
private PrintStream originalPrintStream;

private static void cleanUpBucket() {
Storage storage = StorageOptions.getDefaultInstance().getService();
Page<Blob> blobs = storage.list(BUCKET_NAME, Storage.BlobListOption.currentDirectory());

deleteDirectory(storage, blobs);
}

private static void deleteDirectory(Storage storage, Page<Blob> blobs) {
for (Blob blob : blobs.iterateAll()) {
if (!blob.delete()) {
Page<Blob> subBlobs =
storage.list(
BUCKET_NAME,
Storage.BlobListOption.currentDirectory(),
Storage.BlobListOption.prefix(blob.getName()));

deleteDirectory(storage, subBlobs);
}
}
}

@Before
public void setUp() {
bout = new ByteArrayOutputStream();
out = new PrintStream(bout);
originalPrintStream = System.out;
System.setOut(out);

Storage storage = StorageOptions.getDefaultInstance().getService();
storage.create(BucketInfo.of(BUCKET_NAME));
}

@After
public void tearDown() {
cleanUpBucket();
System.out.flush();
System.setOut(originalPrintStream);
}

@Test
public void testAsyncApi() throws Exception {
AsyncApi.callAsyncApi(PROJECT_PARENT, INPUT_URI, BATCH_OUTPUT_URI);
String got = bout.toString();
assertThat(got).contains("Job");
}
}

0 comments on commit 715bbb3

Please sign in to comment.