Skip to content

Commit 5e0fbf0

Browse files
committed
Fix OpenSearch 3.2.0+ API compatibility
Add missing fields across multiple APIs for OpenSearch 3.2.0+ support: Nodes Stats API: - Add MaxLastIndexRequestTimestamp to indexing stats - Add StartreeQueryTotal, StartreeQueryTimeInMillis, StartreeQueryCurrent for startree query tracking Indices Stats API: - Add same startree query fields and MaxLastIndexRequestTimestamp Cat APIs (nodes, shards, indices): - Add indexing timestamp fields (last_index_request_timestamp) - Add startree query tracking fields Floating Point Precision: - Fix concurrent_avg_slice_count precision loss by changing from float32 to float64 to match OpenSearch's double precision Security Plugin: - Add Settings field to security health API response for plugin configuration like cache TTL settings Signed-off-by: Sean Chittenden <sean.chittenden@crowdstrike.com>
1 parent e0775f9 commit 5e0fbf0

7 files changed

Lines changed: 54 additions & 26 deletions

File tree

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
1616
### Fixed
1717
- Fix flaky connection integration test by replacing arbitrary sleep times with proper server readiness polling
1818
- Fix nodes API compatibility with OpenSearch 3.1.0+ by adding phase_results_processors field
19+
- Fix nodes stats API compatibility with OpenSearch 3.2.0+ by adding max_last_index_request_timestamp and startree query fields
20+
- Fix indices stats API compatibility with OpenSearch 3.2.0+ by adding max_last_index_request_timestamp and startree query fields
21+
- Fix cat APIs compatibility with OpenSearch 3.2.0+ by adding indexing timestamp and startree query fields
22+
- Fix floating point precision loss in nodes stats concurrent_avg_slice_count field by changing from float32 to float64
23+
- Fix security plugin health API compatibility with OpenSearch 3.2.0+ by adding settings field
1924

2025
### Security
2126

