summaryrefslogtreecommitdiffstats
path: root/grpc/grpc-client
diff options
context:
space:
mode:
Diffstat (limited to 'grpc/grpc-client')
-rw-r--r--grpc/grpc-client/pom.xml53
-rw-r--r--grpc/grpc-client/src/main/java/org/open/infc/grpc/client/OpenInterfaceGrpcClient.java83
-rw-r--r--grpc/grpc-client/src/main/java/org/open/infc/grpc/client/OpenRemoteCli.java86
-rw-r--r--grpc/grpc-client/src/main/resources/log4j.properties32
4 files changed, 254 insertions, 0 deletions
diff --git a/grpc/grpc-client/pom.xml b/grpc/grpc-client/pom.xml
new file mode 100644
index 00000000..93d2b361
--- /dev/null
+++ b/grpc/grpc-client/pom.xml
@@ -0,0 +1,53 @@
+<!--
+ Copyright 2018 Huawei Technologies Co., Ltd.
+
+ 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.
+ -->
+<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>
+ <parent>
+ <groupId>org.onap.cli</groupId>
+ <artifactId>oclip-grpc</artifactId>
+ <version>1.0.0</version>
+ </parent>
+ <artifactId>oclip-grpc-client</artifactId>
+ <name>oclip/grpc/client</name>
+ <packaging>jar</packaging>
+ <dependencies>
+ <dependency>
+ <groupId>org.onap.cli</groupId>
+ <artifactId>oclip-grpc-stub</artifactId>
+ <version>1.0.0</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifest>
+ <addClasspath>true</addClasspath>
+ <mainClass>org.onap.cli.grpc.client.OpenRemoteCli</mainClass>
+ </manifest>
+ </archive>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/grpc/grpc-client/src/main/java/org/open/infc/grpc/client/OpenInterfaceGrpcClient.java b/grpc/grpc-client/src/main/java/org/open/infc/grpc/client/OpenInterfaceGrpcClient.java
new file mode 100644
index 00000000..e61f54f6
--- /dev/null
+++ b/grpc/grpc-client/src/main/java/org/open/infc/grpc/client/OpenInterfaceGrpcClient.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2018 Huawei Technologies Co., Ltd.
+ *
+ * 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 org.open.infc.grpc.client;
+
+import java.util.concurrent.TimeUnit;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.open.infc.grpc.Args;
+import org.open.infc.grpc.Input;
+import org.open.infc.grpc.OpenInterfaceGrpc;
+import org.open.infc.grpc.Output;
+import org.open.infc.grpc.Result;
+
+import io.grpc.ManagedChannel;
+import io.grpc.ManagedChannelBuilder;
+import io.grpc.StatusRuntimeException;
+
+public class OpenInterfaceGrpcClient {
+ private static final Logger logger = Logger.getLogger(OpenInterfaceGrpcClient.class.getName());
+
+ private final ManagedChannel channel;
+ private final OpenInterfaceGrpc.OpenInterfaceBlockingStub blockingStub;
+
+ public OpenInterfaceGrpcClient(String host, int port) {
+ this(ManagedChannelBuilder.forAddress(host, port)
+ // Channels are secure by default (via SSL/TLS). For the example we disable TLS to avoid
+ // needing certificates.
+ .usePlaintext(true)
+ .build());
+ }
+
+ OpenInterfaceGrpcClient(ManagedChannel channel) {
+ this.channel = channel;
+ blockingStub = OpenInterfaceGrpc.newBlockingStub(channel);
+ }
+
+ public void shutdown() throws InterruptedException {
+ channel.shutdown().awaitTermination(5, TimeUnit.SECONDS);
+ }
+
+ public Output invoke(Input input) {
+ logger.info("Input " + input.toString());
+
+ Output result = Output.newBuilder().build();
+ try {
+ result = blockingStub.invoke(input);
+ } catch (StatusRuntimeException e) {
+ logger.log(Level.WARNING, "RPC failed: {0}", e.getStatus());
+ }
+ logger.info("Output: " + result.toString());
+ return result;
+ }
+
+ public Result remoteCli(Args args) {
+ logger.info(args.toString());
+
+ Result result = Result.newBuilder().setExitCode(1).build();
+ try {
+ result = blockingStub.remoteCli(args);
+ } catch (StatusRuntimeException e) {
+ logger.log(Level.WARNING, "RPC failed: {0}", e.getStatus());
+ }
+
+ logger.info("Result: " + result.toString());
+ return result;
+ }
+}
diff --git a/grpc/grpc-client/src/main/java/org/open/infc/grpc/client/OpenRemoteCli.java b/grpc/grpc-client/src/main/java/org/open/infc/grpc/client/OpenRemoteCli.java
new file mode 100644
index 00000000..7d02c141
--- /dev/null
+++ b/grpc/grpc-client/src/main/java/org/open/infc/grpc/client/OpenRemoteCli.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2018 Huawei Technologies Co., Ltd.
+ *
+ * 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 org.open.infc.grpc.client;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Logger;
+
+import org.open.infc.grpc.Args;
+import org.open.infc.grpc.Result;
+
+public class OpenRemoteCli {
+ public static final String OCLIP_GRPC_SERVER = "http://localhost:50051";
+ public static final String OCLIP_GRPC_SERVER_ENV = "OCLIP_SERVER";
+
+ public static Result run (String[] args) throws Exception {
+ String oclipHome = System.getenv(OCLIP_GRPC_SERVER_ENV);
+
+ if (oclipHome == null) {
+ oclipHome = OCLIP_GRPC_SERVER;
+ }
+
+ if (System.getenv("OPEN_CLI_DEBUG") == null) {
+ Logger globalLogger = Logger.getLogger(OpenInterfaceGrpcClient.class.getName());
+ globalLogger.setLevel(java.util.logging.Level.OFF);
+ } else {
+ System.out.println(OCLIP_GRPC_SERVER_ENV + "=" + oclipHome);
+ }
+
+ if (args.length <= 2 || !args[0].equals("-P")) {
+ System.out.println("Usage: oclip -P <product-name> <command-name> <command-arguments");
+ System.out.println("NOTE: Set environment variable " + OCLIP_GRPC_SERVER_ENV + " to OCLIP gRPC server. By default its " + OCLIP_GRPC_SERVER);
+ System.exit(0);
+ }
+
+ List<String> argList = new ArrayList<>();
+
+ for (String arg: args) {
+ argList.add(arg);
+ }
+
+ //-P
+ argList.remove(0);
+
+ //<product-name>
+ String product = argList.remove(0);
+
+ URL oclipUrl = new URL(oclipHome);
+ OpenInterfaceGrpcClient client = new OpenInterfaceGrpcClient(
+ oclipUrl.getHost(), oclipUrl.getPort());
+
+ try {
+ Result result = client.remoteCli(Args.newBuilder().addAllArgs(argList).setProduct(product).build());
+ return result;
+ } finally {
+ client.shutdown();
+ }
+ }
+
+
+ public static void main(String[] args) throws Exception {
+ int exitCode = 1;
+ try {
+ Result result = OpenRemoteCli.run(args);
+ System.out.println(result.getOutput());
+ exitCode = result.getExitCode();
+ } finally {
+ System.exit(exitCode);
+ }
+ }
+}
diff --git a/grpc/grpc-client/src/main/resources/log4j.properties b/grpc/grpc-client/src/main/resources/log4j.properties
new file mode 100644
index 00000000..778641ed
--- /dev/null
+++ b/grpc/grpc-client/src/main/resources/log4j.properties
@@ -0,0 +1,32 @@
+# Copyright 2018 Huawei Technologies Co., Ltd.
+#
+# 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.
+
+log4j.rootLogger=ERROR, file
+
+log4j.logger.org.onap.cli=DEBUG, file
+log4j.logger.org.open.infc=DEBUG, file
+
+# Direct log messages to stdout
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
+
+# Redirect log messages to a log file, support file rolling.
+log4j.appender.file=org.apache.log4j.RollingFileAppender
+log4j.appender.file.File=${OPEN_CLI_HOME}/logs/open-cli.log
+log4j.appender.file.MaxFileSize=5MB
+log4j.appender.file.MaxBackupIndex=10
+log4j.appender.file.layout=org.apache.log4j.PatternLayout
+log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n