2020import org .elasticsearch .common .util .Maps ;
2121import org .elasticsearch .env .Environment ;
2222import org .elasticsearch .license .XPackLicenseState ;
23+ import org .elasticsearch .logging .LogManager ;
24+ import org .elasticsearch .logging .Logger ;
2325import org .elasticsearch .protocol .xpack .XPackUsageRequest ;
2426import org .elasticsearch .tasks .Task ;
2527import org .elasticsearch .threadpool .ThreadPool ;
6668
6769public class MachineLearningUsageTransportAction extends XPackUsageFeatureTransportAction {
6870
71+ private static final Logger logger = LogManager .getLogger (MachineLearningUsageTransportAction .class );
72+
6973 private final Client client ;
7074 private final XPackLicenseState licenseState ;
7175 private final JobManagerHolder jobManagerHolder ;
@@ -124,8 +128,8 @@ protected void masterOperation(
124128 int nodeCount = mlNodeCount (state );
125129
126130 // Step 5. return final ML usage
127- ActionListener <Map <String , Object >> inferenceUsageListener = ActionListener .wrap (inferenceUsage -> {
128- listener .onResponse (
131+ ActionListener <Map <String , Object >> inferenceUsageListener = ActionListener .wrap (
132+ inferenceUsage -> listener .onResponse (
129133 new XPackUsageFeatureResponse (
130134 new MachineLearningFeatureSetUsage (
131135 MachineLearningField .ML_API_FEATURE .checkWithoutTracking (licenseState ),
@@ -137,45 +141,76 @@ protected void masterOperation(
137141 nodeCount
138142 )
139143 )
140- );
141- }, listener ::onFailure );
144+ ),
145+ e -> {
146+ logger .warn ("Failed to get inference usage to include in ML usage" , e );
147+ listener .onResponse (
148+ new XPackUsageFeatureResponse (
149+ new MachineLearningFeatureSetUsage (
150+ MachineLearningField .ML_API_FEATURE .checkWithoutTracking (licenseState ),
151+ enabled ,
152+ jobsUsage ,
153+ datafeedsUsage ,
154+ analyticsUsage ,
155+ Collections .emptyMap (),
156+ nodeCount
157+ )
158+ )
159+ );
160+ }
161+ );
142162
143163 // Step 4. Extract usage from data frame analytics configs and then get inference usage
144164 ActionListener <GetDataFrameAnalyticsAction .Response > dataframeAnalyticsListener = ActionListener .wrap (response -> {
145165 addDataFrameAnalyticsUsage (response , analyticsUsage );
146166 addInferenceUsage (inferenceUsageListener );
147- }, listener ::onFailure );
167+ }, e -> {
168+ logger .warn ("Failed to get data frame analytics configs to include in ML usage" , e );
169+ addInferenceUsage (inferenceUsageListener );
170+ });
148171
149172 // Step 3. Extract usage from data frame analytics stats and then request data frame analytics configs
173+ GetDataFrameAnalyticsAction .Request getDfaRequest = new GetDataFrameAnalyticsAction .Request (Metadata .ALL );
174+ getDfaRequest .setPageParams (new PageParams (0 , 10_000 ));
150175 ActionListener <GetDataFrameAnalyticsStatsAction .Response > dataframeAnalyticsStatsListener = ActionListener .wrap (response -> {
151176 addDataFrameAnalyticsStatsUsage (response , analyticsUsage );
152- GetDataFrameAnalyticsAction .Request getDfaRequest = new GetDataFrameAnalyticsAction .Request (Metadata .ALL );
153- getDfaRequest .setPageParams (new PageParams (0 , 10_000 ));
154177 client .execute (GetDataFrameAnalyticsAction .INSTANCE , getDfaRequest , dataframeAnalyticsListener );
155- }, listener ::onFailure );
178+ }, e -> {
179+ logger .warn ("Failed to get data frame analytics stats to include in ML usage" , e );
180+ client .execute (GetDataFrameAnalyticsAction .INSTANCE , getDfaRequest , dataframeAnalyticsListener );
181+ });
156182
157183 // Step 2. Extract usage from datafeeds stats and then request stats for data frame analytics
184+ GetDataFrameAnalyticsStatsAction .Request dataframeAnalyticsStatsRequest = new GetDataFrameAnalyticsStatsAction .Request (
185+ Metadata .ALL
186+ );
187+ dataframeAnalyticsStatsRequest .setPageParams (new PageParams (0 , 10_000 ));
158188 ActionListener <GetDatafeedsStatsAction .Response > datafeedStatsListener = ActionListener .wrap (response -> {
159189 addDatafeedsUsage (response , datafeedsUsage );
160- GetDataFrameAnalyticsStatsAction .Request dataframeAnalyticsStatsRequest = new GetDataFrameAnalyticsStatsAction .Request (
161- Metadata .ALL
162- );
163- dataframeAnalyticsStatsRequest .setPageParams (new PageParams (0 , 10_000 ));
164190 client .execute (GetDataFrameAnalyticsStatsAction .INSTANCE , dataframeAnalyticsStatsRequest , dataframeAnalyticsStatsListener );
165- }, listener ::onFailure );
191+ }, e -> {
192+ logger .warn ("Failed to get datafeed stats to include in ML usage" , e );
193+ client .execute (GetDataFrameAnalyticsStatsAction .INSTANCE , dataframeAnalyticsStatsRequest , dataframeAnalyticsStatsListener );
194+ });
166195
167196 // Step 1. Extract usage from jobs stats and then request stats for all datafeeds
168- GetJobsStatsAction .Request jobStatsRequest = new GetJobsStatsAction .Request (Metadata .ALL );
197+ GetDatafeedsStatsAction .Request datafeedStatsRequest = new GetDatafeedsStatsAction .Request (Metadata .ALL );
169198 ActionListener <GetJobsStatsAction .Response > jobStatsListener = ActionListener .wrap (
170199 response -> jobManagerHolder .getJobManager ().expandJobs (Metadata .ALL , true , ActionListener .wrap (jobs -> {
171200 addJobsUsage (response , jobs .results (), jobsUsage );
172- GetDatafeedsStatsAction .Request datafeedStatsRequest = new GetDatafeedsStatsAction .Request (Metadata .ALL );
173201 client .execute (GetDatafeedsStatsAction .INSTANCE , datafeedStatsRequest , datafeedStatsListener );
174- }, listener ::onFailure )),
175- listener ::onFailure
202+ }, e -> {
203+ logger .warn ("Failed to get job configs to include in ML usage" , e );
204+ client .execute (GetDatafeedsStatsAction .INSTANCE , datafeedStatsRequest , datafeedStatsListener );
205+ })),
206+ e -> {
207+ logger .warn ("Failed to get job stats to include in ML usage" , e );
208+ client .execute (GetDatafeedsStatsAction .INSTANCE , datafeedStatsRequest , datafeedStatsListener );
209+ }
176210 );
177211
178212 // Step 0. Kick off the chain of callbacks by requesting jobs stats
213+ GetJobsStatsAction .Request jobStatsRequest = new GetJobsStatsAction .Request (Metadata .ALL );
179214 client .execute (GetJobsStatsAction .INSTANCE , jobStatsRequest , jobStatsListener );
180215 }
181216
0 commit comments