17
17
package org .graylog .storage .opensearch2 ;
18
18
19
19
import com .google .common .base .Suppliers ;
20
+ import jakarta .annotation .Nonnull ;
20
21
import jakarta .inject .Inject ;
21
22
import jakarta .inject .Provider ;
22
23
import jakarta .inject .Singleton ;
25
26
import org .graylog .shaded .opensearch2 .org .apache .http .client .CredentialsProvider ;
26
27
import org .graylog .shaded .opensearch2 .org .opensearch .client .RestClient ;
27
28
import org .graylog .shaded .opensearch2 .org .opensearch .client .RestHighLevelClient ;
28
- import org .graylog .shaded .opensearch2 .org .opensearch .client .sniff .OpenSearchNodesSniffer ;
29
+ import org .graylog .shaded .opensearch2 .org .opensearch .client .sniff .NodesSniffer ;
30
+ import org .graylog .shaded .opensearch2 .org .opensearch .client .sniff .Sniffer ;
31
+ import org .graylog .storage .opensearch2 .sniffer .SnifferAggregator ;
32
+ import org .graylog .storage .opensearch2 .sniffer .SnifferBuilder ;
33
+ import org .graylog .storage .opensearch2 .sniffer .SnifferFilter ;
29
34
import org .graylog2 .configuration .ElasticsearchClientConfiguration ;
30
35
import org .graylog2 .configuration .IndexerHosts ;
31
36
import org .graylog2 .configuration .RunsWithDataNode ;
32
37
import org .graylog2 .security .IndexerJwtAuthTokenProvider ;
33
38
import org .graylog2 .security .TrustManagerAndSocketFactoryProvider ;
34
39
import org .graylog2 .system .shutdown .GracefulShutdownService ;
35
- import jakarta .annotation .Nonnull ;
36
40
37
41
import java .net .URI ;
38
42
import java .util .List ;
39
- import java .util .Locale ;
40
- import java .util .concurrent .TimeUnit ;
43
+ import java .util .Set ;
41
44
import java .util .function .Supplier ;
42
45
43
46
@ Singleton
44
47
public class RestClientProvider implements Provider <RestHighLevelClient > {
45
48
private final Supplier <RestHighLevelClient > clientSupplier ;
49
+ private final Set <SnifferBuilder > snifferBuilders ;
50
+ private final Set <SnifferFilter > snifferFilters ;
46
51
private final GracefulShutdownService shutdownService ;
47
52
private final ElasticsearchClientConfiguration configuration ;
48
53
private final CredentialsProvider credentialsProvider ;
@@ -58,46 +63,46 @@ public RestClientProvider(
58
63
CredentialsProvider credentialsProvider ,
59
64
TrustManagerAndSocketFactoryProvider trustManagerAndSocketFactoryProvider ,
60
65
@ RunsWithDataNode Boolean runsWithDataNode ,
61
- IndexerJwtAuthTokenProvider indexerJwtAuthTokenProvider ) {
66
+ IndexerJwtAuthTokenProvider indexerJwtAuthTokenProvider ,
67
+ Set <SnifferBuilder > snifferBuilders ,
68
+ Set <SnifferFilter > snifferFilters
69
+ ) {
62
70
this .shutdownService = shutdownService ;
63
71
this .configuration = configuration ;
64
72
this .credentialsProvider = credentialsProvider ;
65
73
this .trustManagerAndSocketFactoryProvider = trustManagerAndSocketFactoryProvider ;
66
74
this .runsWithDataNode = runsWithDataNode ;
67
75
this .indexerJwtAuthTokenProvider = indexerJwtAuthTokenProvider ;
68
76
this .clientSupplier = Suppliers .memoize (() -> createClient (hosts ));
77
+ this .snifferBuilders = snifferBuilders ;
78
+ this .snifferFilters = snifferFilters ;
69
79
}
70
80
71
81
72
82
@ Nonnull
73
83
private RestHighLevelClient createClient (List <URI > hosts ) {
74
84
final RestHighLevelClient client = buildBasicRestClient (hosts );
85
+ registerSniffers (client );
86
+ return client ;
87
+ }
75
88
76
- var sniffer = SnifferWrapper .create (
77
- client ,
78
- TimeUnit .SECONDS .toMillis (5 ),
79
- configuration .discoveryFrequency (),
80
- mapDefaultScheme (configuration .defaultSchemeForDiscoveredNodes ())
81
- );
89
+ private void registerSniffers (RestHighLevelClient client ) {
90
+ final List <NodesSniffer > sniffers = snifferBuilders .stream ()
91
+ .filter (SnifferBuilder ::enabled )
92
+ .map (b -> b .create (client .getLowLevelClient ()))
93
+ .toList ();
82
94
83
- if (configuration .discoveryEnabled ()) {
84
- sniffer .add (FilteredOpenSearchNodesSniffer .create (configuration .discoveryFilter ()));
85
- }
86
- if (configuration .isNodeActivityLogger ()) {
87
- sniffer .add (NodeListSniffer .create ());
88
- }
95
+ if (!sniffers .isEmpty ()) {
96
+ final List <SnifferFilter > filters = snifferFilters .stream ().filter (SnifferFilter ::enabled ).toList ();
97
+ final SnifferAggregator snifferAggregator = new SnifferAggregator (sniffers , filters );
89
98
90
- sniffer .build ().ifPresent (s -> shutdownService .register (s ::close ));
91
- return client ;
92
- }
99
+ final Sniffer sniffer = Sniffer .builder (client .getLowLevelClient ())
100
+ .setSniffIntervalMillis (Math .toIntExact (configuration .discoveryFrequency ().toMilliseconds ()))
101
+ .setNodesSniffer (snifferAggregator )
102
+ .build ();
93
103
94
- private OpenSearchNodesSniffer .Scheme mapDefaultScheme (String defaultSchemeForDiscoveredNodes ) {
95
- return switch (defaultSchemeForDiscoveredNodes .toUpperCase (Locale .ENGLISH )) {
96
- case "HTTP" -> OpenSearchNodesSniffer .Scheme .HTTP ;
97
- case "HTTPS" -> OpenSearchNodesSniffer .Scheme .HTTPS ;
98
- default ->
99
- throw new IllegalArgumentException ("Invalid default scheme for discovered OS nodes: " + defaultSchemeForDiscoveredNodes );
100
- };
104
+ shutdownService .register (sniffer ::close );
105
+ }
101
106
}
102
107
103
108
@ Override
0 commit comments