1919
2020import java .nio .charset .StandardCharsets ;
2121import java .util .HashMap ;
22- import java .util .List ;
2322import java .util .Map ;
2423import java .util .function .Supplier ;
2524
@@ -44,7 +43,7 @@ public final class EsqlSlowLog {
4443
4544 public static final String LOGGER_NAME = "esql.slowlog.query" ;
4645 private static final Logger queryLogger = LogManager .getLogger (LOGGER_NAME );
47- private final List < SlowLogFields > additionalProviders ;
46+ private final SlowLogFields additionalFields ;
4847
4948 private volatile long queryWarnThreshold ;
5049 private volatile long queryInfoThreshold ;
@@ -53,14 +52,14 @@ public final class EsqlSlowLog {
5352
5453 private volatile boolean includeUser ;
5554
56- public EsqlSlowLog (ClusterSettings settings , List <? extends SlowLogFieldProvider > slowLogFieldProviders ) {
55+ public EsqlSlowLog (ClusterSettings settings , SlowLogFieldProvider slowLogFieldProvider ) {
5756 settings .initializeAndWatch (ESQL_SLOWLOG_THRESHOLD_QUERY_WARN_SETTING , this ::setQueryWarnThreshold );
5857 settings .initializeAndWatch (ESQL_SLOWLOG_THRESHOLD_QUERY_INFO_SETTING , this ::setQueryInfoThreshold );
5958 settings .initializeAndWatch (ESQL_SLOWLOG_THRESHOLD_QUERY_DEBUG_SETTING , this ::setQueryDebugThreshold );
6059 settings .initializeAndWatch (ESQL_SLOWLOG_THRESHOLD_QUERY_TRACE_SETTING , this ::setQueryTraceThreshold );
6160 settings .initializeAndWatch (ESQL_SLOWLOG_THRESHOLD_INCLUDE_USER_SETTING , this ::setIncludeUser );
6261
63- this .additionalProviders = slowLogFieldProviders . stream (). map ( SlowLogFieldProvider :: create ). toList ();
62+ this .additionalFields = slowLogFieldProvider . create ();
6463 }
6564
6665 public EsqlSlowLog (ClusterSettings settings ) {
@@ -72,11 +71,11 @@ public void onQueryPhase(Result esqlResult, String query) {
7271 return ; // TODO review, it happens in some tests, not sure if it's a thing also in prod
7372 }
7473 long tookInNanos = esqlResult .executionInfo ().overallTook ().nanos ();
75- log (() -> Message .of (esqlResult , query , additionalProviders ), tookInNanos );
74+ log (() -> Message .of (esqlResult , query , includeUser ? additionalFields . queryFields () : Map . of () ), tookInNanos );
7675 }
7776
7877 public void onQueryFailure (String query , Exception ex , long tookInNanos ) {
79- log (() -> Message .of (query , tookInNanos , ex , additionalProviders ), tookInNanos );
78+ log (() -> Message .of (query , tookInNanos , ex , includeUser ? additionalFields . queryFields () : Map . of () ), tookInNanos );
8079 }
8180
8281 private void log (Supplier <ESLogMessage > logProducer , long tookInNanos ) {
@@ -118,28 +117,22 @@ private static String escapeJson(String text) {
118117 return new String (sourceEscaped , StandardCharsets .UTF_8 );
119118 }
120119
121- public static ESLogMessage of (Result esqlResult , String query , List < SlowLogFields > providers ) {
120+ public static ESLogMessage of (Result esqlResult , String query , Map < String , String > additionalFields ) {
122121 Map <String , Object > jsonFields = new HashMap <>();
123- addFromProviders ( providers , jsonFields );
122+ jsonFields . putAll ( additionalFields );
124123 addGenericFields (jsonFields , query , true );
125124 addResultFields (jsonFields , esqlResult );
126125 return new ESLogMessage ().withFields (jsonFields );
127126 }
128127
129- public static ESLogMessage of (String query , long took , Exception exception , List < SlowLogFields > providers ) {
128+ public static ESLogMessage of (String query , long took , Exception exception , Map < String , String > additionalFields ) {
130129 Map <String , Object > jsonFields = new HashMap <>();
131- addFromProviders ( providers , jsonFields );
130+ jsonFields . putAll ( additionalFields );
132131 addGenericFields (jsonFields , query , false );
133132 addErrorFields (jsonFields , took , exception );
134133 return new ESLogMessage ().withFields (jsonFields );
135134 }
136135
137- private static void addFromProviders (List <SlowLogFields > providers , Map <String , Object > jsonFields ) {
138- for (SlowLogFields provider : providers ) {
139- jsonFields .putAll (provider .queryFields ());
140- }
141- }
142-
143136 private static void addGenericFields (Map <String , Object > fieldMap , String query , boolean success ) {
144137 String source = escapeJson (query );
145138 fieldMap .put (ELASTICSEARCH_SLOWLOG_SUCCESS , success );
0 commit comments