Skip to content

Commit ff56ebc

Browse files
increase heap size in docker image, update docker compose, add config gor java dependency jar (#28)
Signed-off-by: Nicklas Körtge <[email protected]>
1 parent 1affd03 commit ff56ebc

File tree

9 files changed

+67
-14
lines changed

9 files changed

+67
-14
lines changed

docker-compose.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ services:
3434
deploy:
3535
resources:
3636
reservations:
37-
memory: 8192m
37+
memory: 16g
3838
profiles:
3939
- prod
4040
- ext-compliance

src/main/docker/Dockerfile.jvm

+4-1
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,12 @@ COPY --chown=185 target/quarkus-app/lib/ /deployments/lib/
77
COPY --chown=185 target/quarkus-app/*.jar /deployments/
88
COPY --chown=185 target/quarkus-app/app/ /deployments/app/
99
COPY --chown=185 target/quarkus-app/quarkus/ /deployments/quarkus/
10+
# copy the crypto lib dependecies for java into the image
11+
COPY --chown=185 src/main/resources/java/scan/*.jar /deployments/java/scan/
1012

1113
EXPOSE 8080
1214
USER 185
13-
ENV JAVA_OPTS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
15+
ENV CBOMKIT_JAVA_JAR_DIR="/deployments/java/scan/"
16+
ENV JAVA_OPTS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Xmx8g"
1417
ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"
1518

src/main/java/com/ibm/Init.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import com.fasterxml.jackson.databind.ObjectMapper;
2424
import com.github.packageurl.MalformedPackageURLException;
2525
import com.github.packageurl.PackageURL;
26+
import com.ibm.configuration.Configuration;
2627
import com.ibm.model.Identifiers;
2728
import com.ibm.model.PurlVersion;
2829
import io.quarkus.runtime.Quarkus;
@@ -39,10 +40,10 @@ public class Init implements QuarkusApplication {
3940

4041
@Override
4142
public int run(String... args) throws Exception {
42-
try (InputStream in =
43-
// Thread.currentThread().getContextClassLoader().getResourceAsStream("purls.json"))
44-
// {
45-
this.getClass().getClassLoader().getResourceAsStream("purls.json")) {
43+
// check if jars exists
44+
new Configuration().getJavaDependencyJARS();
45+
// load purls
46+
try (InputStream in = this.getClass().getClassLoader().getResourceAsStream("purls.json")) {
4647
LOG.info("Try to load purls");
4748
ObjectMapper mapper = new ObjectMapper();
4849
JsonNode jsonNode = mapper.readValue(in, JsonNode.class);

src/main/java/com/ibm/Utils.java

+10
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@
2626
import com.ibm.model.IdentifiableScan;
2727
import com.ibm.model.api.ScanRequest;
2828
import java.io.File;
29+
import java.io.FileFilter;
2930
import java.util.Collections;
3031
import java.util.List;
3132
import java.util.Optional;
33+
import javax.annotation.Nonnull;
3234
import org.cyclonedx.model.Component;
3335
import org.cyclonedx.model.Evidence;
3436
import org.cyclonedx.model.component.evidence.Occurrence;
@@ -107,4 +109,12 @@ public static void addProperties(
107109
properties.add(purlProp);
108110
}
109111
}
112+
113+
@Nonnull
114+
public static Optional<File[]> getJarFiles(@Nonnull String directoryPath) {
115+
final File directory = new File(directoryPath);
116+
final FileFilter jarFilter =
117+
file -> file.isFile() && file.getName().toLowerCase().endsWith(".jar");
118+
return Optional.ofNullable(directory.listFiles(jarFilter));
119+
}
110120
}

src/main/java/com/ibm/configuration/Configuration.java

+16-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
*/
2020
package com.ibm.configuration;
2121

22+
import com.ibm.Utils;
2223
import com.ibm.compliance.BasicQuantumSafeComplianceService;
2324
import com.ibm.compliance.IComplianceService;
2425
import com.ibm.compliance.ibmregulator.IBMRegulatorClient;
@@ -33,8 +34,10 @@
3334
import com.ibm.scan.ScannerManager;
3435
import io.quarkus.rest.client.reactive.QuarkusRestClientBuilder;
3536
import jakarta.enterprise.context.ApplicationScoped;
37+
import java.io.File;
3638
import java.net.URI;
3739
import java.util.ArrayList;
40+
import java.util.Arrays;
3841
import java.util.List;
3942
import java.util.Optional;
4043
import org.eclipse.microprofile.config.ConfigProvider;
@@ -88,8 +91,20 @@ public IScannerManager getScannerManager() {
8891
.ifPresent(api -> registry.add((new IBMqsScanner(api))));
8992
return new ScannerManager(registry);
9093
}
91-
registry.add((new JavaScanner()));
94+
registry.add((new JavaScanner(this)));
9295
registry.add((new PythonScanner()));
9396
return new ScannerManager(registry);
9497
}
98+
99+
@Override
100+
public @NotNull List<File> getJavaDependencyJARS() {
101+
return ConfigProvider.getConfig()
102+
.getOptionalValue("service.scanning.java-jar-dir", String.class)
103+
.flatMap(Utils::getJarFiles)
104+
.map(files -> Arrays.stream(files).toList())
105+
.orElseThrow(
106+
() ->
107+
new IllegalStateException(
108+
"Could not load jar dependencies for java scanning")); // Error
109+
}
95110
}

