diff options
-rw-r--r-- | pom.xml | 1 | ||||
-rw-r--r-- | stats/asciidoc/Readme.adoc | 3 | ||||
-rw-r--r-- | stats/pom.xml | 58 | ||||
-rw-r--r-- | stats/stats-api/asciidoc/Readme.adoc | 3 | ||||
-rw-r--r-- | stats/stats-api/pom.xml | 33 | ||||
-rw-r--r-- | stats/stats-impl/asciidoc/Readme.adoc | 3 | ||||
-rw-r--r-- | stats/stats-impl/pom.xml | 99 | ||||
-rw-r--r-- | stats/stats-impl/src/main/java/io/fd/hc2vpp/stats/StatsModule.java | 54 | ||||
-rw-r--r-- | stats/stats-impl/src/main/java/io/fd/hc2vpp/stats/jvpp/JVppStatsProvider.java (renamed from v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/cache/JVppStatsProvider.java) | 2 | ||||
-rw-r--r-- | stats/stats-impl/src/test/java/io/fd/hc2vpp/stats/StatsModuleTest.java | 44 | ||||
-rw-r--r-- | v3po/v3po2vpp/pom.xml | 6 | ||||
-rw-r--r-- | v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/V3poModule.java | 2 | ||||
-rw-r--r-- | vpp-integration/api-docs/docs/pom.xml | 1 | ||||
-rw-r--r-- | vpp-integration/minimal-distribution/pom.xml | 6 |
14 files changed, 313 insertions, 2 deletions
@@ -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 index 000000000..c25cda105 --- /dev/null +++ b/stats/asciidoc/Readme.adoc @@ -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 index 000000000..3b355b3fd --- /dev/null +++ b/stats/pom.xml @@ -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 index 000000000..f2852f3de --- /dev/null +++ b/stats/stats-api/asciidoc/Readme.adoc @@ -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 index 000000000..57af462a6 --- /dev/null +++ b/stats/stats-api/pom.xml @@ -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 index 000000000..3948377a7 --- /dev/null +++ b/stats/stats-impl/asciidoc/Readme.adoc @@ -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 index 000000000..8e6bc37d3 --- /dev/null +++ b/stats/stats-impl/pom.xml @@ -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 index 000000000..66dca9fa6 --- /dev/null +++ b/stats/stats-impl/src/main/java/io/fd/hc2vpp/stats/StatsModule.java @@ -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/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/cache/JVppStatsProvider.java b/stats/stats-impl/src/main/java/io/fd/hc2vpp/stats/jvpp/JVppStatsProvider.java index 2ffc10419..729ef4f3a 100644 --- a/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/cache/JVppStatsProvider.java +++ b/stats/stats-impl/src/main/java/io/fd/hc2vpp/stats/jvpp/JVppStatsProvider.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.fd.hc2vpp.v3po.interfacesstate.cache; +package io.fd.hc2vpp.stats.jvpp; import com.google.inject.Inject; import io.fd.honeycomb.binding.init.ProviderTrait; 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 index 000000000..79c4a46f2 --- /dev/null +++ b/stats/stats-impl/src/test/java/io/fd/hc2vpp/stats/StatsModuleTest.java @@ -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 diff --git a/v3po/v3po2vpp/pom.xml b/v3po/v3po2vpp/pom.xml index 9572ed16e..7bcdbf631 100644 --- a/v3po/v3po2vpp/pom.xml +++ b/v3po/v3po2vpp/pom.xml @@ -80,6 +80,12 @@ <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> diff --git a/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/V3poModule.java b/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/V3poModule.java index 4bd4cca4a..569f58fb4 100644 --- a/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/V3poModule.java +++ b/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/V3poModule.java @@ -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; diff --git a/vpp-integration/api-docs/docs/pom.xml b/vpp-integration/api-docs/docs/pom.xml index 3eed16ab2..d0fb409cf 100644 --- a/vpp-integration/api-docs/docs/pom.xml +++ b/vpp-integration/api-docs/docs/pom.xml @@ -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, diff --git a/vpp-integration/minimal-distribution/pom.xml b/vpp-integration/minimal-distribution/pom.xml index d6ac65082..337ca1883 100644 --- a/vpp-integration/minimal-distribution/pom.xml +++ b/vpp-integration/minimal-distribution/pom.xml @@ -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, @@ -198,6 +199,11 @@ <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>--> |