move stats to separate module 59/19759/3
authorMichal Cmarada <[email protected]>
Wed, 22 May 2019 13:46:54 +0000 (15:46 +0200)
committerMichal Cmarada <[email protected]>
Thu, 23 May 2019 05:43:39 +0000 (05:43 +0000)
Change-Id: Id349e926ecf336aeabac89afa45a5e0d0f37e36b
Signed-off-by: Michal Cmarada <[email protected]>
14 files changed:
pom.xml
stats/asciidoc/Readme.adoc [new file with mode: 0644]
stats/pom.xml [new file with mode: 0644]
stats/stats-api/asciidoc/Readme.adoc [new file with mode: 0644]
stats/stats-api/pom.xml [new file with mode: 0644]
stats/stats-impl/asciidoc/Readme.adoc [new file with mode: 0644]
stats/stats-impl/pom.xml [new file with mode: 0644]
stats/stats-impl/src/main/java/io/fd/hc2vpp/stats/StatsModule.java [new file with mode: 0644]
stats/stats-impl/src/main/java/io/fd/hc2vpp/stats/jvpp/JVppStatsProvider.java [moved from v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/cache/JVppStatsProvider.java with 97% similarity]
stats/stats-impl/src/test/java/io/fd/hc2vpp/stats/StatsModuleTest.java [new file with mode: 0644]
v3po/v3po2vpp/pom.xml
v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/V3poModule.java
vpp-integration/api-docs/docs/pom.xml
vpp-integration/minimal-distribution/pom.xml

diff --git a/pom.xml b/pom.xml
index 8c10e33..ee4ff8c 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -37,6 +37,7 @@
   <modules>
     <module>common</module>
     <module>vpp-common</module>
+    <module>stats</module>
     <module>v3po</module>
     <module>ioam</module>
     <module>nsh</module>
