Skip to content

Commit d6ee361

Browse files
committed
SCANJLIB-212 Populate cache statistics properties
Also changed File -> Path in many places
1 parent 29ce17c commit d6ee361

28 files changed

Lines changed: 413 additions & 362 deletions

lib/src/main/java/org/sonarsource/scanner/lib/InProcessScannerEngineFacade.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ public class InProcessScannerEngineFacade extends ScannerEngineFacade {
2727
private final IsolatedLauncherFactory.IsolatedLauncherAndClassloader launcherAndCl;
2828

2929
InProcessScannerEngineFacade(Map<String, String> bootstrapProperties, IsolatedLauncherFactory.IsolatedLauncherAndClassloader launcherAndCl,
30-
LogOutput logOutput, boolean isSonarCloud, @Nullable String serverVersion) {
31-
super(bootstrapProperties, logOutput, isSonarCloud, serverVersion);
30+
LogOutput logOutput, boolean isSonarCloud, @Nullable String serverVersion) {
31+
super(bootstrapProperties, logOutput, isSonarCloud, serverVersion, launcherAndCl.wasEngineCacheHit(), null);
3232
this.launcherAndCl = launcherAndCl;
3333
}
3434

lib/src/main/java/org/sonarsource/scanner/lib/NewScannerEngineFacade.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ public class NewScannerEngineFacade extends ScannerEngineFacade {
2727
private final ScannerEngineLauncher launcher;
2828

2929
NewScannerEngineFacade(Map<String, String> bootstrapProperties, ScannerEngineLauncher launcher, LogOutput logOutput,
30-
boolean isSonarCloud, @Nullable String serverVersion) {
31-
super(bootstrapProperties, logOutput, isSonarCloud, serverVersion);
30+
boolean isSonarCloud, @Nullable String serverVersion) {
31+
super(bootstrapProperties, logOutput, isSonarCloud, serverVersion, launcher.isEngineCacheHit(), launcher.getJreCacheHit());
3232
this.launcher = launcher;
3333
}
3434

lib/src/main/java/org/sonarsource/scanner/lib/ScannerEngineBootstrapper.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ public class ScannerEngineBootstrapper {
6060
private final System2 system;
6161

6262
ScannerEngineBootstrapper(String app, String version, LogOutput logOutput, System2 system,
63-
ServerConnection serverConnection, IsolatedLauncherFactory launcherFactory,
64-
ScannerEngineLauncherFactory scannerEngineLauncherFactory) {
63+
ServerConnection serverConnection, IsolatedLauncherFactory launcherFactory,
64+
ScannerEngineLauncherFactory scannerEngineLauncherFactory) {
6565
this.logOutput = logOutput;
6666
this.system = system;
6767
this.logger = new LoggerAdapter(logOutput);
@@ -154,8 +154,8 @@ private static String getServerVersion(ServerConnection serverConnection, boolea
154154

155155
private void initBootstrapDefaultValues() {
156156
setBootstrapPropertyIfNotAlreadySet(ScannerProperties.HOST_URL, getSonarCloudUrl());
157-
setBootstrapPropertyIfNotAlreadySet(ScannerProperties.API_BASE_URL, isSonarCloud(bootstrapProperties) ? SONARCLOUD_REST_API :
158-
(bootstrapProperties.get(ScannerProperties.HOST_URL) + "/api/v2"));
157+
setBootstrapPropertyIfNotAlreadySet(ScannerProperties.API_BASE_URL,
158+
isSonarCloud(bootstrapProperties) ? SONARCLOUD_REST_API : (bootstrapProperties.get(ScannerProperties.HOST_URL) + "/api/v2"));
159159
if (!bootstrapProperties.containsKey(SCANNER_OS)) {
160160
setBootstrapProperty(SCANNER_OS, new OsResolver(system, new Paths2(), logger).getOs().name().toLowerCase(Locale.ENGLISH));
161161
}

lib/src/main/java/org/sonarsource/scanner/lib/ScannerEngineFacade.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.util.Map;
2626
import java.util.Optional;
2727
import javax.annotation.Nullable;
28+
import org.sonarsource.scanner.lib.internal.JreCacheHit;
2829
import org.sonarsource.scanner.lib.internal.cache.Logger;
2930

3031
public abstract class ScannerEngineFacade implements AutoCloseable {
@@ -33,13 +34,18 @@ public abstract class ScannerEngineFacade implements AutoCloseable {
3334
private final Logger logger;
3435
private final boolean isSonarCloud;
3536
private final String serverVersion;
37+
private final boolean wasEngineCacheHit;
38+
private final JreCacheHit wasJreCacheHit;
3639

37-
ScannerEngineFacade(Map<String, String> bootstrapProperties, LogOutput logOutput, boolean isSonarCloud, @Nullable String serverVersion) {
40+
ScannerEngineFacade(Map<String, String> bootstrapProperties, LogOutput logOutput, boolean isSonarCloud, @Nullable String serverVersion,
41+
boolean wasEngineCacheHit, @Nullable JreCacheHit wasJreCacheHit) {
3842
this.bootstrapProperties = bootstrapProperties;
3943
this.logger = new LoggerAdapter(logOutput);
4044
this.logOutput = logOutput;
4145
this.isSonarCloud = isSonarCloud;
4246
this.serverVersion = serverVersion;
47+
this.wasEngineCacheHit = wasEngineCacheHit;
48+
this.wasJreCacheHit = wasJreCacheHit;
4349
}
4450

4551
public String getServerVersion() {
@@ -58,9 +64,17 @@ public void analyze(Map<String, String> analysisProps) {
5864
allProps.putAll(bootstrapProperties);
5965
allProps.putAll(analysisProps);
6066
initAnalysisProperties(allProps);
67+
addStatsProperties(allProps);
6168
doAnalyze(allProps);
6269
}
6370

71+
private void addStatsProperties(Map<String, String> allProps) {
72+
if (wasJreCacheHit != null) {
73+
allProps.put("sonar.scanner.wasJreCacheHit", wasJreCacheHit.name());
74+
}
75+
allProps.put("sonar.scanner.wasEngineCacheHit", String.valueOf(wasEngineCacheHit));
76+
}
77+
6478
abstract void doAnalyze(Map<String, String> allProps);
6579

6680
private void initAnalysisProperties(Map<String, String> p) {
@@ -77,7 +91,7 @@ private void initSourceEncoding(Map<String, String> p) {
7791
p.put(AnalysisProperties.PROJECT_SOURCE_ENCODING, sourceEncoding);
7892
}
7993
logger.info("Default locale: \"" + Locale.getDefault() + "\", source code encoding: \"" + sourceEncoding + "\""
80-
+ (platformDependent ? " (analysis is platform dependent)" : ""));
94+
+ (platformDependent ? " (analysis is platform dependent)" : ""));
8195
}
8296

8397
public Map<String, String> getBootstrapProperties() {

lib/src/main/java/org/sonarsource/scanner/lib/SimulationScannerEngineFacade.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public class SimulationScannerEngineFacade extends ScannerEngineFacade {
3535

3636
SimulationScannerEngineFacade(Map<String, String> bootstrapProperties, LogOutput logOutput, boolean isSonarCloud,
3737
@Nullable String serverVersion) {
38-
super(bootstrapProperties, logOutput, isSonarCloud, serverVersion);
38+
super(bootstrapProperties, logOutput, isSonarCloud, serverVersion, false, null);
3939
}
4040

4141
@Override

lib/src/main/java/org/sonarsource/scanner/lib/internal/IsolatedClassloader.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@
1919
*/
2020
package org.sonarsource.scanner.lib.internal;
2121

22-
import java.io.File;
2322
import java.io.IOException;
2423
import java.net.MalformedURLException;
2524
import java.net.URL;
2625
import java.net.URLClassLoader;
26+
import java.nio.file.Path;
2727
import java.util.Enumeration;
2828
import java.util.List;
2929

@@ -41,10 +41,10 @@ class IsolatedClassloader extends URLClassLoader {
4141
this.rules = rules;
4242
}
4343

44-
void addFiles(List<File> files) {
44+
void addFiles(List<Path> files) {
4545
try {
46-
for (File file : files) {
47-
addURL(file.toURI().toURL());
46+
for (var file : files) {
47+
addURL(file.toUri().toURL());
4848
}
4949
} catch (MalformedURLException e) {
5050
throw new IllegalStateException("Fail to create classloader", e);

lib/src/main/java/org/sonarsource/scanner/lib/internal/IsolatedLauncherFactory.java

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,13 @@
1919
*/
2020
package org.sonarsource.scanner.lib.internal;
2121

22-
import java.io.File;
2322
import java.net.URLClassLoader;
23+
import java.nio.file.Path;
2424
import java.util.List;
25+
import java.util.stream.Collectors;
2526
import javax.annotation.Nullable;
2627
import org.sonarsource.scanner.lib.internal.batch.IsolatedLauncher;
28+
import org.sonarsource.scanner.lib.internal.cache.CachedFile;
2729
import org.sonarsource.scanner.lib.internal.cache.FileCache;
2830
import org.sonarsource.scanner.lib.internal.cache.Logger;
2931
import org.sonarsource.scanner.lib.internal.http.ServerConnection;
@@ -47,27 +49,27 @@ public IsolatedLauncherFactory(Logger logger) {
4749
this(ISOLATED_LAUNCHER_IMPL, new TempCleaning(logger), logger);
4850
}
4951

50-
private IsolatedClassloader createClassLoader(List<File> jarFiles, ClassloadRules maskRules) {
52+
private IsolatedClassloader createClassLoader(List<Path> jarFiles, ClassloadRules maskRules) {
5153
IsolatedClassloader classloader = new IsolatedClassloader(getClass().getClassLoader(), maskRules);
5254
classloader.addFiles(jarFiles);
5355

5456
return classloader;
5557
}
5658

5759
public IsolatedLauncherAndClassloader createLauncher(ClassloadRules rules, ServerConnection serverConnection, FileCache fileCache) {
58-
JarDownloader jarDownloader = new JarDownloaderFactory(serverConnection, logger, fileCache).create();
59-
return createLauncher(jarDownloader, rules);
60+
LegacyScannerEngineDownloader legacyScannerEngineDownloader = new JarDownloaderFactory(serverConnection, logger, fileCache).create();
61+
return createLauncher(legacyScannerEngineDownloader, rules);
6062
}
6163

62-
IsolatedLauncherAndClassloader createLauncher(final JarDownloader jarDownloader, final ClassloadRules rules) {
64+
IsolatedLauncherAndClassloader createLauncher(final LegacyScannerEngineDownloader legacyScannerEngineDownloader, final ClassloadRules rules) {
6365
try {
64-
List<File> jarFiles = jarDownloader.download();
66+
List<CachedFile> jarFiles = legacyScannerEngineDownloader.getOrDownload();
6567
logger.debug("Create isolated classloader...");
66-
var cl = createClassLoader(jarFiles, rules);
68+
var cl = createClassLoader(jarFiles.stream().map(CachedFile::getPathInCache).collect(Collectors.toList()), rules);
6769
IsolatedLauncher objProxy = IsolatedLauncherProxy.create(cl, IsolatedLauncher.class, launcherImplClassName, logger);
6870
tempCleaning.clean();
6971

70-
return new IsolatedLauncherAndClassloader(objProxy, cl);
72+
return new IsolatedLauncherAndClassloader(objProxy, cl, jarFiles.stream().allMatch(CachedFile::isCacheHit));
7173
} catch (Exception e) {
7274
// Catch all other exceptions, which relates to reflection
7375
throw new ScannerException("Unable to execute SonarScanner analysis", e);
@@ -77,10 +79,12 @@ IsolatedLauncherAndClassloader createLauncher(final JarDownloader jarDownloader,
7779
public static class IsolatedLauncherAndClassloader implements AutoCloseable {
7880
private final IsolatedLauncher launcher;
7981
private final URLClassLoader classloader;
82+
private final boolean engineCacheHit;
8083

81-
public IsolatedLauncherAndClassloader(IsolatedLauncher launcher, @Nullable URLClassLoader classloader) {
84+
public IsolatedLauncherAndClassloader(IsolatedLauncher launcher, @Nullable URLClassLoader classloader, boolean engineCacheHit) {
8285
this.launcher = launcher;
8386
this.classloader = classloader;
87+
this.engineCacheHit = engineCacheHit;
8488
}
8589

8690
public IsolatedLauncher getLauncher() {
@@ -93,6 +97,10 @@ public void close() throws Exception {
9397
classloader.close();
9498
}
9599
}
100+
101+
public boolean wasEngineCacheHit() {
102+
return this.engineCacheHit;
103+
}
96104
}
97105

98106
}

lib/src/main/java/org/sonarsource/scanner/lib/internal/JarDownloaderFactory.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
*/
2020
package org.sonarsource.scanner.lib.internal;
2121

22-
import java.nio.file.Path;
2322
import org.sonarsource.scanner.lib.internal.cache.FileCache;
2423
import org.sonarsource.scanner.lib.internal.cache.Logger;
2524
import org.sonarsource.scanner.lib.internal.http.ServerConnection;
@@ -35,10 +34,10 @@ class JarDownloaderFactory {
3534
this.fileCache = fileCache;
3635
}
3736

38-
JarDownloader create() {
37+
LegacyScannerEngineDownloader create() {
3938
BootstrapIndexDownloader bootstrapIndexDownloader = new BootstrapIndexDownloader(serverConnection, logger);
40-
JarDownloader.ScannerFileDownloader scannerFileDownloader = new JarDownloader.ScannerFileDownloader(serverConnection);
39+
LegacyScannerEngineDownloader.ScannerFileDownloader scannerFileDownloader = new LegacyScannerEngineDownloader.ScannerFileDownloader(serverConnection);
4140
JarExtractor jarExtractor = new JarExtractor();
42-
return new JarDownloader(scannerFileDownloader, bootstrapIndexDownloader, fileCache, jarExtractor, logger);
41+
return new LegacyScannerEngineDownloader(scannerFileDownloader, bootstrapIndexDownloader, fileCache, jarExtractor, logger);
4342
}
4443
}

lib/src/main/java/org/sonarsource/scanner/lib/internal/JavaRunner.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@
2323
import com.google.gson.annotations.SerializedName;
2424
import java.io.BufferedReader;
2525
import java.io.BufferedWriter;
26-
import java.io.File;
2726
import java.io.IOException;
2827
import java.io.InputStream;
2928
import java.io.InputStreamReader;
3029
import java.io.OutputStream;
3130
import java.io.OutputStreamWriter;
3231
import java.nio.charset.StandardCharsets;
32+
import java.nio.file.Path;
3333
import java.util.ArrayList;
3434
import java.util.List;
3535
import java.util.function.Consumer;
@@ -38,12 +38,18 @@
3838

3939
public class JavaRunner {
4040

41-
private final File javaExecutable;
41+
private final Path javaExecutable;
4242
private final Logger logger;
43+
private final JreCacheHit jreCacheHit;
4344

44-
public JavaRunner(@Nullable File javaExecutable, Logger logger) {
45+
public JavaRunner(@Nullable Path javaExecutable, Logger logger, JreCacheHit jreCacheHit) {
4546
this.javaExecutable = javaExecutable;
4647
this.logger = logger;
48+
this.jreCacheHit = jreCacheHit;
49+
}
50+
51+
public JreCacheHit getJreCacheHit() {
52+
return jreCacheHit;
4753
}
4854

4955
public void execute(List<String> args, @Nullable String input) {
@@ -53,7 +59,7 @@ public void execute(List<String> args, @Nullable String input) {
5359
Process process = new ProcessBuilder(command).start();
5460
if (input != null) {
5561
try (OutputStream stdin = process.getOutputStream();
56-
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin, StandardCharsets.UTF_8))) {
62+
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin, StandardCharsets.UTF_8))) {
5763
writer.write(input);
5864
}
5965
}
@@ -70,7 +76,7 @@ public void execute(List<String> args, @Nullable String input) {
7076

7177
String getJavaExecutable() {
7278
if (javaExecutable != null) {
73-
return javaExecutable.getAbsolutePath();
79+
return javaExecutable.toAbsolutePath().toString();
7480
}
7581
// Will try to use the java executable in the PATH
7682
return "java";

0 commit comments

Comments
 (0)