Skip to content

Commit 666a2d7

Browse files
committed
Migrate from Joda-Time to java.time API
Signed-off-by: David Zane <davizane@amazon.com>
1 parent a97099c commit 666a2d7

File tree

12 files changed

+72
-59
lines changed

12 files changed

+72
-59
lines changed

src/main/java/org/opensearch/plugin/insights/core/exporter/LocalIndexExporter.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@
88

99
package org.opensearch.plugin.insights.core.exporter;
1010

11+
import java.time.ZoneOffset;
12+
import java.time.ZonedDateTime;
13+
import java.time.format.DateTimeFormatter;
1114
import java.util.List;
1215
import org.apache.logging.log4j.LogManager;
1316
import org.apache.logging.log4j.Logger;
14-
import org.joda.time.DateTime;
15-
import org.joda.time.DateTimeZone;
16-
import org.joda.time.format.DateTimeFormatter;
1717
import org.opensearch.action.bulk.BulkRequestBuilder;
1818
import org.opensearch.action.bulk.BulkResponse;
1919
import org.opensearch.action.index.IndexRequest;
@@ -111,6 +111,6 @@ public void close() {
111111
}
112112

113113
private String getDateTimeFromFormat() {
114-
return indexPattern.print(DateTime.now(DateTimeZone.UTC));
114+
return indexPattern.format(ZonedDateTime.now(ZoneOffset.UTC));
115115
}
116116
}

src/main/java/org/opensearch/plugin/insights/core/exporter/QueryInsightsExporterFactory.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@
1212
import static org.opensearch.plugin.insights.settings.QueryInsightsSettings.EXPORTER_TYPE;
1313

