2020import org .elasticsearch .common .settings .Setting ;
2121import org .elasticsearch .common .settings .Settings ;
2222import org .elasticsearch .common .settings .SettingsFilter ;
23+ import org .elasticsearch .common .util .FeatureFlag ;
2324import org .elasticsearch .env .Environment ;
2425import org .elasticsearch .env .NodeEnvironment ;
2526import org .elasticsearch .indices .SystemIndexDescriptor ;
5253import org .elasticsearch .xpack .application .analytics .action .TransportPutAnalyticsCollectionAction ;
5354import org .elasticsearch .xpack .application .analytics .ingest .AnalyticsEventIngestConfig ;
5455import org .elasticsearch .xpack .application .rules .QueryRulesIndexService ;
56+ import org .elasticsearch .xpack .application .rules .action .PutQueryRulesetAction ;
57+ import org .elasticsearch .xpack .application .rules .action .RestPutQueryRulesetAction ;
58+ import org .elasticsearch .xpack .application .rules .action .TransportPutQueryRulesetAction ;
5559import org .elasticsearch .xpack .application .search .SearchApplicationIndexService ;
5660import org .elasticsearch .xpack .application .search .action .DeleteSearchApplicationAction ;
5761import org .elasticsearch .xpack .application .search .action .GetSearchApplicationAction ;
7680import org .elasticsearch .xpack .core .action .XPackInfoFeatureAction ;
7781import org .elasticsearch .xpack .core .action .XPackUsageFeatureAction ;
7882
83+ import java .util .ArrayList ;
7984import java .util .Arrays ;
8085import java .util .Collection ;
8186import java .util .Collections ;
@@ -90,17 +95,18 @@ public class EnterpriseSearch extends Plugin implements ActionPlugin, SystemInde
9095
9196 public static final String BEHAVIORAL_ANALYTICS_API_ENDPOINT = APPLICATION_API_ENDPOINT + "/analytics" ;
9297
98+ public static final String QUERY_RULES_API_ENDPOINT = "_query_rules" ;
99+
93100 private static final Logger logger = LogManager .getLogger (EnterpriseSearch .class );
94101
95102 public static final String FEATURE_NAME = "ent_search" ;
96103
97104 private final boolean enabled ;
98105
99- private final boolean queryRulesEnabled ;
106+ private static final FeatureFlag QUERY_RULES_FEATURE_FLAG = new FeatureFlag ( "query_rules" ) ;
100107
101108 public EnterpriseSearch (Settings settings ) {
102109 this .enabled = XPackSettings .ENTERPRISE_SEARCH_ENABLED .get (settings );
103- this .queryRulesEnabled = XPackSettings .ENTERPRISE_SEARCH_QUERY_RULES_ENABLED .get (settings );
104110 }
105111
106112 protected XPackLicenseState getLicenseState () {
@@ -114,20 +120,29 @@ protected XPackLicenseState getLicenseState() {
114120 if (enabled == false ) {
115121 return List .of (usageAction , infoAction );
116122 }
117- return List .of (
118- new ActionHandler <>(PutAnalyticsCollectionAction .INSTANCE , TransportPutAnalyticsCollectionAction .class ),
119- new ActionHandler <>(GetAnalyticsCollectionAction .INSTANCE , TransportGetAnalyticsCollectionAction .class ),
120- new ActionHandler <>(DeleteAnalyticsCollectionAction .INSTANCE , TransportDeleteAnalyticsCollectionAction .class ),
121- new ActionHandler <>(PostAnalyticsEventAction .INSTANCE , TransportPostAnalyticsEventAction .class ),
122- new ActionHandler <>(DeleteSearchApplicationAction .INSTANCE , TransportDeleteSearchApplicationAction .class ),
123- new ActionHandler <>(GetSearchApplicationAction .INSTANCE , TransportGetSearchApplicationAction .class ),
124- new ActionHandler <>(ListSearchApplicationAction .INSTANCE , TransportListSearchApplicationAction .class ),
125- new ActionHandler <>(PutSearchApplicationAction .INSTANCE , TransportPutSearchApplicationAction .class ),
126- new ActionHandler <>(QuerySearchApplicationAction .INSTANCE , TransportQuerySearchApplicationAction .class ),
127- new ActionHandler <>(RenderSearchApplicationQueryAction .INSTANCE , TransportRenderSearchApplicationQueryAction .class ),
128- usageAction ,
129- infoAction
123+
124+ final List <ActionHandler <? extends ActionRequest , ? extends ActionResponse >> actionHandlers = new ArrayList <>(
125+ List .of (
126+ new ActionHandler <>(PutAnalyticsCollectionAction .INSTANCE , TransportPutAnalyticsCollectionAction .class ),
127+ new ActionHandler <>(GetAnalyticsCollectionAction .INSTANCE , TransportGetAnalyticsCollectionAction .class ),
128+ new ActionHandler <>(DeleteAnalyticsCollectionAction .INSTANCE , TransportDeleteAnalyticsCollectionAction .class ),
129+ new ActionHandler <>(PostAnalyticsEventAction .INSTANCE , TransportPostAnalyticsEventAction .class ),
130+ new ActionHandler <>(DeleteSearchApplicationAction .INSTANCE , TransportDeleteSearchApplicationAction .class ),
131+ new ActionHandler <>(GetSearchApplicationAction .INSTANCE , TransportGetSearchApplicationAction .class ),
132+ new ActionHandler <>(ListSearchApplicationAction .INSTANCE , TransportListSearchApplicationAction .class ),
133+ new ActionHandler <>(PutSearchApplicationAction .INSTANCE , TransportPutSearchApplicationAction .class ),
134+ new ActionHandler <>(QuerySearchApplicationAction .INSTANCE , TransportQuerySearchApplicationAction .class ),
135+ new ActionHandler <>(RenderSearchApplicationQueryAction .INSTANCE , TransportRenderSearchApplicationQueryAction .class ),
136+ usageAction ,
137+ infoAction
138+ )
130139 );
140+
141+ if (QUERY_RULES_FEATURE_FLAG .isEnabled ()) {
142+ actionHandlers .add (new ActionHandler <>(PutQueryRulesetAction .INSTANCE , TransportPutQueryRulesetAction .class ));
143+ }
144+
145+ return Collections .unmodifiableList (actionHandlers );
131146 }
132147
133148 @ Override
@@ -144,18 +159,27 @@ public List<RestHandler> getRestHandlers(
144159 if (enabled == false ) {
145160 return Collections .emptyList ();
146161 }
147- return List .of (
148- new RestGetSearchApplicationAction (getLicenseState ()),
149- new RestListSearchApplicationAction (getLicenseState ()),
150- new RestPutSearchApplicationAction (getLicenseState ()),
151- new RestDeleteSearchApplicationAction (getLicenseState ()),
152- new RestQuerySearchApplicationAction (getLicenseState ()),
153- new RestPutAnalyticsCollectionAction (getLicenseState ()),
154- new RestGetAnalyticsCollectionAction (getLicenseState ()),
155- new RestDeleteAnalyticsCollectionAction (getLicenseState ()),
156- new RestPostAnalyticsEventAction (getLicenseState ()),
157- new RestRenderSearchApplicationQueryAction (getLicenseState ())
162+
163+ final List <RestHandler > restHandlers = new ArrayList <>(
164+ List .of (
165+ new RestPutAnalyticsCollectionAction (getLicenseState ()),
166+ new RestGetAnalyticsCollectionAction (getLicenseState ()),
167+ new RestDeleteAnalyticsCollectionAction (getLicenseState ()),
168+ new RestPostAnalyticsEventAction (getLicenseState ()),
169+ new RestDeleteSearchApplicationAction (getLicenseState ()),
170+ new RestGetSearchApplicationAction (getLicenseState ()),
171+ new RestListSearchApplicationAction (getLicenseState ()),
172+ new RestPutSearchApplicationAction (getLicenseState ()),
173+ new RestQuerySearchApplicationAction (getLicenseState ()),
174+ new RestRenderSearchApplicationQueryAction (getLicenseState ())
175+ )
158176 );
177+
178+ if (QUERY_RULES_FEATURE_FLAG .isEnabled ()) {
179+ restHandlers .add (new RestPutQueryRulesetAction (getLicenseState ()));
180+ }
181+
182+ return Collections .unmodifiableList (restHandlers );
159183 }
160184
161185 @ Override
@@ -192,7 +216,7 @@ public Collection<Object> createComponents(
192216
193217 @ Override
194218 public Collection <SystemIndexDescriptor > getSystemIndexDescriptors (Settings settings ) {
195- if (queryRulesEnabled ) {
219+ if (QUERY_RULES_FEATURE_FLAG . isEnabled () ) {
196220 return Arrays .asList (
197221 SearchApplicationIndexService .getSystemIndexDescriptor (),
198222 QueryRulesIndexService .getSystemIndexDescriptor ()
0 commit comments