opensearchapi/api_cat-indices.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,12 @@ type CatIndexResp struct {
156156
PrimarySearchConcurrentQueryTotal *int `json:"pri.search.concurrent_query_total,string"`
157157
SearchConcurrentAvgSliceCount *string `json:"search.concurrent_avg_slice_count"`
158158
PrimarySearchConcurrentAvgSliceCount *string `json:"pri.search.concurrent_avg_slice_count"`
159+
SearchStartreeQueryCurrent *int `json:"search.startree_query_current,string"` // Available in OpenSearch 3.2.0+
160+
PrimaryStartreeQueryCurrent *int `json:"pri.search.startree.query_current,string"` // Available in OpenSearch 3.2.0+
161+
SearchStartreeQueryTime *string `json:"search.startree_query_time"` // Available in OpenSearch 3.2.0+
162+
PrimaryStartreeQueryTime *string `json:"pri.search.startree.query_time"` // Available in OpenSearch 3.2.0+
163+
SearchStartreeQueryTotal *string `json:"search.startree_query_total"` // Available in OpenSearch 3.2.0+
164+
PrimaryStartreeQueryTotal *string `json:"pri.search.startree.query_total"` // Available in OpenSearch 3.2.0+
159165
SearchScrollCurrent *int `json:"search.scroll_current,string"`
160166
PrimarySearchScrollCurrent *int `json:"pri.search.scroll_current,string"`
161167
SearchScrollTime *string `json:"search.scroll_time"`
@@ -193,6 +199,8 @@ type CatIndexResp struct {
193199
MemoryTotal string `json:"memory.total"`
194200
PrimaryMemoryTotal string `json:"pri.memory.total"`
195201
SearchThrottled bool `json:"search.throttled,string"`
202+
LastIndexRequestTimestamp *string `json:"last_index_request_timestamp"` // Available in OpenSearch 3.2.0+
203+
LastIndexRequestTimestampString *string `json:"last_index_request_timestamp_string"` // Available in OpenSearch 3.2.0+
196204
}
197205

198206
// Inspect returns the Inspect type containing the raw *opensearch.Response

opensearchapi/api_cat-nodes.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,9 @@ type CatNodesItemResp struct {
122122
SearchConcurrentQueryTime *string `json:"search.concurrent_query_time"`
123123
SearchConcurrentQueryTotal *int `json:"search.concurrent_query_total,string"`
124124
SearchConcurrentAvgSliceCount *string `json:"search.concurrent_avg_slice_count"`
125+
SearchStartreeQueryCurrent *int `json:"search.startree_query_current,string"` // Available in OpenSearch 3.2.0+
126+
SearchStartreeQueryTime *string `json:"search.startree_query_time"` // Available in OpenSearch 3.2.0+
127+
SearchStartreeQueryTotal *int `json:"search.startree_query_total,string"` // Available in OpenSearch 3.2.0+
125128
SearchScrollCurrent *int `json:"search.scroll_current,string"`
126129
SearchScrollTime *string `json:"search.scroll_time"`
127130
SearchScrollTotal *int `json:"search.scroll_total,string"`

opensearchapi/api_cat-shards.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ type CatShardResp struct {
106106
SearchConcurrentQueryTime *string `json:"search.concurrent_query_time"`
107107
SearchConcurrentQueryTotal *int `json:"search.concurrent_query_total,string"`
108108
SearchConcurrentAvgSliceCount *string `json:"search.concurrent_avg_slice_count"`
109+
SearchStartreeQueryCurrent *int `json:"search.startree_query_current,string"` // Available in OpenSearch 3.2.0+
110+
SearchStartreeQueryTime *string `json:"search.startree_query_time"` // Available in OpenSearch 3.2.0+
111+
SearchStartreeQueryTotal *int `json:"search.startree_query_total,string"` // Available in OpenSearch 3.2.0+
109112
SearchScrollCurrent *int `json:"search.scroll_current,string"`
110113
SearchScrollTime *string `json:"search.scroll_time"`
111114
SearchScrollTotal *int `json:"search.scroll_total,string"`

opensearchapi/api_indices-stats.go

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -83,17 +83,18 @@ type IndicesStatsStore struct {
8383

8484
// IndicesStatsIndexing is a sub type of IndicesStatsInfo containing stats about document indexing
8585
type IndicesStatsIndexing struct {
86-
IndexTotal int `json:"index_total"`
87-
IndexTimeInMillis int `json:"index_time_in_millis"`
88-
IndexCurrent int `json:"index_current"`
89-
IndexFailed int `json:"index_failed"`
90-
DeleteTotal int `json:"delete_total"`
91-
DeleteTimeInMillis int `json:"delete_time_in_millis"`
92-
DeleteCurrent int `json:"delete_current"`
93-
NoopUpdateTotal int `json:"noop_update_total"`
94-
IsThrottled bool `json:"is_throttled"`
95-
ThrottleTimeInMillis int `json:"throttle_time_in_millis"`
96-
DocStatus map[string]int `json:"doc_status"`
86+
IndexTotal int `json:"index_total"`
87+
IndexTimeInMillis int `json:"index_time_in_millis"`
88+
IndexCurrent int `json:"index_current"`
89+
IndexFailed int `json:"index_failed"`
90+
DeleteTotal int `json:"delete_total"`
91+
DeleteTimeInMillis int `json:"delete_time_in_millis"`
92+
DeleteCurrent int `json:"delete_current"`
93+
NoopUpdateTotal int `json:"noop_update_total"`
94+
IsThrottled bool `json:"is_throttled"`
95+
ThrottleTimeInMillis int `json:"throttle_time_in_millis"`
96+
DocStatus map[string]int `json:"doc_status"`
97+
MaxLastIndexRequestTimestamp int64 `json:"max_last_index_request_timestamp"` // Available in OpenSearch 3.2.0+
9798
}
9899

99100
// IndicesStatsGet is a sub type of IndicesStatsInfo containing stats about index get
@@ -118,6 +119,9 @@ type IndicesStatsSearch struct {
118119
ConcurrentQueryTimeInMillis int `json:"concurrent_query_time_in_millis"`
119120
ConcurrentQueryCurrent int `json:"concurrent_query_current"`
120121
ConcurrentAVGSliceCount float32 `json:"concurrent_avg_slice_count"`
122+
StartreeQueryTotal int `json:"startree_query_total"` // Available in OpenSearch 3.2.0+
123+
StartreeQueryTimeInMillis int `json:"startree_query_time_in_millis"` // Available in OpenSearch 3.2.0+
124+
StartreeQueryCurrent int `json:"startree_query_current"` // Available in OpenSearch 3.2.0+
121125
FetchTotal int `json:"fetch_total"`
122126
FetchTimeInMillis int `json:"fetch_time_in_millis"`
123127
FetchCurrent int `json:"fetch_current"`

opensearchapi/api_nodes-stats.go

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -126,17 +126,18 @@ type NodesStatsIndices struct {
126126
ReservedInBytes int `json:"reserved_in_bytes"`
127127
} `json:"store"`
128128
Indexing struct {
129-
IndexTotal int `json:"index_total"`
130-
IndexTimeInMillis int `json:"index_time_in_millis"`
131-
IndexCurrent int `json:"index_current"`
132-
IndexFailed int `json:"index_failed"`
133-
DeleteTotal int `json:"delete_total"`
134-
DeleteTimeInMillis int `json:"delete_time_in_millis"`
135-
DeleteCurrent int `json:"delete_current"`
136-
NoopUpdateTotal int `json:"noop_update_total"`
137-
IsThrottled bool `json:"is_throttled"`
138-
ThrottleTimeInMillis int `json:"throttle_time_in_millis"`
139-
DocStatus map[string]int `json:"doc_status"`
129+
IndexTotal int `json:"index_total"`
130+
IndexTimeInMillis int `json:"index_time_in_millis"`
131+
IndexCurrent int `json:"index_current"`
132+
IndexFailed int `json:"index_failed"`
133+
DeleteTotal int `json:"delete_total"`
134+
DeleteTimeInMillis int `json:"delete_time_in_millis"`
135+
DeleteCurrent int `json:"delete_current"`
136+
NoopUpdateTotal int `json:"noop_update_total"`
137+
IsThrottled bool `json:"is_throttled"`
138+
ThrottleTimeInMillis int `json:"throttle_time_in_millis"`
139+
DocStatus map[string]int `json:"doc_status"`
140+
MaxLastIndexRequestTimestamp int64 `json:"max_last_index_request_timestamp"` // Available in OpenSearch 3.2.0+
140141
} `json:"indexing"`
141142
Get struct {
142143
Total int `json:"total"`
@@ -156,7 +157,10 @@ type NodesStatsIndices struct {
156157
ConcurrentQueryTotal int `json:"concurrent_query_total"`
157158
ConcurrentQueryTimeInMillis int `json:"concurrent_query_time_in_millis"`
158159
ConcurrentQueryCurrent int `json:"concurrent_query_current"`
159-
ConcurrentAVGSliceCount float32 `json:"concurrent_avg_slice_count"`
160+
ConcurrentAVGSliceCount float64 `json:"concurrent_avg_slice_count"`
161+
StartreeQueryTotal int `json:"startree_query_total"` // Available in OpenSearch 3.2.0+
162+
StartreeQueryTimeInMillis int `json:"startree_query_time_in_millis"` // Available in OpenSearch 3.2.0+
163+
StartreeQueryCurrent int `json:"startree_query_current"` // Available in OpenSearch 3.2.0+
160164
FetchTotal int `json:"fetch_total"`
161165
FetchTimeInMillis int `json:"fetch_time_in_millis"`
162166
FetchCurrent int `json:"fetch_current"`

plugins/security/api_health.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,10 @@ func (r HealthReq) GetRequest() (*http.Request, error) {
4848

4949
// HealthResp represents the returned struct of the health get response
5050
type HealthResp struct {
51-
Message *string `json:"message"`
52-
Mode string `json:"mode"`
53-
Status string `json:"status"`
51+
Message *string `json:"message"`
52+
Mode string `json:"mode"`
53+
Status string `json:"status"`
54+
Settings map[string]interface{} `json:"settings"` // Available in OpenSearch 3.2.0+
5455
response *opensearch.Response
5556
}
5657

0 commit comments

Comments
 (0)