[metrics] IJ-CR-141633 Documentation

GitOrigin-RevId: bc1b007d0012e8235dab11541b8c6360972d5c45
This commit is contained in:
Nikita Kudrin
2024-08-14 11:45:12 +03:00
committed by intellij-monorepo-bot
parent 86d5673ce7
commit 06a21227af
8 changed files with 84 additions and 73 deletions

View File

@@ -13,7 +13,7 @@ import com.intellij.testFramework.BenchmarkTestInfo;
import com.intellij.testFramework.PlatformTestUtil;
import com.intellij.testFramework.ProfilerForTests;
import com.intellij.testFramework.UsefulTestCase;
import com.intellij.tools.ide.metrics.collector.TelemetryMetricsCollector;
import com.intellij.tools.ide.metrics.collector.MetricsCollector;
import com.intellij.util.ExceptionUtil;
import com.intellij.util.ThrowableRunnable;
import com.intellij.util.containers.ContainerUtil;
@@ -55,7 +55,7 @@ public class BenchmarkTestInfoImpl implements BenchmarkTestInfo {
private String uniqueTestName; // at least full qualified test name (plus other identifiers, optionally)
@NotNull
private final IJTracer tracer;
private final ArrayList<TelemetryMetricsCollector> metricsCollectors = new ArrayList<>();
private final ArrayList<MetricsCollector> metricsCollectors = new ArrayList<>();
private boolean useDefaultSpanMetricExporter = true;
@@ -114,7 +114,7 @@ public class BenchmarkTestInfoImpl implements BenchmarkTestInfo {
TelemetryManager.getInstance().resetExportersBlocking();
// remove content of the previous tests from the idea.log
IJPerfMetricsPublisher.Companion.truncateTestLog();
IJPerfBenchmarksMetricsPublisher.Companion.truncateTestLog();
var filesWithMetrics = Files.list(PathManager.getLogDir()).filter((it) ->
it.toString().contains("-metrics") ||
@@ -187,7 +187,7 @@ public class BenchmarkTestInfoImpl implements BenchmarkTestInfo {
* </pre>
*/
@Contract(pure = true) // to warn about not calling .start() in the end
public BenchmarkTestInfoImpl withMetricsCollector(TelemetryMetricsCollector meterCollector) {
public BenchmarkTestInfoImpl withMetricsCollector(MetricsCollector meterCollector) {
this.metricsCollectors.add(meterCollector);
return this;
}
@@ -357,14 +357,14 @@ public class BenchmarkTestInfoImpl implements BenchmarkTestInfo {
try {
// publish warmup and final measurements at once at the end of the runs
if (iterationType.equals(IterationMode.MEASURE)) {
var collectors = new ArrayList<TelemetryMetricsCollector>();
var collectors = new ArrayList<MetricsCollector>();
if (useDefaultSpanMetricExporter) {
collectors.add(new BenchmarksSpanMetricsCollector(uniqueTestName,
BenchmarksSpanMetricsCollector.Companion.getDefaultPathToTelemetrySpanJson()));
}
collectors.addAll(metricsCollectors);
IJPerfMetricsPublisher.Companion.publishSync(uniqueTestName, collectors.toArray(new TelemetryMetricsCollector[0]));
IJPerfBenchmarksMetricsPublisher.Companion.publishSync(uniqueTestName, collectors.toArray(new MetricsCollector[0]));
}
}
catch (Throwable t) {

View File

@@ -2,16 +2,13 @@
package com.intellij.tools.ide.metrics.benchmark
import com.intellij.openapi.application.PathManager
import com.intellij.platform.diagnostic.telemetry.TelemetryManager
import com.intellij.tools.ide.metrics.collector.TelemetryMetricsCollector
import com.intellij.tools.ide.metrics.collector.MetricsCollector
import com.intellij.tools.ide.metrics.collector.metrics.*
import com.intellij.tools.ide.metrics.collector.telemetry.OpentelemetrySpanJsonParser
import com.intellij.tools.ide.metrics.collector.telemetry.SpanFilter
import com.intellij.tools.ide.util.common.withRetryBlocking
import java.nio.file.Path
import kotlin.time.Duration.Companion.milliseconds
class BenchmarksSpanMetricsCollector(val spanName: String, private val telemetryJsonFile: Path = getDefaultPathToTelemetrySpanJson()) : TelemetryMetricsCollector {
class BenchmarksSpanMetricsCollector(val spanName: String, private val telemetryJsonFile: Path = getDefaultPathToTelemetrySpanJson()) : MetricsCollector {
companion object {
fun getDefaultPathToTelemetrySpanJson(): Path {
return Path.of(System.getProperty("idea.diagnostic.opentelemetry.file",

View File

@@ -8,7 +8,7 @@ import com.intellij.openapi.util.io.FileUtil
import com.intellij.platform.diagnostic.telemetry.TelemetryManager
import com.intellij.teamcity.TeamCityClient
import com.intellij.testFramework.UsefulTestCase
import com.intellij.tools.ide.metrics.collector.TelemetryMetricsCollector
import com.intellij.tools.ide.metrics.collector.MetricsCollector
import com.intellij.tools.ide.metrics.collector.metrics.PerformanceMetrics
import com.intellij.tools.ide.metrics.collector.publishing.CIServerBuildInfo
import com.intellij.tools.ide.metrics.collector.publishing.PerformanceMetricsDto
@@ -32,7 +32,7 @@ import kotlin.time.Duration.Companion.seconds
* Metrics will be stored as TeamCity artifacts and later will be collected by IJ Perf collector (~ once/twice per hour).
* Charts can be found at [IJ Perf Dashboard](https://ij-perf.labs.jb.gg/intellij/testsDev) - link is prone to change, though.
*/
class IJPerfMetricsPublisher {
class IJPerfBenchmarksMetricsPublisher {
companion object {
@@ -66,7 +66,7 @@ class IJPerfMetricsPublisher {
)
@Suppress("TestOnlyProblems")
private suspend fun prepareMetricsForPublishing(uniqueTestIdentifier: String, vararg metricsCollectors: TelemetryMetricsCollector): PerformanceMetricsDto {
private suspend fun prepareMetricsForPublishing(uniqueTestIdentifier: String, vararg metricsCollectors: MetricsCollector): PerformanceMetricsDto {
delay(1.seconds) // give some time to settle metrics (usually meters) that were published at the end of the test
val metrics: List<PerformanceMetrics.Metric> = withRetry("Telemetry metrics should be exported",
@@ -105,13 +105,13 @@ class IJPerfMetricsPublisher {
)
}
fun publishSync(fullQualifiedTestMethodName: String, vararg metricsCollectors: TelemetryMetricsCollector) {
fun publishSync(fullQualifiedTestMethodName: String, vararg metricsCollectors: MetricsCollector) {
runBlocking {
publish(fullQualifiedTestMethodName, *metricsCollectors)
}
}
suspend fun publish(uniqueTestIdentifier: String, vararg metricsCollectors: TelemetryMetricsCollector) {
suspend fun publish(uniqueTestIdentifier: String, vararg metricsCollectors: MetricsCollector) {
val metricsDto = prepareMetricsForPublishing(uniqueTestIdentifier, *metricsCollectors)
withContext(Dispatchers.IO) {