77
88package org .elasticsearch .xpack .esql .telemetry ;
99
10+ import org .elasticsearch .xpack .esql .EsqlIllegalArgumentException ;
1011import 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 ;
1114import org .elasticsearch .xpack .esql .plan .logical .Dissect ;
1215import org .elasticsearch .xpack .esql .plan .logical .Drop ;
1316import org .elasticsearch .xpack .esql .plan .logical .Enrich ;
1417import org .elasticsearch .xpack .esql .plan .logical .EsRelation ;
1518import org .elasticsearch .xpack .esql .plan .logical .Eval ;
1619import org .elasticsearch .xpack .esql .plan .logical .Filter ;
20+ import org .elasticsearch .xpack .esql .plan .logical .Fork ;
1721import 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 ;
1824import org .elasticsearch .xpack .esql .plan .logical .Keep ;
25+ import org .elasticsearch .xpack .esql .plan .logical .Limit ;
1926import org .elasticsearch .xpack .esql .plan .logical .LogicalPlan ;
2027import org .elasticsearch .xpack .esql .plan .logical .MvExpand ;
2128import org .elasticsearch .xpack .esql .plan .logical .OrderBy ;
29+ import org .elasticsearch .xpack .esql .plan .logical .Project ;
2230import org .elasticsearch .xpack .esql .plan .logical .Rename ;
2331import 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 ;
2438import org .elasticsearch .xpack .esql .plan .logical .show .ShowInfo ;
2539
2640import java .util .BitSet ;
41+ import java .util .List ;
2742import java .util .Locale ;
2843import 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