Skip to content

Commit 793a246

Browse files
ES|QL: make telemetry more strict
1 parent 128144d commit 793a246

File tree

1 file changed

+42
-1
lines changed

1 file changed

+42
-1
lines changed

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/telemetry/FeatureMetric.java

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,38 @@
77

88
package org.elasticsearch.xpack.esql.telemetry;
99

10+
import org.elasticsearch.xpack.esql.EsqlIllegalArgumentException;
1011
import org.elasticsearch.xpack.esql.plan.logical.Aggregate;
12+
import org.elasticsearch.xpack.esql.plan.logical.ChangePoint;
13+
import org.elasticsearch.xpack.esql.plan.logical.Dedup;
1114
import org.elasticsearch.xpack.esql.plan.logical.Dissect;
1215
import org.elasticsearch.xpack.esql.plan.logical.Drop;
1316
import org.elasticsearch.xpack.esql.plan.logical.Enrich;
1417
import org.elasticsearch.xpack.esql.plan.logical.EsRelation;
1518
import org.elasticsearch.xpack.esql.plan.logical.Eval;
1619
import org.elasticsearch.xpack.esql.plan.logical.Filter;
20+
import org.elasticsearch.xpack.esql.plan.logical.Fork;
1721
import org.elasticsearch.xpack.esql.plan.logical.Grok;
22+
import org.elasticsearch.xpack.esql.plan.logical.InlineStats;
23+
import org.elasticsearch.xpack.esql.plan.logical.Insist;
1824
import org.elasticsearch.xpack.esql.plan.logical.Keep;
25+
import org.elasticsearch.xpack.esql.plan.logical.Limit;
1926
import org.elasticsearch.xpack.esql.plan.logical.LogicalPlan;
2027
import org.elasticsearch.xpack.esql.plan.logical.MvExpand;
2128
import org.elasticsearch.xpack.esql.plan.logical.OrderBy;
29+
import org.elasticsearch.xpack.esql.plan.logical.Project;
2230
import org.elasticsearch.xpack.esql.plan.logical.Rename;
2331
import org.elasticsearch.xpack.esql.plan.logical.Row;
32+
import org.elasticsearch.xpack.esql.plan.logical.RrfScoreEval;
33+
import org.elasticsearch.xpack.esql.plan.logical.UnresolvedRelation;
34+
import org.elasticsearch.xpack.esql.plan.logical.inference.Completion;
35+
import org.elasticsearch.xpack.esql.plan.logical.inference.Rerank;
36+
import org.elasticsearch.xpack.esql.plan.logical.join.LookupJoin;
37+
import org.elasticsearch.xpack.esql.plan.logical.local.EsqlProject;
2438
import org.elasticsearch.xpack.esql.plan.logical.show.ShowInfo;
2539

2640
import java.util.BitSet;
41+
import java.util.List;
2742
import java.util.Locale;
2843
import java.util.function.Predicate;
2944

@@ -42,7 +57,26 @@ public enum FeatureMetric {
4257
FROM(EsRelation.class::isInstance),
4358
DROP(Drop.class::isInstance),
4459
KEEP(Keep.class::isInstance),
45-
RENAME(Rename.class::isInstance);
60+
RENAME(Rename.class::isInstance),
61+
LOOKUP_JOIN(LookupJoin.class::isInstance),
62+
CHANGE_POINT(ChangePoint.class::isInstance),
63+
INLINESTATS(InlineStats.class::isInstance),
64+
RERANK(Rerank.class::isInstance),
65+
DEDUP(Dedup.class::isInstance),
66+
INSIST(Insist.class::isInstance),
67+
FORK(Fork.class::isInstance),
68+
RRF(RrfScoreEval.class::isInstance),
69+
COMPLETION(Completion.class::isInstance);
70+
71+
/**
72+
* List here plans we want to exclude from telemetry
73+
*/
74+
private static final List<Class<? extends LogicalPlan>> excluded = List.of(
75+
UnresolvedRelation.class,
76+
EsqlProject.class,
77+
Project.class,
78+
Limit.class // LIMIT is managed in another way, see above
79+
);
4680

4781
private Predicate<LogicalPlan> planCheck;
4882

@@ -61,6 +95,13 @@ public static void set(LogicalPlan plan, BitSet bitset) {
6195
return;
6296
}
6397
}
98+
if (explicitlyExcluded(plan) == false) {
99+
throw new EsqlIllegalArgumentException("Command not mapped for telemetry [{}]", plan.getClass().getSimpleName());
100+
}
101+
}
102+
103+
private static boolean explicitlyExcluded(LogicalPlan plan) {
104+
return excluded.stream().anyMatch(x -> x.isInstance(plan));
64105
}
65106

66107
public static boolean set(LogicalPlan plan, BitSet bitset, FeatureMetric metric) {

0 commit comments

Comments
 (0)