Skip to content

Commit

Permalink
ISPN-14766 Implement Infinispan Insights module
Browse files Browse the repository at this point in the history
  • Loading branch information
fax4ever committed Jul 26, 2023
1 parent 75f0c7c commit 2b5a18e
Show file tree
Hide file tree
Showing 18 changed files with 712 additions and 0 deletions.
1 change: 1 addition & 0 deletions build/configuration/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@
<version.infinispan.arquillian>1.2.0.Beta3</version.infinispan.arquillian>
<version.infinispan.doclets>1.4.0.Final</version.infinispan.doclets>
<version.infinispan.maven-plugins>1.0.4.Final</version.infinispan.maven-plugins>
<version.insights>1.0.10</version.insights>
<version.io.agroal>2.1</version.io.agroal>
<version.io.lettuce>6.2.4.RELEASE</version.io.lettuce>
<version.vertx>4.4.4</version.vertx>
Expand Down
26 changes: 26 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -465,6 +465,11 @@
<artifactId>jackson-datatype-jdk8</artifactId>
<version>${versionx.com.fasterxml.jackson.modules.jackson-modules-java8}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>${versionx.com.fasterxml.jackson.core.jackson-databind}</version>
</dependency>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
Expand Down Expand Up @@ -618,6 +623,16 @@
<artifactId>micrometer-registry-prometheus</artifactId>
<version>${version.micrometer}</version>
</dependency>
<dependency>
<groupId>com.redhat.insights</groupId>
<artifactId>runtimes-java-api</artifactId>
<version>${version.insights}</version>
</dependency>
<dependency>
<groupId>com.redhat.insights</groupId>
<artifactId>runtimes-java-core-runtime</artifactId>
<version>${version.insights}</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-api</artifactId>
Expand Down Expand Up @@ -1169,6 +1184,11 @@
<scope>test</scope>
<version>${version.infinispan}</version>
</dependency>
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-server-insights</artifactId>
<version>${version.infinispan}</version>
</dependency>
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-server-hotrod</artifactId>
Expand Down Expand Up @@ -3177,5 +3197,11 @@
</plugins>
</build>
</profile>
<profile>
<id>insights</id>
<modules>
<module>server/insights</module>
</modules>
</profile>
</profiles>
</project>
91 changes: 91 additions & 0 deletions server/insights/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-server-parent</artifactId>
<version>15.0.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

<artifactId>infinispan-server-insights</artifactId>
<name>Infinispan Insights Server</name>
<description>Infinispan Server - Red Hat Insights integration module</description>

<dependencies>
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-component-processor</artifactId>
</dependency>
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-server-core</artifactId>
</dependency>
<dependency>
<groupId>io.projectreactor.tools</groupId>
<artifactId>blockhound</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.kohsuke.metainf-services</groupId>
<artifactId>metainf-services</artifactId>
</dependency>
<dependency>
<groupId>com.redhat.insights</groupId>
<artifactId>runtimes-java-api</artifactId>
</dependency>
<dependency>
<groupId>com.redhat.insights</groupId>
<artifactId>runtimes-java-core-runtime</artifactId>
</dependency>

<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-server-core</artifactId>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<repositories>
<repository>
<id>jboss-eap-7.4-product-repository</id>
<name>JBoss EAP Product Repository</name>
<url>https://download.devel.redhat.com/brewroot/repos/jb-eap-7.4-maven-build/latest/maven/</url>
<layout>default</layout>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
<updatePolicy>never</updatePolicy>
</snapshots>
</repository>
<repository>
<id>jboss-public-repository-group</id>
<name>JBoss Public Maven Repository Group</name>
<url>https://repository.jboss.org/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</snapshots>
</repository>
</repositories>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package org.infinispan.server.insights;

import org.infinispan.commons.util.Version;

import com.redhat.insights.config.EnvAndSysPropsInsightsConfiguration;

