diff --git a/.github/workflows/maven-build.yml b/.github/workflows/maven-build.yml new file mode 100644 index 0000000000..7bf144fbb9 --- /dev/null +++ b/.github/workflows/maven-build.yml @@ -0,0 +1,96 @@ +# +# Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) +# +# 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. +# + +# This workflow will build a Java project with Maven +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven + +name: build on maven + +on: + watch: + types: [started] + pull_request: + types: [opened, reopened, edited, synchronize, ready_for_review] + push: + branches: + - main + - master + - '**' + + workflow_dispatch: + +jobs: + verify: + name: verify with maven + runs-on: ubuntu-latest + env: + MAVEN_OPTS: "-Xmx4096m -Xms2048m -XX:MaxMetaspaceSize=4096m -Xss8m" + SKIP_NPM_CONFIG: false + NPMREGISTRY: https://registry.npmjs.org + steps: + - uses: actions/checkout@v4 + + - name: Set up JDK 8 & 11 for x64 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + architecture: x64 + java-version: | + 8 + 11 + + - uses: s4u/maven-settings-action@v2.8.0 + with: + sonatypeSnapshots: true + + - name: Build the Maven verify phase + run: mvn -B -V clean verify -Pci --global-toolchains .github/workflows/toolchains.xml + + build: + name: Build and push + runs-on: ubuntu-latest + needs: verify + if: ${{ github.event_name == 'push' }} + env: + MAVEN_OPTS: "-Xmx4096m -Xms2048m -XX:MaxMetaspaceSize=4096m -Xss8m" + SKIP_NPM_CONFIG: false + NPMREGISTRY: https://registry.npmjs.org + steps: + - uses: actions/checkout@v4 + + - name: Set up JDK 8 & 11 for x64 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + architecture: x64 + java-version: | + 8 + 11 + + - uses: s4u/maven-settings-action@v2.8.0 + with: + servers: | + [{ + "id": "sonatype-nexus-snapshots", + "username": "${{ secrets.SONATYPE_BOT_USERNAME }}", + "password": "${{ secrets.SONATYPE_BOT_TOKEN }}" + }] + + - name: Build with toolchains + run: mvn -B -V clean install -DskipNpmConfig=false --global-toolchains .github/workflows/toolchains.xml + + - name: Deploy the artifact + run: mvn help:effective-settings -B -V -DskipTests=true -DskipNpmConfig=false deploy -e --global-toolchains .github/workflows/toolchains.xml diff --git a/.github/workflows/toolchains.xml b/.github/workflows/toolchains.xml new file mode 100644 index 0000000000..2cfee79899 --- /dev/null +++ b/.github/workflows/toolchains.xml @@ -0,0 +1,40 @@ + + + + + jdk + + 1.8 + OpenJDK + + + /usr/lib/jvm/temurin-8-jdk-amd64 + + + + jdk + + 11 + OpenJDK + + + /usr/lib/jvm/temurin-11-jdk-amd64 + + + diff --git a/addons/changelog/client-java/pom.xml b/addons/changelog/client-java/pom.xml index 2f1177cae8..b5c21c5b9e 100644 --- a/addons/changelog/client-java/pom.xml +++ b/addons/changelog/client-java/pom.xml @@ -20,7 +20,7 @@ indy-changelog org.commonjava.indy - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT 4.0.0 diff --git a/addons/changelog/common/pom.xml b/addons/changelog/common/pom.xml index cd7057c3c3..cb16474e94 100644 --- a/addons/changelog/common/pom.xml +++ b/addons/changelog/common/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-changelog - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-changelog-common Indy :: Add-Ons :: ChangeLog :: Common diff --git a/addons/changelog/ftests/pom.xml b/addons/changelog/ftests/pom.xml index ced20cdb4c..4a2c9c4bd8 100644 --- a/addons/changelog/ftests/pom.xml +++ b/addons/changelog/ftests/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-changelog - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-ftests-changelog diff --git a/addons/changelog/jaxrs/pom.xml b/addons/changelog/jaxrs/pom.xml index a5c0500beb..1af24dbf40 100644 --- a/addons/changelog/jaxrs/pom.xml +++ b/addons/changelog/jaxrs/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-changelog - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-changelog-jaxrs diff --git a/addons/changelog/pom.xml b/addons/changelog/pom.xml index 0d8f5c7235..d5cad9f011 100644 --- a/addons/changelog/pom.xml +++ b/addons/changelog/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-addons - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-changelog Indy :: Add-Ons :: ChangeLog :: Parent diff --git a/addons/content-browse/client-java/pom.xml b/addons/content-browse/client-java/pom.xml index e32476a070..88ed251615 100644 --- a/addons/content-browse/client-java/pom.xml +++ b/addons/content-browse/client-java/pom.xml @@ -20,7 +20,7 @@ indy-content-browse org.commonjava.indy - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT 4.0.0 diff --git a/addons/content-browse/common/pom.xml b/addons/content-browse/common/pom.xml index 54dc4de9d6..d952b7806f 100644 --- a/addons/content-browse/common/pom.xml +++ b/addons/content-browse/common/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-content-browse - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT indy-content-browse-common Indy :: Add-Ons :: Directory Content Browse :: Common diff --git a/addons/content-browse/common/src/main/java/org/commonjava/indy/content/browse/ContentBrowseController.java b/addons/content-browse/common/src/main/java/org/commonjava/indy/content/browse/ContentBrowseController.java index c3a80d2ece..e4f44a6082 100644 --- a/addons/content-browse/common/src/main/java/org/commonjava/indy/content/browse/ContentBrowseController.java +++ b/addons/content-browse/common/src/main/java/org/commonjava/indy/content/browse/ContentBrowseController.java @@ -21,8 +21,7 @@ import org.commonjava.indy.content.browse.model.ContentBrowseResult; import org.commonjava.indy.data.IndyDataException; import org.commonjava.indy.data.StoreDataManager; -import org.commonjava.indy.measure.annotation.Measure; -import org.commonjava.indy.measure.annotation.MetricNamed; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.StoreKey; import org.commonjava.indy.model.galley.KeyedLocation; @@ -44,7 +43,6 @@ import java.util.Set; import java.util.TreeMap; -import static org.commonjava.indy.measure.annotation.MetricNamed.DEFAULT; import static org.commonjava.maven.galley.util.PathUtils.normalize; import static org.commonjava.maven.galley.util.PathUtils.parentPath; diff --git a/addons/content-browse/common/src/main/resources/META-INF/beans.xml b/addons/content-browse/common/src/main/resources/META-INF/beans.xml index 5d417ccdd6..a1000f99d3 100644 --- a/addons/content-browse/common/src/main/resources/META-INF/beans.xml +++ b/addons/content-browse/common/src/main/resources/META-INF/beans.xml @@ -1,13 +1,20 @@ org.commonjava.indy indy-content-browse - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT indy-ftests-content-browse diff --git a/addons/content-browse/jaxrs/pom.xml b/addons/content-browse/jaxrs/pom.xml index 757ddd3627..5d113bf2d2 100644 --- a/addons/content-browse/jaxrs/pom.xml +++ b/addons/content-browse/jaxrs/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-content-browse - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT indy-content-browse-jaxrs diff --git a/addons/content-browse/jaxrs/src/main/java/org/commonjava/indy/content/browse/bind/jaxrs/ContentBrowseResource.java b/addons/content-browse/jaxrs/src/main/java/org/commonjava/indy/content/browse/bind/jaxrs/ContentBrowseResource.java index f6180407c7..03ae103c0f 100644 --- a/addons/content-browse/jaxrs/src/main/java/org/commonjava/indy/content/browse/bind/jaxrs/ContentBrowseResource.java +++ b/addons/content-browse/jaxrs/src/main/java/org/commonjava/indy/content/browse/bind/jaxrs/ContentBrowseResource.java @@ -22,7 +22,7 @@ import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.IndyWorkflowException; import org.commonjava.indy.bind.jaxrs.IndyResources; import org.commonjava.indy.bind.jaxrs.util.JaxRsRequestHelper; diff --git a/addons/content-browse/jaxrs/src/main/java/org/commonjava/indy/content/browse/servlet/ContentBrowseUIServlet.java b/addons/content-browse/jaxrs/src/main/java/org/commonjava/indy/content/browse/servlet/ContentBrowseUIServlet.java index 274ae463f7..097368e867 100644 --- a/addons/content-browse/jaxrs/src/main/java/org/commonjava/indy/content/browse/servlet/ContentBrowseUIServlet.java +++ b/addons/content-browse/jaxrs/src/main/java/org/commonjava/indy/content/browse/servlet/ContentBrowseUIServlet.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.content.browse.servlet; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.bind.jaxrs.ui.AbstractUIServlet; import org.commonjava.indy.conf.UIConfiguration; import org.commonjava.indy.content.browse.conf.ContentBrowseConfig; diff --git a/addons/content-browse/model-java/pom.xml b/addons/content-browse/model-java/pom.xml index 18c6ae5d09..89662f4eed 100644 --- a/addons/content-browse/model-java/pom.xml +++ b/addons/content-browse/model-java/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-content-browse - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT indy-content-browse-model-java Indy :: Add-Ons :: Directory Content Browse :: Java Domain Model diff --git a/addons/content-browse/pom.xml b/addons/content-browse/pom.xml index 6ab297685f..c7786aed0a 100644 --- a/addons/content-browse/pom.xml +++ b/addons/content-browse/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-addons - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT indy-content-browse Indy :: Add-Ons :: Directory Content Browse :: Parent diff --git a/addons/content-browse/ui/pom.xml b/addons/content-browse/ui/pom.xml index 110af35ae3..b0fd226651 100644 --- a/addons/content-browse/ui/pom.xml +++ b/addons/content-browse/ui/pom.xml @@ -20,7 +20,7 @@ indy-content-browse org.commonjava.indy - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT 4.0.0 diff --git a/addons/content-index/pom.xml b/addons/content-index/pom.xml index 6bd7738201..b6ee50dc94 100644 --- a/addons/content-index/pom.xml +++ b/addons/content-index/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-addons - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-content-index diff --git a/addons/content-index/src/main/java/org/commonjava/indy/content/index/ContentIndexActions.java b/addons/content-index/src/main/java/org/commonjava/indy/content/index/ContentIndexActions.java index ba33a74815..8999552eb8 100644 --- a/addons/content-index/src/main/java/org/commonjava/indy/content/index/ContentIndexActions.java +++ b/addons/content-index/src/main/java/org/commonjava/indy/content/index/ContentIndexActions.java @@ -18,7 +18,7 @@ import org.commonjava.cdi.util.weft.ThreadContext; import org.commonjava.indy.content.MergedContentAction; import org.commonjava.indy.content.StoreContentAction; -import org.commonjava.indy.measure.annotation.Measure; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.StoreKey; diff --git a/addons/content-index/src/main/java/org/commonjava/indy/content/index/DefaultContentIndexManager.java b/addons/content-index/src/main/java/org/commonjava/indy/content/index/DefaultContentIndexManager.java index 28a4f1e801..34fd59087d 100644 --- a/addons/content-index/src/main/java/org/commonjava/indy/content/index/DefaultContentIndexManager.java +++ b/addons/content-index/src/main/java/org/commonjava/indy/content/index/DefaultContentIndexManager.java @@ -19,11 +19,10 @@ import org.commonjava.indy.action.ShutdownAction; import org.commonjava.indy.content.index.conf.ContentIndexConfig; import org.commonjava.indy.data.StoreDataManager; -import org.commonjava.indy.measure.annotation.Measure; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.StoreKey; -import org.commonjava.indy.subsys.infinispan.BasicCacheHandle; import org.commonjava.indy.subsys.infinispan.CacheHandle; import org.commonjava.indy.util.LocationUtils; import org.commonjava.maven.galley.model.Transfer; diff --git a/addons/content-index/src/main/java/org/commonjava/indy/content/index/IndexingContentManagerDecorator.java b/addons/content-index/src/main/java/org/commonjava/indy/content/index/IndexingContentManagerDecorator.java index 70436bef45..5fb5ba6e10 100644 --- a/addons/content-index/src/main/java/org/commonjava/indy/content/index/IndexingContentManagerDecorator.java +++ b/addons/content-index/src/main/java/org/commonjava/indy/content/index/IndexingContentManagerDecorator.java @@ -21,7 +21,7 @@ import org.commonjava.indy.core.content.PathMaskChecker; import org.commonjava.indy.data.IndyDataException; import org.commonjava.indy.data.StoreDataManager; -import org.commonjava.indy.measure.annotation.Measure; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.HostedRepository; diff --git a/addons/diagnostics/client-java/pom.xml b/addons/diagnostics/client-java/pom.xml index 6f773d73d6..0b6ea7f082 100644 --- a/addons/diagnostics/client-java/pom.xml +++ b/addons/diagnostics/client-java/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-diagnostics - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-diagnostics-client-java Indy :: Add-Ons :: Diagnostic Tools :: Java Client diff --git a/addons/diagnostics/common/pom.xml b/addons/diagnostics/common/pom.xml index 80e7252b2f..5d1cd8a9f6 100644 --- a/addons/diagnostics/common/pom.xml +++ b/addons/diagnostics/common/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-diagnostics - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-diagnostics-common Indy :: Add-Ons :: Diagnostic Tools :: Common diff --git a/addons/diagnostics/common/src/main/java/org/commonjava/indy/diag/data/DiagnosticsManager.java b/addons/diagnostics/common/src/main/java/org/commonjava/indy/diag/data/DiagnosticsManager.java index abc2ea17fa..7e08667b47 100644 --- a/addons/diagnostics/common/src/main/java/org/commonjava/indy/diag/data/DiagnosticsManager.java +++ b/addons/diagnostics/common/src/main/java/org/commonjava/indy/diag/data/DiagnosticsManager.java @@ -49,7 +49,7 @@ import java.util.zip.ZipOutputStream; import static org.apache.commons.io.IOUtils.toInputStream; -import static org.apache.commons.lang.StringUtils.join; +import static org.apache.commons.lang3.StringUtils.join; /** * Created by jdcasey on 1/11/17. diff --git a/addons/diagnostics/ftests/pom.xml b/addons/diagnostics/ftests/pom.xml index 0cd3def46b..062cf48aa4 100644 --- a/addons/diagnostics/ftests/pom.xml +++ b/addons/diagnostics/ftests/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-diagnostics - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-ftests-diagnostics diff --git a/addons/diagnostics/jaxrs/pom.xml b/addons/diagnostics/jaxrs/pom.xml index 2fd23197bc..e6733f2fda 100644 --- a/addons/diagnostics/jaxrs/pom.xml +++ b/addons/diagnostics/jaxrs/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-diagnostics - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-diagnostics-jaxrs diff --git a/addons/diagnostics/pom.xml b/addons/diagnostics/pom.xml index ab7b6298f2..c090bf6e65 100644 --- a/addons/diagnostics/pom.xml +++ b/addons/diagnostics/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-addons - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-diagnostics Indy :: Add-Ons :: Diagnostic Tools :: Parent diff --git a/addons/dot-maven/common/pom.xml b/addons/dot-maven/common/pom.xml index 0ab1b2e390..a0230703dc 100644 --- a/addons/dot-maven/common/pom.xml +++ b/addons/dot-maven/common/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-dot-maven - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-dot-maven-common Indy :: Add-Ons :: Dot-Maven (.m2 WebDAV) :: Common Core diff --git a/addons/dot-maven/common/src/main/java/org/commonjava/indy/dotmaven/store/sub/ArtifactStoreSubStore.java b/addons/dot-maven/common/src/main/java/org/commonjava/indy/dotmaven/store/sub/ArtifactStoreSubStore.java index b73f96105e..64a1c775ba 100644 --- a/addons/dot-maven/common/src/main/java/org/commonjava/indy/dotmaven/store/sub/ArtifactStoreSubStore.java +++ b/addons/dot-maven/common/src/main/java/org/commonjava/indy/dotmaven/store/sub/ArtifactStoreSubStore.java @@ -52,7 +52,7 @@ import static org.apache.commons.io.IOUtils.closeQuietly; import static org.apache.commons.io.IOUtils.copy; -import static org.apache.commons.lang.StringUtils.isEmpty; +import static org.apache.commons.lang3.StringUtils.isEmpty; @ApplicationScoped @Named( "stores" ) diff --git a/addons/dot-maven/common/src/main/java/org/commonjava/indy/dotmaven/util/NameUtils.java b/addons/dot-maven/common/src/main/java/org/commonjava/indy/dotmaven/util/NameUtils.java index b34da39daa..3d06fd1115 100644 --- a/addons/dot-maven/common/src/main/java/org/commonjava/indy/dotmaven/util/NameUtils.java +++ b/addons/dot-maven/common/src/main/java/org/commonjava/indy/dotmaven/util/NameUtils.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.dotmaven.util; -import static org.apache.commons.lang.StringUtils.join; +import static org.apache.commons.lang3.StringUtils.join; import java.io.File; diff --git a/addons/dot-maven/common/src/main/java/org/commonjava/indy/dotmaven/util/SettingsURIMatcher.java b/addons/dot-maven/common/src/main/java/org/commonjava/indy/dotmaven/util/SettingsURIMatcher.java index 490314f6bf..737ce6e545 100644 --- a/addons/dot-maven/common/src/main/java/org/commonjava/indy/dotmaven/util/SettingsURIMatcher.java +++ b/addons/dot-maven/common/src/main/java/org/commonjava/indy/dotmaven/util/SettingsURIMatcher.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.dotmaven.util; -import static org.apache.commons.lang.StringUtils.isEmpty; +import static org.apache.commons.lang3.StringUtils.isEmpty; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/addons/dot-maven/common/src/main/java/org/commonjava/indy/dotmaven/util/StoreURIMatcher.java b/addons/dot-maven/common/src/main/java/org/commonjava/indy/dotmaven/util/StoreURIMatcher.java index 8e55c56562..d470c9f836 100644 --- a/addons/dot-maven/common/src/main/java/org/commonjava/indy/dotmaven/util/StoreURIMatcher.java +++ b/addons/dot-maven/common/src/main/java/org/commonjava/indy/dotmaven/util/StoreURIMatcher.java @@ -15,9 +15,9 @@ */ package org.commonjava.indy.dotmaven.util; -import static org.apache.commons.lang.StringUtils.isBlank; -import static org.apache.commons.lang.StringUtils.isEmpty; -import static org.apache.commons.lang.StringUtils.isNotBlank; +import static org.apache.commons.lang3.StringUtils.isBlank; +import static org.apache.commons.lang3.StringUtils.isEmpty; +import static org.apache.commons.lang3.StringUtils.isNotBlank; import static org.commonjava.indy.pkg.maven.model.MavenPackageTypeDescriptor.MAVEN_PKG_KEY; import java.util.regex.Matcher; diff --git a/addons/dot-maven/ftests/pom.xml b/addons/dot-maven/ftests/pom.xml index 89cff3f379..df238474f3 100644 --- a/addons/dot-maven/ftests/pom.xml +++ b/addons/dot-maven/ftests/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-dot-maven - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-ftests-dot-maven diff --git a/addons/dot-maven/jaxrs/pom.xml b/addons/dot-maven/jaxrs/pom.xml index ff1f9dbb34..622c78d1fd 100644 --- a/addons/dot-maven/jaxrs/pom.xml +++ b/addons/dot-maven/jaxrs/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-dot-maven - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-dot-maven-jaxrs diff --git a/addons/dot-maven/pom.xml b/addons/dot-maven/pom.xml index 5b6cffa300..278be18962 100644 --- a/addons/dot-maven/pom.xml +++ b/addons/dot-maven/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-addons - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-dot-maven diff --git a/addons/event-audit/common/pom.xml b/addons/event-audit/common/pom.xml index 3daa31158a..da1b873a12 100644 --- a/addons/event-audit/common/pom.xml +++ b/addons/event-audit/common/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-event-audit - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-event-audit-common diff --git a/addons/event-audit/pom.xml b/addons/event-audit/pom.xml index f6b883afa9..7eadf1b388 100644 --- a/addons/event-audit/pom.xml +++ b/addons/event-audit/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-addons - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-event-audit diff --git a/addons/folo/client-java/pom.xml b/addons/folo/client-java/pom.xml index 72502b1d35..263c86a9af 100644 --- a/addons/folo/client-java/pom.xml +++ b/addons/folo/client-java/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-folo - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-folo-client-java Indy :: Add-Ons :: Folo Usage Tracker :: Java Client diff --git a/addons/folo/common/pom.xml b/addons/folo/common/pom.xml index 4f310732a2..97398f1453 100644 --- a/addons/folo/common/pom.xml +++ b/addons/folo/common/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-folo - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-folo-common Indy :: Add-Ons :: Folo Usage Tracker :: Common diff --git a/addons/folo/common/src/main/java/org/commonjava/indy/folo/data/FoloLifecycleParticipant.java b/addons/folo/common/src/main/java/org/commonjava/indy/folo/data/FoloLifecycleParticipant.java index c2b44828d6..9369dc9324 100644 --- a/addons/folo/common/src/main/java/org/commonjava/indy/folo/data/FoloLifecycleParticipant.java +++ b/addons/folo/common/src/main/java/org/commonjava/indy/folo/data/FoloLifecycleParticipant.java @@ -29,6 +29,7 @@ import org.commonjava.indy.subsys.datafile.DataFileManager; @Named +@Deprecated public class FoloLifecycleParticipant implements StartupAction { @@ -69,7 +70,7 @@ public void start() { final DataFile dataFile = dataFileManager.getDataFile( ".gitignore" ); final List lines = dataFile.exists() ? dataFile.readLines() : new ArrayList(); - if ( !lines.contains( FOLO_DIRECTORY_IGNORE ) ) + if ( dataFile.exists() && !lines.contains( FOLO_DIRECTORY_IGNORE ) ) { lines.add( FOLO_DIRECTORY_IGNORE ); diff --git a/addons/folo/common/src/main/java/org/commonjava/indy/folo/data/FoloRecordCache.java b/addons/folo/common/src/main/java/org/commonjava/indy/folo/data/FoloRecordCache.java index 33223c46d6..fd20d7ce11 100644 --- a/addons/folo/common/src/main/java/org/commonjava/indy/folo/data/FoloRecordCache.java +++ b/addons/folo/common/src/main/java/org/commonjava/indy/folo/data/FoloRecordCache.java @@ -22,8 +22,7 @@ import org.commonjava.indy.folo.model.TrackedContent; import org.commonjava.indy.folo.model.TrackedContentEntry; import org.commonjava.indy.folo.model.TrackingKey; -import org.commonjava.indy.measure.annotation.Measure; -import org.commonjava.indy.measure.annotation.MetricNamed; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.indy.subsys.infinispan.CacheHandle; import org.infinispan.Cache; import org.infinispan.commons.api.BasicCache; @@ -43,8 +42,6 @@ import java.util.function.BiFunction; import java.util.stream.Collectors; -import static org.commonjava.indy.measure.annotation.MetricNamed.DEFAULT; - @ApplicationScoped public class FoloRecordCache { diff --git a/addons/folo/ftests/pom.xml b/addons/folo/ftests/pom.xml index 0483190c36..b6408006a6 100644 --- a/addons/folo/ftests/pom.xml +++ b/addons/folo/ftests/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-folo - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-ftests-folo diff --git a/addons/folo/ftests/src/main/java/org/commonjava/indy/folo/ftest/content/StoreInTrackedMemberAndVerifyExistsInTrackedGroupTest.java b/addons/folo/ftests/src/main/java/org/commonjava/indy/folo/ftest/content/StoreInTrackedMemberAndVerifyExistsInTrackedGroupTest.java index 0c8b4a6f61..af0a893f89 100644 --- a/addons/folo/ftests/src/main/java/org/commonjava/indy/folo/ftest/content/StoreInTrackedMemberAndVerifyExistsInTrackedGroupTest.java +++ b/addons/folo/ftests/src/main/java/org/commonjava/indy/folo/ftest/content/StoreInTrackedMemberAndVerifyExistsInTrackedGroupTest.java @@ -23,7 +23,7 @@ import java.io.ByteArrayInputStream; import java.io.InputStream; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.folo.client.IndyFoloContentClientModule; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.StoreKey; diff --git a/addons/folo/jaxrs/pom.xml b/addons/folo/jaxrs/pom.xml index 4a8a7cca4f..eb67bf2866 100644 --- a/addons/folo/jaxrs/pom.xml +++ b/addons/folo/jaxrs/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-folo - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-folo-jaxrs diff --git a/addons/folo/jaxrs/src/main/java/org/commonjava/indy/folo/bind/jaxrs/FoloMavenContentAccessResource.java b/addons/folo/jaxrs/src/main/java/org/commonjava/indy/folo/bind/jaxrs/FoloMavenContentAccessResource.java index 1129d1d1ea..251858ee80 100644 --- a/addons/folo/jaxrs/src/main/java/org/commonjava/indy/folo/bind/jaxrs/FoloMavenContentAccessResource.java +++ b/addons/folo/jaxrs/src/main/java/org/commonjava/indy/folo/bind/jaxrs/FoloMavenContentAccessResource.java @@ -26,12 +26,11 @@ import org.commonjava.indy.core.bind.jaxrs.ContentAccessHandler; import org.commonjava.indy.core.bind.jaxrs.util.RequestUtils; import org.commonjava.indy.folo.model.TrackingKey; -import org.commonjava.indy.metrics.RequestContextHelper; +import org.commonjava.indy.util.RequestContextHelper; import org.commonjava.indy.model.core.AccessChannel; import org.commonjava.maven.galley.event.EventMetadata; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.commonjava.indy.metrics.RequestContextHelper; import javax.inject.Inject; import javax.servlet.http.HttpServletRequest; @@ -47,7 +46,7 @@ import javax.ws.rs.core.UriInfo; import static org.commonjava.indy.IndyContentConstants.CHECK_CACHE_ONLY; -import static org.commonjava.indy.metrics.RequestContextHelper.CONTENT_TRACKING_ID; +import static org.commonjava.indy.util.RequestContextHelper.CONTENT_TRACKING_ID; import static org.commonjava.indy.folo.ctl.FoloConstants.ACCESS_CHANNEL; import static org.commonjava.indy.folo.ctl.FoloConstants.TRACKING_KEY; import static org.commonjava.indy.pkg.PackageTypeConstants.PKG_TYPE_MAVEN; diff --git a/addons/folo/jaxrs/src/main/java/org/commonjava/indy/folo/bind/jaxrs/FoloNPMContentAccessResource.java b/addons/folo/jaxrs/src/main/java/org/commonjava/indy/folo/bind/jaxrs/FoloNPMContentAccessResource.java index 6ffc21dc88..f491b9a060 100644 --- a/addons/folo/jaxrs/src/main/java/org/commonjava/indy/folo/bind/jaxrs/FoloNPMContentAccessResource.java +++ b/addons/folo/jaxrs/src/main/java/org/commonjava/indy/folo/bind/jaxrs/FoloNPMContentAccessResource.java @@ -25,14 +25,13 @@ import org.commonjava.indy.bind.jaxrs.util.REST; import org.commonjava.indy.core.bind.jaxrs.util.RequestUtils; import org.commonjava.indy.folo.model.TrackingKey; -import org.commonjava.indy.metrics.RequestContextHelper; +import org.commonjava.indy.util.RequestContextHelper; import org.commonjava.indy.model.core.AccessChannel; import org.commonjava.indy.pkg.npm.inject.NPMContentHandler; import org.commonjava.indy.pkg.npm.jaxrs.NPMContentAccessHandler; import org.commonjava.maven.galley.event.EventMetadata; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.commonjava.indy.metrics.RequestContextHelper; import javax.inject.Inject; import javax.servlet.http.HttpServletRequest; @@ -49,7 +48,7 @@ import java.nio.file.Paths; import static org.commonjava.indy.IndyContentConstants.CHECK_CACHE_ONLY; -import static org.commonjava.indy.metrics.RequestContextHelper.CONTENT_TRACKING_ID; +import static org.commonjava.indy.util.RequestContextHelper.CONTENT_TRACKING_ID; import static org.commonjava.indy.folo.ctl.FoloConstants.ACCESS_CHANNEL; import static org.commonjava.indy.folo.ctl.FoloConstants.TRACKING_KEY; import static org.commonjava.indy.pkg.PackageTypeConstants.PKG_TYPE_NPM; diff --git a/addons/folo/model-java/pom.xml b/addons/folo/model-java/pom.xml index 697dadb1c6..570f85691a 100644 --- a/addons/folo/model-java/pom.xml +++ b/addons/folo/model-java/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-folo - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-folo-model-java Indy :: Add-Ons :: Folo Usage Tracker :: Java Domain Model diff --git a/addons/folo/pom.xml b/addons/folo/pom.xml index a94b281106..d592f9bca3 100644 --- a/addons/folo/pom.xml +++ b/addons/folo/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-addons - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-folo Indy :: Add-Ons :: Folo Usage Tracker :: Parent diff --git a/addons/hosted-by-archive/client-java/pom.xml b/addons/hosted-by-archive/client-java/pom.xml index 461104bce2..17a77620d2 100644 --- a/addons/hosted-by-archive/client-java/pom.xml +++ b/addons/hosted-by-archive/client-java/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-hosted-by-archive - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-hosted-by-archive-client-java Indy :: Add-Ons :: Hosted By Archive :: Java Client diff --git a/addons/hosted-by-archive/client-java/src/main/java/org/commonjava/indy/hostedbyarc/client/IndyHostedByArchiveClientModule.java b/addons/hosted-by-archive/client-java/src/main/java/org/commonjava/indy/hostedbyarc/client/IndyHostedByArchiveClientModule.java index 68f0d82e78..be0e9b4e0c 100644 --- a/addons/hosted-by-archive/client-java/src/main/java/org/commonjava/indy/hostedbyarc/client/IndyHostedByArchiveClientModule.java +++ b/addons/hosted-by-archive/client-java/src/main/java/org/commonjava/indy/hostedbyarc/client/IndyHostedByArchiveClientModule.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.hostedbyarc.client; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpResponse; import org.apache.http.StatusLine; import org.apache.http.client.methods.HttpPost; diff --git a/addons/hosted-by-archive/common/pom.xml b/addons/hosted-by-archive/common/pom.xml index 84a16f4706..d9e10e9b0f 100644 --- a/addons/hosted-by-archive/common/pom.xml +++ b/addons/hosted-by-archive/common/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-hosted-by-archive - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-hosted-by-archive-common Indy :: Add-Ons :: Hosted By Archive :: Common diff --git a/addons/hosted-by-archive/common/src/main/java/org/commonjava/indy/hostedbyarc/HostedByArchiveManager.java b/addons/hosted-by-archive/common/src/main/java/org/commonjava/indy/hostedbyarc/HostedByArchiveManager.java index ffd072e269..7499accd15 100644 --- a/addons/hosted-by-archive/common/src/main/java/org/commonjava/indy/hostedbyarc/HostedByArchiveManager.java +++ b/addons/hosted-by-archive/common/src/main/java/org/commonjava/indy/hostedbyarc/HostedByArchiveManager.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.hostedbyarc; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.IndyWorkflowException; import org.commonjava.indy.audit.ChangeSummary; import org.commonjava.indy.content.ContentManager; diff --git a/addons/hosted-by-archive/ftests/pom.xml b/addons/hosted-by-archive/ftests/pom.xml index 26fe5f18a7..5a751d7ee2 100644 --- a/addons/hosted-by-archive/ftests/pom.xml +++ b/addons/hosted-by-archive/ftests/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-hosted-by-archive - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-ftests-hosted-by-archive diff --git a/addons/hosted-by-archive/jaxrs/pom.xml b/addons/hosted-by-archive/jaxrs/pom.xml index e1d447755e..7169c8e244 100644 --- a/addons/hosted-by-archive/jaxrs/pom.xml +++ b/addons/hosted-by-archive/jaxrs/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-hosted-by-archive - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-hosted-by-archive-jaxrs diff --git a/addons/hosted-by-archive/jaxrs/src/main/java/org/commonjava/indy/hostedbyarc/bind/jaxrs/IndyHostedByArchiveResource.java b/addons/hosted-by-archive/jaxrs/src/main/java/org/commonjava/indy/hostedbyarc/bind/jaxrs/IndyHostedByArchiveResource.java index 3ac4c03585..0310940a90 100644 --- a/addons/hosted-by-archive/jaxrs/src/main/java/org/commonjava/indy/hostedbyarc/bind/jaxrs/IndyHostedByArchiveResource.java +++ b/addons/hosted-by-archive/jaxrs/src/main/java/org/commonjava/indy/hostedbyarc/bind/jaxrs/IndyHostedByArchiveResource.java @@ -22,7 +22,7 @@ import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.IndyWorkflowException; import org.commonjava.indy.bind.jaxrs.IndyResources; import org.commonjava.indy.bind.jaxrs.SecurityManager; diff --git a/addons/hosted-by-archive/pom.xml b/addons/hosted-by-archive/pom.xml index 12831ed86c..0071e9fac0 100644 --- a/addons/hosted-by-archive/pom.xml +++ b/addons/hosted-by-archive/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-addons - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-hosted-by-archive Indy :: Add-Ons :: Hosted By Archive :: Parent diff --git a/addons/httprox/common/pom.xml b/addons/httprox/common/pom.xml index 40670bd56a..6108a833a2 100644 --- a/addons/httprox/common/pom.xml +++ b/addons/httprox/common/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-httprox - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-httprox-common Indy :: Add-Ons :: HTTProx (HTTP Proxy) :: Common Core diff --git a/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/data/HttProxRegisterSpecialPathStartupAction.java b/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/data/HttProxRegisterSpecialPathStartupAction.java index 8f0d2cfdf4..67c22686fd 100644 --- a/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/data/HttProxRegisterSpecialPathStartupAction.java +++ b/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/data/HttProxRegisterSpecialPathStartupAction.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.httprox.data; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.action.IndyLifecycleException; import org.commonjava.indy.action.StartupAction; import org.commonjava.indy.content.SpecialPathSetProducer; @@ -31,7 +31,7 @@ import java.util.ArrayList; import java.util.List; -import static org.apache.commons.lang.StringUtils.isNotBlank; +import static org.apache.commons.lang3.StringUtils.isNotBlank; import static org.commonjava.maven.galley.io.SpecialPathConstants.PKG_TYPE_GENERIC_HTTP; /** diff --git a/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/handler/ProxyAcceptHandler.java b/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/handler/ProxyAcceptHandler.java index 9c89c77980..c071989ce7 100644 --- a/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/handler/ProxyAcceptHandler.java +++ b/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/handler/ProxyAcceptHandler.java @@ -15,24 +15,20 @@ */ package org.commonjava.indy.httprox.handler; -import com.codahale.metrics.MetricRegistry; - -import org.commonjava.cdi.util.weft.ExecutorConfig; -import org.commonjava.cdi.util.weft.WeftExecutorService; -import org.commonjava.cdi.util.weft.WeftManaged; import org.commonjava.indy.bind.jaxrs.MDCManager; -import org.commonjava.indy.metrics.RequestContextHelper; +import org.commonjava.indy.util.RequestContextHelper; import org.commonjava.indy.core.ctl.ContentController; import org.commonjava.indy.data.StoreDataManager; import org.commonjava.indy.httprox.conf.HttproxConfig; import org.commonjava.indy.httprox.keycloak.KeycloakProxyAuthenticator; -import org.commonjava.indy.metrics.conf.IndyMetricsConfig; +import org.commonjava.indy.subsys.metrics.conf.IndyMetricsConfig; import org.commonjava.indy.model.core.AccessChannel; -import org.commonjava.indy.sli.metrics.GoldenSignalsMetricSet; +import org.commonjava.indy.sli.metrics.IndyGoldenSignalsMetricSet; import org.commonjava.indy.subsys.infinispan.CacheProducer; import org.commonjava.indy.subsys.template.IndyGroovyException; import org.commonjava.indy.subsys.template.ScriptEngine; import org.commonjava.maven.galley.spi.cache.CacheProvider; +import org.commonjava.o11yphant.metrics.MetricsManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xnio.ChannelListener; @@ -44,10 +40,10 @@ import javax.inject.Inject; import java.io.IOException; -import static org.commonjava.indy.metrics.RequestContextHelper.PACKAGE_TYPE; -import static org.commonjava.indy.metrics.RequestContextHelper.REQUEST_PHASE; -import static org.commonjava.indy.metrics.RequestContextHelper.REQUEST_PHASE_START; -import static org.commonjava.indy.metrics.RequestContextHelper.setContext; +import static org.commonjava.indy.util.RequestContextHelper.PACKAGE_TYPE; +import static org.commonjava.indy.util.RequestContextHelper.REQUEST_PHASE; +import static org.commonjava.indy.util.RequestContextHelper.REQUEST_PHASE_START; +import static org.commonjava.indy.util.RequestContextHelper.setContext; import static org.commonjava.indy.httprox.util.HttpProxyConstants.PROXY_METRIC_LOGGER; import static org.commonjava.indy.pkg.PackageTypeConstants.PKG_TYPE_GENERIC_HTTP; @@ -83,7 +79,7 @@ public class ProxyAcceptHandler private MDCManager mdcManager; @Inject - MetricRegistry metricRegistry; + private MetricsManager metricsManager; @Inject private IndyMetricsConfig metricsConfig; @@ -92,7 +88,7 @@ public class ProxyAcceptHandler private CacheProducer cacheProducer; @Inject - private GoldenSignalsMetricSet sliMetricSet; + private IndyGoldenSignalsMetricSet sliMetricSet; @Inject private ProxyTransfersExecutor proxyExecutor; @@ -104,7 +100,7 @@ protected ProxyAcceptHandler() public ProxyAcceptHandler( HttproxConfig config, StoreDataManager storeManager, ContentController contentController, KeycloakProxyAuthenticator proxyAuthenticator, CacheProvider cacheProvider, ScriptEngine scriptEngine, MDCManager mdcManager, - IndyMetricsConfig metricsConfig, MetricRegistry metricRegistry, + IndyMetricsConfig metricsConfig, MetricsManager metricsManager, CacheProducer cacheProducer, ProxyTransfersExecutor executor ) { this.config = config; @@ -115,7 +111,7 @@ public ProxyAcceptHandler( HttproxConfig config, StoreDataManager storeManager, this.scriptEngine = scriptEngine; this.mdcManager = mdcManager; this.metricsConfig = metricsConfig; - this.metricRegistry = metricRegistry; + this.metricsManager = metricsManager; this.cacheProducer = cacheProducer; this.proxyExecutor = executor; } @@ -179,7 +175,7 @@ public void handleEvent( AcceptingChannel channel ) final ProxyResponseWriter writer = new ProxyResponseWriter( config, storeManager, contentController, proxyAuthenticator, cacheProvider, mdcManager, creator, accepted, - metricsConfig, metricRegistry, sliMetricSet, cacheProducer, start, + metricsConfig, metricsManager, sliMetricSet, cacheProducer, start, proxyExecutor.getExecutor() ); logger.debug( "Setting writer: {}", writer ); diff --git a/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/handler/ProxyResponseWriter.java b/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/handler/ProxyResponseWriter.java index 899aee266e..f63ffc0925 100644 --- a/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/handler/ProxyResponseWriter.java +++ b/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/handler/ProxyResponseWriter.java @@ -15,14 +15,12 @@ */ package org.commonjava.indy.httprox.handler; -import com.codahale.metrics.MetricRegistry; -import com.codahale.metrics.Timer; import org.apache.commons.lang3.ClassUtils; import org.apache.http.HttpRequest; import org.apache.http.RequestLine; import org.commonjava.indy.IndyWorkflowException; import org.commonjava.indy.bind.jaxrs.MDCManager; -import org.commonjava.indy.metrics.RequestContextHelper; +import org.commonjava.indy.util.RequestContextHelper; import org.commonjava.indy.core.ctl.ContentController; import org.commonjava.indy.data.IndyDataException; import org.commonjava.indy.data.StoreDataManager; @@ -33,9 +31,9 @@ import org.commonjava.indy.httprox.util.HttpConduitWrapper; import org.commonjava.indy.httprox.util.ProxyMeter; import org.commonjava.indy.httprox.util.ProxyResponseHelper; -import org.commonjava.indy.metrics.conf.IndyMetricsConfig; +import org.commonjava.indy.subsys.metrics.conf.IndyMetricsConfig; import org.commonjava.indy.model.core.ArtifactStore; -import org.commonjava.indy.sli.metrics.GoldenSignalsMetricSet; +import org.commonjava.indy.sli.metrics.IndyGoldenSignalsMetricSet; import org.commonjava.indy.subsys.http.HttpWrapper; import org.commonjava.indy.subsys.http.util.UserPass; import org.commonjava.indy.subsys.infinispan.CacheHandle; @@ -43,6 +41,8 @@ import org.commonjava.indy.util.ApplicationHeader; import org.commonjava.indy.util.ApplicationStatus; import org.commonjava.maven.galley.spi.cache.CacheProvider; +import org.commonjava.o11yphant.metrics.api.Timer; +import org.commonjava.o11yphant.metrics.MetricsManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xnio.ChannelListener; @@ -54,19 +54,12 @@ import java.net.SocketAddress; import java.net.URL; import java.nio.channels.SocketChannel; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; -import javax.inject.Inject; - import org.commonjava.cdi.util.weft.WeftExecutorService; -import static com.codahale.metrics.MetricRegistry.name; import static java.lang.Integer.parseInt; import static org.apache.commons.codec.digest.DigestUtils.sha256Hex; -import static org.commonjava.indy.metrics.RequestContextHelper.getContext; import static org.commonjava.indy.httprox.util.HttpProxyConstants.ALLOW_HEADER_VALUE; import static org.commonjava.indy.httprox.util.HttpProxyConstants.CONNECT_METHOD; import static org.commonjava.indy.httprox.util.HttpProxyConstants.GET_METHOD; @@ -77,6 +70,7 @@ import static org.commonjava.indy.subsys.http.util.UserPass.parse; import static org.commonjava.indy.util.ApplicationHeader.proxy_authenticate; import static org.commonjava.indy.util.ApplicationStatus.PROXY_AUTHENTICATION_REQUIRED; +import static org.commonjava.o11yphant.metrics.util.NameUtils.name; public final class ProxyResponseWriter implements ChannelListener @@ -118,9 +112,9 @@ public final class ProxyResponseWriter private final MDCManager mdcManager; - private final MetricRegistry metricRegistry; + private final MetricsManager metricManager; - private GoldenSignalsMetricSet sliMetricSet; + private IndyGoldenSignalsMetricSet sliMetricSet; private long startNanos; @@ -139,7 +133,7 @@ public ProxyResponseWriter( final HttproxConfig config, final StoreDataManager s final KeycloakProxyAuthenticator proxyAuthenticator, final CacheProvider cacheProvider, final MDCManager mdcManager, final ProxyRepositoryCreator repoCreator, final StreamConnection accepted, final IndyMetricsConfig metricsConfig, - final MetricRegistry metricRegistry, final GoldenSignalsMetricSet sliMetricSet, + final MetricsManager metricManager, final IndyGoldenSignalsMetricSet sliMetricSet, final CacheProducer cacheProducer, final long start, final WeftExecutorService executor ) { @@ -153,7 +147,7 @@ public ProxyResponseWriter( final HttproxConfig config, final StoreDataManager s this.peerAddress = accepted.getPeerAddress(); this.sourceChannel = accepted.getSourceChannel(); this.metricsConfig = metricsConfig; - this.metricRegistry = metricRegistry; + this.metricManager = metricManager; this.sliMetricSet = sliMetricSet; startNanos = start; this.cls = ClassUtils.getAbbreviatedName( getClass().getName(), 1 ); // e.g., foo.bar.ClassA -> f.b.ClassA @@ -169,14 +163,14 @@ public void setProxyRequestReader( ProxyRequestReader proxyRequestReader ) @Override public void handleEvent( final ConduitStreamSinkChannel channel ) { - if ( metricsConfig == null || metricRegistry == null ) + if ( metricsConfig == null || metricManager == null ) { doHandleEvent( channel ); return; } - Timer timer = metricRegistry.timer( name( metricsConfig.getNodePrefix(), cls, "handleEvent" ) ); - Timer.Context timerContext = timer.time(); + Timer.Context timerContext = + metricManager.startTimer( name( metricsConfig.getNodePrefix(), cls, "handleEvent" ) ); try { doHandleEvent( channel ); @@ -243,7 +237,7 @@ private void doHandleEvent( final ConduitStreamSinkChannel sinkChannel ) { ProxyResponseHelper proxyResponseHelper = new ProxyResponseHelper( httpRequest, config, contentController, repoCreator, storeManager, - metricsConfig, metricRegistry, cls ); + metricsConfig, metricManager, cls ); try { if ( repoCreator == null ) diff --git a/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/util/HttpConduitWrapper.java b/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/util/HttpConduitWrapper.java index 467bd8d255..c4beaf9f24 100644 --- a/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/util/HttpConduitWrapper.java +++ b/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/util/HttpConduitWrapper.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.httprox.util; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.http.Header; import org.apache.http.HttpRequest; import org.commonjava.indy.IndyWorkflowException; @@ -39,8 +39,8 @@ import java.util.List; import java.util.Map; -import static org.commonjava.indy.metrics.RequestContextHelper.HTTP_STATUS; -import static org.commonjava.indy.metrics.RequestContextHelper.setContext; +import static org.commonjava.indy.util.RequestContextHelper.HTTP_STATUS; +import static org.commonjava.indy.util.RequestContextHelper.setContext; import static org.commonjava.indy.httprox.util.ChannelUtils.DEFAULT_READ_BUF_SIZE; import static org.commonjava.indy.httprox.util.ChannelUtils.flush; import static org.commonjava.indy.httprox.util.ChannelUtils.write; @@ -203,7 +203,7 @@ public void writeExistingTransfer( Transfer txfr, boolean writeBody, String path writeHeader( ApplicationHeader.last_modified, lastMod ); } - String contentType = metadata.getContentType(); + String contentType = metadata != null ? metadata.getContentType() : null; writeHeader( ApplicationHeader.content_type, contentType != null ? contentType : contentController.getContentType( path ) ); diff --git a/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/util/HttpProxyConstants.java b/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/util/HttpProxyConstants.java index b5890a03db..0e095e1612 100644 --- a/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/util/HttpProxyConstants.java +++ b/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/util/HttpProxyConstants.java @@ -20,7 +20,7 @@ import java.util.HashSet; import java.util.Set; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; public final class HttpProxyConstants { diff --git a/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/util/ProxyMeter.java b/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/util/ProxyMeter.java index 942c557bcf..eebdfca78e 100644 --- a/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/util/ProxyMeter.java +++ b/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/util/ProxyMeter.java @@ -15,21 +15,21 @@ */ package org.commonjava.indy.httprox.util; -import org.commonjava.indy.sli.metrics.GoldenSignalsMetricSet; +import org.commonjava.indy.sli.metrics.IndyGoldenSignalsMetricSet; import org.slf4j.Logger; -import org.commonjava.indy.metrics.RequestContextHelper; +import org.commonjava.indy.util.RequestContextHelper; import java.net.SocketAddress; import static java.lang.Integer.parseInt; -import static org.commonjava.indy.metrics.RequestContextHelper.HTTP_METHOD; -import static org.commonjava.indy.metrics.RequestContextHelper.HTTP_STATUS; -import static org.commonjava.indy.metrics.RequestContextHelper.REQUEST_LATENCY_NS; -import static org.commonjava.indy.metrics.RequestContextHelper.REQUEST_PHASE; -import static org.commonjava.indy.metrics.RequestContextHelper.REQUEST_PHASE_END; -import static org.commonjava.indy.metrics.RequestContextHelper.getContext; -import static org.commonjava.indy.metrics.RequestContextHelper.setContext; -import static org.commonjava.indy.metrics.TrafficClassifierConstants.FN_CONTENT_GENERIC; +import static org.commonjava.indy.util.RequestContextHelper.HTTP_METHOD; +import static org.commonjava.indy.util.RequestContextHelper.HTTP_STATUS; +import static org.commonjava.indy.util.RequestContextHelper.REQUEST_LATENCY_NS; +import static org.commonjava.indy.util.RequestContextHelper.REQUEST_PHASE; +import static org.commonjava.indy.util.RequestContextHelper.REQUEST_PHASE_END; +import static org.commonjava.indy.util.RequestContextHelper.getContext; +import static org.commonjava.indy.util.RequestContextHelper.setContext; +import static org.commonjava.indy.subsys.metrics.IndyTrafficClassifierConstants.FN_CONTENT_GENERIC; public class ProxyMeter { @@ -41,13 +41,13 @@ public class ProxyMeter private final long startNanos; - private final GoldenSignalsMetricSet sliMetricSet; + private final IndyGoldenSignalsMetricSet sliMetricSet; private final Logger restLogger; private final SocketAddress peerAddress; - public ProxyMeter( final String method, final String requestLine, final long startNanos, final GoldenSignalsMetricSet sliMetricSet, final Logger restLogger, + public ProxyMeter( final String method, final String requestLine, final long startNanos, final IndyGoldenSignalsMetricSet sliMetricSet, final Logger restLogger, final SocketAddress peerAddress ) { this.method = method; diff --git a/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/util/ProxyResponseHelper.java b/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/util/ProxyResponseHelper.java index 8793a3ee6a..b2e4bffc78 100644 --- a/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/util/ProxyResponseHelper.java +++ b/addons/httprox/common/src/main/java/org/commonjava/indy/httprox/util/ProxyResponseHelper.java @@ -15,9 +15,7 @@ */ package org.commonjava.indy.httprox.util; -import com.codahale.metrics.MetricRegistry; -import com.codahale.metrics.Timer; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpRequest; import org.commonjava.indy.IndyWorkflowException; import org.commonjava.indy.audit.ChangeSummary; @@ -31,7 +29,7 @@ import org.commonjava.indy.httprox.handler.AbstractProxyRepositoryCreator; import org.commonjava.indy.httprox.handler.ProxyCreationResult; import org.commonjava.indy.httprox.handler.ProxyRepositoryCreator; -import org.commonjava.indy.metrics.conf.IndyMetricsConfig; +import org.commonjava.indy.subsys.metrics.conf.IndyMetricsConfig; import org.commonjava.indy.model.core.AccessChannel; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.Group; @@ -45,6 +43,8 @@ import org.commonjava.maven.galley.TransferException; import org.commonjava.maven.galley.event.EventMetadata; import org.commonjava.maven.galley.model.Transfer; +import org.commonjava.o11yphant.metrics.api.Timer; +import org.commonjava.o11yphant.metrics.MetricsManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -54,17 +54,15 @@ import java.util.function.Predicate; import java.util.stream.Collectors; -import static com.codahale.metrics.MetricRegistry.name; -import static java.lang.Integer.parseInt; -import static org.commonjava.indy.metrics.RequestContextHelper.CONTENT_ENTRY_POINT; -import static org.commonjava.indy.metrics.RequestContextHelper.METADATA_CONTENT; -import static org.commonjava.indy.metrics.RequestContextHelper.PACKAGE_TYPE; -import static org.commonjava.indy.metrics.RequestContextHelper.PATH; -import static org.commonjava.indy.metrics.RequestContextHelper.getContext; -import static org.commonjava.indy.metrics.RequestContextHelper.setContext; +import static org.commonjava.indy.util.RequestContextHelper.CONTENT_ENTRY_POINT; +import static org.commonjava.indy.util.RequestContextHelper.METADATA_CONTENT; +import static org.commonjava.indy.util.RequestContextHelper.PACKAGE_TYPE; +import static org.commonjava.indy.util.RequestContextHelper.PATH; +import static org.commonjava.indy.util.RequestContextHelper.setContext; import static org.commonjava.indy.model.core.ArtifactStore.TRACKING_ID; import static org.commonjava.indy.model.core.GenericPackageTypeDescriptor.GENERIC_PKG_KEY; import static org.commonjava.maven.galley.io.SpecialPathConstants.PKG_TYPE_GENERIC_HTTP; +import static org.commonjava.o11yphant.metrics.util.NameUtils.name; /** * Created by ruhan on 9/20/18. @@ -83,7 +81,7 @@ public class ProxyResponseHelper private final IndyMetricsConfig metricsConfig; - private final MetricRegistry metricRegistry; + private final MetricsManager metricsManager; private final String cls; @@ -94,7 +92,8 @@ public class ProxyResponseHelper private boolean transferred; public ProxyResponseHelper( HttpRequest httpRequest, HttproxConfig config, ContentController contentController, - ProxyRepositoryCreator repoCreator, StoreDataManager storeManager, IndyMetricsConfig metricsConfig, MetricRegistry metricRegistry, String cls ) + ProxyRepositoryCreator repoCreator, StoreDataManager storeManager, + IndyMetricsConfig metricsConfig, MetricsManager metricsManager, String cls ) { this.httpRequest = httpRequest; this.config = config; @@ -102,7 +101,7 @@ public ProxyResponseHelper( HttpRequest httpRequest, HttproxConfig config, Conte this.repoCreator = repoCreator; this.storeManager = storeManager; this.metricsConfig = metricsConfig; - this.metricRegistry = metricRegistry; + this.metricsManager = metricsManager; this.cls = cls; } @@ -110,15 +109,15 @@ public ArtifactStore getArtifactStore( String trackingId, final URL url ) throws IndyDataException { ArtifactStore store = null; - if ( metricsConfig == null || metricRegistry == null ) + if ( metricsConfig == null || metricsManager == null ) { store = doGetArtifactStore( trackingId, url ); } if ( store == null ) { - Timer timer = metricRegistry.timer( name( metricsConfig.getNodePrefix(), cls, "getArtifactStore" ) ); - Timer.Context timerContext = timer.time(); + Timer.Context timerContext = + metricsManager.startTimer( name( metricsConfig.getNodePrefix(), cls, "getArtifactStore" ) ); try { store = doGetArtifactStore( trackingId, url ); @@ -295,14 +294,14 @@ public void transfer( final HttpConduitWrapper http, final ArtifactStore store, setContext( PATH, path ); setContext( METADATA_CONTENT, Boolean.toString( false ) ); - if ( metricsConfig == null || metricRegistry == null ) + if ( metricsConfig == null || metricsManager == null ) { doTransfer( http, store, path, writeBody, proxyUserPass, meter ); return; } - Timer timer = metricRegistry.timer( name( metricsConfig.getNodePrefix(), cls, "transfer" ) ); - Timer.Context timerContext = timer.time(); + Timer.Context timerContext = + metricsManager.startTimer( name( metricsConfig.getNodePrefix(), cls, "transfer" ) ); try { doTransfer( http, store, path, writeBody, proxyUserPass, meter ); diff --git a/addons/httprox/ftests/pom.xml b/addons/httprox/ftests/pom.xml index d93a27c7ec..45988d1ce2 100644 --- a/addons/httprox/ftests/pom.xml +++ b/addons/httprox/ftests/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-httprox - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-ftests-httprox diff --git a/addons/httprox/jaxrs/pom.xml b/addons/httprox/jaxrs/pom.xml index f1d1674a1c..36a6443ecd 100644 --- a/addons/httprox/jaxrs/pom.xml +++ b/addons/httprox/jaxrs/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-httprox - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-httprox-jaxrs Indy :: Add-Ons :: HTTProx (HTTP Proxy) :: JAX-RS Handlers diff --git a/addons/httprox/pom.xml b/addons/httprox/pom.xml index 771aa8fe2c..0c512bac71 100644 --- a/addons/httprox/pom.xml +++ b/addons/httprox/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-addons - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-httprox diff --git a/addons/implied-repos/client-java/pom.xml b/addons/implied-repos/client-java/pom.xml index c55d908592..73f229c055 100644 --- a/addons/implied-repos/client-java/pom.xml +++ b/addons/implied-repos/client-java/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-implied-repos - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-implied-repos-client-java Indy :: Add-Ons :: Implied Repositories :: Java Client diff --git a/addons/implied-repos/common/pom.xml b/addons/implied-repos/common/pom.xml index a07167e7ae..f53c1872d3 100644 --- a/addons/implied-repos/common/pom.xml +++ b/addons/implied-repos/common/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-implied-repos - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-implied-repos-common Indy :: Add-Ons :: Implied Repositories :: Common diff --git a/addons/implied-repos/common/src/main/java/org/commonjava/indy/implrepo/change/ImpliedRepositoryDetector.java b/addons/implied-repos/common/src/main/java/org/commonjava/indy/implrepo/change/ImpliedRepositoryDetector.java index 01d813a3f3..7a1b09e23f 100644 --- a/addons/implied-repos/common/src/main/java/org/commonjava/indy/implrepo/change/ImpliedRepositoryDetector.java +++ b/addons/implied-repos/common/src/main/java/org/commonjava/indy/implrepo/change/ImpliedRepositoryDetector.java @@ -16,7 +16,7 @@ package org.commonjava.indy.implrepo.change; import com.fasterxml.jackson.core.JsonProcessingException; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.cdi.util.weft.ExecutorConfig; import org.commonjava.cdi.util.weft.WeftManaged; import org.commonjava.indy.audit.ChangeSummary; diff --git a/addons/implied-repos/common/src/main/java/org/commonjava/indy/implrepo/conf/ImpliedRepoConfig.java b/addons/implied-repos/common/src/main/java/org/commonjava/indy/implrepo/conf/ImpliedRepoConfig.java index a7d4c4750e..32dd075347 100644 --- a/addons/implied-repos/common/src/main/java/org/commonjava/indy/implrepo/conf/ImpliedRepoConfig.java +++ b/addons/implied-repos/common/src/main/java/org/commonjava/indy/implrepo/conf/ImpliedRepoConfig.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.implrepo.conf; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.conf.IndyConfigInfo; import org.commonjava.propulsor.config.ConfigurationException; import org.commonjava.propulsor.config.annotation.SectionName; diff --git a/addons/implied-repos/common/src/main/java/org/commonjava/indy/implrepo/data/ImpliedReposQueryDelegate.java b/addons/implied-repos/common/src/main/java/org/commonjava/indy/implrepo/data/ImpliedReposQueryDelegate.java index 424af8f9cb..0fbd8b9769 100644 --- a/addons/implied-repos/common/src/main/java/org/commonjava/indy/implrepo/data/ImpliedReposQueryDelegate.java +++ b/addons/implied-repos/common/src/main/java/org/commonjava/indy/implrepo/data/ImpliedReposQueryDelegate.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.implrepo.data; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.data.DelegatingArtifactStoreQuery; import org.commonjava.indy.data.IndyDataException; import org.commonjava.indy.data.ArtifactStoreQuery; diff --git a/addons/implied-repos/common/src/test/java/org/commonjava/indy/implrepo/change/ImpliedRepositoryDetectorTest.java b/addons/implied-repos/common/src/test/java/org/commonjava/indy/implrepo/change/ImpliedRepositoryDetectorTest.java index ff6e39ee7d..8dd061ffb1 100644 --- a/addons/implied-repos/common/src/test/java/org/commonjava/indy/implrepo/change/ImpliedRepositoryDetectorTest.java +++ b/addons/implied-repos/common/src/test/java/org/commonjava/indy/implrepo/change/ImpliedRepositoryDetectorTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.implrepo.change; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.audit.ChangeSummary; import org.commonjava.indy.data.ArtifactStoreValidator; import org.commonjava.indy.data.IndyDataException; diff --git a/addons/implied-repos/ftests/pom.xml b/addons/implied-repos/ftests/pom.xml index cfb470900b..2ca1e88456 100644 --- a/addons/implied-repos/ftests/pom.xml +++ b/addons/implied-repos/ftests/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-implied-repos - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-ftests-implied-repos diff --git a/addons/implied-repos/model-java/pom.xml b/addons/implied-repos/model-java/pom.xml index 296ce38958..dccc4b5cb6 100644 --- a/addons/implied-repos/model-java/pom.xml +++ b/addons/implied-repos/model-java/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-implied-repos - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-implied-repos-model-java Indy :: Add-Ons :: Implied Repositories :: Java Domain Model diff --git a/addons/implied-repos/pom.xml b/addons/implied-repos/pom.xml index 6aca63aa42..c0e4041510 100644 --- a/addons/implied-repos/pom.xml +++ b/addons/implied-repos/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-addons - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-implied-repos Indy :: Add-Ons :: Implied Repositories :: Parent diff --git a/addons/koji/client-java/pom.xml b/addons/koji/client-java/pom.xml index f625e88f04..be83923f9a 100644 --- a/addons/koji/client-java/pom.xml +++ b/addons/koji/client-java/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-koji - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-koji-client-java Indy :: Add-Ons :: Koji Integration :: Java Client diff --git a/addons/koji/common/pom.xml b/addons/koji/common/pom.xml index 0b4afef4e2..80549c0891 100644 --- a/addons/koji/common/pom.xml +++ b/addons/koji/common/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-koji - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-koji-common Indy :: Add-Ons :: Koji Integration :: Common @@ -108,7 +108,7 @@ org.commonjava.indy - indy-subsys-metrics-core + indy-subsys-metrics diff --git a/addons/koji/common/src/main/java/org/commonjava/indy/koji/conf/IndyKojiConfig.java b/addons/koji/common/src/main/java/org/commonjava/indy/koji/conf/IndyKojiConfig.java index 5e0ef08cff..4dc0f61c59 100644 --- a/addons/koji/common/src/main/java/org/commonjava/indy/koji/conf/IndyKojiConfig.java +++ b/addons/koji/common/src/main/java/org/commonjava/indy/koji/conf/IndyKojiConfig.java @@ -77,6 +77,8 @@ public class IndyKojiConfig private static final int DEFAULT_QUERY_CACHE_EXPIRATION_HOURS = 3; // 3 hours for volatile caches + private static final Boolean DEFAULT_SERVER_PEM_ENABLED = true; + private Boolean enabled; private String url; @@ -85,6 +87,8 @@ public class IndyKojiConfig private String serverPemPath; + private Boolean serverPemEnabled; + private String keyPassword; private Integer maxConnections; @@ -247,6 +251,11 @@ public String getServerPemPath() return serverPemPath; } + public Boolean getServerPemEnabled() + { + return serverPemEnabled == null ? DEFAULT_SERVER_PEM_ENABLED : serverPemEnabled; + } + public String getClientPemPath() { return clientPemPath; @@ -317,6 +326,8 @@ public void setServerPemPath( String serverPemPath ) this.serverPemPath = serverPemPath; } + public void setServerPemEnabled ( Boolean serverPemEnabled ) { this.serverPemEnabled = serverPemEnabled; } + public void setKeyPassword( String keyPassword ) { this.keyPassword = keyPassword; @@ -582,6 +593,11 @@ public void parameter( final String name, final String value ) this.serverPemPath = value; break; } + case "server.pem.enabled": + { + this.serverPemEnabled = Boolean.valueOf( value.trim() ); + break; + } case "max.connections": { this.maxConnections = Integer.valueOf( value ); @@ -627,9 +643,7 @@ public void parameter( final String name, final String value ) } else { - throw new ConfigurationException( - "Invalid parameter: '%s'.", - value, name, SECTION_NAME ); + throw new ConfigurationException( "Invalid KOJI config parameter: %s=%s", name, value ); } } } diff --git a/addons/koji/common/src/main/java/org/commonjava/indy/koji/content/KojiBuildAuthority.java b/addons/koji/common/src/main/java/org/commonjava/indy/koji/content/KojiBuildAuthority.java index d36ff12e38..7916088dc0 100644 --- a/addons/koji/common/src/main/java/org/commonjava/indy/koji/content/KojiBuildAuthority.java +++ b/addons/koji/common/src/main/java/org/commonjava/indy/koji/content/KojiBuildAuthority.java @@ -28,8 +28,7 @@ import org.commonjava.indy.data.IndyDataException; import org.commonjava.indy.data.StoreDataManager; import org.commonjava.indy.koji.conf.IndyKojiConfig; -import org.commonjava.indy.measure.annotation.Measure; -import org.commonjava.indy.measure.annotation.MetricNamed; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.StoreKey; import org.commonjava.indy.subsys.infinispan.CacheProducer; @@ -57,10 +56,9 @@ import java.util.stream.Collectors; import static java.lang.Boolean.TRUE; -import static org.apache.commons.lang.StringUtils.contains; -import static org.apache.commons.lang.StringUtils.isNotBlank; -import static org.apache.commons.lang.StringUtils.trimToEmpty; -import static org.commonjava.indy.measure.annotation.MetricNamed.DEFAULT; +import static org.apache.commons.lang3.StringUtils.contains; +import static org.apache.commons.lang3.StringUtils.isNotBlank; +import static org.apache.commons.lang3.StringUtils.trimToEmpty; import static org.commonjava.maven.galley.io.ChecksummingTransferDecorator.FORCE_CHECKSUM; /** diff --git a/addons/koji/common/src/main/java/org/commonjava/indy/koji/content/KojiContentManagerDecorator.java b/addons/koji/common/src/main/java/org/commonjava/indy/koji/content/KojiContentManagerDecorator.java index f5197bba10..123b3d343b 100644 --- a/addons/koji/common/src/main/java/org/commonjava/indy/koji/content/KojiContentManagerDecorator.java +++ b/addons/koji/common/src/main/java/org/commonjava/indy/koji/content/KojiContentManagerDecorator.java @@ -31,8 +31,7 @@ import org.commonjava.indy.data.StoreDataManager; import org.commonjava.indy.koji.conf.IndyKojiConfig; import org.commonjava.indy.koji.util.KojiUtils; -import org.commonjava.indy.measure.annotation.Measure; -import org.commonjava.indy.measure.annotation.MetricNamed; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.RemoteRepository; @@ -63,7 +62,6 @@ import static org.commonjava.indy.koji.model.IndyKojiConstants.KOJI_ORIGIN; import static org.commonjava.indy.koji.model.IndyKojiConstants.KOJI_ORIGIN_BINARY; -import static org.commonjava.indy.measure.annotation.MetricNamed.DEFAULT; import static org.commonjava.indy.model.core.StoreType.group; import static org.commonjava.maven.galley.maven.util.ArtifactPathUtils.formatMetadataPath; @@ -449,7 +447,10 @@ private RemoteRepository createRemoteRepository( StoreKey inStore, ArtifactRef a kojiUtils.formatStorageUrl( config.getStorageRootUrl(), build ), config.getDownloadTimeoutSeconds() ); - remote.setServerCertPem( config.getServerPemContent() ); + if ( config.getServerPemEnabled() ) + { + remote.setServerCertPem( config.getServerPemContent() ); + } if ( isBinaryBuild ) { diff --git a/addons/koji/common/src/main/java/org/commonjava/indy/koji/content/KojiMavenMetadataProvider.java b/addons/koji/common/src/main/java/org/commonjava/indy/koji/content/KojiMavenMetadataProvider.java index 95ccfd8034..56261a3244 100644 --- a/addons/koji/common/src/main/java/org/commonjava/indy/koji/content/KojiMavenMetadataProvider.java +++ b/addons/koji/common/src/main/java/org/commonjava/indy/koji/content/KojiMavenMetadataProvider.java @@ -44,14 +44,10 @@ import org.commonjava.indy.koji.conf.IndyKojiConfig; import org.commonjava.indy.koji.inject.KojiMavenVersionMetadataCache; import org.commonjava.indy.koji.inject.KojiMavenVersionMetadataLocks; -import org.commonjava.indy.measure.annotation.Measure; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.StoreKey; import org.commonjava.indy.pkg.maven.content.MetadataCacheManager; -import org.commonjava.indy.pkg.maven.content.MetadataInfo; -import org.commonjava.indy.pkg.maven.content.MetadataKey; -import org.commonjava.indy.pkg.maven.content.cache.MavenMetadataCache; -import org.commonjava.indy.pkg.maven.content.cache.MavenMetadataKeyCache; import org.commonjava.indy.pkg.maven.content.group.MavenMetadataProvider; import org.commonjava.indy.subsys.infinispan.CacheHandle; import org.commonjava.indy.subsys.infinispan.CacheProducer; diff --git a/addons/koji/common/src/main/java/org/commonjava/indy/koji/content/KojiPathPatternFormatter.java b/addons/koji/common/src/main/java/org/commonjava/indy/koji/content/KojiPathPatternFormatter.java index 5b3ae508e6..4c67c213b7 100644 --- a/addons/koji/common/src/main/java/org/commonjava/indy/koji/content/KojiPathPatternFormatter.java +++ b/addons/koji/common/src/main/java/org/commonjava/indy/koji/content/KojiPathPatternFormatter.java @@ -16,7 +16,7 @@ package org.commonjava.indy.koji.content; import com.redhat.red.build.koji.model.xmlrpc.KojiArchiveInfo; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.atlas.maven.ident.ref.ArtifactRef; import org.commonjava.atlas.maven.ident.ref.SimpleProjectRef; import org.commonjava.indy.koji.util.KojiUtils; diff --git a/addons/koji/common/src/main/java/org/commonjava/indy/koji/data/KojiRemovePemMigrationAction.java b/addons/koji/common/src/main/java/org/commonjava/indy/koji/data/KojiRemovePemMigrationAction.java new file mode 100644 index 0000000000..7e612bc39a --- /dev/null +++ b/addons/koji/common/src/main/java/org/commonjava/indy/koji/data/KojiRemovePemMigrationAction.java @@ -0,0 +1,127 @@ +/** + * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) + * + * 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.commonjava.indy.koji.data; + +import org.commonjava.indy.action.IndyLifecycleException; +import org.commonjava.indy.action.MigrationAction; +import org.commonjava.indy.audit.ChangeSummary; +import org.commonjava.indy.data.IndyDataException; +import org.commonjava.indy.data.StoreDataManager; +import org.commonjava.indy.koji.conf.IndyKojiConfig; +import org.commonjava.indy.model.core.RemoteRepository; +import org.commonjava.indy.pkg.PackageTypeConstants; +import org.commonjava.maven.galley.event.EventMetadata; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.inject.Inject; +import java.util.ArrayList; +import java.util.List; + +public class KojiRemovePemMigrationAction + implements MigrationAction +{ + + private final Logger logger = LoggerFactory.getLogger( getClass() ); + + @Inject + private StoreDataManager storeDataManager; + + @Inject + private IndyKojiConfig config; + + protected KojiRemovePemMigrationAction() { } + + public KojiRemovePemMigrationAction( final StoreDataManager storeDataManager, final IndyKojiConfig config ) + { + this.storeDataManager = storeDataManager; + this.config = config; + } + + @Override + public String getId() + { + return "Remove server PEM from Koji repos."; + } + + @Override + public boolean migrate() throws IndyLifecycleException + { + if ( config.getServerPemEnabled() ) + { + logger.info( "Skip the migration if the server pem is needed. " ); + return true; + } + + logger.info( "Starting to remove server PEM from Koji repo." ); + return doMigrate(); + } + + private boolean doMigrate() throws IndyLifecycleException + { + + List repos; + try + { + repos = storeDataManager.query().packageType( PackageTypeConstants.PKG_TYPE_MAVEN ).getAllRemoteRepositories(); + } + catch ( IndyDataException e ) + { + throw new IndyLifecycleException( "Cannot retrieve all remote repositories. Reason: %s", e, + e.getMessage() ); + } + + List toStore = new ArrayList<>(); + repos.forEach( repo -> { + if ( repo.getDescription() != null && repo.getDescription().contains( "Koji build" ) && repo.getServerCertPem() != null ) + { + repo.setServerCertPem( null ); + toStore.add( repo ); + } + } ); + + final ChangeSummary changeSummary = + new ChangeSummary( ChangeSummary.SYSTEM_USER, "Remove the server PEM from Koji repo." ); + + for ( RemoteRepository repo : toStore ) + { + try + { + storeDataManager.storeArtifactStore( repo, changeSummary, false, false, new EventMetadata() ); + } + catch ( IndyDataException e ) + { + throw new IndyLifecycleException( "Failed to store %s. Reason: %s", + e, repo == null ? "NULL REPO" : repo.getKey(), e.getMessage() ); + } + } + + logger.info( "Remove server PEM from Koji repo migration done. Result: {}", toStore.size() ); + if ( logger.isDebugEnabled() ) + { + toStore.forEach( ( s ) -> logger.debug( s.getKey().toString() ) ); + } + + return !toStore.isEmpty(); + } + + @Override + public int getMigrationPriority() + { + return 99; + } + +} diff --git a/addons/koji/common/src/main/java/org/commonjava/indy/koji/inject/KojijiProvider.java b/addons/koji/common/src/main/java/org/commonjava/indy/koji/inject/KojijiProvider.java index 4fc624f4ea..329f617d77 100644 --- a/addons/koji/common/src/main/java/org/commonjava/indy/koji/inject/KojijiProvider.java +++ b/addons/koji/common/src/main/java/org/commonjava/indy/koji/inject/KojijiProvider.java @@ -15,7 +15,6 @@ */ package org.commonjava.indy.koji.inject; -import com.codahale.metrics.MetricRegistry; import com.redhat.red.build.koji.KojiClient; import com.redhat.red.build.koji.KojiClientException; import org.commonjava.cdi.util.weft.ExecutorConfig; @@ -25,8 +24,9 @@ import org.commonjava.indy.action.ShutdownAction; import org.commonjava.indy.action.StartupAction; import org.commonjava.indy.koji.conf.IndyKojiConfig; -import org.commonjava.indy.metrics.conf.IndyMetricsConfig; +import org.commonjava.indy.subsys.metrics.conf.IndyMetricsConfig; import org.commonjava.atlas.maven.ident.ref.ProjectRef; +import org.commonjava.o11yphant.metrics.api.MetricRegistry; import org.commonjava.util.jhttpc.auth.MemoryPasswordManager; import org.commonjava.util.jhttpc.auth.PasswordManager; import org.commonjava.util.jhttpc.auth.PasswordType; diff --git a/addons/koji/common/src/main/java/org/commonjava/indy/koji/util/KojiUtils.java b/addons/koji/common/src/main/java/org/commonjava/indy/koji/util/KojiUtils.java index 5de1101343..0c9ca11f3a 100644 --- a/addons/koji/common/src/main/java/org/commonjava/indy/koji/util/KojiUtils.java +++ b/addons/koji/common/src/main/java/org/commonjava/indy/koji/util/KojiUtils.java @@ -37,7 +37,7 @@ import java.net.MalformedURLException; import java.util.regex.Pattern; -import static org.apache.commons.lang.StringUtils.isBlank; +import static org.apache.commons.lang3.StringUtils.isBlank; import static org.commonjava.maven.galley.util.UrlUtils.buildUrl; /** diff --git a/addons/koji/ftests/src/main/java/org/commonjava/indy/koji/ftest/AbstractKojiIT.java b/addons/koji/ftests/src/main/java/org/commonjava/indy/koji/ftest/AbstractKojiIT.java index 6c45cebfcd..3d63f670ba 100644 --- a/addons/koji/ftests/src/main/java/org/commonjava/indy/koji/ftest/AbstractKojiIT.java +++ b/addons/koji/ftests/src/main/java/org/commonjava/indy/koji/ftest/AbstractKojiIT.java @@ -16,7 +16,7 @@ package org.commonjava.indy.koji.ftest; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPut; diff --git a/addons/koji/ftests/src/main/java/org/commonjava/indy/koji/ftest/GetKojiMetadataTest.java b/addons/koji/ftests/src/main/java/org/commonjava/indy/koji/ftest/GetKojiMetadataTest.java index f5f88f14c5..5ba3c6e237 100644 --- a/addons/koji/ftests/src/main/java/org/commonjava/indy/koji/ftest/GetKojiMetadataTest.java +++ b/addons/koji/ftests/src/main/java/org/commonjava/indy/koji/ftest/GetKojiMetadataTest.java @@ -26,7 +26,7 @@ import java.io.InputStream; -import static org.apache.commons.lang.StringUtils.join; +import static org.apache.commons.lang3.StringUtils.join; import static org.commonjava.indy.model.core.StoreType.group; import static org.commonjava.indy.pkg.maven.model.MavenPackageTypeDescriptor.MAVEN_PKG_KEY; import static org.hamcrest.CoreMatchers.equalTo; diff --git a/addons/koji/jaxrs/pom.xml b/addons/koji/jaxrs/pom.xml index 5608e4269b..9242f99264 100644 --- a/addons/koji/jaxrs/pom.xml +++ b/addons/koji/jaxrs/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-koji - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-koji-jaxrs diff --git a/addons/koji/model-java/pom.xml b/addons/koji/model-java/pom.xml index e670c2781d..8fab9e751e 100644 --- a/addons/koji/model-java/pom.xml +++ b/addons/koji/model-java/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-koji - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-koji-model-java Indy :: Add-Ons :: Koji Integration :: Java Domain Model diff --git a/addons/koji/pom.xml b/addons/koji/pom.xml index dcd5757804..8c21ce54e1 100644 --- a/addons/koji/pom.xml +++ b/addons/koji/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-addons - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-koji Indy :: Add-Ons :: Koji Integration :: Parent diff --git a/addons/path-mapped/common/pom.xml b/addons/path-mapped/common/pom.xml index cd452acb6b..1fa1c114de 100644 --- a/addons/path-mapped/common/pom.xml +++ b/addons/path-mapped/common/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-path-mapped - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-path-mapped-common diff --git a/addons/path-mapped/jaxrs/pom.xml b/addons/path-mapped/jaxrs/pom.xml index d26589f11d..cdd1fc66dc 100644 --- a/addons/path-mapped/jaxrs/pom.xml +++ b/addons/path-mapped/jaxrs/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-path-mapped - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-path-mapped-jaxrs diff --git a/addons/path-mapped/model-java/pom.xml b/addons/path-mapped/model-java/pom.xml index e4fc2cb8ca..f80916a9fd 100644 --- a/addons/path-mapped/model-java/pom.xml +++ b/addons/path-mapped/model-java/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-path-mapped - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-path-mapped-model-java diff --git a/addons/path-mapped/pom.xml b/addons/path-mapped/pom.xml index 1e4e391c76..cfd55264ee 100644 --- a/addons/path-mapped/pom.xml +++ b/addons/path-mapped/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-addons - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-path-mapped Indy :: Add-Ons :: Path Mapped :: Parent diff --git a/addons/pkg-maven/common/pom.xml b/addons/pkg-maven/common/pom.xml index 682e024c47..2139fb6eec 100644 --- a/addons/pkg-maven/common/pom.xml +++ b/addons/pkg-maven/common/pom.xml @@ -20,7 +20,7 @@ indy-pkg-maven org.commonjava.indy - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT 4.0.0 @@ -41,6 +41,10 @@ org.commonjava.indy indy-core + + org.commonjava.atlas + atlas-identities + org.apache.maven.archetype archetype-catalog @@ -93,7 +97,7 @@ org.commonjava.indy - indy-subsys-metrics-core + indy-subsys-metrics diff --git a/addons/pkg-maven/common/src/main/java/org/commonjava/indy/pkg/maven/content/MavenContentsFilteringTransferDecorator.java b/addons/pkg-maven/common/src/main/java/org/commonjava/indy/pkg/maven/content/MavenContentsFilteringTransferDecorator.java index df0ec29047..c160f61f83 100644 --- a/addons/pkg-maven/common/src/main/java/org/commonjava/indy/pkg/maven/content/MavenContentsFilteringTransferDecorator.java +++ b/addons/pkg-maven/common/src/main/java/org/commonjava/indy/pkg/maven/content/MavenContentsFilteringTransferDecorator.java @@ -33,12 +33,12 @@ import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; -import com.codahale.metrics.Timer; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.atlas.maven.ident.util.SnapshotUtils; import org.commonjava.atlas.maven.ident.version.part.SnapshotPart; -import org.commonjava.indy.metrics.IndyMetricsManager; +import org.commonjava.o11yphant.metrics.api.Timer; +import org.commonjava.o11yphant.metrics.DefaultMetricsManager; import org.commonjava.maven.galley.event.EventMetadata; import org.commonjava.maven.galley.io.AbstractTransferDecorator; import org.commonjava.maven.galley.model.Location; @@ -70,7 +70,7 @@ public class MavenContentsFilteringTransferDecorator private final Logger logger = LoggerFactory.getLogger( this.getClass() ); @Inject - private IndyMetricsManager metricsManager; + private DefaultMetricsManager metricsManager; @Override public OverriddenBooleanValue decorateExists( final Transfer transfer, final EventMetadata metadata ) @@ -205,11 +205,11 @@ private static class MetadataFilteringOutputStream private Transfer transfer; - private IndyMetricsManager metricsManager; + private DefaultMetricsManager metricsManager; private MetadataFilteringOutputStream( final OutputStream stream, final boolean allowsSnapshots, final boolean allowsReleases, Transfer transfer, - final IndyMetricsManager metricsManager ) + final DefaultMetricsManager metricsManager ) { super( stream ); this.allowsSnapshots = allowsSnapshots; diff --git a/addons/pkg-maven/common/src/main/java/org/commonjava/indy/pkg/maven/content/MavenMetadataGenerator.java b/addons/pkg-maven/common/src/main/java/org/commonjava/indy/pkg/maven/content/MavenMetadataGenerator.java index 0ceae8f344..a08b221431 100644 --- a/addons/pkg-maven/common/src/main/java/org/commonjava/indy/pkg/maven/content/MavenMetadataGenerator.java +++ b/addons/pkg-maven/common/src/main/java/org/commonjava/indy/pkg/maven/content/MavenMetadataGenerator.java @@ -16,7 +16,7 @@ package org.commonjava.indy.pkg.maven.content; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.maven.artifact.repository.metadata.Metadata; import org.apache.maven.artifact.repository.metadata.Plugin; import org.apache.maven.artifact.repository.metadata.SnapshotVersion; @@ -42,7 +42,7 @@ import org.commonjava.indy.core.content.AbstractMergedContentGenerator; import org.commonjava.indy.core.content.group.GroupMergeHelper; import org.commonjava.indy.data.StoreDataManager; -import org.commonjava.indy.measure.annotation.Measure; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.StoreKey; diff --git a/addons/pkg-maven/common/src/main/java/org/commonjava/indy/pkg/maven/content/MetadataMergeListener.java b/addons/pkg-maven/common/src/main/java/org/commonjava/indy/pkg/maven/content/MetadataMergeListener.java index ff66ed36ae..73daf587cb 100644 --- a/addons/pkg-maven/common/src/main/java/org/commonjava/indy/pkg/maven/content/MetadataMergeListener.java +++ b/addons/pkg-maven/common/src/main/java/org/commonjava/indy/pkg/maven/content/MetadataMergeListener.java @@ -17,7 +17,7 @@ import org.commonjava.indy.content.DirectContentAccess; import org.commonjava.indy.content.MergedContentAction; -import org.commonjava.indy.measure.annotation.Measure; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.Group; import org.slf4j.Logger; diff --git a/addons/pkg-maven/common/src/test/java/org/commonjava/indy/pkg/maven/content/MavenContentFilteringTransferDecoratorTest.java b/addons/pkg-maven/common/src/test/java/org/commonjava/indy/pkg/maven/content/MavenContentFilteringTransferDecoratorTest.java index 74c6520dfb..4b2eae1c55 100644 --- a/addons/pkg-maven/common/src/test/java/org/commonjava/indy/pkg/maven/content/MavenContentFilteringTransferDecoratorTest.java +++ b/addons/pkg-maven/common/src/test/java/org/commonjava/indy/pkg/maven/content/MavenContentFilteringTransferDecoratorTest.java @@ -15,7 +15,6 @@ */ package org.commonjava.indy.pkg.maven.content; -import com.codahale.metrics.MetricRegistry; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.io.IOUtils; import org.commonjava.indy.test.fixture.core.HttpTestFixture; @@ -27,6 +26,7 @@ import org.commonjava.maven.galley.model.TransferOperation; import org.commonjava.maven.galley.transport.htcli.internal.HttpDownload; import org.commonjava.maven.galley.transport.htcli.model.SimpleHttpLocation; +import org.commonjava.o11yphant.metrics.DefaultMetricRegistry; import org.hamcrest.CoreMatchers; import org.junit.Rule; import org.junit.Test; @@ -37,6 +37,7 @@ import java.util.HashMap; import java.util.List; +import static org.commonjava.o11yphant.metrics.util.MetricUtils.newDefaultMetricRegistry; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.notNullValue; import static org.junit.Assert.assertThat; @@ -46,7 +47,7 @@ public class MavenContentFilteringTransferDecoratorTest @Rule public HttpTestFixture fixture = new HttpTestFixture( "test", new MavenContentsFilteringTransferDecorator() ); - private static MetricRegistry metricRegistry = new MetricRegistry(); + private static DefaultMetricRegistry metricRegistry = newDefaultMetricRegistry(); private static TransportMetricConfig metricConfig = new TransportMetricConfig() { @@ -153,7 +154,7 @@ private Transfer getTestHttpTransfer(final String path, final String content) th assertThat( transfer.exists(), equalTo( false ) ); HttpDownload dl = new HttpDownload( url, location, transfer, new HashMap<>(), new EventMetadata(), - fixture.getHttp().getHttp(), new ObjectMapper(), metricRegistry, metricConfig ); + fixture.getHttp().getHttp(), new ObjectMapper(), metricRegistry, metricConfig, null ); return dl.call().getTransfer(); } diff --git a/addons/pkg-maven/common/src/test/java/org/commonjava/indy/pkg/maven/content/MavenMetadataGeneratorTest.java b/addons/pkg-maven/common/src/test/java/org/commonjava/indy/pkg/maven/content/MavenMetadataGeneratorTest.java index 94cf7f2148..5393d5ff5f 100644 --- a/addons/pkg-maven/common/src/test/java/org/commonjava/indy/pkg/maven/content/MavenMetadataGeneratorTest.java +++ b/addons/pkg-maven/common/src/test/java/org/commonjava/indy/pkg/maven/content/MavenMetadataGeneratorTest.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.pkg.maven.content; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.cdi.util.weft.PoolWeftExecutorService; import org.commonjava.cdi.util.weft.WeftExecutorService; import org.commonjava.indy.audit.ChangeSummary; diff --git a/addons/pkg-maven/ftests/pom.xml b/addons/pkg-maven/ftests/pom.xml index e9fe8b84c7..0caad8c1ec 100644 --- a/addons/pkg-maven/ftests/pom.xml +++ b/addons/pkg-maven/ftests/pom.xml @@ -20,7 +20,7 @@ indy-pkg-maven org.commonjava.indy - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT 4.0.0 diff --git a/addons/pkg-maven/ftests/src/main/java/org/commonjava/indy/pkg/maven/content/GroupMetaOverlapWithMetaOfHostedReposTest.java b/addons/pkg-maven/ftests/src/main/java/org/commonjava/indy/pkg/maven/content/GroupMetaOverlapWithMetaOfHostedReposTest.java index 4cd67449e6..95da94f647 100644 --- a/addons/pkg-maven/ftests/src/main/java/org/commonjava/indy/pkg/maven/content/GroupMetaOverlapWithMetaOfHostedReposTest.java +++ b/addons/pkg-maven/ftests/src/main/java/org/commonjava/indy/pkg/maven/content/GroupMetaOverlapWithMetaOfHostedReposTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.pkg.maven.content; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.client.core.helper.PathInfo; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.ftest.core.category.EventDependent; diff --git a/addons/pkg-maven/ftests/src/main/java/org/commonjava/indy/pkg/maven/content/GroupMetaOverlapWithNestedGroupOfHostRepoMetaTest.java b/addons/pkg-maven/ftests/src/main/java/org/commonjava/indy/pkg/maven/content/GroupMetaOverlapWithNestedGroupOfHostRepoMetaTest.java index a0b527936d..40188ad47d 100644 --- a/addons/pkg-maven/ftests/src/main/java/org/commonjava/indy/pkg/maven/content/GroupMetaOverlapWithNestedGroupOfHostRepoMetaTest.java +++ b/addons/pkg-maven/ftests/src/main/java/org/commonjava/indy/pkg/maven/content/GroupMetaOverlapWithNestedGroupOfHostRepoMetaTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.pkg.maven.content; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.client.core.helper.PathInfo; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.ftest.core.category.EventDependent; diff --git a/addons/pkg-maven/ftests/src/main/java/org/commonjava/indy/pkg/maven/content/GroupMetaOverlapWithNestedGroupOfHostRepoNoMetaTest.java b/addons/pkg-maven/ftests/src/main/java/org/commonjava/indy/pkg/maven/content/GroupMetaOverlapWithNestedGroupOfHostRepoNoMetaTest.java index 99fae0b93c..7fe8500896 100644 --- a/addons/pkg-maven/ftests/src/main/java/org/commonjava/indy/pkg/maven/content/GroupMetaOverlapWithNestedGroupOfHostRepoNoMetaTest.java +++ b/addons/pkg-maven/ftests/src/main/java/org/commonjava/indy/pkg/maven/content/GroupMetaOverlapWithNestedGroupOfHostRepoNoMetaTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.pkg.maven.content; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.client.core.helper.PathInfo; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.ftest.core.category.EventDependent; diff --git a/addons/pkg-maven/ftests/src/main/java/org/commonjava/indy/pkg/maven/content/GroupMetaOverlapWithoutMetaOfHostedReposTest.java b/addons/pkg-maven/ftests/src/main/java/org/commonjava/indy/pkg/maven/content/GroupMetaOverlapWithoutMetaOfHostedReposTest.java index 7dfeef28da..7aedc15371 100644 --- a/addons/pkg-maven/ftests/src/main/java/org/commonjava/indy/pkg/maven/content/GroupMetaOverlapWithoutMetaOfHostedReposTest.java +++ b/addons/pkg-maven/ftests/src/main/java/org/commonjava/indy/pkg/maven/content/GroupMetaOverlapWithoutMetaOfHostedReposTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.pkg.maven.content; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.client.core.helper.PathInfo; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.ftest.core.category.EventDependent; diff --git a/addons/pkg-maven/ftests/src/main/java/org/commonjava/indy/pkg/maven/content/GroupMetadataMergeWithInvalidVersionTest.java b/addons/pkg-maven/ftests/src/main/java/org/commonjava/indy/pkg/maven/content/GroupMetadataMergeWithInvalidVersionTest.java index f47a332265..c3c5c1ca69 100644 --- a/addons/pkg-maven/ftests/src/main/java/org/commonjava/indy/pkg/maven/content/GroupMetadataMergeWithInvalidVersionTest.java +++ b/addons/pkg-maven/ftests/src/main/java/org/commonjava/indy/pkg/maven/content/GroupMetadataMergeWithInvalidVersionTest.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.pkg.maven.content; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.client.core.IndyClientException; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.ftest.core.category.EventDependent; diff --git a/addons/pkg-maven/jaxrs/pom.xml b/addons/pkg-maven/jaxrs/pom.xml index 293b74211c..840fc7fb62 100644 --- a/addons/pkg-maven/jaxrs/pom.xml +++ b/addons/pkg-maven/jaxrs/pom.xml @@ -20,7 +20,7 @@ indy-pkg-maven org.commonjava.indy - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT 4.0.0 diff --git a/addons/pkg-maven/pom.xml b/addons/pkg-maven/pom.xml index 1641bdb7c9..984862e1d1 100644 --- a/addons/pkg-maven/pom.xml +++ b/addons/pkg-maven/pom.xml @@ -20,7 +20,7 @@ indy-addons org.commonjava.indy - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT 4.0.0 diff --git a/addons/pkg-npm/common/pom.xml b/addons/pkg-npm/common/pom.xml index 0b4d8aec6a..7e08b5f5f6 100644 --- a/addons/pkg-npm/common/pom.xml +++ b/addons/pkg-npm/common/pom.xml @@ -20,7 +20,7 @@ indy-pkg-npm org.commonjava.indy - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT 4.0.0 diff --git a/addons/pkg-npm/common/src/main/java/org/commonjava/indy/pkg/npm/content/NPMPackageMaskingTransferDecorator.java b/addons/pkg-npm/common/src/main/java/org/commonjava/indy/pkg/npm/content/NPMPackageMaskingTransferDecorator.java index 73ff93c551..61b4ea1359 100644 --- a/addons/pkg-npm/common/src/main/java/org/commonjava/indy/pkg/npm/content/NPMPackageMaskingTransferDecorator.java +++ b/addons/pkg-npm/common/src/main/java/org/commonjava/indy/pkg/npm/content/NPMPackageMaskingTransferDecorator.java @@ -15,9 +15,8 @@ */ package org.commonjava.indy.pkg.npm.content; -import com.codahale.metrics.MetricRegistry; -import com.codahale.metrics.Timer; -import org.commonjava.indy.metrics.IndyMetricsManager; +import org.commonjava.o11yphant.metrics.api.Timer; +import org.commonjava.o11yphant.metrics.DefaultMetricsManager; import org.commonjava.indy.model.core.StoreKey; import org.commonjava.indy.model.galley.KeyedLocation; import org.commonjava.maven.galley.event.EventMetadata; @@ -32,7 +31,6 @@ import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import java.io.ByteArrayOutputStream; -import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; @@ -49,7 +47,7 @@ public class NPMPackageMaskingTransferDecorator private final Logger logger = LoggerFactory.getLogger( this.getClass() ); @Inject - private IndyMetricsManager metricsManager; + private DefaultMetricsManager metricsManager; public NPMPackageMaskingTransferDecorator() { @@ -102,7 +100,7 @@ private static class PackageMaskingInputStream private String contextURL; - private IndyMetricsManager metricsManager; + private DefaultMetricsManager metricsManager; private byte[] bytes; @@ -111,7 +109,7 @@ private static class PackageMaskingInputStream private static final int SIZE = 1024; private PackageMaskingInputStream( final InputStream stream, final String contextURL, - final IndyMetricsManager metricsManager ) + final DefaultMetricsManager metricsManager ) { super( stream ); this.contextURL = contextURL; diff --git a/addons/pkg-npm/common/src/main/java/org/commonjava/indy/pkg/npm/content/NPMStoragePathCalculator.java b/addons/pkg-npm/common/src/main/java/org/commonjava/indy/pkg/npm/content/NPMStoragePathCalculator.java index c245e1c1fa..f85400a2f5 100644 --- a/addons/pkg-npm/common/src/main/java/org/commonjava/indy/pkg/npm/content/NPMStoragePathCalculator.java +++ b/addons/pkg-npm/common/src/main/java/org/commonjava/indy/pkg/npm/content/NPMStoragePathCalculator.java @@ -18,8 +18,8 @@ import org.apache.commons.io.FilenameUtils; import org.commonjava.cdi.util.weft.ThreadContext; import org.commonjava.indy.content.StoragePathCalculator; -import org.commonjava.indy.metrics.RequestContextHelper; import org.commonjava.indy.model.core.StoreKey; +import org.commonjava.indy.util.RequestContextHelper; import org.commonjava.maven.galley.io.SpecialPathConstants; import org.commonjava.maven.galley.model.SpecialPathInfo; import org.commonjava.maven.galley.spi.io.SpecialPathManager; diff --git a/addons/pkg-npm/common/src/main/java/org/commonjava/indy/pkg/npm/content/PackageMetadataGenerator.java b/addons/pkg-npm/common/src/main/java/org/commonjava/indy/pkg/npm/content/PackageMetadataGenerator.java index 0ad0d02559..3efc8dfd4a 100644 --- a/addons/pkg-npm/common/src/main/java/org/commonjava/indy/pkg/npm/content/PackageMetadataGenerator.java +++ b/addons/pkg-npm/common/src/main/java/org/commonjava/indy/pkg/npm/content/PackageMetadataGenerator.java @@ -47,6 +47,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.nio.charset.StandardCharsets; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Comparator; @@ -63,8 +64,8 @@ public class PackageMetadataGenerator extends AbstractMergedContentGenerator { - @Inject - private TypeMapper typeMapper; +// @Inject +// private TypeMapper typeMapper; @Inject private PackageMetadataMerger merger; @@ -92,7 +93,7 @@ public PackageMetadataGenerator( final DirectContentAccess fileManager, final St { super( fileManager, storeManager, mergeHelper, nfc, mergedContentActions ); this.downloadManager = downloadManager; - this.typeMapper = typeMapper; +// this.typeMapper = typeMapper; this.pathGenerator = pathGenerator; this.merger = merger; this.storagePathCalculator = storagePathCalculator; @@ -328,6 +329,7 @@ private boolean writePackageMetadata( List firstLevelFiles, Artif packageMetadata.setKeywords( keywords ); } + versions = sortVersions( versions ); packageMetadata.setVersions( versions ); packageMetadata.setDistTags( distTags ); @@ -336,7 +338,7 @@ private boolean writePackageMetadata( List firstLevelFiles, Artif { String output = mapper.writeValueAsString( packageMetadata ); stream = metadataFile.openOutputStream( TransferOperation.GENERATE, true, eventMetadata ); - stream.write( output.getBytes( "UTF-8" ) ); + stream.write( output.getBytes( StandardCharsets.UTF_8 ) ); } catch ( IOException e ) { @@ -351,6 +353,13 @@ private boolean writePackageMetadata( List firstLevelFiles, Artif return true; } + private Map sortVersions( Map versions ) + { + final Map sorted = new LinkedHashMap<>( versions.size() ); + new ArrayList<>( versions.keySet() ).stream().sorted().forEach( k -> sorted.put( k, versions.get( k ) ) ); + return sorted; + } + private Transfer extractMetaFileFromTarballAndStore( ArtifactStore store, String versionPath, Transfer tar ) { diff --git a/addons/pkg-npm/ftests/pom.xml b/addons/pkg-npm/ftests/pom.xml index 5c786f34d8..24a3aebe44 100644 --- a/addons/pkg-npm/ftests/pom.xml +++ b/addons/pkg-npm/ftests/pom.xml @@ -20,7 +20,7 @@ indy-pkg-npm org.commonjava.indy - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT 4.0.0 diff --git a/addons/pkg-npm/ftests/src/main/java/org/commonjava/indy/pkg/npm/content/NPMGroupContentMergeRetrieveTest.java b/addons/pkg-npm/ftests/src/main/java/org/commonjava/indy/pkg/npm/content/NPMGroupContentMergeRetrieveTest.java index 7c555b55c5..bfa5f76cf9 100644 --- a/addons/pkg-npm/ftests/src/main/java/org/commonjava/indy/pkg/npm/content/NPMGroupContentMergeRetrieveTest.java +++ b/addons/pkg-npm/ftests/src/main/java/org/commonjava/indy/pkg/npm/content/NPMGroupContentMergeRetrieveTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.pkg.npm.content; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.client.core.util.UrlUtils; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.model.core.Group; diff --git a/addons/pkg-npm/ftests/src/main/java/org/commonjava/indy/pkg/npm/content/NPMMetadataRevisitTimeoutTest.java b/addons/pkg-npm/ftests/src/main/java/org/commonjava/indy/pkg/npm/content/NPMMetadataRevisitTimeoutTest.java index 2a6cd3b357..81e0c348cb 100644 --- a/addons/pkg-npm/ftests/src/main/java/org/commonjava/indy/pkg/npm/content/NPMMetadataRevisitTimeoutTest.java +++ b/addons/pkg-npm/ftests/src/main/java/org/commonjava/indy/pkg/npm/content/NPMMetadataRevisitTimeoutTest.java @@ -18,12 +18,14 @@ import org.apache.commons.io.IOUtils; import org.commonjava.indy.client.core.IndyClientException; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; +import org.commonjava.indy.ftest.core.category.TimingDependent; import org.commonjava.indy.model.core.RemoteRepository; import org.commonjava.indy.model.core.io.IndyObjectMapper; import org.commonjava.indy.pkg.npm.model.DistTag; import org.commonjava.indy.pkg.npm.model.PackageMetadata; import org.commonjava.indy.test.fixture.core.CoreServerFixture; import org.junit.Test; +import org.junit.experimental.categories.Category; import java.io.IOException; import java.io.InputStream; @@ -61,6 +63,7 @@ public class NPMMetadataRevisitTimeoutTest private static final String PATH = "jquery"; @Test + @Category( TimingDependent.class ) public void test() throws Exception { @@ -77,15 +80,6 @@ public void test() resp.getWriter().flush(); } ); - //FIXME: After using galley-0.16.8, I'm not sure the second retrieval of npm metadata will get path of - // "A/jquery/package.json" while the first retrieval is "A/jquery". So I add a new expectation here - // to let the second retrieval can work. Need further checking. - // server.expect( "GET", server.formatUrl( REPO, PATH+"/package.json" ), (req, resp)->{ - // resp.setStatus( 200 ); - // mapper.writeValue( resp.getWriter(), src ); - // resp.getWriter().flush(); - // } ); - final int METADATA_TIMEOUT_SECOND = 3; final int TIMEOUT_WAIT_MILLI_S = 1000; diff --git a/addons/pkg-npm/ftests/src/main/java/org/commonjava/indy/pkg/npm/content/NPMMetadataTimeoutTest.java b/addons/pkg-npm/ftests/src/main/java/org/commonjava/indy/pkg/npm/content/NPMMetadataTimeoutTest.java index bcae207016..8349d16869 100644 --- a/addons/pkg-npm/ftests/src/main/java/org/commonjava/indy/pkg/npm/content/NPMMetadataTimeoutTest.java +++ b/addons/pkg-npm/ftests/src/main/java/org/commonjava/indy/pkg/npm/content/NPMMetadataTimeoutTest.java @@ -18,12 +18,17 @@ import org.apache.commons.io.IOUtils; import org.commonjava.indy.client.core.IndyClientException; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; +import org.commonjava.indy.ftest.core.category.TimingDependent; import org.commonjava.indy.model.core.RemoteRepository; import org.commonjava.indy.model.core.io.IndyObjectMapper; import org.commonjava.indy.pkg.npm.model.DistTag; import org.commonjava.indy.pkg.npm.model.PackageMetadata; +import org.commonjava.indy.util.LocationUtils; +import org.commonjava.maven.galley.model.Location; import org.junit.Test; +import org.junit.experimental.categories.Category; +import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -46,15 +51,19 @@ * */ public class NPMMetadataTimeoutTest - extends AbstractContentManagementTest + extends AbstractContentManagementTest { private static final String REPO = "A"; - private static final String PATH = "jquery"; + private static final String PATH_JQUERY = "jquery"; + + private static final String PATH_BABEL_PARSER = "@babel/parser"; @Test - public void test() throws Exception + @Category( TimingDependent.class ) + public void test() + throws Exception { IndyObjectMapper mapper = new IndyObjectMapper( true ); @@ -63,20 +72,17 @@ public void test() throws Exception dts.setBeta( "1" ); src.setDistTags( dts ); - server.expect( "GET", server.formatUrl( REPO, PATH ), (req, resp)->{ + server.expect( "GET", server.formatUrl( REPO, PATH_JQUERY ), ( req, resp ) -> { resp.setStatus( 200 ); mapper.writeValue( resp.getWriter(), src ); resp.getWriter().flush(); } ); - //FIXME: After using galley-0.16.8, I'm not sure the second retrieval of npm metadata will get path of - // "A/jquery/package.json" while the first retrieval is "A/jquery". So I add a new expectation here - // to let the second retrieval can work. Need further checking. -// server.expect( "GET", server.formatUrl( REPO, PATH+"/package.json" ), (req, resp)->{ -// resp.setStatus( 200 ); -// mapper.writeValue( resp.getWriter(), src ); -// resp.getWriter().flush(); -// } ); + server.expect( "GET", server.formatUrl( REPO, PATH_BABEL_PARSER ), ( req, resp ) -> { + resp.setStatus( 200 ); + mapper.writeValue( resp.getWriter(), src ); + resp.getWriter().flush(); + } ); final RemoteRepository repo = new RemoteRepository( NPM_PKG_KEY, REPO, server.formatUrl( REPO ) ); repo.setMetadataTimeoutSeconds( 1 ); @@ -84,24 +90,45 @@ public void test() throws Exception client.stores().create( repo, "adding npm remote repo", RemoteRepository.class ); // First retrieval - verifyMetadataBetaTag( "1", repo ); + verifyMetadataBetaTag( "1", PATH_JQUERY, repo ); + assertThat( "Metadata not retrieved!", client.content().exists( repo.getKey(), PATH_JQUERY, true ), + equalTo( true ) ); + assertThat( "Metadata not retrieved!", + client.content().exists( repo.getKey(), PATH_JQUERY + "/package.json", true ), equalTo( true ) ); + + verifyMetadataBetaTag( "1", PATH_BABEL_PARSER, repo ); + assertThat( "Metadata not retrieved!", client.content().exists( repo.getKey(), PATH_BABEL_PARSER, true ), + equalTo( true ) ); + assertThat( "Metadata not retrieved!", + client.content().exists( repo.getKey(), PATH_BABEL_PARSER + "/package.json", true ), + equalTo( true ) ); // wait for repo metadata timeout - Thread.sleep( 2000 ); + Thread.sleep( 3000 ); + + assertThat( "Metadata not cleaned up!", client.content().exists( repo.getKey(), PATH_JQUERY, true ), + equalTo( false ) ); + assertThat( "Metadata not cleaned up!", + client.content().exists( repo.getKey(), PATH_JQUERY + "/package.json", true ), equalTo( false ) ); - assertThat( "Metadata not cleaned up!", client.content().exists( repo.getKey(), PATH + "/package.json", true ), equalTo( false ) ); + assertThat( "Metadata not cleaned up!", client.content().exists( repo.getKey(), PATH_BABEL_PARSER, true ), + equalTo( false ) ); + assertThat( "Metadata not cleaned up!", + client.content().exists( repo.getKey(), PATH_BABEL_PARSER + "/package.json", true ), + equalTo( false ) ); logger.info( "\n\n\n\nRE-REQUEST STARTS HERE\n\n\n\n" ); // Second retrieval dts.setBeta( "2" ); - verifyMetadataBetaTag( "2", repo ); + verifyMetadataBetaTag( "2", PATH_JQUERY, repo ); + verifyMetadataBetaTag( "2", PATH_BABEL_PARSER, repo ); } - private void verifyMetadataBetaTag( final String betaTag, RemoteRepository repo ) + private void verifyMetadataBetaTag( final String betaTag, final String path, RemoteRepository repo ) throws IndyClientException, IOException { - try(InputStream remote = client.content().get( repo.getKey(), PATH )) + try (InputStream remote = client.content().get( repo.getKey(), path )) { assertThat( remote, notNullValue() ); diff --git a/addons/pkg-npm/ftests/src/main/java/org/commonjava/indy/pkg/npm/content/NPMMetadataWithContentTimeoutTest.java b/addons/pkg-npm/ftests/src/main/java/org/commonjava/indy/pkg/npm/content/NPMMetadataWithContentTimeoutTest.java new file mode 100644 index 0000000000..ff7b44836e --- /dev/null +++ b/addons/pkg-npm/ftests/src/main/java/org/commonjava/indy/pkg/npm/content/NPMMetadataWithContentTimeoutTest.java @@ -0,0 +1,122 @@ +/** + * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) + * + * 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.commonjava.indy.pkg.npm.content; + +import org.commonjava.indy.client.core.helper.PathInfo; +import org.commonjava.indy.ftest.core.AbstractContentManagementTest; +import org.commonjava.indy.ftest.core.category.TimingDependent; +import org.commonjava.indy.model.core.RemoteRepository; +import org.commonjava.indy.pkg.PackageTypeConstants; +import org.commonjava.indy.util.LocationUtils; +import org.commonjava.maven.galley.model.Location; +import org.commonjava.test.http.expect.ExpectationServer; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +import java.io.File; +import java.io.InputStream; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.junit.Assert.assertThat; + +/** + * This case tests if remote package.json will timeout correctly + * when:
+ *
    + *
  • remote repo A contains package.json with real content for a given package
  • + *
  • package.json is retrieved via remote repo A by client
  • + *
  • package.json metadata timeout is scheduled
  • + *
+ * then:
+ *
    + *
  • package.json expires with metadata timeout and is removed from local storage in remote repository A
  • + *
+ */ +public class NPMMetadataWithContentTimeoutTest + extends AbstractContentManagementTest +{ + @Rule + public ExpectationServer server = new ExpectationServer( "repos" ); + + @Test + @Category( TimingDependent.class ) + public void timeout() + throws Exception + { + final int METADATA_TIMEOUT_SECONDS = 4; + final int METADATA_TIMEOUT_WAITING_MILLISECONDS = 2500; + + final String repoId = "test-repo"; + final String pkgPath = "@babel/parser"; + final String pkgMetaPath = pkgPath + "/package.json"; + + final String metadataUrl = server.formatUrl( repoId, pkgPath ); + + // mocking up a http server that expects access to metadata + try (InputStream is = getClass().getResourceAsStream( "babel-parser-7.0.0-beta.48.json" )) + { + server.expect( metadataUrl, 200, is ); + } + + // set up remote repository pointing to the test http server, and timeout little later + final String changelog = "Timeout Testing: " + name.getMethodName(); + final RemoteRepository repository = + new RemoteRepository( PackageTypeConstants.PKG_TYPE_NPM, repoId, server.formatUrl( repoId ) ); + repository.setMetadataTimeoutSeconds( METADATA_TIMEOUT_SECONDS ); + client.stores().create( repository, changelog, RemoteRepository.class ); + + // first time trigger normal content storage with timeout, should be 4s + PathInfo pkgPathFile = client.content().getInfo( repository.getKey(), pkgPath ); + client.content().get( repository.getKey(), pkgPath ).close(); // force storage + assertThat( "no metadata result", pkgPathFile, notNullValue() ); + assertThat( "metadata doesn't exist", pkgPathFile.exists(), equalTo( true ) ); + + pkgPathFile = client.content().getInfo( repository.getKey(), pkgMetaPath ); + client.content().get( repository.getKey(), pkgPath ).close(); + assertThat( "no metadata result", pkgPathFile, notNullValue() ); + assertThat( "metadata doesn't exist", pkgPathFile.exists(), equalTo( true ) ); + + Location location = LocationUtils.toLocation( repository ); + File pkgFile = getPhysicalStorageFile( location, pkgPath ); + File pkgMetaFile = getPhysicalStorageFile( location, pkgMetaPath ); + + assertThat( "pkg dir doesn't exist", pkgFile.exists(), equalTo( true ) ); + assertThat( "metadata doesn't exist", pkgMetaFile.exists(), equalTo( true ) ); + + // wait for first 2.5s + sleepAndRunFileGC( METADATA_TIMEOUT_WAITING_MILLISECONDS ); + + // as the metadata content re-request, the metadata timeout interval should NOT be re-scheduled + client.content().get( repository.getKey(), pkgPath ).close(); + client.content().get( repository.getKey(), pkgMetaPath ).close(); + + // will wait another 4s + sleepAndRunFileGC( METADATA_TIMEOUT_WAITING_MILLISECONDS + 1500 ); + // as rescheduled, the artifact should not be deleted + assertThat( "artifact should be removed as the rescheduled of metadata should not succeed", + pkgFile.exists(), equalTo( false ) ); + assertThat( "artifact should be removed as the rescheduled of metadata should not succeed", + pkgMetaFile.exists(), equalTo( false ) ); + } + + @Override + protected boolean createStandardTestStructures() + { + return false; + } +} diff --git a/addons/pkg-npm/ftests/src/main/resources/babel-parser-7.0.0-beta.48.json b/addons/pkg-npm/ftests/src/main/resources/babel-parser-7.0.0-beta.48.json new file mode 100644 index 0000000000..244828515c --- /dev/null +++ b/addons/pkg-npm/ftests/src/main/resources/babel-parser-7.0.0-beta.48.json @@ -0,0 +1,51 @@ +{ + "_id": "@babel/parser", + "_rev": "87-0bf11730f53724368fe4fc3bef482fed", + "name": "@babel/parser", + "dist-tags": { + "latest": "7.0.0-beta.48" + }, + "versions": { + "7.0.0-beta.48": { + "name": "@babel/parser", + "version": "7.0.0-beta.48", + "description": "A JavaScript parser", + "author": { + "name": "Sebastian McKenzie", + "email": "sebmck@gmail.com" + }, + "homepage": "https://babeljs.io/", + "license": "MIT", + "keywords": [ + "babel", + "javascript", + "parser", + "tc39", + "ecmascript", + "@babel/parser" + ], + "main": "lib/index.js", + "files": [ + "bin", + "lib" + ], + "engines": { + "node": ">=6.0.0" + }, + "bin": { + "parser": "./bin/babel-parser.js" + }, + "_id": "@babel/parser@7.0.0-beta.48", + "_npmVersion": "5.6.0", + "_nodeVersion": "8.10.0", + "dist": { + "integrity": "sha512-X3pKxvy7vL79zc/6XS6cCObyuRMnsRGRu7d3zVSPZGCdxkK0/wTeFRwseRjcvhReV/6LW2D8H8qHVFFL0c+5+w==", + "shasum": "f93895cbacee703c0ec98e5af3901c77edd9f1d7", + "tarball": "https://registry.npmjs.org/@babel/parser/-/parser-7.0.0-beta.48.tgz", + "fileCount": 6, + "unpackedSize": 380503, + "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBxCGCRA9TVsSAnZWagAALkIQAI8MHP43v0t5yW+5eb8a\nFvCKyfUV5pYIAgLwyT6QlxWhW37Yy2x1jqzQPVFDz3TEvXHSetOroranW1v6\nH3RrGgFfV6ouyrKnYgk8JpTXHWlHKXWB0m0BqkOrMQwDdQVVVeIxdpQr1yrb\noyt5AjRZ272dKN0Q4iQTeLqC6uxUXYlarbBRUgWXx5BuLh//rVjIJGQ5Fj2m\nZcFFGRjbyw9Hdb0/wo7x0lV6VEi4Oh2wRNZuskIFBRNAiHdrCLf1IZEDsQRE\nGRXuKXc6Xj8LeHvoS2V5Vvs7dbuUq5lq5oiRiTEkPt032MSftU8tsl4UysVn\n1krvHCQYqNCg5WgKJlqXZCae+AxUWj9UacC98aq4vAeZl3DVzoJ5n5ENcHcI\na9Wrs0qumfODoxaDOSs+DNXAYnSc91zoguH187OOCLfas2Gw1MyRIXnJwvnH\nVnwnQyFBuRDDigxBGrRVVFkY6cf+vzoSaVIs5VL8wI85FDtKK/JmTtGwWLtk\nE1xG2tQVl622gWNZqPvoKbS5U1glbq9oPq7ECkPwWA9DSzdBidXfdezyMxJe\n1weMKBjz4+cOvzDS5ybdDPjQE1HlfQ3ffWz8nMm1agoLMXBz5e9pqYo098sL\n+FbijDCbi2Db3fD3UT1DBFMp3+GHuhe4/Aiow2TgL6l9rPlijvXVtAZdnRPV\ng+id\r\n=kdOk\r\n-----END PGP SIGNATURE-----\r\n" + } + } + } +} \ No newline at end of file diff --git a/addons/pkg-npm/jaxrs/pom.xml b/addons/pkg-npm/jaxrs/pom.xml index 05e73cfab9..f1b902dee6 100644 --- a/addons/pkg-npm/jaxrs/pom.xml +++ b/addons/pkg-npm/jaxrs/pom.xml @@ -20,7 +20,7 @@ indy-pkg-npm org.commonjava.indy - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT 4.0.0 diff --git a/addons/pkg-npm/model-java/pom.xml b/addons/pkg-npm/model-java/pom.xml index f1b92013b3..755e09ec84 100644 --- a/addons/pkg-npm/model-java/pom.xml +++ b/addons/pkg-npm/model-java/pom.xml @@ -20,7 +20,7 @@ indy-pkg-npm org.commonjava.indy - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT 4.0.0 diff --git a/addons/pkg-npm/model-java/src/main/java/org/commonjava/indy/pkg/npm/model/PackageMetadata.java b/addons/pkg-npm/model-java/src/main/java/org/commonjava/indy/pkg/npm/model/PackageMetadata.java index 93bbe272e4..708de89141 100644 --- a/addons/pkg-npm/model-java/src/main/java/org/commonjava/indy/pkg/npm/model/PackageMetadata.java +++ b/addons/pkg-npm/model-java/src/main/java/org/commonjava/indy/pkg/npm/model/PackageMetadata.java @@ -28,9 +28,7 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Collections; import java.util.Date; -import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -56,17 +54,17 @@ public class PackageMetadata @JsonProperty( "dist-tags" ) private DistTag distTags = new DistTag(); - private Map versions = new LinkedHashMap(); + private Map versions = new LinkedHashMap<>(); private List maintainers = new ArrayList<>(); - private Map time = new LinkedHashMap(); + private Map time = new LinkedHashMap<>(); private UserInfo author; - private Map users = new LinkedHashMap(); + private Map users = new LinkedHashMap<>(); - @ApiModelProperty( required = false, dataType = "Repository", value = "Specify the place where your code lives." ) + @ApiModelProperty( dataType = "Repository", value = "Specify the place where your code lives." ) private Repository repository; private String readme; @@ -77,7 +75,7 @@ public class PackageMetadata private List keywords = new ArrayList<>(); - @ApiModelProperty( required = false, dataType = "Bugs", value = "The issue tracker and / or the email address to which issues should be reported." ) + @ApiModelProperty( dataType = "Bugs", value = "The issue tracker and / or the email address to which issues should be reported." ) private Bugs bugs; private License license; @@ -309,10 +307,8 @@ public boolean merge( PackageMetadata source, boolean isForGroup ) } // merge maintainers list - Iterator maintainer = source.getMaintainers().iterator(); - while ( maintainer.hasNext() ) + for ( UserInfo m : source.getMaintainers() ) { - UserInfo m = (UserInfo) maintainer.next(); if ( m.getName() != null && !maintainers.contains( m ) ) { this.addMaintainers( new UserInfo( m.getName(), m.getEmail(), m.getUrl() ) ); @@ -321,10 +317,8 @@ public boolean merge( PackageMetadata source, boolean isForGroup ) } // merge keywords list - Iterator keyword = source.getKeywords().iterator(); - while ( keyword.hasNext() ) + for ( String key : source.getKeywords() ) { - String key = (String) keyword.next(); if ( !keywords.contains( key ) ) { this.addKeywords( key ); @@ -368,7 +362,7 @@ public boolean merge( PackageMetadata source, boolean isForGroup ) for ( final String key : sourceTimes.keySet() ) { String value = sourceTimes.get( key ); - Date date = null; + Date date; try { date = sdf.parse( value ); @@ -376,7 +370,9 @@ public boolean merge( PackageMetadata source, boolean isForGroup ) catch ( ParseException e ) { logger.error( String.format( "Cannot parse date: %s. Reason: %s", value, e ) ); + continue; } + // if source's version update time is more recent(sort as the letter order), will update it into the original map. if ( clone.containsKey( key ) && date.compareTo( clone.get( key ) ) <= 0 ) { @@ -393,7 +389,7 @@ public boolean merge( PackageMetadata source, boolean isForGroup ) // sort as the time value in map List> timeList = new ArrayList<>( clone.entrySet() ); // sort the time as value (update time) asc - Collections.sort( timeList, ( o1, o2 ) -> o1.getValue().compareTo( o2.getValue() ) ); + timeList.sort( Map.Entry.comparingByValue() ); Map result = new LinkedHashMap<>(); // make the 'modified' and 'created' value as the first two keys in final map diff --git a/addons/pkg-npm/pom.xml b/addons/pkg-npm/pom.xml index a867b4b1e6..6cce19d904 100644 --- a/addons/pkg-npm/pom.xml +++ b/addons/pkg-npm/pom.xml @@ -20,7 +20,7 @@ indy-addons org.commonjava.indy - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT 4.0.0 diff --git a/addons/pom.xml b/addons/pom.xml index 939cdd027c..4f79f983eb 100644 --- a/addons/pom.xml +++ b/addons/pom.xml @@ -22,7 +22,7 @@ org.commonjava.indy indy-parent - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-addons @@ -43,12 +43,12 @@ diagnostics pkg-npm hosted-by-archive - content-browse + changelog event-audit sli path-mapped - repo-proxy + diff --git a/addons/promote/client-java/pom.xml b/addons/promote/client-java/pom.xml index d1c167100c..613ded1157 100644 --- a/addons/promote/client-java/pom.xml +++ b/addons/promote/client-java/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-promote - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-promote-client-java Indy :: Add-Ons :: Artifact Promotion :: Java Client diff --git a/addons/promote/client-java/src/main/java/org/commonjava/indy/promote/client/IndyPromoteAdminClientModule.java b/addons/promote/client-java/src/main/java/org/commonjava/indy/promote/client/IndyPromoteAdminClientModule.java new file mode 100644 index 0000000000..9dcea8b443 --- /dev/null +++ b/addons/promote/client-java/src/main/java/org/commonjava/indy/promote/client/IndyPromoteAdminClientModule.java @@ -0,0 +1,36 @@ +/** + * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) + * + * 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.commonjava.indy.promote.client; + +import org.commonjava.indy.client.core.IndyClientException; +import org.commonjava.indy.client.core.IndyClientModule; + +import static org.commonjava.indy.client.core.util.UrlUtils.buildUrl; +import static org.commonjava.indy.promote.client.IndyPromoteClientModule.PROMOTE_BASEPATH; + +public class IndyPromoteAdminClientModule + extends IndyClientModule +{ + public static final String PROMOTE_ADMIN_BASEPATH = PROMOTE_BASEPATH + "/admin"; + + public static final String TRACKING = PROMOTE_ADMIN_BASEPATH + "/tracking"; + + public void deleteTrackingRecords( final String trackingId ) + throws IndyClientException + { + http.delete( buildUrl( TRACKING, trackingId ) ); + } +} diff --git a/addons/promote/common/pom.xml b/addons/promote/common/pom.xml index 188183cb66..5e8c30c2b3 100644 --- a/addons/promote/common/pom.xml +++ b/addons/promote/common/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-promote - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-promote-common Indy :: Add-Ons :: Artifact Promotion :: Common @@ -71,7 +71,7 @@ org.commonjava.indy - indy-subsys-metrics-reporter + indy-subsys-metrics diff --git a/addons/promote/common/src/main/data/promote/rules/maven-project-version-pattern.groovy b/addons/promote/common/src/main/data/promote/rules/maven-project-version-pattern.groovy index cc3f2a38d3..ec113e10da 100644 --- a/addons/promote/common/src/main/data/promote/rules/maven-project-version-pattern.groovy +++ b/addons/promote/common/src/main/data/promote/rules/maven-project-version-pattern.groovy @@ -1,5 +1,6 @@ package org.commonjava.indy.promote.rules +import java.util.regex.Pattern import org.apache.commons.lang.StringUtils; import org.commonjava.indy.promote.validate.model.ValidationRequest import org.commonjava.indy.promote.validate.model.ValidationRule @@ -8,7 +9,7 @@ import org.slf4j.LoggerFactory class MavenProjectVersionPattern implements ValidationRule { String validate(ValidationRequest request) throws Exception { - def versionPattern = request.getValidationParameter("versionPattern") + def versionPattern = request.getVersionPattern() def errors = Collections.synchronizedList(new ArrayList()); if (versionPattern != null) { @@ -17,9 +18,10 @@ class MavenProjectVersionPattern implements ValidationRule { def ref = tools.getArtifact(it) if (ref != null) { def vs = ref.getVersionString() - if (!vs.matches(versionPattern)) { + def matcher = versionPattern.matcher(vs) + if (!matcher.matches()) { errors.add(String.format("%s does not match version pattern: '%s' (version was: '%s')", - it, versionPattern, vs)) + it, versionPattern.pattern(), vs)) } } }) diff --git a/addons/promote/common/src/main/data/promote/rules/npm-version-pattern.groovy b/addons/promote/common/src/main/data/promote/rules/npm-version-pattern.groovy index 74846ddd06..a8f7d03159 100644 --- a/addons/promote/common/src/main/data/promote/rules/npm-version-pattern.groovy +++ b/addons/promote/common/src/main/data/promote/rules/npm-version-pattern.groovy @@ -1,5 +1,6 @@ package org.commonjava.indy.promote.rules +import java.util.regex.Pattern import org.apache.commons.lang.StringUtils import org.commonjava.indy.pkg.PackageTypeConstants; import org.commonjava.indy.promote.validate.model.ValidationRequest @@ -8,8 +9,8 @@ import org.slf4j.LoggerFactory class NPMVersionPattern implements ValidationRule { String validate(ValidationRequest request) throws Exception { - def versionPattern = request.getValidationParameter("versionPattern") - def scopedVersionPattern = request.getValidationParameter("scopedVersionPattern") + def versionPattern = request.getVersionPattern() + def scopedVersionPattern = request.getScopedVersionPattern() def validScope = request.getValidationParameter("validScope") def errors = Collections.synchronizedList(new ArrayList()) def logger = LoggerFactory.getLogger(getClass()) @@ -28,21 +29,24 @@ class NPMVersionPattern implements ValidationRule { if (versionPattern != null) { def vs = pkgPath.version logger.info("Start to do version match for path {} with version {}", pkgPath, vs) - if (!vs.matches(versionPattern)) { + + def matcher = versionPattern.matcher(vs) + if (!matcher.matches()) { errors.add(String.format("%s is not %s scoped and does not match version pattern: '%s' (version was: '%s')", - it, validScope, versionPattern, vs)) + it, validScope, versionPattern.pattern(), vs)) } else { - logger.info("path {} with version {} matches with version pattern {}", pkgPath, vs, versionPattern) + logger.info("path {} with version {} matches with version pattern {}", pkgPath, vs, versionPattern.pattern()) } } } else if (scopedVersionPattern != null) { def vs = pkgPath.version logger.info("Start to do version match for path {} with version {}", pkgPath, vs) - if (!vs.matches(scopedVersionPattern)) { + def matcher = scopedVersionPattern.matcher(vs) + if (!matcher.matches()) { errors.add(String.format("%s is %s scoped and does not match scoped version pattern: '%s' (version was: '%s')", - it, validScope, scopedVersionPattern, vs)) + it, validScope, scopedVersionPattern.pattern(), vs)) } else { - logger.info("path {} with version {} matches with version pattern {}", pkgPath, vs, scopedVersionPattern) + logger.info("path {} with version {} matches with version pattern {}", pkgPath, vs, scopedVersionPattern.pattern()) } } } diff --git a/addons/promote/common/src/main/java/org/commonjava/indy/promote/data/PromotionManager.java b/addons/promote/common/src/main/java/org/commonjava/indy/promote/data/PromotionManager.java index 7258180abd..70b5d859a9 100644 --- a/addons/promote/common/src/main/java/org/commonjava/indy/promote/data/PromotionManager.java +++ b/addons/promote/common/src/main/java/org/commonjava/indy/promote/data/PromotionManager.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.promote.data; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.cdi.util.weft.DrainingExecutorCompletionService; import org.commonjava.cdi.util.weft.ExecutorConfig; import org.commonjava.cdi.util.weft.Locker; @@ -29,7 +29,7 @@ import org.commonjava.indy.core.inject.GroupMembershipLocks; import org.commonjava.indy.data.IndyDataException; import org.commonjava.indy.data.StoreDataManager; -import org.commonjava.indy.measure.annotation.Measure; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.HostedRepository; @@ -55,7 +55,7 @@ import org.commonjava.maven.galley.spi.nfc.NotFoundCache; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.commonjava.indy.metrics.RequestContextHelper; +import org.commonjava.indy.util.RequestContextHelper; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.event.Event; diff --git a/addons/promote/common/src/main/java/org/commonjava/indy/promote/metrics/PathGauges.java b/addons/promote/common/src/main/java/org/commonjava/indy/promote/metrics/PathGauges.java index 5d137bfa3d..c38fd92ea0 100644 --- a/addons/promote/common/src/main/java/org/commonjava/indy/promote/metrics/PathGauges.java +++ b/addons/promote/common/src/main/java/org/commonjava/indy/promote/metrics/PathGauges.java @@ -15,8 +15,8 @@ */ package org.commonjava.indy.promote.metrics; -import com.codahale.metrics.Gauge; -import org.commonjava.indy.metrics.IndyMetricsManager; +import org.commonjava.o11yphant.metrics.api.Gauge; +import org.commonjava.o11yphant.metrics.DefaultMetricsManager; import org.commonjava.indy.promote.model.PathsPromoteResult; import javax.annotation.PostConstruct; @@ -30,7 +30,7 @@ public class PathGauges { @Inject - private IndyMetricsManager metricsManager; + private DefaultMetricsManager metricsManager; private AtomicInteger total = new AtomicInteger(); @@ -48,7 +48,7 @@ public void init() registerPathPromotionGauges( metricsManager ); } - private void registerPathPromotionGauges( IndyMetricsManager metricsManager ) + private void registerPathPromotionGauges( DefaultMetricsManager metricsManager ) { Map> gauges = new HashMap<>(); gauges.put( "total", () -> getTotal() ); diff --git a/addons/promote/common/src/main/java/org/commonjava/indy/promote/validate/PromotionValidationTools.java b/addons/promote/common/src/main/java/org/commonjava/indy/promote/validate/PromotionValidationTools.java index 8d67766cbc..2be85aea53 100644 --- a/addons/promote/common/src/main/java/org/commonjava/indy/promote/validate/PromotionValidationTools.java +++ b/addons/promote/common/src/main/java/org/commonjava/indy/promote/validate/PromotionValidationTools.java @@ -27,7 +27,7 @@ import org.commonjava.indy.data.IndyDataException; import org.commonjava.indy.data.StoreDataManager; import org.commonjava.indy.data.ArtifactStoreQuery; -import org.commonjava.indy.measure.annotation.Measure; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.StoreKey; import org.commonjava.indy.model.core.io.IndyObjectMapper; @@ -60,7 +60,7 @@ import org.commonjava.maven.galley.transport.htcli.model.HttpExchangeMetadata; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.commonjava.indy.metrics.RequestContextHelper; +import org.commonjava.indy.util.RequestContextHelper; import org.slf4j.MDC; import javax.inject.Inject; diff --git a/addons/promote/common/src/main/java/org/commonjava/indy/promote/validate/PromotionValidator.java b/addons/promote/common/src/main/java/org/commonjava/indy/promote/validate/PromotionValidator.java index 24aa0de8f2..d863607a2e 100644 --- a/addons/promote/common/src/main/java/org/commonjava/indy/promote/validate/PromotionValidator.java +++ b/addons/promote/common/src/main/java/org/commonjava/indy/promote/validate/PromotionValidator.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.promote.validate; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.ClassUtils; import org.commonjava.cdi.util.weft.DrainingExecutorCompletionService; import org.commonjava.cdi.util.weft.ExecutorConfig; @@ -27,8 +27,8 @@ import org.commonjava.indy.content.DownloadManager; import org.commonjava.indy.data.IndyDataException; import org.commonjava.indy.data.StoreDataManager; -import org.commonjava.indy.measure.annotation.Measure; -import org.commonjava.indy.metrics.IndyMetricsManager; +import org.commonjava.o11yphant.metrics.annotation.Measure; +import org.commonjava.o11yphant.metrics.DefaultMetricsManager; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.RemoteRepository; import org.commonjava.indy.promote.conf.PromoteConfig; @@ -43,8 +43,7 @@ import org.commonjava.maven.galley.model.Transfer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.commonjava.indy.metrics.RequestContextHelper; -import org.slf4j.MDC; +import org.commonjava.indy.util.RequestContextHelper; import javax.inject.Inject; import java.io.File; @@ -57,10 +56,10 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.atomic.AtomicReference; -import static com.codahale.metrics.MetricRegistry.name; import static java.lang.String.format; -import static org.apache.commons.lang.StringUtils.join; +import static org.apache.commons.lang3.StringUtils.join; import static org.commonjava.indy.core.ctl.PoolUtils.detectOverloadVoid; +import static org.commonjava.o11yphant.metrics.util.NameUtils.name; /** * Created by jdcasey on 9/11/15. @@ -89,7 +88,7 @@ public class PromotionValidator private PromoteConfig config; @Inject - private IndyMetricsManager metricsManager; + private DefaultMetricsManager metricsManager; @Inject @WeftManaged @@ -104,7 +103,7 @@ protected PromotionValidator() public PromotionValidator( PromoteValidationsManager validationsManager, PromotionValidationTools validationTools, StoreDataManager storeDataMgr, DownloadManager downloadManager, - WeftExecutorService validateService, IndyMetricsManager metricsManager ) + WeftExecutorService validateService, DefaultMetricsManager metricsManager ) { this.validationsManager = validationsManager; this.validationTools = validationTools; diff --git a/addons/promote/common/src/main/java/org/commonjava/indy/promote/validate/model/ValidationRequest.java b/addons/promote/common/src/main/java/org/commonjava/indy/promote/validate/model/ValidationRequest.java index 967f245995..098f4491df 100644 --- a/addons/promote/common/src/main/java/org/commonjava/indy/promote/validate/model/ValidationRequest.java +++ b/addons/promote/common/src/main/java/org/commonjava/indy/promote/validate/model/ValidationRequest.java @@ -18,7 +18,6 @@ import org.commonjava.cdi.util.weft.ThreadContext; import org.commonjava.indy.IndyWorkflowException; import org.commonjava.indy.content.StoreResource; -import org.commonjava.indy.metrics.RequestContextHelper; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.StoreKey; import org.commonjava.indy.promote.model.PathsPromoteRequest; @@ -26,12 +25,14 @@ import org.commonjava.indy.promote.model.ValidationRuleSet; import org.commonjava.indy.promote.validate.PromotionValidationException; import org.commonjava.indy.promote.validate.PromotionValidationTools; +import org.commonjava.indy.util.RequestContextHelper; import org.commonjava.maven.galley.model.Transfer; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.function.Predicate; +import java.util.regex.Pattern; import java.util.stream.Collectors; /** @@ -49,6 +50,12 @@ public class ValidationRequest private final ArtifactStore sourceRepository; + private static final Predicate DEFAULT_FILTER = + getMetadataPredicate().negate().and( getChecksumPredicate().negate() ); + + private static final String VERSION_PATTERN = "versionPattern"; + private static final String SCOPED_VERSION_PATTERN = "scopedVersionPattern"; + public ValidationRequest( PromoteRequest promoteRequest, ValidationRuleSet ruleSet, PromotionValidationTools tools, ArtifactStore sourceRepository ) { this.promoteRequest = promoteRequest; @@ -59,11 +66,20 @@ public ValidationRequest( PromoteRequest promoteRequest, ValidationRuleSet ruleS public synchronized Set getSourcePaths() throws PromotionValidationException { - return getSourcePaths(false, false); + return getSourcePaths( false, false, DEFAULT_FILTER ); } public synchronized Set getSourcePaths( boolean includeMetadata, boolean includeChecksums ) throws PromotionValidationException + { + Predicate metadata = asPredicate( includeMetadata ).or( getMetadataPredicate().negate() ); + Predicate checksums = asPredicate( includeChecksums ).or( getChecksumPredicate().negate() ); + return getSourcePaths( includeMetadata, includeChecksums ,metadata.and( checksums ) ); + } + + private Set getSourcePaths( boolean includeMetadata, + boolean includeChecksums , Predicate filter ) + throws PromotionValidationException { if ( requestPaths == null ) { @@ -99,8 +115,6 @@ public synchronized Set getSourcePaths( boolean includeMetadata, boolean if ( !includeMetadata || !includeChecksums ) { - Predicate filter = ( path ) -> ( includeMetadata || !path.matches( ".+/maven-metadata\\.xml(\\.(md5|sha[0-9]+))?" ) ) - && ( includeChecksums || !path.matches( ".+\\.(md5|sha[0-9]+)" ) ); return requestPaths.stream().filter( filter ).collect( Collectors.toSet() ); } @@ -134,6 +148,18 @@ else if ( txfr.exists() ) } } + private Predicate asPredicate( boolean value ) { + return ( path ) -> value; + } + + private static Predicate getMetadataPredicate () { + return Pattern.compile( ".+/maven-metadata\\.xml(\\.(md5|sha[0-9]+))?" ).asPredicate(); + } + + private static Predicate getChecksumPredicate () { + return Pattern.compile( ".+\\.(md5|sha[0-9]+)" ).asPredicate(); + } + public PromoteRequest getPromoteRequest() { return promoteRequest; @@ -154,6 +180,26 @@ public String getValidationParameter( String key ) return ruleSet.getValidationParameter( key ); } + public Pattern getVersionPattern( String key ) + { + return ruleSet.getVersionPattern( key ); + } + + public Pattern getVersionPattern() + { + return ruleSet.getVersionPattern( VERSION_PATTERN ); + } + + public Pattern getScopedVersionPattern( String key ) + { + return ruleSet.getScopedVersionPattern( key ); + } + + public Pattern getScopedVersionPattern() + { + return ruleSet.getScopedVersionPattern( SCOPED_VERSION_PATTERN ); + } + public StoreKey getSource() { return sourceRepository.getKey(); diff --git a/addons/promote/ftests/pom.xml b/addons/promote/ftests/pom.xml index 365d61ae38..250e260b60 100644 --- a/addons/promote/ftests/pom.xml +++ b/addons/promote/ftests/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-promote - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-ftests-promote diff --git a/addons/promote/ftests/src/main/java/org/commonjava/indy/promote/ftest/CacheCheckingforPromoteWithRemoteTest.java b/addons/promote/ftests/src/main/java/org/commonjava/indy/promote/ftest/CacheCheckingforPromoteWithRemoteTest.java index 160c5243a0..93ff5ff19f 100644 --- a/addons/promote/ftests/src/main/java/org/commonjava/indy/promote/ftest/CacheCheckingforPromoteWithRemoteTest.java +++ b/addons/promote/ftests/src/main/java/org/commonjava/indy/promote/ftest/CacheCheckingforPromoteWithRemoteTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.promote.ftest; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.client.core.IndyClientException; import org.commonjava.indy.client.core.IndyClientModule; import org.commonjava.indy.ftest.core.AbstractIndyFunctionalTest; diff --git a/addons/promote/ftests/src/main/java/org/commonjava/indy/promote/ftest/GroupHostedMetadataRemergedOnPromoteTest.java b/addons/promote/ftests/src/main/java/org/commonjava/indy/promote/ftest/GroupHostedMetadataRemergedOnPromoteTest.java index 44a30fd19d..b863cab3a7 100644 --- a/addons/promote/ftests/src/main/java/org/commonjava/indy/promote/ftest/GroupHostedMetadataRemergedOnPromoteTest.java +++ b/addons/promote/ftests/src/main/java/org/commonjava/indy/promote/ftest/GroupHostedMetadataRemergedOnPromoteTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.promote.ftest; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.client.core.IndyClientException; import org.commonjava.indy.client.core.IndyClientModule; import org.commonjava.indy.client.core.helper.PathInfo; diff --git a/addons/promote/ftests/src/main/java/org/commonjava/indy/promote/ftest/rule/ArtifactRefs_PromoteWithParent_RuleTest.java b/addons/promote/ftests/src/main/java/org/commonjava/indy/promote/ftest/rule/ArtifactRefs_PromoteWithParent_RuleTest.java index 8adf52dcb2..49ad69322a 100644 --- a/addons/promote/ftests/src/main/java/org/commonjava/indy/promote/ftest/rule/ArtifactRefs_PromoteWithParent_RuleTest.java +++ b/addons/promote/ftests/src/main/java/org/commonjava/indy/promote/ftest/rule/ArtifactRefs_PromoteWithParent_RuleTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.promote.ftest.rule; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.ftest.core.category.EventDependent; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.HostedRepository; diff --git a/addons/promote/jaxrs/pom.xml b/addons/promote/jaxrs/pom.xml index b0443cd821..942d4416f8 100644 --- a/addons/promote/jaxrs/pom.xml +++ b/addons/promote/jaxrs/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-promote - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-promote-jaxrs diff --git a/addons/promote/model-java/pom.xml b/addons/promote/model-java/pom.xml index 6bef8c14cc..f4411ca6b2 100644 --- a/addons/promote/model-java/pom.xml +++ b/addons/promote/model-java/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-promote - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-promote-model-java Indy :: Add-Ons :: Artifact Promotion :: Java Domain Model diff --git a/addons/promote/model-java/src/main/java/org/commonjava/indy/promote/model/ValidationCatalogDTO.java b/addons/promote/model-java/src/main/java/org/commonjava/indy/promote/model/ValidationCatalogDTO.java index 8a49a3451b..9daa003216 100644 --- a/addons/promote/model-java/src/main/java/org/commonjava/indy/promote/model/ValidationCatalogDTO.java +++ b/addons/promote/model-java/src/main/java/org/commonjava/indy/promote/model/ValidationCatalogDTO.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.promote.model; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import java.util.Collections; import java.util.Map; diff --git a/addons/promote/model-java/src/main/java/org/commonjava/indy/promote/model/ValidationRuleSet.java b/addons/promote/model-java/src/main/java/org/commonjava/indy/promote/model/ValidationRuleSet.java index 331be72142..736ddba9dd 100644 --- a/addons/promote/model-java/src/main/java/org/commonjava/indy/promote/model/ValidationRuleSet.java +++ b/addons/promote/model-java/src/main/java/org/commonjava/indy/promote/model/ValidationRuleSet.java @@ -21,6 +21,9 @@ import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.regex.Pattern; /** * Created by jdcasey on 9/11/15. @@ -39,6 +42,9 @@ public class ValidationRuleSet @ApiModelProperty( "Key-value mapping of extra parameters that MAY be required for certain validation rules" ) private Map validationParameters; + private transient Pattern versionPattern; + private transient Pattern scopedVersionPattern; + public ValidationRuleSet(){} public ValidationRuleSet( String name, String storeKeyPattern, List ruleNames, Map validationParameters ) @@ -138,4 +144,28 @@ public String getValidationParameter( String key ) { return validationParameters == null ? null : validationParameters.get( key ); } + + public Pattern getVersionPattern( String key ) + { + if ( versionPattern == null ) + { + versionPattern = getPropertyAsPattern ( key ); + } + return versionPattern; + } + + public Pattern getScopedVersionPattern( String key ) + { + if ( scopedVersionPattern == null ) + { + scopedVersionPattern = getPropertyAsPattern ( key ); + } + return scopedVersionPattern; + } + + private Pattern getPropertyAsPattern ( String key ) + { + String value = validationParameters.get( key ); + return value == null ? null : Pattern.compile( value ); + } } diff --git a/addons/promote/pom.xml b/addons/promote/pom.xml index 4a05e64190..76121b47f4 100644 --- a/addons/promote/pom.xml +++ b/addons/promote/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-addons - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-promote Indy :: Add-Ons :: Artifact Promotion :: Parent diff --git a/addons/repo-proxy/common/pom.xml b/addons/repo-proxy/common/pom.xml index a10f215134..6317c6badd 100644 --- a/addons/repo-proxy/common/pom.xml +++ b/addons/repo-proxy/common/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-repo-proxy - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT indy-repo-proxy-common Indy :: Add-Ons :: Repository-Proxy :: Common diff --git a/addons/repo-proxy/common/src/main/java/org/commonjava/indy/repo/proxy/ContentBrowseRemoteIndyListingRewriteManager.java b/addons/repo-proxy/common/src/main/java/org/commonjava/indy/repo/proxy/ContentBrowseRemoteIndyListingRewriteManager.java index bbf36d5400..1fa85b44d8 100644 --- a/addons/repo-proxy/common/src/main/java/org/commonjava/indy/repo/proxy/ContentBrowseRemoteIndyListingRewriteManager.java +++ b/addons/repo-proxy/common/src/main/java/org/commonjava/indy/repo/proxy/ContentBrowseRemoteIndyListingRewriteManager.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.repo.proxy; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.client.core.Indy; import org.commonjava.indy.client.core.IndyClientException; import org.commonjava.indy.content.browse.client.IndyContentBrowseClientModule; diff --git a/addons/repo-proxy/common/src/main/java/org/commonjava/indy/repo/proxy/RepoProxyController.java b/addons/repo-proxy/common/src/main/java/org/commonjava/indy/repo/proxy/RepoProxyController.java index 4066e816da..a48f771991 100644 --- a/addons/repo-proxy/common/src/main/java/org/commonjava/indy/repo/proxy/RepoProxyController.java +++ b/addons/repo-proxy/common/src/main/java/org/commonjava/indy/repo/proxy/RepoProxyController.java @@ -41,8 +41,6 @@ import static java.util.Optional.of; import static javax.servlet.http.HttpServletResponse.SC_MOVED_PERMANENTLY; import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND; -import static org.commonjava.indy.metrics.RequestContextHelper.HTTP_STATUS; -import static org.commonjava.indy.metrics.RequestContextHelper.setContext; import static org.commonjava.indy.pkg.npm.model.NPMPackageTypeDescriptor.NPM_PKG_KEY; import static org.commonjava.indy.repo.proxy.RepoProxyAddon.ADDON_NAME; import static org.commonjava.indy.repo.proxy.RepoProxyUtils.extractPath; @@ -50,6 +48,8 @@ import static org.commonjava.indy.repo.proxy.RepoProxyUtils.getOriginalStoreKeyFromPath; import static org.commonjava.indy.repo.proxy.RepoProxyUtils.getProxyTo; import static org.commonjava.indy.repo.proxy.RepoProxyUtils.isNPMMetaPath; +import static org.commonjava.indy.util.RequestContextHelper.HTTP_STATUS; +import static org.commonjava.indy.util.RequestContextHelper.setContext; @ApplicationScoped public class RepoProxyController diff --git a/addons/repo-proxy/common/src/main/java/org/commonjava/indy/repo/proxy/conf/RepoProxyConfig.java b/addons/repo-proxy/common/src/main/java/org/commonjava/indy/repo/proxy/conf/RepoProxyConfig.java index fee3d39208..5a3863a522 100644 --- a/addons/repo-proxy/common/src/main/java/org/commonjava/indy/repo/proxy/conf/RepoProxyConfig.java +++ b/addons/repo-proxy/common/src/main/java/org/commonjava/indy/repo/proxy/conf/RepoProxyConfig.java @@ -46,6 +46,8 @@ public class RepoProxyConfig private static final String ENABLED_PARAM = "enabled"; + private static final String CONTENT_LIMITER_ENABLED = "content.limiter.enabled"; + private static final String API_PATTERNS_PARAM = "api.url.patterns"; private static final String API_METHODS_PARAM = "api.methods"; @@ -74,6 +76,8 @@ public class RepoProxyConfig private static final Boolean DEFAULT_CONTENT_BROWSE_REWRITE_ENABLE = Boolean.TRUE; + private static final Boolean DEFAULT_CONTENT_LIMITER_ENABLE = Boolean.TRUE; + private static final Integer DEFAULT_REMOTE_INDY_REQUEST_TIMEOUT = 60; private String repoCreatorRuleBaseDir; @@ -90,6 +94,8 @@ public class RepoProxyConfig private Boolean contentBrowseRewriteEnabled; + private Boolean contentLimiterEnabled; + private String defaultRemoteIndyUrl; private Boolean remoteIndyListingRewriteEnabled; @@ -124,6 +130,12 @@ public Boolean isContentBrowseRewriteEnabled() this.contentBrowseRewriteEnabled; } + public Boolean isContentLimiterEnabled() + { + return this.contentLimiterEnabled == null ? DEFAULT_CONTENT_LIMITER_ENABLE : + this.contentLimiterEnabled; + } + public Set getApiPatterns() { if ( apiPatterns.isEmpty() ) @@ -220,6 +232,9 @@ public void parameter( final String name, final String value ) case REMOTE_INDY_REQUEST_TIMEOUT: this.remoteIndyRequestTimeout = Integer.parseInt( value.trim() ); break; + case CONTENT_LIMITER_ENABLED: + this.contentLimiterEnabled = Boolean.valueOf( value.trim() ); + break; default: break; } diff --git a/addons/repo-proxy/common/src/main/java/org/commonjava/indy/repo/proxy/content/RepoProxyCacheProducer.java b/addons/repo-proxy/common/src/main/java/org/commonjava/indy/repo/proxy/content/RepoProxyCacheProducer.java new file mode 100644 index 0000000000..45f0b9744f --- /dev/null +++ b/addons/repo-proxy/common/src/main/java/org/commonjava/indy/repo/proxy/content/RepoProxyCacheProducer.java @@ -0,0 +1,43 @@ +/** + * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) + * + * 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.commonjava.indy.repo.proxy.content; + +import org.commonjava.indy.subsys.infinispan.CacheHandle; +import org.commonjava.indy.subsys.infinispan.CacheProducer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.inject.Produces; +import javax.inject.Inject; + +public class RepoProxyCacheProducer +{ + private final Logger logger = LoggerFactory.getLogger( getClass() ); + + @Inject + private CacheProducer cacheProducer; + + private static final String REPO_PROXY_CONTENT_CACHE = "repo-proxy-content"; + + @RepoProxyContentCache + @Produces + @ApplicationScoped + public CacheHandle scheduleExpireCache() + { + return cacheProducer.getCache( REPO_PROXY_CONTENT_CACHE ); + } +} diff --git a/subsys/metrics/core/src/main/java/org/commonjava/indy/measure/annotation/MetricWrapper.java b/addons/repo-proxy/common/src/main/java/org/commonjava/indy/repo/proxy/content/RepoProxyContentCache.java similarity index 62% rename from subsys/metrics/core/src/main/java/org/commonjava/indy/measure/annotation/MetricWrapper.java rename to addons/repo-proxy/common/src/main/java/org/commonjava/indy/repo/proxy/content/RepoProxyContentCache.java index 52b73480e2..65084cc76e 100644 --- a/subsys/metrics/core/src/main/java/org/commonjava/indy/measure/annotation/MetricWrapper.java +++ b/addons/repo-proxy/common/src/main/java/org/commonjava/indy/repo/proxy/content/RepoProxyContentCache.java @@ -13,20 +13,22 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.commonjava.indy.measure.annotation; +package org.commonjava.indy.repo.proxy.content; -import javax.enterprise.util.Nonbinding; -import javax.interceptor.InterceptorBinding; +import javax.inject.Qualifier; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.TYPE; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -@InterceptorBinding -@Target( { METHOD, TYPE } ) -@Retention( RUNTIME ) -public @interface MetricWrapper +/** + * Qualifier used to supply "repo-proxy-content" cache + */ +@Qualifier +@Target( { ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD } ) +@Retention( RetentionPolicy.RUNTIME ) +@Documented +public @interface RepoProxyContentCache { } diff --git a/addons/repo-proxy/common/src/main/java/org/commonjava/indy/repo/proxy/content/RepoProxyContentLimiter.java b/addons/repo-proxy/common/src/main/java/org/commonjava/indy/repo/proxy/content/RepoProxyContentLimiter.java new file mode 100644 index 0000000000..3026c03762 --- /dev/null +++ b/addons/repo-proxy/common/src/main/java/org/commonjava/indy/repo/proxy/content/RepoProxyContentLimiter.java @@ -0,0 +1,141 @@ +/** + * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) + * + * 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.commonjava.indy.repo.proxy.content; + +import org.commonjava.indy.IndyWorkflowException; +import org.commonjava.indy.content.ContentManager; +import org.commonjava.indy.data.IndyDataException; +import org.commonjava.indy.data.StoreDataManager; +import org.commonjava.indy.model.core.ArtifactStore; +import org.commonjava.indy.model.core.StoreKey; +import org.commonjava.indy.repo.proxy.conf.RepoProxyConfig; +import org.commonjava.indy.subsys.infinispan.CacheHandle; +import org.commonjava.indy.util.LocationUtils; +import org.commonjava.maven.galley.event.FileStorageEvent; +import org.infinispan.notifications.Listener; +import org.infinispan.notifications.cachelistener.annotation.CacheEntriesEvicted; +import org.infinispan.notifications.cachelistener.annotation.CacheEntryExpired; +import org.infinispan.notifications.cachelistener.event.CacheEntriesEvictedEvent; +import org.infinispan.notifications.cachelistener.event.CacheEntryExpiredEvent; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.event.Observes; +import javax.inject.Inject; +import java.util.Map; + +import static org.commonjava.indy.model.core.StoreType.remote; + +@ApplicationScoped +@Listener +public class RepoProxyContentLimiter +{ + + private final CacheHandle storedPaths; + + private final RepoProxyConfig config; + + private final StoreDataManager storeDataManager; + + private final ContentManager contentManager; + + private final Logger logger = LoggerFactory.getLogger( getClass() ); + + @Inject + public RepoProxyContentLimiter( @RepoProxyContentCache CacheHandle storedPaths, + StoreDataManager storeDataManager, ContentManager contentManager, + RepoProxyConfig config ) + { + this.storedPaths = storedPaths; + this.storeDataManager = storeDataManager; + this.contentManager = contentManager; + this.config = config; + } + + public void onContentStorage( @Observes FileStorageEvent storageEvent ) + { + if ( !isEnabled() ) + { + return; + } + + StoreKey storeKey = LocationUtils.getKey( storageEvent ); + if ( remote == storeKey.getType() ) + { + String path = storageEvent.getTransfer().getPath(); + String skp = storeKey.toString() + "#" + path; + + storedPaths.put( skp, skp ); + } + } + + private boolean isEnabled() + { + return config.isEnabled() && config.isContentLimiterEnabled(); + } + + @CacheEntryExpired + public void onContentExpiration( CacheEntryExpiredEvent event ) + { + if ( !isEnabled() ) + { + return; + } + + clearContent( event.getKey() ); + } + + @CacheEntriesEvicted + public void onContentEviction( CacheEntriesEvictedEvent event ) + { + if ( !isEnabled() ) + { + return; + } + + Map entries = event.getEntries(); + for ( String skp : entries.keySet() ) + { + clearContent( skp ); + } + } + + private void clearContent( String skp ) + { + String[] parts = skp.split( "#" ); + StoreKey storeKey = StoreKey.fromString( parts[0] ); + + if ( remote == storeKey.getType() ) + { + ArtifactStore store; + try + { + store = storeDataManager.getArtifactStore( storeKey ); + contentManager.delete( store, parts[1] ); + } + catch ( IndyDataException e ) + { + logger.warn( "Failed to lookup store: {} from event: {}", storeKey, skp ); + } + catch ( IndyWorkflowException e ) + { + logger.warn( "Failed to delete: {} from: {}, from event: {}", parts[1], storeKey, skp ); + } + } + } + +} diff --git a/addons/repo-proxy/common/src/main/resources/META-INF/beans.xml b/addons/repo-proxy/common/src/main/resources/META-INF/beans.xml index a85527e718..78fd046fcd 100644 --- a/addons/repo-proxy/common/src/main/resources/META-INF/beans.xml +++ b/addons/repo-proxy/common/src/main/resources/META-INF/beans.xml @@ -1,13 +1,20 @@ org.commonjava.indy indy-repo-proxy - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT indy-ftests-repo-proxy diff --git a/addons/repo-proxy/ftests/src/main/java/org/commonjava/indy/repo/proxy/ftest/RepoProxyNPMHugeMetaContentRewriteTest.java b/addons/repo-proxy/ftests/src/main/java/org/commonjava/indy/repo/proxy/ftest/RepoProxyNPMHugeMetaContentRewriteTest.java index 81fe715979..a2b2fd403a 100644 --- a/addons/repo-proxy/ftests/src/main/java/org/commonjava/indy/repo/proxy/ftest/RepoProxyNPMHugeMetaContentRewriteTest.java +++ b/addons/repo-proxy/ftests/src/main/java/org/commonjava/indy/repo/proxy/ftest/RepoProxyNPMHugeMetaContentRewriteTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.repo.proxy.ftest; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.model.core.HostedRepository; import org.commonjava.indy.model.core.RemoteRepository; diff --git a/addons/repo-proxy/ftests/src/main/java/org/commonjava/indy/repo/proxy/ftest/create/RepoProxyCreatorWithNPMContentRewriteTest.java b/addons/repo-proxy/ftests/src/main/java/org/commonjava/indy/repo/proxy/ftest/create/RepoProxyCreatorWithNPMContentRewriteTest.java index 2a6f9b9729..2328fcfc6f 100644 --- a/addons/repo-proxy/ftests/src/main/java/org/commonjava/indy/repo/proxy/ftest/create/RepoProxyCreatorWithNPMContentRewriteTest.java +++ b/addons/repo-proxy/ftests/src/main/java/org/commonjava/indy/repo/proxy/ftest/create/RepoProxyCreatorWithNPMContentRewriteTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.repo.proxy.ftest.create; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.RemoteRepository; diff --git a/addons/repo-proxy/ftests/src/main/resources/beans.xml b/addons/repo-proxy/ftests/src/main/resources/beans.xml index 359f3ee069..78fd046fcd 100644 --- a/addons/repo-proxy/ftests/src/main/resources/beans.xml +++ b/addons/repo-proxy/ftests/src/main/resources/beans.xml @@ -1,13 +1,20 @@ org.commonjava.indy indy-repo-proxy - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT indy-repo-proxy-jaxrs diff --git a/addons/repo-proxy/pom.xml b/addons/repo-proxy/pom.xml index cca67a9da2..da0385c522 100644 --- a/addons/repo-proxy/pom.xml +++ b/addons/repo-proxy/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-addons - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT indy-repo-proxy Indy :: Add-Ons :: Repository-Proxy :: Parent diff --git a/addons/revisions/common/pom.xml b/addons/revisions/common/pom.xml index 1b56c77d87..8c988176d2 100644 --- a/addons/revisions/common/pom.xml +++ b/addons/revisions/common/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-revisions - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-revisions-common Indy :: Add-Ons :: Revisions :: Common diff --git a/addons/revisions/common/src/main/java/org/commonjava/indy/revisions/RevisionsManager.java b/addons/revisions/common/src/main/java/org/commonjava/indy/revisions/RevisionsManager.java index aea97aef47..dd375f5433 100644 --- a/addons/revisions/common/src/main/java/org/commonjava/indy/revisions/RevisionsManager.java +++ b/addons/revisions/common/src/main/java/org/commonjava/indy/revisions/RevisionsManager.java @@ -15,8 +15,8 @@ */ package org.commonjava.indy.revisions; -import static org.apache.commons.lang.StringUtils.isEmpty; -import static org.apache.commons.lang.StringUtils.join; +import static org.apache.commons.lang3.StringUtils.isEmpty; +import static org.apache.commons.lang3.StringUtils.join; import static org.commonjava.indy.audit.ChangeSummary.SYSTEM_USER; import java.io.File; @@ -36,11 +36,10 @@ import org.commonjava.indy.audit.ChangeSummary; import org.commonjava.indy.change.event.IndyLifecycleEvent; import org.commonjava.indy.data.StoreDataManager; -import org.commonjava.indy.measure.annotation.Measure; -import org.commonjava.indy.measure.annotation.MetricNamed; +import org.commonjava.o11yphant.metrics.annotation.Measure; import static org.commonjava.indy.flat.data.DataFileStoreUtils.INDY_STORE; -import static org.commonjava.indy.metrics.IndyMetricsConstants.DEFAULT; + import org.commonjava.indy.model.core.StoreKey; import org.commonjava.indy.revisions.conf.RevisionsConfig; import org.commonjava.indy.subsys.datafile.DataFile; diff --git a/addons/revisions/common/src/test/java/org/commonjava/indy/revisions/RevisionsManagerTest.java b/addons/revisions/common/src/test/java/org/commonjava/indy/revisions/RevisionsManagerTest.java index ef4d8ade03..109eb364e8 100644 --- a/addons/revisions/common/src/test/java/org/commonjava/indy/revisions/RevisionsManagerTest.java +++ b/addons/revisions/common/src/test/java/org/commonjava/indy/revisions/RevisionsManagerTest.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.revisions; -import static org.apache.commons.lang.StringUtils.join; +import static org.apache.commons.lang3.StringUtils.join; import static org.commonjava.indy.audit.ChangeSummary.SYSTEM_USER; import static org.commonjava.indy.subsys.git.GitManager.COMMIT_CHANGELOG_ENTRIES; import static org.hamcrest.CoreMatchers.equalTo; diff --git a/addons/revisions/jaxrs/pom.xml b/addons/revisions/jaxrs/pom.xml index ed3483b9b3..497ef31eef 100644 --- a/addons/revisions/jaxrs/pom.xml +++ b/addons/revisions/jaxrs/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-revisions - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-revisions-jaxrs diff --git a/addons/revisions/pom.xml b/addons/revisions/pom.xml index e9bb98adff..28fc786d92 100644 --- a/addons/revisions/pom.xml +++ b/addons/revisions/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-addons - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-revisions Indy :: Add-Ons :: Revisions :: Parent diff --git a/addons/sli/pom.xml b/addons/sli/pom.xml index 89d9c3dc02..0be8711bbd 100644 --- a/addons/sli/pom.xml +++ b/addons/sli/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-addons - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-sli Indy :: Add-Ons :: Service Level Indicators Reporting :: JAX-RS @@ -29,7 +29,7 @@ org.commonjava.indy - indy-subsys-metrics-core + indy-subsys-metrics org.commonjava.indy diff --git a/addons/sli/src/main/java/org/commonjava/indy/sli/metrics/GoldenSignalsFunctionMetrics.java b/addons/sli/src/main/java/org/commonjava/indy/sli/metrics/GoldenSignalsFunctionMetrics.java deleted file mode 100644 index 45907c7578..0000000000 --- a/addons/sli/src/main/java/org/commonjava/indy/sli/metrics/GoldenSignalsFunctionMetrics.java +++ /dev/null @@ -1,102 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.sli.metrics; - -import com.codahale.metrics.Meter; -import com.codahale.metrics.Metric; -import com.codahale.metrics.Timer; -import com.codahale.metrics.health.HealthCheck; - -import java.util.HashMap; -import java.util.Map; - -import static java.util.concurrent.TimeUnit.NANOSECONDS; - -public class GoldenSignalsFunctionMetrics -{ - private String name; - - private Meter load = new Meter(); - - private Timer latency = new Timer(); - - private Meter errors = new Meter(); - - private Meter throughput = new Meter(); - - GoldenSignalsFunctionMetrics( String name ) - { - this.name = name; - } - - Map getMetrics() - { - Map metrics = new HashMap<>(); - metrics.put( name + ".latency", latency ); - metrics.put( name + ".errors", errors ); - metrics.put( name + ".throughput", throughput ); - metrics.put( name + ".load", load ); - - return metrics; - } - - public GoldenSignalsFunctionMetrics latency( long duration ) - { - latency.update( duration, NANOSECONDS ); - return this; - } - - public GoldenSignalsFunctionMetrics error() - { - errors.mark(); - return this; - } - - public GoldenSignalsFunctionMetrics call() - { - throughput.mark(); - return this; - } - - public HealthCheck getHealthCheck() - { - return new GSFunctionHealthCheck(); - } - - public GoldenSignalsFunctionMetrics started() - { - load.mark(); - return this; - } - - final class GSFunctionHealthCheck - extends HealthCheck - { - @Override - protected Result check() - throws Exception - { - // FIXME: We need need to incorporate the SLO targets to determine whether health / unhealthy. - return Result.builder() - .withDetail( "latency", latency.getSnapshot().get99thPercentile() ) - .withDetail( "errors", errors.getOneMinuteRate() ) - .withDetail( "throughput", throughput.getOneMinuteRate() ) - .withDetail( "load", load.getOneMinuteRate() ) - .healthy() - .build(); - } - } -} diff --git a/addons/sli/src/main/java/org/commonjava/indy/sli/metrics/GoldenSignalsMetricSet.java b/addons/sli/src/main/java/org/commonjava/indy/sli/metrics/GoldenSignalsMetricSet.java deleted file mode 100644 index 42bc5568ac..0000000000 --- a/addons/sli/src/main/java/org/commonjava/indy/sli/metrics/GoldenSignalsMetricSet.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.sli.metrics; - -import com.codahale.metrics.Metric; -import com.codahale.metrics.MetricSet; -import com.codahale.metrics.health.HealthCheck; -import org.commonjava.indy.metrics.healthcheck.IndyCompoundHealthCheck; - -import javax.enterprise.context.ApplicationScoped; -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; -import java.util.stream.Stream; - -import static org.commonjava.indy.metrics.TrafficClassifierConstants.FUNCTIONS; - -@ApplicationScoped -public class GoldenSignalsMetricSet - implements MetricSet, IndyCompoundHealthCheck -{ - private Map functionMetrics = new HashMap<>(); - - public GoldenSignalsMetricSet() - { - Stream.of( FUNCTIONS ) - .forEach( function -> { - System.out.println( "Wiring SLI metrics for: " + function ); - functionMetrics.put( function, new GoldenSignalsFunctionMetrics( function ) ); - } ); - } - - @Override - public Map getMetrics() - { - Map metrics = new HashMap<>(); - functionMetrics.values().forEach( ms -> metrics.putAll( ms.getMetrics() ) ); - - return metrics; - } - - public Optional function( String name ) - { - return functionMetrics.containsKey( name ) ? Optional.of( functionMetrics.get( name ) ) : Optional.empty(); - } - - @Override - public Map getHealthChecks() - { - Map checks = new HashMap<>(); - functionMetrics.forEach( (key,value)-> checks.put( "sli.golden." + key, value.getHealthCheck() ) ); - return checks; - } -} diff --git a/core/src/test/java/org/commonjava/indy/fixture/MockWeftProvider.java b/addons/sli/src/main/java/org/commonjava/indy/sli/metrics/IndyGoldenSignalsMetricSet.java similarity index 62% rename from core/src/test/java/org/commonjava/indy/fixture/MockWeftProvider.java rename to addons/sli/src/main/java/org/commonjava/indy/sli/metrics/IndyGoldenSignalsMetricSet.java index 9acfd3b69c..ded8e77a8c 100644 --- a/core/src/test/java/org/commonjava/indy/fixture/MockWeftProvider.java +++ b/addons/sli/src/main/java/org/commonjava/indy/sli/metrics/IndyGoldenSignalsMetricSet.java @@ -13,23 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.commonjava.indy.fixture; +package org.commonjava.indy.sli.metrics; -import org.commonjava.cdi.util.weft.config.DefaultWeftConfig; -import org.commonjava.cdi.util.weft.config.WeftConfig; +import org.commonjava.o11yphant.metrics.sli.GoldenSignalsMetricSet; import javax.enterprise.context.ApplicationScoped; -import javax.enterprise.inject.Alternative; -import javax.enterprise.inject.Produces; +import java.util.Arrays; +import java.util.Collection; + +import static org.commonjava.indy.subsys.metrics.IndyTrafficClassifierConstants.FUNCTIONS; @ApplicationScoped -@Alternative -public class MockWeftProvider +public class IndyGoldenSignalsMetricSet + extends GoldenSignalsMetricSet { - @Produces - public WeftConfig getWeftConfig() + @Override + protected Collection getFunctions() { - return new DefaultWeftConfig(); + return Arrays.asList( FUNCTIONS ); } } diff --git a/addons/sli/src/main/java/org/commonjava/indy/sli/metrics/GoldenSignalsMetricSetProvider.java b/addons/sli/src/main/java/org/commonjava/indy/sli/metrics/IndyGoldenSignalsMetricSetProvider.java similarity index 70% rename from addons/sli/src/main/java/org/commonjava/indy/sli/metrics/GoldenSignalsMetricSetProvider.java rename to addons/sli/src/main/java/org/commonjava/indy/sli/metrics/IndyGoldenSignalsMetricSetProvider.java index 9c81d545ba..2d65f5177a 100644 --- a/addons/sli/src/main/java/org/commonjava/indy/sli/metrics/GoldenSignalsMetricSetProvider.java +++ b/addons/sli/src/main/java/org/commonjava/indy/sli/metrics/IndyGoldenSignalsMetricSetProvider.java @@ -15,22 +15,28 @@ */ package org.commonjava.indy.sli.metrics; -import com.codahale.metrics.MetricRegistry; -import org.commonjava.indy.metrics.MetricSetProvider; +import org.commonjava.o11yphant.metrics.api.MetricSet; +import org.commonjava.o11yphant.metrics.MetricSetProvider; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; @ApplicationScoped -public class GoldenSignalsMetricSetProvider +public class IndyGoldenSignalsMetricSetProvider implements MetricSetProvider { @Inject - private GoldenSignalsMetricSet metricSet; + private IndyGoldenSignalsMetricSet metricSet; @Override - public void registerMetricSet( final MetricRegistry registry ) + public MetricSet getMetricSet() { - registry.register( "sli.golden", metricSet ); + return metricSet; + } + + @Override + public String getName() + { + return "sli.golden"; } } diff --git a/api/pom.xml b/api/pom.xml index 1bb84c0950..a3c82a81d0 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-parent - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-api @@ -37,8 +37,8 @@ propulsor-configuration-core - commons-lang - commons-lang + org.apache.commons + commons-lang3 org.commonjava.maven.galley diff --git a/api/src/main/java/org/commonjava/indy/CustomJsonLayout.java b/api/src/main/java/org/commonjava/indy/CustomJsonLayout.java index ae2f9cdd7b..4ef032bf0b 100644 --- a/api/src/main/java/org/commonjava/indy/CustomJsonLayout.java +++ b/api/src/main/java/org/commonjava/indy/CustomJsonLayout.java @@ -17,7 +17,7 @@ import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.contrib.json.classic.JsonLayout; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/api/src/main/java/org/commonjava/indy/action/IndyLifecycleManager.java b/api/src/main/java/org/commonjava/indy/action/IndyLifecycleManager.java index 91f9feec2f..310a511ab4 100644 --- a/api/src/main/java/org/commonjava/indy/action/IndyLifecycleManager.java +++ b/api/src/main/java/org/commonjava/indy/action/IndyLifecycleManager.java @@ -20,6 +20,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.List; +import java.util.stream.Collectors; import javax.annotation.PostConstruct; import javax.enterprise.context.ApplicationScoped; @@ -188,7 +189,9 @@ private void runBootupActions() if ( bootupActions != null ) { - logger.info( "Running bootup actions..." ); + logger.info( "Running bootup actions in the following order:\n\n{}", + bootupActions.stream().map( a -> a.getId() ).collect( Collectors.toList() ) ); + for ( final BootupAction action : bootupActions ) { logger.info( "Running bootup action: '{}'", action.getId() ); @@ -212,7 +215,9 @@ private void runMigrationActions() boolean changed = false; if ( migrationActions != null ) { - logger.info( "Running migration actions..." ); + logger.info( "Running migration actions in the following order:\n\n{}", + migrationActions.stream().map( a -> a.getId() ).collect( Collectors.toList() ) ); + for ( final MigrationAction action : migrationActions ) { logger.info( "Running migration action: '{}'", action.getId() ); @@ -235,7 +240,9 @@ private void runStartupActions() if ( startupActions != null ) { - logger.info( "Running startup actions..." ); + logger.info( "Running startup actions in the following order:\n\n{}", + startupActions.stream().map( a -> a.getId() ).collect( Collectors.toList() ) ); + for ( final StartupAction action : startupActions ) { logger.info( "Running startup action: '{}'", action.getId() ); @@ -258,7 +265,9 @@ private void runShutdownActions() if ( shutdownActions != null ) { - logger.info( "Running shutdown actions..." ); + logger.info( "Running shutdown actions in the following order:\n\n{}", + shutdownActions.stream().map( a -> a.getId() ).collect( Collectors.toList() ) ); + for ( final ShutdownAction action : shutdownActions ) { logger.info( "Running shutdown action: '{}'", action.getId() ); diff --git a/api/src/main/java/org/commonjava/indy/conf/DefaultIndyConfiguration.java b/api/src/main/java/org/commonjava/indy/conf/DefaultIndyConfiguration.java index 0dceaa4b37..decec8fb33 100644 --- a/api/src/main/java/org/commonjava/indy/conf/DefaultIndyConfiguration.java +++ b/api/src/main/java/org/commonjava/indy/conf/DefaultIndyConfiguration.java @@ -25,8 +25,8 @@ import java.io.InputStream; import java.util.Properties; -import static org.apache.commons.lang.StringUtils.isBlank; -import static org.apache.commons.lang.StringUtils.isEmpty; +import static org.apache.commons.lang3.StringUtils.isBlank; +import static org.apache.commons.lang3.StringUtils.isEmpty; @SectionName @ApplicationScoped diff --git a/api/src/main/java/org/commonjava/indy/util/AcceptInfoParser.java b/api/src/main/java/org/commonjava/indy/util/AcceptInfoParser.java index 6235cd58af..668b0281ff 100644 --- a/api/src/main/java/org/commonjava/indy/util/AcceptInfoParser.java +++ b/api/src/main/java/org/commonjava/indy/util/AcceptInfoParser.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.util; -import static org.apache.commons.lang.StringUtils.join; +import static org.apache.commons.lang3.StringUtils.join; import java.util.ArrayList; import java.util.Arrays; diff --git a/api/src/main/java/org/commonjava/indy/metrics/RequestContextHelper.java b/api/src/main/java/org/commonjava/indy/util/RequestContextHelper.java similarity index 99% rename from api/src/main/java/org/commonjava/indy/metrics/RequestContextHelper.java rename to api/src/main/java/org/commonjava/indy/util/RequestContextHelper.java index c9c3619772..1c5ec35a8e 100644 --- a/api/src/main/java/org/commonjava/indy/metrics/RequestContextHelper.java +++ b/api/src/main/java/org/commonjava/indy/util/RequestContextHelper.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.commonjava.indy.metrics; +package org.commonjava.indy.util; import org.commonjava.cdi.util.weft.ThreadContext; diff --git a/bin/test-setup.sh b/bin/test-setup.sh index 2df694fbfe..4a28ebd767 100755 --- a/bin/test-setup.sh +++ b/bin/test-setup.sh @@ -56,6 +56,8 @@ else cat > $ETC_BASE/conf.d/default.conf <<-EOF [default] standalone=true +[_internal] +store.validation.enabled=false [ssl] remote.ssl.required=false EOF diff --git a/bindings/jaxrs/pom.xml b/bindings/jaxrs/pom.xml index 80d18f26cb..c4915ba4fe 100644 --- a/bindings/jaxrs/pom.xml +++ b/bindings/jaxrs/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-bindings - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-bindings-jaxrs diff --git a/bindings/jaxrs/src/main/java/org/commonjava/indy/core/bind/jaxrs/ContentAccessHandler.java b/bindings/jaxrs/src/main/java/org/commonjava/indy/core/bind/jaxrs/ContentAccessHandler.java index 3149aaf5c1..717444cb40 100644 --- a/bindings/jaxrs/src/main/java/org/commonjava/indy/core/bind/jaxrs/ContentAccessHandler.java +++ b/bindings/jaxrs/src/main/java/org/commonjava/indy/core/bind/jaxrs/ContentAccessHandler.java @@ -26,8 +26,8 @@ import org.commonjava.indy.core.bind.jaxrs.util.TransferCountingInputStream; import org.commonjava.indy.core.bind.jaxrs.util.TransferStreamingOutput; import org.commonjava.indy.core.ctl.ContentController; -import org.commonjava.indy.metrics.IndyMetricsManager; -import org.commonjava.indy.metrics.conf.IndyMetricsConfig; +import org.commonjava.o11yphant.metrics.DefaultMetricsManager; +import org.commonjava.indy.subsys.metrics.conf.IndyMetricsConfig; import org.commonjava.indy.model.core.BatchDeleteRequest; import org.commonjava.indy.model.core.PackageTypes; import org.commonjava.indy.model.core.StoreKey; @@ -66,13 +66,12 @@ import java.util.function.Supplier; import static org.commonjava.indy.core.bind.jaxrs.util.RequestUtils.isDirectoryPath; -import static org.commonjava.indy.core.ctl.ContentController.LISTING_HTML_FILE; -import static org.commonjava.indy.metrics.RequestContextHelper.CONTENT_ENTRY_POINT; -import static org.commonjava.indy.metrics.RequestContextHelper.HTTP_STATUS; -import static org.commonjava.indy.metrics.RequestContextHelper.METADATA_CONTENT; -import static org.commonjava.indy.metrics.RequestContextHelper.PACKAGE_TYPE; -import static org.commonjava.indy.metrics.RequestContextHelper.PATH; -import static org.commonjava.indy.metrics.RequestContextHelper.setContext; +import static org.commonjava.indy.util.RequestContextHelper.CONTENT_ENTRY_POINT; +import static org.commonjava.indy.util.RequestContextHelper.HTTP_STATUS; +import static org.commonjava.indy.util.RequestContextHelper.METADATA_CONTENT; +import static org.commonjava.indy.util.RequestContextHelper.PACKAGE_TYPE; +import static org.commonjava.indy.util.RequestContextHelper.PATH; +import static org.commonjava.indy.util.RequestContextHelper.setContext; import static org.commonjava.indy.pkg.npm.model.NPMPackageTypeDescriptor.NPM_PKG_KEY; @ApplicationScoped @@ -93,7 +92,7 @@ public class ContentAccessHandler protected JaxRsRequestHelper jaxRsRequestHelper; @Inject - protected IndyMetricsManager metricsManager; + protected DefaultMetricsManager metricsManager; @Inject protected IndyMetricsConfig metricsConfig; diff --git a/bindings/jaxrs/src/main/java/org/commonjava/indy/core/bind/jaxrs/NfcResource.java b/bindings/jaxrs/src/main/java/org/commonjava/indy/core/bind/jaxrs/NfcResource.java index faa456f33f..a631b9ea36 100644 --- a/bindings/jaxrs/src/main/java/org/commonjava/indy/core/bind/jaxrs/NfcResource.java +++ b/bindings/jaxrs/src/main/java/org/commonjava/indy/core/bind/jaxrs/NfcResource.java @@ -46,7 +46,7 @@ import javax.ws.rs.core.Response; import java.nio.file.Paths; -import static org.apache.commons.lang.StringUtils.isBlank; +import static org.apache.commons.lang3.StringUtils.isBlank; import static org.commonjava.indy.pkg.maven.model.MavenPackageTypeDescriptor.MAVEN_PKG_KEY; @Api( description = "REST resource that manages the not-found cache", value = "Not-Found Cache" ) diff --git a/bindings/jaxrs/src/main/java/org/commonjava/indy/core/bind/jaxrs/admin/DeprecatedStoreAdminHandler.java b/bindings/jaxrs/src/main/java/org/commonjava/indy/core/bind/jaxrs/admin/DeprecatedStoreAdminHandler.java index 0714352336..2dc2fe2a02 100644 --- a/bindings/jaxrs/src/main/java/org/commonjava/indy/core/bind/jaxrs/admin/DeprecatedStoreAdminHandler.java +++ b/bindings/jaxrs/src/main/java/org/commonjava/indy/core/bind/jaxrs/admin/DeprecatedStoreAdminHandler.java @@ -68,7 +68,7 @@ import static javax.ws.rs.core.Response.notModified; import static javax.ws.rs.core.Response.ok; import static javax.ws.rs.core.Response.status; -import static org.apache.commons.lang.StringUtils.isEmpty; +import static org.apache.commons.lang3.StringUtils.isEmpty; import static org.commonjava.indy.model.core.ArtifactStore.METADATA_CHANGELOG; import static org.commonjava.indy.util.ApplicationContent.application_json; diff --git a/bindings/jaxrs/src/main/java/org/commonjava/indy/core/bind/jaxrs/admin/StoreAdminHandler.java b/bindings/jaxrs/src/main/java/org/commonjava/indy/core/bind/jaxrs/admin/StoreAdminHandler.java index f91189cd23..1820c632a3 100644 --- a/bindings/jaxrs/src/main/java/org/commonjava/indy/core/bind/jaxrs/admin/StoreAdminHandler.java +++ b/bindings/jaxrs/src/main/java/org/commonjava/indy/core/bind/jaxrs/admin/StoreAdminHandler.java @@ -21,7 +21,7 @@ import static javax.ws.rs.core.Response.notModified; import static javax.ws.rs.core.Response.ok; import static javax.ws.rs.core.Response.status; -import static org.apache.commons.lang.StringUtils.isEmpty; +import static org.apache.commons.lang3.StringUtils.isEmpty; import static org.commonjava.indy.model.core.ArtifactStore.METADATA_CHANGELOG; import static org.commonjava.indy.util.ApplicationContent.application_json; diff --git a/bindings/jaxrs/src/main/java/org/commonjava/indy/core/bind/jaxrs/util/TransferCountingInputStream.java b/bindings/jaxrs/src/main/java/org/commonjava/indy/core/bind/jaxrs/util/TransferCountingInputStream.java index 59355bb6d2..90f4614ac3 100644 --- a/bindings/jaxrs/src/main/java/org/commonjava/indy/core/bind/jaxrs/util/TransferCountingInputStream.java +++ b/bindings/jaxrs/src/main/java/org/commonjava/indy/core/bind/jaxrs/util/TransferCountingInputStream.java @@ -15,22 +15,21 @@ */ package org.commonjava.indy.core.bind.jaxrs.util; -import com.codahale.metrics.Meter; import org.apache.commons.io.input.CountingInputStream; -import org.commonjava.indy.metrics.IndyMetricsManager; -import org.commonjava.indy.metrics.conf.IndyMetricsConfig; +import org.commonjava.o11yphant.metrics.api.Meter; +import org.commonjava.o11yphant.metrics.DefaultMetricsManager; +import org.commonjava.indy.subsys.metrics.conf.IndyMetricsConfig; import org.commonjava.maven.galley.util.IdempotentCloseInputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; import static org.commonjava.indy.IndyContentConstants.NANOS_PER_SEC; -import static org.commonjava.indy.metrics.IndyMetricsConstants.METER; -import static org.commonjava.indy.metrics.IndyMetricsConstants.getDefaultName; -import static org.commonjava.indy.metrics.IndyMetricsConstants.getName; +import static org.commonjava.o11yphant.metrics.MetricsConstants.METER; +import static org.commonjava.o11yphant.metrics.util.NameUtils.getDefaultName; +import static org.commonjava.o11yphant.metrics.util.NameUtils.getName; public class TransferCountingInputStream extends IdempotentCloseInputStream @@ -38,7 +37,7 @@ public class TransferCountingInputStream private static final String TRANSFER_UPLOAD_METRIC_NAME = "indy.transferred.content.upload"; - private IndyMetricsManager metricsManager; + private DefaultMetricsManager metricsManager; private IndyMetricsConfig metricsConfig; @@ -49,7 +48,7 @@ protected TransferCountingInputStream( final InputStream stream ) super( new CountingInputStream( stream ) ); } - public TransferCountingInputStream( final InputStream stream, final IndyMetricsManager metricsManager, + public TransferCountingInputStream( final InputStream stream, final DefaultMetricsManager metricsManager, final IndyMetricsConfig metricsConfig ) { this( stream ); diff --git a/bindings/jaxrs/src/main/java/org/commonjava/indy/core/bind/jaxrs/util/TransferStreamingOutput.java b/bindings/jaxrs/src/main/java/org/commonjava/indy/core/bind/jaxrs/util/TransferStreamingOutput.java index 3b21319d80..c26129c25f 100644 --- a/bindings/jaxrs/src/main/java/org/commonjava/indy/core/bind/jaxrs/util/TransferStreamingOutput.java +++ b/bindings/jaxrs/src/main/java/org/commonjava/indy/core/bind/jaxrs/util/TransferStreamingOutput.java @@ -15,12 +15,12 @@ */ package org.commonjava.indy.core.bind.jaxrs.util; -import com.codahale.metrics.Meter; import org.apache.commons.io.IOUtils; import org.apache.commons.io.output.CountingOutputStream; -import org.commonjava.indy.measure.annotation.Measure; -import org.commonjava.indy.metrics.IndyMetricsManager; -import org.commonjava.indy.metrics.conf.IndyMetricsConfig; +import org.commonjava.o11yphant.metrics.annotation.Measure; +import org.commonjava.o11yphant.metrics.api.Meter; +import org.commonjava.o11yphant.metrics.DefaultMetricsManager; +import org.commonjava.indy.subsys.metrics.conf.IndyMetricsConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -31,9 +31,9 @@ import java.io.OutputStream; import static org.commonjava.indy.IndyContentConstants.NANOS_PER_SEC; -import static org.commonjava.indy.metrics.IndyMetricsConstants.METER; -import static org.commonjava.indy.metrics.IndyMetricsConstants.getDefaultName; -import static org.commonjava.indy.metrics.IndyMetricsConstants.getName; +import static org.commonjava.o11yphant.metrics.MetricsConstants.METER; +import static org.commonjava.o11yphant.metrics.util.NameUtils.getDefaultName; +import static org.commonjava.o11yphant.metrics.util.NameUtils.getName; public class TransferStreamingOutput implements StreamingOutput @@ -43,11 +43,11 @@ public class TransferStreamingOutput private InputStream stream; - private IndyMetricsManager metricsManager; + private DefaultMetricsManager metricsManager; private IndyMetricsConfig metricsConfig; - public TransferStreamingOutput( final InputStream stream, final IndyMetricsManager metricsManager, + public TransferStreamingOutput( final InputStream stream, final DefaultMetricsManager metricsManager, final IndyMetricsConfig metricsConfig ) { this.stream = stream; diff --git a/bindings/pom.xml b/bindings/pom.xml index 7c690ff5b9..5762336c68 100644 --- a/bindings/pom.xml +++ b/bindings/pom.xml @@ -22,7 +22,7 @@ org.commonjava.indy indy-parent - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-bindings diff --git a/boot/jaxrs/pom.xml b/boot/jaxrs/pom.xml index de2baf1e35..5189856a7d 100644 --- a/boot/jaxrs/pom.xml +++ b/boot/jaxrs/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy.boot indy-booters - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy.boot diff --git a/boot/jaxrs/src/main/java/org/commonjava/indy/boot/jaxrs/IndyDeployer.java b/boot/jaxrs/src/main/java/org/commonjava/indy/boot/jaxrs/IndyDeployer.java index 1d2d6ef698..9f798f1af2 100644 --- a/boot/jaxrs/src/main/java/org/commonjava/indy/boot/jaxrs/IndyDeployer.java +++ b/boot/jaxrs/src/main/java/org/commonjava/indy/boot/jaxrs/IndyDeployer.java @@ -16,6 +16,7 @@ package org.commonjava.indy.boot.jaxrs; import io.undertow.Undertow; +import io.undertow.UndertowOptions; import io.undertow.predicate.Predicate; import io.undertow.predicate.Predicates; import io.undertow.server.HttpServerExchange; @@ -136,8 +137,10 @@ public void deploy( BootOptions bootOptions ) private Undertow buildAndStartUndertow( DeploymentManager dm, Integer port, String bind, RestConfig restConfig ) throws Exception { - Undertow.Builder builder = - Undertow.builder().setHandler( getGzipEncodeHandler( dm ) ).addHttpListener( port, bind ); + Undertow.Builder builder = Undertow.builder() + .setServerOption( UndertowOptions.ENABLE_HTTP2, true ) + .setHandler( getGzipEncodeHandler( dm ) ) + .addHttpListener( port, bind ); restConfig.configureBuilder( builder ); Undertow t = builder.build(); t.start(); diff --git a/boot/pom.xml b/boot/pom.xml index f0ca808ca6..60bc99ef6c 100644 --- a/boot/pom.xml +++ b/boot/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-parent - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy.boot diff --git a/clients/core-java/pom.xml b/clients/core-java/pom.xml index 9d77a821f9..c9d13cb419 100644 --- a/clients/core-java/pom.xml +++ b/clients/core-java/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-clients-parent - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-client-core-java diff --git a/clients/core-java/src/main/java/org/commonjava/indy/client/core/IndyClientHttp.java b/clients/core-java/src/main/java/org/commonjava/indy/client/core/IndyClientHttp.java index 104a738054..8fc3f63a66 100644 --- a/clients/core-java/src/main/java/org/commonjava/indy/client/core/IndyClientHttp.java +++ b/clients/core-java/src/main/java/org/commonjava/indy/client/core/IndyClientHttp.java @@ -16,7 +16,7 @@ package org.commonjava.indy.client.core; import com.fasterxml.jackson.core.type.TypeReference; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.http.Header; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; @@ -65,7 +65,7 @@ import java.util.Map; import java.util.function.Supplier; -import static org.apache.commons.lang.StringUtils.isNotBlank; +import static org.apache.commons.lang3.StringUtils.isNotBlank; import static org.commonjava.indy.IndyContentConstants.CHECK_CACHE_ONLY; import static org.commonjava.indy.client.core.helper.HttpResources.cleanupResources; import static org.commonjava.indy.client.core.helper.HttpResources.entityToString; diff --git a/clients/core-java/src/main/java/org/commonjava/indy/client/core/IndyResponseErrorDetails.java b/clients/core-java/src/main/java/org/commonjava/indy/client/core/IndyResponseErrorDetails.java index 0bee7c840b..bc9c468ff7 100644 --- a/clients/core-java/src/main/java/org/commonjava/indy/client/core/IndyResponseErrorDetails.java +++ b/clients/core-java/src/main/java/org/commonjava/indy/client/core/IndyResponseErrorDetails.java @@ -17,7 +17,7 @@ import java.io.IOException; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpResponse; import org.apache.http.ParseException; import org.apache.http.ProtocolVersion; diff --git a/clients/core-java/src/main/java/org/commonjava/indy/client/core/module/IndyMaintenanceClientModule.java b/clients/core-java/src/main/java/org/commonjava/indy/client/core/module/IndyMaintenanceClientModule.java index b0b6c923bb..f43a7cd693 100644 --- a/clients/core-java/src/main/java/org/commonjava/indy/client/core/module/IndyMaintenanceClientModule.java +++ b/clients/core-java/src/main/java/org/commonjava/indy/client/core/module/IndyMaintenanceClientModule.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.client.core.module; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.client.core.IndyClientException; import org.commonjava.indy.client.core.IndyClientModule; import org.commonjava.indy.client.core.util.UrlUtils; diff --git a/clients/core-java/src/main/java/org/commonjava/indy/client/core/module/IndyNfcClientModule.java b/clients/core-java/src/main/java/org/commonjava/indy/client/core/module/IndyNfcClientModule.java index e999c77ae6..83aea9ade7 100644 --- a/clients/core-java/src/main/java/org/commonjava/indy/client/core/module/IndyNfcClientModule.java +++ b/clients/core-java/src/main/java/org/commonjava/indy/client/core/module/IndyNfcClientModule.java @@ -28,7 +28,7 @@ import java.net.URI; import java.net.URISyntaxException; -import static org.apache.commons.lang.StringUtils.isBlank; +import static org.apache.commons.lang3.StringUtils.isBlank; public class IndyNfcClientModule extends IndyClientModule diff --git a/clients/core-java/src/main/java/org/commonjava/indy/client/core/util/UrlUtils.java b/clients/core-java/src/main/java/org/commonjava/indy/client/core/util/UrlUtils.java index ef1bcd14cb..5eddc155b3 100644 --- a/clients/core-java/src/main/java/org/commonjava/indy/client/core/util/UrlUtils.java +++ b/clients/core-java/src/main/java/org/commonjava/indy/client/core/util/UrlUtils.java @@ -23,7 +23,7 @@ import java.util.Map; import java.util.function.Supplier; -import static org.apache.commons.lang.StringUtils.join; +import static org.apache.commons.lang3.StringUtils.join; public final class UrlUtils { diff --git a/clients/pom.xml b/clients/pom.xml index 4ee0032e14..f6c8e4cc9e 100644 --- a/clients/pom.xml +++ b/clients/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-parent - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-clients-parent diff --git a/core/pom.xml b/core/pom.xml index 2bd51baae7..0bbfda43fd 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-parent - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-core @@ -132,7 +132,7 @@ org.commonjava.indy - indy-subsys-metrics-core + indy-subsys-metrics org.jboss.resteasy diff --git a/core/src/main/conf/conf.d/durable-state.conf b/core/src/main/conf/conf.d/durable-state.conf new file mode 100644 index 0000000000..f9108b87b2 --- /dev/null +++ b/core/src/main/conf/conf.d/durable-state.conf @@ -0,0 +1,4 @@ +[durable-state] +folo.storage=infinispan +store.storage=infinispan +schedule.storage=infinispan \ No newline at end of file diff --git a/core/src/main/java/org/commonjava/indy/core/change/StoreContentListener.java b/core/src/main/java/org/commonjava/indy/core/change/StoreContentListener.java index f1bab9ad42..b9083e90c9 100644 --- a/core/src/main/java/org/commonjava/indy/core/change/StoreContentListener.java +++ b/core/src/main/java/org/commonjava/indy/core/change/StoreContentListener.java @@ -27,7 +27,7 @@ import org.commonjava.indy.content.StoreContentAction; import org.commonjava.indy.data.IndyDataException; import org.commonjava.indy.data.StoreDataManager; -import org.commonjava.indy.measure.annotation.Measure; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.StoreKey; diff --git a/core/src/main/java/org/commonjava/indy/core/change/StoreEnablementManager.java b/core/src/main/java/org/commonjava/indy/core/change/StoreEnablementManager.java index b445800f26..46c53264a0 100644 --- a/core/src/main/java/org/commonjava/indy/core/change/StoreEnablementManager.java +++ b/core/src/main/java/org/commonjava/indy/core/change/StoreEnablementManager.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.core.change; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.audit.ChangeSummary; import org.commonjava.indy.change.event.ArtifactStoreEnablementEvent; import org.commonjava.indy.change.event.ArtifactStorePostUpdateEvent; @@ -27,7 +27,7 @@ import org.commonjava.indy.core.expire.SchedulerTriggerEvent; import org.commonjava.indy.data.IndyDataException; import org.commonjava.indy.data.StoreDataManager; -import org.commonjava.indy.measure.annotation.Measure; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.StoreKey; import org.commonjava.indy.model.core.io.IndyObjectMapper; diff --git a/core/src/main/java/org/commonjava/indy/core/conf/IndyDurableStateConfig.java b/core/src/main/java/org/commonjava/indy/core/conf/IndyDurableStateConfig.java new file mode 100644 index 0000000000..f6f025fed3 --- /dev/null +++ b/core/src/main/java/org/commonjava/indy/core/conf/IndyDurableStateConfig.java @@ -0,0 +1,116 @@ +/** + * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) + * + * 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.commonjava.indy.core.conf; + +import org.commonjava.indy.conf.IndyConfigInfo; +import org.commonjava.propulsor.config.annotation.SectionName; +import org.commonjava.propulsor.config.section.MapSectionListener; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.enterprise.context.ApplicationScoped; +import java.io.InputStream; + +@ApplicationScoped +@SectionName(IndyDurableStateConfig.SECTION_NAME) +public class IndyDurableStateConfig + extends MapSectionListener + implements IndyConfigInfo +{ + + public static final String SECTION_NAME = "durable-state"; + + public static final String STORAGE_INFINISPAN = "infinispan"; + + public static final String STORAGE_CASSANDRA = "cassandra"; + + private String foloStorage; + + private String storeStorage; + + private String scheduleStorage; + + public String getFoloStorage() + { + return foloStorage; + } + + public void setFoloStorage( String foloStorage ) + { + this.foloStorage = foloStorage; + } + + public String getStoreStorage() + { + return storeStorage; + } + + public void setStoreStorage( String storeStorage ) + { + this.storeStorage = storeStorage; + } + + public String getScheduleStorage() + { + return scheduleStorage; + } + + public void setScheduleStorage( String scheduleStorage ) + { + this.scheduleStorage = scheduleStorage; + } + + @Override + public void parameter(String name, String value) + { + Logger logger = LoggerFactory.getLogger( getClass() ); + logger.trace( "Got durable-state config parameter: '{}' with value: '{}'", name, value ); + switch ( name ) + { + case "folo.storage": + { + this.foloStorage = value; + break; + } + case "store.storage": + { + this.storeStorage = value; + break; + } + case "schedule.storage": + { + this.scheduleStorage = value; + break; + } + default: break; + } + + } + + @Override + public String getDefaultConfigFileName() + { + return "conf.d/durable-state.conf"; + } + + @Override + public InputStream getDefaultConfig() + { + return Thread.currentThread() + .getContextClassLoader() + .getResourceAsStream( "default-durable-state.conf" ); + } +} diff --git a/core/src/main/java/org/commonjava/indy/core/conf/IndyWeftConfig.java b/core/src/main/java/org/commonjava/indy/core/conf/IndyWeftConfig.java index 73e93ff473..77d36967e8 100644 --- a/core/src/main/java/org/commonjava/indy/core/conf/IndyWeftConfig.java +++ b/core/src/main/java/org/commonjava/indy/core/conf/IndyWeftConfig.java @@ -18,6 +18,7 @@ import org.commonjava.cdi.util.weft.config.DefaultWeftConfig; import org.commonjava.indy.conf.IndyConfigInfo; import org.commonjava.indy.inject.Production; +import org.commonjava.indy.subsys.metrics.conf.IndyMetricsConfig; import org.commonjava.propulsor.config.ConfigurationException; import org.commonjava.propulsor.config.annotation.SectionName; import org.commonjava.propulsor.config.section.MapSectionListener; @@ -27,8 +28,6 @@ import javax.enterprise.inject.Produces; import java.io.InputStream; -import static org.commonjava.indy.metrics.conf.IndyMetricsConfig.INDY_METRICS_NODE_PREFIX; - @ApplicationScoped @SectionName( IndyWeftConfig.SECTION_NAME ) public class IndyWeftConfig @@ -46,7 +45,7 @@ public class IndyWeftConfig public static final String ENABLED = "enabled"; - public static final String NODE_PREFIX = INDY_METRICS_NODE_PREFIX; + public static final String NODE_PREFIX = IndyMetricsConfig.NODE_PREFIX; public static final String THREADS_SUFFIX = ".threads"; diff --git a/core/src/main/java/org/commonjava/indy/core/content/AbstractMergedContentGenerator.java b/core/src/main/java/org/commonjava/indy/core/content/AbstractMergedContentGenerator.java index 9adcd7e868..bc5483f64c 100644 --- a/core/src/main/java/org/commonjava/indy/core/content/AbstractMergedContentGenerator.java +++ b/core/src/main/java/org/commonjava/indy/core/content/AbstractMergedContentGenerator.java @@ -17,7 +17,6 @@ import java.io.IOException; import java.util.Arrays; -import java.util.Collections; import java.util.HashSet; import java.util.Set; import java.util.stream.Stream; @@ -34,7 +33,7 @@ import org.commonjava.indy.core.content.group.GroupMergeHelper; import org.commonjava.indy.data.IndyDataException; import org.commonjava.indy.data.StoreDataManager; -import org.commonjava.indy.measure.annotation.Measure; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.StoreType; diff --git a/core/src/main/java/org/commonjava/indy/core/content/ContentGeneratorManager.java b/core/src/main/java/org/commonjava/indy/core/content/ContentGeneratorManager.java index ad7de7efb2..2df400ae62 100644 --- a/core/src/main/java/org/commonjava/indy/core/content/ContentGeneratorManager.java +++ b/core/src/main/java/org/commonjava/indy/core/content/ContentGeneratorManager.java @@ -18,7 +18,7 @@ import org.commonjava.indy.IndyWorkflowException; import org.commonjava.indy.content.ContentGenerator; import org.commonjava.indy.content.StoreResource; -import org.commonjava.indy.measure.annotation.Measure; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.util.LocationUtils; diff --git a/core/src/main/java/org/commonjava/indy/core/content/DefaultContentManager.java b/core/src/main/java/org/commonjava/indy/core/content/DefaultContentManager.java index 4c19aec9d9..dc0a3ac377 100644 --- a/core/src/main/java/org/commonjava/indy/core/content/DefaultContentManager.java +++ b/core/src/main/java/org/commonjava/indy/core/content/DefaultContentManager.java @@ -16,7 +16,7 @@ package org.commonjava.indy.core.content; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.IndyWorkflowException; import org.commonjava.indy.conf.IndyConfiguration; import org.commonjava.indy.content.ContentDigester; @@ -26,7 +26,7 @@ import org.commonjava.indy.core.content.group.GroupRepositoryFilterManager; import org.commonjava.indy.data.IndyDataException; import org.commonjava.indy.data.StoreDataManager; -import org.commonjava.indy.measure.annotation.Measure; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.StoreKey; diff --git a/core/src/main/java/org/commonjava/indy/core/content/DefaultDirectContentAccess.java b/core/src/main/java/org/commonjava/indy/core/content/DefaultDirectContentAccess.java index 8cd3df0a85..2a8e91d869 100644 --- a/core/src/main/java/org/commonjava/indy/core/content/DefaultDirectContentAccess.java +++ b/core/src/main/java/org/commonjava/indy/core/content/DefaultDirectContentAccess.java @@ -23,7 +23,7 @@ import org.commonjava.indy.content.DirectContentAccess; import org.commonjava.indy.content.DownloadManager; import org.commonjava.indy.content.StoreResource; -import org.commonjava.indy.measure.annotation.Measure; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.StoreKey; import org.commonjava.maven.galley.event.EventMetadata; diff --git a/core/src/main/java/org/commonjava/indy/core/content/DefaultDownloadManager.java b/core/src/main/java/org/commonjava/indy/core/content/DefaultDownloadManager.java index fb24f8c620..069b17174a 100644 --- a/core/src/main/java/org/commonjava/indy/core/content/DefaultDownloadManager.java +++ b/core/src/main/java/org/commonjava/indy/core/content/DefaultDownloadManager.java @@ -28,9 +28,7 @@ import org.commonjava.indy.core.change.event.IndyFileEventManager; import org.commonjava.indy.data.IndyDataException; import org.commonjava.indy.data.StoreDataManager; -import org.commonjava.indy.measure.annotation.Measure; -import org.commonjava.indy.measure.annotation.MetricNamed; -import org.commonjava.indy.metrics.IndyMetricsManager; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.HostedRepository; import org.commonjava.indy.model.core.RemoteRepository; diff --git a/core/src/main/java/org/commonjava/indy/core/content/group/GroupRepositoryFilterManager.java b/core/src/main/java/org/commonjava/indy/core/content/group/GroupRepositoryFilterManager.java index 7376ffc961..9a9010a2d9 100644 --- a/core/src/main/java/org/commonjava/indy/core/content/group/GroupRepositoryFilterManager.java +++ b/core/src/main/java/org/commonjava/indy/core/content/group/GroupRepositoryFilterManager.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.core.content.group; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.conf.IndyConfiguration; import org.commonjava.indy.content.GroupRepositoryFilter; import org.commonjava.indy.model.core.ArtifactStore; diff --git a/core/src/main/java/org/commonjava/indy/core/ctl/ContentController.java b/core/src/main/java/org/commonjava/indy/core/ctl/ContentController.java index e401b200d6..889b9e656e 100644 --- a/core/src/main/java/org/commonjava/indy/core/ctl/ContentController.java +++ b/core/src/main/java/org/commonjava/indy/core/ctl/ContentController.java @@ -23,7 +23,7 @@ import org.commonjava.indy.content.StoreResource; import org.commonjava.indy.data.IndyDataException; import org.commonjava.indy.data.StoreDataManager; -import org.commonjava.indy.measure.annotation.Measure; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.StoreKey; import org.commonjava.indy.model.core.StoreType; diff --git a/core/src/main/java/org/commonjava/indy/core/ctl/IspnCacheController.java b/core/src/main/java/org/commonjava/indy/core/ctl/IspnCacheController.java index cd1d33461b..374f830420 100644 --- a/core/src/main/java/org/commonjava/indy/core/ctl/IspnCacheController.java +++ b/core/src/main/java/org/commonjava/indy/core/ctl/IspnCacheController.java @@ -31,7 +31,7 @@ import java.util.HashMap; import java.util.Map; -import static org.apache.commons.lang.StringUtils.isNotBlank; +import static org.apache.commons.lang3.StringUtils.isNotBlank; @ApplicationScoped public class IspnCacheController diff --git a/core/src/main/java/org/commonjava/indy/core/ctl/SchedulerController.java b/core/src/main/java/org/commonjava/indy/core/ctl/SchedulerController.java index b5478b8588..244eea5f4d 100644 --- a/core/src/main/java/org/commonjava/indy/core/ctl/SchedulerController.java +++ b/core/src/main/java/org/commonjava/indy/core/ctl/SchedulerController.java @@ -20,17 +20,22 @@ import org.commonjava.indy.core.expire.Expiration; import org.commonjava.indy.core.expire.ExpirationSet; import org.commonjava.indy.core.expire.ScheduleManager; +import org.commonjava.indy.core.expire.ScheduleValue; import org.commonjava.indy.core.expire.StoreKeyMatcher; import org.commonjava.indy.data.IndyDataException; import org.commonjava.indy.data.StoreDataManager; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.StoreKey; import org.infinispan.commons.api.BasicCache; +import org.infinispan.query.Search; +import org.infinispan.query.dsl.Query; +import org.infinispan.query.dsl.QueryFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; +import java.util.List; import java.util.stream.Collectors; @ApplicationScoped @@ -85,11 +90,16 @@ public ExpirationSet getDisabledStores() // This key matcher will compare with the cache key group to see if the group ends with the "Disable-Timeout"(jobtype) ExpirationSet expirations = scheduleManager.findMatchingExpirations( - cacheHandle -> cacheHandle.execute( BasicCache::keySet ) - .stream() - .filter( key -> key.getType() - .equals( StoreEnablementManager.DISABLE_TIMEOUT ) ) - .collect( Collectors.toSet() ) ); + cacheHandle -> { + QueryFactory queryFactory = Search.getQueryFactory( cacheHandle.getCache() ); + Query q = queryFactory.from( ScheduleValue.class ).having( "key.type" ).eq( StoreEnablementManager.DISABLE_TIMEOUT ).build(); + List list = q.list(); + return list.stream().map( ScheduleValue::getKey ).collect( Collectors.toSet()); +// cacheHandle.execute( BasicCache::keySet ) +// .stream() +// .filter( key -> key.getType().equals( StoreEnablementManager.DISABLE_TIMEOUT ) ) +// .collect( Collectors.toSet() ); + } ); // TODO: This seems REALLY inefficient... diff --git a/core/src/main/java/org/commonjava/indy/core/expire/InfinispanScheduleExpirationMigrationAction.java b/core/src/main/java/org/commonjava/indy/core/expire/InfinispanScheduleExpirationMigrationAction.java new file mode 100644 index 0000000000..a9b2b323d1 --- /dev/null +++ b/core/src/main/java/org/commonjava/indy/core/expire/InfinispanScheduleExpirationMigrationAction.java @@ -0,0 +1,98 @@ +/** + * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) + * + * 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.commonjava.indy.core.expire; + +import org.commonjava.indy.action.MigrationAction; +import org.commonjava.indy.audit.ChangeSummary; +import org.commonjava.indy.model.core.io.IndyObjectMapper; +import org.commonjava.indy.subsys.datafile.DataFileManager; +import org.commonjava.indy.subsys.infinispan.CacheHandle; +import org.commonjava.indy.subsys.infinispan.CacheProducer; +import org.infinispan.manager.EmbeddedCacheManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.inject.Inject; +import javax.inject.Named; +import java.util.Collections; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +@Named( "infinispan-schedule-expiration-migration" ) +public class InfinispanScheduleExpirationMigrationAction + implements MigrationAction +{ + private final Logger logger = LoggerFactory.getLogger( getClass() ); + + private static final String SCHEDULE_CACHE_V1 = "schedule-expire-cache"; + + @Inject + private DataFileManager dataFileManager; + + @Inject + private CacheProducer cacheProducer; + + @Inject + private CacheHandle scheduleCacheV2; + + @Inject + private IndyObjectMapper objectMapper; + + protected InfinispanScheduleExpirationMigrationAction() + { + } + + @Override + public boolean migrate() + { + final Set result = Collections.synchronizedSet( new HashSet<>() ); + if ( cacheProducer != null ) + { + EmbeddedCacheManager cacheManager = cacheProducer.getCacheManager(); + if ( cacheManager.cacheExists( SCHEDULE_CACHE_V1 ) ) + { + logger.info( "Migrating from legacy schedule expiration cache: {}", SCHEDULE_CACHE_V1 ); + cacheProducer.getCache( SCHEDULE_CACHE_V1 ).executeCache( c -> { + c.forEach( ( key, value ) -> { + if ( key instanceof ScheduleKey && value instanceof Map ) + { + logger.info( "Migrating from legacy cache: {}", key ); + scheduleCacheV2.put( (ScheduleKey) key, + new ScheduleValue( (ScheduleKey) key, (Map) value ) ); + result.add( (ScheduleKey) key ); + } + } ); + c.clearAsync(); + return null; + } ); + } + } + return !result.isEmpty(); + } + + @Override + public int getMigrationPriority() + { + return 99; + } + + @Override + public String getId() + { + return "Legacy ISPN schedule-expiration cache data migrator"; + } +} diff --git a/core/src/main/java/org/commonjava/indy/core/expire/ScheduleKey.java b/core/src/main/java/org/commonjava/indy/core/expire/ScheduleKey.java index 0ad60aa13a..64651eb4b1 100644 --- a/core/src/main/java/org/commonjava/indy/core/expire/ScheduleKey.java +++ b/core/src/main/java/org/commonjava/indy/core/expire/ScheduleKey.java @@ -17,6 +17,10 @@ import org.commonjava.indy.model.core.StoreKey; import org.commonjava.indy.model.core.StoreType; +import org.hibernate.search.annotations.Analyze; +import org.hibernate.search.annotations.Field; +import org.hibernate.search.annotations.Index; +import org.hibernate.search.annotations.Indexed; import java.io.Externalizable; import java.io.IOException; @@ -25,14 +29,21 @@ import java.io.Serializable; import java.util.Objects; +@Indexed public class ScheduleKey implements Externalizable, Serializable { + @Field( index = Index.YES, analyze = Analyze.NO ) private StoreKey storeKey; + @Field( index = Index.YES, analyze = Analyze.NO ) private String type; + @Field( index = Index.YES, analyze = Analyze.NO ) private String name; + @Field( index = Index.YES, analyze = Analyze.NO ) + private String groupName; + public ScheduleKey() { } @@ -42,6 +53,7 @@ public ScheduleKey( final StoreKey storeKey, final String type, final String nam this.storeKey = storeKey; this.type = type; this.name = name; + this.groupName = ScheduleManager.groupName( this.storeKey, this.type ); } public StoreKey getStoreKey() @@ -59,9 +71,9 @@ public String getName() return name; } - public String groupName() + public String getGroupName() { - return ScheduleManager.groupName( this.storeKey, this.type ); + return groupName; } public static ScheduleKey fromGroupWithName( final String group, final String name ) @@ -134,5 +146,7 @@ public void readExternal( ObjectInput in ) final String nameStr = (String) in.readObject(); name = "".equals( nameStr ) ? null : nameStr; + + groupName = ScheduleManager.groupName( storeKey, type ); } } diff --git a/core/src/main/java/org/commonjava/indy/core/expire/ScheduleManager.java b/core/src/main/java/org/commonjava/indy/core/expire/ScheduleManager.java index ddf6da34a5..61433398c9 100644 --- a/core/src/main/java/org/commonjava/indy/core/expire/ScheduleManager.java +++ b/core/src/main/java/org/commonjava/indy/core/expire/ScheduleManager.java @@ -126,10 +126,11 @@ public class ScheduleManager @Inject @ScheduleCache - private CacheHandle scheduleCache; + private CacheHandle scheduleCache; @Inject @ScheduleEventLockCache + @Deprecated private CacheHandle scheduleEventLockCache; @Inject @@ -185,7 +186,7 @@ public void rescheduleSnapshotTimeouts( final HostedRepository deploy ) for ( final ScheduleKey key : canceled ) { final String path = key.getName(); - final StoreKey sk = storeKeyFrom( key.groupName() ); + final StoreKey sk = storeKeyFrom( key.getGroupName() ); scheduleContentExpiration( sk, path, timeout ); } @@ -218,7 +219,7 @@ else if ( repo.isPassthrough() ) for ( final ScheduleKey key : canceled ) { final String path = key.getName(); - final StoreKey sk = storeKeyFrom( key.groupName() ); + final StoreKey sk = storeKeyFrom( key.getGroupName() ); scheduleContentExpiration( sk, path, timeout ); } @@ -286,8 +287,7 @@ public void setProxyTimeouts( final StoreKey key, final String path ) { // logger.info( "[PROXY TIMEOUT SET] {}/{}; {}", repo.getKey(), path, new Date( System.currentTimeMillis() // + timeout ) ); - cancel( new StoreKeyMatcher( key, CONTENT_JOB_TYPE ), path ); - + removeCache( new ScheduleKey( key, CONTENT_JOB_TYPE, path ) ); scheduleContentExpiration( key, path, timeout ); } } @@ -317,7 +317,7 @@ public void scheduleForStore( final StoreKey key, final String jobType, final St final ScheduleKey cacheKey = new ScheduleKey( key, jobType, jobName ); - scheduleCache.execute( cache -> cache.put( cacheKey, dataMap, startSeconds, TimeUnit.SECONDS ) ); + scheduleCache.execute( cache -> cache.put( cacheKey, new ScheduleValue( cacheKey, dataMap ), startSeconds, TimeUnit.SECONDS ) ); logger.debug( "Scheduled for the key {} with timeout: {} seconds", cacheKey, startSeconds ); } @@ -586,19 +586,20 @@ public ExpirationSet findMatchingExpirations( final CacheKeyMatcher private Expiration toExpiration( final ScheduleKey cacheKey ) { - return new Expiration( cacheKey.groupName(), cacheKey.getName(), getNextExpireTime( cacheKey ) ); + return new Expiration( cacheKey.getGroupName(), cacheKey.getName(), getNextExpireTime( cacheKey ) ); } private Date getNextExpireTime( final ScheduleKey cacheKey ) { return scheduleCache.executeCache( cache -> { - final CacheEntry entry = cache.getAdvancedCache().getCacheEntry( cacheKey ); + final CacheEntry entry = + cache.getAdvancedCache().getCacheEntry( cacheKey ); if ( entry != null ) { final Metadata metadata = entry.getMetadata(); long expire = metadata.lifespan(); - final long startTimeInMillis = (Long)scheduleCache.get( cacheKey ).get( SCHEDULE_TIME ); + final long startTimeInMillis = (Long)scheduleCache.get( cacheKey ).getDataPayload().get( SCHEDULE_TIME ); return calculateNextExpireTime( expire, startTimeInMillis ); } return null; @@ -708,14 +709,11 @@ public void stop() private void removeCache( final ScheduleKey cacheKey ) { - if ( scheduleCache.containsKey( cacheKey ) ) - { - scheduleCache.remove( cacheKey ); - } + scheduleCache.remove( cacheKey ); } @CacheEntryCreated - public void scheduled( final CacheEntryCreatedEvent e ) + public void scheduled( final CacheEntryCreatedEvent e ) { if ( e == null ) { @@ -726,7 +724,13 @@ public void scheduled( final CacheEntryCreatedEvent e ) if ( !e.isPre() ) { final ScheduleKey expiredKey = e.getKey(); - final Map expiredContent = e.getValue(); + final ScheduleValue value = e.getValue(); + if ( value == null ) + { + logger.warn( "The cache value for ISPN creation event of schedule expiration is null, key is {} .", expiredKey ); + return; + } + final Map expiredContent = value.getDataPayload(); if ( expiredKey != null && expiredContent != null ) { logger.debug( "Expiration Created: {}", expiredKey ); @@ -738,7 +742,7 @@ public void scheduled( final CacheEntryCreatedEvent e ) } @CacheEntryExpired - public void expired( CacheEntryExpiredEvent e ) + public void expired( CacheEntryExpiredEvent e ) { if ( e == null ) { @@ -749,15 +753,13 @@ public void expired( CacheEntryExpiredEvent e ) if ( !e.isPre() ) { final ScheduleKey expiredKey = e.getKey(); -/* - if ( scheduleEventLockCache.containsKey( expiredKey ) ) + final ScheduleValue value = e.getValue(); + if ( value == null ) { - logger.info( "Another instance {} is still handling expiration event for {}", expiredKey, - scheduleEventLockCache.containsKey( expiredKey ) ); + logger.warn( "The cache value for ISPN expired event of schedule expiration is null, key is {} .", expiredKey ); return; } -*/ - final Map expiredContent = e.getValue(); + final Map expiredContent = value.getDataPayload(); if ( expiredKey != null && expiredContent != null ) { logger.debug( "EXPIRED: {}", expiredKey ); @@ -790,7 +792,7 @@ public void expired( CacheEntryExpiredEvent e ) } @CacheEntryRemoved - public void cancelled( CacheEntryRemovedEvent e ) + public void cancelled( CacheEntryRemovedEvent e ) { if ( e == null ) { diff --git a/core/src/main/java/org/commonjava/indy/core/expire/ScheduleValue.java b/core/src/main/java/org/commonjava/indy/core/expire/ScheduleValue.java new file mode 100644 index 0000000000..59981cc89c --- /dev/null +++ b/core/src/main/java/org/commonjava/indy/core/expire/ScheduleValue.java @@ -0,0 +1,84 @@ +/** + * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) + * + * 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.commonjava.indy.core.expire; + +import org.hibernate.search.annotations.Analyze; +import org.hibernate.search.annotations.Field; +import org.hibernate.search.annotations.Index; +import org.hibernate.search.annotations.Indexed; + +import java.io.Externalizable; +import java.io.IOException; +import java.io.ObjectInput; +import java.io.ObjectOutput; +import java.util.Map; + +@Indexed +public class ScheduleValue + implements Externalizable +{ + @Field( index = Index.YES, analyze = Analyze.NO ) + private ScheduleKey key; + + @Field( index = Index.NO, analyze = Analyze.NO ) + private Map dataPayload; + + public ScheduleValue() + { + } + + public ScheduleValue( ScheduleKey key, Map dataPayload ) + { + this.key = key; + this.dataPayload = dataPayload; + } + + public ScheduleKey getKey() + { + return key; + } + + public void setKey( ScheduleKey key ) + { + this.key = key; + } + + public Map getDataPayload() + { + return dataPayload; + } + + public void setDataPayload( Map dataPayload ) + { + this.dataPayload = dataPayload; + } + + @Override + public void writeExternal( ObjectOutput out ) + throws IOException + { + out.writeObject( key ); + out.writeObject( dataPayload ); + } + + @Override + public void readExternal( ObjectInput in ) + throws IOException, ClassNotFoundException + { + this.key = (ScheduleKey)in.readObject(); + this.dataPayload = (Map)in.readObject(); + } +} diff --git a/core/src/main/java/org/commonjava/indy/core/expire/StoreKeyMatcher.java b/core/src/main/java/org/commonjava/indy/core/expire/StoreKeyMatcher.java index ebeb276d9b..cc67022a8b 100644 --- a/core/src/main/java/org/commonjava/indy/core/expire/StoreKeyMatcher.java +++ b/core/src/main/java/org/commonjava/indy/core/expire/StoreKeyMatcher.java @@ -18,8 +18,12 @@ import org.commonjava.indy.model.core.StoreKey; import org.commonjava.indy.subsys.infinispan.CacheHandle; import org.commonjava.indy.subsys.infinispan.CacheKeyMatcher; -import org.infinispan.commons.api.BasicCache; +import org.infinispan.query.Search; +import org.infinispan.query.dsl.Query; +import org.infinispan.query.dsl.QueryFactory; +import java.util.HashSet; +import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -33,22 +37,23 @@ public class StoreKeyMatcher //TODO: will have a thought to replace this type of matcher with a ISPN query API in the future to get better performance. - private final StoreKey storeKey; - - private final String eventType; + private final String groupName; public StoreKeyMatcher( final StoreKey key, final String eventType ) { - this.storeKey = key; - this.eventType = eventType; + this.groupName = ScheduleManager.groupName( key, eventType ); } @Override public Set matches( CacheHandle cacheHandle ) { - return cacheHandle.execute( BasicCache::keySet ) - .stream() - .filter( key -> key != null && key.exists() && key.groupName().equals( ScheduleManager.groupName( storeKey, eventType ) ) ) - .collect( Collectors.toSet() ); + QueryFactory queryFactory = Search.getQueryFactory( cacheHandle.getCache() ); + Query q = queryFactory.from( ScheduleValue.class ).having( "key.groupName" ).eq( groupName ).build(); + List list = q.list(); + return list.stream().map( ScheduleValue::getKey ).collect( Collectors.toSet()); +// return cacheHandle.execute( BasicCache::keySet ) +// .stream() +// .filter( key -> key != null && key.exists() && key.groupName().equals( groupName ) ) +// .collect( Collectors.toSet() ); } } diff --git a/core/src/main/java/org/commonjava/indy/core/expire/cache/ScheduleCacheProducer.java b/core/src/main/java/org/commonjava/indy/core/expire/cache/ScheduleCacheProducer.java index 8c4fa73369..a984078409 100644 --- a/core/src/main/java/org/commonjava/indy/core/expire/cache/ScheduleCacheProducer.java +++ b/core/src/main/java/org/commonjava/indy/core/expire/cache/ScheduleCacheProducer.java @@ -17,6 +17,7 @@ import org.commonjava.indy.cluster.IndyNode; import org.commonjava.indy.core.expire.ScheduleKey; +import org.commonjava.indy.core.expire.ScheduleValue; import org.commonjava.indy.subsys.infinispan.CacheHandle; import org.commonjava.indy.subsys.infinispan.CacheProducer; import org.slf4j.Logger; @@ -41,14 +42,14 @@ public class ScheduleCacheProducer @Inject private CacheProducer cacheProducer; - private static final String SCHEDULE_EXPIRE = "schedule-expire-cache"; + private static final String SCHEDULE_EXPIRE = "schedule-expire-cache-v2"; private static final String SCHEDULE_EVENT_LOCK = "schedule-event-lock-cache"; @ScheduleCache @Produces @ApplicationScoped - public CacheHandle scheduleExpireCache() + public CacheHandle scheduleExpireCache() { return cacheProducer.getCache( SCHEDULE_EXPIRE ); } diff --git a/core/src/main/java/org/commonjava/indy/core/inject/CassandraNotFoundCache.java b/core/src/main/java/org/commonjava/indy/core/inject/CassandraNotFoundCache.java index 8292b03876..f8e8bad4c5 100644 --- a/core/src/main/java/org/commonjava/indy/core/inject/CassandraNotFoundCache.java +++ b/core/src/main/java/org/commonjava/indy/core/inject/CassandraNotFoundCache.java @@ -21,7 +21,7 @@ import com.datastax.driver.core.Row; import com.datastax.driver.core.Session; import org.commonjava.indy.conf.IndyConfiguration; -import org.commonjava.indy.measure.annotation.Measure; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.indy.model.core.StoreKey; import org.commonjava.indy.model.galley.KeyedLocation; import org.commonjava.indy.subsys.cassandra.CassandraClient; diff --git a/core/src/main/java/org/commonjava/indy/core/inject/IspnNotFoundCache.java b/core/src/main/java/org/commonjava/indy/core/inject/IspnNotFoundCache.java index fcf3586568..b752743860 100644 --- a/core/src/main/java/org/commonjava/indy/core/inject/IspnNotFoundCache.java +++ b/core/src/main/java/org/commonjava/indy/core/inject/IspnNotFoundCache.java @@ -16,14 +16,12 @@ package org.commonjava.indy.core.inject; import org.commonjava.indy.conf.IndyConfiguration; -import org.commonjava.indy.measure.annotation.Measure; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.indy.model.core.StoreKey; import org.commonjava.indy.model.galley.KeyedLocation; -import org.commonjava.indy.model.galley.RepositoryLocation; import org.commonjava.indy.subsys.infinispan.CacheHandle; import org.commonjava.maven.galley.model.ConcreteResource; import org.commonjava.maven.galley.model.Location; -import org.infinispan.Cache; import org.infinispan.query.Search; import org.infinispan.query.dsl.Expression; import org.infinispan.query.dsl.Query; @@ -34,7 +32,6 @@ import javax.annotation.PostConstruct; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Alternative; -import javax.enterprise.inject.Default; import javax.inject.Inject; import java.text.SimpleDateFormat; import java.util.Date; diff --git a/core/src/main/java/org/commonjava/indy/core/inject/NFCMetricsDecorator.java b/core/src/main/java/org/commonjava/indy/core/inject/NFCMetricsDecorator.java index 7362ba1ef2..5d2d8a16e5 100644 --- a/core/src/main/java/org/commonjava/indy/core/inject/NFCMetricsDecorator.java +++ b/core/src/main/java/org/commonjava/indy/core/inject/NFCMetricsDecorator.java @@ -15,8 +15,7 @@ */ package org.commonjava.indy.core.inject; -import org.commonjava.indy.measure.annotation.Measure; -import org.commonjava.indy.measure.annotation.MetricNamed; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.maven.galley.model.ConcreteResource; import org.commonjava.maven.galley.model.Location; import org.commonjava.maven.galley.spi.nfc.NotFoundCache; diff --git a/core/src/main/resources/default-durable-state.conf b/core/src/main/resources/default-durable-state.conf new file mode 100644 index 0000000000..f9108b87b2 --- /dev/null +++ b/core/src/main/resources/default-durable-state.conf @@ -0,0 +1,4 @@ +[durable-state] +folo.storage=infinispan +store.storage=infinispan +schedule.storage=infinispan \ No newline at end of file diff --git a/core/src/test/java/org/commonjava/indy/core/expire/ScheduleManagerTest.java b/core/src/test/java/org/commonjava/indy/core/expire/ScheduleManagerTest.java index 81ff8f7e3f..520be482b3 100644 --- a/core/src/test/java/org/commonjava/indy/core/expire/ScheduleManagerTest.java +++ b/core/src/test/java/org/commonjava/indy/core/expire/ScheduleManagerTest.java @@ -52,7 +52,7 @@ public void testStoreKeyFrom() { StoreKey k = new StoreKey( "maven", StoreType.remote, "repo1" ); ScheduleKey key = new ScheduleKey(k, ScheduleManager.CONTENT_JOB_TYPE, "/abc"); - final StoreKey sk = ScheduleManager.storeKeyFrom( key.groupName() ); + final StoreKey sk = ScheduleManager.storeKeyFrom( key.getGroupName() ); System.out.println(">>> " + sk); assertNotNull( sk ); assertEquals( sk, k ); diff --git a/core/src/test/java/org/commonjava/indy/fixture/MockGalleyProvider.java b/core/src/test/java/org/commonjava/indy/fixture/MockTestProvider.java similarity index 73% rename from core/src/test/java/org/commonjava/indy/fixture/MockGalleyProvider.java rename to core/src/test/java/org/commonjava/indy/fixture/MockTestProvider.java index e7b290e9fd..074fd42d5c 100644 --- a/core/src/test/java/org/commonjava/indy/fixture/MockGalleyProvider.java +++ b/core/src/test/java/org/commonjava/indy/fixture/MockTestProvider.java @@ -16,22 +16,23 @@ package org.commonjava.indy.fixture; import org.commonjava.atlas.maven.ident.ref.ProjectRef; +import org.commonjava.cdi.util.weft.config.DefaultWeftConfig; +import org.commonjava.cdi.util.weft.config.WeftConfig; import org.commonjava.maven.galley.config.TransportManagerConfig; import org.commonjava.maven.galley.maven.spi.defaults.MavenPluginDefaults; import org.commonjava.maven.galley.maven.spi.defaults.MavenPluginImplications; import org.commonjava.maven.galley.transport.htcli.conf.GlobalHttpConfiguration; +import org.commonjava.o11yphant.honeycomb.config.HoneycombConfiguration; +import org.commonjava.o11yphant.metrics.TrafficClassifier; +import org.commonjava.o11yphant.metrics.sli.GoldenSignalsMetricSet; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Alternative; import javax.enterprise.inject.Produces; -//TODO: This provider is fully duplicated with org.commonjava.indy.test.fixture.core.MockGalleyProvider -// in test/fixture-core for some dependency reasons in addons. Should be refactored in another -// common test module in the future. - @ApplicationScoped @Alternative -public class MockGalleyProvider +public class MockTestProvider { @Produces public TransportManagerConfig getTransportManagerConfig() @@ -76,4 +77,27 @@ public GlobalHttpConfiguration getGlobalHttpConfiguration() return null; } + @Produces + public WeftConfig getWeftConfig() + { + return new DefaultWeftConfig(); + } + + @Produces + public HoneycombConfiguration getHoneycombConfiguration() + { + return null; + } + + @Produces + public GoldenSignalsMetricSet getGoldenSignalsMetricSet() + { + return null; + } + + @Produces + public TrafficClassifier getTrafficClassifier() + { + return null; + } } diff --git a/core/src/test/resources/META-INF/beans.xml b/core/src/test/resources/META-INF/beans.xml index 03820f5090..c291440c00 100644 --- a/core/src/test/resources/META-INF/beans.xml +++ b/core/src/test/resources/META-INF/beans.xml @@ -17,8 +17,7 @@ org.commonjava.indy.mem.data.MemoryStoreDataManager - org.commonjava.indy.fixture.MockWeftProvider - org.commonjava.indy.fixture.MockGalleyProvider + org.commonjava.indy.fixture.MockTestProvider org.commonjava.indy.fixture.MockContentAdvisor diff --git a/db/common/pom.xml b/db/common/pom.xml index 15c49b51dd..b3bb863f15 100644 --- a/db/common/pom.xml +++ b/db/common/pom.xml @@ -22,7 +22,7 @@ org.commonjava.indy indy-db - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-db-common @@ -35,7 +35,7 @@ org.commonjava.indy - indy-subsys-metrics-core + indy-subsys-metrics org.commonjava.indy diff --git a/db/common/src/main/java/org/commonjava/indy/db/common/AbstractStoreDataManager.java b/db/common/src/main/java/org/commonjava/indy/db/common/AbstractStoreDataManager.java index e6ec14fc0b..6195f4db1a 100644 --- a/db/common/src/main/java/org/commonjava/indy/db/common/AbstractStoreDataManager.java +++ b/db/common/src/main/java/org/commonjava/indy/db/common/AbstractStoreDataManager.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.db.common; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.cdi.util.weft.ExecutorConfig; import org.commonjava.cdi.util.weft.Locker; import org.commonjava.cdi.util.weft.WeftManaged; @@ -30,7 +30,7 @@ import org.commonjava.indy.data.StoreDataManager; import org.commonjava.indy.data.StoreEventDispatcher; import org.commonjava.indy.data.StoreValidator; -import org.commonjava.indy.measure.annotation.Measure; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.HostedRepository; @@ -61,7 +61,7 @@ import java.util.stream.Stream; import static java.util.Collections.emptySet; -import static org.apache.commons.lang.StringUtils.isBlank; +import static org.apache.commons.lang3.StringUtils.isBlank; import static org.apache.commons.lang3.StringUtils.isNotBlank; import static org.commonjava.indy.db.common.StoreUpdateAction.DELETE; import static org.commonjava.indy.db.common.StoreUpdateAction.STORE; diff --git a/db/common/src/main/java/org/commonjava/indy/db/common/DefaultArtifactStoreQuery.java b/db/common/src/main/java/org/commonjava/indy/db/common/DefaultArtifactStoreQuery.java index 8542febcb6..8b71027130 100644 --- a/db/common/src/main/java/org/commonjava/indy/db/common/DefaultArtifactStoreQuery.java +++ b/db/common/src/main/java/org/commonjava/indy/db/common/DefaultArtifactStoreQuery.java @@ -19,7 +19,7 @@ import org.commonjava.indy.data.ArtifactStoreQuery; import org.commonjava.indy.data.IndyDataException; import org.commonjava.indy.data.StoreDataManager; -import org.commonjava.indy.measure.annotation.Measure; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.HostedRepository; @@ -40,7 +40,6 @@ import java.util.HashSet; import java.util.LinkedList; import java.util.List; -import java.util.Objects; import java.util.Set; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Predicate; diff --git a/db/flat/pom.xml b/db/flat/pom.xml index 8e3eba17a5..ff81356bf3 100644 --- a/db/flat/pom.xml +++ b/db/flat/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-db - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-db-flat diff --git a/db/infinispan/pom.xml b/db/infinispan/pom.xml index f74dfb0265..47ed770875 100644 --- a/db/infinispan/pom.xml +++ b/db/infinispan/pom.xml @@ -22,7 +22,7 @@ org.commonjava.indy indy-db - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-db-infinispan @@ -35,7 +35,7 @@ org.commonjava.indy - indy-subsys-metrics-core + indy-subsys-metrics org.commonjava.indy diff --git a/db/infinispan/src/main/java/org/commonjava/indy/infinispan/data/InfinispanStoreDataManager.java b/db/infinispan/src/main/java/org/commonjava/indy/infinispan/data/InfinispanStoreDataManager.java index 5e116c3699..71c95ff435 100644 --- a/db/infinispan/src/main/java/org/commonjava/indy/infinispan/data/InfinispanStoreDataManager.java +++ b/db/infinispan/src/main/java/org/commonjava/indy/infinispan/data/InfinispanStoreDataManager.java @@ -20,7 +20,7 @@ import org.commonjava.indy.data.StoreEventDispatcher; import org.commonjava.indy.db.common.AbstractStoreDataManager; import org.commonjava.indy.db.common.StoreUpdateAction; -import org.commonjava.indy.measure.annotation.Measure; +import org.commonjava.o11yphant.metrics.annotation.Measure; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.StoreKey; diff --git a/db/memory/pom.xml b/db/memory/pom.xml index d6da54f697..6754a54b1b 100644 --- a/db/memory/pom.xml +++ b/db/memory/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-db - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-db-memory @@ -34,7 +34,7 @@ org.commonjava.indy - indy-subsys-metrics-core + indy-subsys-metrics org.commonjava.indy diff --git a/db/memory/src/test/java/org/commonjava/indy/infinispan/data/fixture/ThreadDumper.java b/db/memory/src/test/java/org/commonjava/indy/infinispan/data/fixture/ThreadDumper.java index 4b824d7dbd..3d680f6f6f 100644 --- a/db/memory/src/test/java/org/commonjava/indy/infinispan/data/fixture/ThreadDumper.java +++ b/db/memory/src/test/java/org/commonjava/indy/infinispan/data/fixture/ThreadDumper.java @@ -31,7 +31,7 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Stream; -import static org.apache.commons.lang.StringUtils.join; +import static org.apache.commons.lang3.StringUtils.join; /** * Created by jdcasey on 11/28/16. diff --git a/db/metrics/pom.xml b/db/metrics/pom.xml index 0d40130ed0..8dfbb93376 100644 --- a/db/metrics/pom.xml +++ b/db/metrics/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-db - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-db-metrics @@ -34,11 +34,7 @@ org.commonjava.indy - indy-subsys-metrics-core - - - org.commonjava.indy - indy-subsys-metrics-reporter + indy-subsys-metrics org.commonjava.indy diff --git a/db/metrics/src/main/java/org/commonjava/indy/db/metered/MeasuringArtifactStoreQueryInterceptor.java b/db/metrics/src/main/java/org/commonjava/indy/db/metered/MeasuringArtifactStoreQueryInterceptor.java index 3dc3d45451..0320c3e695 100644 --- a/db/metrics/src/main/java/org/commonjava/indy/db/metered/MeasuringArtifactStoreQueryInterceptor.java +++ b/db/metrics/src/main/java/org/commonjava/indy/db/metered/MeasuringArtifactStoreQueryInterceptor.java @@ -17,7 +17,7 @@ import org.commonjava.indy.data.ArtifactStoreQuery; import org.commonjava.indy.data.StoreDataManager; -import org.commonjava.indy.metrics.IndyMetricsManager; +import org.commonjava.o11yphant.metrics.DefaultMetricsManager; import org.commonjava.indy.model.core.ArtifactStore; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,7 +35,7 @@ public abstract class MeasuringArtifactStoreQueryInterceptor private StoreDataManager dataManager; @Inject - private IndyMetricsManager metricsManager; + private DefaultMetricsManager metricsManager; @Override public ArtifactStoreQuery query() diff --git a/db/metrics/src/main/java/org/commonjava/indy/db/metered/MeasuringStoreQuery.java b/db/metrics/src/main/java/org/commonjava/indy/db/metered/MeasuringStoreQuery.java index 21aec1f234..e808b709ae 100644 --- a/db/metrics/src/main/java/org/commonjava/indy/db/metered/MeasuringStoreQuery.java +++ b/db/metrics/src/main/java/org/commonjava/indy/db/metered/MeasuringStoreQuery.java @@ -18,7 +18,7 @@ import org.commonjava.indy.data.ArtifactStoreQuery; import org.commonjava.indy.data.IndyDataException; import org.commonjava.indy.data.StoreDataManager; -import org.commonjava.indy.metrics.IndyMetricsManager; +import org.commonjava.o11yphant.metrics.DefaultMetricsManager; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.HostedRepository; @@ -28,7 +28,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.rmi.Remote; import java.util.Collection; import java.util.List; import java.util.Set; @@ -41,11 +40,11 @@ public class MeasuringStoreQuery { private final ArtifactStoreQuery query; - private final IndyMetricsManager metricsManager; + private final DefaultMetricsManager metricsManager; private final Logger logger = LoggerFactory.getLogger( getClass() ); - public MeasuringStoreQuery( final ArtifactStoreQuery query, final IndyMetricsManager metricsManager ) + public MeasuringStoreQuery( final ArtifactStoreQuery query, final DefaultMetricsManager metricsManager ) { this.query = query; this.metricsManager = metricsManager; diff --git a/db/pom.xml b/db/pom.xml index 3093c04b54..f0bd26269e 100644 --- a/db/pom.xml +++ b/db/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-parent - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-db diff --git a/deployments/cache-migrator/src/main/java/org/commonjava/indy/tools/cache/Main.java b/deployments/cache-migrator/src/main/java/org/commonjava/indy/tools/cache/Main.java index 652bf40fc0..1107519ca6 100644 --- a/deployments/cache-migrator/src/main/java/org/commonjava/indy/tools/cache/Main.java +++ b/deployments/cache-migrator/src/main/java/org/commonjava/indy/tools/cache/Main.java @@ -17,6 +17,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.common.collect.Iterables; import org.apache.commons.io.FileUtils; import org.commonjava.indy.action.IndyLifecycleException; import org.commonjava.indy.folo.model.TrackedContent; @@ -29,19 +30,29 @@ import java.io.BufferedOutputStream; import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.io.InputStreamReader; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.lang.reflect.InvocationTargetException; +import java.util.HashSet; +import java.util.List; import java.util.Properties; +import java.util.Set; import java.util.concurrent.atomic.AtomicReference; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; +import static org.apache.commons.io.IOUtils.copy; +import static org.commonjava.indy.folo.ctl.FoloConstants.TRACKING_TYPE.SEALED; import static org.commonjava.propulsor.boot.BootStatus.ERR_INIT; import static org.commonjava.propulsor.boot.BootStatus.ERR_PARSE_ARGS; @@ -139,10 +150,14 @@ private int run( final MigrationOptions options ) { dumpJsonFile( cache, options ); } - else + else if ( DataType.object == options.getDataType() ) { dumpObjectFile( cache, options ); } + else + { + dumpZipFiles( cache, options ); + } } else @@ -370,4 +385,81 @@ private void dumpJsonFile( CacheHandle cache, MigrationOptions throw new BootException( "Failed to write data to file: " + options.getDataFile(), error.get() ); } } + + private void dumpZipFiles( CacheHandle cache, MigrationOptions options ) throws BootException + { + AtomicReference error = new AtomicReference<>(); + cache.executeCache( ( c ) -> { + if ( error.get() == null ) + { + int count = 0; + int batchSize = options.getBatchSize() != null ? options.getBatchSize() : 1000; + Iterable> subLists = Iterables.partition( c.keySet(), batchSize ); + logger.info( "Handle the cache in batch size:{}", batchSize ); + for ( List subList : subLists ) + { + if ( error.get() == null ) + { + Set sealed = new HashSet<>(); + File out = new File( options.getDataFile().getParent() + "/folo-" + count + ".zip" ); + if ( error.get() == null ) + { + for ( Object key : subList ) + { + sealed.add( (TrackedContent) c.get( key ) ); + } + try + { + zipTrackedContent( out, sealed ); + } + catch ( IOException e ) + { + logger.error( "Failed to zip entries : " + subList.toString(), e ); + error.set( e ); + } + } + count++; + } + } + } + return true; + }); + + if ( error.get() != null ) + { + throw new BootException( "Failed to write data to zip.", error.get() ); + } + } + + /** + * Write sealed records to a zip file. + */ + public void zipTrackedContent( File out, Set sealed ) throws IOException + { + logger.info( "Writing sealed zip to: '{}'", out.getAbsolutePath() ); + + try (ZipOutputStream zip = new ZipOutputStream( new FileOutputStream( out ) )) + { + for ( TrackedContent f : sealed ) + { + String name = SEALED.getValue() + "/" + f.getKey().getId(); + + logger.trace( "Adding {} to zip", name ); + zip.putNextEntry( new ZipEntry( name ) ); + copy( toInputStream( f ), zip ); + } + } + } + + public InputStream toInputStream( TrackedContent f ) throws IOException + { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + ObjectOutputStream oos = new ObjectOutputStream( baos ); + oos.writeObject( f ); + oos.flush(); + oos.close(); + + return new ByteArrayInputStream( baos.toByteArray() ); + } } diff --git a/deployments/cache-migrator/src/main/java/org/commonjava/indy/tools/cache/MigrationOptions.java b/deployments/cache-migrator/src/main/java/org/commonjava/indy/tools/cache/MigrationOptions.java index 740526b2a5..b83eb1abcf 100644 --- a/deployments/cache-migrator/src/main/java/org/commonjava/indy/tools/cache/MigrationOptions.java +++ b/deployments/cache-migrator/src/main/java/org/commonjava/indy/tools/cache/MigrationOptions.java @@ -35,6 +35,9 @@ public class MigrationOptions @Option( name = "-t", aliases = { "--data-type" }, usage = "Data type ('json' or 'object')" ) private DataType dataType; + @Option( name = "-b", aliases = {"--batch-size"}, usage = "Batch size (Default 1000)" ) + private Integer batchSize; + @Argument( index = 0, metaVar = "action", required = false, usage = "Migration command to execute ('dump' or 'load')") private MigrationCommand migrationCommand; @@ -98,6 +101,16 @@ public void setDataFile( final File dataFile ) public void setDataType( final DataType dataType ) { this.dataType = dataType; } + public Integer getBatchSize() + { + return batchSize; + } + + public void setBatchSize( Integer batchSize ) + { + this.batchSize = batchSize; + } + public boolean parseArgs( final String[] args ) throws BootException { diff --git a/deployments/docker/pom.xml b/deployments/docker/pom.xml index 897ec29e59..ba0afbd6d4 100644 --- a/deployments/docker/pom.xml +++ b/deployments/docker/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-deployments - 2.3.0-SNAPSHOT + 2.5.4.1-SNAPSHOT org.commonjava.indy.docker diff --git a/deployments/launcher/pom.xml b/deployments/launcher/pom.xml index ce10598ad3..d4c653ac5b 100644 --- a/deployments/launcher/pom.xml +++ b/deployments/launcher/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-deployments - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT org.commonjava.indy.launch @@ -113,7 +113,7 @@ org.commonjava.indy - indy-subsys-metrics-reporter + indy-subsys-metrics tar.gz confset diff --git a/deployments/launcher/src/main/resources/META-INF/beans.xml b/deployments/launcher/src/main/resources/META-INF/beans.xml index ebcc6424b1..5d683b1534 100644 --- a/deployments/launcher/src/main/resources/META-INF/beans.xml +++ b/deployments/launcher/src/main/resources/META-INF/beans.xml @@ -1,13 +1,20 @@ org.commonjava.indy.bind.jaxrs.util.RestInterceptor - org.commonjava.indy.metrics.jaxrs.interceptor.MetricsInterceptor - org.commonjava.indy.subsys.honeycomb.interceptor.HoneycombMeasureInterceptor - org.commonjava.indy.subsys.honeycomb.interceptor.HoneycombWrapperInterceptor - org.commonjava.indy.subsys.honeycomb.interceptor.HoneycombWrapperStartInterceptor - org.commonjava.indy.subsys.honeycomb.interceptor.HoneycombWrapperEndInterceptor + org.commonjava.o11yphant.metrics.interceptor.DefaultMetricsInterceptor + org.commonjava.o11yphant.honeycomb.interceptor.flat.FlatHoneycombMeasureInterceptor + org.commonjava.o11yphant.honeycomb.interceptor.flat.FlatHoneycombWrapperInterceptor + org.commonjava.o11yphant.honeycomb.interceptor.flat.FlatHoneycombWrapperStartInterceptor + org.commonjava.o11yphant.honeycomb.interceptor.flat.FlatHoneycombWrapperEndInterceptor diff --git a/deployments/pom.xml b/deployments/pom.xml index 8b2637de94..9fcc2b5c18 100644 --- a/deployments/pom.xml +++ b/deployments/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-parent - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT indy-deployments diff --git a/deployments/standalone/launcher/pom.xml b/deployments/standalone/launcher/pom.xml index 96c59fb858..a8279698cf 100644 --- a/deployments/standalone/launcher/pom.xml +++ b/deployments/standalone/launcher/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-standalone - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT indy-standalone-launcher diff --git a/deployments/standalone/launcher/src/main/resources/META-INF/beans.xml b/deployments/standalone/launcher/src/main/resources/META-INF/beans.xml index 01fdda1bdb..b51be215ce 100644 --- a/deployments/standalone/launcher/src/main/resources/META-INF/beans.xml +++ b/deployments/standalone/launcher/src/main/resources/META-INF/beans.xml @@ -30,11 +30,11 @@ org.commonjava.indy.bind.jaxrs.util.RestInterceptor - org.commonjava.indy.metrics.jaxrs.interceptor.MetricsInterceptor - org.commonjava.indy.subsys.honeycomb.interceptor.HoneycombMeasureInterceptor - org.commonjava.indy.subsys.honeycomb.interceptor.HoneycombWrapperInterceptor - org.commonjava.indy.subsys.honeycomb.interceptor.HoneycombWrapperStartInterceptor - org.commonjava.indy.subsys.honeycomb.interceptor.HoneycombWrapperEndInterceptor + org.commonjava.indy.subsys.metrics.jaxrs.interceptor.MetricsInterceptor + org.commonjava.o11yphant.honeycomb.interceptor.HoneycombMeasureInterceptor + org.commonjava.o11yphant.honeycomb.interceptor.HoneycombWrapperInterceptor + org.commonjava.o11yphant.honeycomb.interceptor.HoneycombWrapperStartInterceptor + org.commonjava.o11yphant.honeycomb.interceptor.HoneycombWrapperEndInterceptor diff --git a/deployments/standalone/pom.xml b/deployments/standalone/pom.xml index 2afd7a40cd..5b166c0e61 100644 --- a/deployments/standalone/pom.xml +++ b/deployments/standalone/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-deployments - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT indy-standalone diff --git a/embedder-tests/pom.xml b/embedder-tests/pom.xml index 4ec570f6dd..d804133374 100644 --- a/embedder-tests/pom.xml +++ b/embedder-tests/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-parent - 2.3.0-SNAPSHOT + 2.5.4.1-SNAPSHOT org.commonjava.indy.embed.test diff --git a/embedder-tests/sonar-report/pom.xml b/embedder-tests/sonar-report/pom.xml index e387fb32d6..cb3e14016c 100644 --- a/embedder-tests/sonar-report/pom.xml +++ b/embedder-tests/sonar-report/pom.xml @@ -22,7 +22,7 @@ indy-embedder-tests org.commonjava.indy.embed.test - 2.3.0-SNAPSHOT + 2.5.4.1-SNAPSHOT 4.0.0 @@ -63,11 +63,7 @@ org.commonjava.indy - indy-subsys-metrics-core - - - org.commonjava.indy - indy-subsys-metrics-reporter + indy-subsys-metrics org.commonjava.indy diff --git a/embedder/pom.xml b/embedder/pom.xml index bbe429bc1a..e1f35c0742 100644 --- a/embedder/pom.xml +++ b/embedder/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-parent - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT org.commonjava.indy.embed @@ -60,15 +60,7 @@ org.commonjava.indy - indy-subsys-metrics-core - - - org.commonjava.indy - indy-subsys-metrics-reporter - - - org.commonjava.indy - indy-subsys-metrics-prometheus + indy-subsys-metrics org.commonjava.indy @@ -231,6 +223,11 @@ indy-repo-proxy-jaxrs + + org.commonjava.util + o11yphant-metrics-core + + org.commonjava.atlas atlas-identities @@ -320,10 +317,6 @@ indy-ftests-pkg-npm test - - org.commonjava.indy - indy-ftests-metrics - org.commonjava.indy @@ -464,7 +457,6 @@ org.commonjava.indy:indy-ftests-promote org.commonjava.indy:indy-ftests-diagnostics org.commonjava.indy:indy-ftests-pkg-maven - org.commonjava.indy:indy-ftests-metrics org.commonjava.indy:indy-ftests-pkg-npm org.commonjava.indy:indy-ftests-hosted-by-archive org.commonjava.indy:indy-ftests-content-browse diff --git a/embedder/src/it/resources/logback.xml b/embedder/src/it/resources/logback.xml index 13762be955..d23658d6a4 100644 --- a/embedder/src/it/resources/logback.xml +++ b/embedder/src/it/resources/logback.xml @@ -36,7 +36,7 @@ - + diff --git a/embedder/src/main/resources/META-INF/beans.xml b/embedder/src/main/resources/META-INF/beans.xml index 70cbad914b..00f9dbec70 100644 --- a/embedder/src/main/resources/META-INF/beans.xml +++ b/embedder/src/main/resources/META-INF/beans.xml @@ -1,7 +1,7 @@ diff --git a/embedder/src/test/resources/META-INF/beans.xml b/embedder/src/test/resources/META-INF/beans.xml index 3eb23a4701..42d151fe66 100644 --- a/embedder/src/test/resources/META-INF/beans.xml +++ b/embedder/src/test/resources/META-INF/beans.xml @@ -1,13 +1,20 @@ - - + + diff --git a/filers/default/pom.xml b/filers/default/pom.xml index 1ca1028a61..8334b14e51 100644 --- a/filers/default/pom.xml +++ b/filers/default/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-file-managers - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-filer-default @@ -54,7 +54,7 @@ org.commonjava.indy - indy-subsys-metrics-core + indy-subsys-metrics diff --git a/filers/default/src/main/java/org/commonjava/indy/filer/def/DefaultGalleyStorageProvider.java b/filers/default/src/main/java/org/commonjava/indy/filer/def/DefaultGalleyStorageProvider.java index c6a0916e0b..29847c2fcd 100644 --- a/filers/default/src/main/java/org/commonjava/indy/filer/def/DefaultGalleyStorageProvider.java +++ b/filers/default/src/main/java/org/commonjava/indy/filer/def/DefaultGalleyStorageProvider.java @@ -15,8 +15,6 @@ */ package org.commonjava.indy.filer.def; -import com.codahale.metrics.Meter; -import com.codahale.metrics.Timer; import com.datastax.driver.core.Session; import org.commonjava.cdi.util.weft.ExecutorConfig; import org.commonjava.cdi.util.weft.NamedThreadFactory; @@ -25,8 +23,11 @@ import org.commonjava.indy.content.IndyChecksumAdvisor; import org.commonjava.indy.content.SpecialPathSetProducer; import org.commonjava.indy.filer.def.conf.DefaultStorageProviderConfiguration; -import org.commonjava.indy.metrics.IndyMetricsManager; -import org.commonjava.indy.metrics.conf.IndyMetricsConfig; +import org.commonjava.o11yphant.metrics.api.Meter; +import org.commonjava.o11yphant.metrics.api.MetricRegistry; +import org.commonjava.o11yphant.metrics.api.Timer; +import org.commonjava.o11yphant.metrics.DefaultMetricsManager; +import org.commonjava.indy.subsys.metrics.conf.IndyMetricsConfig; import org.commonjava.indy.subsys.cassandra.CassandraClient; import org.commonjava.indy.subsys.cassandra.config.CassandraConfig; import org.commonjava.maven.galley.GalleyInitException; @@ -80,7 +81,7 @@ import java.util.function.Function; import static org.apache.commons.lang3.StringUtils.isBlank; -import static org.commonjava.indy.metrics.IndyMetricsConstants.getSupername; +import static org.commonjava.o11yphant.metrics.util.NameUtils.getSupername; import static org.commonjava.maven.galley.io.checksum.ChecksummingDecoratorAdvisor.ChecksumAdvice.CALCULATE_AND_WRITE; import static org.commonjava.maven.galley.io.checksum.ChecksummingDecoratorAdvisor.ChecksumAdvice.NO_DECORATE; import static org.commonjava.storage.pathmapped.pathdb.datastax.util.CassandraPathDBUtils.*; @@ -123,7 +124,13 @@ public class DefaultGalleyStorageProvider private Instance transferDecorators; @Inject - private IndyMetricsManager metricsManager; + private DefaultMetricsManager metricsManager; + + @Inject + private MetricRegistry metricRegistry; + + @Inject + private IndyMetricsConfig metricsConfig; @Inject private CassandraConfig cassandraConfig; @@ -185,6 +192,8 @@ private void setupCacheProviderFactory() if ( indyConfiguration.isStandalone() ) { + logger.info( "We're in standalone content-storage mode. Cassandra path-mapping database will NOT be used" ); + // Only work for local debug mode. ScheduledExecutorService debugDeleteExecutor = Executors.newScheduledThreadPool( 5, new NamedThreadFactory( "debug-galley-delete-executor", new ThreadGroup( "debug-galley-delete-executor" ), true, 2 ) ); @@ -192,6 +201,8 @@ private void setupCacheProviderFactory() return; } + logger.info( "Initializing Cassandra-based path-mapping database for content storage." ); + PathDB pathDB = null; PathMappedStorageConfig pathMappedStorageConfig = getPathMappedStorageConfig(); if ( cassandraClient != null ) @@ -207,12 +218,11 @@ private void setupCacheProviderFactory() if ( pathDB != null ) { - final IndyMetricsConfig metricsConfig = metricsManager.getConfig(); if ( metricsConfig.isPathDBMetricsEnabled() ) { final String operations = metricsConfig.getPathDBMetricsOperations(); logger.info( "Create measured PathDB, operations: {}" ); - pathDB = new MeasuredPathDB( pathDB, metricsManager.getMetricRegistry(), getSupername( "pathDB" ) ) + pathDB = new MeasuredPathDB( pathDB, metricsManager, getSupername( "pathDB" ) ) { @Override protected boolean isMetricEnabled( String metricName ) @@ -283,12 +293,12 @@ private BiConsumer cumulativeTimer() private Function meterProvider() { - return (name)->metricsManager.getMeter( name ); + return ( name ) -> metricsManager.getMeter( name ); } private Function timerProvider() { - return (name)->metricsManager.startTimer( name ); + return ( name ) -> metricsManager.startTimer( name ); } private ChecksummingTransferDecorator getChecksummingTransferDecorator() diff --git a/filers/default/src/main/java/org/commonjava/indy/filer/def/IOLatencyDecorator.java b/filers/default/src/main/java/org/commonjava/indy/filer/def/IOLatencyDecorator.java index 0587bcbf8a..01c9d71d75 100644 --- a/filers/default/src/main/java/org/commonjava/indy/filer/def/IOLatencyDecorator.java +++ b/filers/default/src/main/java/org/commonjava/indy/filer/def/IOLatencyDecorator.java @@ -15,8 +15,6 @@ */ package org.commonjava.indy.filer.def; -import com.codahale.metrics.Meter; -import com.codahale.metrics.Timer; import org.apache.commons.io.input.CountingInputStream; import org.apache.commons.io.output.CountingOutputStream; import org.commonjava.maven.galley.event.EventMetadata; @@ -24,6 +22,7 @@ import org.commonjava.maven.galley.model.Transfer; import org.commonjava.maven.galley.model.TransferOperation; import org.commonjava.maven.galley.spi.metrics.TimingProvider; +import org.commonjava.o11yphant.metrics.api.Meter; import java.io.IOException; import java.io.InputStream; diff --git a/filers/default/src/main/java/org/commonjava/indy/filer/def/IndyTimingProvider.java b/filers/default/src/main/java/org/commonjava/indy/filer/def/IndyTimingProvider.java index 55c66e33c7..134a3a7d0e 100644 --- a/filers/default/src/main/java/org/commonjava/indy/filer/def/IndyTimingProvider.java +++ b/filers/default/src/main/java/org/commonjava/indy/filer/def/IndyTimingProvider.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.filer.def; -import org.commonjava.indy.metrics.IndyMetricsManager; +import org.commonjava.o11yphant.metrics.DefaultMetricsManager; import org.commonjava.maven.galley.spi.metrics.TimingProvider; public class IndyTimingProvider @@ -23,9 +23,9 @@ public class IndyTimingProvider { private final String name; - private final IndyMetricsManager metricsManager; + private final DefaultMetricsManager metricsManager; - public IndyTimingProvider( final String name, final IndyMetricsManager metricsManager ) + public IndyTimingProvider( final String name, final DefaultMetricsManager metricsManager ) { this.name = name; this.metricsManager = metricsManager; diff --git a/filers/default/src/main/java/org/commonjava/indy/filer/def/TimingInputStream.java b/filers/default/src/main/java/org/commonjava/indy/filer/def/TimingInputStream.java index 2967127626..d87b153497 100644 --- a/filers/default/src/main/java/org/commonjava/indy/filer/def/TimingInputStream.java +++ b/filers/default/src/main/java/org/commonjava/indy/filer/def/TimingInputStream.java @@ -15,12 +15,11 @@ */ package org.commonjava.indy.filer.def; -import com.codahale.metrics.Meter; -import com.codahale.metrics.Timer; import org.apache.commons.io.input.CountingInputStream; -import org.commonjava.indy.metrics.RequestContextHelper; +import org.commonjava.indy.util.RequestContextHelper; import org.commonjava.maven.galley.spi.metrics.TimingProvider; import org.commonjava.maven.galley.util.IdempotentCloseInputStream; +import org.commonjava.o11yphant.metrics.api.Meter; import java.io.IOException; import java.util.function.BiConsumer; diff --git a/filers/default/src/main/java/org/commonjava/indy/filer/def/TimingOutputStream.java b/filers/default/src/main/java/org/commonjava/indy/filer/def/TimingOutputStream.java index 27bd9bfd60..60feda3bb2 100644 --- a/filers/default/src/main/java/org/commonjava/indy/filer/def/TimingOutputStream.java +++ b/filers/default/src/main/java/org/commonjava/indy/filer/def/TimingOutputStream.java @@ -15,13 +15,11 @@ */ package org.commonjava.indy.filer.def; -import com.codahale.metrics.Meter; -import com.codahale.metrics.Timer; import org.apache.commons.io.output.CountingOutputStream; -import org.commonjava.indy.metrics.IndyMetricsManager; -import org.commonjava.indy.metrics.RequestContextHelper; +import org.commonjava.indy.util.RequestContextHelper; import org.commonjava.maven.galley.spi.metrics.TimingProvider; import org.commonjava.maven.galley.util.IdempotentCloseOutputStream; +import org.commonjava.o11yphant.metrics.api.Meter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/filers/default/src/main/java/org/commonjava/indy/filer/def/metrics/DefaultStoragePathProvider.java b/filers/default/src/main/java/org/commonjava/indy/filer/def/metrics/DefaultStoragePathProvider.java index 48a0eeac20..932799fd19 100644 --- a/filers/default/src/main/java/org/commonjava/indy/filer/def/metrics/DefaultStoragePathProvider.java +++ b/filers/default/src/main/java/org/commonjava/indy/filer/def/metrics/DefaultStoragePathProvider.java @@ -16,14 +16,14 @@ package org.commonjava.indy.filer.def.metrics; import org.commonjava.indy.filer.def.conf.DefaultStorageProviderConfiguration; -import org.commonjava.indy.metrics.system.StoragePathProvider; +import org.commonjava.o11yphant.metrics.system.StoragePathProvider; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import java.io.File; /** - * Used to provide storage path in {@link org.commonjava.indy.metrics.system.SystemGaugesSet} to monitor + * Used to provide storage path in {@link org.commonjava.o11yphant.metrics.system.SystemGaugesSet} to monitor * storage space usage */ @ApplicationScoped diff --git a/filers/pom.xml b/filers/pom.xml index 1ae625d20b..f98fe05c3c 100644 --- a/filers/pom.xml +++ b/filers/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-parent - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-file-managers diff --git a/ftests/common/pom.xml b/ftests/common/pom.xml index 2c0c695de6..a8b6165050 100644 --- a/ftests/common/pom.xml +++ b/ftests/common/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-ftests-parent - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-ftests-common diff --git a/ftests/common/src/main/java/org/commonjava/indy/ftest/core/fixture/ThreadDumper.java b/ftests/common/src/main/java/org/commonjava/indy/ftest/core/fixture/ThreadDumper.java index 12bc2d0235..443b79cb85 100644 --- a/ftests/common/src/main/java/org/commonjava/indy/ftest/core/fixture/ThreadDumper.java +++ b/ftests/common/src/main/java/org/commonjava/indy/ftest/core/fixture/ThreadDumper.java @@ -31,7 +31,7 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Stream; -import static org.apache.commons.lang.StringUtils.join; +import static org.apache.commons.lang3.StringUtils.join; /** * Created by jdcasey on 11/28/16. diff --git a/ftests/core/pom.xml b/ftests/core/pom.xml index 018ba2a166..8c8de46cbd 100644 --- a/ftests/core/pom.xml +++ b/ftests/core/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-ftests-parent - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-ftests-core diff --git a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupDownloadWithFirstRepoTimeoutTest.java b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupDownloadWithFirstRepoTimeoutTest.java index 5436ab1acb..74fde6860b 100644 --- a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupDownloadWithFirstRepoTimeoutTest.java +++ b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupDownloadWithFirstRepoTimeoutTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.ftest.core.content; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.RemoteRepository; diff --git a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupIgnoresDisabledRemoteRepositoryTest.java b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupIgnoresDisabledRemoteRepositoryTest.java index 05883d10a1..5217be5f69 100644 --- a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupIgnoresDisabledRemoteRepositoryTest.java +++ b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupIgnoresDisabledRemoteRepositoryTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.ftest.core.content; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.RemoteRepository; diff --git a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeInfoGenTest.java b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeInfoGenTest.java index ab59ed2259..9626fb2fd9 100644 --- a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeInfoGenTest.java +++ b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeInfoGenTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.ftest.core.content; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.core.content.group.GroupMergeHelper; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.model.core.ArtifactStore; diff --git a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeWhenConstituentDisabledTest.java b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeWhenConstituentDisabledTest.java index 4591ec3034..dee1a2a8c5 100644 --- a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeWhenConstituentDisabledTest.java +++ b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeWhenConstituentDisabledTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.ftest.core.content; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.ftest.core.category.EventDependent; import org.commonjava.indy.model.core.Group; diff --git a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeWhenGroupWithGroupMemberChangesTest.java b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeWhenGroupWithGroupMemberChangesTest.java index 6d8aa9659a..ab13b55d43 100644 --- a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeWhenGroupWithGroupMemberChangesTest.java +++ b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeWhenGroupWithGroupMemberChangesTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.ftest.core.content; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.client.core.IndyClientException; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.model.core.Group; diff --git a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeWhenNewHostedAddedInMultiHostedGroupTest.java b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeWhenNewHostedAddedInMultiHostedGroupTest.java index e0b56c3f77..d5229928c6 100644 --- a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeWhenNewHostedAddedInMultiHostedGroupTest.java +++ b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeWhenNewHostedAddedInMultiHostedGroupTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.ftest.core.content; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.client.core.IndyClientException; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.model.core.Group; diff --git a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeWhenSeqNewHostedAddedInMultiHostedGroupTest.java b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeWhenSeqNewHostedAddedInMultiHostedGroupTest.java index d8d5aa06aa..1ef6f5343e 100644 --- a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeWhenSeqNewHostedAddedInMultiHostedGroupTest.java +++ b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeWhenSeqNewHostedAddedInMultiHostedGroupTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.ftest.core.content; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.client.core.IndyClientException; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.model.core.Group; diff --git a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeWithRepoErrorTest.java b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeWithRepoErrorTest.java index caa47876ee..cbe8eacf1c 100644 --- a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeWithRepoErrorTest.java +++ b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeWithRepoErrorTest.java @@ -23,7 +23,7 @@ import java.io.InputStream; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.RemoteRepository; diff --git a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeWithRepoTimeoutTest.java b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeWithRepoTimeoutTest.java index f42dbaf778..a01753a5ee 100644 --- a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeWithRepoTimeoutTest.java +++ b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataMergeWithRepoTimeoutTest.java @@ -24,7 +24,7 @@ import java.io.InputStream; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.RemoteRepository; diff --git a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataRemergeWhenConstituentDisabledTest.java b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataRemergeWhenConstituentDisabledTest.java index 5eff63e20c..35e04eb523 100644 --- a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataRemergeWhenConstituentDisabledTest.java +++ b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/GroupMetadataRemergeWhenConstituentDisabledTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.ftest.core.content; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.client.core.IndyClientException; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.model.core.Group; diff --git a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/MetadataMergeRepoNoMetaListingTimeoutTest.java b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/MetadataMergeRepoNoMetaListingTimeoutTest.java index f6c71be4ff..02f6a51748 100644 --- a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/MetadataMergeRepoNoMetaListingTimeoutTest.java +++ b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/MetadataMergeRepoNoMetaListingTimeoutTest.java @@ -22,7 +22,7 @@ import java.io.IOException; import java.io.InputStream; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.ftest.core.category.EventDependent; import org.commonjava.indy.model.core.Group; diff --git a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryFilterGACacheTest.java b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryFilterGACacheTest.java index 8b581c6a32..46d021529a 100644 --- a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryFilterGACacheTest.java +++ b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryFilterGACacheTest.java @@ -18,7 +18,7 @@ import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.AppenderBase; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.client.core.IndyClientException; import org.commonjava.indy.core.content.group.GroupRepositoryFilterManager; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; diff --git a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryFilterTest.java b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryFilterTest.java index 07f693b1c2..74e261a83e 100644 --- a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryFilterTest.java +++ b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryFilterTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.ftest.core.content; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.HostedRepository; diff --git a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryPathMaskExistsTest.java b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryPathMaskExistsTest.java index cef4952ac6..baed1e4540 100644 --- a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryPathMaskExistsTest.java +++ b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryPathMaskExistsTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.ftest.core.content; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.RemoteRepository; diff --git a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryPathMaskExtTest.java b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryPathMaskExtTest.java index 5611dd2cb8..83572f99c1 100644 --- a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryPathMaskExtTest.java +++ b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryPathMaskExtTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.ftest.core.content; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.HostedRepository; diff --git a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryPathMaskMetadataExcludeTest.java b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryPathMaskMetadataExcludeTest.java index 03fb5a9d01..3acc4bba8f 100644 --- a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryPathMaskMetadataExcludeTest.java +++ b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryPathMaskMetadataExcludeTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.ftest.core.content; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.HostedRepository; diff --git a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryPathMaskMetadataTest.java b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryPathMaskMetadataTest.java index 203e89abce..88858442bd 100644 --- a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryPathMaskMetadataTest.java +++ b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryPathMaskMetadataTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.ftest.core.content; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.HostedRepository; diff --git a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryPathMaskTest.java b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryPathMaskTest.java index 97885d08cd..cbd57085e0 100644 --- a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryPathMaskTest.java +++ b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RepositoryPathMaskTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.ftest.core.content; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.RemoteRepository; diff --git a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/StoreFileAndVerifyExistenceInGroupTest.java b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/StoreFileAndVerifyExistenceInGroupTest.java index 63a7c19f58..3fb68a6d77 100644 --- a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/StoreFileAndVerifyExistenceInGroupTest.java +++ b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/StoreFileAndVerifyExistenceInGroupTest.java @@ -23,7 +23,7 @@ import java.io.ByteArrayInputStream; import java.io.InputStream; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.StoreKey; diff --git a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/StoreReverseMapInitTest.java b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/StoreReverseMapInitTest.java index cc85e44195..72748c972b 100644 --- a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/StoreReverseMapInitTest.java +++ b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/StoreReverseMapInitTest.java @@ -16,7 +16,7 @@ package org.commonjava.indy.ftest.core.content; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.ftest.core.fixture.StoreTestDataBootupAction; import org.commonjava.indy.model.core.Group; diff --git a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/StoreReverseMapMigrationTest.java b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/StoreReverseMapMigrationTest.java index e86dc250e4..f9748ea5ad 100644 --- a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/StoreReverseMapMigrationTest.java +++ b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/StoreReverseMapMigrationTest.java @@ -17,7 +17,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.client.core.IndyClientException; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.model.core.Group; diff --git a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/StoreTwoFilesAndVerifyPresenceInGroupTest.java b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/StoreTwoFilesAndVerifyPresenceInGroupTest.java index 1ed889f28d..9013784066 100644 --- a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/StoreTwoFilesAndVerifyPresenceInGroupTest.java +++ b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/StoreTwoFilesAndVerifyPresenceInGroupTest.java @@ -22,7 +22,7 @@ import java.io.ByteArrayInputStream; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.ftest.core.AbstractContentManagementTest; import org.commonjava.indy.model.core.Group; import org.commonjava.indy.model.core.StoreKey; diff --git a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/store/AbstractStoreManagementTest.java b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/store/AbstractStoreManagementTest.java index cacb454e74..b3a7389843 100644 --- a/ftests/core/src/main/java/org/commonjava/indy/ftest/core/store/AbstractStoreManagementTest.java +++ b/ftests/core/src/main/java/org/commonjava/indy/ftest/core/store/AbstractStoreManagementTest.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.ftest.core.store; -import static org.apache.commons.lang.StringUtils.join; +import static org.apache.commons.lang3.StringUtils.join; import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertThat; diff --git a/ftests/metrics/pom.xml b/ftests/metrics/pom.xml deleted file mode 100644 index 6a0272afc1..0000000000 --- a/ftests/metrics/pom.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - indy-ftests-parent - org.commonjava.indy - 2.5.0-SNAPSHOT - - 4.0.0 - - indy-ftests-metrics - - - - org.commonjava.indy - indy-client-core-java - - - org.commonjava.indy - indy-ftests-common - - - org.commonjava.indy - indy-test-fixtures-core - compile - - - org.commonjava.util - http-testserver - provided - - - org.commonjava.indy - indy-subsys-jaxrs - - - org.commonjava.indy - indy-bindings-jaxrs - - - org.jboss.weld.se - weld-se-core - compile - - - org.jboss.resteasy - resteasy-jaxrs - - - org.commonjava.indy - indy-subsys-metrics-core - - - \ No newline at end of file diff --git a/ftests/metrics/src/main/java/org/commonjava/indy/ftest/metrics/IndyMetricsTest.java b/ftests/metrics/src/main/java/org/commonjava/indy/ftest/metrics/IndyMetricsTest.java deleted file mode 100644 index d6cccfad99..0000000000 --- a/ftests/metrics/src/main/java/org/commonjava/indy/ftest/metrics/IndyMetricsTest.java +++ /dev/null @@ -1,93 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.ftest.metrics; - -import org.commonjava.indy.client.core.IndyClientModule; -import org.commonjava.indy.ftest.core.AbstractIndyFunctionalTest; -import org.commonjava.indy.ftest.metrics.client.IndyMetricsFtestClientModule; -import org.commonjava.indy.test.fixture.core.CoreServerFixture; -import org.junit.Ignore; -import org.junit.Test; - -import java.io.IOException; -import java.util.Arrays; -import java.util.Collection; - -import static org.junit.Assert.assertEquals; - -/** - * Created by xiabai on 3/22/17. - */ -public class IndyMetricsTest - extends AbstractIndyFunctionalTest -{ - @Test - @Ignore - public void MetricsTest() throws Exception - { - for ( int i = 0; i < 10; i++ ) - { - client.module( IndyMetricsFtestClientModule.class ).getTimerWithOutException(); - } - - for ( int i = 0; i < 10; i++ ) - { - try - { - client.module( IndyMetricsFtestClientModule.class ).getTimerWithException(); - } - catch ( Throwable throwable ) - { - //do nothing - } - } - - for ( int i = 0; i < 10; i++ ) - { - client.module( IndyMetricsFtestClientModule.class ).getMeterWithOutException(); - } - - for ( int i = 0; i < 10; i++ ) - { - try - { - client.module( IndyMetricsFtestClientModule.class ).getMeterWithException(); - } - catch ( Throwable throwable ) - { - //do nothing - } - } - Thread.sleep( 5000 ); - - assertEquals( "20", client.module( IndyMetricsFtestClientModule.class ).getMeterCount() ); - assertEquals( "20", client.module( IndyMetricsFtestClientModule.class ).getTimerCount() ); - assertEquals( "10", client.module( IndyMetricsFtestClientModule.class ).getMeterCountWithException()); - assertEquals( "10", client.module( IndyMetricsFtestClientModule.class ).getTimerCountWithException() ); - } - - @Override - protected Collection getAdditionalClientModules() - { - return Arrays.asList( new IndyMetricsFtestClientModule() ); - } - - @Override - protected void initTestConfig( CoreServerFixture fixture ) throws IOException - { - writeConfigFile( "conf.d/metrics.conf", "\n"+readTestResource( "default-test-metrics.conf" ) ); - } -} diff --git a/ftests/metrics/src/main/java/org/commonjava/indy/ftest/metrics/ZabbixCacheStorageTest.java b/ftests/metrics/src/main/java/org/commonjava/indy/ftest/metrics/ZabbixCacheStorageTest.java deleted file mode 100644 index 32ac8ba9ea..0000000000 --- a/ftests/metrics/src/main/java/org/commonjava/indy/ftest/metrics/ZabbixCacheStorageTest.java +++ /dev/null @@ -1,84 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.ftest.metrics; - -import org.commonjava.indy.client.core.IndyClientModule; -import org.commonjava.indy.ftest.core.AbstractIndyFunctionalTest; -import org.commonjava.indy.ftest.metrics.client.ZabbixCacheStorageTestClientModule; -import org.commonjava.indy.test.fixture.core.CoreServerFixture; -import org.junit.Test; - -import java.io.IOException; -import java.util.Arrays; -import java.util.Collection; - -/** - * Created by xiabai on 5/8/17. - */ -public class ZabbixCacheStorageTest - extends AbstractIndyFunctionalTest -{ -// @Test - public void putCache() - { - try - { - client.module( ZabbixCacheStorageTestClientModule.class ).putCache(); - org.junit.Assert.assertFalse( false ); - } - catch ( Exception e ) - { - org.junit.Assert.assertFalse( true ); - } - } - - @Test - public void getCache() - { - try - { - - client.module( ZabbixCacheStorageTestClientModule.class ).putCache(); - - org.junit.Assert.assertEquals( "456", client.module( ZabbixCacheStorageTestClientModule.class ) - .getHostGroupCache() ); - org.junit.Assert.assertEquals( "123", client.module( ZabbixCacheStorageTestClientModule.class ) - .getHostCache() ); - org.junit.Assert.assertEquals( "789", client.module( ZabbixCacheStorageTestClientModule.class ) - .getItemCache() ); - - } - catch ( Exception e ) - - { - org.junit.Assert.assertFalse( true ); - } - - } - - @Override - protected Collection getAdditionalClientModules() - { - return Arrays.asList( new ZabbixCacheStorageTestClientModule() ); - } - - @Override - protected void initTestConfig( CoreServerFixture fixture ) throws IOException - { - writeConfigFile( "conf.d/metrics.conf", "\n" + readTestResource( "default-test-metrics.conf" ) ); - writeConfigFile( "default-metrics.conf", "\n" + readTestResource( "default-test-metrics.conf" ) ); - } -} diff --git a/ftests/metrics/src/main/java/org/commonjava/indy/ftest/metrics/client/IndyMetricsFtestClientModule.java b/ftests/metrics/src/main/java/org/commonjava/indy/ftest/metrics/client/IndyMetricsFtestClientModule.java deleted file mode 100644 index a555be8e7b..0000000000 --- a/ftests/metrics/src/main/java/org/commonjava/indy/ftest/metrics/client/IndyMetricsFtestClientModule.java +++ /dev/null @@ -1,75 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.ftest.metrics.client; - -import org.commonjava.indy.client.core.IndyClientException; -import org.commonjava.indy.client.core.IndyClientModule; -import org.commonjava.indy.client.core.util.UrlUtils; - -/** - * Created by xiabai on 3/22/17. - */ -public class IndyMetricsFtestClientModule - extends IndyClientModule -{ - private static String TIMTER_PATH = "/ftest/metrics/timer"; - private static String METER_PATH = "/ftest/metrics/meter"; - private static String TIMER_COUNT_PATH = "/ftest/metrics/metricRegistry/timer"; - private static String TIMER_COUNT_EXCEPTION_PATH = "/ftest/metrics/metricRegistry/timer/exception"; - private static String MERTER_COUNT_PATH = "/ftest/metrics/metricRegistry/meter"; - private static String MERTER_COUNTEXCEPTION__PATH = "/ftest/metrics/metricRegistry/meter/exception"; - - public String getTimerWithOutException() throws IndyClientException - { - return http.get( UrlUtils.buildUrl( "", TIMTER_PATH+"/false" ), String.class ); - } - - public String getTimerWithException() throws IndyClientException - { - return http.get( UrlUtils.buildUrl( "", TIMTER_PATH+"/true" ), String.class ); - } - - public String getMeterWithOutException() throws IndyClientException - { - return http.get( UrlUtils.buildUrl( "", METER_PATH+"/false" ), String.class ); - } - - public String getMeterWithException() throws IndyClientException - { - return http.get( UrlUtils.buildUrl( "", METER_PATH+"/true" ), String.class ); - } - - public String getTimerCount()throws IndyClientException - { - return http.get( UrlUtils.buildUrl( "", TIMER_COUNT_PATH), String.class ); - } - - public String getTimerCountWithException() throws IndyClientException - { - return http.get( UrlUtils.buildUrl( "", TIMER_COUNT_EXCEPTION_PATH ), String.class ); - } - - public String getMeterCount() throws IndyClientException - { - return http.get( UrlUtils.buildUrl( "", MERTER_COUNT_PATH ), String.class ); - } - - public String getMeterCountWithException() throws IndyClientException - { - return http.get( UrlUtils.buildUrl( "", MERTER_COUNTEXCEPTION__PATH ), String.class ); - } - -} diff --git a/ftests/metrics/src/main/java/org/commonjava/indy/ftest/metrics/client/ZabbixCacheStorageTestClientModule.java b/ftests/metrics/src/main/java/org/commonjava/indy/ftest/metrics/client/ZabbixCacheStorageTestClientModule.java deleted file mode 100644 index c26348de6c..0000000000 --- a/ftests/metrics/src/main/java/org/commonjava/indy/ftest/metrics/client/ZabbixCacheStorageTestClientModule.java +++ /dev/null @@ -1,52 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.ftest.metrics.client; - -import org.commonjava.indy.client.core.IndyClientException; -import org.commonjava.indy.client.core.IndyClientModule; -import org.commonjava.indy.client.core.util.UrlUtils; - -/** - * Created by xiabai on 5/8/17. - */ -public class ZabbixCacheStorageTestClientModule extends IndyClientModule -{ - private static String PUT_PATH = "/ftest/metrics/storage/put"; - private static String GET_HOSTGROUP_PATH = "/ftest/metrics/storage/putHostGroup"; - private static String GET_HOST_PATH = "/ftest/metrics/storage/putHost"; - private static String GET_ITEM_PATH = "/ftest/metrics/storage/putItem"; - - public String putCache() throws IndyClientException - { - return http.get( UrlUtils.buildUrl( "", PUT_PATH ), String.class ); - } - - public String getHostGroupCache() throws IndyClientException - { - return http.get( UrlUtils.buildUrl( "", GET_HOSTGROUP_PATH ), String.class ); - } - - public String getHostCache() throws IndyClientException - { - return http.get( UrlUtils.buildUrl( "", GET_HOST_PATH ), String.class ); - } - - public String getItemCache() throws IndyClientException - { - return http.get( UrlUtils.buildUrl( "", GET_ITEM_PATH ), String.class ); - } - -} diff --git a/ftests/metrics/src/main/java/org/commonjava/indy/ftest/metrics/jaxrs/MetricsTestResource.java b/ftests/metrics/src/main/java/org/commonjava/indy/ftest/metrics/jaxrs/MetricsTestResource.java deleted file mode 100644 index 550ee3fa11..0000000000 --- a/ftests/metrics/src/main/java/org/commonjava/indy/ftest/metrics/jaxrs/MetricsTestResource.java +++ /dev/null @@ -1,123 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.ftest.metrics.jaxrs; - -import com.codahale.metrics.Meter; -import com.codahale.metrics.MetricRegistry; -import com.codahale.metrics.Timer; -import org.commonjava.indy.bind.jaxrs.IndyResources; -import org.commonjava.indy.bind.jaxrs.util.REST; -import org.commonjava.indy.measure.annotation.Measure; -import org.commonjava.indy.measure.annotation.MetricNamed; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.inject.Inject; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import java.util.Random; - -/** - * Created by xiabai on 3/22/17. - */ -@Path( "/api/ftest/metrics/" ) -@Produces( "application/json" ) -@Consumes( "application/json" ) -public class MetricsTestResource - implements IndyResources -{ - private final Logger logger = LoggerFactory.getLogger( getClass() ); - - @Inject - MetricRegistry metricRegistry; - - @GET - @Path( "/metricRegistry/timer" ) - public Response getTimerCount() - { - Timer timer = metricRegistry.timer( "testTimerRequest.timer" ); - return Response.ok( timer.getCount(), MediaType.APPLICATION_JSON ).build(); - } - - @GET - @Path( "/metricRegistry/timer/exception" ) - public Response getTimerCountWithException() - { - Meter meter = null; - try - { - meter = metricRegistry.meter("testTimerRequestWithException.exception" ); - } - catch ( Throwable t ) - { - t.printStackTrace(); - } - return Response.ok( meter.getCount(), MediaType.APPLICATION_JSON ).build(); - } - - @GET - @Path( "/metricRegistry/meter" ) - public Response getMeterCount() - { - Meter meter = metricRegistry.meter( "testMeterRequest.meter" ); - return Response.ok( meter.getCount(), MediaType.APPLICATION_JSON ).build(); - } - - @GET - @Path( "/metricRegistry/meter/exception" ) - public Response getMeterCountWithException() - { - Meter meter = - metricRegistry.meter( "testMeterRequestException.exception" ); - return Response.ok( meter.getCount(), MediaType.APPLICATION_JSON ).build(); - } - - @GET - @Path( "/timer/{isException :[a-zA-Z]+}" ) - @Measure - public Response getTimer( @PathParam( "isException" ) String isException ) - throws Exception - { - if ( isException.equals( "true" ) ) - { - throw new Exception( "EXPECTED: MetricsTest has a exception" ); - } - logger.info( "call in method : MetricsTest" ); - Random random = new Random(); - Thread.sleep( random.nextInt( 100 ) ); - return Response.ok( " \"Timer: well done\"", MediaType.APPLICATION_JSON ).build(); - } - - @GET - @Path( "/meter/{isException :[a-zA-Z]+}" ) - @Measure - public Response getMeter( @PathParam( "isException" ) String isException ) - throws Exception - { - logger.info( "call in method : getMeter" ); - if ( isException.equals( "true" ) ) - { - throw new Exception( "EXPECTED: getMeter has a exception" ); - } - Thread.sleep( 100 ); - return Response.ok( " " + "\"Meter :well done\"", MediaType.APPLICATION_JSON ).build(); - } -} diff --git a/ftests/metrics/src/main/java/org/commonjava/indy/ftest/metrics/jaxrs/ZabbixCacheStorageResource.java b/ftests/metrics/src/main/java/org/commonjava/indy/ftest/metrics/jaxrs/ZabbixCacheStorageResource.java deleted file mode 100644 index 4a887b1073..0000000000 --- a/ftests/metrics/src/main/java/org/commonjava/indy/ftest/metrics/jaxrs/ZabbixCacheStorageResource.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.ftest.metrics.jaxrs; - -import org.commonjava.indy.bind.jaxrs.IndyResources; -import org.commonjava.indy.metrics.zabbix.cache.ZabbixCacheStorage; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.inject.Inject; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import java.io.IOException; - -/** - * Created by xiabai on 5/8/17. - */ -@Path( "/api/ftest/metrics/" ) -@Produces( "application/json" ) -@Consumes( "application/json" ) -public class ZabbixCacheStorageResource - implements IndyResources -{ - private final Logger logger = LoggerFactory.getLogger( getClass() ); - - @Inject - ZabbixCacheStorage zabbixCacheStorage; - - @GET - @Path( "/storage/put" ) - public Response putCache() throws IOException - { - zabbixCacheStorage.putHost( "test-host","123" ); - zabbixCacheStorage.putHostGroup( "test-host-group","456" ); - zabbixCacheStorage.putItem( "test-item","789" ); - return Response.ok("\"well done\"").build(); - } - - @GET - @Path( "/storage/putHostGroup" ) - public Response getHostGroupCache() throws IOException - { - String result = zabbixCacheStorage.getHostGroup( "test-host-group" ); - return Response.ok( result, MediaType.APPLICATION_JSON ).build(); - } - - @GET - @Path( "/storage/putHost" ) - public Response getHostCache() throws IOException - { - String result = zabbixCacheStorage.getHost( "test-host" ); - return Response.ok( result, MediaType.APPLICATION_JSON ).build(); - } - - @GET - @Path( "/storage/putItem" ) - public Response getItemCache() throws IOException - { - String result = zabbixCacheStorage.getItem( "test-item" ); - return Response.ok( result, MediaType.APPLICATION_JSON ).build(); - } - -} diff --git a/ftests/metrics/src/main/resources/META-INF/beans.xml b/ftests/metrics/src/main/resources/META-INF/beans.xml deleted file mode 100644 index cf034ceac5..0000000000 --- a/ftests/metrics/src/main/resources/META-INF/beans.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - org.commonjava.indy.metrics.jaxrs.interceptor.MetricsInterceptor - - \ No newline at end of file diff --git a/ftests/metrics/src/main/resources/default-test-metrics.conf b/ftests/metrics/src/main/resources/default-test-metrics.conf deleted file mode 100644 index f0b01aa0dc..0000000000 --- a/ftests/metrics/src/main/resources/default-test-metrics.conf +++ /dev/null @@ -1,77 +0,0 @@ -[metrics] -enabled = true -reporter.enabled = false - -###################################### -# List of enabled reporters (comma-separated) -# At present, Indy metrics feature just support three reporters -# GraPhiteDB,Zabbix,Console,Elasticsearch -###################################### - -reporter = graphite;zabbix;elasticsearch - -############################################ -# GraphiteDB reporter options -############################################ - -# This is the hostname of GraphiteDB. -graphite.hostname = localhost -# Port of GraphiteDB. -graphite.port = 2003 -# Specific prefix for GraphiteDB Item -graphite.reporter.prefix = local.one -# Indy's metrics item have three type: simple,jvm,healthcheck -# Period of simple item for reporting -graphite.reporter.simple.period = 30 -# Period of jvm item for reporting -graphite.reporter.jvm.period = 300 -# Period of healthcheck item for reporting -graphite.reporter.healthcheck.period = 600 - -############################################ -# Zabbix reporter options -############################################ - -#The Zabbix API is a web based API and is shipped as part of the web frontend -# API URL used to access Zabbix from a web browser -zabbix.api.url = example.com -#Zabbix username for login Zabbix server(Zabbix API) -zabbix.user = test -#Zabbix password for login Zabbix server(Zabbix API) -zabbix.pwd = test -# Zabbix sender is a command line utility that may be used to send performance data to Zabbix server for processing. -# Host of Zabbix server for Zabbix sender -zabbix.sender.host = 192.168.1.1 -# Port of Zabbix server for Zabbix sender -zabbix.sender.port = 10051 -# This is the hostname of the current Indy instance, it also is host name of Zabbix monitoring -zabbix.indy.host = example.com -# Specific prefix for Zabbix Item -zabbix.reporter.prefix = local.one -# Indy's metrics item have three type: simple,jvm,healthcheck -# Those type have different period of reporter -# Period of simple item for reporting -zabbix.reporter.simple.period = 30 -# Period of jvm item for reporting -zabbix.reporter.jvm.period = 300 -# Period of healthcheck item for reporting -zabbix.reporter.healthcheck.period = 600 - -############################################ -# Elasticsearch reporter options -############################################ - -# Specific prefix for Elasticsearch -elk.reporter.prefix = local.one -# Indy's metrics item have three type: simple,jvm,healthcheck. -# Those type have different period of reporter -# Period of simple item for reporting -elk.reporter.simple.period = 30 -# Period of jvm item for reporting -elk.reporter.jvm.period = 300 -# Period of healthcheck item for reporting -elk.reporter.healthcheck.period = 600 -#The index name to index in Elasticsearch -elk.reporter.index = local.one.name -#Configure an array of hosts to send data to. -elk.reporter.hosts = localhost:9200 \ No newline at end of file diff --git a/ftests/pom.xml b/ftests/pom.xml index be0bd23b72..b3cc40f93f 100644 --- a/ftests/pom.xml +++ b/ftests/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-parent - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-ftests-parent @@ -32,7 +32,6 @@ common core - metrics diff --git a/models/core-java/pom.xml b/models/core-java/pom.xml index 0c2d1cf54b..cad85d2a32 100644 --- a/models/core-java/pom.xml +++ b/models/core-java/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-models-parent - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-model-core-java @@ -52,6 +52,10 @@ org.commonjava.atlas atlas-relationships-api + + org.apache.commons + commons-lang3 + commons-io commons-io diff --git a/models/core-java/src/main/java/org/commonjava/indy/model/core/StoreKey.java b/models/core-java/src/main/java/org/commonjava/indy/model/core/StoreKey.java index f3e3b8e4ee..d98a5c47cf 100644 --- a/models/core-java/src/main/java/org/commonjava/indy/model/core/StoreKey.java +++ b/models/core-java/src/main/java/org/commonjava/indy/model/core/StoreKey.java @@ -22,11 +22,10 @@ import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; -import java.io.Serializable; import java.util.Arrays; import java.util.concurrent.ConcurrentHashMap; -import static org.apache.commons.lang.StringUtils.isBlank; +import static org.apache.commons.lang3.StringUtils.isBlank; import static org.commonjava.indy.pkg.maven.model.MavenPackageTypeDescriptor.MAVEN_PKG_KEY; public final class StoreKey diff --git a/models/core-java/src/main/java/org/commonjava/indy/model/util/HttpUtils.java b/models/core-java/src/main/java/org/commonjava/indy/model/util/HttpUtils.java index b013b57b30..71d0ded61a 100644 --- a/models/core-java/src/main/java/org/commonjava/indy/model/util/HttpUtils.java +++ b/models/core-java/src/main/java/org/commonjava/indy/model/util/HttpUtils.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.model.util; -import static org.apache.commons.lang.StringUtils.isEmpty; +import static org.apache.commons.lang3.StringUtils.isEmpty; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -25,7 +25,7 @@ import java.util.Map; import java.util.TimeZone; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/models/core-java/src/main/java/org/commonjava/indy/stats/IndyDeprecatedApis.java b/models/core-java/src/main/java/org/commonjava/indy/stats/IndyDeprecatedApis.java index 649ec24925..3a31e66a9b 100644 --- a/models/core-java/src/main/java/org/commonjava/indy/stats/IndyDeprecatedApis.java +++ b/models/core-java/src/main/java/org/commonjava/indy/stats/IndyDeprecatedApis.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.stats; -import org.apache.commons.lang.math.FloatRange; +import org.apache.commons.lang3.Range; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,7 +29,7 @@ import static java.util.Optional.empty; import static java.util.Optional.of; -import static org.apache.commons.lang.StringUtils.isBlank; +import static org.apache.commons.lang3.StringUtils.isBlank; @Alternative @Named @@ -47,7 +47,7 @@ public IndyDeprecatedApis( Properties props ) { this.props = props; - Float minVersion = 0f; + float minVersion = 0f; Set keys = props.stringPropertyNames(); for ( String key : keys ) @@ -55,16 +55,16 @@ public IndyDeprecatedApis( Properties props ) DeprecatedApiEntry et; String value = props.getProperty( key ); - Float startVersion; - Float endVersion; + float startVersion; + float endVersion; - if ( key.indexOf( "," ) >= 0 ) // range + if ( key.contains( "," ) ) // range { key = key.replaceAll( "[\\[|\\]]", "" ); // strip off square brackets if present String[] kv = key.split( "," ); startVersion = Float.parseFloat( kv[0].trim() ); endVersion = Float.parseFloat( kv[1].trim() ); - et = new DeprecatedApiEntry( new FloatRange( startVersion, endVersion ), value); + et = new DeprecatedApiEntry( Range.between( startVersion, endVersion ), value); } else { @@ -80,7 +80,7 @@ public IndyDeprecatedApis( Properties props ) deprecatedApis.add( et ); } - minApiVersion = minVersion.toString(); + minApiVersion = Float.toString(minVersion); logger.debug( "Parsed deprecatedApis:{}, minApiVersion:{}", deprecatedApis, minApiVersion ); } @@ -105,7 +105,7 @@ public Optional getDeprecated( String reqApiVersion ) // the scopes may overlap, we go through range entries first and other entries next for ( DeprecatedApiEntry et : deprecatedApis ) { - if ( et.range != null && et.range.containsFloat( reqVer ) ) + if ( et.range != null && et.range.contains( reqVer ) ) { return of( et ); } @@ -129,7 +129,7 @@ public String getMinApiVersion() public static class DeprecatedApiEntry { - private FloatRange range; + private Range range; private Float endVersion; @@ -146,7 +146,7 @@ public boolean isOff() this.value = value; } - public DeprecatedApiEntry( FloatRange floatRange, String value ) + public DeprecatedApiEntry( Range floatRange, String value ) { this.range = floatRange; this.value = value; diff --git a/models/pom.xml b/models/pom.xml index 3363172699..edfa09c8b4 100644 --- a/models/pom.xml +++ b/models/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-parent - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-models-parent diff --git a/pom.xml b/pom.xml index 993c1a76fe..93d7c27bab 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ org.commonjava.indy indy-parent - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT pom @@ -37,7 +37,7 @@ scm:git:https://github.com/CommonJava/indy scm:git:https://github.com/CommonJava/indy http://github.com/Commonjava/indy - HEAD + indy-parent-2.5.4 @@ -75,25 +75,25 @@ 0.1.5 2.4.6.Final 2.10.1 - 4.0.2 4.0.4.Final 4.4.9 4.5.9 1.1.0 3.7.1.0 3.7.2 - 1.7 + 1.8 + 1.3 - 1.1.1-SNAPSHOT - 1.4 + 1.1.1 + 1.5 25 3.2.1 1.16 - 2.12 + 2.13 2.3 1.11 - 1.17 + 1.18 1.4 1.4 0.13.1 @@ -140,7 +140,7 @@ - uis + models api addons @@ -152,14 +152,14 @@ filers test tools - embedder + ftests - rest + clients - deployments + @@ -187,7 +187,7 @@ org.commonjava.indy.ui indy-ui-layover - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT runtime @@ -195,22 +195,22 @@ org.commonjava.indy indy-model-core-java - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-api - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-core - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-core - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT tar.gz confset provided @@ -218,32 +218,32 @@ org.commonjava.indy indy-db-flat - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-db-metrics - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-db-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-db-infinispan - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-bindings-jaxrs - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy.launch indy-launcher - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT tar.gz skinny provided @@ -251,7 +251,7 @@ org.commonjava.indy.launch indy-launcher - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT tar.gz complete provided @@ -259,7 +259,7 @@ org.commonjava.indy.launch indy-launcher - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT tar.gz data provided @@ -267,7 +267,7 @@ org.commonjava.indy.launch indy-launcher - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT tar.gz etc provided @@ -276,17 +276,17 @@ org.commonjava.indy indy-revisions-jaxrs - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-revisions-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-revisions-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT tar.gz confset provided @@ -294,7 +294,7 @@ org.commonjava.indy indy-revisions-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT tar.gz uiset provided @@ -302,12 +302,12 @@ org.commonjava.indy indy-dot-maven-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-dot-maven-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT tar.gz dataset provided @@ -315,22 +315,22 @@ org.commonjava.indy indy-dot-maven-jaxrs - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-ftests-dot-maven - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-httprox-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-httprox-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT tar.gz confset provided @@ -338,17 +338,17 @@ org.commonjava.indy indy-ftests-httprox - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-content-index - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-content-index - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT tar.gz confset provided @@ -356,51 +356,51 @@ org.commonjava.indy indy-db-memory - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-test-db - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT test org.commonjava.indy indy-test-fixtures-core - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT test org.commonjava.indy indy-test-providers-core - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT test org.commonjava.indy indy-test-utils - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT test org.commonjava.indy indy-filer-default - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-subsys-jaxrs - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-subsys-honeycomb - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-subsys-honeycomb - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT tar.gz confset provided @@ -408,17 +408,17 @@ org.commonjava.indy indy-subsys-flatfile - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-subsys-cassandra - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-subsys-cassandra - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT tar.gz confset provided @@ -426,79 +426,79 @@ org.commonjava.indy indy-subsys-infinispan - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-subsys-http - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-subsys-git - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-subsys-groovy - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-subsys-prefetch - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-subsys-cpool - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-client-core-java - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-ftests-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-ftests-core - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT test org.commonjava.indy indy-folo-jaxrs - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-ftests-folo - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT test org.commonjava.indy indy-folo-client-java - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-folo-model-java - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-folo-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-folo-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT tar.gz dataset provided @@ -506,7 +506,7 @@ org.commonjava.indy indy-folo-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT tar.gz confset provided @@ -514,33 +514,33 @@ org.commonjava.indy indy-promote-jaxrs - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-ftests-promote - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT test org.commonjava.indy indy-promote-client-java - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-promote-model-java - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-promote-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-promote-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT tar.gz confset provided @@ -548,7 +548,7 @@ org.commonjava.indy indy-promote-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT tar.gz dataset provided @@ -556,19 +556,19 @@ org.commonjava.indy indy-promote-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT dataset provided org.commonjava.indy indy-implied-repos-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-implied-repos-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT tar.gz confset provided @@ -576,37 +576,37 @@ org.commonjava.indy indy-implied-repos-model-java - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-implied-repos-client-java - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-ftests-implied-repos - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy.embed indy-embedder - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT org.commonjava.indy.boot indy-booter-jaxrs - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-subsys-keycloak - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-subsys-keycloak - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT tar.gz confset provided @@ -614,7 +614,7 @@ org.commonjava.indy indy-subsys-infinispan - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT tar.gz confset provided @@ -622,7 +622,7 @@ org.commonjava.indy indy-subsys-prefetch - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT tar.gz confset provided @@ -631,7 +631,7 @@ org.commonjava.indy indy-koji-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT tar.gz confset provided @@ -639,103 +639,103 @@ org.commonjava.indy indy-koji-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-koji-model-java - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-koji-client-java - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-koji-jaxrs - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-path-mapped-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-path-mapped-model-java - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-path-mapped-jaxrs - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-pkg-maven-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-pkg-maven-jaxrs - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-pkg-npm-jaxrs - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-ftests-pkg-maven - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT test org.commonjava.indy indy-ftests-pkg-npm - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT test org.commonjava.indy indy-pkg-npm-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-pkg-npm-model-java - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-diagnostics-jaxrs - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-diagnostics-client-java - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-diagnostics-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-ftests-diagnostics - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT test org.commonjava.indy indy-diagnostics-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT confset tar.gz provided @@ -743,81 +743,64 @@ org.commonjava.indy indy-hosted-by-archive-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-hosted-by-archive-client-java - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-ftests-hosted-by-archive - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT test org.commonjava.indy indy-hosted-by-archive-jaxrs - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-hosted-by-archive-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT confset tar.gz org.commonjava.indy - indy-subsys-metrics-core - 2.5.0-SNAPSHOT + indy-subsys-metrics + 2.5.4.2-SNAPSHOT org.commonjava.indy - indy-subsys-metrics-reporter - 2.5.0-SNAPSHOT - - - org.commonjava.indy - indy-subsys-metrics-prometheus - 2.5.0-SNAPSHOT - - - org.commonjava.indy - indy-subsys-metrics-reporter - 2.5.0-SNAPSHOT + indy-subsys-metrics + 2.5.4.2-SNAPSHOT confset tar.gz provided - - org.commonjava.indy - indy-ftests-metrics - 2.5.0-SNAPSHOT - test - - org.commonjava.indy indy-sli - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy.rest indy-rest-api yaml - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT provided org.commonjava.indy.rest indy-rest-api json - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT provided @@ -856,33 +839,33 @@ org.commonjava.indy indy-content-browse-common - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT org.commonjava.indy indy-content-browse-jaxrs - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT org.commonjava.indy indy-ftests-content-browse - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT test org.commonjava.indy indy-content-browse-model-java - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT org.commonjava.indy indy-content-browse-client-java - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT org.commonjava.indy indy-content-browse-common - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT confset tar.gz provided @@ -890,35 +873,35 @@ org.commonjava.indy indy-content-browse-ui - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT reactui tar.gz org.commonjava.indy indy-changelog-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-changelog-client-java - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-ftests-changelog - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT test org.commonjava.indy indy-changelog-jaxrs - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-changelog-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT confset tar.gz @@ -936,12 +919,12 @@ org.commonjava.indy indy-event-audit-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy indy-event-audit-common - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT confset tar.gz provided @@ -956,23 +939,23 @@ org.commonjava.indy indy-repo-proxy-common - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT org.commonjava.indy indy-repo-proxy-jaxrs - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT org.commonjava.indy indy-ftests-repo-proxy - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT test org.commonjava.indy indy-repo-proxy-common - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT confset tar.gz @@ -1076,38 +1059,6 @@ 1.0.0 - - - io.dropwizard.metrics - metrics-core - ${metricsVersion} - - - io.dropwizard.metrics - metrics-jvm - ${metricsVersion} - - - io.dropwizard.metrics - metrics-healthchecks - ${metricsVersion} - - - io.dropwizard.metrics - metrics-graphite - ${metricsVersion} - - - io.dropwizard.metrics - metrics-servlets - ${metricsVersion} - - - io.dropwizard.metrics - metrics-json - ${metricsVersion} - - com.internetitem @@ -1601,6 +1552,28 @@ ${logbackContribVersion} + + + org.commonjava.util + o11yphant-honeycomb-api + ${o11yphantVersion} + + + org.commonjava.util + o11yphant-honeycomb-core + ${o11yphantVersion} + + + org.commonjava.util + o11yphant-metrics-api + ${o11yphantVersion} + + + org.commonjava.util + o11yphant-metrics-core + ${o11yphantVersion} + + org.commonjava.propulsor @@ -1919,6 +1892,7 @@ **/.pydevproject **/Jenkinsfile **/MAVEN_ENV + **/*.cql diff --git a/rest/api/pom.xml b/rest/api/pom.xml index c1c3de3ce8..ae2e05ea18 100644 --- a/rest/api/pom.xml +++ b/rest/api/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy.rest indy-rest-parent - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT indy-rest-api diff --git a/rest/api/src/main/resources/META-INF/beans.xml b/rest/api/src/main/resources/META-INF/beans.xml index 579b8d9900..78fd046fcd 100644 --- a/rest/api/src/main/resources/META-INF/beans.xml +++ b/rest/api/src/main/resources/META-INF/beans.xml @@ -1,4 +1,21 @@ + + org.commonjava.indy indy-parent - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT org.commonjava.indy.rest diff --git a/subsys/cassandra/pom.xml b/subsys/cassandra/pom.xml index 73f1a32b37..33aa834183 100644 --- a/subsys/cassandra/pom.xml +++ b/subsys/cassandra/pom.xml @@ -22,7 +22,7 @@ org.commonjava.indy indy-subsystems - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-subsys-cassandra diff --git a/subsys/cassandra/src/main/java/org/commonjava/indy/subsys/cassandra/CassandraClient.java b/subsys/cassandra/src/main/java/org/commonjava/indy/subsys/cassandra/CassandraClient.java index da25e6684e..3bee2dbeef 100644 --- a/subsys/cassandra/src/main/java/org/commonjava/indy/subsys/cassandra/CassandraClient.java +++ b/subsys/cassandra/src/main/java/org/commonjava/indy/subsys/cassandra/CassandraClient.java @@ -29,7 +29,7 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import static org.apache.commons.lang.StringUtils.isNotBlank; +import static org.apache.commons.lang3.StringUtils.isNotBlank; @ApplicationScoped public class CassandraClient @@ -127,4 +127,9 @@ public void close() closed = true; } } + + public Map getSessions() + { + return sessions; + } } diff --git a/subsys/cpool/pom.xml b/subsys/cpool/pom.xml index 41337e705f..05af017cf3 100644 --- a/subsys/cpool/pom.xml +++ b/subsys/cpool/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-subsystems - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-subsys-cpool @@ -33,6 +33,10 @@ org.commonjava.indy indy-api + + org.commonjava.util + o11yphant-metrics-core + io.agroal agroal-api diff --git a/subsys/cpool/src/main/java/org/commonjava/indy/subsys/cpool/ConnectionPoolProvider.java b/subsys/cpool/src/main/java/org/commonjava/indy/subsys/cpool/ConnectionPoolProvider.java index ad6fdcdcd5..445344051b 100644 --- a/subsys/cpool/src/main/java/org/commonjava/indy/subsys/cpool/ConnectionPoolProvider.java +++ b/subsys/cpool/src/main/java/org/commonjava/indy/subsys/cpool/ConnectionPoolProvider.java @@ -15,16 +15,15 @@ */ package org.commonjava.indy.subsys.cpool; -import com.codahale.metrics.Gauge; -import com.codahale.metrics.MetricRegistry; -import com.codahale.metrics.health.HealthCheck; -import com.codahale.metrics.health.HealthCheckRegistry; import io.agroal.api.AgroalDataSource; import io.agroal.api.AgroalDataSourceListener; import io.agroal.api.AgroalDataSourceMetrics; import io.agroal.api.configuration.AgroalDataSourceConfiguration; import io.agroal.api.configuration.supplier.AgroalPropertiesReader; import org.commonjava.indy.action.IndyLifecycleException; +import org.commonjava.o11yphant.metrics.api.Gauge; +import org.commonjava.o11yphant.metrics.api.MetricRegistry; +import org.commonjava.o11yphant.metrics.healthcheck.impl.HealthCheckResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -39,6 +38,7 @@ import java.util.Properties; import static javax.naming.Context.INITIAL_CONTEXT_FACTORY; +import static org.commonjava.o11yphant.metrics.util.NameUtils.name; @ApplicationScoped public class ConnectionPoolProvider @@ -51,9 +51,6 @@ public class ConnectionPoolProvider @Inject private MetricRegistry metricRegistry; - @Inject - private HealthCheckRegistry healthCheckRegistry; - public void init() throws IndyLifecycleException { @@ -110,49 +107,46 @@ public void init() private void registerMetrics(AgroalDataSourceMetrics agroalMetrics, String name) { - metricRegistry.register(MetricRegistry.name(name, "acquireCount"), (Gauge) agroalMetrics::acquireCount); - metricRegistry.register(MetricRegistry.name(name, "creationCount"), (Gauge) agroalMetrics::creationCount); - metricRegistry.register(MetricRegistry.name(name, "leakDetectionCount"), (Gauge) agroalMetrics::leakDetectionCount); - metricRegistry.register(MetricRegistry.name(name, "destroyCount"), (Gauge) agroalMetrics::destroyCount); - metricRegistry.register(MetricRegistry.name(name, "flushCount"), (Gauge) agroalMetrics::flushCount); - metricRegistry.register(MetricRegistry.name(name, "invalidCount"), (Gauge) agroalMetrics::invalidCount); - metricRegistry.register(MetricRegistry.name(name, "reapCount"), (Gauge) agroalMetrics::reapCount); - - metricRegistry.register(MetricRegistry.name(name, "activeCount"), (Gauge) agroalMetrics::activeCount); - metricRegistry.register(MetricRegistry.name(name, "availableCount"), (Gauge) agroalMetrics::availableCount); - metricRegistry.register(MetricRegistry.name(name, "maxUsedCount"), (Gauge) agroalMetrics::maxUsedCount); - metricRegistry.register(MetricRegistry.name(name, "awaitingCount"), (Gauge) agroalMetrics::awaitingCount); - metricRegistry.register(MetricRegistry.name(name, "blockingTimeAverage"), (Gauge) agroalMetrics::blockingTimeAverage); - metricRegistry.register(MetricRegistry.name(name, "blockingTimeMax"), (Gauge) agroalMetrics::blockingTimeMax); - metricRegistry.register(MetricRegistry.name(name, "blockingTimeTotal"), (Gauge) agroalMetrics::blockingTimeTotal); - metricRegistry.register(MetricRegistry.name(name, "creationTimeAverage"), (Gauge) agroalMetrics::creationTimeAverage); - metricRegistry.register(MetricRegistry.name(name, "creationTimeMax"), (Gauge) agroalMetrics::creationTimeMax); - metricRegistry.register(MetricRegistry.name(name, "creationTimeTotal"), (Gauge) agroalMetrics::creationTimeTotal); + metricRegistry.register(name(name, "acquireCount"), (Gauge) agroalMetrics::acquireCount); + metricRegistry.register(name(name, "creationCount"), (Gauge) agroalMetrics::creationCount); + metricRegistry.register(name(name, "leakDetectionCount"), (Gauge) agroalMetrics::leakDetectionCount); + metricRegistry.register(name(name, "destroyCount"), (Gauge) agroalMetrics::destroyCount); + metricRegistry.register(name(name, "flushCount"), (Gauge) agroalMetrics::flushCount); + metricRegistry.register(name(name, "invalidCount"), (Gauge) agroalMetrics::invalidCount); + metricRegistry.register(name(name, "reapCount"), (Gauge) agroalMetrics::reapCount); + + metricRegistry.register(name(name, "activeCount"), (Gauge) agroalMetrics::activeCount); + metricRegistry.register(name(name, "availableCount"), (Gauge) agroalMetrics::availableCount); + metricRegistry.register(name(name, "maxUsedCount"), (Gauge) agroalMetrics::maxUsedCount); + metricRegistry.register(name(name, "awaitingCount"), (Gauge) agroalMetrics::awaitingCount); + metricRegistry.register(name(name, "blockingTimeAverage"), (Gauge) agroalMetrics::blockingTimeAverage); + metricRegistry.register(name(name, "blockingTimeMax"), (Gauge) agroalMetrics::blockingTimeMax); + metricRegistry.register(name(name, "blockingTimeTotal"), (Gauge) agroalMetrics::blockingTimeTotal); + metricRegistry.register(name(name, "creationTimeAverage"), (Gauge) agroalMetrics::creationTimeAverage); + metricRegistry.register(name(name, "creationTimeMax"), (Gauge) agroalMetrics::creationTimeMax); + metricRegistry.register(name(name, "creationTimeTotal"), (Gauge) agroalMetrics::creationTimeTotal); } - private void registerHealthChecks(AgroalDataSource ds, String name) + private void registerHealthChecks( AgroalDataSource ds, String name ) { - healthCheckRegistry.register(name, new HealthCheck() - { - @Override protected Result check() + metricRegistry.registerHealthCheck( name, () -> { + try (Connection con = ds.getConnection()) { - try ( Connection con = ds.getConnection() ) + if ( con.isValid( 5 ) ) { - if ( con.isValid(5) ) - { - return Result.healthy(); - } - else - { - return Result.unhealthy( "validation check failed for DataSource %s", name ); - } + return HealthCheckResult.healthy(); } - catch ( SQLException e ) + else { - return Result.unhealthy( e ); + return HealthCheckResult.unhealthy( + String.format( "validation check failed for DataSource %s", name ) ); } } - }); + catch ( SQLException e ) + { + return HealthCheckResult.unhealthy( e ); + } + } ); } private static class AgroalDataSourceLogger implements AgroalDataSourceListener diff --git a/subsys/flatfile/pom.xml b/subsys/flatfile/pom.xml index 4466c76176..8c221f5478 100644 --- a/subsys/flatfile/pom.xml +++ b/subsys/flatfile/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-subsystems - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-subsys-flatfile diff --git a/subsys/git/pom.xml b/subsys/git/pom.xml index 55581c327b..22e6c651ec 100644 --- a/subsys/git/pom.xml +++ b/subsys/git/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-subsystems - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-subsys-git diff --git a/subsys/git/src/main/java/org/commonjava/indy/subsys/git/GitManager.java b/subsys/git/src/main/java/org/commonjava/indy/subsys/git/GitManager.java index 0de78b85fe..815c835457 100644 --- a/subsys/git/src/main/java/org/commonjava/indy/subsys/git/GitManager.java +++ b/subsys/git/src/main/java/org/commonjava/indy/subsys/git/GitManager.java @@ -69,8 +69,8 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantLock; -import static org.apache.commons.lang.StringUtils.isEmpty; -import static org.apache.commons.lang.StringUtils.join; +import static org.apache.commons.lang3.StringUtils.isEmpty; +import static org.apache.commons.lang3.StringUtils.join; import static org.commonjava.indy.audit.ChangeSummary.SYSTEM_USER; @ApplicationScoped diff --git a/subsys/groovy/pom.xml b/subsys/groovy/pom.xml index b14ec17259..a2d865d6fe 100644 --- a/subsys/groovy/pom.xml +++ b/subsys/groovy/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-subsystems - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-subsys-groovy @@ -42,6 +42,10 @@ indy-api provided + + org.commonjava.util + o11yphant-honeycomb-api + org.jboss.weld.se weld-se-core @@ -65,10 +69,5 @@ indy-subsys-http test - - org.commonjava.indy - indy-subsys-metrics-reporter - test - diff --git a/subsys/groovy/src/test/java/org/commonjava/indy/subsys/template/fixture/MockStoragePathProvider.java b/subsys/groovy/src/test/java/org/commonjava/indy/subsys/template/fixture/MockStoragePathProvider.java index d8dc3d7fb7..98a2547008 100644 --- a/subsys/groovy/src/test/java/org/commonjava/indy/subsys/template/fixture/MockStoragePathProvider.java +++ b/subsys/groovy/src/test/java/org/commonjava/indy/subsys/template/fixture/MockStoragePathProvider.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.subsys.template.fixture; -import org.commonjava.indy.metrics.system.StoragePathProvider; +import org.commonjava.o11yphant.metrics.system.StoragePathProvider; import javax.enterprise.context.ApplicationScoped; import java.io.File; diff --git a/subsys/groovy/src/test/java/org/commonjava/indy/subsys/template/fixture/TestProvider.java b/subsys/groovy/src/test/java/org/commonjava/indy/subsys/template/fixture/TestProvider.java index 59a832c42f..8cb8945b27 100644 --- a/subsys/groovy/src/test/java/org/commonjava/indy/subsys/template/fixture/TestProvider.java +++ b/subsys/groovy/src/test/java/org/commonjava/indy/subsys/template/fixture/TestProvider.java @@ -34,6 +34,8 @@ import org.commonjava.maven.galley.spi.event.FileEventManager; import org.commonjava.maven.galley.spi.nfc.NotFoundCache; import org.commonjava.maven.galley.transport.htcli.conf.GlobalHttpConfiguration; +import org.commonjava.o11yphant.honeycomb.config.HoneycombConfiguration; +import org.commonjava.o11yphant.metrics.sli.GoldenSignalsMetricSet; import org.junit.rules.TemporaryFolder; import javax.annotation.PostConstruct; @@ -174,4 +176,15 @@ public UserLifecycleManager getUserLifecycleManager() return userLifecycleManager; } + @Produces + public HoneycombConfiguration getHoneycombConfiguration() + { + return null; + } + + @Produces + public GoldenSignalsMetricSet getGoldenSignalsMetricSet() + { + return null; + } } diff --git a/subsys/honeycomb/pom.xml b/subsys/honeycomb/pom.xml index 042d6aa45d..4089fdc9b8 100644 --- a/subsys/honeycomb/pom.xml +++ b/subsys/honeycomb/pom.xml @@ -20,7 +20,7 @@ indy-subsystems org.commonjava.indy - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT 4.0.0 @@ -29,8 +29,8 @@ - io.honeycomb.beeline - beeline-core + org.commonjava.util + o11yphant-honeycomb-api org.commonjava.indy @@ -38,15 +38,11 @@ org.commonjava.indy - indy-subsys-metrics-core - - - org.jboss.spec.javax.servlet - jboss-servlet-api_3.0_spec + indy-subsys-metrics org.commonjava.indy - indy-subsys-metrics-reporter + indy-subsys-cassandra diff --git a/subsys/honeycomb/src/main/conf/conf.d/honeycomb.conf b/subsys/honeycomb/src/main/conf/conf.d/honeycomb.conf index b495722596..093b8dd5c6 100644 --- a/subsys/honeycomb/src/main/conf/conf.d/honeycomb.conf +++ b/subsys/honeycomb/src/main/conf/conf.d/honeycomb.conf @@ -9,3 +9,6 @@ #spans.include=DefaultArtifactStoreQuery,DefaultContentManager,MavenMetadataMerger,getOrderedConcreteStoresInGroup #spans.exclude=getArtifactStore + +# Inject envar to root span fields +#environment.mappings=envar=honeycomb_var,... diff --git a/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/HoneycombContextualizer.java b/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/HoneycombContextualizer.java deleted file mode 100644 index 0fa820ea28..0000000000 --- a/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/HoneycombContextualizer.java +++ /dev/null @@ -1,105 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.subsys.honeycomb; - -import io.honeycomb.beeline.tracing.Beeline; -import io.honeycomb.beeline.tracing.Span; -import org.commonjava.cdi.util.weft.ThreadContextualizer; -import org.commonjava.indy.subsys.honeycomb.config.HoneycombConfiguration; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Inject; -import javax.inject.Named; - -@ApplicationScoped -@Named -public class HoneycombContextualizer - implements ThreadContextualizer -{ - private static final String THREAD_NAME = "thread.name"; - - private static final String THREAD_GROUP_NAME = "thread.group.name"; - - private final Logger logger = LoggerFactory.getLogger( getClass() ); - - private static ThreadLocal SPAN = new ThreadLocal<>(); - - @Inject - private HoneycombManager honeycombManager; - - @Inject - private HoneycombConfiguration configuration; - - @Inject - private IndyTracingContext tracingContext; - - @Override - public String getId() - { - return "honeycomb.threadpool.spanner"; - } - - @Override - public Object extractCurrentContext() - { - if ( configuration.isEnabled() ) - { - Beeline beeline = honeycombManager.getBeeline(); - SpanContext ctx = new SpanContext( beeline.getActiveSpan() ); - logger.trace( "Extracting parent-thread context: {}", ctx ); - return ctx; - } - return null; - } - - @Override - public void setChildContext( final Object parentContext ) - { - if ( configuration.isEnabled() ) - { - tracingContext.reinitThreadSpans(); - - logger.trace( "Creating thread-level root span using parent-thread context: {}", parentContext ); - SPAN.set( honeycombManager.startRootTracer( "thread." + Thread.currentThread().getThreadGroup().getName(), (SpanContext) parentContext ) ); - } - } - - @Override - public void clearContext() - { - if ( configuration.isEnabled() ) - { - Span span = SPAN.get(); - if ( span != null ) - { - logger.trace( "Closing thread-level root span: {}", span ); - honeycombManager.addFields( span ); - span.addField( THREAD_NAME, Thread.currentThread().getName() ); - span.addField( THREAD_GROUP_NAME, Thread.currentThread().getThreadGroup().getName() ); - - span.close(); - - honeycombManager.endTrace(); - } - - SPAN.remove(); - - tracingContext.clearThreadSpans(); - } - } -} diff --git a/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/HoneycombFilter.java b/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/HoneycombFilter.java deleted file mode 100644 index 7ea6dd9beb..0000000000 --- a/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/HoneycombFilter.java +++ /dev/null @@ -1,116 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.subsys.honeycomb; - -import io.honeycomb.beeline.tracing.Span; -import org.commonjava.indy.subsys.honeycomb.config.HoneycombConfiguration; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Inject; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import java.io.IOException; - -import static org.apache.commons.lang3.StringUtils.isBlank; -import static org.commonjava.indy.metrics.RequestContextHelper.getContext; - -@ApplicationScoped -public class HoneycombFilter - implements Filter -{ - @Inject - private HoneycombManager honeycombManager; - - @Inject - private HoneycombConfiguration config; - - private final Logger logger = LoggerFactory.getLogger( getClass() ); - - @Override - public void init( final FilterConfig filterConfig ) throws ServletException - { - } - - @Override - public void doFilter( final ServletRequest request, final ServletResponse response, final FilterChain chain ) - throws IOException, ServletException - { - logger.trace( "START: {}", getClass().getSimpleName() ); - - HttpServletRequest hsr = (HttpServletRequest) request; - logger.debug( "START: {}", hsr.getPathInfo() ); - - Span rootSpan = null; - try - { - rootSpan = honeycombManager.startRootTracer( getEndpointName( hsr.getMethod(), hsr.getPathInfo() ) ); - if ( rootSpan != null ) - { - rootSpan.addField( "path_info", hsr.getPathInfo() ); - } - - chain.doFilter( request, response ); - } - finally - { - logger.debug( "END: {}", hsr.getPathInfo() ); - if ( rootSpan != null ) - { - honeycombManager.addFields( rootSpan ); - rootSpan.close(); - honeycombManager.endTrace(); - } - - logger.trace( "END: {}", getClass().getSimpleName() ); - } - } - - private String getEndpointName( String method, String pathInfo ) - { - StringBuilder sb = new StringBuilder( method + "_" ); - String[] toks = pathInfo.split( "/" ); - for ( String s : toks ) - { - if ( isBlank( s ) || "api".equals( s ) ) - { - continue; - } - sb.append( s ); - if ( "admin".equals( s ) ) - { - sb.append( "_" ); - } - else - { - break; - } - } - return sb.toString(); - } - - @Override - public void destroy() - { - } - -} diff --git a/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/HoneycombManager.java b/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/HoneycombManager.java deleted file mode 100644 index 553b788bc8..0000000000 --- a/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/HoneycombManager.java +++ /dev/null @@ -1,222 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.subsys.honeycomb; - -import io.honeycomb.beeline.tracing.Beeline; -import io.honeycomb.beeline.tracing.Span; -import io.honeycomb.beeline.tracing.SpanBuilderFactory; -import io.honeycomb.beeline.tracing.SpanPostProcessor; -import io.honeycomb.beeline.tracing.Tracer; -import io.honeycomb.beeline.tracing.Tracing; -import io.honeycomb.beeline.tracing.propagation.PropagationContext; -import io.honeycomb.beeline.tracing.sampling.Sampling; -import io.honeycomb.libhoney.HoneyClient; -import io.honeycomb.libhoney.LibHoney; -import io.honeycomb.libhoney.responses.ResponseObservable; -import io.honeycomb.libhoney.transport.impl.ConsoleTransport; -import org.commonjava.cdi.util.weft.ThreadContext; -import org.commonjava.indy.metrics.RequestContextHelper; -import org.commonjava.indy.subsys.honeycomb.config.HoneycombConfiguration; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.annotation.PostConstruct; -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Inject; - -import java.util.Map; - -import static org.commonjava.indy.metrics.RequestContextHelper.CUMULATIVE_COUNTS; -import static org.commonjava.indy.metrics.RequestContextHelper.CUMULATIVE_TIMINGS; -import static org.commonjava.indy.metrics.RequestContextHelper.REQUEST_PARENT_SPAN; -import static org.commonjava.indy.metrics.RequestContextHelper.TRACE_ID; -import static org.commonjava.indy.metrics.RequestContextHelper.getContext; - -@ApplicationScoped -public class HoneycombManager -{ - private final Logger logger = LoggerFactory.getLogger( getClass() ); - - private HoneyClient client; - - private Beeline beeline; - - @Inject - private HoneycombContextualizer honeycombContextualizer; - - @Inject - private HoneycombConfiguration configuration; - - @Inject - private IndyTraceSampler traceSampler; - - @Inject - private IndyTracingContext tracingContext; - - @Inject - private IndyEventPostProcessor eventPostProcessor; - - public HoneycombManager() - { - } - - @PostConstruct - public void init() - { - if ( configuration.isEnabled() ) - { - String writeKey = configuration.getWriteKey(); - String dataset = configuration.getDataset(); - - logger.debug( "Init Honeycomb manager, dataset: {}", dataset ); - client = new HoneyClient( LibHoney.options().setDataset( dataset ).setWriteKey( writeKey ) - .setEventPostProcessor( eventPostProcessor ).build() ); //, new ConsoleTransport( new ResponseObservable() ) ); - LibHoney.setDefault( client ); - - SpanPostProcessor postProcessor = Tracing.createSpanProcessor( client, Sampling.alwaysSampler() ); - SpanBuilderFactory factory = Tracing.createSpanBuilderFactory( postProcessor, traceSampler ); - - Tracer tracer = Tracing.createTracer( factory, tracingContext ); - beeline = Tracing.createBeeline( tracer, factory ); - } - } - - public HoneyClient getClient() - { - return client; - } - - public Beeline getBeeline() - { - return beeline; - } - - public Span startRootTracer( String spanName ) - { - return startRootTracer( spanName, null ); - } - - public Span startRootTracer( String spanName, SpanContext parentContext ) - { - Beeline beeline = getBeeline(); - if ( beeline != null ) - { - Span span = null; - if ( parentContext != null ) - { - PropagationContext propContext = - new PropagationContext( parentContext.getTraceId(), parentContext.getParentSpanId(), null, - null ); - - logger.debug( "Starting root span: {} based on parent context: {}, thread: {}", spanName, propContext, Thread.currentThread().getId() ); - span = beeline.getSpanBuilderFactory() - .createBuilder() - .setParentContext( propContext ) - .setSpanName( spanName ) - .setServiceName( "indy" ) - .build(); - - } - else - { - String traceId = RequestContextHelper.getContext( TRACE_ID ); - String parentId = RequestContextHelper.getContext( REQUEST_PARENT_SPAN ); - - span = beeline.getSpanBuilderFactory().createBuilder() - // .setParentContext( parentContext ) - .setSpanName( spanName ).setServiceName( "indy" ).build(); - } - - span = beeline.getTracer().startTrace( span ); - - logger.debug( "Started root span: {} (ID: {}, trace ID: {} and parent: {}, thread: {})", span, - span.getSpanId(), span.getTraceId(), span.getParentSpanId(), - Thread.currentThread().getId() ); - - span.markStart(); - return span; - } - - return null; - } - - public Span startChildSpan( final String spanName ) - { - Beeline beeline = getBeeline(); - if ( beeline != null ) - { - Span span = null; - if ( tracingContext.isEmpty() ) - { - logger.debug( "Parent span from context: {} is a NO-OP, starting root trace instead in: {}", tracingContext, Thread.currentThread().getId() ); - span = startRootTracer( spanName ); - } - else - { - span = beeline.startChildSpan( spanName ); - } - - logger.debug( "Child span: {} (id: {}, trace: {}, parent: {}, thread: {})", span, - span.getSpanId(), span.getTraceId(), span.getParentSpanId(), - Thread.currentThread().getId() ); - - span.markStart(); - return span; - } - - return null; - } - - public void addFields( Span span ) - { - if ( beeline != null ) - { - ThreadContext ctx = ThreadContext.getContext( false ); - if ( ctx != null ) - { - configuration.getFieldSet().forEach( field -> { - Object value = getContext( field ); - if ( value != null ) - { - span.addField( field, value ); - } - } ); - - Map cumulativeTimings = (Map) ctx.get( CUMULATIVE_TIMINGS ); - if ( cumulativeTimings != null ) - { - cumulativeTimings.forEach( ( k, v ) -> span.addField( CUMULATIVE_TIMINGS + "." + k, v ) ); - } - - Map cumulativeCounts = (Map) ctx.get( CUMULATIVE_COUNTS ); - if ( cumulativeCounts != null ) - { - cumulativeCounts.forEach( ( k, v ) -> span.addField( CUMULATIVE_COUNTS + "." + k, v ) ); - } - } - } - } - - public void endTrace() - { - if ( beeline != null ) - { - logger.debug( "Ending trace: {}", Thread.currentThread().getId() ); - getBeeline().getTracer().endTrace(); - } - } - -} diff --git a/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/IndyCassandraConnectionRootSpanFields.java b/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/IndyCassandraConnectionRootSpanFields.java new file mode 100644 index 0000000000..2de6dc9f6b --- /dev/null +++ b/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/IndyCassandraConnectionRootSpanFields.java @@ -0,0 +1,45 @@ +/** + * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) + * + * 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.commonjava.indy.subsys.honeycomb; + +import com.datastax.driver.core.Session; +import org.commonjava.indy.subsys.cassandra.CassandraClient; +import org.commonjava.o11yphant.honeycomb.impl.CassandraConnectionRootSpanFields; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import java.util.Collections; +import java.util.Map; + +@ApplicationScoped +public class IndyCassandraConnectionRootSpanFields + extends CassandraConnectionRootSpanFields +{ + + private final Map sessions; + + @Inject + public IndyCassandraConnectionRootSpanFields( CassandraClient cassandraClient ) + { + this.sessions = Collections.unmodifiableMap( cassandraClient.getSessions() ); + } + + @Override + protected Map getSessions() + { + return sessions; + } +} diff --git a/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/SpanContext.java b/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/IndyCustomTraceIdProvider.java similarity index 50% rename from subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/SpanContext.java rename to subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/IndyCustomTraceIdProvider.java index 526296fd74..24a40f6c69 100644 --- a/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/SpanContext.java +++ b/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/IndyCustomTraceIdProvider.java @@ -15,39 +15,26 @@ */ package org.commonjava.indy.subsys.honeycomb; -import io.honeycomb.beeline.tracing.Span; +import org.commonjava.o11yphant.honeycomb.CustomTraceIdProvider; +import org.commonjava.o11yphant.metrics.RequestContextHelper; -public class SpanContext -{ - private String traceId; - - private String parentSpanId; - - public SpanContext( final String traceId, final String parentSpanId ) - { - this.traceId = traceId; - this.parentSpanId = parentSpanId; - } - - public SpanContext( final Span span ) - { - this.traceId = span.getTraceId(); - this.parentSpanId = span.getSpanId(); - } +import javax.enterprise.context.ApplicationScoped; - public String getParentSpanId() - { - return parentSpanId; - } - - public String getTraceId() - { - return traceId; - } +import static org.apache.commons.lang3.StringUtils.isNotBlank; +import static org.commonjava.o11yphant.honeycomb.util.TraceIdUtils.getUUIDTraceId; +import static org.commonjava.o11yphant.metrics.RequestContextConstants.TRACE_ID; +@ApplicationScoped +public class IndyCustomTraceIdProvider implements CustomTraceIdProvider +{ @Override - public String toString() + public String generateId() { - return "SpanContext{" + "traceId='" + traceId + '\'' + ", parentSpanId='" + parentSpanId + '\'' + '}'; + String traceId = RequestContextHelper.getContext( TRACE_ID ); + if ( isNotBlank(traceId )) + { + return traceId; + } + return getUUIDTraceId(); } } diff --git a/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/IndyEventPostProcessor.java b/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/IndyEventPostProcessor.java deleted file mode 100644 index 5d1c38222e..0000000000 --- a/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/IndyEventPostProcessor.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.subsys.honeycomb; - -import com.codahale.metrics.Meter; -import io.honeycomb.libhoney.EventPostProcessor; -import io.honeycomb.libhoney.eventdata.EventData; -import org.commonjava.indy.metrics.IndyMetricsManager; -import org.commonjava.indy.metrics.conf.IndyMetricsConfig; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Inject; - -import static org.commonjava.indy.metrics.IndyMetricsConstants.METER; -import static org.commonjava.indy.metrics.IndyMetricsConstants.getDefaultName; -import static org.commonjava.indy.metrics.IndyMetricsConstants.getName; - -@ApplicationScoped -public class IndyEventPostProcessor implements EventPostProcessor -{ - - private final Logger logger = LoggerFactory.getLogger( getClass() ); - - @Inject - private IndyMetricsManager metricsManager; - - @Inject - private IndyMetricsConfig metricsConfig; - - private final static String TRANSFER_HONEYCOMB_EVENT = "indy.transferred.honeycomb.event"; - - @Override - public void process( EventData eventData ) - { - if ( metricsConfig != null && metricsManager != null ) - { - String name = getName( metricsConfig.getNodePrefix(), TRANSFER_HONEYCOMB_EVENT, - getDefaultName( IndyEventPostProcessor.class, "process" ), METER ); - Meter meter = metricsManager.getMeter( name ); - meter.mark(); - } - } -} diff --git a/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/IndyTraceSampler.java b/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/IndyTraceSampler.java deleted file mode 100644 index 158c8fd704..0000000000 --- a/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/IndyTraceSampler.java +++ /dev/null @@ -1,93 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.subsys.honeycomb; - -import io.honeycomb.beeline.tracing.Span; -import io.honeycomb.beeline.tracing.sampling.TraceSampler; -import org.commonjava.cdi.util.weft.ThreadContext; -import org.commonjava.indy.metrics.TrafficClassifier; -import org.commonjava.indy.subsys.honeycomb.config.HoneycombConfiguration; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Inject; - -import java.util.List; -import java.util.Optional; -import java.util.Random; - -import static org.commonjava.indy.subsys.honeycomb.interceptor.HoneycombInterceptorUtils.SAMPLE_OVERRIDE; - -@ApplicationScoped -public class IndyTraceSampler - implements TraceSampler -{ - private final Random random = new Random(); - - private final Logger logger = LoggerFactory.getLogger( getClass() ); - - @Inject - private TrafficClassifier classifier; - - @Inject - private HoneycombConfiguration configuration; - - @Override - public int sample( final String input ) - { - ThreadContext ctx = ThreadContext.getContext( false ); - if ( ctx == null ) - { - logger.debug( "No ThreadContext for functional diagnosis; skipping span: {}", input ); - return 0; - } - - if ( ctx.get( SAMPLE_OVERRIDE ) != null ) - { - logger.debug( "Including span via override (span: {})", input ); - return 1; - } - - List functionClassifiers = classifier.getCachedFunctionClassifiers(); - Integer rate = configuration.getBaseSampleRate(); - - rate = configuration.getSampleRate( input ); - - if ( rate == configuration.getBaseSampleRate() && functionClassifiers != null ) - { - Optional mostAggressive = functionClassifiers.stream() - .map( classifier -> configuration.getSampleRate( - classifier ) ) - .filter( theRate -> theRate > 0 ) - .min( ( one, two ) -> two - one ); - - if ( mostAggressive.isPresent() ) - { - rate = mostAggressive.get(); - } - } - - if ( rate == 1 || Math.abs( random.nextInt() ) % rate == 0 ) - { - logger.debug( "Including span due to sampling rate: {} (span: {})", rate, input ); - return 1; - } - - logger.debug( "Skipping span due to sampling rate: {} (span: {})", rate, input ); - return 0; - } -} diff --git a/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/IndyTracingContext.java b/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/IndyTracingContext.java deleted file mode 100644 index 66ac05d4a0..0000000000 --- a/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/IndyTracingContext.java +++ /dev/null @@ -1,121 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.subsys.honeycomb; - -import io.honeycomb.beeline.tracing.TracerSpan; -import io.honeycomb.beeline.tracing.context.TracingContext; -import org.commonjava.indy.subsys.honeycomb.config.HoneycombConfiguration; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Inject; -import java.util.ArrayDeque; -import java.util.Deque; - -@ApplicationScoped -public class IndyTracingContext - implements TracingContext -{ - private static ThreadLocal> SPANS = ThreadLocal.withInitial( ArrayDeque::new ); - - private Logger logger = LoggerFactory.getLogger( getClass() ); - - @Inject - private HoneycombConfiguration config; - - public void reinitThreadSpans() - { - if ( config.isEnabled() ) - { - logger.debug( "Clearing spans in current thread: {}", Thread.currentThread().getId() ); - SPANS.set( new ArrayDeque<>() ); - } - } - - public void clearThreadSpans() - { - if ( config.isEnabled() ) - { - logger.debug( "Clearing context...SPANs in current thread: {} (thread: {})", SPANS.get().size(), - Thread.currentThread().getId() ); - TracerSpan tracerSpan = SPANS.get().peekLast(); - if ( tracerSpan != null ) - { - tracerSpan.close(); - } - - logger.debug( "Clearing spans deque in: {}", Thread.currentThread().getId() ); - SPANS.remove(); - } - } - - @Override - public Deque get() - { - return SPANS.get(); - } - - @Override - public int size() - { - logger.debug( "SPANs in current thread: {} (thread: {})", SPANS.get().size(), Thread.currentThread().getId() ); - return SPANS.get().size(); - } - - @Override - public TracerSpan peekLast() - { - logger.debug( "SPANs in current thread: {} (thread: {})", SPANS.get().size(), Thread.currentThread().getId() ); - return SPANS.get().peekLast(); - } - - @Override - public TracerSpan peekFirst() - { - logger.debug( "SPANs in current thread: {} (thread: {})", SPANS.get().size(), Thread.currentThread().getId() ); - return SPANS.get().peekFirst(); - } - - @Override - public boolean isEmpty() - { - Deque spans = SPANS.get(); - logger.debug( "SPANs in current thread: {} (thread: {})", spans.size(), Thread.currentThread().getId() ); - boolean empty = spans.isEmpty(); - - logger.debug( "SPANs.isEmpty() ? {}", empty ); - return empty; - } - - @Override - public void push( final TracerSpan span ) - { - logger.debug( "SPANs in current thread: {} (thread: {})", SPANS.get().size(), Thread.currentThread().getId() ); - SPANS.get().push( span ); - } - - @Override - public TracerSpan pop() - { - logger.debug( "Pre-POP SPANs in current thread: {} (thread: {})", SPANS.get().size(), Thread.currentThread().getId() ); - - TracerSpan span = SPANS.get().pop(); - - logger.debug( "Post-POP SPANs in current thread: {} (thread: {})", SPANS.get().size(), Thread.currentThread().getId() ); - return span; - } -} diff --git a/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/config/HoneycombConfiguration.java b/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/config/HoneycombConfiguration.java deleted file mode 100644 index fcc5dcfbf3..0000000000 --- a/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/config/HoneycombConfiguration.java +++ /dev/null @@ -1,237 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.subsys.honeycomb.config; - -import org.commonjava.indy.conf.IndyConfigInfo; -import org.commonjava.propulsor.config.ConfigurationException; -import org.commonjava.propulsor.config.annotation.SectionName; -import org.commonjava.propulsor.config.section.MapSectionListener; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.enterprise.context.ApplicationScoped; -import java.io.InputStream; -import java.lang.reflect.Method; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import static org.commonjava.indy.metrics.RequestContextHelper.CLIENT_ADDR; -import static org.commonjava.indy.metrics.RequestContextHelper.CONTENT_TRACKING_ID; -import static org.commonjava.indy.metrics.RequestContextHelper.HTTP_METHOD; -import static org.commonjava.indy.metrics.RequestContextHelper.HTTP_STATUS; -import static org.commonjava.indy.metrics.RequestContextHelper.PACKAGE_TYPE; -import static org.commonjava.indy.metrics.RequestContextHelper.PATH; -import static org.commonjava.indy.metrics.RequestContextHelper.TRACE_ID; -import static org.commonjava.indy.metrics.RequestContextHelper.REQUEST_LATENCY_MILLIS; -import static org.commonjava.indy.metrics.RequestContextHelper.REST_ENDPOINT_PATH; - -@SectionName( "honeycomb" ) -@ApplicationScoped -public class HoneycombConfiguration - extends MapSectionListener - implements IndyConfigInfo -{ - private static final Set DEFAULT_FIELDS = Collections.unmodifiableSet( new HashSet<>( - Arrays.asList( CONTENT_TRACKING_ID, HTTP_METHOD, HTTP_STATUS, TRACE_ID, CLIENT_ADDR, PATH, PACKAGE_TYPE, - REST_ENDPOINT_PATH, REQUEST_LATENCY_MILLIS ) ) ); - - private static final String ENABLED = "enabled"; - - private static final String WRITE_KEY = "write.key"; - - private static final String DATASET = "dataset"; - - private static final String FIELDS = "fields"; - - private static final String BASE_SAMPLE_RATE = "base.sample.rate"; - - private static final String SAMPLE_PREFIX = "sample."; - - private static final Integer DEFAULT_BASE_SAMPLE_RATE = 100; - - private boolean enabled; - - private String writeKey; - - private String dataset; - - private Integer baseSampleRate; - - private Map spanRates = new HashMap<>(); - - private Set spansIncluded = Collections.emptySet(); - - private Set spansExcluded = Collections.emptySet(); - - private Set fields; - - public HoneycombConfiguration() - { - } - - public boolean isEnabled() - { - return enabled; - } - - @Override - public void sectionStarted( final String name ) - throws ConfigurationException - { - // NOP; just block map init in the underlying implementation. - } - - @Override - public void parameter( final String name, final String value ) - throws ConfigurationException - { - switch(name) - { - case ENABLED: - this.enabled = Boolean.TRUE.equals( Boolean.parseBoolean( value.trim() ) ); - break; - case WRITE_KEY: - this.writeKey = value.trim(); - break; - case DATASET: - this.dataset = value.trim(); - break; - case BASE_SAMPLE_RATE: - this.baseSampleRate = Integer.parseInt( value.trim() ); - break; - case FIELDS: - this.fields = Collections.unmodifiableSet( - new HashSet<>( Arrays.asList( value.trim().split( "\\s*,\\s*" ) ) ) ); - break; - default: - if ( name.startsWith( SAMPLE_PREFIX ) && name.length() > SAMPLE_PREFIX.length() ) - { - spanRates.put( name.substring( SAMPLE_PREFIX.length() ).trim(), Integer.parseInt( value ) ); - } - } - } - - public String getWriteKey() - { - return writeKey; - } - - public String getDataset() - { - return dataset; - } - - @Override - public String getDefaultConfigFileName() - { - return "honeycomb.conf"; - } - - @Override - public InputStream getDefaultConfig() - { - return Thread.currentThread().getContextClassLoader().getResourceAsStream( "default-honeycomb.conf" ); - } - - public Integer getBaseSampleRate() - { - return baseSampleRate == null ? DEFAULT_BASE_SAMPLE_RATE : baseSampleRate; - } - - public int getSampleRate( Method method ) - { - Logger logger = LoggerFactory.getLogger( getClass() ); - if ( !spanRates.isEmpty() ) - { - String[] keys = { - method.getName(), - method.getDeclaringClass().getSimpleName() + "." + method.getName(), - method.getDeclaringClass().getName() + "." + method.getName(), - method.getDeclaringClass().getSimpleName(), - method.getDeclaringClass().getName() - }; - - for( String key: keys ) - { - Integer rate = spanRates.get( key ); - if ( rate != null ) - { - logger.trace( "Found sampling rate for: {} = {}", key, rate ); - return rate; - } - } - } - - logger.trace( "Returning base sampling rate for: {} = {}", method, getBaseSampleRate() ); - return getBaseSampleRate(); - } - - public Set getFieldSet() - { - return fields == null ? DEFAULT_FIELDS : fields; - } - - public Integer getSampleRate( final String classifier ) - { - Logger logger = LoggerFactory.getLogger( getClass() ); - - Integer rate = spanRates.get( classifier ); - if ( rate != null ) - { - logger.trace( "Found sampling rate for: {} = {}", classifier, rate ); - return rate; - } - - String[] parts = classifier.split( "\\." ); - for ( String part : parts ) - { - rate = spanRates.get( part ); - if ( rate != null ) - { - logger.trace( "Found sampling rate for: {} = {}", part, rate ); - return rate; - } - } - - StringBuilder sb = new StringBuilder(); - for ( int i = parts.length; i > 0; i-- ) - { - sb.setLength( 0 ); - for ( int j = 0; j < i; j++ ) - { - if ( sb.length() > 0 ) - { - sb.append( '.' ); - } - sb.append( parts[j] ); - } - - rate = spanRates.get( sb.toString() ); - if ( rate != null ) - { - logger.trace( "Found sampling rate for: {} = {}", sb, rate ); - return rate; - } - } - - logger.trace( "Returning base sampling rate for: {} = {}", classifier, getBaseSampleRate() ); - return getBaseSampleRate(); - } -} diff --git a/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/config/IndyHoneycombConfiguration.java b/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/config/IndyHoneycombConfiguration.java new file mode 100644 index 0000000000..05c41de515 --- /dev/null +++ b/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/config/IndyHoneycombConfiguration.java @@ -0,0 +1,212 @@ +/** + * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) + * + * 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.commonjava.indy.subsys.honeycomb.config; + +import org.commonjava.indy.conf.IndyConfigInfo; +import org.commonjava.indy.conf.IndyConfiguration; +import org.commonjava.o11yphant.honeycomb.config.HoneycombConfiguration; +import org.commonjava.propulsor.config.ConfigurationException; +import org.commonjava.propulsor.config.annotation.SectionName; +import org.commonjava.propulsor.config.section.MapSectionListener; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import java.io.InputStream; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +@SectionName( "honeycomb" ) +@ApplicationScoped +public class IndyHoneycombConfiguration + extends MapSectionListener + implements IndyConfigInfo, HoneycombConfiguration +{ + @Inject + private IndyConfiguration indyConfiguration; + + private static final String ENABLED = "enabled"; + + private static final String CONSOLE_TRANSPORT = "console.transport"; + + private static final String WRITE_KEY = "write.key"; + + private static final String DATASET = "dataset"; + + private static final String FIELDS = "fields"; + + private static final String BASE_SAMPLE_RATE = "base.sample.rate"; + + private static final String SAMPLE_PREFIX = "sample."; + + private static final String ENVIRONMENT_MAPPINGS = "environment.mappings"; + + private static final String CP_NAMES = "cp.names"; + + private static final Integer DEFAULT_BASE_SAMPLE_RATE = 100; + + private boolean enabled; + + private boolean consoleTransport; + + private String writeKey; + + private String dataset; + + private Integer baseSampleRate; + + private Map spanRates = new HashMap<>(); + + private Set spansIncluded = Collections.emptySet(); + + private Set spansExcluded = Collections.emptySet(); + + private Set fields; + + private String environmentMappings; + + private String cpNames; + + public IndyHoneycombConfiguration() + { + } + + @Override + public Map getSpanRates() + { + return spanRates; + } + + @Override + public boolean isEnabled() + { + return enabled; + } + + @Override + public boolean isConsoleTransport() + { + return consoleTransport; + } + + @Override + public String getServiceName() + { + return "indy"; + } + + @Override + public void sectionStarted( final String name ) throws ConfigurationException + { + // NOP; just block map init in the underlying implementation. + } + + @Override + public void parameter( final String name, final String value ) throws ConfigurationException + { + switch ( name ) + { + case ENABLED: + this.enabled = Boolean.TRUE.equals( Boolean.parseBoolean( value.trim() ) ); + break; + case WRITE_KEY: + this.writeKey = value.trim(); + break; + case DATASET: + this.dataset = value.trim(); + break; + case BASE_SAMPLE_RATE: + this.baseSampleRate = Integer.parseInt( value.trim() ); + break; + case ENVIRONMENT_MAPPINGS: + this.environmentMappings = value.trim(); + break; + case CP_NAMES: + this.cpNames = value.trim(); + break; + case FIELDS: + this.fields = Collections.unmodifiableSet( + new HashSet<>( Arrays.asList( value.trim().split( "\\s*,\\s*" ) ) ) ); + break; + case CONSOLE_TRANSPORT: + this.consoleTransport = Boolean.parseBoolean( value.trim() ); + break; + default: + if ( name.startsWith( SAMPLE_PREFIX ) && name.length() > SAMPLE_PREFIX.length() ) + { + spanRates.put( name.substring( SAMPLE_PREFIX.length() ).trim(), Integer.parseInt( value ) ); + } + } + } + + @Override + public String getWriteKey() + { + return writeKey; + } + + @Override + public String getDataset() + { + return dataset; + } + + @Override + public String getDefaultConfigFileName() + { + return "honeycomb.conf"; + } + + @Override + public InputStream getDefaultConfig() + { + return Thread.currentThread().getContextClassLoader().getResourceAsStream( "default-honeycomb.conf" ); + } + + @Override + public Integer getBaseSampleRate() + { + return baseSampleRate == null ? DEFAULT_BASE_SAMPLE_RATE : baseSampleRate; + } + + @Override + public Set getFieldSet() + { + return fields == null ? DEFAULT_FIELDS : fields; + } + + @Override + public String getEnvironmentMappings() + { + return environmentMappings; + } + + @Override + public String getCPNames() + { + return cpNames; + } + + @Override + public String getNodeId() + { + return indyConfiguration.getNodeId(); + } + +} diff --git a/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/interceptor/HoneycombInterceptorUtils.java b/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/interceptor/HoneycombInterceptorUtils.java deleted file mode 100644 index 7d52795235..0000000000 --- a/subsys/honeycomb/src/main/java/org/commonjava/indy/subsys/honeycomb/interceptor/HoneycombInterceptorUtils.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.subsys.honeycomb.interceptor; - -import io.honeycomb.beeline.tracing.Span; -import org.commonjava.cdi.util.weft.ThreadContext; -import org.commonjava.indy.measure.annotation.MetricWrapperNamed; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.interceptor.InvocationContext; -import java.lang.reflect.Method; -import java.lang.reflect.Parameter; -import java.util.LinkedList; -import java.util.function.Supplier; - -public class HoneycombInterceptorUtils -{ - - public static final String SAMPLE_OVERRIDE = "honeycomb.sample-override"; - - public static String getMetricNameFromParam( InvocationContext context ) - { - String name = null; - - Method method = context.getMethod(); - Parameter[] parameters = method.getParameters(); - for ( int i=0; i org.commonjava.indy indy-subsystems - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-subsys-http diff --git a/subsys/http/src/main/java/org/commonjava/indy/subsys/http/util/UserPass.java b/subsys/http/src/main/java/org/commonjava/indy/subsys/http/util/UserPass.java index 4f7df8df4d..11f5a58d1a 100644 --- a/subsys/http/src/main/java/org/commonjava/indy/subsys/http/util/UserPass.java +++ b/subsys/http/src/main/java/org/commonjava/indy/subsys/http/util/UserPass.java @@ -16,7 +16,7 @@ package org.commonjava.indy.subsys.http.util; import org.apache.commons.codec.binary.Base64; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.http.Header; import org.apache.http.HttpRequest; import org.commonjava.indy.util.ApplicationHeader; diff --git a/subsys/infinispan/pom.xml b/subsys/infinispan/pom.xml index c9ef021f8d..61be429492 100644 --- a/subsys/infinispan/pom.xml +++ b/subsys/infinispan/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-subsystems - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-subsys-infinispan @@ -39,11 +39,7 @@ org.commonjava.indy - indy-subsys-metrics-core - - - org.commonjava.indy - indy-subsys-metrics-reporter + indy-subsys-metrics org.infinispan diff --git a/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/BasicCacheHandle.java b/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/BasicCacheHandle.java index 3abfe44395..d91f77bf9c 100644 --- a/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/BasicCacheHandle.java +++ b/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/BasicCacheHandle.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.subsys.infinispan; -import org.commonjava.indy.metrics.IndyMetricsManager; +import org.commonjava.o11yphant.metrics.DefaultMetricsManager; import org.infinispan.commons.api.BasicCache; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -24,7 +24,7 @@ import java.util.function.Function; import java.util.function.Supplier; -import static com.codahale.metrics.MetricRegistry.name; +import static org.commonjava.o11yphant.metrics.util.NameUtils.name; public class BasicCacheHandle { @@ -32,7 +32,7 @@ public class BasicCacheHandle protected BasicCache cache; - protected IndyMetricsManager metricsManager; + protected DefaultMetricsManager metricsManager; private String metricPrefix; @@ -52,7 +52,7 @@ protected BasicCacheHandle() { } - protected BasicCacheHandle( String named, BasicCache cache, IndyMetricsManager metricsManager, String metricPrefix ) + protected BasicCacheHandle( String named, BasicCache cache, DefaultMetricsManager metricsManager, String metricPrefix ) { this.name = named; this.cache = cache; diff --git a/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/CacheHandle.java b/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/CacheHandle.java index a8a8f0c63f..3a4f70e18f 100644 --- a/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/CacheHandle.java +++ b/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/CacheHandle.java @@ -15,8 +15,8 @@ */ package org.commonjava.indy.subsys.infinispan; -import org.apache.commons.lang.StringUtils; -import org.commonjava.indy.metrics.IndyMetricsManager; +import org.apache.commons.lang3.StringUtils; +import org.commonjava.o11yphant.metrics.DefaultMetricsManager; import org.infinispan.Cache; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,7 +37,7 @@ public class CacheHandle extends BasicCacheHandle { protected CacheHandle(){} - public CacheHandle( String named, Cache cache, IndyMetricsManager metricsManager, String metricPrefix ) + public CacheHandle( String named, Cache cache, DefaultMetricsManager metricsManager, String metricPrefix ) { super( named, cache, metricsManager, metricPrefix ); } diff --git a/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/CacheProducer.java b/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/CacheProducer.java index f04b6f2f41..2098c820a9 100644 --- a/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/CacheProducer.java +++ b/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/CacheProducer.java @@ -23,8 +23,8 @@ import org.commonjava.indy.action.IndyLifecycleException; import org.commonjava.indy.action.ShutdownAction; import org.commonjava.indy.conf.IndyConfiguration; -import org.commonjava.indy.metrics.IndyMetricsManager; -import org.commonjava.indy.metrics.conf.IndyMetricsConfig; +import org.commonjava.o11yphant.metrics.DefaultMetricsManager; +import org.commonjava.indy.subsys.metrics.conf.IndyMetricsConfig; import org.commonjava.indy.subsys.infinispan.config.ISPNClusterConfiguration; import org.commonjava.indy.subsys.infinispan.config.ISPNRemoteConfiguration; import org.infinispan.Cache; @@ -55,9 +55,8 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import java.util.stream.Collectors; -import static org.commonjava.indy.metrics.IndyMetricsConstants.getSupername; +import static org.commonjava.o11yphant.metrics.util.NameUtils.getSupername; import static org.commonjava.indy.subsys.infinispan.metrics.IspnCheckRegistrySet.INDY_METRIC_ISPN; /** @@ -81,7 +80,7 @@ public class CacheProducer private IndyConfiguration indyConfiguration; @Inject - private IndyMetricsManager metricsManager; + private DefaultMetricsManager metricsManager; @Inject private IndyMetricsConfig metricsConfig; diff --git a/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/RemoteCacheHandle.java b/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/RemoteCacheHandle.java index aadb9e1683..34d10d4373 100644 --- a/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/RemoteCacheHandle.java +++ b/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/RemoteCacheHandle.java @@ -15,15 +15,15 @@ */ package org.commonjava.indy.subsys.infinispan; -import org.commonjava.indy.metrics.IndyMetricsManager; +import org.commonjava.o11yphant.metrics.DefaultMetricsManager; import org.infinispan.client.hotrod.RemoteCache; -import static com.codahale.metrics.MetricRegistry.name; +import static org.commonjava.o11yphant.metrics.util.NameUtils.name; public class RemoteCacheHandle extends BasicCacheHandle { - public RemoteCacheHandle( String named, RemoteCache cache, IndyMetricsManager metricsManager, String metricPrefix ) + public RemoteCacheHandle( String named, RemoteCache cache, DefaultMetricsManager metricsManager, String metricPrefix ) { super( named, cache, metricsManager, metricPrefix ); } diff --git a/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/config/ISPNClusterConfiguration.java b/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/config/ISPNClusterConfiguration.java index 77042a8b8c..0d48d11bd3 100644 --- a/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/config/ISPNClusterConfiguration.java +++ b/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/config/ISPNClusterConfiguration.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.subsys.infinispan.config; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.conf.IndyConfigInfo; import org.commonjava.indy.conf.SystemPropertyProvider; import org.commonjava.propulsor.config.annotation.ConfigName; diff --git a/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/config/ISPNDBConfiguration.java b/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/config/ISPNDBConfiguration.java index f5e5836181..4210feaa30 100644 --- a/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/config/ISPNDBConfiguration.java +++ b/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/config/ISPNDBConfiguration.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.subsys.infinispan.config; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.conf.IndyConfigInfo; import org.commonjava.indy.conf.SystemPropertyProvider; import org.commonjava.propulsor.config.annotation.ConfigName; diff --git a/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/metrics/IspnCheckRegistrySet.java b/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/metrics/IspnCheckRegistrySet.java index 4dc65d5cca..e0ad647880 100644 --- a/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/metrics/IspnCheckRegistrySet.java +++ b/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/metrics/IspnCheckRegistrySet.java @@ -15,9 +15,9 @@ */ package org.commonjava.indy.subsys.infinispan.metrics; -import com.codahale.metrics.Gauge; -import com.codahale.metrics.Metric; -import com.codahale.metrics.MetricSet; +import org.commonjava.o11yphant.metrics.api.Gauge; +import org.commonjava.o11yphant.metrics.api.Metric; +import org.commonjava.o11yphant.metrics.api.MetricSet; import org.infinispan.AdvancedCache; import org.infinispan.Cache; import org.infinispan.manager.EmbeddedCacheManager; @@ -30,7 +30,7 @@ import java.util.Set; import java.util.function.Supplier; -import static com.codahale.metrics.MetricRegistry.name; +import static org.commonjava.o11yphant.metrics.util.NameUtils.name; public class IspnCheckRegistrySet implements MetricSet diff --git a/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/metrics/IspnRegistrySetProvider.java b/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/metrics/IspnRegistrySetProvider.java index eec5f340e4..ce72a91943 100644 --- a/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/metrics/IspnRegistrySetProvider.java +++ b/subsys/infinispan/src/main/java/org/commonjava/indy/subsys/infinispan/metrics/IspnRegistrySetProvider.java @@ -15,9 +15,9 @@ */ package org.commonjava.indy.subsys.infinispan.metrics; -import com.codahale.metrics.MetricRegistry; -import org.commonjava.indy.metrics.MetricSetProvider; -import org.commonjava.indy.metrics.conf.IndyMetricsConfig; +import org.commonjava.o11yphant.metrics.api.MetricSet; +import org.commonjava.o11yphant.metrics.MetricSetProvider; +import org.commonjava.indy.subsys.metrics.conf.IndyMetricsConfig; import org.commonjava.indy.subsys.infinispan.CacheProducer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,12 +29,12 @@ import java.util.List; import java.util.Set; -import static com.codahale.metrics.MetricRegistry.name; import static org.commonjava.indy.subsys.infinispan.metrics.IspnCheckRegistrySet.INDY_METRIC_ISPN; +import static org.commonjava.o11yphant.metrics.util.NameUtils.name; @ApplicationScoped public class IspnRegistrySetProvider - implements MetricSetProvider + implements MetricSetProvider { @Inject private IndyMetricsConfig metricsConfig; @@ -48,14 +48,9 @@ public class IspnRegistrySetProvider private final Logger logger = LoggerFactory.getLogger( getClass() ); @Override - public void registerMetricSet( final MetricRegistry registry ) + public MetricSet getMetricSet() { - if ( !metricsConfig.isIspnMetricsEnabled() ) - { - return; - } - - logger.info( "Adding ISPN checks to registry: {}", registry ); + logger.info( "Adding ISPN checks" ); String gauges = metricsConfig.getIspnGauges(); List list = null; if ( gauges != null ) @@ -71,8 +66,18 @@ public void registerMetricSet( final MetricRegistry registry ) caches.forEach( ( n ) -> cacheProducer.getCacheManager().getCache( n ) ); } } + return new IspnCheckRegistrySet( cacheProducer.getCacheManager(), list ); + } + + @Override + public String getName() + { + return name( metricsConfig.getNodePrefix(), INDY_METRIC_ISPN ); + } - registry.register( name( metricsConfig.getNodePrefix(), INDY_METRIC_ISPN ), - new IspnCheckRegistrySet( cacheProducer.getCacheManager(), list ) ); + @Override + public boolean isEnabled() + { + return metricsConfig.isIspnMetricsEnabled(); } } diff --git a/subsys/infinispan/src/main/resources/infinispan-jdbc.xml b/subsys/infinispan/src/main/resources/infinispan-jdbc.xml index 62a7ed313f..59540b4c17 100644 --- a/subsys/infinispan/src/main/resources/infinispan-jdbc.xml +++ b/subsys/infinispan/src/main/resources/infinispan-jdbc.xml @@ -140,6 +140,20 @@ + + + + + + + + + + + + + + - - - indy-subsys-metrics - org.commonjava.indy - 2.5.0-SNAPSHOT - - 4.0.0 - - indy-subsys-metrics-core - - - - io.dropwizard.metrics - metrics-core - - - io.dropwizard.metrics - metrics-jvm - - - io.dropwizard.metrics - metrics-healthchecks - - - org.apache.commons - commons-lang3 - - - - org.commonjava.indy - indy-api - - - - - - - \ No newline at end of file diff --git a/subsys/metrics/core/src/main/java/org/commonjava/indy/measure/annotation/Measure.java b/subsys/metrics/core/src/main/java/org/commonjava/indy/measure/annotation/Measure.java deleted file mode 100644 index 62524436b6..0000000000 --- a/subsys/metrics/core/src/main/java/org/commonjava/indy/measure/annotation/Measure.java +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.measure.annotation; - -import javax.enterprise.util.Nonbinding; -import javax.interceptor.InterceptorBinding; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.TYPE; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -@InterceptorBinding -@Target( { METHOD, TYPE } ) -@Retention( RUNTIME ) -public @interface Measure -{ -} diff --git a/subsys/metrics/core/src/main/java/org/commonjava/indy/measure/annotation/MetricNamed.java b/subsys/metrics/core/src/main/java/org/commonjava/indy/measure/annotation/MetricNamed.java deleted file mode 100644 index 2bbadf86a0..0000000000 --- a/subsys/metrics/core/src/main/java/org/commonjava/indy/measure/annotation/MetricNamed.java +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.measure.annotation; - -import org.commonjava.indy.metrics.IndyMetricsConstants; - -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.TYPE; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -@Target( { METHOD, TYPE } ) -@Retention( RUNTIME ) -public @interface MetricNamed -{ - /** - * Need to migrate to {@link IndyMetricsConstants#DEFAULT}. - * @deprecated - */ - String DEFAULT = IndyMetricsConstants.DEFAULT; - - String value() default DEFAULT; -} \ No newline at end of file diff --git a/subsys/metrics/core/src/main/java/org/commonjava/indy/measure/annotation/MetricWrapperEnd.java b/subsys/metrics/core/src/main/java/org/commonjava/indy/measure/annotation/MetricWrapperEnd.java deleted file mode 100644 index 5b98af60c0..0000000000 --- a/subsys/metrics/core/src/main/java/org/commonjava/indy/measure/annotation/MetricWrapperEnd.java +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.measure.annotation; - -import javax.interceptor.InterceptorBinding; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.TYPE; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -@InterceptorBinding -@Target( { METHOD, TYPE } ) -@Retention( RUNTIME ) -public @interface MetricWrapperEnd -{ -} diff --git a/subsys/metrics/core/src/main/java/org/commonjava/indy/measure/annotation/MetricWrapperNamed.java b/subsys/metrics/core/src/main/java/org/commonjava/indy/measure/annotation/MetricWrapperNamed.java deleted file mode 100644 index 7680d38c5b..0000000000 --- a/subsys/metrics/core/src/main/java/org/commonjava/indy/measure/annotation/MetricWrapperNamed.java +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.measure.annotation; - -import javax.enterprise.util.Nonbinding; -import javax.interceptor.InterceptorBinding; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.PARAMETER; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -@InterceptorBinding -@Target( { PARAMETER } ) -@Retention( RUNTIME ) -public @interface MetricWrapperNamed -{ -} diff --git a/subsys/metrics/core/src/main/java/org/commonjava/indy/measure/annotation/MetricWrapperStart.java b/subsys/metrics/core/src/main/java/org/commonjava/indy/measure/annotation/MetricWrapperStart.java deleted file mode 100644 index 1b94fa7470..0000000000 --- a/subsys/metrics/core/src/main/java/org/commonjava/indy/measure/annotation/MetricWrapperStart.java +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.measure.annotation; - -import javax.interceptor.InterceptorBinding; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.TYPE; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -@InterceptorBinding -@Target( { METHOD, TYPE } ) -@Retention( RUNTIME ) -public @interface MetricWrapperStart -{ -} diff --git a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/IndyMetricsConstants.java b/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/IndyMetricsConstants.java deleted file mode 100644 index 395972c70d..0000000000 --- a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/IndyMetricsConstants.java +++ /dev/null @@ -1,79 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics; - -import org.apache.commons.lang3.ClassUtils; - -import static com.codahale.metrics.MetricRegistry.name; -import static org.apache.commons.lang.StringUtils.isBlank; - -public class IndyMetricsConstants -{ - public static final String DEFAULT = "default"; - - public static final String EXCEPTION = "exception"; - - public static final String METER = "meter"; - - public static final String TIMER = "timer"; - - public static final String SKIP_METRIC = "skip-this-metric"; - - /** - * Get default metric name. Use abbreviated package name, e.g., foo.bar.ClassA.methodB -> f.b.ClassA.methodB - */ - public static String getDefaultName( Class declaringClass, String method ) - { - // minimum len 1 shortens the package name and keeps class name - String cls = ClassUtils.getAbbreviatedName( declaringClass.getName(), 1 ); - return name( cls, method ); - } - - /** - * Get default metric name. Use abbreviated package name, e.g., foo.bar.ClassA.methodB -> f.b.ClassA.methodB - */ - public static String getDefaultName( String declaringClass, String method ) - { - // minimum len 1 shortens the package name and keeps class name - String cls = ClassUtils.getAbbreviatedName( declaringClass, 1 ); - return name( cls, method ); - } - - /** - * Get the metric fullname with no default value. - * @param nameParts user specified name parts - */ - public static String getSupername( String nodePrefix, String... nameParts ) - { - return name( nodePrefix, nameParts ); - } - - /** - * Get the metric fullname. - * @param name user specified name - * @param defaultName 'class name + method name', not null. - */ - public static String getName( String nodePrefix, String name, String defaultName, String... suffix ) - { - if ( isBlank( name ) || name.equals( DEFAULT ) ) - { - name = defaultName; - } - return name( name( nodePrefix, name ), suffix ); - } - - -} diff --git a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/MetricSetProvider.java b/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/MetricSetProvider.java deleted file mode 100644 index be0055b68e..0000000000 --- a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/MetricSetProvider.java +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics; - -import com.codahale.metrics.MetricRegistry; - -public interface MetricSetProvider -{ - void registerMetricSet( MetricRegistry registry ); -} diff --git a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/exception/IndyMetricsException.java b/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/exception/IndyMetricsException.java deleted file mode 100644 index ea5ab9609c..0000000000 --- a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/exception/IndyMetricsException.java +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.exception; - -import org.commonjava.indy.IndyException; - -/** - * Created by xiabai on 5/9/17. - */ -public class IndyMetricsException extends IndyException -{ - public IndyMetricsException( final String message, final Object... params ) - { - super( message, params ); - } - - public IndyMetricsException( final String message, final Throwable cause, final Object... params ) - { - super( message, cause, params ); - } - - private static final long serialVersionUID = 1L; -} diff --git a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/healthcheck/IndyComponentHC.java b/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/healthcheck/IndyComponentHC.java deleted file mode 100644 index b67490561b..0000000000 --- a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/healthcheck/IndyComponentHC.java +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.healthcheck; - -public abstract class IndyComponentHC extends IndyHealthCheck -{ -} diff --git a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/healthcheck/IndyCompoundHealthCheck.java b/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/healthcheck/IndyCompoundHealthCheck.java deleted file mode 100644 index 56380f7916..0000000000 --- a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/healthcheck/IndyCompoundHealthCheck.java +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.healthcheck; - -import com.codahale.metrics.health.HealthCheck; - -import java.util.Map; -import java.util.Set; - -import static org.commonjava.indy.metrics.util.NameUtils.getAbbreviatedName; - -public interface IndyCompoundHealthCheck -{ - - Map getHealthChecks(); - -} diff --git a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/healthcheck/IndyHealthCheck.java b/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/healthcheck/IndyHealthCheck.java deleted file mode 100644 index de64bf5bb5..0000000000 --- a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/healthcheck/IndyHealthCheck.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.healthcheck; - -import com.codahale.metrics.health.HealthCheck; - -import static org.commonjava.indy.metrics.util.NameUtils.getAbbreviatedName; - -/** - * Created by xiabai on 3/10/17. - */ -public abstract class IndyHealthCheck - extends HealthCheck -{ - - public String getName() - { - return getAbbreviatedName( this.getClass() ); - } - -} diff --git a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/healthcheck/IndyHealthCheckRegistrySet.java b/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/healthcheck/IndyHealthCheckRegistrySet.java deleted file mode 100644 index 1677366359..0000000000 --- a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/healthcheck/IndyHealthCheckRegistrySet.java +++ /dev/null @@ -1,82 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.healthcheck; - -import com.codahale.metrics.Gauge; -import com.codahale.metrics.Metric; -import com.codahale.metrics.MetricSet; -import com.codahale.metrics.health.HealthCheck; -import com.codahale.metrics.health.HealthCheckRegistry; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.HashMap; -import java.util.Map; -import java.util.SortedMap; - -/** - * Created by xiabai on 3/13/17. - */ -public class IndyHealthCheckRegistrySet - implements MetricSet -{ - private static final Logger logger = LoggerFactory.getLogger( IndyHealthCheckRegistrySet.class ); - - private String name = "healthcheck"; - - private HealthCheckRegistry healthCheckRegistry; - - public IndyHealthCheckRegistrySet() - { - healthCheckRegistry = new HealthCheckRegistry(); - } - - @Override - public Map getMetrics() - { - final Map gauges = new HashMap(); - SortedMap healthResult = healthCheckRegistry.runHealthChecks(); - healthResult.forEach( ( s, result ) -> - { - gauges.put( s, (Gauge) () -> - { - if ( result.isHealthy() ) - { - return 1; - } - return 0; - } ); - } ); - logger.info( "get metrics " + gauges ); - return gauges; - } - - public void register( String name, HealthCheck healthCheck ) - { - healthCheckRegistry.register( name, healthCheck ); - } - - public void setName( String name ) - { - this.name = name; - } - - public String getName() - { - return name; - - } -} diff --git a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/healthcheck/impl/DeadlockHealthCheck.java b/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/healthcheck/impl/DeadlockHealthCheck.java deleted file mode 100644 index 56fa1896a2..0000000000 --- a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/healthcheck/impl/DeadlockHealthCheck.java +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.healthcheck.impl; - -import org.commonjava.indy.metrics.healthcheck.IndyComponentHC; -import org.commonjava.indy.metrics.healthcheck.IndyHealthCheck; - -import javax.inject.Named; - -@Named -public class DeadlockHealthCheck - extends IndyComponentHC -{ - com.codahale.metrics.health.jvm.ThreadDeadlockHealthCheck - deadlock = new com.codahale.metrics.health.jvm.ThreadDeadlockHealthCheck(); - - @Override - protected Result check() throws Exception - { - return deadlock.execute(); - } - -} diff --git a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/healthcheck/impl/HeapHealthCheck.java b/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/healthcheck/impl/HeapHealthCheck.java deleted file mode 100644 index 4e9ce4f160..0000000000 --- a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/healthcheck/impl/HeapHealthCheck.java +++ /dev/null @@ -1,71 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.healthcheck.impl; - -import org.commonjava.indy.metrics.healthcheck.IndyComponentHC; -import org.commonjava.indy.metrics.healthcheck.IndyHealthCheck; - -import javax.inject.Named; - -@Named -public class HeapHealthCheck - extends IndyComponentHC -{ - private static final double GB = Math.pow(1024, 3); - - private static final String FREE_GB = "free-gb"; - - private static final String USED_GB = "used-gb"; - - private static final String TOTAL_GB = "total-gb"; - - private static final String MAX_GB = "max-gb"; - - private static final String CURRENT_LOAD = "current-load-pct"; - - private static final float HEALTHY_LOAD_MAX = 90f; - - @Override - protected Result check() - throws Exception - { - Runtime runtime = Runtime.getRuntime(); - ResultBuilder builder = Result.builder(); - - double free = runtime.freeMemory(); - double total = runtime.totalMemory(); - double used = total-free; - - double max = runtime.maxMemory(); - double load = 100 * (used / max); - - if ( load > HEALTHY_LOAD_MAX ) - { - builder.unhealthy(); - } - else - { - builder.healthy(); - } - - builder.withDetail( FREE_GB, free / GB ) - .withDetail( USED_GB, used / GB ) - .withDetail( MAX_GB, max / GB ) - .withDetail( TOTAL_GB, total / GB ).withDetail( CURRENT_LOAD, load ); - - return builder.build(); - } -} diff --git a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/healthcheck/impl/SummaryHealthCheck.java b/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/healthcheck/impl/SummaryHealthCheck.java deleted file mode 100644 index 21c7ad4ab1..0000000000 --- a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/healthcheck/impl/SummaryHealthCheck.java +++ /dev/null @@ -1,83 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.healthcheck.impl; - -import org.commonjava.indy.metrics.healthcheck.IndyComponentHC; -import org.commonjava.indy.metrics.healthcheck.IndyCompoundHealthCheck; -import org.commonjava.indy.metrics.healthcheck.IndyHealthCheck; - -import javax.enterprise.inject.Instance; -import javax.inject.Inject; -import javax.inject.Named; -import java.util.concurrent.atomic.AtomicInteger; - -@Named -public class SummaryHealthCheck - extends IndyHealthCheck -{ - enum SummaryRating - { - green, yellow, red; - } - - private static final String RATING = "rating"; - - private static final String UNHEALTHY_COUNT = "unhealthy-count"; - - @Inject - private Instance looseComponents; - - @Inject - private Instance looseCompounds; - - @Override - protected Result check() - throws Exception - { - AtomicInteger count = new AtomicInteger( 0 ); - looseComponents.forEach( check->{ - if ( !check.execute().isHealthy() ) - count.incrementAndGet(); - } ); - - looseCompounds.forEach( lc->{ - lc.getHealthChecks().forEach( ( k, check ) -> { - if ( !check.execute().isHealthy() ) - { - count.incrementAndGet(); - } - } ); - } ); - - ResultBuilder rb = Result.builder(); - if ( count.get() > 3 ) - { - rb.unhealthy().withDetail( RATING, SummaryRating.red ); - } - else if ( count.get() > 0 ) - { - rb.unhealthy().withDetail( RATING, SummaryRating.yellow ); - } - else - { - rb.healthy(); - } - - rb.withDetail( UNHEALTHY_COUNT, count.get() ); - - return rb.build(); - } -} diff --git a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/jvm/IndyJVMInstrumentation.java b/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/jvm/IndyJVMInstrumentation.java deleted file mode 100644 index 358bde5003..0000000000 --- a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/jvm/IndyJVMInstrumentation.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.jvm; - -import com.codahale.metrics.MetricRegistry; -import com.codahale.metrics.jvm.BufferPoolMetricSet; -import com.codahale.metrics.jvm.CachedThreadStatesGaugeSet; -import com.codahale.metrics.jvm.ClassLoadingGaugeSet; -import com.codahale.metrics.jvm.FileDescriptorRatioGauge; -import com.codahale.metrics.jvm.GarbageCollectorMetricSet; -import com.codahale.metrics.jvm.MemoryUsageGaugeSet; -import com.codahale.metrics.jvm.ThreadStatesGaugeSet; - -import java.lang.management.ManagementFactory; -import java.util.concurrent.TimeUnit; - -import static com.codahale.metrics.MetricRegistry.name; - -/** - * Created by xiabai on 3/10/17. - */ -public class IndyJVMInstrumentation -{ - private static final String JVM_MEMORY = "jvm.memory"; - - private static final String JVM_GARBAGE = "jvm.garbage"; - - private static final String JVM_THREADS = "jvm.threads"; - - private static final String JVM_FILES = "jvm.files"; - - private static final String JVM_BUFFERS = "jvm.buffers"; - - private static final String JVM_CLASSLOADING = "jvm.classloading"; - - public static void registerJvmMetric( String nodePrefix, MetricRegistry registry ) - { - registry.register( name( nodePrefix, JVM_MEMORY ), new MemoryUsageGaugeSet() ); - registry.register( name( nodePrefix, JVM_GARBAGE ), new GarbageCollectorMetricSet() ); - registry.register( name( nodePrefix, JVM_THREADS ), new CachedThreadStatesGaugeSet( 60, TimeUnit.SECONDS )); - registry.register( name( nodePrefix, JVM_FILES ), new FileDescriptorRatioGauge() ); - registry.register( name( nodePrefix, JVM_CLASSLOADING ), new ClassLoadingGaugeSet() ); - registry.register( name( nodePrefix, JVM_BUFFERS ), - new BufferPoolMetricSet( ManagementFactory.getPlatformMBeanServer() ) ); - } -} diff --git a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/system/StoragePathProvider.java b/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/system/StoragePathProvider.java deleted file mode 100644 index 1c988ebb2d..0000000000 --- a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/system/StoragePathProvider.java +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.system; - -import java.io.File; - -public interface StoragePathProvider -{ - File getStoragePath(); -} diff --git a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/system/SystemGaugesSet.java b/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/system/SystemGaugesSet.java deleted file mode 100644 index 9705bbe037..0000000000 --- a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/system/SystemGaugesSet.java +++ /dev/null @@ -1,123 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.system; - -import com.codahale.metrics.Gauge; -import com.codahale.metrics.Metric; -import com.codahale.metrics.MetricSet; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Inject; -import javax.inject.Named; -import java.io.File; -import java.lang.management.ManagementFactory; -import java.lang.management.OperatingSystemMXBean; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -/** - * A set of gauges for system gauges, including stats on cpu, process, physical mem, swap mem. - */ -@ApplicationScoped -@Named -public class SystemGaugesSet - implements MetricSet -{ - private final Logger logger = LoggerFactory.getLogger( this.getClass() ); - - @Inject - private StoragePathProvider storagePathProvider; - - private final OperatingSystemMXBean operatingSystemMXBean; - - public SystemGaugesSet() - { - this( ManagementFactory.getOperatingSystemMXBean() ); - } - - public SystemGaugesSet( OperatingSystemMXBean mxBean ) - { - this.operatingSystemMXBean = mxBean; - } - - public Map getMetrics() - { - if ( !( operatingSystemMXBean instanceof com.sun.management.OperatingSystemMXBean ) ) - { - return Collections.emptyMap(); - } - - final com.sun.management.OperatingSystemMXBean osMxBean = - (com.sun.management.OperatingSystemMXBean) operatingSystemMXBean; - - final Map gauges = new HashMap<>(); - - try - { - gauges.put( "process.cpu.load", (Gauge) osMxBean::getProcessCpuLoad ); - gauges.put( "system.cpu.load", (Gauge) osMxBean::getSystemCpuLoad ); - gauges.put( "system.load.avg", (Gauge) osMxBean::getSystemLoadAverage ); - gauges.put( "process.cpu.time.ms", (Gauge) () -> osMxBean.getProcessCpuTime() / 1000 ); - - gauges.put( "mem.total.swap", (Gauge) osMxBean::getTotalSwapSpaceSize ); - gauges.put( "mem.total.physical", (Gauge) osMxBean::getTotalPhysicalMemorySize ); - gauges.put( "mem.free.physical", (Gauge) osMxBean::getFreePhysicalMemorySize ); - gauges.put( "mem.free.swap", (Gauge) osMxBean::getFreeSwapSpaceSize ); - } - catch ( Throwable e ) - { - logger.warn( "Cannot get system level metrics. Reason: {}", e.getMessage() ); - } - - try - { - final File storePath = getIndyStorageDir(); - if ( storePath.exists() && storePath.isDirectory() ) - { - gauges.put( "store.indy.total", (Gauge) storePath::getTotalSpace ); - gauges.put( "store.indy.usable", (Gauge) storePath::getUsableSpace ); - } - else - { - logger.warn( "Cannot trace indy storage usage because storage path {} not defined.", - storePath.getCanonicalPath() ); - } - } - catch ( Throwable e ) - { - logger.warn( "Cannot trace indy storage usage. Reason: {}", e.getMessage() ); - } - - return Collections.unmodifiableMap( gauges ); - - } - - private File getIndyStorageDir() - { - if ( storagePathProvider != null && storagePathProvider.getStoragePath() != null ) - { - return storagePathProvider.getStoragePath(); - } - - // if indy config for storage path not defined, we use docker defined one. - final String DEFAULT_STORAGE_DIR = "/var/lib/indy/storage"; - return new File( DEFAULT_STORAGE_DIR ); - } - -} diff --git a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/util/NameUtils.java b/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/util/NameUtils.java deleted file mode 100644 index 15db6ae113..0000000000 --- a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/util/NameUtils.java +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.util; - -import org.apache.commons.lang3.ClassUtils; - -public class NameUtils -{ - private static final int DEFAULT_LEN = 40; - - public static String getAbbreviatedName( Class cls ) - { - return ClassUtils.getAbbreviatedName( cls, DEFAULT_LEN ); - } -} diff --git a/subsys/metrics/pom.xml b/subsys/metrics/pom.xml index d9037171e9..5cc23716c8 100644 --- a/subsys/metrics/pom.xml +++ b/subsys/metrics/pom.xml @@ -18,21 +18,50 @@ --> - indy-subsystems org.commonjava.indy - 2.5.0-SNAPSHOT + indy-subsystems + 2.5.4.2-SNAPSHOT 4.0.0 indy-subsys-metrics - Indy :: Subsystems :: Metrics - pom + + + org.commonjava.util + o11yphant-metrics-core + + + org.apache.commons + commons-lang3 + + + org.commonjava.indy + indy-api + + + + + + + maven-assembly-plugin + + + confset + + single + + package + + + confset + + + + + + + - - core - reporter - prometheus - - + \ No newline at end of file diff --git a/subsys/metrics/prometheus/pom.xml b/subsys/metrics/prometheus/pom.xml deleted file mode 100644 index 66fd59a8ae..0000000000 --- a/subsys/metrics/prometheus/pom.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - indy-subsys-metrics - org.commonjava.indy - 2.5.0-SNAPSHOT - - 4.0.0 - - indy-subsys-metrics-prometheus - - - - io.prometheus - simpleclient_dropwizard - - - io.prometheus - simpleclient_servlet - - - org.commonjava.indy - indy-subsys-metrics-core - - - org.commonjava.indy - indy-subsys-jaxrs - - - javax.enterprise - cdi-api - provided - - - org.commonjava.indy - indy-subsys-flatfile - - - org.commonjava.util - http-testserver - - - - \ No newline at end of file diff --git a/subsys/metrics/prometheus/src/main/java/org/commonjava/indy/metrics/prometheus/IndySampleBuilder.java b/subsys/metrics/prometheus/src/main/java/org/commonjava/indy/metrics/prometheus/IndySampleBuilder.java deleted file mode 100644 index 98cd308185..0000000000 --- a/subsys/metrics/prometheus/src/main/java/org/commonjava/indy/metrics/prometheus/IndySampleBuilder.java +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.prometheus; - -import io.prometheus.client.Collector; -import io.prometheus.client.dropwizard.samplebuilder.DefaultSampleBuilder; - -import java.util.ArrayList; -import java.util.List; - -public class IndySampleBuilder - extends DefaultSampleBuilder -{ - private static final String NODE_NAME_LABEL = "node"; - - private String nodeName; - - public IndySampleBuilder( String nodeName ) - { - super(); - this.nodeName = nodeName; - } - - @Override - public Collector.MetricFamilySamples.Sample createSample( final String dropwizardName, final String nameSuffix, - final List additionalLabelNames, - final List additionalLabelValues, - final double value ) - { - List labelNames = new ArrayList( additionalLabelNames ); - labelNames.add( NODE_NAME_LABEL ); - - List labelValues = new ArrayList( additionalLabelValues ); - labelValues.add( nodeName ); - - return super.createSample( dropwizardName, nameSuffix, labelNames, labelValues, value ); - } -} diff --git a/subsys/metrics/prometheus/src/main/java/org/commonjava/indy/metrics/prometheus/PrometheusDeployment.java b/subsys/metrics/prometheus/src/main/java/org/commonjava/indy/metrics/prometheus/PrometheusDeployment.java deleted file mode 100644 index 61b02133cb..0000000000 --- a/subsys/metrics/prometheus/src/main/java/org/commonjava/indy/metrics/prometheus/PrometheusDeployment.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.prometheus; - -import com.codahale.metrics.MetricRegistry; -import io.prometheus.client.CollectorRegistry; -import io.prometheus.client.dropwizard.DropwizardExports; -import io.prometheus.client.exporter.MetricsServlet; -import io.undertow.servlet.Servlets; -import io.undertow.servlet.api.DeploymentInfo; -import io.undertow.servlet.api.ServletInfo; -import org.commonjava.indy.bind.jaxrs.IndyDeploymentProvider; -import org.commonjava.indy.bind.jaxrs.metrics.IndyHealthCheckServletContextListener; -import org.commonjava.indy.metrics.conf.IndyMetricsConfig; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Inject; -import javax.ws.rs.core.Application; - -@ApplicationScoped -public class PrometheusDeployment - extends IndyDeploymentProvider -{ - private static final String PROMETHEUS_REPORTER = "prometheus"; - - private final Logger logger = LoggerFactory.getLogger( getClass() ); - - @Inject - private IndyMetricsConfig config; - - @Inject - private MetricRegistry metricRegistry; - - @Override - public DeploymentInfo getDeploymentInfo( String contextRoot, Application application ) - { - if ( !config.isMetricsEnabled() || !config.getReporter().contains( PROMETHEUS_REPORTER ) ) - { - return null; - } - - CollectorRegistry.defaultRegistry.register( new DropwizardExports( metricRegistry, new IndySampleBuilder( config.getNodePrefix() ) ) ); - - final ServletInfo servlet = - Servlets.servlet( "prometheus-metrics", MetricsServlet.class ).addMapping( "/metrics" ); - - final DeploymentInfo di = new DeploymentInfo().addListener( - Servlets.listener( IndyHealthCheckServletContextListener.class ) ) - .setContextPath( contextRoot ) - .addServlet( servlet ) - .setDeploymentName( "Prometheus Metrics Deployment" ) - .setClassLoader( ClassLoader.getSystemClassLoader() ); - - logger.info( "Returning deployment info for Prometheus metrics servlet" ); - return di; - } -} diff --git a/subsys/metrics/reporter/pom.xml b/subsys/metrics/reporter/pom.xml deleted file mode 100644 index 7c4a6133ae..0000000000 --- a/subsys/metrics/reporter/pom.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - - - indy-subsys-metrics - org.commonjava.indy - 2.5.0-SNAPSHOT - - 4.0.0 - - indy-subsys-metrics-reporter - - - - org.commonjava.indy - indy-subsys-metrics-core - - - io.dropwizard.metrics - metrics-graphite - - - io.dropwizard.metrics - metrics-servlets - - - javax.enterprise - cdi-api - provided - - - io.github.hengyunabc - zabbix-sender - - - io.github.hengyunabc - zabbix-api - - - org.commonjava.indy - indy-subsys-http - - - org.commonjava.indy - indy-subsys-flatfile - - - org.commonjava.util - http-testserver - - - org.elasticsearch - metrics-elasticsearch-reporter - - - - - - - maven-assembly-plugin - - - confset - - single - - package - - - confset - - - - - - - - - \ No newline at end of file diff --git a/subsys/metrics/reporter/src/main/conf/conf.d/elasticsearch.properties b/subsys/metrics/reporter/src/main/conf/conf.d/elasticsearch.properties deleted file mode 100644 index 0a81578799..0000000000 --- a/subsys/metrics/reporter/src/main/conf/conf.d/elasticsearch.properties +++ /dev/null @@ -1,21 +0,0 @@ -# -# Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) -# -# 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. -# - -elasticsearch.server.url=http://10.66.136.85:9200/_bulk -elasticsearch.index=logs-%date{yyyy-MM-dd} -elasticsearch.type=tester -elasticsearch.loggerName=indy-test -elasticsearch.enable=false diff --git a/subsys/metrics/reporter/src/main/conf/conf.d/metrics.conf b/subsys/metrics/reporter/src/main/conf/conf.d/metrics.conf deleted file mode 100644 index 09c4a87af8..0000000000 --- a/subsys/metrics/reporter/src/main/conf/conf.d/metrics.conf +++ /dev/null @@ -1,119 +0,0 @@ -[metrics] -enabled = false -reporter.enabled = true - -# Specify node prefix (on cluster). This prefix will be prepended to all metric names. Default empty. -# -# node.prefix = - -# Enable kojiji metrics. Default false. -# -koji.enabled = true - -# Enable Infinispan metrics. Default false. -# -ispn.enabled = true - -# Specify ISPN cache gauges. This works only if ispn.enabled is true. Default All. Names are case sensitive. -# -#ispn.gauges = CurrentNumberOfEntries,CurrentNumberOfEntriesInMemory,\ -#TotalNumberOfEntries,Hits,Misses,Retrievals,Evictions - -# Enable pathDB metrics. Default true. -# -#pathdb.enabled = true - -# Specify pathDB operations. Default all. -# -#pathdb.operations = exists,getStorageFile,getFileSystemContaining - -# Enable Galley to measure artifact downloading time. Default false. -# -measure.transport = true - -# Specify a repository list for those to measure artifact downloading time. This works only if -# measure.transport is true. -# -# Format: comma split item of "::" -# The default ":" is "maven:remote" if ignored. You may use wildcard '*' so those would be measured -# as a whole, e.g., koji-* -# -# Example: measure.repos = maven:remote:test,public,koji-* -# -#measure.transport.repos = central - -# List of reporters (comma-separated). At present, Indy supports reporters: -# reporter = graphite,zabbix,elasticsearch,console -# -reporter = console - -############################################ -# Console reporter options -############################################ -console.reporter.period = 30 - -############################################ -# GraphiteDB reporter options -############################################ - -# This is the hostname of GraphiteDB. -graphite.hostname = localhost -# Port of GraphiteDB. -graphite.port = 2003 -# Specific prefix for GraphiteDB Item -graphite.reporter.prefix = local.one -# Indy's metrics item have three type: simple,jvm,healthcheck -# Period of simple item for reporting -graphite.reporter.simple.period = 30 -# Period of jvm item for reporting -graphite.reporter.jvm.period = 300 -# Period of healthcheck item for reporting -graphite.reporter.healthcheck.period = 600 - -############################################ -# Zabbix reporter options -############################################ - -#The Zabbix API is a web based API and is shipped as part of the web frontend -# API URL used to access Zabbix from a web browser -zabbix.api.url = example.com -#Zabbix username for login Zabbix server(Zabbix API) -zabbix.user = test -#Zabbix password for login Zabbix server(Zabbix API) -zabbix.pwd = test -# Zabbix sender is a command line utility that may be used to send performance data to Zabbix server for processing. -# Host of Zabbix server for Zabbix sender -zabbix.sender.host = 192.168.1.1 -# Port of Zabbix server for Zabbix sender -zabbix.sender.port = 10051 -# This is the hostname of the current Indy instance, it also is host name of Zabbix monitoring -zabbix.indy.host = example.com -# Specific prefix for Zabbix Item -zabbix.reporter.prefix = local.one -# Indy's metrics item have three type: simple,jvm,healthcheck. -# Those type have different period of reporter -# Period of simple item for reporting -zabbix.reporter.simple.period = 30 -# Period of jvm item for reporting -zabbix.reporter.jvm.period = 300 -# Period of healthcheck item for reporting -zabbix.reporter.healthcheck.period = 600 - -############################################ -# Elasticsearch reporter options -############################################ - -# Specific prefix for Elasticsearch -elk.reporter.prefix = local.one -# Indy's metrics item have three type: simple,jvm,healthcheck. -# Those type have different period of reporter -# Period of simple item for reporting -elk.reporter.simple.period = 30 -# Period of jvm item for reporting -elk.reporter.jvm.period = 300 -# Period of healthcheck item for reporting -elk.reporter.healthcheck.period = 600 -#The index name to index in Elasticsearch -elk.reporter.index = local.one.name -#Configure an array of hosts to send data to. -elk.reporter.hosts = localhost:9200 \ No newline at end of file diff --git a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/IndyMetricsManager.java b/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/IndyMetricsManager.java deleted file mode 100644 index b36c532075..0000000000 --- a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/IndyMetricsManager.java +++ /dev/null @@ -1,391 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics; - -import com.codahale.metrics.Gauge; -import com.codahale.metrics.Meter; -import com.codahale.metrics.MetricRegistry; -import com.codahale.metrics.Timer; -import com.codahale.metrics.health.HealthCheck; -import com.codahale.metrics.health.HealthCheckRegistry; -import org.commonjava.cdi.util.weft.ThreadContext; -import org.commonjava.indy.measure.annotation.MetricWrapper; -import org.commonjava.indy.measure.annotation.MetricWrapperEnd; -import org.commonjava.indy.measure.annotation.MetricWrapperNamed; -import org.commonjava.indy.measure.annotation.MetricWrapperStart; -import org.commonjava.indy.metrics.conf.IndyMetricsConfig; -import org.commonjava.indy.metrics.healthcheck.IndyCompoundHealthCheck; -import org.commonjava.indy.metrics.healthcheck.IndyHealthCheck; -import org.commonjava.indy.metrics.reporter.ReporterIntializer; -import org.commonjava.maven.galley.config.TransportMetricConfig; -import org.commonjava.maven.galley.model.Location; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.annotation.PostConstruct; -import javax.enterprise.context.ApplicationScoped; -import javax.enterprise.inject.Instance; -import javax.enterprise.inject.Produces; -import javax.inject.Inject; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.concurrent.ConcurrentHashMap; -import java.util.function.Supplier; - -import static com.codahale.metrics.MetricRegistry.name; -import static org.apache.commons.lang.StringUtils.isNotBlank; -import static org.commonjava.indy.IndyContentConstants.NANOS_PER_MILLISECOND; -import static org.commonjava.indy.metrics.IndyMetricsConstants.DEFAULT; -import static org.commonjava.indy.metrics.IndyMetricsConstants.EXCEPTION; -import static org.commonjava.indy.metrics.IndyMetricsConstants.SKIP_METRIC; -import static org.commonjava.indy.metrics.IndyMetricsConstants.TIMER; -import static org.commonjava.indy.metrics.IndyMetricsConstants.getDefaultName; -import static org.commonjava.indy.metrics.RequestContextHelper.CUMULATIVE_COUNTS; -import static org.commonjava.indy.metrics.RequestContextHelper.CUMULATIVE_TIMINGS; -import static org.commonjava.indy.metrics.RequestContextHelper.IS_METERED; -import static org.commonjava.indy.metrics.jvm.IndyJVMInstrumentation.registerJvmMetric; -import static org.commonjava.indy.model.core.StoreType.remote; -import static org.commonjava.indy.pkg.maven.model.MavenPackageTypeDescriptor.MAVEN_PKG_KEY; - -/** - * Created by xiabai on 2/27/17. - */ -@ApplicationScoped -public class IndyMetricsManager -{ - - public static final String METRIC_LOGGER_NAME = "org.commonjava.indy.metrics"; - - private static final Logger logger = LoggerFactory.getLogger( IndyMetricsManager.class ); - - @Inject - private MetricRegistry metricRegistry; - - @Inject - private HealthCheckRegistry healthCheckRegistry; - - @Inject - private Instance indyHealthChecks; - - @Inject - private Instance indyCompoundHealthChecks; - - @Inject - ReporterIntializer reporter; - - @Inject - private Instance metricSetProviderInstances; - - @Inject - private IndyMetricsConfig config; - - private TransportMetricConfig transportMetricConfig; - - private Random random = new Random(); - - @Produces - public TransportMetricConfig getTransportMetricConfig() - { - return transportMetricConfig; - } - - @PostConstruct - public void init() - { - if ( !config.isMetricsEnabled() ) - { - logger.info( "Indy metrics subsystem not enabled" ); - return; - } - - logger.info( "Init metrics subsystem..." ); - - registerJvmMetric( config.getNodePrefix(), metricRegistry ); - - // Health checks - indyHealthChecks.forEach( hc -> { - logger.info( "Registering health check: {}", hc.getName() ); - healthCheckRegistry.register( hc.getName(), hc ); - } ); - - indyCompoundHealthChecks.forEach( cc-> { - Map healthChecks = cc.getHealthChecks(); - logger.info( "Registering {} health checks from set: {}", healthChecks.size(), cc.getClass().getSimpleName() ); - healthChecks.forEach( (name,check)->{ - logger.info( "Registering health check: {}", name ); - healthCheckRegistry.register( name, check ); - } ); - } ); - - metricSetProviderInstances.forEach( ( provider ) -> provider.registerMetricSet( metricRegistry ) ); - - if ( config.isMeasureTransport() ) - { - setUpTransportMetricConfig(); - } - } - - public void startReporter() throws Exception - { - if ( !config.isMetricsEnabled() ) - { - return; - } - logger.info( "Start metrics reporters" ); - reporter.initReporter( metricRegistry ); - } - - private void setUpTransportMetricConfig() - { - logger.info( "Adding transport metrics to registry: {}", metricRegistry ); - final String measureRepos = config.getMeasureTransportRepos(); - final List list = new ArrayList<>(); - if ( isNotBlank( measureRepos ) ) - { - String[] toks = measureRepos.split( "," ); - for ( String s : toks ) - { - s = s.trim(); - if ( isNotBlank( s ) ) - { - if ( s.indexOf( ":" ) < 0 ) - { - s = MAVEN_PKG_KEY + ":" + remote.singularEndpointName() + ":" + s; // use default - } - list.add( s ); - } - } - } - transportMetricConfig = new TransportMetricConfig() - { - @Override - public boolean isEnabled() - { - return true; - } - - @Override - public String getNodePrefix() - { - return config.getNodePrefix(); - } - - @Override - public String getMetricUniqueName( Location location ) - { - String locationName = location.getName(); - for ( String s : list ) - { - if ( s.equals( locationName ) ) - { - return normalizeName( s ); - } - - if ( s.endsWith( "*" ) ) // handle wildcard - { - String prefix = s.substring( 0, s.length() - 1 ); - if ( locationName.startsWith( prefix ) ) - { - return normalizeName( prefix ); - } - } - } - return null; - } - }; - } - - private String normalizeName( String name ) - { - return name.replaceAll( ":", "." ); - } - - public boolean isMetered( Supplier meteringOverride ) - { - int meterRatio = config.getMeterRatio(); - if ( meterRatio <= 1 || random.nextInt() % meterRatio == 0 ) - { - return true; - } - else if ( meteringOverride != null && Boolean.TRUE.equals( meteringOverride.get() ) ) - { - return true; - } - - return false; - } - - @MetricWrapperStart - public Timer.Context startTimer( @MetricWrapperNamed String name ) - { - Timer.Context tctx = this.metricRegistry.timer( name ).time(); - ThreadContext ctx = ThreadContext.getContext( true ); - ctx.put( TIMER + name, tctx ); - - return tctx; - } - - @MetricWrapperEnd - public long stopTimer( @MetricWrapperNamed String name ) - { - ThreadContext ctx = ThreadContext.getContext( false ); - if ( ctx == null ) - { - return 0; - } - - Timer.Context tctx = (Timer.Context) ctx.get( TIMER + name ); - if ( tctx != null ) - { - return tctx.stop(); - } - - return 0; - } - - public Meter getMeter( String name ) - { - return metricRegistry.meter( name ); - } - - public void accumulate( String name, final double elapsed ) - { - ThreadContext ctx = ThreadContext.getContext( true ); - if ( ctx != null ) - { - if ( !checkMetered( ctx ) ) - { - return; - } - - ctx.putIfAbsent( CUMULATIVE_TIMINGS, new ConcurrentHashMap<>() ); - Map timingMap = (Map) ctx.get( CUMULATIVE_TIMINGS ); - - timingMap.merge( name, elapsed, ( existingVal, newVal ) -> existingVal + newVal ); - - ctx.putIfAbsent( CUMULATIVE_COUNTS, new ConcurrentHashMap<>() ); - Map countMap = - (Map) ctx.get( CUMULATIVE_COUNTS ); - - countMap.merge( name, 1, ( existingVal, newVal ) -> existingVal + 1 ); - } - } - - @MetricWrapper - public T wrapWithStandardMetrics( final Supplier method, @MetricWrapperNamed final Supplier classifier ) - { -// if ( logger.isDebugEnabled() ) -// { -// Throwable t = new Throwable(); -// logger.info( "Wrapping with standard metrics at the following location:", t ); -// } - - String name = classifier.get(); - if ( !checkMetered() || SKIP_METRIC.equals( name ) ) - { - return method.get(); - } - - String nodePrefix = config.getNodePrefix(); - - String metricName = name( nodePrefix, name ); - String startName = name( metricName, "starts" ); - - String timerName = name( metricName, TIMER ); - String errorName = name( name, EXCEPTION ); - String eClassName = null; - - Timer.Context timer = startTimer( timerName ); - logger.trace( "START: {} ({})", metricName, timer ); - - long start = System.nanoTime(); - try - { - mark( Arrays.asList( startName ) ); - - return method.get(); - } - catch ( Throwable e ) - { - eClassName = name( name, EXCEPTION, e.getClass().getSimpleName() ); - mark( Arrays.asList( errorName, eClassName ) ); - - throw e; - } - finally - { - stopTimers( Collections.singletonMap( timerName, timer ) ); - mark( Arrays.asList( metricName ) ); - - double elapsed = (System.nanoTime() - start) / NANOS_PER_MILLISECOND; - accumulate( metricName, elapsed ); - } - } - - public boolean checkMetered() - { - return checkMetered( null ); - } - - public boolean checkMetered( ThreadContext ctx ) - { - if ( ctx == null ) - { - ctx = ThreadContext.getContext( false ); - } - - return ( ctx == null || ((Boolean) ctx.getOrDefault( IS_METERED, Boolean.TRUE ) ) ); - } - - public void stopTimers( final Map timers ) - { - if ( timers != null ) - { - timers.forEach( ( name, timer ) -> stopTimer( name ) ); - } - } - - public void mark( final Collection metricNames ) - { - metricNames.forEach( metricName -> { - getMeter( metricName ).mark(); - } ); - } - - public void addGauges( Class className, String method, Map> gauges ) - { - String defaultName = getDefaultName( className, method ); - gauges.forEach( ( k, v ) -> { - String name = IndyMetricsConstants.getName( config.getNodePrefix(), DEFAULT, defaultName, k ); - metricRegistry.gauge( name, () -> v ); - } ); - } - - public MetricRegistry getMetricRegistry() - { - return metricRegistry; - } - - public IndyMetricsConfig getConfig() - { - return config; - } -} diff --git a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/MetricsConstants.java b/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/MetricsConstants.java deleted file mode 100644 index 7721783a6c..0000000000 --- a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/MetricsConstants.java +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics; - -public class MetricsConstants -{ - public static final String METRICS_PHASE = "metrics-phase"; - - public static final String PRELIMINARY_METRICS = "preliminary"; - - public static final String FINAL_METRICS = "final"; - -} diff --git a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/conf/IndyMetricsConfig.java b/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/conf/IndyMetricsConfig.java deleted file mode 100644 index 7342dbba79..0000000000 --- a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/conf/IndyMetricsConfig.java +++ /dev/null @@ -1,575 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.conf; - -import org.commonjava.indy.conf.IndyConfigInfo; -import org.commonjava.propulsor.config.annotation.ConfigName; -import org.commonjava.propulsor.config.annotation.SectionName; - -import javax.enterprise.context.ApplicationScoped; -import java.io.InputStream; - -import static org.commonjava.indy.metrics.conf.IndyMetricsConfig.SECTION; - -/** - * Created by xiabai on 3/17/17. - */ -@SectionName( SECTION ) -@ApplicationScoped -public class IndyMetricsConfig - implements IndyConfigInfo -{ - public static final String SECTION = "metrics"; - - public final static String INDY_METRICS_NODE_PREFIX = "node.prefix"; - - private final static String INDY_METRICS_REPORTER = "reporter"; - - private final static String INDY_METRICS_REPORTER_CONSOLE_PERIOD = "console.reporter.period"; - - private final static String INDY_METRICS_REPORTER_GRPHITEREPORTER_HOSTNAME = "graphite.hostname"; - - private final static String INDY_METRICS_REPORTER_GRPHITEREPORTER_PORT = "graphite.port"; - - private final static String INDY_METRICS_REPORTER_GRPHITEREPORTER_PREFIX = "graphite.reporter.prefix"; - - private final static String INDY_METRICS_REPORTER_GRPHITEREPORTER_SIMPLE_PERIOD = "graphite.reporter.simple.period"; - - private final static String INDY_METRICS_REPORTER_GRPHITEREPORTER_JVM_PERIOD = "graphite.reporter.jvm.period"; - - private final static String INDY_METRICS_REPORTER_GRPHITEREPORTER_HEALTHCHECK_PERIOD = - "graphite.reporter.healthcheck.period"; - - private final static String INDY_METRICS_ISENABLED = "enabled"; - - private static final String INDY_METRICS_METER_RATIO = "meter.ratio"; - - private final static String INDY_METRICS_ISPN_ENABLED = "ispn.enabled"; - - private final static String INDY_METRICS_ISPN_GAUGES = "ispn.gauges"; - - private final static String INDY_METRICS_REPORTER_ISENABLED = "reporter.enabled"; - - private final static String INDY_METRICS_REPORTER_ZABBIXREPORTER_API_HOST_URL = "zabbix.api.url"; - - private final static String INDY_METRICS_REPORTER_ZABBIXREPORTER_HOST_PORT = "zabbix.sender.port"; - - private final static String INDY_METRICS_REPORTER_ZABBIXREPORTER_HOST = "zabbix.sender.host"; - - private final static String INDY_METRICS_REPORTER_ZABBIXREPORTER_USER = "zabbix.user"; - - private final static String INDY_METRICS_REPORTER_ZABBIXREPORTER_PWD = "zabbix.pwd"; - - private final static String INDY_METRICS_REPORTER_ZABBIXREPORTER_LOCAL_HOSTNAME = "zabbix.indy.host"; - - private final static String INDY_METRICS_REPORTER_ZABBIXREPORTER_PREFIX = "zabbix.reporter.prefix"; - - private final static String INDY_METRICS_REPORTER_ZABBIXREPORTER_SIMPLE_PERIOD = "zabbix.reporter.simple.period"; - - private final static String INDY_METRICS_REPORTER_ZABBIXREPORTER_JVM_PERIOD = "zabbix.reporter.jvm.period"; - - private final static String INDY_METRICS_REPORTER_ZABBIXREPORTER_HEALTHCHECK_PERIOD = - "zabbix.reporter.healthcheck.period"; - - private final static String INDY_METRICS_REPORTER_ELKREPORTER_PREFIX = "elk.reporter.prefix"; - - private final static String INDY_METRICS_REPORTER_ELKREPORTER_SIMPLE_PERIOD = "elk.reporter.simple.period"; - - private final static String INDY_METRICS_REPORTER_ELKREPORTER_JVM_PERIOD = "elk.reporter.jvm.period"; - - private final static String INDY_METRICS_REPORTER_ELKREPORTER_HEALTHCHECK_PERIOD = "elk.reporter.healthcheck.period"; - - private final static String INDY_METRICS_REPORTER_ELKREPORTER_INDEX = "elk.reporter.index"; - - private final static String INDY_METRICS_REPORTER_ELKREPORTER_HOSTS = "elk.reporter.hosts"; - - private static final String INDY_METRICS_MEASURE_TRANSPORT = "measure.transport"; - - private static final String INDY_METRICS_MEASURE_TRANSPORT_REPOS = "measure.transport.repos"; - - private final static String INDY_METRICS_KOJI_ENABLED = "koji.enabled"; - - private final static String INDY_METRICS_PATH_DB_ENABLED = "pathdb.enabled"; - - private final static String INDY_METRICS_PATH_DB_OPERATIONS = "pathdb.operations"; - - private static final int DEFAULT_METER_RATIO = 1; - - private boolean ispnMetricsEnabled; - - private boolean pathDBMetricsEnabled = true; // default - - private String pathDBMetricsOperations; - - private String ispnGauges; - - private boolean measureTransport; - - private String measureTransportRepos; - - private int consolePeriod = 30; // default - - private String elkPrefix; - - private int elkSimplePriod; - - private int elkJVMPriod; - - private int elkHealthCheckPriod; - - private String elkHosts; - - private String elkIndex; - - private String zabbixPrefix; - - private int zabbixSimplePriod; - - private int zabbixJVMPriod; - - private int zabbixHealthcheckPeriod; - - private String zabbixApiHostUrl; - - private String zabbixHost; - - private int zabbixPort; - - private String zabbixUser; - - private String zabbixPwd; - - private String zabbixLocalHostName; - - private String reporter; - - private String grphiterHostName; - - private int grphiterPort; - - private String grphiterPrefix; - - private int grphiterSimplePriod; - - private int grphiterJVMPriod; - - private int grphiterHealthcheckPeriod; - - private boolean metricsEnabled; - - private boolean reporterEnabled; - - private boolean kojiMetricEnabled; - - private String nodePrefix; - - private Integer meterRatio; - - public boolean isMeasureTransport() - { - return measureTransport; - } - - @ConfigName( INDY_METRICS_NODE_PREFIX ) - public void setNodePrefix( String nodePrefix ) - { - this.nodePrefix = nodePrefix; - } - - public String getNodePrefix() - { - return nodePrefix; - } - - @ConfigName( INDY_METRICS_MEASURE_TRANSPORT ) - public void setMeasureTransport( boolean measureTransport ) - { - this.measureTransport = measureTransport; - } - - public String getMeasureTransportRepos() - { - return measureTransportRepos; - } - - @ConfigName( INDY_METRICS_MEASURE_TRANSPORT_REPOS ) - public void setMeasureTransportRepos( String measureTransportRepos ) - { - this.measureTransportRepos = measureTransportRepos; - } - - public int getConsolePeriod() - { - return consolePeriod; - } - - @ConfigName( INDY_METRICS_REPORTER_CONSOLE_PERIOD ) - public void setConsolePeriod( int consolePeriod ) - { - this.consolePeriod = consolePeriod; - } - - public String getElkPrefix() - { - return elkPrefix; - } - - @ConfigName( INDY_METRICS_REPORTER_ELKREPORTER_PREFIX ) - public void setElkPrefix( String elkPrefix ) - { - this.elkPrefix = elkPrefix; - } - - public int getElkSimplePriod() - { - return elkSimplePriod; - } - - @ConfigName( INDY_METRICS_REPORTER_ELKREPORTER_SIMPLE_PERIOD ) - public void setElkSimplePriod( int elkSimplePriod ) - { - this.elkSimplePriod = elkSimplePriod; - } - - public int getElkJVMPriod() - { - return elkJVMPriod; - } - - @ConfigName( INDY_METRICS_REPORTER_ELKREPORTER_JVM_PERIOD ) - public void setElkJVMPriod( int elkJVMPriod ) - { - this.elkJVMPriod = elkJVMPriod; - } - - public int getElkHealthCheckPriod() - { - return elkHealthCheckPriod; - } - - @ConfigName( INDY_METRICS_REPORTER_ELKREPORTER_HEALTHCHECK_PERIOD ) - public void setElkHealthCheckPriod( int elkHealthCheckPriod ) - { - this.elkHealthCheckPriod = elkHealthCheckPriod; - } - - public String getElkHosts() - { - return elkHosts; - } - - @ConfigName( INDY_METRICS_REPORTER_ELKREPORTER_HOSTS ) - public void setElkHosts( String elkHosts ) - { - this.elkHosts = elkHosts; - } - - public String getElkIndex() - { - return elkIndex; - } - - @ConfigName( INDY_METRICS_REPORTER_ELKREPORTER_INDEX ) - public void setElkIndex( String elkIndex ) - { - this.elkIndex = elkIndex; - } - - public String getZabbixPrefix() - { - return zabbixPrefix; - } - @ConfigName( INDY_METRICS_REPORTER_ZABBIXREPORTER_PREFIX ) - public void setZabbixPrefix( String zabbixPrefix ) - { - this.zabbixPrefix = zabbixPrefix; - } - - public int getZabbixSimplePriod() - { - return zabbixSimplePriod; - } - - @ConfigName( INDY_METRICS_REPORTER_ZABBIXREPORTER_SIMPLE_PERIOD ) - public void setZabbixSimplePriod( int zabbixSimplePriod ) - { - this.zabbixSimplePriod = zabbixSimplePriod; - } - - public int getZabbixJVMPriod() - { - return zabbixJVMPriod; - } - - @ConfigName( INDY_METRICS_REPORTER_ZABBIXREPORTER_JVM_PERIOD ) - public void setZabbixJVMPriod( int zabbixJVMPriod ) - { - this.zabbixJVMPriod = zabbixJVMPriod; - } - - public int getZabbixHealthcheckPeriod() - { - return zabbixHealthcheckPeriod; - } - - @ConfigName( INDY_METRICS_REPORTER_ZABBIXREPORTER_HEALTHCHECK_PERIOD ) - public void setZabbixHealthcheckPeriod( int zabbixHealthcheckPeriod ) - { - this.zabbixHealthcheckPeriod = zabbixHealthcheckPeriod; - } - - public String getZabbixApiHostUrl() - { - return zabbixApiHostUrl; - } - - @ConfigName( INDY_METRICS_REPORTER_ZABBIXREPORTER_API_HOST_URL ) - public void setZabbixApiHostUrl( String zabbixApiHostUrl ) - { - this.zabbixApiHostUrl = zabbixApiHostUrl; - } - - public String getZabbixHost() - { - return zabbixHost; - } - - @ConfigName( INDY_METRICS_REPORTER_ZABBIXREPORTER_HOST ) - public void setZabbixHost( String zabbixHost ) - { - this.zabbixHost = zabbixHost; - } - - public int getZabbixPort() - { - return zabbixPort; - } - - @ConfigName( INDY_METRICS_REPORTER_ZABBIXREPORTER_HOST_PORT ) - public void setZabbixPort( int zabbixPort ) - { - this.zabbixPort = zabbixPort; - } - - public String getZabbixUser() - { - return zabbixUser; - } - - @ConfigName( INDY_METRICS_REPORTER_ZABBIXREPORTER_USER ) - public void setZabbixUser( String zabbixUser ) - { - this.zabbixUser = zabbixUser; - } - - public String getZabbixPwd() - { - return zabbixPwd; - } - - @ConfigName( INDY_METRICS_REPORTER_ZABBIXREPORTER_PWD ) - public void setZabbixPwd( String zabbixPwd ) - { - this.zabbixPwd = zabbixPwd; - } - - public String getZabbixLocalHostName() - { - return zabbixLocalHostName; - } - - @ConfigName( INDY_METRICS_REPORTER_ZABBIXREPORTER_LOCAL_HOSTNAME ) - public void setZabbixLocalHostName( String zabbixLocalHostName ) - { - this.zabbixLocalHostName = zabbixLocalHostName; - } - - public boolean isReporterEnabled() - { - return reporterEnabled; - } - - @ConfigName( INDY_METRICS_REPORTER_ISENABLED ) - public void setReporterEnabled( boolean reporterEnabled ) - { - this.reporterEnabled = reporterEnabled; - } - - public boolean isMetricsEnabled() - { - return metricsEnabled; - } - - @ConfigName( INDY_METRICS_ISENABLED ) - public void setMetricsEnabled( boolean metricsEnabled ) - { - this.metricsEnabled = metricsEnabled; - } - - @ConfigName( INDY_METRICS_METER_RATIO ) - public void setMeterRatio( int meterRatio ) - { - this.meterRatio = meterRatio; - } - - public int getMeterRatio() - { - return meterRatio == null ? DEFAULT_METER_RATIO : meterRatio; - } - - public String getReporter() - { - return reporter; - } - - @ConfigName( INDY_METRICS_REPORTER ) - public void setReporter( String reporter ) - { - this.reporter = reporter; - } - - public String getGrphiterHostName() - { - return grphiterHostName; - } - - @ConfigName( INDY_METRICS_REPORTER_GRPHITEREPORTER_HOSTNAME ) - public void setGrphiterHostName( String grphiterHostName ) - { - this.grphiterHostName = grphiterHostName; - } - - public int getGrphiterPort() - { - return grphiterPort; - } - - @ConfigName( INDY_METRICS_REPORTER_GRPHITEREPORTER_PORT ) - public void setGrphiterPort( int grphiterPort ) - { - this.grphiterPort = grphiterPort; - } - - public String getGrphiterPrefix() - { - return grphiterPrefix; - } - - @ConfigName( INDY_METRICS_REPORTER_GRPHITEREPORTER_PREFIX ) - public void setGrphiterPrefix( String grphiterPrefix ) - { - this.grphiterPrefix = grphiterPrefix; - } - - public int getGrphiterSimplePriod() - { - return grphiterSimplePriod; - } - - @ConfigName( INDY_METRICS_REPORTER_GRPHITEREPORTER_SIMPLE_PERIOD ) - public void setGrphiterSimplePriod( int grphiterSimplePriod ) - { - this.grphiterSimplePriod = grphiterSimplePriod; - } - - public int getGrphiterJVMPriod() - { - return grphiterJVMPriod; - } - - @ConfigName( INDY_METRICS_REPORTER_GRPHITEREPORTER_JVM_PERIOD ) - public void setGrphiterJVMPriod( int grphiterJVMPriod ) - { - this.grphiterJVMPriod = grphiterJVMPriod; - } - - public int getGrphiterHealthcheckPeriod() - { - return grphiterHealthcheckPeriod; - } - - @ConfigName( INDY_METRICS_REPORTER_GRPHITEREPORTER_HEALTHCHECK_PERIOD ) - public void setGrphiterHealthcheckPeriod( int grphiterHealthcheckPeriod ) - { - this.grphiterHealthcheckPeriod = grphiterHealthcheckPeriod; - } - - @ConfigName( INDY_METRICS_KOJI_ENABLED ) - public void setKojiMetricEnabled( boolean kojiMetricEnabled ) - { - this.kojiMetricEnabled = kojiMetricEnabled; - } - - public boolean isKojiMetricEnabled() - { - return kojiMetricEnabled; - } - - public boolean isPathDBMetricsEnabled() - { - return pathDBMetricsEnabled; - } - - @ConfigName( INDY_METRICS_PATH_DB_ENABLED ) - public void setPathDBMetricsEnabled( boolean pathDBMetricsEnabled ) - { - this.pathDBMetricsEnabled = pathDBMetricsEnabled; - } - - public String getPathDBMetricsOperations() - { - return pathDBMetricsOperations; - } - - @ConfigName( INDY_METRICS_PATH_DB_OPERATIONS ) - public void setPathDBMetricsOperations( String pathDBMetricsOperations ) - { - this.pathDBMetricsOperations = pathDBMetricsOperations; - } - - @ConfigName( INDY_METRICS_ISPN_ENABLED ) - public void setIspnMetricsEnabled( boolean ispnMetricsEnabled ) - { - this.ispnMetricsEnabled = ispnMetricsEnabled; - } - - public boolean isIspnMetricsEnabled() - { - return ispnMetricsEnabled; - } - - @ConfigName( INDY_METRICS_ISPN_GAUGES ) - public void setIspnGauges( String ispnGauges ) - { - this.ispnGauges = ispnGauges; - } - - public String getIspnGauges() - { - return ispnGauges; - } - - public String getDefaultConfigFileName() - { - return "conf.d/metrics.conf"; - } - - public InputStream getDefaultConfig() - { - return Thread.currentThread().getContextClassLoader().getResourceAsStream( "default-metrics.conf" ); - } - -} diff --git a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/jaxrs/interceptor/MetricsInterceptor.java b/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/jaxrs/interceptor/MetricsInterceptor.java deleted file mode 100644 index fda47a27f4..0000000000 --- a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/jaxrs/interceptor/MetricsInterceptor.java +++ /dev/null @@ -1,143 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.jaxrs.interceptor; - -import com.codahale.metrics.Timer; -import org.commonjava.indy.measure.annotation.Measure; -import org.commonjava.indy.measure.annotation.MetricNamed; -import org.commonjava.indy.metrics.IndyMetricsManager; -import org.commonjava.indy.metrics.conf.IndyMetricsConfig; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.inject.Inject; -import javax.interceptor.AroundInvoke; -import javax.interceptor.Interceptor; -import javax.interceptor.InvocationContext; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static com.codahale.metrics.MetricRegistry.name; -import static org.commonjava.indy.IndyContentConstants.NANOS_PER_MILLISECOND; -import static org.commonjava.indy.metrics.IndyMetricsConstants.DEFAULT; -import static org.commonjava.indy.metrics.IndyMetricsConstants.EXCEPTION; -import static org.commonjava.indy.metrics.IndyMetricsConstants.METER; -import static org.commonjava.indy.metrics.IndyMetricsConstants.TIMER; -import static org.commonjava.indy.metrics.IndyMetricsConstants.getDefaultName; -import static org.commonjava.indy.metrics.IndyMetricsConstants.getName; - -@Interceptor -@Measure -public class MetricsInterceptor -{ - private final Logger logger = LoggerFactory.getLogger( getClass() ); - - @Inject - private IndyMetricsManager metricsManager; - - @Inject - private IndyMetricsConfig config; - - @AroundInvoke - public Object operation( InvocationContext context ) throws Exception - { - if ( !config.isMetricsEnabled() || !metricsManager.checkMetered() ) - { - return context.proceed(); - } - - Method method = context.getMethod(); - Measure measure = method.getAnnotation( Measure.class ); - if ( measure == null ) - { - measure = method.getDeclaringClass().getAnnotation( Measure.class ); - } - - if ( measure == null ) - { - return context.proceed(); - } - - String defaultName = getDefaultName( context.getMethod().getDeclaringClass(), context.getMethod().getName() ); - logger.trace( "Gathering metrics for: {} using context: {}", defaultName, context.getContextData() ); - - Map timers = initTimers( measure, defaultName ); - List exceptionMeters = initMeters( measure, EXCEPTION, defaultName ); - List meters = initMeters( measure, METER, defaultName ); - - List startMeters = meters.stream().map( name -> name( name, "starts" ) ).collect( Collectors.toList() ); - - long start = System.nanoTime(); - - try - { - metricsManager.mark( startMeters ); - - return context.proceed(); - } - catch ( Exception e ) - { - metricsManager.mark( exceptionMeters ); - - List eClassMeters = exceptionMeters.stream() - .map( name -> name( name, e.getClass().getSimpleName() ) ) - .filter( name -> !exceptionMeters.contains( name ) ) - .collect( Collectors.toList() ); - - metricsManager.mark( eClassMeters ); - - throw e; - } - finally - { - metricsManager.stopTimers( timers ); - metricsManager.mark( meters ); - - double elapsed = (System.nanoTime() - start) / NANOS_PER_MILLISECOND; - - metricsManager.accumulate( defaultName, elapsed ); - } - } - - private List initMeters( final Measure measure, String classifier, - final String defaultName ) - { - List meters = new ArrayList<>(); - - meters.add( getName( config.getNodePrefix(), DEFAULT, defaultName, classifier ) ); - - logger.trace( "Got meter for {} with classifier: {}: {}", defaultName, classifier, meters ); - - return meters; - } - - private Map initTimers( final Measure measure, String defaultName ) - { - Map timers = new HashMap<>(); - - String name = getName( config.getNodePrefix(), DEFAULT, defaultName, TIMER ); - timers.put(name, - metricsManager.startTimer( name ) ); - - return timers; - } - -} diff --git a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/reporter/ReporterIntializer.java b/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/reporter/ReporterIntializer.java deleted file mode 100644 index 3732f7c56a..0000000000 --- a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/reporter/ReporterIntializer.java +++ /dev/null @@ -1,214 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.reporter; - -import com.codahale.metrics.ConsoleReporter; -import com.codahale.metrics.MetricRegistry; -import com.codahale.metrics.graphite.Graphite; -import com.codahale.metrics.graphite.GraphiteReporter; -import org.commonjava.indy.metrics.conf.IndyMetricsConfig; -import org.commonjava.indy.metrics.zabbix.cache.ZabbixCacheStorage; -import org.commonjava.indy.metrics.zabbix.reporter.IndyZabbixReporter; -import org.commonjava.indy.metrics.zabbix.sender.IndyZabbixSender; -import org.commonjava.indy.subsys.http.IndyHttpProvider; -import org.elasticsearch.metrics.ElasticsearchReporter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Inject; -import java.io.IOException; -import java.net.InetSocketAddress; -import java.util.concurrent.TimeUnit; - -/** - * Created by xiabai on 3/3/17. - */ -@ApplicationScoped -public class ReporterIntializer -{ - private final static String FILTER_JVM = "jvm"; - - public final static String INDY_METRICS_REPORTER_GRPHITEREPORTER = "graphite"; - - public final static String INDY_METRICS_REPORTER_CONSOLEREPORTER = "console"; - - public final static String INDY_METRICS_REPORTER_ZABBIXREPORTER = "zabbix"; - - public final static String INDY_METRICS_REPORTER_ELKEPORTER = "elasticsearch"; - - @Inject - private IndyHttpProvider indyHttpProvider; - - @Inject - private ZabbixCacheStorage cache; - - @Inject - private IndyMetricsConfig config; - - public void initReporter( MetricRegistry metrics ) throws Exception - { - - if ( !config.isReporterEnabled() ) - { - initConsoleReporter( metrics, config ); - return; - } - if ( this.isExistReporter( INDY_METRICS_REPORTER_GRPHITEREPORTER ) ) - { - initGraphiteReporterForSimpleMetric( metrics, config ); - initGraphiteReporterForJVMMetric( metrics, config ); - } - - if ( this.isExistReporter( INDY_METRICS_REPORTER_ZABBIXREPORTER ) ) - { - this.initZabbixReporterForJVMMetric( metrics, config ); - this.initZabbixReporterForSimpleMetric( metrics, config ); - } - - if ( this.isExistReporter( INDY_METRICS_REPORTER_CONSOLEREPORTER ) ) - { - initConsoleReporter( metrics, config ); - } - - if ( this.isExistReporter( INDY_METRICS_REPORTER_ELKEPORTER ) ) - { - initELKReporterForSimpleMetric( metrics, config ); - initELKReporterForJVMMetric( metrics, config ); - } - } - - private boolean isJvmMetric( String name ) - { - return name.contains( FILTER_JVM ); - } - - private boolean isApplicationMetric( String name ) - { - return !isJvmMetric( name ); - } - - private void initELKReporterForSimpleMetric( MetricRegistry metrics, IndyMetricsConfig config ) throws IOException - { - Logger logger = LoggerFactory.getLogger( getClass() ); - logger.info( "Setting up Elasticsearch reporter for Indy metrics" ); - ElasticsearchReporter reporter = ElasticsearchReporter.forRegistry( metrics ) - .hosts( config.getElkHosts().split( ";" ) ) - .index( config.getElkIndex() ) - .indexDateFormat( "YYYY-MM-dd" ) - .filter( ( name, metric ) -> isApplicationMetric( name ) ) - .build(); - - reporter.start( config.getElkSimplePriod(), TimeUnit.SECONDS ); - } - - private void initELKReporterForJVMMetric( MetricRegistry metrics, IndyMetricsConfig config ) throws IOException - { - Logger logger = LoggerFactory.getLogger( getClass() ); - logger.info( "Setting up Elasticsearch reporter for JVM metrics" ); - ElasticsearchReporter reporter = ElasticsearchReporter.forRegistry( metrics ) - .hosts( config.getElkHosts().split( ";" ) ) - .index( config.getElkIndex() ) - .indexDateFormat( "YYYY-MM-dd" ) - .filter( ( name, metric ) -> isJvmMetric( name ) ) - .build(); - - reporter.start( config.getElkJVMPriod(), TimeUnit.SECONDS ); - } - - private void initConsoleReporter( MetricRegistry metrics, IndyMetricsConfig config ) - { - ConsoleReporter.forRegistry( metrics ) - .build() - .start( config.getConsolePeriod(), - TimeUnit.SECONDS ); - } - - private void initGraphiteReporterForSimpleMetric( MetricRegistry metrics, IndyMetricsConfig config ) - { - final Graphite graphite = - new Graphite( new InetSocketAddress( config.getGrphiterHostName(), config.getGrphiterPort() ) ); - final GraphiteReporter reporter = GraphiteReporter.forRegistry( metrics ) - .prefixedWith( config.getGrphiterPrefix() ) - .convertRatesTo( TimeUnit.SECONDS ) - .convertDurationsTo( TimeUnit.MILLISECONDS ) - .filter( ( name, metric ) -> isApplicationMetric( name ) ) - .build( graphite ); - reporter.start( config.getGrphiterSimplePriod(), TimeUnit.SECONDS ); - } - - private void initGraphiteReporterForJVMMetric( MetricRegistry metrics, IndyMetricsConfig config ) - { - final Graphite graphite = - new Graphite( new InetSocketAddress( config.getGrphiterHostName(), config.getGrphiterPort() ) ); - final GraphiteReporter reporter = GraphiteReporter.forRegistry( metrics ) - .prefixedWith( config.getGrphiterPrefix() ) - .convertRatesTo( TimeUnit.SECONDS ) - .convertDurationsTo( TimeUnit.MILLISECONDS ) - .filter( ( name, metric ) -> isJvmMetric( name ) ) - .build( graphite ); - reporter.start( config.getGrphiterJVMPriod(), TimeUnit.SECONDS ); - } - - private boolean isExistReporter( String reporter ) - { - return config.getReporter().contains( reporter ); - - } - - private void initZabbixReporterForSimpleMetric( MetricRegistry metrics, IndyMetricsConfig config ) - { - IndyZabbixReporter reporter = initZabbixReporter( metrics, config ) - .filter( ( name, metric ) -> isApplicationMetric( name ) ) - .build( initZabbixSender() ); - - reporter.start( config.getZabbixSimplePriod(), TimeUnit.SECONDS ); - } - - private void initZabbixReporterForJVMMetric( MetricRegistry metrics, IndyMetricsConfig config ) - { - IndyZabbixReporter reporter = initZabbixReporter( metrics, config ) - .filter( ( name, metric ) -> isJvmMetric( name ) ) - .build( initZabbixSender() ); - - reporter.start( config.getZabbixJVMPriod(), TimeUnit.SECONDS ); - } - - private IndyZabbixReporter.Builder initZabbixReporter( MetricRegistry metrics, IndyMetricsConfig config ) - { - return IndyZabbixReporter.forRegistry( metrics ) - .prefix( config.getZabbixPrefix() ) - .convertRatesTo( TimeUnit.SECONDS ) - .convertDurationsTo( TimeUnit.MILLISECONDS ) - .hostName( config.getZabbixLocalHostName() ); - } - - private IndyZabbixSender initZabbixSender() - { - final IndyZabbixSender zabbixSender = IndyZabbixSender.create() - .zabbixHost( config.getZabbixHost() ) - .zabbixPort( config.getZabbixPort() ) - .zabbixHostUrl( config.getZabbixApiHostUrl() ) - .zabbixUserName( config.getZabbixUser() ) - .zabbixUserPwd( config.getZabbixPwd() ) - .hostName( config.getZabbixLocalHostName() ) - .bCreateNotExistZabbixSender( true ) - .indyHttpProvider( indyHttpProvider ) - .metricsZabbixCache( cache ) - .build(); - return zabbixSender; - } -} diff --git a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/api/IndyZabbixApi.java b/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/api/IndyZabbixApi.java deleted file mode 100644 index e39d17e197..0000000000 --- a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/api/IndyZabbixApi.java +++ /dev/null @@ -1,285 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.zabbix.api; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; -import org.apache.commons.io.IOUtils; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpUriRequest; -import org.apache.http.entity.ContentType; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.util.EntityUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; - -/** - * Created by xiabai on 3/31/17. - */ -public class IndyZabbixApi - implements ZabbixApi -{ - private static final Logger logger = LoggerFactory.getLogger( IndyZabbixApi.class ); - - private CloseableHttpClient httpClient; - - private URI uri; - - private volatile String auth; - - public IndyZabbixApi( String url ) - { - try - { - uri = new URI( url.trim() ); - } - catch ( URISyntaxException e ) - { - logger.error( "url invalid", e ); - } - } - - public IndyZabbixApi( URI uri ) - { - this.uri = uri; - } - - public IndyZabbixApi( String url, CloseableHttpClient httpClient ) - { - this( url ); - this.httpClient = httpClient; - } - - public IndyZabbixApi( URI uri, CloseableHttpClient httpClient ) - { - this( uri ); - this.httpClient = httpClient; - } - - @Override - public void init() - { - if ( httpClient == null ) - { - httpClient = HttpClients.custom().build(); - } - } - - @Override - public void destroy() - { - IOUtils.closeQuietly( httpClient ); - } - - @Override - public boolean login( String user, String password ) throws IOException - { - this.auth = null; - Request request = RequestBuilder.newBuilder() - .paramEntry( "user", user ) - .paramEntry( "password", password ) - .method( "user.login" ) - .build(); - JsonNode response = call( request ); - String auth = response.get( "result" ).asText(); - if ( auth != null && !auth.isEmpty() ) - { - this.auth = auth; - return true; - } - return false; - } - - @Override - public String apiVersion() throws IOException - { - Request request = RequestBuilder.newBuilder().method( "apiinfo.version" ).build(); - JsonNode response = call( request ); - return response.get( "result" ).asText(); - } - - /** - * - * @param name - * @return hostid - */ - public String getHost( String name ) throws IOException - { - ObjectMapper mapper = new ObjectMapper(); - ObjectNode jsonNode = mapper.createObjectNode(); - ArrayNode arrayNode = mapper.createArrayNode(); - arrayNode.add( name ); - jsonNode.put( "host", arrayNode ); - Request request = RequestBuilder.newBuilder().method( "host.get" ).paramEntry( "filter", jsonNode ).build(); - JsonNode response = call( request ); - if ( response.get( "result" ).isNull() || response.get( "result" ).get( 0 ) == null ) - { - return null; - } - return response.get( "result" ).get( 0 ).get( "hostid" ).asText(); - } - - /** - * - * @param host - * @param groupId - * @param ip - * @return hostid - */ - public String hostCreate( String host, String groupId, String ip ) throws IOException - { - // host not exists, create it. - ObjectMapper mapper = new ObjectMapper(); - ArrayNode groups = mapper.createArrayNode(); - ObjectNode group = mapper.createObjectNode(); - group.put( "groupid", groupId ); - groups.add( group ); - - // "interfaces": [ - // { - // "type": 1, - // "main": 1, - // "useip": 1, - // "ip": "192.168.3.1", - // "dns": "", - // "port": "10050" - // } - // ], - - ObjectNode interface1 = mapper.createObjectNode(); - // JSONObject interface1 = new JSONObject(); - interface1.put( "type", 1 ); - interface1.put( "main", 1 ); - interface1.put( "useip", 1 ); - interface1.put( "ip", ip ); - interface1.put( "dns", "" ); - interface1.put( "port", "10050" ); - - Request request = RequestBuilder.newBuilder() - .method( "host.create" ) - .paramEntry( "host", host ) - .paramEntry( "groups", groups ) - .paramEntry( "interfaces", new Object[] { interface1 } ) - .build(); - JsonNode response = call( request ); - return response.get( "result" ).get( "hostids" ).get( 0 ).asText(); - } - - /** - * - * @param name - * @return groupId - */ - public String getHostgroup( String name ) throws IOException - { - ObjectMapper mapper = new ObjectMapper(); - ObjectNode jsonNode = mapper.createObjectNode(); - ArrayNode arrayNode = mapper.createArrayNode(); - arrayNode.add( name ); - jsonNode.put( "name", arrayNode ); - Request request = - RequestBuilder.newBuilder().method( "hostgroup.get" ).paramEntry( "filter", jsonNode ).build(); - JsonNode response = call( request ); - if ( response.get( "result" ).isNull() || response.get( "result" ).get( 0 ) == null ) - { - return null; - } - return response.get( "result" ).get( 0 ).get( "groupid" ).asText(); - } - - /** - * - * @param name - * @return groupId - */ - public String hostgroupCreate( String name ) throws IOException - { - Request request = RequestBuilder.newBuilder().method( "hostgroup.create" ).paramEntry( "name", name ).build(); - JsonNode response = call( request ); - return response.get( "result" ).get( "groupids" ).get( 0 ).toString(); - } - - @Override - public JsonNode call( Request request ) throws IOException - { - if ( request.getAuth() == null ) - { - request.setAuth( this.auth ); - } - ObjectMapper mapper = new ObjectMapper(); - HttpUriRequest httpRequest = org.apache.http.client.methods.RequestBuilder.post() - .setUri( uri ) - .addHeader( "Content-Type", - "application/json" ) - .setEntity( new StringEntity( - mapper.writeValueAsString( - request ), - ContentType.APPLICATION_JSON ) ) - .build(); - CloseableHttpResponse response = httpClient.execute( httpRequest ); - String result = EntityUtils.toString( response.getEntity() ); - logger.info( result ); - return mapper.readTree( result ); - } - - public String createItem( String host, String item, String hostid, int valueType ) throws IOException - { - // create item - int type = 2; // trapper - int value_type = valueType; // float - int delay = 30; - Request request = RequestBuilder.newBuilder() - .method( "item.create" ) - .paramEntry( "name", item ) - .paramEntry( "key_", item ) - .paramEntry( "hostid", hostid ) - .paramEntry( "type", type ) - .paramEntry( "value_type", value_type ) - .paramEntry( "delay", delay ) - .build(); - - JsonNode response = call( request ); - return response.get( "result" ).findValues( "itemids" ).get( 0 ).asText(); - } - - public String getItem( String host, String item, String hostid ) throws IOException - { - ObjectMapper mapper = new ObjectMapper(); - - ArrayNode groups = mapper.createArrayNode(); - ObjectNode search = mapper.createObjectNode(); - search.put( "key_", item ); - Request getRequest = RequestBuilder.newBuilder() - .method( "item.get" ) - .paramEntry( "hostids", hostid ) - .paramEntry( "search", search ) - .build(); - JsonNode response = call( getRequest ); - if ( response.get( "result" ).isNull() || response.get( "result" ).get( 0 ) == null ) - { - return null; - } - return response.get( "result" ).get( 0 ).get( "itemid" ).asText(); - } -} diff --git a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/api/Request.java b/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/api/Request.java deleted file mode 100644 index 568b55358a..0000000000 --- a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/api/Request.java +++ /dev/null @@ -1,98 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.zabbix.api; - - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -import java.util.HashMap; -import java.util.Map; - -public class Request { - private String jsonrpc = "2.0"; - - private Map params = new HashMap<>(); - - private String method; - - private String auth; - - private Integer id; - - public void putParam(String key, Object value) { - params.put(key, value); - } - - public Object removeParam(String key) { - return params.remove(key); - } - - public String getJsonrpc() { - return jsonrpc; - } - - public void setJsonrpc(String jsonrpc) { - this.jsonrpc = jsonrpc; - } - - public Map getParams() { - return params; - } - - public void setParams(Map params) { - this.params = params; - } - - public String getMethod() { - return method; - } - - public void setMethod(String method) { - this.method = method; - } - - public String getAuth() { - return auth; - } - - public void setAuth(String auth) { - this.auth = auth; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - @Override - public String toString() { - ObjectMapper mapper = new ObjectMapper(); - - try - { - return mapper.writeValueAsString( this ); - } - catch ( JsonProcessingException e ) - { - e.printStackTrace(); - throw new RuntimeException( e ); - } - } -} diff --git a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/api/RequestBuilder.java b/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/api/RequestBuilder.java deleted file mode 100644 index af39c5448c..0000000000 --- a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/api/RequestBuilder.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.zabbix.api; - -import java.util.concurrent.atomic.AtomicInteger; - -public class RequestBuilder { - private static final AtomicInteger nextId = new AtomicInteger(1); - - private Request request = new Request(); - - private RequestBuilder(){ - - } - - static public RequestBuilder newBuilder(){ - return new RequestBuilder(); - } - - public Request build(){ - if(request.getId() == null){ - request.setId(nextId.getAndIncrement()); - } - return request; - } - - public RequestBuilder version( String version){ - request.setJsonrpc(version); - return this; - } - - public RequestBuilder paramEntry( String key, Object value){ - request.putParam(key, value); - return this; - } - - /** - * Do not necessary to call this method.If don not set id, ZabbixApi will auto set request auth.. - * @param auth - * @return - */ - public RequestBuilder auth( String auth){ - request.setAuth(auth); - return this; - } - - public RequestBuilder method( String method){ - request.setMethod(method); - return this; - } - - /** - * Do not necessary to call this method.If don not set id, RequestBuilder will auto generate. - * @param id - * @return - */ - public RequestBuilder id( Integer id){ - request.setId(id); - return this; - } -} diff --git a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/api/ZabbixApi.java b/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/api/ZabbixApi.java deleted file mode 100644 index 8bf6eccacf..0000000000 --- a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/api/ZabbixApi.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.zabbix.api; - -import com.fasterxml.jackson.databind.JsonNode; - -import java.io.IOException; - -public interface ZabbixApi -{ - - void init(); - - void destroy(); - - String apiVersion() throws IOException; - - JsonNode call( Request request ) throws IOException; - - boolean login( String user, String password ) throws IOException; - - String hostCreate( String host, String groupId, String ip ) throws IOException; - - String hostgroupCreate( String name ) throws IOException; - - String createItem( String host, String item, String hostid, int valueType ) throws IOException; - - String getItem( String host, String item, String hostCache ) throws IOException; - - String getHost( String name ) throws IOException; - - String getHostgroup( String name ) throws IOException; -} diff --git a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/cache/ZabbixCacheStorage.java b/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/cache/ZabbixCacheStorage.java deleted file mode 100644 index fa761b97df..0000000000 --- a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/cache/ZabbixCacheStorage.java +++ /dev/null @@ -1,186 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.zabbix.cache; - -import com.fasterxml.jackson.databind.ObjectMapper; -import org.commonjava.indy.action.IndyLifecycleException; -import org.commonjava.indy.action.StartupAction; -import org.commonjava.indy.subsys.datafile.DataFile; -import org.commonjava.indy.subsys.datafile.DataFileManager; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Inject; -import java.io.IOException; -import java.util.HashMap; -import java.util.concurrent.ConcurrentHashMap; - -/** - * Created by xiabai on 5/8/17. - */ - -@ApplicationScoped -public class ZabbixCacheStorage - implements StartupAction -{ - private static final Logger logger = LoggerFactory.getLogger( ZabbixCacheStorage.class ); - - private final static String ZABBIX_ID = "zabbix"; - - private final static String ZABBIX_HOSTGROUP = "hostGroupCache.json"; - - private final static String ZABBIX_HOST = "hostCache.json"; - - private final static String ZABBIX_ITEM = "itemCache.json"; - - private DataFile hostGroupCacheDataFile = null; - - private DataFile hostCacheDataFile = null; - - private DataFile itemCacheDataFile = null; - - // name, hostGroupId - private ConcurrentHashMap hostGroupCache = new ConcurrentHashMap(); - - // name, hostId - private ConcurrentHashMap hostCache = new ConcurrentHashMap(); - - // name, itemId - private ConcurrentHashMap itemCache = new ConcurrentHashMap(); - - @Inject - private DataFileManager dataFileManager; - - @Override - public int getStartupPriority() - { - return 30; - } - - @Override - public String getId() - { - return ZABBIX_ID; - } - - @Override - public void start() throws IndyLifecycleException - { - this.reLoadHostGroup(); - this.reLoadHost(); - this.reLoadItem(); - } - - private void reLoadHostGroup() - { - hostGroupCacheDataFile = dataFileManager.getDataFile( ZABBIX_ID + "/" + ZABBIX_HOSTGROUP ); - - ObjectMapper mapper = new ObjectMapper(); - if ( hostGroupCacheDataFile.exists() ) - { - try - { - HashMap m = new HashMap( ); - m.put( "test","123" ); - mapper.writeValueAsString( m ); - String hostGroups = hostGroupCacheDataFile.readString(); - hostGroupCache = mapper.readValue( hostGroups, ConcurrentHashMap.class ); - } - catch ( IOException e ) - { - e.printStackTrace(); - logger.error( "read hostGroup cache from data file have a error:" + e ); - } - } - } - - private void reLoadHost() - { - hostCacheDataFile = dataFileManager.getDataFile( ZABBIX_ID + "/" + ZABBIX_HOST ); - - ObjectMapper mapper = new ObjectMapper(); - if ( hostCacheDataFile.exists() ) - { - try - { - String hosts = hostCacheDataFile.readString(); - hostCache = mapper.readValue( hosts, ConcurrentHashMap.class ); - } - catch ( IOException e ) - { - e.printStackTrace(); - logger.error( "read hosts cache from data file have a error:" + e ); - } - } - } - - private void reLoadItem() - { - itemCacheDataFile = dataFileManager.getDataFile( ZABBIX_ID + "/" + ZABBIX_ITEM ); - ObjectMapper mapper = new ObjectMapper(); - - if ( itemCacheDataFile.exists() ) - { - try - { - String items = itemCacheDataFile.readString(); - itemCache = mapper.readValue( items, ConcurrentHashMap.class ); - } - catch ( IOException e ) - { - e.printStackTrace(); - logger.error( "read items cache from data file have a error:" + e ); - } - } - } - - public void putHostGroup( String name, String id ) throws IOException - { - ObjectMapper mapper = new ObjectMapper(); - hostGroupCache.put( name, id ); - hostGroupCacheDataFile.writeString( mapper.writeValueAsString( hostGroupCache ), "UTF-8", null ); - } - - public String getHostGroup( String name ) - { - return hostGroupCache.get( name ); - } - - public void putHost( String name, String id ) throws IOException - { - ObjectMapper mapper = new ObjectMapper(); - hostCache.put( name, id ); - hostCacheDataFile.writeString( mapper.writeValueAsString( hostCache ), "UTF-8", null ); - } - - public String getHost( String name ) - { - return hostCache.get( name ); - } - - public void putItem( String name, String id ) throws IOException - { - ObjectMapper mapper = new ObjectMapper(); - itemCache.put( name, id ); - itemCacheDataFile.writeString( mapper.writeValueAsString( itemCache ), "UTF-8", null ); - } - - public String getItem( String name ) - { - return itemCache.get( name ); - } -} diff --git a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/reporter/HostUtil.java b/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/reporter/HostUtil.java deleted file mode 100644 index 424b0e0c33..0000000000 --- a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/reporter/HostUtil.java +++ /dev/null @@ -1,93 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.zabbix.reporter; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.net.InetAddress; -import java.net.NetworkInterface; -import java.net.SocketException; -import java.net.UnknownHostException; -import java.util.Enumeration; - -/** - * http://stackoverflow.com/questions/7348711/recommended-way-to-get-hostname-in - * -java - * - */ -public class HostUtil -{ - private static final Logger logger = LoggerFactory.getLogger( HostUtil.class); - - public static void main(String[] args) { - System.err.println(getHostName()); - System.err.println(getHostAddress()); - System.err.println(getNotLoopbackAddress()); - } - - public static String getHostName() { - try { - String hostName = InetAddress.getLocalHost().getHostName(); - if (hostName != null && !hostName.isEmpty()) { - return hostName; - } - } catch (UnknownHostException e) { - logger.error("get hostName error!", e); - } - - String host = System.getenv("COMPUTERNAME"); - if (host != null) - return host; - host = System.getenv("HOSTNAME"); - if (host != null) - return host; - - return null; - } - - public static String getNotLoopbackAddress() { - String hostName = null; - Enumeration interfaces; - try { - interfaces = NetworkInterface.getNetworkInterfaces(); - while (interfaces.hasMoreElements()) { - NetworkInterface nic = interfaces.nextElement(); - Enumeration addresses = nic.getInetAddresses(); - while (hostName == null && addresses.hasMoreElements()) { - InetAddress address = addresses.nextElement(); - if (!address.isLoopbackAddress()) { - hostName = address.getHostName(); - } - } - } - } catch (SocketException e) { - logger.error("getNotLoopbackAddress error!", e); - } - return hostName; - } - - public static String getHostAddress() { - try { - return InetAddress.getLocalHost().getHostAddress(); - } catch (UnknownHostException e) { - logger.error("get hostAddress error!", e); - } - - return null; - } - -} diff --git a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/reporter/IndyZabbixReporter.java b/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/reporter/IndyZabbixReporter.java deleted file mode 100644 index 4c1e5ddf58..0000000000 --- a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/reporter/IndyZabbixReporter.java +++ /dev/null @@ -1,339 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.zabbix.reporter; - -import com.codahale.metrics.Counter; -import com.codahale.metrics.Gauge; -import com.codahale.metrics.Histogram; -import com.codahale.metrics.Meter; -import com.codahale.metrics.Metered; -import com.codahale.metrics.MetricFilter; -import com.codahale.metrics.MetricRegistry; -import com.codahale.metrics.ScheduledReporter; -import com.codahale.metrics.Snapshot; -import com.codahale.metrics.Timer; -import org.commonjava.indy.metrics.exception.IndyMetricsException; -import org.commonjava.indy.metrics.zabbix.sender.DataObject; -import org.commonjava.indy.metrics.zabbix.sender.IndyZabbixSender; -import org.commonjava.indy.metrics.zabbix.sender.SenderResult; -import org.commonjava.indy.subsys.http.IndyHttpException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.SortedMap; -import java.util.concurrent.TimeUnit; - -/** - * Created by xiabai on 3/29/17. - */ -public class IndyZabbixReporter - extends ScheduledReporter -{ - private static final Logger logger = LoggerFactory.getLogger( IndyZabbixReporter.class ); - - private final IndyZabbixSender indyZabbixSender; - - private final String hostName; - - private final String prefix; - - private final String suffix; - - public static Builder forRegistry( MetricRegistry registry ) - { - return new Builder( registry ); - } - - public static class Builder - { - - private final MetricRegistry registry; - - private String name = "zabbix-reporter"; - - private TimeUnit rateUnit; - - private TimeUnit durationUnit; - - private MetricFilter filter; - - private String hostName; - - private String prefix = ""; - - private String suffix = ""; - - private String zabbixHostName; - - private IndyZabbixSender indyZabbixSender; - - public Builder( MetricRegistry registry ) - { - this.registry = registry; - - this.rateUnit = TimeUnit.SECONDS; - this.durationUnit = TimeUnit.MILLISECONDS; - this.filter = MetricFilter.ALL; - - } - - /** - * Convert rates to the given time unit. - * - * @param rateUnit - * a unit of time - * @return {@code this} - */ - public Builder convertRatesTo( TimeUnit rateUnit ) - { - this.rateUnit = rateUnit; - return this; - } - - /** - * Convert durations to the given time unit. - * - * @param durationUnit - * a unit of time - * @return {@code this} - */ - public Builder convertDurationsTo( TimeUnit durationUnit ) - { - this.durationUnit = durationUnit; - return this; - } - - /** - * Only report metrics which match the given filter. - * - * @param filter - * a {@link MetricFilter} - * @return {@code this} - */ - public Builder filter( MetricFilter filter ) - { - this.filter = filter; - return this; - } - - /** - * default register name is "zabbix-reporter". - * - * @param name - * @return - */ - public Builder name( String name ) - { - this.name = name; - return this; - } - - public Builder hostName( String hostName ) - { - this.hostName = hostName; - return this; - } - - public Builder prefix( String prefix ) - { - this.prefix = prefix + "."; - return this; - } - - public Builder suffix( String suffix ) - { - this.suffix = suffix; - return this; - } - - public Builder zabbixHostName( String zabbixHostName ) - { - this.zabbixHostName = zabbixHostName; - return this; - } - - public Builder zabbixSender( IndyZabbixSender indyZabbixSender ) - { - this.indyZabbixSender = indyZabbixSender; - return this; - } - - /** - * Builds a {@link IndyZabbixReporter} with the given properties. - * - * @return a {@link IndyZabbixReporter} - */ - public IndyZabbixReporter build( IndyZabbixSender zabbixSender ) - { - if ( hostName == null ) - { - hostName = HostUtil.getHostName(); - logger.info( name + " detect hostName: " + hostName ); - } - return new IndyZabbixReporter( registry, name, rateUnit, durationUnit, filter, zabbixSender, hostName, - prefix, suffix ); - } - } - - private IndyZabbixReporter( MetricRegistry registry, String name, TimeUnit rateUnit, TimeUnit durationUnit, - MetricFilter filter, IndyZabbixSender indyZabbixSender, String hostName, String prefix, - String suffix ) - { - super( registry, name, filter, rateUnit, durationUnit ); - this.indyZabbixSender = indyZabbixSender; - this.hostName = hostName; - this.prefix = prefix; - this.suffix = suffix; - } - - private DataObject toDataObject( String key, String keySuffix, Object value, long clock ) - { - return DataObject.builder() - .host( hostName ) - .key( prefix + key + keySuffix + suffix ) - .clock( clock ) - .value( String.valueOf( value ) ) - .build(); - } - - /** - * for histograms. - * - * @param key - * @param snapshot - * @param dataObjectList - */ - private void addSnapshotDataObject( String key, Snapshot snapshot, long clock, List dataObjectList ) - { - dataObjectList.add( toDataObject( key, ".min", snapshot.getMin(), clock ) ); - dataObjectList.add( toDataObject( key, ".max", snapshot.getMax(), clock ) ); - dataObjectList.add( toDataObject( key, ".mean", snapshot.getMean(), clock ) ); - dataObjectList.add( toDataObject( key, ".stddev", snapshot.getStdDev(), clock ) ); - dataObjectList.add( toDataObject( key, ".median", snapshot.getMedian(), clock ) ); - dataObjectList.add( toDataObject( key, ".75th", snapshot.get75thPercentile(), clock ) ); - dataObjectList.add( toDataObject( key, ".95th", snapshot.get95thPercentile(), clock ) ); - dataObjectList.add( toDataObject( key, ".98th", snapshot.get98thPercentile(), clock ) ); - dataObjectList.add( toDataObject( key, ".99th", snapshot.get99thPercentile(), clock ) ); - dataObjectList.add( toDataObject( key, ".99.9th", snapshot.get999thPercentile(), clock ) ); - } - - /** - * for timer. - * - * @param key - * @param snapshot - * @param dataObjectList - */ - private void addSnapshotDataObjectWithConvertDuration( String key, Snapshot snapshot, long clock, - List dataObjectList ) - { - dataObjectList.add( toDataObject( key, ".min", convertDuration( snapshot.getMin() ), clock ) ); - dataObjectList.add( toDataObject( key, ".max", convertDuration( snapshot.getMax() ), clock ) ); - dataObjectList.add( toDataObject( key, ".mean", convertDuration( snapshot.getMean() ), clock ) ); - dataObjectList.add( toDataObject( key, ".stddev", convertDuration( snapshot.getStdDev() ), clock ) ); - dataObjectList.add( toDataObject( key, ".median", convertDuration( snapshot.getMedian() ), clock ) ); - dataObjectList.add( toDataObject( key, ".75th", convertDuration( snapshot.get75thPercentile() ), clock ) ); - dataObjectList.add( toDataObject( key, ".95th", convertDuration( snapshot.get95thPercentile() ), clock ) ); - dataObjectList.add( toDataObject( key, ".98th", convertDuration( snapshot.get98thPercentile() ), clock ) ); - dataObjectList.add( toDataObject( key, ".99th", convertDuration( snapshot.get99thPercentile() ), clock ) ); - dataObjectList.add( toDataObject( key, ".99.9th", convertDuration( snapshot.get999thPercentile() ), clock ) ); - } - - private void addMeterDataObject( String key, Metered meter, long clock, List dataObjectList ) - { - dataObjectList.add( toDataObject( key, ".count", meter.getCount(), clock ) ); - dataObjectList.add( toDataObject( key, ".meanRate", convertRate( meter.getMeanRate() ), clock ) ); - dataObjectList.add( toDataObject( key, ".1-minuteRate", convertRate( meter.getOneMinuteRate() ), clock ) ); - dataObjectList.add( toDataObject( key, ".5-minuteRate", convertRate( meter.getFiveMinuteRate() ), clock ) ); - dataObjectList.add( toDataObject( key, ".15-minuteRate", convertRate( meter.getFifteenMinuteRate() ), clock ) ); - } - - @SuppressWarnings( "rawtypes" ) - @Override - public void report( SortedMap gauges, SortedMap counters, - SortedMap histograms, SortedMap meters, - SortedMap timers ) - { - final long clock = System.currentTimeMillis() / 1000; - List dataObjectList = new LinkedList(); - for ( Map.Entry entry : gauges.entrySet() ) - { - DataObject dataObject = - toDataObject( entry.getKey(), "", String.valueOf( entry.getValue().getValue() ), clock ); - dataObjectList.add( dataObject ); - } - - for ( Map.Entry entry : counters.entrySet() ) - { - DataObject dataObject = - toDataObject( entry.getKey(), "", String.valueOf( entry.getValue().getCount() ), clock ); - dataObjectList.add( dataObject ); - } - - for ( Map.Entry entry : histograms.entrySet() ) - { - Histogram histogram = entry.getValue(); - Snapshot snapshot = histogram.getSnapshot(); - addSnapshotDataObject( entry.getKey(), snapshot, clock, dataObjectList ); - } - - for ( Map.Entry entry : meters.entrySet() ) - { - Meter meter = entry.getValue(); - addMeterDataObject( entry.getKey(), meter, clock, dataObjectList ); - } - - for ( Map.Entry entry : timers.entrySet() ) - { - Timer timer = entry.getValue(); - addMeterDataObject( entry.getKey(), timer, clock, dataObjectList ); - addSnapshotDataObjectWithConvertDuration( entry.getKey(), timer.getSnapshot(), clock, dataObjectList ); - } - - try - { - SenderResult senderResult = indyZabbixSender.send( dataObjectList, clock ); - if ( !senderResult.success() ) - { - logger.warn( "report metrics to zabbix not success!" + senderResult ); - } - else if ( logger.isDebugEnabled() ) - { - logger.info( "report metrics to zabbix success. " + senderResult ); - } - } - catch ( IOException e ) - { - logger.error( "report metrics to zabbix error! " + e ); - e.printStackTrace(); - } - catch ( IndyMetricsException e ) - { - logger.error( "Indy metrics config error " + e ); - e.printStackTrace(); - } - catch ( IndyHttpException e ) - { - logger.error( "Indy http client error " + e ); - e.printStackTrace(); - } - } - -} diff --git a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/sender/DataObject.java b/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/sender/DataObject.java deleted file mode 100644 index 91bf6418a8..0000000000 --- a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/sender/DataObject.java +++ /dev/null @@ -1,135 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.zabbix.sender; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -public class DataObject { - long clock; - String host; - String key; - String value; - - public DataObject() { - - } - - public DataObject(long clock, String host, String key, String value) { - this.clock = clock; - this.host = host; - this.key = key; - this.value = value; - } - - static public Builder builder() { - return new Builder(); - } - - public static class Builder { - Long clock; - String host; - String key; - String value; - - Builder() { - - } - - public Builder clock(long clock) { - this.clock = clock; - return this; - } - - public Builder host(String host) { - this.host = host; - return this; - } - - public Builder key(String key) { - this.key = key; - return this; - } - - public Builder value(String value) { - this.value = value; - return this; - } - - public DataObject build() { - if (clock == null) { - clock = System.currentTimeMillis() / 1000; - } - return new DataObject( clock, host, key, value); - } - } - - public long getClock() { - return clock; - } - - public void setClock(long clock) { - this.clock = clock; - } - - public String getHost() { - return host; - } - - public void setHost(String host) { - this.host = host; - } - - public String getKey() { - return key; - } - - public void setKey(String key) { - this.key = key; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - @Override - public String toString() { - ObjectMapper mapper = new ObjectMapper(); - - try - { - return mapper.writeValueAsString( this ); - } - catch ( JsonProcessingException e ) - { - e.printStackTrace(); - throw new RuntimeException( e ); - } - } - public static void main(String[] args) - { - DataObject d = new DataObject(); - d.setClock( 10 ); - d.setHost( "a" ); - d.setKey( "b" ); - d.setValue("100" ); - System.out.println( d.toString() ); - } -} diff --git a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/sender/IndyZabbixSender.java b/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/sender/IndyZabbixSender.java deleted file mode 100644 index 92a3c3f9b3..0000000000 --- a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/sender/IndyZabbixSender.java +++ /dev/null @@ -1,601 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.zabbix.sender; - -import org.commonjava.indy.IndyException; -import org.commonjava.indy.metrics.exception.IndyMetricsException; -import org.commonjava.indy.metrics.zabbix.api.IndyZabbixApi; -import org.commonjava.indy.metrics.zabbix.api.ZabbixApi; -import org.commonjava.indy.metrics.zabbix.cache.ZabbixCacheStorage; -import org.commonjava.indy.subsys.http.IndyHttpException; -import org.commonjava.indy.subsys.http.IndyHttpProvider; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.net.URL; -import java.util.Collections; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * Created by xiabai on 4/1/17. - */ -public class IndyZabbixSender -{ - private static final Logger logger = LoggerFactory.getLogger( IndyZabbixSender.class ); - - private ZabbixSender sender; - - private boolean bCreateNotExistHostGroup = true; - - private boolean bCreateNotExistHost = true; - - private boolean bCreateNotExistItem = true; - - private boolean bCreateNotExistZabbixApi = true; - - private ZabbixApi zabbixApi; - - private String zabbixHostUrl; - - private String hostGroup = "NOS";//// default host group - - private String group = "NOS"; - - private long clock = 0l; - - private String hostName; - - private String ip; - - private String zabbixUserName; - - private String zabbixUserPwd; - - private ZabbixCacheStorage zabbixCacheStorage; - - private IndyHttpProvider indyHttpProvider; - - private static final String regEx = "^-?[0-9]+$"; - - private static final Pattern pat = Pattern.compile( regEx ); - - public static Builder create() - { - return new Builder(); - } - - public static class Builder - { - boolean bCreateNotExistHostGroup = true; - - boolean bCreateNotExistHost = true; - - boolean bCreateNotExistItem = true; - - boolean bCreateNotExistZabbixSender = true; - - ZabbixApi zabbixApi; - - String zabbixHostUrl; - - String hostGroup = "NOS";//// default host group - - String group = "NOS"; - - long clock = 0l; - - String hostName; - - String ip; - - String zabbixUserName; - - String zabbixUserPwd; - - String zabbixHost; - - int zabbixPort; - - ZabbixCacheStorage zabbixCacheStorage; - - IndyHttpProvider indyHttpProvider; - - public Builder metricsZabbixCache( ZabbixCacheStorage zabbixCacheStorage ) - { - this.zabbixCacheStorage = zabbixCacheStorage; - return this; - } - - public Builder indyHttpProvider( IndyHttpProvider indyHttpProvider ) - { - this.indyHttpProvider = indyHttpProvider; - return this; - } - - public Builder zabbixHost( String zabbixHost ) - { - this.zabbixHost = zabbixHost; - return this; - } - - public Builder hostName( String hostName ) - { - this.hostName = hostName; - return this; - } - - public Builder zabbixPort( int zabbixPort ) - { - this.zabbixPort = zabbixPort; - return this; - } - - public Builder bCreateNotExistHostGroup( boolean bCreateNotExistHostGroup ) - { - this.bCreateNotExistHostGroup = bCreateNotExistHostGroup; - return this; - } - - public Builder bCreateNotExistHost( boolean bCreateNotExistHost ) - { - this.bCreateNotExistHost = bCreateNotExistHost; - return this; - } - - public Builder bCreateNotExistItem( boolean bCreateNotExistItem ) - { - this.bCreateNotExistItem = bCreateNotExistItem; - return this; - } - - public Builder bCreateNotExistZabbixSender( boolean bCreateNotExistZabbixSender ) - { - this.bCreateNotExistZabbixSender = bCreateNotExistZabbixSender; - return this; - } - - public Builder zabbixApi( ZabbixApi zabbixApi ) - { - this.zabbixApi = zabbixApi; - return this; - } - - public Builder zabbixHostUrl( String zabbixHostUrl ) - { - this.zabbixHostUrl = zabbixHostUrl; - return this; - } - - public Builder hostGroup( String hostGroup ) - { - this.hostGroup = hostGroup; - return this; - } - - public Builder group( String group ) - { - this.group = group; - return this; - } - - public Builder ip( String ip ) - { - this.ip = ip; - return this; - } - - public Builder zabbixUserName( String zabbixUserName ) - { - this.zabbixUserName = zabbixUserName; - return this; - } - - public Builder clock( long clock ) - { - this.clock = clock; - return this; - } - - public Builder zabbixUserPwd( String zabbixUserPwd ) - { - this.zabbixUserPwd = zabbixUserPwd; - return this; - } - - public IndyZabbixSender build() - { - return new IndyZabbixSender( this.bCreateNotExistHostGroup, this.bCreateNotExistHost, - this.bCreateNotExistItem, this.bCreateNotExistZabbixSender, this.zabbixApi, - this.zabbixHostUrl, this.hostGroup, this.group, this.clock, this.hostName, - this.ip, this.zabbixUserName, this.zabbixUserPwd, this.zabbixHost, - this.zabbixPort, this.indyHttpProvider, this.zabbixCacheStorage ); - } - - } - - public IndyZabbixSender( boolean bCreateNotExistHostGroup, boolean bCreateNotExistHost, boolean bCreateNotExistItem, - boolean bCreateNotExistZabbixApi, ZabbixApi zabbixApi, String zabbixHostUrl, - String hostGroup, String group, long clock, String hostName, String ip, - String zabbixUserName, String zabbixUserPwd, String zabbixHost, int zabbixPort, - IndyHttpProvider indyHttpProvider, ZabbixCacheStorage zabbixCacheStorage ) - { - - this.bCreateNotExistHostGroup = bCreateNotExistHostGroup; - this.bCreateNotExistHost = bCreateNotExistHost; - this.bCreateNotExistItem = bCreateNotExistItem; - this.bCreateNotExistZabbixApi = bCreateNotExistZabbixApi; - this.zabbixApi = zabbixApi; - this.zabbixHostUrl = zabbixHostUrl; - this.hostGroup = hostGroup; - this.group = group; - this.clock = clock; - this.hostName = hostName; - this.ip = ip; - this.zabbixUserName = zabbixUserName; - this.zabbixUserPwd = zabbixUserPwd; - this.indyHttpProvider = indyHttpProvider; - this.zabbixCacheStorage = zabbixCacheStorage; - this.sender = new ZabbixSender( zabbixHost, zabbixPort ); - } - - String checkHostGroup( String hostGroup ) throws IOException, IndyHttpException, IndyMetricsException - { - if ( zabbixCacheStorage.getHostGroup( hostGroup ) == null ) - { - try - { - this.zabbixApiInit(); - String groupid = zabbixApi.getHostgroup( hostGroup ); - if ( groupid == null ) - { - groupid = zabbixApi.hostgroupCreate( hostGroup ); - zabbixCacheStorage.putHostGroup( hostGroup, groupid ); - } - zabbixCacheStorage.putHostGroup( hostGroup, groupid ); - return groupid; - } - finally - { - this.destroy(); - } - } - return null; - } - - String checkHost( String host, String ip ) throws IOException, IndyHttpException, IndyMetricsException - { - try - { - if ( zabbixCacheStorage.getHost( host ) == null ) - { - this.zabbixApiInit(); - String hostid = zabbixApi.getHost( host ); - if ( hostid != null ) - { - zabbixCacheStorage.putHost( host, hostid ); - - } - else - {// host not exists, create it. - - hostid = zabbixApi.hostCreate( host, zabbixCacheStorage.getHostGroup( hostGroup ), ip ); - zabbixCacheStorage.putHost( host, hostid ); - } - return hostid; - } - } - finally - { - this.destroy(); - } - return null; - } - - private String itemCacheKey( String host, String item ) - { - return host + ":" + item; - } - - String checkItem( String host, String item, int valueType ) throws IOException, IndyHttpException, IndyMetricsException - { - - try - { - if ( zabbixCacheStorage.getItem( itemCacheKey( host, item ) ) == null ) - { - this.zabbixApiInit(); - - String itemid = zabbixApi.getItem( host, item, zabbixCacheStorage.getHost( host ) ); - if ( itemid == null ) - { - itemid = zabbixApi.createItem( host, item, zabbixCacheStorage.getHost( host ), valueType ); - zabbixCacheStorage.putItem( itemCacheKey( host, item ), itemid ); - } - else - { - // put into metricsZabbixCache - zabbixCacheStorage.putItem( itemCacheKey( host, item ), itemid ); - } - return itemid; - } - } - finally - { - this.destroy(); - } - - return null; - } - - public SenderResult send( DataObject dataObject ) throws IOException, IndyException - { - return this.send( dataObject, System.currentTimeMillis() / 1000L ); - } - - public SenderResult send( DataObject dataObject, long clock ) throws IOException, IndyException - { - return this.send( Collections.singletonList( dataObject ), clock ); - } - - public SenderResult send( List dataObjectList ) throws IOException, IndyException - { - return this.send( dataObjectList, System.currentTimeMillis() / 1000L ); - } - - /** - * - * @param dataObjectList - * @param clock - * TimeUnit is SECONDS. - * @return - * @throws IOException - */ - public SenderResult send( List dataObjectList, long clock ) - throws IOException, IndyHttpException, IndyMetricsException - { - if ( bCreateNotExistHostGroup ) - { - try - { - checkHostGroup( hostGroup ); - } - catch ( IndyHttpException e ) - { - logger.error( "Check HostGroup of Zabbix is error:" + e.getMessage() ); - throw e; - } - } - if ( bCreateNotExistHost ) - { - try - { - checkHost( hostName, ip ); - } - catch ( IndyHttpException e ) - { - logger.error( "Check Host of Zabbix is error:" + e.getMessage() ); - throw e; - } - } - - if ( bCreateNotExistItem ) - { - for ( DataObject object : dataObjectList ) - { - String key = object.getKey(); - int vauleType = 0; - Matcher mat = pat.matcher( object.getValue() ); - if ( !mat.find() ) - { - vauleType = 4; - } - try - { - checkItem( hostName, key, vauleType ); - } - catch ( IndyHttpException e ) - { - logger.error( "Check Item of Zabbix is error:" + e.getMessage() ); - throw e; - } - } - } - - try - { - SenderResult senderResult = sender.send( dataObjectList, clock ); - if ( !senderResult.success() ) - { - logger.error( "send data to zabbix server error! senderResult:" + senderResult ); - } - return senderResult; - } - catch ( IOException e ) - { - logger.error( "send data to zabbix server error!", e ); - throw e; - } - } - - public void destroy() - { - if ( bCreateNotExistZabbixApi ) - { - return; - } - if ( zabbixApi != null ) - zabbixApi.destroy(); - } - - private void zabbixApiInit() throws IndyMetricsException, IOException, IndyHttpException - { - if ( !bCreateNotExistZabbixApi ) - { - return; - } - if ( this.zabbixHostUrl == null || "".equals( this.zabbixHostUrl ) ) - { - throw new IndyMetricsException( "can not find Zabbix's Host" ); - } - - zabbixApi = new IndyZabbixApi( this.zabbixHostUrl, indyHttpProvider.createClient( new URL( zabbixHostUrl ).getHost() ) ); - - zabbixApi.init(); - - if ( this.zabbixUserName == null || "".equals( this.zabbixUserName ) || this.zabbixUserPwd == null || "".equals( - this.zabbixUserPwd ) ) - { - throw new IndyMetricsException( "can not find Zabbix's username or password" ); - } - boolean login = zabbixApi.login( this.zabbixUserName, this.zabbixUserPwd ); - - logger.info( "User:" + this.zabbixUserName + " login is " + login ); - } - - public ZabbixApi getZabbixApi() - { - return zabbixApi; - } - - public void setZabbixApi( ZabbixApi zabbixApi ) - { - this.zabbixApi = zabbixApi; - } - - public boolean isbCreateNotExistHost() - { - return bCreateNotExistHost; - } - - public void setbCreateNotExistHost( boolean bCreateNotExistHost ) - { - this.bCreateNotExistHost = bCreateNotExistHost; - } - - public String getHostGroup() - { - return hostGroup; - } - - public void setHostGroup( String hostGroup ) - { - this.hostGroup = hostGroup; - } - - public boolean isbCreateNotExistItem() - { - return bCreateNotExistItem; - } - - public void setbCreateNotExistItem( boolean bCreateNotExistItem ) - { - this.bCreateNotExistItem = bCreateNotExistItem; - } - - public String getGroup() - { - return group; - } - - public void setGroup( String group ) - { - this.group = group; - } - - public long getClock() - { - return clock; - } - - public void setClock( long clock ) - { - this.clock = clock; - } - - public String getHostName() - { - return hostName; - } - - public void setHostName( String hostName ) - { - this.hostName = hostName; - } - - public String getIp() - { - return ip; - } - - public void setIp( String ip ) - { - this.ip = ip; - } - - public boolean isbCreateNotExistHostGroup() - { - return bCreateNotExistHostGroup; - } - - public void setbCreateNotExistHostGroup( boolean bCreateNotExistHostGroup ) - { - this.bCreateNotExistHostGroup = bCreateNotExistHostGroup; - } - - public String getZabbixHostUrl() - { - return zabbixHostUrl; - } - - public void setZabbixHostUrl( String zabbixHostUrl ) - { - this.zabbixHostUrl = zabbixHostUrl; - } - - public String getZabbixUserName() - { - return zabbixUserName; - } - - public void setZabbixUserName( String zabbixUserName ) - { - this.zabbixUserName = zabbixUserName; - } - - public String getZabbixUserPwd() - { - return zabbixUserPwd; - } - - public void setZabbixUserPwd( String zabbixUserPwd ) - { - this.zabbixUserPwd = zabbixUserPwd; - } - - public boolean isbCreateNotExistZabbixApi() - { - return bCreateNotExistZabbixApi; - } - - public void setbCreateNotExistZabbixApi( boolean bCreateNotExistZabbixApi ) - { - this.bCreateNotExistZabbixApi = bCreateNotExistZabbixApi; - } - -} diff --git a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/sender/SenderRequest.java b/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/sender/SenderRequest.java deleted file mode 100644 index 05fe738519..0000000000 --- a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/sender/SenderRequest.java +++ /dev/null @@ -1,120 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.zabbix.sender; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.List; - -/** - * - */ -public class SenderRequest -{ - static final byte header[] = { 'Z', 'B', 'X', 'D', '\1' }; - - private static final Logger logger = LoggerFactory.getLogger( SenderRequest.class ); - - /** - * TimeUnit is SECONDS. - */ - long clock; - - List data; - - String request = "sender data"; - - public byte[] toBytes() throws JsonProcessingException - { - // https://www.zabbix.org/wiki/Docs/protocols/zabbix_sender/2.0 - // https://www.zabbix.org/wiki/Docs/protocols/zabbix_sender/1.8/java_example - - ObjectMapper mapper = new ObjectMapper(); - byte[] jsonBytes = mapper.writeValueAsBytes( this ); - - byte[] result = new byte[header.length + 4 + 4 + jsonBytes.length]; - - System.arraycopy( header, 0, result, 0, header.length ); - - result[header.length] = (byte) ( jsonBytes.length & 0xFF ); - result[header.length + 1] = (byte) ( ( jsonBytes.length >> 8 ) & 0x00FF ); - result[header.length + 2] = (byte) ( ( jsonBytes.length >> 16 ) & 0x0000FF ); - result[header.length + 3] = (byte) ( ( jsonBytes.length >> 24 ) & 0x000000FF ); - - System.arraycopy( jsonBytes, 0, result, header.length + 4 + 4, jsonBytes.length ); - return result; - } - - public String getRequest() - { - return request; - } - - public void setRequest( String request ) - { - this.request = request; - } - - /** - * TimeUnit is SECONDS. - * - * @return - */ - public long getClock() - { - return clock; - } - - /** - * TimeUnit is SECONDS. - * - * @param clock - */ - public void setClock( long clock ) - { - this.clock = clock; - } - - public List getData() - { - return data; - } - - public void setData( List data ) - { - this.data = data; - } - - @Override - public String toString() - { - try - { - ObjectMapper mapper = new ObjectMapper(); - return mapper.writeValueAsString( this ); - - } - catch ( JsonProcessingException e ) - { - logger.error( e.getMessage() ); - } - return super.toString(); - } -} - diff --git a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/sender/SenderResult.java b/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/sender/SenderResult.java deleted file mode 100644 index 2648aeaa50..0000000000 --- a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/sender/SenderResult.java +++ /dev/null @@ -1,95 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.zabbix.sender; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -/** - * - */ -public class SenderResult { - int processed; - int failed; - int total; - - float spentSeconds; - - /** - * sometimes zabbix server will return "[]". - */ - boolean bReturnEmptyArray = false; - - /** - * if all sended data are processed, will return true, else return false. - * - * @return - */ - public boolean success() { - return !bReturnEmptyArray && processed == total; - } - - public int getProcessed() { - return processed; - } - - public void setProcessed(int processed) { - this.processed = processed; - } - - public int getFailed() { - return failed; - } - - public void setFailed(int failed) { - this.failed = failed; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public float getSpentSeconds() { - return spentSeconds; - } - - public void setSpentSeconds(float spentSeconds) { - this.spentSeconds = spentSeconds; - } - - public void setbReturnEmptyArray(boolean bReturnEmptyArray) { - this.bReturnEmptyArray = bReturnEmptyArray; - } - - @Override - public String toString() { - ObjectMapper mapper = new ObjectMapper(); - - try - { - return mapper.writeValueAsString( this ); - } - catch ( JsonProcessingException e ) - { - e.printStackTrace(); - throw new RuntimeException( e ); - } - } -} diff --git a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/sender/ZabbixSender.java b/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/sender/ZabbixSender.java deleted file mode 100644 index e404e203b5..0000000000 --- a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/zabbix/sender/ZabbixSender.java +++ /dev/null @@ -1,193 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.zabbix.sender; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.InetSocketAddress; -import java.net.Socket; -import java.nio.charset.Charset; -import java.util.Collections; -import java.util.List; -import java.util.regex.Pattern; - -/** - * Created by xiabai on 4/7/17. - * Copy from - */ -public class ZabbixSender -{ - private static final Pattern PATTERN = Pattern.compile( "[^0-9\\.]+"); - private static final Logger logger = LoggerFactory.getLogger( ZabbixSender.class ); - String host; - int port; - int connectTimeout = 3 * 1000; - int socketTimeout = 3 * 1000; - - public ZabbixSender(String host, int port) { - this.host = host; - this.port = port; - } - - public ZabbixSender(String host, int port, int connectTimeout, int socketTimeout) { - this(host, port); - this.connectTimeout = connectTimeout; - this.socketTimeout = socketTimeout; - } - - public SenderResult send(DataObject dataObject) throws IOException - { - return send(dataObject, System.currentTimeMillis() / 1000); - } - - /** - * - * @param dataObject - * @param clock - * TimeUnit is SECONDS. - * @return - * @throws IOException - */ - public SenderResult send(DataObject dataObject, long clock) throws IOException { - return send( Collections.singletonList( dataObject), clock); - } - - public SenderResult send(List dataObjectList) throws IOException { - return send(dataObjectList, System.currentTimeMillis() / 1000); - } - - /** - * - * @param dataObjectList - * @param clock - * TimeUnit is SECONDS. - * @return - * @throws IOException - */ - public SenderResult send(List dataObjectList, long clock) throws IOException { - //TODO Need refacing the method using XNIO - SenderResult senderResult = new SenderResult(); - - Socket socket = null; - InputStream inputStream = null; - OutputStream outputStream = null; - try { - socket = new Socket(); - - socket.setSoTimeout(socketTimeout); - socket.connect( new InetSocketAddress( host, port), connectTimeout); - - inputStream = socket.getInputStream(); - outputStream = socket.getOutputStream(); - - SenderRequest senderRequest = new SenderRequest(); - senderRequest.setData(dataObjectList); - senderRequest.setClock(clock); - - outputStream.write(senderRequest.toBytes()); - - outputStream.flush(); - - // normal responseData.length < 100 - byte[] responseData = new byte[512]; - - int readCount = 0; - - while (true) { - int read = inputStream.read(responseData, readCount, responseData.length - readCount); - if (read <= 0) { - break; - } - readCount += read; - } - - if (readCount < 13) { - // seems zabbix server return "[]"? - senderResult.setbReturnEmptyArray(true); - } - - // header('ZBXD\1') + len + 0 - // 5 + 4 + 4 - String jsonString = new String( responseData, 13, readCount - 13, Charset.forName( "UTF-8")); - logger.info( "jsonString : " +jsonString ); - ObjectMapper mapper = new ObjectMapper(); - JsonNode json = mapper.readTree( jsonString ); - -// JSONObject json = JSON.parseObject(jsonString); - String info = json.get("info").asText(); - // example info: processed: 1; failed: 0; total: 1; seconds spent: - // 0.000053 - // after split: [, 1, 0, 1, 0.000053] - String[] split = PATTERN.split(info); - senderResult.setProcessed(Integer.parseInt(split[1])); - senderResult.setFailed(Integer.parseInt(split[2])); - senderResult.setTotal(Integer.parseInt(split[3])); - senderResult.setSpentSeconds(Float.parseFloat(split[4])); - - } finally { - if (socket != null) { - socket.close(); - } - if (inputStream != null) { - inputStream.close(); - } - if (outputStream != null) { - outputStream.close(); - } - } - - return senderResult; - } - - public String getHost() { - return host; - } - - public void setHost(String host) { - this.host = host; - } - - public int getPort() { - return port; - } - - public void setPort(int port) { - this.port = port; - } - - public int getConnectTimeout() { - return connectTimeout; - } - - public void setConnectTimeout(int connectTimeout) { - this.connectTimeout = connectTimeout; - } - - public int getSocketTimeout() { - return socketTimeout; - } - - public void setSocketTimeout(int socketTimeout) { - this.socketTimeout = socketTimeout; - } - -} diff --git a/subsys/metrics/reporter/src/main/resources/META-INF/beans.xml b/subsys/metrics/reporter/src/main/resources/META-INF/beans.xml deleted file mode 100644 index 25aab64176..0000000000 --- a/subsys/metrics/reporter/src/main/resources/META-INF/beans.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - \ No newline at end of file diff --git a/subsys/metrics/reporter/src/test/java/org/commonjava/indy/metrics/socket/Capitalizer.java b/subsys/metrics/reporter/src/test/java/org/commonjava/indy/metrics/socket/Capitalizer.java deleted file mode 100644 index fe59356b0c..0000000000 --- a/subsys/metrics/reporter/src/test/java/org/commonjava/indy/metrics/socket/Capitalizer.java +++ /dev/null @@ -1,123 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.socket; - -import com.fasterxml.jackson.databind.ObjectMapper; -import org.commonjava.indy.metrics.zabbix.sender.SenderRequest; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.IOException; -import java.net.Socket; -import java.util.Arrays; -import java.util.concurrent.ConcurrentHashMap; - -/** - * Created by xiabai on 5/9/17. - */ -public class Capitalizer - implements Runnable -{ - private final Logger logger = LoggerFactory.getLogger( getClass() ); - - private Socket socket; - - private int clientNumber; - - private Expectation expect; - - private ConcurrentHashMap expections; - - public Capitalizer( Socket socket, int clientNumber, ConcurrentHashMap expections ) - { - this.socket = socket; - this.clientNumber = clientNumber; - this.expections = expections; - logger.info( "New connection with client# " + clientNumber + " at " + socket ); - } - - /** - */ - public void run() - { - BufferedInputStream in = null; - BufferedOutputStream out = null; - try - { - - in = new BufferedInputStream( socket.getInputStream() ); - ObjectMapper mapper = new ObjectMapper(); - byte[] responseData = new byte[1024]; - int readCount = 0; - int read = in.read( responseData, readCount, responseData.length - readCount ); - // } - byte[] responseDataTmp = Arrays.copyOfRange( responseData, 13, responseData.length ); - SenderRequest senderRequest = mapper.readValue( responseDataTmp, SenderRequest.class ); - out = new BufferedOutputStream( socket.getOutputStream() ); - ZabbixResult zr = new ZabbixResult( expections.get( senderRequest.getRequest() ).getSenderResult() ); - out.write( getResult( mapper.writeValueAsBytes( zr ) ) ); - out.flush(); - logger.info( senderRequest.toString() ); - - } - catch ( IOException e ) - { - logger.info( "Error handling client# " + clientNumber + ": " + e ); - } - finally - { - try - { - if ( in != null ) - { - in.close(); - } - if ( out != null ) - { - out.close(); - } - if ( socket != null ) - { - socket.close(); - } - } - catch ( IOException e ) - { - logger.info( "Couldn't close a socket, what's going on?" ); - } - logger.info( "Connection with client# " + clientNumber + " closed" ); - } - } - - private byte[] getResult( byte[] responseData ) - { - byte header[] = { 'Z', 'B', 'X', 'D', '\1' }; - - byte[] info = new byte[header.length + 4 + 4 + responseData.length]; - - System.arraycopy( header, 0, info, 0, header.length ); - - info[header.length] = (byte) ( responseData.length & 0xFF ); - info[header.length + 1] = (byte) ( ( responseData.length >> 8 ) & 0x00FF ); - info[header.length + 2] = (byte) ( ( responseData.length >> 16 ) & 0x0000FF ); - info[header.length + 3] = (byte) ( ( responseData.length >> 24 ) & 0x000000FF ); - - System.arraycopy( responseData, 0, info, header.length + 4 + 4, responseData.length ); - return info; - } -} diff --git a/subsys/metrics/reporter/src/test/java/org/commonjava/indy/metrics/socket/Expectation.java b/subsys/metrics/reporter/src/test/java/org/commonjava/indy/metrics/socket/Expectation.java deleted file mode 100644 index 96a20ce908..0000000000 --- a/subsys/metrics/reporter/src/test/java/org/commonjava/indy/metrics/socket/Expectation.java +++ /dev/null @@ -1,52 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.socket; - -import org.commonjava.indy.metrics.zabbix.sender.SenderResult; - -/** - * Created by xiabai on 5/9/17. - */ -public class Expectation -{ - private final String method; - - private final byte[] requestBody; - - private final SenderResult senderResult; - - public Expectation( String method, byte[] requestBody, SenderResult senderResult ) - { - this.method = method; - this.requestBody = requestBody; - this.senderResult = senderResult; - } - - public String getMethod() - { - return method; - } - - public byte[] getRequestBody() - { - return requestBody; - } - - public SenderResult getSenderResult() - { - return senderResult; - } -} diff --git a/subsys/metrics/reporter/src/test/java/org/commonjava/indy/metrics/socket/ZabbixResult.java b/subsys/metrics/reporter/src/test/java/org/commonjava/indy/metrics/socket/ZabbixResult.java deleted file mode 100644 index 0d9c79cfae..0000000000 --- a/subsys/metrics/reporter/src/test/java/org/commonjava/indy/metrics/socket/ZabbixResult.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.socket; - -import org.commonjava.indy.metrics.zabbix.sender.SenderResult; - -/** - * Created by xiabai on 5/12/17. - */ -public class ZabbixResult -{ - private String info; - - private SenderResult result; - - public ZabbixResult( SenderResult senderResult ) - { - this.result = senderResult; - } - - public String getInfo() - { - return toString(); - } - - public void setInfo( String info ) - { - this.info = info; - } - - @Override - public String toString() - { - return "," + result.getProcessed() + "," + result.getFailed() + "," + result.getTotal() + "," - + result.getSpentSeconds(); - } -} diff --git a/subsys/metrics/reporter/src/test/java/org/commonjava/indy/metrics/socket/ZabbixSocketServer.java b/subsys/metrics/reporter/src/test/java/org/commonjava/indy/metrics/socket/ZabbixSocketServer.java deleted file mode 100644 index 5f1b821499..0000000000 --- a/subsys/metrics/reporter/src/test/java/org/commonjava/indy/metrics/socket/ZabbixSocketServer.java +++ /dev/null @@ -1,99 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.socket; - -import java.io.IOException; -import java.net.ServerSocket; -import java.util.concurrent.ConcurrentHashMap; - -import static org.commonjava.test.http.util.PortFinder.findPortFor; - -/** - * Created by xiabai on 5/9/17. - */ -public class ZabbixSocketServer - implements Runnable -{ - private ConcurrentHashMap expections = new ConcurrentHashMap(); - - private int port; - - public boolean isStartFlag() - { - return startFlag; - } - - public void setStartFlag( boolean startFlag ) - { - this.startFlag = startFlag; - } - - private boolean startFlag = true; - - public Expectation getExpection( String method ) - { - return expections.get( method ); - } - - public void setExpection( String method, Expectation expectation ) - { - expections.put( method, expectation ); - } - - public int getPort() - { - return port; - } - - public void run() - { - ServerSocket listener = null; - try - { - int clientNumber = 0; - listener = new ServerSocket( findPortFor( 16, p -> p ) ); - - this.port = listener.getLocalPort(); - - synchronized ( this ) - { - notifyAll(); - } - - while ( startFlag ) - { - - new Thread( new Capitalizer( listener.accept(), clientNumber++, expections ) ).start(); - } - } - catch ( IOException e ) - { - throw new RuntimeException( e ); - } - finally - { - try - { - listener.close(); - } - catch ( IOException e ) - { - e.printStackTrace(); - } - } - } - -} \ No newline at end of file diff --git a/subsys/metrics/reporter/src/test/java/org/commonjava/indy/metrics/zabbix/api/ZabbixAPITest.java b/subsys/metrics/reporter/src/test/java/org/commonjava/indy/metrics/zabbix/api/ZabbixAPITest.java deleted file mode 100644 index 81baf31205..0000000000 --- a/subsys/metrics/reporter/src/test/java/org/commonjava/indy/metrics/zabbix/api/ZabbixAPITest.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.zabbix.api; - -import org.commonjava.test.http.expect.ExpectationServer; -import org.junit.After; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; - -import java.io.IOException; - -/** - * Created by xiabai on 5/12/17. - */ -public class ZabbixAPITest -{ - private final static String PATHPARTS = "/api_jsonrpc.php"; - - @Rule - public ExpectationServer server = new ExpectationServer(); - - String url = ""; - - @Before - public void start() throws Exception - { - server.expect( "POST", server.formatUrl( PATHPARTS ), new ZabbxiAPIHandler() ); - server.start(); - } - - @After - public void down() throws Exception - { -// server.stop(); - } - - @Test - public void gethostid() throws IOException - { - IndyZabbixApi api = new IndyZabbixApi( server.formatUrl( PATHPARTS ) ); - api.init(); - org.junit.Assert.assertEquals( "123", api.getHost( "test" ) ); - api.destroy(); - } - - @Test - public void getitemid() throws IOException - { - IndyZabbixApi api = new IndyZabbixApi( server.formatUrl( PATHPARTS ) ); - api.init(); - org.junit.Assert.assertEquals( "456", api.getItem( "test","test-item","123" ) ); - api.destroy(); - } -} diff --git a/subsys/metrics/reporter/src/test/java/org/commonjava/indy/metrics/zabbix/api/ZabbxiAPIHandler.java b/subsys/metrics/reporter/src/test/java/org/commonjava/indy/metrics/zabbix/api/ZabbxiAPIHandler.java deleted file mode 100644 index 077afa0740..0000000000 --- a/subsys/metrics/reporter/src/test/java/org/commonjava/indy/metrics/zabbix/api/ZabbxiAPIHandler.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.zabbix.api; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.commons.io.IOUtils; -import org.commonjava.test.http.expect.ExpectationHandler; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.io.OutputStream; -import java.util.HashMap; -import java.util.Map; - -/** - * Created by xiabai on 5/12/17. - */ -public class ZabbxiAPIHandler - implements ExpectationHandler -{ - @Override - public void handle( HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse ) - throws ServletException, IOException - { - String json = IOUtils.toString( httpServletRequest.getInputStream() ); - ObjectMapper mapper = new ObjectMapper(); - Request request = mapper.readValue( json, Request.class ); - String result = ""; - if ( request.getMethod().equals( "host.get" ) ) - { - result = getHostids(); - } - if ( request.getMethod().equals( "item.get" ) ) - { - result = getItem(); - } - httpServletResponse.setCharacterEncoding( "UTF-8" ); - httpServletResponse.setContentType( "application/json; charset=utf-8" ); - httpServletResponse.setStatus( 200 ); - OutputStream out = httpServletResponse.getOutputStream(); - IOUtils.write( result, out ); - - } - - private String getHostids() throws JsonProcessingException - { - Map map = new HashMap(); - map.put( "jsonrpc", "2.0" ); - Map[] result = new HashMap[1]; - Map host = new HashMap(); - host.put( "hostid", "123" ); - result[0] = host; - map.put( "result", result ); - ObjectMapper mapper = new ObjectMapper(); - return mapper.writeValueAsString( map ); - } - - private String getItem() throws JsonProcessingException - { - Map map = new HashMap(); - map.put( "jsonrpc", "2.0" ); - Map[] result = new HashMap[1]; - Map host = new HashMap(); - host.put( "itemid", "456" ); - result[0] = host; - map.put( "result", result ); - ObjectMapper mapper = new ObjectMapper(); - return mapper.writeValueAsString( map ); - } -} diff --git a/subsys/metrics/reporter/src/test/java/org/commonjava/indy/metrics/zabbix/sender/ZabbixSenderTest.java b/subsys/metrics/reporter/src/test/java/org/commonjava/indy/metrics/zabbix/sender/ZabbixSenderTest.java deleted file mode 100644 index 4c1f7bf0bd..0000000000 --- a/subsys/metrics/reporter/src/test/java/org/commonjava/indy/metrics/zabbix/sender/ZabbixSenderTest.java +++ /dev/null @@ -1,91 +0,0 @@ -/** - * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * 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.commonjava.indy.metrics.zabbix.sender; - -import org.commonjava.indy.metrics.socket.Expectation; -import org.commonjava.indy.metrics.socket.ZabbixSocketServer; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; - -import static org.junit.Assert.fail; - -/** - * Created by xiabai on 5/9/17. - */ -public class ZabbixSenderTest -{ - private ZabbixSocketServer socketServer; - - private DataObject dataObject; - - @Before - public void socketStart() throws Exception - { - socketServer = new ZabbixSocketServer(); - dataObject = new DataObject(); - dataObject.setClock( 1000 ); - dataObject.setHost( "test" ); - dataObject.setKey( "test-item" ); - dataObject.setValue( "123" ); - SenderRequest sr = new SenderRequest(); - sr.setRequest( "dataSend" ); - sr.setData( new ArrayList<>( Collections.singletonList( dataObject ) ) ); - SenderResult senderResult = new SenderResult(); - senderResult.setFailed( 0 ); - senderResult.setProcessed( 1 ); - senderResult.setTotal( 1 ); - senderResult.setSpentSeconds( 1l ); - System.out.print( sr.toString() ); - Expectation expectation = new Expectation( "sender data", sr.toBytes(), senderResult ); - socketServer.setExpection( "sender data", expectation ); - Thread t = new Thread( socketServer ); - t.start(); - - synchronized ( socketServer ) - { - socketServer.wait(); - } - } - - @After - public void shutDown() throws Exception - { - socketServer.setStartFlag( false ); - } - - @Test - public void dataSend() throws Exception - { - - ZabbixSender sender = new ZabbixSender( "localhost", socketServer.getPort() ); - try - { - - SenderResult result = sender.send( dataObject ); - org.junit.Assert.assertEquals( result.getProcessed(), result.getTotal() ); - } - catch ( IOException e ) - { - e.printStackTrace(); - fail( "Error trying to send/receive data" ); - } - } -} diff --git a/subsys/metrics/core/src/main/conf/conf.d/elasticsearch.properties b/subsys/metrics/src/main/conf/conf.d/elasticsearch.properties similarity index 100% rename from subsys/metrics/core/src/main/conf/conf.d/elasticsearch.properties rename to subsys/metrics/src/main/conf/conf.d/elasticsearch.properties diff --git a/subsys/metrics/core/src/main/conf/conf.d/metrics.conf b/subsys/metrics/src/main/conf/conf.d/metrics.conf similarity index 68% rename from subsys/metrics/core/src/main/conf/conf.d/metrics.conf rename to subsys/metrics/src/main/conf/conf.d/metrics.conf index 09c4a87af8..befce628d3 100644 --- a/subsys/metrics/core/src/main/conf/conf.d/metrics.conf +++ b/subsys/metrics/src/main/conf/conf.d/metrics.conf @@ -1,6 +1,5 @@ [metrics] enabled = false -reporter.enabled = true # Specify node prefix (on cluster). This prefix will be prepended to all metric names. Default empty. # @@ -43,7 +42,7 @@ measure.transport = true #measure.transport.repos = central # List of reporters (comma-separated). At present, Indy supports reporters: -# reporter = graphite,zabbix,elasticsearch,console +# reporter = graphite,elasticsearch,console # reporter = console @@ -70,35 +69,6 @@ graphite.reporter.jvm.period = 300 # Period of healthcheck item for reporting graphite.reporter.healthcheck.period = 600 -############################################ -# Zabbix reporter options -############################################ - -#The Zabbix API is a web based API and is shipped as part of the web frontend -# API URL used to access Zabbix from a web browser -zabbix.api.url = example.com -#Zabbix username for login Zabbix server(Zabbix API) -zabbix.user = test -#Zabbix password for login Zabbix server(Zabbix API) -zabbix.pwd = test -# Zabbix sender is a command line utility that may be used to send performance data to Zabbix server for processing. -# Host of Zabbix server for Zabbix sender -zabbix.sender.host = 192.168.1.1 -# Port of Zabbix server for Zabbix sender -zabbix.sender.port = 10051 -# This is the hostname of the current Indy instance, it also is host name of Zabbix monitoring -zabbix.indy.host = example.com -# Specific prefix for Zabbix Item -zabbix.reporter.prefix = local.one -# Indy's metrics item have three type: simple,jvm,healthcheck. -# Those type have different period of reporter -# Period of simple item for reporting -zabbix.reporter.simple.period = 30 -# Period of jvm item for reporting -zabbix.reporter.jvm.period = 300 -# Period of healthcheck item for reporting -zabbix.reporter.healthcheck.period = 600 - ############################################ # Elasticsearch reporter options ############################################ diff --git a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/jaxrs/producer/IndyMetricProducer.java b/subsys/metrics/src/main/java/org/commonjava/indy/subsys/metrics/IndyMetricsStartupAction.java similarity index 55% rename from subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/jaxrs/producer/IndyMetricProducer.java rename to subsys/metrics/src/main/java/org/commonjava/indy/subsys/metrics/IndyMetricsStartupAction.java index f1a016ecb2..23582845f4 100644 --- a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/jaxrs/producer/IndyMetricProducer.java +++ b/subsys/metrics/src/main/java/org/commonjava/indy/subsys/metrics/IndyMetricsStartupAction.java @@ -13,58 +13,31 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.commonjava.indy.metrics.jaxrs.producer; +package org.commonjava.indy.subsys.metrics; -import com.codahale.metrics.MetricRegistry; -import com.codahale.metrics.health.HealthCheckRegistry; import org.commonjava.indy.action.IndyLifecycleException; import org.commonjava.indy.action.StartupAction; -import org.commonjava.indy.metrics.IndyMetricsManager; +import org.commonjava.o11yphant.metrics.reporter.ReporterInitializer; import javax.enterprise.context.ApplicationScoped; -import javax.enterprise.inject.Produces; import javax.inject.Inject; -/** - * Created by xiabai on 2/27/17. - */ -public class IndyMetricProducer implements StartupAction +@ApplicationScoped +public class IndyMetricsStartupAction implements StartupAction { - - private static final String METRIC_ID = "metric"; - - @ApplicationScoped - @Produces - public MetricRegistry getMetricRegistry() - { - return new MetricRegistry(); - } - - @ApplicationScoped - @Produces - public HealthCheckRegistry getHealthCheckRegistry() { - return new HealthCheckRegistry(); - } - - @Override - public String getId() - { - return METRIC_ID; - } - @Inject - private IndyMetricsManager indyMetricsManager; + private ReporterInitializer reporterInitializer; @Override public void start() throws IndyLifecycleException { try { - indyMetricsManager.startReporter(); + reporterInitializer.init(); } catch ( Exception e ) { - throw new IndyLifecycleException( "Failed while attempting to start Metric reporters.", e ); + throw new IndyLifecycleException( "Failed to setup metrics!", e ); } } @@ -73,4 +46,10 @@ public int getStartupPriority() { return 10; } + + @Override + public String getId() + { + return "Indy metrics initialization"; + } } diff --git a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/TrafficClassifier.java b/subsys/metrics/src/main/java/org/commonjava/indy/subsys/metrics/IndyTrafficClassifier.java similarity index 75% rename from subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/TrafficClassifier.java rename to subsys/metrics/src/main/java/org/commonjava/indy/subsys/metrics/IndyTrafficClassifier.java index 30682f09f1..b381d85e48 100644 --- a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/TrafficClassifier.java +++ b/subsys/metrics/src/main/java/org/commonjava/indy/subsys/metrics/IndyTrafficClassifier.java @@ -13,10 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.commonjava.indy.metrics; +package org.commonjava.indy.subsys.metrics; -import org.commonjava.cdi.util.weft.ThreadContext; import org.commonjava.indy.IndyRequestConstants; +import org.commonjava.o11yphant.metrics.TrafficClassifier; import org.commonjava.indy.model.core.HostedRepository; import org.commonjava.indy.model.core.RemoteRepository; import org.commonjava.indy.model.core.StoreType; @@ -33,65 +33,51 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; +import java.util.Optional; import java.util.Set; import static java.util.Arrays.asList; -import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; import static org.apache.commons.lang3.StringUtils.join; -import static org.commonjava.indy.metrics.TrafficClassifierConstants.FN_CONTENT; -import static org.commonjava.indy.metrics.TrafficClassifierConstants.FN_CONTENT_LISTING; -import static org.commonjava.indy.metrics.TrafficClassifierConstants.FN_CONTENT_MAVEN; -import static org.commonjava.indy.metrics.TrafficClassifierConstants.FN_CONTENT_NPM; -import static org.commonjava.indy.metrics.TrafficClassifierConstants.FN_MAVEN_DOWNLOAD; -import static org.commonjava.indy.metrics.TrafficClassifierConstants.FN_MAVEN_UPLOAD; -import static org.commonjava.indy.metrics.TrafficClassifierConstants.FN_METADATA; -import static org.commonjava.indy.metrics.TrafficClassifierConstants.FN_METADATA_MAVEN; -import static org.commonjava.indy.metrics.TrafficClassifierConstants.FN_METADATA_NPM; -import static org.commonjava.indy.metrics.TrafficClassifierConstants.FN_NPM_DOWNLOAD; -import static org.commonjava.indy.metrics.TrafficClassifierConstants.FN_NPM_UPLOAD; -import static org.commonjava.indy.metrics.TrafficClassifierConstants.FN_PROMOTION; -import static org.commonjava.indy.metrics.TrafficClassifierConstants.FN_REPO_MGMT; -import static org.commonjava.indy.metrics.TrafficClassifierConstants.FN_TRACKING_RECORD; +import static org.commonjava.indy.subsys.metrics.IndyTrafficClassifierConstants.FN_CONTENT; +import static org.commonjava.indy.subsys.metrics.IndyTrafficClassifierConstants.FN_CONTENT_LISTING; +import static org.commonjava.indy.subsys.metrics.IndyTrafficClassifierConstants.FN_CONTENT_MAVEN; +import static org.commonjava.indy.subsys.metrics.IndyTrafficClassifierConstants.FN_CONTENT_NPM; +import static org.commonjava.indy.subsys.metrics.IndyTrafficClassifierConstants.FN_MAVEN_DOWNLOAD; +import static org.commonjava.indy.subsys.metrics.IndyTrafficClassifierConstants.FN_MAVEN_UPLOAD; +import static org.commonjava.indy.subsys.metrics.IndyTrafficClassifierConstants.FN_METADATA; +import static org.commonjava.indy.subsys.metrics.IndyTrafficClassifierConstants.FN_METADATA_MAVEN; +import static org.commonjava.indy.subsys.metrics.IndyTrafficClassifierConstants.FN_METADATA_NPM; +import static org.commonjava.indy.subsys.metrics.IndyTrafficClassifierConstants.FN_NPM_DOWNLOAD; +import static org.commonjava.indy.subsys.metrics.IndyTrafficClassifierConstants.FN_NPM_UPLOAD; +import static org.commonjava.indy.subsys.metrics.IndyTrafficClassifierConstants.FN_PROMOTION; +import static org.commonjava.indy.subsys.metrics.IndyTrafficClassifierConstants.FN_REPO_MGMT; +import static org.commonjava.indy.subsys.metrics.IndyTrafficClassifierConstants.FN_TRACKING_RECORD; import static org.commonjava.indy.pkg.PackageTypeConstants.PKG_TYPE_MAVEN; import static org.commonjava.indy.pkg.PackageTypeConstants.PKG_TYPE_NPM; @ApplicationScoped -public class TrafficClassifier +public class IndyTrafficClassifier + extends TrafficClassifier { - private static final String CACHED_FUNCTIONS = "cached-functions"; - - private static final Set MODIFY_METHODS = new HashSet<>( asList( "POST", "PUT", "DELETE" ) ); - private static final Set FOLO_RECORD_ENDPOINTS = new HashSet<>( asList( "record", "report" ) ); private static final Set DEPRECATED_CONTENT_ENDPOINTS = - new HashSet<>( asList( "group", "hosted", "remote" ) ); - + new HashSet<>( asList( "group", "hosted", "remote" ) ); private SpecialPathManager specialPathManager; @Inject - public TrafficClassifier( SpecialPathManager specialPathManager ) + public IndyTrafficClassifier( SpecialPathManager specialPathManager ) { this.specialPathManager = specialPathManager; } - public List classifyFunctions( String restPath, String method ) + protected List calculateCachedFunctionClassifiers( String restPath, String method ) { - ThreadContext ctx = ThreadContext.getContext( false ); - if ( ctx != null ) - { - List cached = (List) ctx.get( CACHED_FUNCTIONS ); - if ( cached != null ) - { - return cached; - } - } - List result = new ArrayList<>(); - String[] pathParts = restPath.split("/" ); + String[] pathParts = restPath.split( "/" ); if ( pathParts.length >= 2 ) { String[] classifierParts = new String[pathParts.length - 1]; @@ -105,7 +91,7 @@ public List classifyFunctions( String restPath, String method ) result = singletonList( FN_PROMOTION ); } else if ( "admin".equals( classifierParts[0] ) && "stores".equals( classifierParts[1] ) - && classifierParts.length > 2 ) + && classifierParts.length > 2 ) { if ( MODIFY_METHODS.contains( method ) ) { @@ -118,14 +104,15 @@ else if ( "browse".equals( classifierParts[0] ) ) // this is a browse / list request result = singletonList( FN_CONTENT_LISTING ); } - else if ( ( "content".equals( classifierParts[0] ) && classifierParts.length >= 4 && ( restPath.endsWith( "/" ) - || restPath.endsWith( IndyRequestConstants.LISTING_HTML_FILE ) ) ) ) + else if ( ( "content".equals( classifierParts[0] ) && classifierParts.length >= 4 && ( + restPath.endsWith( "/" ) || restPath.endsWith( + IndyRequestConstants.LISTING_HTML_FILE ) ) ) ) { // this is an old version of the browse / list request result = singletonList( FN_CONTENT_LISTING ); } else if ( ( DEPRECATED_CONTENT_ENDPOINTS.contains( classifierParts[0] ) && ( restPath.endsWith( "/" ) - || restPath.endsWith( IndyRequestConstants.LISTING_HTML_FILE ) ) ) ) + || restPath.endsWith( IndyRequestConstants.LISTING_HTML_FILE ) ) ) ) { // this is an old, OLD version of the browse / list request result = singletonList( FN_CONTENT_LISTING ); @@ -178,8 +165,6 @@ else if ( DEPRECATED_CONTENT_ENDPOINTS.contains( classifierParts[0] ) && classif } } } - - ctx.put( CACHED_FUNCTIONS, result ); return result; } @@ -232,7 +217,8 @@ private boolean isValidContent( final String packageType, final String storeType return PackageTypeConstants.isValidPackageType( packageType ) && StoreType.get( storeType ) != null; } - private boolean isMetadata( final String packageType, final String storeType, final String storeName, final String[] pathParts, final int realPathStartIdx ) + private boolean isMetadata( final String packageType, final String storeType, final String storeName, + final String[] pathParts, final int realPathStartIdx ) { Location location = getLightweightLocation( packageType, storeType, storeName ); @@ -252,7 +238,8 @@ private Location getLightweightLocation( final String packageType, final String switch ( st ) { case remote: - return new RepositoryLocation( new RemoteRepository( packageType, storeName, "http://used.to.classify.requests.only/" ) ); + return new RepositoryLocation( new RemoteRepository( packageType, storeName, + "http://used.to.classify.requests.only/" ) ); case hosted: return new CacheOnlyLocation( new HostedRepository( packageType, storeName ) ); default: @@ -260,14 +247,4 @@ private Location getLightweightLocation( final String packageType, final String } } - public List getCachedFunctionClassifiers() - { - ThreadContext ctx = ThreadContext.getContext( false ); - if ( ctx != null ) - { - return (List) ctx.get( CACHED_FUNCTIONS ); - } - - return null; - } } diff --git a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/TrafficClassifierConstants.java b/subsys/metrics/src/main/java/org/commonjava/indy/subsys/metrics/IndyTrafficClassifierConstants.java similarity index 75% rename from subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/TrafficClassifierConstants.java rename to subsys/metrics/src/main/java/org/commonjava/indy/subsys/metrics/IndyTrafficClassifierConstants.java index f91cb65a54..5b7cc00635 100644 --- a/subsys/metrics/core/src/main/java/org/commonjava/indy/metrics/TrafficClassifierConstants.java +++ b/subsys/metrics/src/main/java/org/commonjava/indy/subsys/metrics/IndyTrafficClassifierConstants.java @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.commonjava.indy.metrics; +package org.commonjava.indy.subsys.metrics; -public final class TrafficClassifierConstants +public final class IndyTrafficClassifierConstants { public static final String FN_CONTENT = "content"; @@ -47,12 +47,12 @@ public final class TrafficClassifierConstants public static final String FN_NPM_DOWNLOAD = "npm.download"; - public static final String[] FUNCTIONS = { - FN_CONTENT, FN_CONTENT_MAVEN, FN_CONTENT_NPM, FN_CONTENT_GENERIC, - FN_METADATA, FN_METADATA_MAVEN, FN_METADATA_NPM, - FN_PROMOTION, FN_TRACKING_RECORD, FN_CONTENT_LISTING, FN_REPO_MGMT, - FN_MAVEN_UPLOAD, FN_MAVEN_DOWNLOAD, FN_NPM_UPLOAD, FN_NPM_DOWNLOAD - }; + public static final String[] FUNCTIONS = + { FN_CONTENT, FN_CONTENT_MAVEN, FN_CONTENT_NPM, FN_CONTENT_GENERIC, FN_METADATA, FN_METADATA_MAVEN, + FN_METADATA_NPM, FN_PROMOTION, FN_TRACKING_RECORD, FN_CONTENT_LISTING, FN_REPO_MGMT, + FN_MAVEN_UPLOAD, FN_MAVEN_DOWNLOAD, FN_NPM_UPLOAD, FN_NPM_DOWNLOAD }; - private TrafficClassifierConstants(){} + private IndyTrafficClassifierConstants() + { + } } diff --git a/subsys/metrics/src/main/java/org/commonjava/indy/subsys/metrics/IndyTransportMetricConfigProducer.java b/subsys/metrics/src/main/java/org/commonjava/indy/subsys/metrics/IndyTransportMetricConfigProducer.java new file mode 100644 index 0000000000..330a29a1f2 --- /dev/null +++ b/subsys/metrics/src/main/java/org/commonjava/indy/subsys/metrics/IndyTransportMetricConfigProducer.java @@ -0,0 +1,120 @@ +/** + * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) + * + * 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.commonjava.indy.subsys.metrics; + +import org.commonjava.indy.subsys.metrics.conf.IndyMetricsConfig; +import org.commonjava.maven.galley.config.TransportMetricConfig; +import org.commonjava.maven.galley.model.Location; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.inject.Produces; +import javax.inject.Inject; +import java.util.ArrayList; +import java.util.List; + +import static org.apache.commons.lang3.StringUtils.isNotBlank; +import static org.commonjava.indy.model.core.StoreType.remote; +import static org.commonjava.indy.pkg.maven.model.MavenPackageTypeDescriptor.MAVEN_PKG_KEY; + +@ApplicationScoped +public class IndyTransportMetricConfigProducer +{ + private final Logger logger = LoggerFactory.getLogger( getClass() ); + + @Inject + private IndyMetricsConfig config; + + private TransportMetricConfig transportMetricConfig; + + @Produces + public TransportMetricConfig getTransportMetricConfig() + { + if ( config.isMeasureTransport() ) + { + setUpTransportMetricConfig(); + } + + return transportMetricConfig; + } + + private void setUpTransportMetricConfig() + { + logger.info( "Adding transport metrics to registry" ); + final String measureRepos = config.getMeasureTransportRepos(); + final List list = new ArrayList<>(); + if ( isNotBlank( measureRepos ) ) + { + String[] toks = measureRepos.split( "," ); + for ( String s : toks ) + { + s = s.trim(); + if ( isNotBlank( s ) ) + { + if ( s.indexOf( ":" ) < 0 ) + { + s = MAVEN_PKG_KEY + ":" + remote.singularEndpointName() + ":" + s; // use default + } + list.add( s ); + } + } + } + transportMetricConfig = new TransportMetricConfig() + { + @Override + public boolean isEnabled() + { + return true; + } + + @Override + public String getNodePrefix() + { + return config.getNodePrefix(); + } + + @Override + public String getMetricUniqueName( Location location ) + { + String locationName = location.getName(); + for ( String s : list ) + { + if ( s.equals( locationName ) ) + { + return normalizeName( s ); + } + + if ( s.endsWith( "*" ) ) // handle wildcard + { + String prefix = s.substring( 0, s.length() - 1 ); + if ( locationName.startsWith( prefix ) ) + { + return normalizeName( prefix ); + } + } + } + return null; + } + }; + } + + private String normalizeName( String name ) + { + return name.replaceAll( ":", "." ); + } + +} diff --git a/subsys/metrics/src/main/java/org/commonjava/indy/subsys/metrics/conf/IndyMetricsConfig.java b/subsys/metrics/src/main/java/org/commonjava/indy/subsys/metrics/conf/IndyMetricsConfig.java new file mode 100644 index 0000000000..72eab3d48e --- /dev/null +++ b/subsys/metrics/src/main/java/org/commonjava/indy/subsys/metrics/conf/IndyMetricsConfig.java @@ -0,0 +1,424 @@ +/** + * Copyright (C) 2011-2020 Red Hat, Inc. (https://github.com/Commonjava/indy) + * + * 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.commonjava.indy.subsys.metrics.conf; + +import org.commonjava.indy.conf.IndyConfigInfo; +import org.commonjava.o11yphant.metrics.conf.ConsoleConfig; +import org.commonjava.o11yphant.metrics.conf.ELKConfig; +import org.commonjava.o11yphant.metrics.conf.GraphiteConfig; +import org.commonjava.o11yphant.metrics.conf.MetricsConfig; +import org.commonjava.o11yphant.metrics.conf.PrometheusConfig; +import org.commonjava.propulsor.config.annotation.ConfigName; +import org.commonjava.propulsor.config.annotation.SectionName; + +import javax.enterprise.context.ApplicationScoped; +import java.io.InputStream; +import java.util.Arrays; + +import static org.commonjava.indy.subsys.metrics.conf.IndyMetricsConfig.SECTION; + +@SectionName( SECTION ) +@ApplicationScoped +public class IndyMetricsConfig + implements IndyConfigInfo, MetricsConfig +{ + public static final String SECTION = "metrics"; + + public final static String NODE_PREFIX = "node.prefix"; + + private final static String REPORTER = "reporter"; + + private final static String REPORTER_CONSOLE_PERIOD = "console.reporter.period"; + + private final static String GRAPHITE_HOSTNAME = "graphite.hostname"; + + private final static String GRAPHITE_PORT = "graphite.port"; + + private final static String GRAPHITE_REPORTER_PREFIX = "graphite.reporter.prefix"; + + private final static String GRAPHITE_REPORTER_SIMPLE_PERIOD = "graphite.reporter.simple.period"; + + private final static String GRAPHITE_REPORTER_JVM_PERIOD = "graphite.reporter.jvm.period"; + + private final static String GRAPHITE_REPORTER_HEALTHCHECK_PERIOD = "graphite.reporter.healthcheck.period"; + + private final static String ENABLED = "enabled"; + + private static final String METER_RATIO = "meter.ratio"; + + private final static String ISPN_ENABLED = "ispn.enabled"; + + private final static String ISPN_GAUGES = "ispn.gauges"; + + private final static String ELK_REPORTER_PREFIX = "elk.reporter.prefix"; + + private final static String ELK_REPORTER_SIMPLE_PERIOD = "elk.reporter.simple.period"; + + private final static String ELK_REPORTER_JVM_PERIOD = "elk.reporter.jvm.period"; + + private final static String ELK_REPORTER_HEALTHCHECK_PERIOD = "elk.reporter.healthcheck.period"; + + private final static String ELK_REPORTER_INDEX = "elk.reporter.index"; + + private final static String ELK_REPORTER_HOSTS = "elk.reporter.hosts"; + + private static final String MEASURE_TRANSPORT = "measure.transport"; + + private static final String MEASURE_TRANSPORT_REPOS = "measure.transport.repos"; + + private final static String KOJI_ENABLED = "koji.enabled"; + + private final static String PATH_DB_ENABLED = "pathdb.enabled"; + + private final static String PATH_DB_OPERATIONS = "pathdb.operations"; + + private final static String PROMETHEUS_EXPRESSED_METRICS = "prometheus.expressed.metrics"; + + private static final String PROMETHEUS_NODE_LABEL = "prometheus.node.label"; + + private static final int DEFAULT_METER_RATIO = 1; + + private boolean ispnMetricsEnabled; + + private boolean pathDBMetricsEnabled = true; // default + + private String pathDBMetricsOperations; + + private String ispnGauges; + + private boolean measureTransport; + + private String measureTransportRepos; + + private int consolePeriod = 30; // default + + private String elkPrefix; + + private int elkSimplePeriod; + + private int elkJVMPeriod; + + private int elkHealthCheckPeriod; + + private String elkHosts; + + private String elkIndex; + + private String reporter; + + private String graphiteHostName; + + private int graphitePort; + + private String graphitePrefix; + + private int graphiteSimplePeriod; + + private int graphiteJVMPeriod; + + private int graphiteHealthcheckPeriod; + + private boolean metricsEnabled; + + private boolean kojiMetricEnabled; + + private String nodePrefix; + + private Integer meterRatio; + + private String prometheusExpressedMetrics; + + private String prometheusNodeLabel; + + public boolean isMeasureTransport() + { + return measureTransport; + } + + @ConfigName( NODE_PREFIX ) + public void setNodePrefix( String nodePrefix ) + { + this.nodePrefix = nodePrefix; + } + + public String getNodePrefix() + { + return nodePrefix; + } + + @ConfigName( MEASURE_TRANSPORT ) + public void setMeasureTransport( boolean measureTransport ) + { + this.measureTransport = measureTransport; + } + + public String getMeasureTransportRepos() + { + return measureTransportRepos; + } + + @ConfigName( MEASURE_TRANSPORT_REPOS ) + public void setMeasureTransportRepos( String measureTransportRepos ) + { + this.measureTransportRepos = measureTransportRepos; + } + + @ConfigName( REPORTER_CONSOLE_PERIOD ) + public void setConsolePeriod( int consolePeriod ) + { + this.consolePeriod = consolePeriod; + } + + @ConfigName( ELK_REPORTER_PREFIX ) + public void setElkPrefix( String elkPrefix ) + { + this.elkPrefix = elkPrefix; + } + + @ConfigName( ELK_REPORTER_SIMPLE_PERIOD ) + public void setElkSimplePeriod( int elkSimplePeriod ) + { + this.elkSimplePeriod = elkSimplePeriod; + } + + @ConfigName( ELK_REPORTER_JVM_PERIOD ) + public void setElkJVMPeriod( int elkJVMPeriod ) + { + this.elkJVMPeriod = elkJVMPeriod; + } + + @ConfigName( ELK_REPORTER_HEALTHCHECK_PERIOD ) + public void setElkHealthCheckPeriod( int elkHealthCheckPeriod ) + { + this.elkHealthCheckPeriod = elkHealthCheckPeriod; + } + + @ConfigName( ELK_REPORTER_HOSTS ) + public void setElkHosts( String elkHosts ) + { + this.elkHosts = elkHosts; + } + + @ConfigName( ELK_REPORTER_INDEX ) + public void setElkIndex( String elkIndex ) + { + this.elkIndex = elkIndex; + } + + public boolean isEnabled() + { + return metricsEnabled; + } + + @ConfigName( ENABLED ) + public void setEnabled( boolean metricsEnabled ) + { + this.metricsEnabled = metricsEnabled; + } + + @ConfigName( METER_RATIO ) + public void setMeterRatio( int meterRatio ) + { + this.meterRatio = meterRatio; + } + + @Override + public int getMeterRatio() + { + return meterRatio == null ? DEFAULT_METER_RATIO : meterRatio; + } + + @Override + public String getReporter() + { + return reporter; + } + + @ConfigName( REPORTER ) + public void setReporter( String reporter ) + { + this.reporter = reporter; + } + + @ConfigName( GRAPHITE_HOSTNAME ) + public void setGraphiteHostName( String graphiteHostName ) + { + this.graphiteHostName = graphiteHostName; + } + + @ConfigName( GRAPHITE_PORT ) + public void setGraphitePort( int graphitePort ) + { + this.graphitePort = graphitePort; + } + + @ConfigName( GRAPHITE_REPORTER_PREFIX ) + public void setGraphitePrefix( String graphitePrefix ) + { + this.graphitePrefix = graphitePrefix; + } + + @ConfigName( GRAPHITE_REPORTER_SIMPLE_PERIOD ) + public void setGraphiteSimplePeriod( int graphiteSimplePeriod ) + { + this.graphiteSimplePeriod = graphiteSimplePeriod; + } + + @ConfigName( GRAPHITE_REPORTER_JVM_PERIOD ) + public void setGraphiteJVMPeriod( int graphiteJVMPeriod ) + { + this.graphiteJVMPeriod = graphiteJVMPeriod; + } + + @ConfigName( GRAPHITE_REPORTER_HEALTHCHECK_PERIOD ) + public void setGraphiteHealthcheckPeriod( int graphiteHealthcheckPeriod ) + { + this.graphiteHealthcheckPeriod = graphiteHealthcheckPeriod; + } + + @ConfigName( KOJI_ENABLED ) + public void setKojiMetricEnabled( boolean kojiMetricEnabled ) + { + this.kojiMetricEnabled = kojiMetricEnabled; + } + + public boolean isKojiMetricEnabled() + { + return kojiMetricEnabled; + } + + public boolean isPathDBMetricsEnabled() + { + return pathDBMetricsEnabled; + } + + @ConfigName( PATH_DB_ENABLED ) + public void setPathDBMetricsEnabled( boolean pathDBMetricsEnabled ) + { + this.pathDBMetricsEnabled = pathDBMetricsEnabled; + } + + public String getPathDBMetricsOperations() + { + return pathDBMetricsOperations; + } + + @ConfigName( PATH_DB_OPERATIONS ) + public void setPathDBMetricsOperations( String pathDBMetricsOperations ) + { + this.pathDBMetricsOperations = pathDBMetricsOperations; + } + + @ConfigName( ISPN_ENABLED ) + public void setIspnMetricsEnabled( boolean ispnMetricsEnabled ) + { + this.ispnMetricsEnabled = ispnMetricsEnabled; + } + + public boolean isIspnMetricsEnabled() + { + return ispnMetricsEnabled; + } + + @ConfigName( ISPN_GAUGES ) + public void setIspnGauges( String ispnGauges ) + { + this.ispnGauges = ispnGauges; + } + + public String getIspnGauges() + { + return ispnGauges; + } + + @Override + public ConsoleConfig getConsoleConfig() + { + ConsoleConfig ret = new ConsoleConfig(); + ret.setConsolePeriodInSeconds( consolePeriod ); + return ret; + } + + @Override + public GraphiteConfig getGraphiteConfig() + { + GraphiteConfig ret = new GraphiteConfig(); + ret.setGraphiteHostName( graphiteHostName ); + ret.setGraphitePort( graphitePort ); + ret.setGraphitePeriodInSeconds( graphiteSimplePeriod ); + ret.setGraphitePrefix( graphitePrefix ); + ret.setGraphiteJVMPeriodInSeconds( graphiteJVMPeriod ); + ret.setGraphiteHealthcheckPeriodInSeconds( graphiteHealthcheckPeriod ); + return ret; + } + + @Override + public ELKConfig getELKConfig() + { + ELKConfig ret = new ELKConfig(); + ret.setElkHosts( elkHosts ); + ret.setElkIndex( elkIndex ); + ret.setElkPeriodInSeconds( elkSimplePeriod ); + ret.setElkJVMPeriodInSeconds( elkJVMPeriod ); + ret.setElkPrefix( elkPrefix ); + ret.setElkHealthCheckPeriodInSeconds( elkHealthCheckPeriod ); + return ret; + } + + public PrometheusConfig getPrometheusConfig() + { + PrometheusConfig ret = new PrometheusConfig(); + ret.setNodeLabel( prometheusNodeLabel ); + if ( prometheusExpressedMetrics != null ) + { + ret.setExpressedMetrics( Arrays.asList( prometheusExpressedMetrics.split( "\\s*,\\s*" ) ) ); + } + + return ret; + } + + public String getDefaultConfigFileName() + { + return "conf.d/metrics.conf"; + } + + public InputStream getDefaultConfig() + { + return Thread.currentThread().getContextClassLoader().getResourceAsStream( "default-metrics.conf" ); + } + + public String getPrometheusExpressedMetrics() + { + return prometheusExpressedMetrics; + } + + @ConfigName( PROMETHEUS_EXPRESSED_METRICS ) + public void setPrometheusExpressedMetrics( String prometheusExpressedMetrics ) + { + this.prometheusExpressedMetrics = prometheusExpressedMetrics; + } + + public String getPrometheusNodeLabel() + { + return prometheusNodeLabel; + } + + @ConfigName( PROMETHEUS_NODE_LABEL ) + public void setPrometheusNodeLabel( String prometheusNodeLabel ) + { + this.prometheusNodeLabel = prometheusNodeLabel; + } +} diff --git a/subsys/metrics/core/src/main/resources/META-INF/beans.xml b/subsys/metrics/src/main/resources/META-INF/beans.xml similarity index 76% rename from subsys/metrics/core/src/main/resources/META-INF/beans.xml rename to subsys/metrics/src/main/resources/META-INF/beans.xml index 0d565f116b..4c97b74b34 100644 --- a/subsys/metrics/core/src/main/resources/META-INF/beans.xml +++ b/subsys/metrics/src/main/resources/META-INF/beans.xml @@ -2,6 +2,6 @@ - org.commonjava.indy.metrics.jaxrs.interceptor.MetricsInterceptor + org.commonjava.o11yphant.metrics.interceptor.DefaultMetricsInterceptor \ No newline at end of file diff --git a/subsys/metrics/reporter/src/main/resources/default-metrics.conf b/subsys/metrics/src/main/resources/default-metrics.conf similarity index 68% rename from subsys/metrics/reporter/src/main/resources/default-metrics.conf rename to subsys/metrics/src/main/resources/default-metrics.conf index 57c12f43fa..befce628d3 100644 --- a/subsys/metrics/reporter/src/main/resources/default-metrics.conf +++ b/subsys/metrics/src/main/resources/default-metrics.conf @@ -1,6 +1,5 @@ [metrics] enabled = false -reporter.enabled = true # Specify node prefix (on cluster). This prefix will be prepended to all metric names. Default empty. # @@ -43,7 +42,7 @@ measure.transport = true #measure.transport.repos = central # List of reporters (comma-separated). At present, Indy supports reporters: -# reporter = graphite,zabbix,elasticsearch,console +# reporter = graphite,elasticsearch,console # reporter = console @@ -70,35 +69,6 @@ graphite.reporter.jvm.period = 300 # Period of healthcheck item for reporting graphite.reporter.healthcheck.period = 600 -############################################ -# Zabbix reporter options -############################################ - -#The Zabbix API is a web based API and is shipped as part of the web frontend -# API URL used to access Zabbix from a web browser -zabbix.api.url = example.com -#Zabbix username for login Zabbix server(Zabbix API) -zabbix.user = test -#Zabbix password for login Zabbix server(Zabbix API) -zabbix.pwd = test -# Zabbix sender is a command line utility that may be used to send performance data to Zabbix server for processing. -# Host of Zabbix server for Zabbix sender -zabbix.sender.host = 192.168.1.1 -# Port of Zabbix server for Zabbix sender -zabbix.sender.port = 10051 -# This is the hostname of the current Indy instance, it also is host name of Zabbix monitoring -zabbix.indy.host = example.com -# Specific prefix for Zabbix Item -zabbix.reporter.prefix = local.one -# Indy's metrics item have three type: simple,jvm,healthcheck -# Those type have different period of reporter -# Period of simple item for reporting -zabbix.reporter.simple.period = 30 -# Period of jvm item for reporting -zabbix.reporter.jvm.period = 300 -# Period of healthcheck item for reporting -zabbix.reporter.healthcheck.period = 600 - ############################################ # Elasticsearch reporter options ############################################ diff --git a/subsys/pom.xml b/subsys/pom.xml index 041822a437..b7f1be86fa 100644 --- a/subsys/pom.xml +++ b/subsys/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-parent - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-subsystems diff --git a/subsys/prefetch/pom.xml b/subsys/prefetch/pom.xml index 26f7fc53b8..0ccf73d93b 100644 --- a/subsys/prefetch/pom.xml +++ b/subsys/prefetch/pom.xml @@ -20,7 +20,7 @@ indy-subsystems org.commonjava.indy - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT 4.0.0 diff --git a/subsys/prefetch/src/main/java/org/commonjava/indy/subsys/prefetch/PrefetchFrontier.java b/subsys/prefetch/src/main/java/org/commonjava/indy/subsys/prefetch/PrefetchFrontier.java index 3b5ce57ef2..a00f15bb1c 100644 --- a/subsys/prefetch/src/main/java/org/commonjava/indy/subsys/prefetch/PrefetchFrontier.java +++ b/subsys/prefetch/src/main/java/org/commonjava/indy/subsys/prefetch/PrefetchFrontier.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.subsys.prefetch; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.cdi.util.weft.Locker; import org.commonjava.indy.audit.ChangeSummary; import org.commonjava.indy.content.StoreResource; diff --git a/subsys/prefetch/src/main/java/org/commonjava/indy/subsys/prefetch/PrefetchRepoComparator.java b/subsys/prefetch/src/main/java/org/commonjava/indy/subsys/prefetch/PrefetchRepoComparator.java index 118b0b920a..7d28c2037b 100644 --- a/subsys/prefetch/src/main/java/org/commonjava/indy/subsys/prefetch/PrefetchRepoComparator.java +++ b/subsys/prefetch/src/main/java/org/commonjava/indy/subsys/prefetch/PrefetchRepoComparator.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.subsys.prefetch; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.commonjava.indy.model.core.RemoteRepository; import java.time.ZoneId; diff --git a/test/db/pom.xml b/test/db/pom.xml index 284f76dc42..f9b1fb35c0 100644 --- a/test/db/pom.xml +++ b/test/db/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-test - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-test-db diff --git a/test/docker/gogs-test-appliance/pom.xml b/test/docker/gogs-test-appliance/pom.xml index 4f053d1763..0c4afc934a 100644 --- a/test/docker/gogs-test-appliance/pom.xml +++ b/test/docker/gogs-test-appliance/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy.docker indy-test-docker-appliances - 2.3.0-SNAPSHOT + 2.5.4.1-SNAPSHOT indy-docker-gogs-test-appliance diff --git a/test/docker/keycloak-test-appliance/pom.xml b/test/docker/keycloak-test-appliance/pom.xml index 3f7aadd45a..75bf0ca929 100644 --- a/test/docker/keycloak-test-appliance/pom.xml +++ b/test/docker/keycloak-test-appliance/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy.docker indy-test-docker-appliances - 2.3.0-SNAPSHOT + 2.5.4.1-SNAPSHOT indy-docker-keycloak-test-appliance diff --git a/test/docker/pom.xml b/test/docker/pom.xml index 0d0b3ead92..aa21d0ea1d 100644 --- a/test/docker/pom.xml +++ b/test/docker/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-test - 2.3.0-SNAPSHOT + 2.5.4.1-SNAPSHOT org.commonjava.indy.docker diff --git a/test/fixtures-core/pom.xml b/test/fixtures-core/pom.xml index 05b3a46114..b51869abbf 100644 --- a/test/fixtures-core/pom.xml +++ b/test/fixtures-core/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-test - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-test-fixtures-core diff --git a/test/pom.xml b/test/pom.xml index 5584dbb28b..ab106b93ca 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-parent - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-test diff --git a/test/providers-core/pom.xml b/test/providers-core/pom.xml index 7bc2122956..8fa37f489c 100644 --- a/test/providers-core/pom.xml +++ b/test/providers-core/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-test - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-test-providers-core diff --git a/test/utils/pom.xml b/test/utils/pom.xml index a7689acc55..ada181c34d 100644 --- a/test/utils/pom.xml +++ b/test/utils/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-test - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-test-utils diff --git a/toolchains.xml b/toolchains.xml new file mode 100644 index 0000000000..95d201ca9b --- /dev/null +++ b/toolchains.xml @@ -0,0 +1,40 @@ + + + + + jdk + + 1.8 + OpenJDK + + + /usr/lib/jvm/java-1.8.0-openjdk + + + + jdk + + 11 + OpenJDK + + + /usr/lib/jvm/java-11-openjdk + + + diff --git a/tools/assemblies/pom.xml b/tools/assemblies/pom.xml index 77630871ac..dd8b929d2f 100644 --- a/tools/assemblies/pom.xml +++ b/tools/assemblies/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy.tools indy-tools - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT indy-assemblies diff --git a/tools/pom.xml b/tools/pom.xml index f96cae1d75..1304bfdc87 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-parent - 2.5.0-SNAPSHOT + 2.5.4.2-SNAPSHOT org.commonjava.indy.tools diff --git a/uis/layover/app/favicon.ico b/uis/layover/app/favicon.ico new file mode 100644 index 0000000000..4aae4b1399 Binary files /dev/null and b/uis/layover/app/favicon.ico differ diff --git a/uis/layover/pom.xml b/uis/layover/pom.xml index baad9464fa..67f4fb1f6b 100644 --- a/uis/layover/pom.xml +++ b/uis/layover/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy.ui indy-uis - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT indy-ui-layover diff --git a/uis/pom.xml b/uis/pom.xml index a1a3f11af7..599b653ab5 100644 --- a/uis/pom.xml +++ b/uis/pom.xml @@ -21,7 +21,7 @@ org.commonjava.indy indy-parent - 2.5.0-SNAPSHOT + 2.5.4.1-SNAPSHOT org.commonjava.indy.ui