matches method
Evaluates whether the given span satisfies this query token.
Implementation
bool matches(TraceSpan span) {
var match = false;
if (field == 'dur' || field == 'duration') {
if (durationUs != null) {
final spanDur = (span.endUs - span.startUs).toDouble();
match = switch (operator) {
'>' => spanDur > durationUs!,
'<' => spanDur < durationUs!,
'>=' => spanDur >= durationUs!,
'<=' => spanDur <= durationUs!,
_ => spanDur == durationUs!,
};
}
} else {
final searchTargets = <String>[];
switch (field) {
case 'name':
searchTargets.add(span.name);
case 'cat':
case 'category':
searchTargets.add(span.category);
case String f:
if (span.args.containsKey(f)) {
searchTargets.add(span.args[f]!);
}
case null:
searchTargets.add(span.name);
searchTargets.add(span.category);
searchTargets.addAll(span.args.values);
}
for (final target in searchTargets) {
if (regex != null) {
if (regex!.hasMatch(target)) {
match = true;
break;
}
} else {
final targetLower = target.toLowerCase();
final valLower = value.toLowerCase();
if (isSmartCase) {
if (target.contains(value)) {
match = true;
break;
}
} else {
if (targetLower.contains(valLower)) {
match = true;
break;
}
}
}
}
}
return isExclusion ? !match : match;
}