src/main/java/com/ibm/configuration/IConfiguration.java

+5
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import com.ibm.compliance.IComplianceService;
2323
import com.ibm.repository.IScanRepository;
2424
import com.ibm.scan.IScannerManager;
25+
import java.io.File;
26+
import java.util.List;
2527
import javax.annotation.Nonnull;
2628
import javax.annotation.Nullable;
2729

@@ -34,4 +36,7 @@ public interface IConfiguration {
3436

3537
@Nonnull
3638
IScannerManager getScannerManager();
39+
40+
@Nonnull
41+
List<File> getJavaDependencyJARS();
3742
}

src/main/java/com/ibm/scan/JavaScanner.java

+9-6
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
*/
2020
package com.ibm.scan;
2121

22+
import com.ibm.configuration.IConfiguration;
2223
import com.ibm.message.IMessageDispatcher;
2324
import com.ibm.model.Project;
2425
import com.ibm.model.api.ScanRequest;
@@ -50,13 +51,11 @@ public class JavaScanner extends AbstractScanner {
5051
private List<Project> projects = null;
5152
private List<JavaCheck> visitors = null;
5253
private SonarComponents sonarComponents = null;
54+
private final IConfiguration configuration;
5355

54-
private static final List<File> JARS =
55-
Collections.singletonList(
56-
new File("src/main/resources/java/scan/bcprov-jdk18on-1.78.1.jar"));
57-
58-
public JavaScanner() {
56+
public JavaScanner(@Nonnull IConfiguration config) {
5957
LOG.info("Created Java scanner (*" + JAVA_FILE_EXTENSION + ")");
58+
this.configuration = config;
6059
}
6160

6261
@SuppressWarnings("all")
@@ -119,7 +118,11 @@ public IScanner.ScanResult scan() throws CancelScanException {
119118
new JavaAstScannerExtension(sonarComponents, iMessageDispatcher, projectStr);
120119
// add bc to classpath to resolve types
121120
VisitorsBridge visitorBridge =
122-
new VisitorsBridge(visitors, JARS, sonarComponents, JAVA_VERSION);
121+
new VisitorsBridge(
122+
visitors,
123+
configuration.getJavaDependencyJARS(),
124+
sonarComponents,
125+
JAVA_VERSION);
123126
jscanner.setVisitorBridge(visitorBridge);
124127
jscanner.scan(project.getInputFiles());
125128
counter++;

src/main/resources/application.yml

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ quarkus:
2525
service:
2626
clone-dir: ${CBOMKIT_CLONEDIR:/home/user/.cbomkit} # specifies the directory in which the cloned Git repositories are stored (temporary)
2727
scanning:
28+
java-jar-dir: ${CBOMKIT_JAVA_JAR_DIR:src/main/resources/java/scan/}
2829
ibm-qs-explorer: # if the ibm qs explorer should be used as the service to scan, enable it here and provide the url
2930
enabled: false
3031
url: ${CBOMKIT_QS_EXPLORER_API_BASE:http://localhost:8000/api/v1/scan"}

src/test/java/com/ibm/DefaultTestConfiguration.java

+16-1
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,12 @@
3232
import com.ibm.scan.ScannerManager;
3333
import io.quarkus.test.Mock;
3434
import jakarta.enterprise.context.ApplicationScoped;
35+
import java.io.File;
3536
import java.sql.Timestamp;
3637
import java.util.ArrayList;
38+
import java.util.Arrays;
3739
import java.util.List;
40+
import org.eclipse.microprofile.config.ConfigProvider;
3841
import org.jetbrains.annotations.NotNull;
3942
import org.jetbrains.annotations.Nullable;
4043

@@ -96,8 +99,20 @@ public IScanRepository getCBOMRepository() {
9699
public IScannerManager getScannerManager() {
97100
// register scanners
98101
final List<IScanner> registry = new ArrayList<>();
99-
registry.add((new JavaScanner()));
102+
registry.add((new JavaScanner(this)));
100103
registry.add((new PythonScanner()));
101104
return new ScannerManager(registry);
102105
}
106+
107+
@Override
108+
public @NotNull List<File> getJavaDependencyJARS() {
109+
return ConfigProvider.getConfig()
110+
.getOptionalValue("service.scanning.java-jar-dir", String.class)
111+
.flatMap(Utils::getJarFiles)
112+
.map(files -> Arrays.stream(files).toList())
113+
.orElseThrow(
114+
() ->
115+
new IllegalStateException(
116+
"Could not load jar dependencies for java scanning")); // Error
117+
}
103118
}

0 commit comments

Comments
 (0)