diff --git a/stats/asciidoc/Readme.adoc b/stats/asciidoc/Readme.adoc
new file mode 100644 (file)
index 0000000..c25cda1
--- /dev/null
@@ -0,0 +1,3 @@
+= stats-aggregator
+
+Overview of stats-aggregator
\ No newline at end of file
diff --git a/stats/pom.xml b/stats/pom.xml
new file mode 100644 (file)
index 0000000..3b355b3
--- /dev/null
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright (c) 2019 Cisco and/or its affiliates.
+  ~
+  ~ 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">
+
+  <parent>
+    <groupId>io.fd.hc2vpp.common</groupId>
+    <artifactId>hc2vpp-parent</artifactId>
+    <version>1.19.08-SNAPSHOT</version>
+    <relativePath>../common/hc2vpp-parent</relativePath>
+  </parent>
+
+  <groupId>io.fd.hc2vpp.stats</groupId>
+  <artifactId>stats-aggregator</artifactId>
+  <version>1.19.08-SNAPSHOT</version>
+  <name>stats-aggregator</name>
+  <packaging>pom</packaging>
+  <modelVersion>4.0.0</modelVersion>
+  <description>Aggregator for Hc2vpp Stats plugin</description>
+
+  <modules>
+    <module>stats-api</module>
+    <module>stats-impl</module>
+  </modules>
+
+  <!-- DO NOT install or deploy the repo root pom as it's only needed to initiate a build -->
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-deploy-plugin</artifactId>
+        <configuration>
+          <skip>true</skip>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-install-plugin</artifactId>
+        <configuration>
+          <skip>true</skip>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/stats/stats-api/asciidoc/Readme.adoc b/stats/stats-api/asciidoc/Readme.adoc
new file mode 100644 (file)
index 0000000..f2852f3
--- /dev/null
@@ -0,0 +1,3 @@
+= stats-api
+
+The APIs are based on vpp stats model.
diff --git a/stats/stats-api/pom.xml b/stats/stats-api/pom.xml
new file mode 100644 (file)
index 0000000..57af462
--- /dev/null
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright (c) 2019 Cisco and/or its affiliates.
+  ~
+  ~ 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">
+
+  <parent>
+    <groupId>io.fd.hc2vpp.common</groupId>
+    <artifactId>api-parent</artifactId>
+    <version>1.19.08-SNAPSHOT</version>
+    <relativePath>../../common/api-parent</relativePath>
+  </parent>
+
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>io.fd.hc2vpp.stats</groupId>
+  <artifactId>stats-api</artifactId>
+  <name>${project.artifactId}</name>
+  <version>1.19.08-SNAPSHOT</version>
+  <packaging>bundle</packaging>
+
+  <dependencies/>
+</project>
diff --git a/stats/stats-impl/asciidoc/Readme.adoc b/stats/stats-impl/asciidoc/Readme.adoc
new file mode 100644 (file)
index 0000000..3948377
--- /dev/null
@@ -0,0 +1,3 @@
+= stats-impl
+
+Overview of stats-impl
\ No newline at end of file
diff --git a/stats/stats-impl/pom.xml b/stats/stats-impl/pom.xml
new file mode 100644 (file)
index 0000000..8e6bc37
--- /dev/null
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright (c) 2019 Cisco and/or its affiliates.
+  ~
+  ~ 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">
+    <parent>
+        <groupId>io.fd.hc2vpp.common</groupId>
+        <artifactId>vpp-impl-parent</artifactId>
+        <version>1.19.08-SNAPSHOT</version>
+        <relativePath>../../vpp-common/vpp-impl-parent</relativePath>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>io.fd.hc2vpp.stats</groupId>
+    <artifactId>stats-impl</artifactId>
+    <name>${project.artifactId}</name>
+    <version>1.19.08-SNAPSHOT</version>
+    <packaging>bundle</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>io.fd.jvpp</groupId>
+            <artifactId>jvpp-stats</artifactId>
+            <version>${jvpp.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>io.fd.honeycomb</groupId>
+            <artifactId>binding-init</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>io.fd.honeycomb</groupId>
+            <artifactId>cfg-init</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>io.fd.jvpp</groupId>
+            <artifactId>jvpp-registry</artifactId>
+            <version>${jvpp.version}</version>
+        </dependency>
+
+        <!-- DI -->
+        <dependency>
+            <groupId>com.google.inject</groupId>
+            <artifactId>guice</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>net.jmob</groupId>
+            <artifactId>guice.conf</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.inject.extensions</groupId>
+            <artifactId>guice-multibindings</artifactId>
+        </dependency>
+
+        <!-- Testing Dependencies -->
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.skinny-framework</groupId>
+            <artifactId>skinny-logback</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.google.inject.extensions</groupId>
+            <artifactId>guice-testlib</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/stats/stats-impl/src/main/java/io/fd/hc2vpp/stats/StatsModule.java b/stats/stats-impl/src/main/java/io/fd/hc2vpp/stats/StatsModule.java
new file mode 100644 (file)
index 0000000..66dca9f
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2019 Cisco and/or its affiliates.
+ *
+ * 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 io.fd.hc2vpp.stats;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.inject.AbstractModule;
+import com.google.inject.Provider;
+import com.google.inject.Singleton;
+import io.fd.hc2vpp.stats.jvpp.JVppStatsProvider;
+import io.fd.jvpp.stats.future.FutureJVppStatsFacade;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Module class instantiating stats plugin components.
+ */
+public class StatsModule extends AbstractModule {
+
+    private static final Logger LOG = LoggerFactory.getLogger(StatsModule.class);
+    private final Class<? extends Provider<FutureJVppStatsFacade>> jvppStatsProviderClass;
+
+    public StatsModule() {
+        this(JVppStatsProvider.class);
+    }
+
+    @VisibleForTesting
+    protected StatsModule(Class<? extends Provider<FutureJVppStatsFacade>> jvppStatsProvider) {
+        this.jvppStatsProviderClass = jvppStatsProvider;
+    }
+
+    @Override
+    protected void configure() {
+        LOG.debug("Installing Stats module");
+
+        // Bind to Plugin's JVPP
+        bind(FutureJVppStatsFacade.class).toProvider(jvppStatsProviderClass).in(Singleton.class);
+
+        LOG.info("Module Stats successfully configured");
+    }
+}
diff --git a/stats/stats-impl/src/test/java/io/fd/hc2vpp/stats/StatsModuleTest.java b/stats/stats-impl/src/test/java/io/fd/hc2vpp/stats/StatsModuleTest.java
new file mode 100644 (file)
index 0000000..79c4a46
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2019 Cisco and/or its affiliates.
+ *
+ * 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 io.fd.hc2vpp.stats;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.MockitoAnnotations.initMocks;
+
+import com.google.inject.Guice;
+import com.google.inject.Provider;
+import com.google.inject.testing.fieldbinder.BoundFieldModule;
+import io.fd.jvpp.stats.future.FutureJVppStatsFacade;
+import org.junit.Before;
+
+public class StatsModuleTest {
+
+    @Before
+    public void setUp() throws Exception {
+        initMocks(this);
+        Guice.createInjector(new StatsModule(MockJVppStatsProvider.class), BoundFieldModule.of(this))
+                .injectMembers(this);
+    }
+
+    private static final class MockJVppStatsProvider implements Provider<FutureJVppStatsFacade> {
+
+        @Override
+        public FutureJVppStatsFacade get() {
+            return mock(FutureJVppStatsFacade.class);
+        }
+    }
+}
\ No newline at end of file
index 9572ed1..7bcdbf6 100644 (file)
             <version>${jvpp.version}</version>
         </dependency>
 
+        <dependency>
+            <groupId>io.fd.hc2vpp.stats</groupId>
+            <artifactId>stats-impl</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
         <!-- DI -->
         <dependency>
             <groupId>com.google.inject</groupId>
index 4bd4cca..569f58f 100644 (file)
@@ -23,6 +23,7 @@ import com.google.inject.Singleton;
 import com.google.inject.multibindings.Multibinder;
 import com.google.inject.name.Names;
 import io.fd.hc2vpp.common.translate.util.NamingContext;
+import io.fd.hc2vpp.stats.jvpp.JVppStatsProvider;
 import io.fd.hc2vpp.v3po.factory.InterfacesStateReaderFactory;
 import io.fd.hc2vpp.v3po.factory.InterfacesWriterFactory;
 import io.fd.hc2vpp.v3po.factory.L2HoneycombWriterFactory;
@@ -33,7 +34,6 @@ import io.fd.hc2vpp.v3po.interfacesstate.cache.InterfaceCacheDumpManager;
 import io.fd.hc2vpp.v3po.interfacesstate.cache.InterfaceCacheDumpManagerProvider;
 import io.fd.hc2vpp.v3po.interfacesstate.cache.InterfaceStatisticsManager;
 import io.fd.hc2vpp.v3po.interfacesstate.cache.InterfaceStatisticsManagerProvider;
-import io.fd.hc2vpp.v3po.interfacesstate.cache.JVppStatsProvider;
 import io.fd.hc2vpp.v3po.notification.InterfaceChangeNotificationProducerProvider;
 import io.fd.honeycomb.notification.ManagedNotificationProducer;
 import io.fd.honeycomb.translate.read.ReaderFactory;
index 3eed16a..d0fb409 100644 (file)
@@ -35,6 +35,7 @@
             io.fd.hc2vpp.fib.management.FibManagementModule,
             io.fd.hc2vpp.lisp.LispModule,
             io.fd.hc2vpp.lisp.gpe.GpeModule,
+            io.fd.hc2vpp.stats.StatsModule,
             io.fd.hc2vpp.v3po.V3poModule,
             io.fd.hc2vpp.iface.role.InterfaceRoleModule,
             io.fd.hc2vpp.l3.InterfaceL3Module,
index d6ac650..337ca18 100644 (file)
@@ -52,6 +52,7 @@
       io.fd.hc2vpp.fib.management.FibManagementModule,
       io.fd.hc2vpp.lisp.LispModule,
       io.fd.hc2vpp.lisp.gpe.GpeModule,
+      io.fd.hc2vpp.stats.StatsModule,
       io.fd.hc2vpp.v3po.V3poModule,
       io.fd.hc2vpp.iface.role.InterfaceRoleModule,
       io.fd.hc2vpp.l3.InterfaceL3Module,
       <artifactId>ipsec-impl</artifactId>
       <version>${project.version}</version>
     </dependency>
+    <dependency>
+      <groupId>io.fd.hc2vpp.stats</groupId>
+      <artifactId>stats-impl</artifactId>
+      <version>${project.version}</version>
+    </dependency>
 <!--    To use samples uncomment following dependency and rebuild the project -->
 <!--    <dependency>-->
 <!--      <groupId>io.fd.hc2vpp.samples</groupId>-->