1515
1616import org .elasticsearch .action .admin .cluster .node .info .NodeInfo ;
1717import org .elasticsearch .action .admin .cluster .node .info .NodesInfoResponse ;
18- import org .elasticsearch .action .admin .indices .template .put .TransportPutComposableIndexTemplateAction ;
19- import org .elasticsearch .cluster .metadata .ComposableIndexTemplate ;
20- import org .elasticsearch .cluster .metadata .Template ;
21- import org .elasticsearch .common .compress .CompressedXContent ;
2218import org .elasticsearch .common .settings .Settings ;
2319import org .elasticsearch .common .transport .TransportAddress ;
20+ import org .elasticsearch .core .TimeValue ;
2421import org .elasticsearch .datastreams .DataStreamsPlugin ;
2522import org .elasticsearch .http .HttpInfo ;
26- import org .elasticsearch .index .query .QueryBuilders ;
2723import org .elasticsearch .plugins .Plugin ;
2824import org .elasticsearch .test .ESSingleNodeTestCase ;
2925import org .elasticsearch .test .InternalSettingsPlugin ;
26+ import org .elasticsearch .xpack .esql .action .EsqlQueryRequestBuilder ;
27+ import org .elasticsearch .xpack .esql .action .EsqlQueryResponse ;
28+ import org .elasticsearch .xpack .esql .plugin .EsqlPlugin ;
3029import org .junit .Test ;
3130
3231import java .net .InetSocketAddress ;
32+ import java .time .Duration ;
3333import java .util .Collection ;
3434import java .util .List ;
35+ import java .util .concurrent .Executors ;
3536import java .util .concurrent .TimeUnit ;
3637
38+ import static org .hamcrest .Matchers .emptyArray ;
3739import static org .hamcrest .Matchers .greaterThan ;
3840import static org .hamcrest .Matchers .is ;
41+ import static org .hamcrest .Matchers .not ;
3942
4043public class MetricsDBIndexingIT extends ESSingleNodeTestCase {
4144
4245 private SdkMeterProvider meterProvider ;
4346
4447 @ Override
4548 protected Collection <Class <? extends Plugin >> getPlugins () {
46- return List .of (DataStreamsPlugin .class , InternalSettingsPlugin .class , MetricsDBPlugin .class );
49+ return List .of (DataStreamsPlugin .class , InternalSettingsPlugin .class , MetricsDBPlugin .class , EsqlPlugin . class );
4750 }
4851
4952 @ Override
@@ -60,45 +63,20 @@ protected boolean addMockHttpTransport() {
6063 return false ;
6164 }
6265
63-
6466 @ Override
6567 public void setUp () throws Exception {
6668 super .setUp ();
67- var mappingTemplate = """
68- {
69- "_doc":{
70- "properties": {
71- "@timestamp" : {
72- "type": "date"
73- },
74- "dummy": {
75- "type": "keyword",
76- "time_series_dimension": true
77- }
78- }
79- }
80- }""" ;
81-
82- var request = new TransportPutComposableIndexTemplateAction .Request ("id" );
83- request .indexTemplate (
84- ComposableIndexTemplate .builder ()
85- .indexPatterns (List .of ("metricsdb" ))
86- .template (
87- new Template (Settings .builder ().put ("index.mode" , "time_series" ).build (), new CompressedXContent (mappingTemplate ), null )
88- )
89- .dataStreamTemplate (new ComposableIndexTemplate .DataStreamTemplate (false , false ))
90- .priority (500L )
91- .build ()
92- );
93- var res = client ().execute (TransportPutComposableIndexTemplateAction .TYPE , request ).actionGet ();
94- assertThat (res .isAcknowledged (), is (true ));
95-
9669 OtlpHttpMetricExporter exporter = OtlpHttpMetricExporter .builder ()
9770 .setEndpoint ("http://localhost:" + getHttpPort () + "/_otlp/v1/metrics" )
9871 .build ();
9972
10073 meterProvider = SdkMeterProvider .builder ()
101- .registerMetricReader (PeriodicMetricReader .builder (exporter ).build ())
74+ .registerMetricReader (
75+ PeriodicMetricReader .builder (exporter )
76+ .setExecutor (Executors .newScheduledThreadPool (0 ))
77+ .setInterval (Duration .ofNanos (Long .MAX_VALUE ))
78+ .build ()
79+ )
10280 .build ();
10381 }
10482
@@ -132,13 +110,19 @@ public void testIngestMetric() {
132110 assertThat (result .isSuccess (), is (true ));
133111
134112 admin ().indices ().prepareRefresh ().execute ().actionGet ();
135- long hits = client ().prepareSearch ("metricsdb" )
136- .setQuery (QueryBuilders .matchAllQuery ())
137- .execute ()
138- .actionGet ()
139- .getHits ()
140- .getTotalHits ()
141- .value ();
142- assertThat (hits , greaterThan (0L ));
113+ String [] indices = admin ().indices ().prepareGetIndex (TimeValue .timeValueSeconds (1 )).setIndices ("metrics*" ).get ().indices ();
114+ assertThat (indices , not (emptyArray ()));
115+
116+ try (EsqlQueryResponse resp = query ("""
117+ FROM metrics*
118+ | STATS avg(value_double) WHERE metric_name == "jvm.memory.total"
119+ """ )) {
120+ double avgJvmMemoryTotal = (double ) resp .column (0 ).next ();
121+ assertThat (avgJvmMemoryTotal , greaterThan (0.0 ));
122+ }
123+ }
124+
125+ protected EsqlQueryResponse query (String esql ) {
126+ return EsqlQueryRequestBuilder .newSyncEsqlQueryRequestBuilder (client ()).query (esql ).execute ().actionGet ();
143127 }
144128}
0 commit comments