1414
import java.io.IOException;
15+
import java.time.format.DateTimeFormatter;
1516
import java.util.HashSet;
1617
import java.util.Locale;
1718
import java.util.Set;
1819
import org.apache.logging.log4j.LogManager;
1920
import org.apache.logging.log4j.Logger;
20-
import org.joda.time.format.DateTimeFormat;
2121
import org.opensearch.client.Client;
2222
import org.opensearch.common.settings.Settings;
2323
import org.opensearch.plugin.insights.core.metrics.OperationalMetric;
@@ -80,7 +80,7 @@ public void validateExporterConfig(final Settings settings) throws IllegalArgume
8080
*/
8181
public QueryInsightsExporter createExporter(SinkType type, String indexPattern) {
8282
if (SinkType.LOCAL_INDEX.equals(type)) {
83-
QueryInsightsExporter exporter = new LocalIndexExporter(client, DateTimeFormat.forPattern(indexPattern));
83+
QueryInsightsExporter exporter = new LocalIndexExporter(client, DateTimeFormatter.ofPattern(indexPattern, Locale.ROOT));
8484
this.exporters.add(exporter);
8585
return exporter;
8686
}
@@ -96,7 +96,7 @@ public QueryInsightsExporter createExporter(SinkType type, String indexPattern)
9696
*/
9797
public QueryInsightsExporter updateExporter(QueryInsightsExporter exporter, String indexPattern) {
9898
if (exporter.getClass() == LocalIndexExporter.class) {
99-
((LocalIndexExporter) exporter).setIndexPattern(DateTimeFormat.forPattern(indexPattern));
99+
((LocalIndexExporter) exporter).setIndexPattern(DateTimeFormatter.ofPattern(indexPattern, Locale.ROOT));
100100
}
101101
return exporter;
102102
}

src/main/java/org/opensearch/plugin/insights/core/reader/LocalIndexReader.java

+15-12
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@
88

99
package org.opensearch.plugin.insights.core.reader;
1010

11+
import java.time.ZoneOffset;
12+
import java.time.ZonedDateTime;
13+
import java.time.format.DateTimeFormatter;
1114
import java.util.ArrayList;
1215
import java.util.List;
1316
import org.apache.logging.log4j.LogManager;
1417
import org.apache.logging.log4j.Logger;
15-
import org.joda.time.DateTime;
16-
import org.joda.time.DateTimeZone;
17-
import org.joda.time.format.DateTimeFormatter;
1818
import org.opensearch.action.search.SearchRequest;
1919
import org.opensearch.action.search.SearchResponse;
2020
import org.opensearch.client.Client;
@@ -91,18 +91,21 @@ public List<SearchQueryRecord> read(final String from, final String to) {
9191
if (from == null || to == null) {
9292
return records;
9393
}
94-
final DateTime start = DateTime.parse(from);
95-
DateTime end = DateTime.parse(to);
96-
if (end.compareTo(DateTime.now(DateTimeZone.UTC)) > 0) {
97-
end = DateTime.now(DateTimeZone.UTC);
94+
final ZonedDateTime start = ZonedDateTime.parse(from);
95+
ZonedDateTime end = ZonedDateTime.parse(to);
96+
ZonedDateTime now = ZonedDateTime.now(ZoneOffset.UTC);
97+
if (end.isAfter(now)) {
98+
end = now;
9899
}
99-
DateTime curr = start;
100-
while (curr.compareTo(end.plusDays(1).withTimeAtStartOfDay()) < 0) {
100+
ZonedDateTime curr = start;
101+
while (curr.isBefore(end.plusDays(1).toLocalDate().atStartOfDay(end.getZone()))) {
101102
String index = getDateTimeFromFormat(curr);
102103
SearchRequest searchRequest = new SearchRequest(index);
103104
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
104105
MatchQueryBuilder excludeQuery = QueryBuilders.matchQuery("indices", "top_queries*");
105-
RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("timestamp").from(start.getMillis()).to(end.getMillis());
106+
RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("timestamp")
107+
.from(start.toInstant().toEpochMilli())
108+
.to(end.toInstant().toEpochMilli());
106109
QueryBuilder query = QueryBuilders.boolQuery().must(rangeQuery).mustNot(excludeQuery);
107110
searchSourceBuilder.query(query);
108111
searchRequest.source(searchSourceBuilder);
@@ -132,7 +135,7 @@ public void close() {
132135
logger.debug("Closing the LocalIndexReader..");
133136
}
134137

135-
private String getDateTimeFromFormat(DateTime current) {
136-
return indexPattern.print(current);
138+
private String getDateTimeFromFormat(ZonedDateTime current) {
139+
return current.format(indexPattern);
137140
}
138141
}

src/main/java/org/opensearch/plugin/insights/core/reader/QueryInsightsReaderFactory.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99
package org.opensearch.plugin.insights.core.reader;
1010

1111
import java.io.IOException;
12+
import java.time.format.DateTimeFormatter;
1213
import java.util.HashSet;
1314
import java.util.Set;
1415
import org.apache.logging.log4j.LogManager;
1516
import org.apache.logging.log4j.Logger;
16-
import org.joda.time.format.DateTimeFormat;
1717
import org.opensearch.client.Client;
1818
import org.opensearch.core.xcontent.NamedXContentRegistry;
1919

@@ -46,7 +46,7 @@ public QueryInsightsReaderFactory(final Client client) {
4646
* @return QueryInsightsReader the created Reader
4747
*/
4848
public QueryInsightsReader createReader(String indexPattern, NamedXContentRegistry namedXContentRegistry) {
49-
QueryInsightsReader Reader = new LocalIndexReader(client, DateTimeFormat.forPattern(indexPattern), namedXContentRegistry);
49+
QueryInsightsReader Reader = new LocalIndexReader(client, DateTimeFormatter.ofPattern(indexPattern, Locale.ROOT), namedXContentRegistry);
5050
this.Readers.add(Reader);
5151
return Reader;
5252
}
@@ -60,7 +60,7 @@ public QueryInsightsReader createReader(String indexPattern, NamedXContentRegist
6060
*/
6161
public QueryInsightsReader updateReader(QueryInsightsReader Reader, String indexPattern) {
6262
if (Reader.getClass() == LocalIndexReader.class) {
63-
((LocalIndexReader) Reader).setIndexPattern(DateTimeFormat.forPattern(indexPattern));
63+
((LocalIndexReader) Reader).setIndexPattern(DateTimeFormatter.ofPattern(indexPattern, Locale.ROOT));
6464
}
6565
return Reader;
6666
}

src/main/java/org/opensearch/plugin/insights/core/service/TopQueriesService.java

+9-9
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.time.LocalDateTime;
1919
import java.time.ZoneId;
2020
import java.time.ZoneOffset;
21+
import java.time.ZonedDateTime;
2122
import java.time.temporal.ChronoUnit;
2223
import java.util.ArrayList;
2324
import java.util.Arrays;
@@ -32,7 +33,6 @@
3233
import java.util.stream.Stream;
3334
import org.apache.logging.log4j.LogManager;
3435
import org.apache.logging.log4j.Logger;
35-
import org.joda.time.DateTime;
3636
import org.opensearch.common.settings.Settings;
3737
import org.opensearch.common.unit.TimeValue;
3838
import org.opensearch.core.xcontent.NamedXContentRegistry;
@@ -362,10 +362,10 @@ public List<SearchQueryRecord> getTopQueriesRecords(final boolean includeLastWin
362362
}
363363
List<SearchQueryRecord> filterQueries = queries;
364364
if (from != null && to != null) {
365-
final DateTime start = DateTime.parse(from);
366-
final DateTime end = DateTime.parse(to);
367-
Predicate<SearchQueryRecord> timeFilter = element -> start.getMillis() <= element.getTimestamp()
368-
&& element.getTimestamp() <= end.getMillis();
365+
final ZonedDateTime start = ZonedDateTime.parse(from);
366+
final ZonedDateTime end = ZonedDateTime.parse(to);
367+
Predicate<SearchQueryRecord> timeFilter = element -> start.toInstant().toEpochMilli() <= element.getTimestamp()
368+
&& element.getTimestamp() <= end.toInstant().toEpochMilli();
369369
filterQueries = queries.stream().filter(checkIfInternal.and(timeFilter)).collect(Collectors.toList());
370370
}
371371
return Stream.of(filterQueries)
@@ -394,11 +394,11 @@ public List<SearchQueryRecord> getTopQueriesRecordsFromIndex(final String from,
394394
final List<SearchQueryRecord> queries = new ArrayList<>();
395395
if (reader != null) {
396396
try {
397-
final DateTime start = DateTime.parse(from);
398-
final DateTime end = DateTime.parse(to);
397+
final ZonedDateTime start = ZonedDateTime.parse(from);
398+
final ZonedDateTime end = ZonedDateTime.parse(to);
399399
List<SearchQueryRecord> records = reader.read(from, to);
400-
Predicate<SearchQueryRecord> timeFilter = element -> start.getMillis() <= element.getTimestamp()
401-
&& element.getTimestamp() <= end.getMillis();
400+
Predicate<SearchQueryRecord> timeFilter = element -> start.toInstant().toEpochMilli() <= element.getTimestamp()
401+
&& element.getTimestamp() <= end.toInstant().toEpochMilli();
402402
List<SearchQueryRecord> filteredRecords = records.stream()
403403
.filter(checkIfInternal.and(timeFilter))
404404
.collect(Collectors.toList());

src/main/java/org/opensearch/plugin/insights/rules/resthandler/top_queries/RestTopQueriesAction.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111
import static org.opensearch.plugin.insights.settings.QueryInsightsSettings.TOP_QUERIES_BASE_URI;
1212
import static org.opensearch.rest.RestRequest.Method.GET;
1313

14+
import java.time.ZonedDateTime;
1415
import java.util.List;
1516
import java.util.Locale;
1617
import java.util.Set;
1718
import java.util.stream.Collectors;
18-
import org.joda.time.DateTime;
1919
import org.opensearch.client.node.NodeClient;
2020
import org.opensearch.common.settings.Settings;
2121
import org.opensearch.core.common.Strings;
@@ -67,7 +67,7 @@ public RestChannelConsumer prepareRequest(final RestRequest request, final NodeC
6767

6868
private static boolean isNotISODate(final String dateTime) {
6969
try {
70-
DateTime.parse(dateTime);
70+
ZonedDateTime.parse(dateTime);
7171
return false;
7272
} catch (Exception e) {
7373
return true;

src/test/java/org/opensearch/plugin/insights/core/exporter/LocalIndexExporterTests.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,8 @@
1414
import static org.mockito.Mockito.spy;
1515
import static org.mockito.Mockito.when;
1616

17+
import java.time.format.DateTimeFormatter;
1718
import java.util.List;
18-
import org.joda.time.format.DateTimeFormat;
19-
import org.joda.time.format.DateTimeFormatter;
2019
import org.junit.Before;
2120
import org.opensearch.action.bulk.BulkAction;
2221
import org.opensearch.action.bulk.BulkRequestBuilder;
@@ -31,7 +30,7 @@
3130
* Granular tests for the {@link LocalIndexExporterTests} class.
3231
*/
3332
public class LocalIndexExporterTests extends OpenSearchTestCase {
34-
private final DateTimeFormatter format = DateTimeFormat.forPattern("YYYY.MM.dd");
33+
private final DateTimeFormatter format = DateTimeFormatter.ofPattern("YYYY.MM.dd");
3534
private final Client client = mock(Client.class);
3635
private LocalIndexExporter localIndexExporter;
3736

@@ -91,7 +90,7 @@ public void testClose() {
9190
}
9291

9392
public void testGetAndSetIndexPattern() {
94-
DateTimeFormatter newFormatter = mock(DateTimeFormatter.class);
93+
final DateTimeFormatter newFormatter = DateTimeFormatter.ofPattern("YYYY-MM-dd");
9594
localIndexExporter.setIndexPattern(newFormatter);
9695
assert (localIndexExporter.getIndexPattern() == newFormatter);
9796
}

src/test/java/org/opensearch/plugin/insights/core/exporter/QueryInsightsExporterFactoryTests.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import static org.mockito.Mockito.when;
1414
import static org.opensearch.plugin.insights.settings.QueryInsightsSettings.EXPORTER_TYPE;
1515

16-
import org.joda.time.format.DateTimeFormat;
16+
import java.time.format.DateTimeFormatter;
1717
import org.junit.Before;
1818
import org.opensearch.client.Client;
1919
import org.opensearch.common.settings.Settings;
@@ -76,9 +76,9 @@ public void testCreateAndCloseExporter() {
7676
}
7777

7878
public void testUpdateExporter() {
79-
LocalIndexExporter exporter = new LocalIndexExporter(client, DateTimeFormat.forPattern("yyyy-MM-dd"));
79+
LocalIndexExporter exporter = new LocalIndexExporter(client, DateTimeFormatter.ofPattern(format));
8080
queryInsightsExporterFactory.updateExporter(exporter, "yyyy-MM-dd-HH");
81-
assertEquals(DateTimeFormat.forPattern("yyyy-MM-dd-HH"), exporter.getIndexPattern());
81+
assertEquals(DateTimeFormatter.ofPattern("yyyy-MM-dd-HH").toString(), exporter.getIndexPattern().toString());
8282
}
8383

8484
}

src/test/java/org/opensearch/plugin/insights/core/reader/LocalIndexReaderTests.java

+7-8
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,14 @@
1313
import static org.mockito.Mockito.when;
1414

1515
import java.io.IOException;
16+
import java.time.ZoneOffset;
17+
import java.time.ZonedDateTime;
18+
import java.time.format.DateTimeFormatter;
1619
import java.util.Collections;
1720
import java.util.HashMap;
1821
import java.util.List;
1922
import java.util.Map;
2023
import org.apache.lucene.search.TotalHits;
21-
import org.joda.time.DateTime;
22-
import org.joda.time.DateTimeZone;
23-
import org.joda.time.format.DateTimeFormat;
24-
import org.joda.time.format.DateTimeFormatter;
2524
import org.junit.Before;
2625
import org.opensearch.action.search.SearchRequest;
2726
import org.opensearch.action.search.SearchResponse;
@@ -41,7 +40,7 @@
4140
* Granular tests for the {@link LocalIndexReaderTests} class.
4241
*/
4342
public class LocalIndexReaderTests extends OpenSearchTestCase {
44-
private final DateTimeFormatter format = DateTimeFormat.forPattern("YYYY.MM.dd");
43+
private final DateTimeFormatter format = DateTimeFormatter.ofPattern("YYYY.MM.dd");
4544
private final Client client = mock(Client.class);
4645
private final NamedXContentRegistry namedXContentRegistry = mock(NamedXContentRegistry.class);
4746
private LocalIndexReader localIndexReader;
@@ -55,7 +54,7 @@ public void setup() {
5554
public void testReadRecords() {
5655
ActionFuture<SearchResponse> responseActionFuture = mock(ActionFuture.class);
5756
Map<String, Object> sourceMap = new HashMap<>();
58-
sourceMap.put("timestamp", DateTime.now(DateTimeZone.UTC).getMillis());
57+
sourceMap.put("timestamp", ZonedDateTime.now(ZoneOffset.UTC).toInstant().toEpochMilli());
5958
sourceMap.put("indices", Collections.singletonList("my-index-0"));
6059
sourceMap.put("source", Map.of());
6160
sourceMap.put("labels", Map.of());
@@ -83,7 +82,7 @@ public void testReadRecords() {
8382
when(searchResponse.getHits()).thenReturn(searchHits);
8483
when(responseActionFuture.actionGet()).thenReturn(searchResponse);
8584
when(client.search(any(SearchRequest.class))).thenReturn(responseActionFuture);
86-
String time = DateTime.now(DateTimeZone.UTC).toString();
85+
String time = ZonedDateTime.now(ZoneOffset.UTC).format(DateTimeFormatter.ISO_DATE_TIME);
8786
List<SearchQueryRecord> records = List.of();
8887
try {
8988
records = localIndexReader.read(time, time);
@@ -103,7 +102,7 @@ public void testClose() {
103102
}
104103

105104
public void testGetAndSetIndexPattern() {
106-
DateTimeFormatter newFormatter = mock(DateTimeFormatter.class);
105+
final DateTimeFormatter newFormatter = DateTimeFormatter.ofPattern("YYYY-MM-dd");
107106
localIndexReader.setIndexPattern(newFormatter);
108107
assert (localIndexReader.getIndexPattern() == newFormatter);
109108
}

src/test/java/org/opensearch/plugin/insights/core/reader/QueryInsightsReaderFactoryTests.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import static org.mockito.Mockito.when;
1414
import static org.opensearch.plugin.insights.settings.QueryInsightsSettings.DEFAULT_TOP_N_QUERIES_INDEX_PATTERN;
1515

16-
import org.joda.time.format.DateTimeFormat;
16+
import java.time.format.DateTimeFormatter;
1717
import org.junit.Before;
1818
import org.opensearch.client.Client;
1919
import org.opensearch.core.xcontent.NamedXContentRegistry;
@@ -55,9 +55,9 @@ public void testCreateAndCloseReader() {
5555
}
5656

5757
public void testUpdateReader() {
58-
LocalIndexReader reader = new LocalIndexReader(client, DateTimeFormat.forPattern(format), namedXContentRegistry);
58+
LocalIndexReader reader = new LocalIndexReader(client, DateTimeFormatter.ofPattern(format), namedXContentRegistry);
5959
queryInsightsReaderFactory.updateReader(reader, "yyyy-MM-dd-HH");
60-
assertEquals(DateTimeFormat.forPattern("yyyy-MM-dd-HH"), reader.getIndexPattern());
60+
assertEquals(DateTimeFormatter.ofPattern("yyyy-MM-dd-HH").toString(), reader.getIndexPattern().toString());
6161
}
6262

6363
}

src/test/java/org/opensearch/plugin/insights/core/service/QueryInsightsServiceTests.java

+11
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88

99
package org.opensearch.plugin.insights.core.service;
1010

11+
import static org.mockito.ArgumentMatchers.any;
1112
import static org.mockito.Mockito.mock;
1213
import static org.mockito.Mockito.spy;
14+
import static org.mockito.Mockito.when;
1315

1416
import java.util.List;
1517
import java.util.Map;
@@ -21,12 +23,15 @@
2123
import org.opensearch.common.unit.TimeValue;
2224
import org.opensearch.core.xcontent.NamedXContentRegistry;
2325
import org.opensearch.plugin.insights.QueryInsightsTestUtils;
26+
import org.opensearch.plugin.insights.core.metrics.OperationalMetricsCounter;
2427
import org.opensearch.plugin.insights.rules.model.GroupingType;
2528
import org.opensearch.plugin.insights.rules.model.MetricType;
2629
import org.opensearch.plugin.insights.rules.model.SearchQueryRecord;
2730
import org.opensearch.plugin.insights.rules.model.healthStats.QueryInsightsHealthStats;
2831
import org.opensearch.plugin.insights.rules.model.healthStats.TopQueriesHealthStats;
2932
import org.opensearch.plugin.insights.settings.QueryInsightsSettings;
33+
import org.opensearch.telemetry.metrics.Counter;
34+
import org.opensearch.telemetry.metrics.MetricsRegistry;
3035
import org.opensearch.telemetry.metrics.noop.NoopMetricsRegistry;
3136
import org.opensearch.test.OpenSearchTestCase;
3237
import org.opensearch.threadpool.ScalingExecutorBuilder;
@@ -64,6 +69,12 @@ public void setup() {
6469
queryInsightsService.enableCollection(MetricType.CPU, true);
6570
queryInsightsService.enableCollection(MetricType.MEMORY, true);
6671
queryInsightsServiceSpy = spy(queryInsightsService);
72+
73+
MetricsRegistry metricsRegistry = mock(MetricsRegistry.class);
74+
when(metricsRegistry.createCounter(any(String.class), any(String.class), any(String.class))).thenAnswer(
75+
invocation -> mock(Counter.class)
76+
);
77+
OperationalMetricsCounter.initialize("cluster", metricsRegistry);
6778
}
6879

6980
@Override

0 commit comments

Comments
 (0)