diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml index bdbf465..f60d774 100644 --- a/.github/.OwlBot.lock.yaml +++ b/.github/.OwlBot.lock.yaml @@ -12,5 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. docker: - digest: sha256:b0b1c1c89570e229b1026372a2b8989ba31495007055b8d30178b7648503eefa - image: gcr.io/cloud-devrel-public-resources/owlbot-java:latest \ No newline at end of file + image: gcr.io/cloud-devrel-public-resources/owlbot-java:latest + digest: sha256:fc52b202aa298a50a12c64efd04fea3884d867947effe2fa85382a246c09e813 +# created: 2022-04-06T16:30:03.627422514Z diff --git a/.github/auto-label.yaml b/.github/auto-label.yaml new file mode 100644 index 0000000..4caef68 --- /dev/null +++ b/.github/auto-label.yaml @@ -0,0 +1,15 @@ +# Copyright 2021 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. +requestsize: + enabled: true diff --git a/CHANGELOG.md b/CHANGELOG.md index c1ab16d..b70d9b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog +### [0.1.2](https://github.com/googleapis/java-optimization/compare/v0.1.1...v0.1.2) (2022-04-18) + + +### Documentation + +* add a code snippet for the sync api ([#24](https://github.com/googleapis/java-optimization/issues/24)) ([4dc1dd8](https://github.com/googleapis/java-optimization/commit/4dc1dd8072e41823751a01904c56cf8a0dc41978)) +* add async api code snippet ([#25](https://github.com/googleapis/java-optimization/issues/25)) ([fb23c17](https://github.com/googleapis/java-optimization/commit/fb23c17de88919609cff8e1e20d2a57ddd120d05)) +* add get operation code snippet ([#28](https://github.com/googleapis/java-optimization/issues/28)) ([9f23fe2](https://github.com/googleapis/java-optimization/commit/9f23fe2b38291764c95909a8fa6e65ef4f7d8711)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.10.0 ([#29](https://github.com/googleapis/java-optimization/issues/29)) ([4db5464](https://github.com/googleapis/java-optimization/commit/4db5464b2d11f45d568fd598b318f24240d2e61d)) +* update dependency com.google.cloud:google-cloud-storage to v2.6.1 ([#30](https://github.com/googleapis/java-optimization/issues/30)) ([faf4a15](https://github.com/googleapis/java-optimization/commit/faf4a156ee95fce53c29c860d120079089329236)) + ### [0.1.1](https://github.com/googleapis/java-optimization/compare/v0.1.0...v0.1.1) (2022-03-29) diff --git a/README.md b/README.md index 05c9fc8..144d88c 100644 --- a/README.md +++ b/README.md @@ -22,20 +22,20 @@ If you are using Maven, add this to your pom.xml file: com.google.cloud google-cloud-optimization - 0.1.0 + 0.1.1 ``` If you are using Gradle without BOM, add this to your dependencies ```Groovy -implementation 'com.google.cloud:google-cloud-optimization:0.1.0' +implementation 'com.google.cloud:google-cloud-optimization:0.1.1' ``` If you are using SBT, add this to your dependencies ```Scala -libraryDependencies += "com.google.cloud" % "google-cloud-optimization" % "0.1.0" +libraryDependencies += "com.google.cloud" % "google-cloud-optimization" % "0.1.1" ``` ## Authentication @@ -73,6 +73,18 @@ 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) | +| Get Operation | [source code](https://github.com/googleapis/java-optimization/blob/main/samples/snippets/src/main/java/com/example/optimizationai/GetOperation.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/GetOperation.java) | +| Sync Api | [source code](https://github.com/googleapis/java-optimization/blob/main/samples/snippets/src/main/java/com/example/optimizationai/SyncApi.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/SyncApi.java) | +| Sync Api With Long Timeout | [source code](https://github.com/googleapis/java-optimization/blob/main/samples/snippets/src/main/java/com/example/optimizationai/SyncApiWithLongTimeout.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/SyncApiWithLongTimeout.java) | + + ## Troubleshooting diff --git a/google-cloud-optimization-bom/pom.xml b/google-cloud-optimization-bom/pom.xml index 028d064..4d3d51e 100644 --- a/google-cloud-optimization-bom/pom.xml +++ b/google-cloud-optimization-bom/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.google.cloud google-cloud-optimization-bom - 0.1.1 + 0.1.2 pom com.google.cloud @@ -65,17 +65,17 @@ com.google.cloud google-cloud-optimization - 0.1.1 + 0.1.2 com.google.api.grpc grpc-google-cloud-optimization-v1 - 0.1.1 + 0.1.2 com.google.api.grpc proto-google-cloud-optimization-v1 - 0.1.1 + 0.1.2 diff --git a/google-cloud-optimization/pom.xml b/google-cloud-optimization/pom.xml index c705779..9123b50 100644 --- a/google-cloud-optimization/pom.xml +++ b/google-cloud-optimization/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.google.cloud google-cloud-optimization - 0.1.1 + 0.1.2 jar Google Cloud Fleet Routing https://github.com/googleapis/java-optimization @@ -11,7 +11,7 @@ com.google.cloud google-cloud-optimization-parent - 0.1.1 + 0.1.2 google-cloud-optimization diff --git a/grpc-google-cloud-optimization-v1/pom.xml b/grpc-google-cloud-optimization-v1/pom.xml index bd42740..896d958 100644 --- a/grpc-google-cloud-optimization-v1/pom.xml +++ b/grpc-google-cloud-optimization-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc grpc-google-cloud-optimization-v1 - 0.1.1 + 0.1.2 grpc-google-cloud-optimization-v1 GRPC library for google-cloud-optimization com.google.cloud google-cloud-optimization-parent - 0.1.1 + 0.1.2 diff --git a/pom.xml b/pom.xml index 2b38751..5eb858f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.google.cloud google-cloud-optimization-parent pom - 0.1.1 + 0.1.2 Google Cloud Fleet Routing Parent https://github.com/googleapis/java-optimization @@ -69,23 +69,23 @@ com.google.cloud google-cloud-optimization - 0.1.1 + 0.1.2 com.google.api.grpc grpc-google-cloud-optimization-v1 - 0.1.1 + 0.1.2 com.google.api.grpc proto-google-cloud-optimization-v1 - 0.1.1 + 0.1.2 com.google.cloud google-cloud-shared-dependencies - 2.9.0 + 2.10.0 pom import diff --git a/proto-google-cloud-optimization-v1/pom.xml b/proto-google-cloud-optimization-v1/pom.xml index 77a00fe..8d53637 100644 --- a/proto-google-cloud-optimization-v1/pom.xml +++ b/proto-google-cloud-optimization-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc proto-google-cloud-optimization-v1 - 0.1.1 + 0.1.2 proto-google-cloud-optimization-v1 Proto library for google-cloud-optimization com.google.cloud google-cloud-optimization-parent - 0.1.1 + 0.1.2 diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml index 3a535f5..6d2dbea 100644 --- a/samples/install-without-bom/pom.xml +++ b/samples/install-without-bom/pom.xml @@ -29,10 +29,14 @@ com.google.cloud google-cloud-optimization - 0.0.0 + 0.1.1 - + + com.google.cloud + google-cloud-storage + 2.6.1 + junit junit @@ -81,4 +85,4 @@ - + \ No newline at end of file diff --git a/samples/install-without-bom/resources/sync_request.textproto b/samples/install-without-bom/resources/sync_request.textproto new file mode 100644 index 0000000..d1026f9 --- /dev/null +++ b/samples/install-without-bom/resources/sync_request.textproto @@ -0,0 +1,64 @@ +# proto-file: google3/google/cloud/optimization/v1/fleet_routing.proto +# proto-message: OptimizeToursRequest +model { + shipments { + pickups { + arrival_location { latitude: 48.874507 longitude: 2.30361 } + time_windows { + start_time { seconds: 1000 } + end_time { seconds: 2000 } + } + duration { seconds: 150 } + } + deliveries { + arrival_location { latitude: 48.880942 longitude: 2.323866 } + time_windows { + start_time { seconds: 3000 } + end_time { seconds: 4000 } + } + duration: { seconds: 250 } + } + load_demands { + key: "weight" + value: { amount: 10 } + } + } + shipments { + pickups { + arrival_location { latitude: 48.880943 longitude: 2.323867 } + time_windows { + start_time { seconds: 1001 } + end_time { seconds: 2001 } + } + duration { seconds: 151 } + } + deliveries { + arrival_location { latitude: 48.880940 longitude: 2.323844 } + time_windows { + start_time { seconds: 3001 } + end_time { seconds: 4001 } + } + duration { seconds: 251 } + } + load_demands { + key: "weight" + value: { amount: 20 } + } + } + vehicles { + start_location { latitude: 48.863102 longitude: 2.341204 } + end_location { latitude: 48.863110 longitude: 2.341205 } + load_limits { + key: "weight" + value: { max_load: 50 } + } + } + vehicles { + start_location { latitude: 48.863112 longitude: 2.341214 } + end_location { latitude: 48.863120 longitude: 2.341215 } + load_limits { + key: "weight" + value: { max_load: 60 } + } + } + } \ No newline at end of file diff --git a/samples/pom.xml b/samples/pom.xml index 1ac0e01..bfb97b8 100644 --- a/samples/pom.xml +++ b/samples/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.google.cloud google-cloud--samples - 0.0.1-SNAPSHOT + 0.0.1-SNAPSHOT pom Google Cloud Fleet Routing Samples Parent https://github.com/googleapis/java-optimization @@ -53,4 +53,4 @@ - + \ No newline at end of file diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index 5c13175..4f14088 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -28,10 +28,15 @@ com.google.cloud google-cloud-optimization - 0.1.1 + 0.1.2 + + com.google.cloud + google-cloud-storage + 2.6.1 + junit junit @@ -80,4 +85,4 @@ - + \ No newline at end of file diff --git a/samples/snapshot/resources/sync_request.textproto b/samples/snapshot/resources/sync_request.textproto new file mode 100644 index 0000000..d1026f9 --- /dev/null +++ b/samples/snapshot/resources/sync_request.textproto @@ -0,0 +1,64 @@ +# proto-file: google3/google/cloud/optimization/v1/fleet_routing.proto +# proto-message: OptimizeToursRequest +model { + shipments { + pickups { + arrival_location { latitude: 48.874507 longitude: 2.30361 } + time_windows { + start_time { seconds: 1000 } + end_time { seconds: 2000 } + } + duration { seconds: 150 } + } + deliveries { + arrival_location { latitude: 48.880942 longitude: 2.323866 } + time_windows { + start_time { seconds: 3000 } + end_time { seconds: 4000 } + } + duration: { seconds: 250 } + } + load_demands { + key: "weight" + value: { amount: 10 } + } + } + shipments { + pickups { + arrival_location { latitude: 48.880943 longitude: 2.323867 } + time_windows { + start_time { seconds: 1001 } + end_time { seconds: 2001 } + } + duration { seconds: 151 } + } + deliveries { + arrival_location { latitude: 48.880940 longitude: 2.323844 } + time_windows { + start_time { seconds: 3001 } + end_time { seconds: 4001 } + } + duration { seconds: 251 } + } + load_demands { + key: "weight" + value: { amount: 20 } + } + } + vehicles { + start_location { latitude: 48.863102 longitude: 2.341204 } + end_location { latitude: 48.863110 longitude: 2.341205 } + load_limits { + key: "weight" + value: { max_load: 50 } + } + } + vehicles { + start_location { latitude: 48.863112 longitude: 2.341214 } + end_location { latitude: 48.863120 longitude: 2.341215 } + load_limits { + key: "weight" + value: { max_load: 60 } + } + } + } \ No newline at end of file diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml index 5e36cb5..06cfa0f 100644 --- a/samples/snippets/pom.xml +++ b/samples/snippets/pom.xml @@ -2,10 +2,13 @@ 4.0.0 com.google.cloud - -snippets - jar - Google Cloud Fleet Routing Snippets + optimization-ai-snippets + pom + Google Cloud Fleet Routing Samples Parent https://github.com/googleapis/java-optimization + + Java idiomatic client for Google Cloud Platform services. + com.google.cloud google-cloud-optimization - 0.0.0 + 0.1.1 + + + com.google.cloud + google-cloud-storage - junit junit @@ -44,4 +62,4 @@ test - + \ No newline at end of file diff --git a/samples/snippets/resources/sync_request.textproto b/samples/snippets/resources/sync_request.textproto new file mode 100644 index 0000000..d1026f9 --- /dev/null +++ b/samples/snippets/resources/sync_request.textproto @@ -0,0 +1,64 @@ +# proto-file: google3/google/cloud/optimization/v1/fleet_routing.proto +# proto-message: OptimizeToursRequest +model { + shipments { + pickups { + arrival_location { latitude: 48.874507 longitude: 2.30361 } + time_windows { + start_time { seconds: 1000 } + end_time { seconds: 2000 } + } + duration { seconds: 150 } + } + deliveries { + arrival_location { latitude: 48.880942 longitude: 2.323866 } + time_windows { + start_time { seconds: 3000 } + end_time { seconds: 4000 } + } + duration: { seconds: 250 } + } + load_demands { + key: "weight" + value: { amount: 10 } + } + } + shipments { + pickups { + arrival_location { latitude: 48.880943 longitude: 2.323867 } + time_windows { + start_time { seconds: 1001 } + end_time { seconds: 2001 } + } + duration { seconds: 151 } + } + deliveries { + arrival_location { latitude: 48.880940 longitude: 2.323844 } + time_windows { + start_time { seconds: 3001 } + end_time { seconds: 4001 } + } + duration { seconds: 251 } + } + load_demands { + key: "weight" + value: { amount: 20 } + } + } + vehicles { + start_location { latitude: 48.863102 longitude: 2.341204 } + end_location { latitude: 48.863110 longitude: 2.341205 } + load_limits { + key: "weight" + value: { max_load: 50 } + } + } + vehicles { + start_location { latitude: 48.863112 longitude: 2.341214 } + end_location { latitude: 48.863120 longitude: 2.341215 } + load_limits { + key: "weight" + value: { max_load: 60 } + } + } + } \ No newline at end of file diff --git a/samples/snippets/src/main/java/com/example/optimizationai/AsyncApi.java b/samples/snippets/src/main/java/com/example/optimizationai/AsyncApi.java new file mode 100644 index 0000000..97430d3 --- /dev/null +++ b/samples/snippets/src/main/java/com/example/optimizationai/AsyncApi.java @@ -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 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] diff --git a/samples/snippets/src/main/java/com/example/optimizationai/GetOperation.java b/samples/snippets/src/main/java/com/example/optimizationai/GetOperation.java new file mode 100644 index 0000000..6a6e8fd --- /dev/null +++ b/samples/snippets/src/main/java/com/example/optimizationai/GetOperation.java @@ -0,0 +1,57 @@ +/* + * 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.example.optimizationai; + +// [START cloudoptimization_get_operation] +import com.google.cloud.optimization.v1.FleetRoutingClient; +import com.google.longrunning.Operation; +import java.io.IOException; + +class GetOperation { + + static void getOperation() throws IOException { + // TODO(developer): Replace these variables before running the sample. + String operationFullId = "projects/[projectId]/operations/[operationId]"; + getOperation(operationFullId); + } + + // Get the status of an operation + static void getOperation(String operationFullId) throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (FleetRoutingClient client = FleetRoutingClient.create()) { + // Get the latest state of a long-running operation. + Operation operation = client.getOperationsClient().getOperation(operationFullId); + + // Display operation details. + System.out.println("Operation details:"); + System.out.format("\tName: %s\n", operation.getName()); + System.out.format("\tMetadata Type Url: %s\n", operation.getMetadata().getTypeUrl()); + System.out.format("\tDone: %s\n", operation.getDone()); + if (operation.hasResponse()) { + System.out.format("\tResponse Type Url: %s\n", operation.getResponse().getTypeUrl()); + } + if (operation.hasError()) { + System.out.println("\tResponse:"); + System.out.format("\t\tError code: %s\n", operation.getError().getCode()); + System.out.format("\t\tError message: %s\n", operation.getError().getMessage()); + } + } + } +} +// [END cloudoptimization_get_operation] diff --git a/samples/snippets/src/main/java/com/example/optimizationai/SyncApi.java b/samples/snippets/src/main/java/com/example/optimizationai/SyncApi.java new file mode 100644 index 0000000..5e73344 --- /dev/null +++ b/samples/snippets/src/main/java/com/example/optimizationai/SyncApi.java @@ -0,0 +1,57 @@ +/* + * 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.example.optimizationai; + +// [START cloudoptimization_sync_api] + +import com.google.cloud.optimization.v1.FleetRoutingClient; +import com.google.cloud.optimization.v1.OptimizeToursRequest; +import com.google.cloud.optimization.v1.OptimizeToursResponse; +import com.google.protobuf.Duration; +import com.google.protobuf.TextFormat; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; + +/** + * This is an example to send a request to Cloud Fleet Routing synchronous API via Java API Client. + * A sample sync_request.textproto file can be found in the resources folder. + */ +public class SyncApi { + public static void callSyncApi() throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectParent = "projects/{YOUR_GCP_PROJECT_ID}"; + String modelPath = "YOUR_MODEL_PATH"; + callSyncApi(projectParent, modelPath); + } + + public static void callSyncApi(String projectParent, String modelPath) throws Exception { + int timeoutSeconds = 100; + InputStream modelInputstream = new FileInputStream(modelPath); + Reader modelInputStreamReader = new InputStreamReader(modelInputstream); + OptimizeToursRequest.Builder requestBuilder = + OptimizeToursRequest.newBuilder() + .setTimeout(Duration.newBuilder().setSeconds(timeoutSeconds).build()) + .setParent(projectParent); + TextFormat.getParser().merge(modelInputStreamReader, requestBuilder); + FleetRoutingClient fleetRoutingClient = FleetRoutingClient.create(); + OptimizeToursResponse response = fleetRoutingClient.optimizeTours(requestBuilder.build()); + System.out.println(response.toString()); + } +} +// [END cloudoptimization_sync_api] diff --git a/samples/snippets/src/main/java/com/example/optimizationai/SyncApiWithLongTimeout.java b/samples/snippets/src/main/java/com/example/optimizationai/SyncApiWithLongTimeout.java new file mode 100644 index 0000000..152fd08 --- /dev/null +++ b/samples/snippets/src/main/java/com/example/optimizationai/SyncApiWithLongTimeout.java @@ -0,0 +1,66 @@ +/* + * 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.example.optimizationai; + +// [START cloudoptimization_long_timeout] + +import com.google.cloud.optimization.v1.FleetRoutingClient; +import com.google.cloud.optimization.v1.FleetRoutingSettings; +import com.google.cloud.optimization.v1.OptimizeToursRequest; +import com.google.cloud.optimization.v1.OptimizeToursResponse; +import com.google.protobuf.Duration; +import com.google.protobuf.TextFormat; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; + +/** + * This is an example to send a request to Cloud Fleet Routing synchronous API via Java API Client. + */ +public class SyncApiWithLongTimeout { + public static void longTimeout() throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectParent = "projects/{YOUR_GCP_PROJECT_ID}"; + String modelPath = "YOUR_MODEL_PATH"; + longTimeout(projectParent, modelPath); + } + + public static void longTimeout(String projectParent, String modelPath) throws Exception { + int timeoutSeconds = 100; + InputStream modelInputstream = new FileInputStream(modelPath); + Reader modelInputStreamReader = new InputStreamReader(modelInputstream); + OptimizeToursRequest.Builder requestBuilder = + OptimizeToursRequest.newBuilder() + .setTimeout(Duration.newBuilder().setSeconds(timeoutSeconds).build()) + .setParent(projectParent); + TextFormat.getParser().merge(modelInputStreamReader, requestBuilder); + + // Checks the gRPC connection every 5 mins and keeps it alive. + FleetRoutingClient fleetRoutingClientClient = + FleetRoutingClient.create( + FleetRoutingSettings.newBuilder() + .setTransportChannelProvider( + FleetRoutingSettings.defaultGrpcTransportProviderBuilder() + .setKeepAliveTime(org.threeten.bp.Duration.ofSeconds(300)) + .build()) + .build()); + OptimizeToursResponse response = fleetRoutingClientClient.optimizeTours(requestBuilder.build()); + System.out.println(response.toString()); + } +} +// [END cloudoptimization_long_timeout] diff --git a/samples/snippets/src/test/java/com/example/optimizationai/AsyncApiTest.java b/samples/snippets/src/test/java/com/example/optimizationai/AsyncApiTest.java new file mode 100644 index 0000000..058b46a --- /dev/null +++ b/samples/snippets/src/test/java/com/example/optimizationai/AsyncApiTest.java @@ -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 blobs = storage.list(BUCKET_NAME, Storage.BlobListOption.currentDirectory()); + + deleteDirectory(storage, blobs); + } + + private static void deleteDirectory(Storage storage, Page blobs) { + for (Blob blob : blobs.iterateAll()) { + if (!blob.delete()) { + Page 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"); + } +} diff --git a/samples/snippets/src/test/java/com/example/optimizationai/GetOperationTest.java b/samples/snippets/src/test/java/com/example/optimizationai/GetOperationTest.java new file mode 100644 index 0000000..32ef2cb --- /dev/null +++ b/samples/snippets/src/test/java/com/example/optimizationai/GetOperationTest.java @@ -0,0 +1,67 @@ +/* + * 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.example.optimizationai; + +import static com.google.common.truth.Truth.assertThat; + +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.BatchOptimizeToursResponse; +import com.google.cloud.optimization.v1.FleetRoutingClient; +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/** Tests for GetOperation sample. */ +public class GetOperationTest { + private static final String PROJECT_ID = System.getenv("GOOGLE_CLOUD_PROJECT"); + private static final String PROJECT_PARENT = String.format("projects/%s", PROJECT_ID); + + private ByteArrayOutputStream bout; + private PrintStream out; + private PrintStream originalPrintStream; + + @Before + public void setUp() { + bout = new ByteArrayOutputStream(); + out = new PrintStream(bout); + originalPrintStream = System.out; + System.setOut(out); + } + + @After + public void tearDown() { + System.out.flush(); + System.setOut(originalPrintStream); + } + + @Test + public void testSyncApi() throws Exception { + FleetRoutingClient fleetRoutingClient = FleetRoutingClient.create(); + BatchOptimizeToursRequest request = + BatchOptimizeToursRequest.newBuilder().setParent(PROJECT_PARENT).build(); + OperationFuture response = + fleetRoutingClient.batchOptimizeToursAsync(request); + + GetOperation.getOperation(response.getInitialFuture().get().getName()); + String got = bout.toString(); + assertThat(got).contains("operations"); + } +} diff --git a/samples/snippets/src/test/java/com/example/optimizationai/SyncApiTest.java b/samples/snippets/src/test/java/com/example/optimizationai/SyncApiTest.java new file mode 100644 index 0000000..e663a92 --- /dev/null +++ b/samples/snippets/src/test/java/com/example/optimizationai/SyncApiTest.java @@ -0,0 +1,57 @@ +/* + * 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.example.optimizationai; + +import static com.google.common.truth.Truth.assertThat; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/** Tests for SyncApi sample. */ +public class SyncApiTest { + 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 MODEL_PATH = "resources/sync_request.textproto"; + + private ByteArrayOutputStream bout; + private PrintStream out; + private PrintStream originalPrintStream; + + @Before + public void setUp() { + bout = new ByteArrayOutputStream(); + out = new PrintStream(bout); + originalPrintStream = System.out; + System.setOut(out); + } + + @After + public void tearDown() { + System.out.flush(); + System.setOut(originalPrintStream); + } + + @Test + public void testSyncApi() throws Exception { + SyncApi.callSyncApi(PROJECT_PARENT, MODEL_PATH); + String got = bout.toString(); + assertThat(got).contains("routes"); + } +} diff --git a/samples/snippets/src/test/java/com/example/optimizationai/SyncApiWithLongTimeoutTest.java b/samples/snippets/src/test/java/com/example/optimizationai/SyncApiWithLongTimeoutTest.java new file mode 100644 index 0000000..0dc7b11 --- /dev/null +++ b/samples/snippets/src/test/java/com/example/optimizationai/SyncApiWithLongTimeoutTest.java @@ -0,0 +1,57 @@ +/* + * 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.example.optimizationai; + +import static com.google.common.truth.Truth.assertThat; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/** Tests for SyncApiWithLongTimeout sample. */ +public class SyncApiWithLongTimeoutTest { + 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 MODEL_PATH = "resources/sync_request.textproto"; + + private ByteArrayOutputStream bout; + private PrintStream out; + private PrintStream originalPrintStream; + + @Before + public void setUp() { + bout = new ByteArrayOutputStream(); + out = new PrintStream(bout); + originalPrintStream = System.out; + System.setOut(out); + } + + @After + public void tearDown() { + System.out.flush(); + System.setOut(originalPrintStream); + } + + @Test + public void testSyncApi() throws Exception { + SyncApiWithLongTimeout.longTimeout(PROJECT_PARENT, MODEL_PATH); + String got = bout.toString(); + assertThat(got).contains("routes"); + } +} diff --git a/versions.txt b/versions.txt index d9a95c1..4462adf 100644 --- a/versions.txt +++ b/versions.txt @@ -1,6 +1,6 @@ # Format: # module:released-version:current-version -google-cloud-optimization:0.1.1:0.1.1 -proto-google-cloud-optimization-v1:0.1.1:0.1.1 -grpc-google-cloud-optimization-v1:0.1.1:0.1.1 +google-cloud-optimization:0.1.2:0.1.2 +proto-google-cloud-optimization-v1:0.1.2:0.1.2 +grpc-google-cloud-optimization-v1:0.1.2:0.1.2