diff --git a/tools/intellij.tools.ide.metrics.collector/src/com/intellij/tools/ide/metrics/collector/telemetry/SpanFilter.kt b/tools/intellij.tools.ide.metrics.collector/src/com/intellij/tools/ide/metrics/collector/telemetry/SpanFilter.kt index 5947e1521383..d72f25ad01c9 100644 --- a/tools/intellij.tools.ide.metrics.collector/src/com/intellij/tools/ide/metrics/collector/telemetry/SpanFilter.kt +++ b/tools/intellij.tools.ide.metrics.collector/src/com/intellij/tools/ide/metrics/collector/telemetry/SpanFilter.kt @@ -19,14 +19,23 @@ class SpanFilter internal constructor( return SpanFilter(filter = { spanData -> spanData.name == name }, rawFilter = { it.operationName == name }) } - fun containsNameIn(names: List): SpanFilter { + fun nameInList(names: List): SpanFilter { return SpanFilter(filter = { names.contains(it.name) }, rawFilter = { names.contains(it.operationName) }) } - fun containsNameIn(vararg names: String): SpanFilter { - return SpanFilter(filter = { names.contains(it.name) }, rawFilter = { names.contains(it.operationName) }) + fun nameInList(vararg names: String): SpanFilter { + return nameInList(names.toList()) } + fun nameContainsAny(names: List): SpanFilter { + return SpanFilter(filter = { span -> names.any { span.name.contains(it) } }, rawFilter = { span -> names.any { span.operationName.contains(it) } }) + } + + fun nameContainsAny(vararg names: String): SpanFilter { + return nameContainsAny(names.toList()) + } + + fun nameContains(substring: String): SpanFilter { return SpanFilter(filter = { it.name.contains(substring) }, rawFilter = { it.operationName.contains(substring) }) } diff --git a/tools/intellij.tools.ide.metrics.collector/src/com/intellij/tools/ide/metrics/collector/telemetry/openTelemetry.kt b/tools/intellij.tools.ide.metrics.collector/src/com/intellij/tools/ide/metrics/collector/telemetry/openTelemetry.kt index 10ad3254527e..36bc3c852f7f 100644 --- a/tools/intellij.tools.ide.metrics.collector/src/com/intellij/tools/ide/metrics/collector/telemetry/openTelemetry.kt +++ b/tools/intellij.tools.ide.metrics.collector/src/com/intellij/tools/ide/metrics/collector/telemetry/openTelemetry.kt @@ -29,7 +29,7 @@ private val logger = logger() */ fun getMetricsBasedOnDiffBetweenSpans(name: String, file: Path, fromSpanName: String, toSpanName: String): List { val betweenSpanProcessor = SpanInfoProcessor() - val spanElements = OpentelemetrySpanJsonParser(SpanFilter.containsNameIn(listOf(fromSpanName, toSpanName))).getSpanElements(file) + val spanElements = OpentelemetrySpanJsonParser(SpanFilter.nameInList(listOf(fromSpanName, toSpanName))).getSpanElements(file) val spanToMetricMap = spanElements .mapNotNull { betweenSpanProcessor.process(it) } .groupBy { it.name } @@ -78,7 +78,7 @@ fun getStartupTimestampMs(file: Path): Long { fun getMetricsForStartup(file: Path): List { val spansToPublish = listOf("bootstrap", "startApplication", "ProjectImpl container") val spansSuffixesToIgnore = listOf(": scheduled", ": completing") - val filter = SpanFilter.containsNameIn(spansToPublish) + val filter = SpanFilter.nameInList(spansToPublish) val childFilter = SpanFilter( filter = { span -> spansSuffixesToIgnore.none { span.name.endsWith(it) } }, rawFilter = { span -> spansSuffixesToIgnore.none { span.operationName.endsWith(it) } }, diff --git a/tools/intellij.tools.ide.metrics.collector/testSrc/com/intellij/tools/ide/metrics/collector/OpenTelemetrySpanExtractionTest.kt b/tools/intellij.tools.ide.metrics.collector/testSrc/com/intellij/tools/ide/metrics/collector/OpenTelemetrySpanExtractionTest.kt index aee3d2d50ac7..37e2d2199e1b 100644 --- a/tools/intellij.tools.ide.metrics.collector/testSrc/com/intellij/tools/ide/metrics/collector/OpenTelemetrySpanExtractionTest.kt +++ b/tools/intellij.tools.ide.metrics.collector/testSrc/com/intellij/tools/ide/metrics/collector/OpenTelemetrySpanExtractionTest.kt @@ -49,7 +49,7 @@ class OpenTelemetrySpanExtractionTest { OpenTelemetrySpanCollector(SpanFilter.nameEquals(spanName)).collect(file) }.flatten() - val result = OpenTelemetrySpanCollector(SpanFilter.containsNameIn(spanNames)) + val result = OpenTelemetrySpanCollector(SpanFilter.nameInList(spanNames)) .collect(file) result.shouldContainExactlyInAnyOrder(expected)