Skip to content
This repository has been archived by the owner on Sep 16, 2023. It is now read-only.

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] committed Apr 8, 2022
1 parent 3063725 commit fb23c17
Show file tree
Hide file tree
Showing 7 changed files with 226 additions and 11 deletions.
9 changes: 9 additions & 0 deletions README.md
Expand Up @@ -73,6 +73,15 @@ use this Cloud Fleet Routing Client Library.



## Samples

Samples are in the [`samples/`](https://github.com/googleapis/java-optimization/tree/main/samples) directory.

| Sample | Source Code | Try it |
| --------------------------- | --------------------------------- | ------ |
| Async Api | [source code](https://github.com/googleapis/java-optimization/blob/main/samples/snippets/src/main/java/com/example/optimizationai/AsyncApi.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-optimization&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/optimizationai/AsyncApi.java) |



## Troubleshooting

Expand Down
8 changes: 6 additions & 2 deletions samples/install-without-bom/pom.xml
Expand Up @@ -32,7 +32,11 @@
<version>0.1.1</version>
</dependency>
<!-- [END _install_without_bom] -->

<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
Expand Down Expand Up @@ -81,4 +85,4 @@
</plugin>
</plugins>
</build>
</project>
</project>
4 changes: 2 additions & 2 deletions samples/pom.xml
Expand Up @@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud--samples</artifactId>
<version>0.0.1-SNAPSHOT</version><!-- This artifact should not be released -->
<version>0.0.1-SNAPSHOT</version> <!-- This artifact should not be released -->
<packaging>pom</packaging>
<name>Google Cloud Fleet Routing Samples Parent</name>
<url>https://github.com/googleapis/java-optimization</url>
Expand Down Expand Up @@ -53,4 +53,4 @@
</plugin>
</plugins>
</build>
</project>
</project>
7 changes: 6 additions & 1 deletion samples/snapshot/pom.xml
Expand Up @@ -32,6 +32,11 @@
</dependency>
<!-- {x-version-update-end} -->

<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
Expand Down Expand Up @@ -80,4 +85,4 @@
</plugin>
</plugins>
</build>
</project>
</project>
31 changes: 25 additions & 6 deletions samples/snippets/pom.xml
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>
@@ -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]
@@ -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 fb23c17

Please sign in to comment.