public class InfinispanInsightsConfiguration extends EnvAndSysPropsInsightsConfiguration {

@Override
public String getIdentificationName() {
return Version.getBrandName();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package org.infinispan.server.insights;

import org.infinispan.commons.logging.LogFactory;
import org.infinispan.factories.GlobalComponentRegistry;
import org.infinispan.factories.annotations.InfinispanModule;
import org.infinispan.lifecycle.ModuleLifecycle;
import org.infinispan.manager.CacheManagerInfo;
import org.infinispan.server.core.ServerManagement;
import org.infinispan.server.insights.config.InsightsActivation;
import org.infinispan.server.insights.logging.Log;
import org.infinispan.util.concurrent.BlockingManager;

@InfinispanModule(name = "insights", requiredModules = {"core", "server-runtime"})
public class InsightsModule implements ModuleLifecycle {

public static final String REDHAT_INSIGHTS_ACTIVATION_PROPERTY_NAME = "infinispan.insights.activation";

public static final Log log = LogFactory.getLog(InsightsModule.class, Log.class);

private InsightsService service;

@Override
public void cacheManagerStarted(GlobalComponentRegistry gcr) {
InsightsActivation activation = activation();
if (InsightsActivation.DISABLED.equals(activation)) {
log.insightsDisabled();
return;
}

ServerManagement server = gcr.getComponent(ServerManagement.class);
if (server == null) {
log.serverManagementLookupFailed();
return;
}

CacheManagerInfo cacheManagerInfo = gcr.getCacheManager().getCacheManagerInfo();
service = new InsightsService(server, cacheManagerInfo.getNodeName());
gcr.registerComponent(service, InsightsService.class);
if (InsightsActivation.LOCAL.equals(activation)) {
log.insightsLocallyEnabled(REDHAT_INSIGHTS_ACTIVATION_PROPERTY_NAME);
return;
}

log.insightsEnabled();
BlockingManager blockingManager = gcr.getComponent(BlockingManager.class);
service.start(blockingManager);
}

@Override
public void cacheManagerStopping(GlobalComponentRegistry gcr) {
service.stop();
}

private static InsightsActivation activation() {
String activation = System.getProperty(REDHAT_INSIGHTS_ACTIVATION_PROPERTY_NAME);

if (activation == null || activation.equalsIgnoreCase(InsightsActivation.LOCAL.name())) {
return InsightsActivation.LOCAL;
}
if (activation.equalsIgnoreCase(InsightsActivation.DISABLED.name())) {
return InsightsActivation.DISABLED;
}
if (activation.equalsIgnoreCase(InsightsActivation.ENABLED.name())) {
return InsightsActivation.ENABLED;
}

log.insightsActivationNotValidValue(REDHAT_INSIGHTS_ACTIVATION_PROPERTY_NAME, activation);
return InsightsActivation.LOCAL;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
package org.infinispan.server.insights;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.function.Supplier;

import javax.net.ssl.SSLContext;

import org.infinispan.commons.logging.LogFactory;
import org.infinispan.server.core.ServerManagement;
import org.infinispan.server.insights.logging.InsightsLoggerDelegate;
import org.infinispan.server.insights.logging.Log;
import org.infinispan.server.insights.report.InfinispanSubreport;
import org.infinispan.server.insights.report.InfinispanTopReport;
import org.infinispan.server.insights.scheduler.InfinispanInsightsScheduler;
import org.infinispan.util.concurrent.BlockingManager;

import com.redhat.insights.InsightsReport;
import com.redhat.insights.InsightsReportController;
import com.redhat.insights.InsightsSubreport;
import com.redhat.insights.config.InsightsConfiguration;
import com.redhat.insights.core.httpclient.InsightsJdkHttpClient;
import com.redhat.insights.http.InsightsFileWritingClient;
import com.redhat.insights.http.InsightsMultiClient;
import com.redhat.insights.jars.ClasspathJarInfoSubreport;
import com.redhat.insights.logging.InsightsLogger;
import com.redhat.insights.tls.PEMSupport;

public class InsightsService {

private static final Log log = LogFactory.getLog(InsightsService.class, Log.class);

private final InsightsConfiguration config;
private final InsightsLogger insightsLogger;
private final InsightsReport insightsReport;
private final InfinispanSubreport infinispanSubreport;
private final ClasspathJarInfoSubreport jarsSubreport;

private InsightsReportController insightsReportController;

public InsightsService(ServerManagement server, String nodeName) {
this.config = new InfinispanInsightsConfiguration();
this.insightsLogger = new InsightsLoggerDelegate(log);

if (config.isOptingOut()) {
throw log.insightsConfigurationError();
}

Map<String, InsightsSubreport> subReports = new HashMap<>(2);
infinispanSubreport = new InfinispanSubreport(server::overviewReport);
jarsSubreport = new ClasspathJarInfoSubreport(insightsLogger);
subReports.put("infinispan", infinispanSubreport);
subReports.put("jars", jarsSubreport);
insightsReport = new InfinispanTopReport(insightsLogger, config, nodeName, subReports);
}

public void start(BlockingManager blockingManager) {
PEMSupport pemSupport = new PEMSupport(insightsLogger, config);
Supplier<SSLContext> sslContextSupplier = () -> {
try {
return pemSupport.createTLSContext();
} catch (Throwable ex) {
throw log.insightsCertificateError(ex);
}
};

InfinispanInsightsScheduler insightsScheduler =
new InfinispanInsightsScheduler(insightsLogger, config, blockingManager);

try {
insightsReportController = InsightsReportController.of(insightsLogger, config, insightsReport,
() -> new InsightsMultiClient(insightsLogger,
new InsightsJdkHttpClient(insightsLogger, config, sslContextSupplier),
new InsightsFileWritingClient(insightsLogger, config)), insightsScheduler,
new LinkedBlockingQueue<>());
insightsReportController.generate();
} catch (Throwable ex) {
throw log.insightsServiceSetupError(ex);
}
}

public void stop() {
if (insightsReportController != null) {
insightsReportController.shutdown();
}
}

public InsightsReport report() {
infinispanSubreport.generateReport();
jarsSubreport.generateReport();
return insightsReport;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package org.infinispan.server.insights.config;

public enum InsightsActivation {

/**
* Full disabled
*/
DISABLED,

/**
* Locally enabled - the report is accessible locally - not published remotely
* The default value
*/
LOCAL,

/**
* Full enabled - publishing the report
*/
ENABLED;

}

0 comments on commit 2b5a18e

Please sign in to comment.