mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-05 01:50:56 +07:00
[metrics] IJ-CR-141633 Documentation
GitOrigin-RevId: bc1b007d0012e8235dab11541b8c6360972d5c45
This commit is contained in:
committed by
intellij-monorepo-bot
parent
86d5673ce7
commit
06a21227af
@@ -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) {
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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) {
|
||||
Reference in New Issue
Block a user