xref: /aosp_15_r20/external/federated-compute/fcp/client/phase_logger.h (revision 14675a029014e728ec732f129a32e299b2da0601)
1*14675a02SAndroid Build Coastguard Worker /*
2*14675a02SAndroid Build Coastguard Worker  * Copyright 2022 Google LLC
3*14675a02SAndroid Build Coastguard Worker  *
4*14675a02SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*14675a02SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*14675a02SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*14675a02SAndroid Build Coastguard Worker  *
8*14675a02SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*14675a02SAndroid Build Coastguard Worker  *
10*14675a02SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*14675a02SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*14675a02SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*14675a02SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*14675a02SAndroid Build Coastguard Worker  * limitations under the License.
15*14675a02SAndroid Build Coastguard Worker  */
16*14675a02SAndroid Build Coastguard Worker #ifndef FCP_CLIENT_PHASE_LOGGER_H_
17*14675a02SAndroid Build Coastguard Worker #define FCP_CLIENT_PHASE_LOGGER_H_
18*14675a02SAndroid Build Coastguard Worker 
19*14675a02SAndroid Build Coastguard Worker #include "absl/strings/string_view.h"
20*14675a02SAndroid Build Coastguard Worker #include "fcp/client/opstats/opstats_logger.h"
21*14675a02SAndroid Build Coastguard Worker #include "fcp/client/stats.h"
22*14675a02SAndroid Build Coastguard Worker #include "fcp/protos/federated_api.pb.h"
23*14675a02SAndroid Build Coastguard Worker 
24*14675a02SAndroid Build Coastguard Worker namespace fcp {
25*14675a02SAndroid Build Coastguard Worker namespace client {
26*14675a02SAndroid Build Coastguard Worker 
27*14675a02SAndroid Build Coastguard Worker class PhaseLogger {
28*14675a02SAndroid Build Coastguard Worker  public:
29*14675a02SAndroid Build Coastguard Worker   virtual ~PhaseLogger() = default;
30*14675a02SAndroid Build Coastguard Worker   virtual void UpdateRetryWindowAndNetworkStats(
31*14675a02SAndroid Build Coastguard Worker       const ::google::internal::federatedml::v2::RetryWindow& retry_window,
32*14675a02SAndroid Build Coastguard Worker       const NetworkStats& network_stats) = 0;
33*14675a02SAndroid Build Coastguard Worker   virtual void SetModelIdentifier(absl::string_view model_identifier) = 0;
34*14675a02SAndroid Build Coastguard Worker 
35*14675a02SAndroid Build Coastguard Worker   // Called when a run was started but immediately aborted.
36*14675a02SAndroid Build Coastguard Worker   virtual void LogTaskNotStarted(absl::string_view error_message) = 0;
37*14675a02SAndroid Build Coastguard Worker   // Called when a run was started but the runtime failed to initialize a
38*14675a02SAndroid Build Coastguard Worker   // noncritical component, and execution continue.
39*14675a02SAndroid Build Coastguard Worker   virtual void LogNonfatalInitializationError(absl::Status error_status) = 0;
40*14675a02SAndroid Build Coastguard Worker   // Called when a run was started but the runtime failed to initialize a
41*14675a02SAndroid Build Coastguard Worker   // component, and execution was halted.
42*14675a02SAndroid Build Coastguard Worker   virtual void LogFatalInitializationError(absl::Status error_status) = 0;
43*14675a02SAndroid Build Coastguard Worker 
44*14675a02SAndroid Build Coastguard Worker   // Eligibility eval check-in phase.
45*14675a02SAndroid Build Coastguard Worker   // Called when an eligibility eval check-in starts.
46*14675a02SAndroid Build Coastguard Worker   virtual void LogEligibilityEvalCheckinStarted() = 0;
47*14675a02SAndroid Build Coastguard Worker   // Called when an IO error is encountered during eligibility eval check-in.
48*14675a02SAndroid Build Coastguard Worker   virtual void LogEligibilityEvalCheckinIOError(
49*14675a02SAndroid Build Coastguard Worker       absl::Status error_status, const NetworkStats& network_stats,
50*14675a02SAndroid Build Coastguard Worker       absl::Time time_before_checkin) = 0;
51*14675a02SAndroid Build Coastguard Worker   // Called when an invalid payload is received from the eligibility eval
52*14675a02SAndroid Build Coastguard Worker   // check-in result.
53*14675a02SAndroid Build Coastguard Worker   virtual void LogEligibilityEvalCheckinInvalidPayloadError(
54*14675a02SAndroid Build Coastguard Worker       absl::string_view error_message, const NetworkStats& network_stats,
55*14675a02SAndroid Build Coastguard Worker       absl::Time time_before_checkin) = 0;
56*14675a02SAndroid Build Coastguard Worker   // Called when the eligibility eval check-in is interrupted by the client.
57*14675a02SAndroid Build Coastguard Worker   virtual void LogEligibilityEvalCheckinClientInterrupted(
58*14675a02SAndroid Build Coastguard Worker       absl::Status error_status, const NetworkStats& network_stats,
59*14675a02SAndroid Build Coastguard Worker       absl::Time time_before_checkin) = 0;
60*14675a02SAndroid Build Coastguard Worker   // Called when the eligibility eval check-in is aborted by the server.
61*14675a02SAndroid Build Coastguard Worker   virtual void LogEligibilityEvalCheckinServerAborted(
62*14675a02SAndroid Build Coastguard Worker       absl::Status error_status, const NetworkStats& network_stats,
63*14675a02SAndroid Build Coastguard Worker       absl::Time time_before_checkin) = 0;
64*14675a02SAndroid Build Coastguard Worker   // Called when eligibility eval is not configured.
65*14675a02SAndroid Build Coastguard Worker   virtual void LogEligibilityEvalNotConfigured(
66*14675a02SAndroid Build Coastguard Worker       const NetworkStats& network_stats, absl::Time time_before_checkin) = 0;
67*14675a02SAndroid Build Coastguard Worker   // Called when eligibility eval check-in request is turned away by the server.
68*14675a02SAndroid Build Coastguard Worker   virtual void LogEligibilityEvalCheckinTurnedAway(
69*14675a02SAndroid Build Coastguard Worker       const NetworkStats& network_stats, absl::Time time_before_checkin) = 0;
70*14675a02SAndroid Build Coastguard Worker   virtual void LogEligibilityEvalCheckinPlanUriReceived(
71*14675a02SAndroid Build Coastguard Worker       const NetworkStats& network_stats, absl::Time time_before_checkin) = 0;
72*14675a02SAndroid Build Coastguard Worker   // Called when a valid eligibility eval plan is received.
73*14675a02SAndroid Build Coastguard Worker   virtual void LogEligibilityEvalCheckinCompleted(
74*14675a02SAndroid Build Coastguard Worker       const NetworkStats& network_stats, absl::Time time_before_checkin,
75*14675a02SAndroid Build Coastguard Worker       absl::Time time_before_plan_download) = 0;
76*14675a02SAndroid Build Coastguard Worker 
77*14675a02SAndroid Build Coastguard Worker   // Eligibility eval computation phase.
78*14675a02SAndroid Build Coastguard Worker   // Called when the eligibility eval computation starts.
79*14675a02SAndroid Build Coastguard Worker   virtual void LogEligibilityEvalComputationStarted() = 0;
80*14675a02SAndroid Build Coastguard Worker   // Called when the input parameters for the eligibility eval task are invalid.
81*14675a02SAndroid Build Coastguard Worker   virtual void LogEligibilityEvalComputationInvalidArgument(
82*14675a02SAndroid Build Coastguard Worker       absl::Status error_status, const ExampleStats& example_stats,
83*14675a02SAndroid Build Coastguard Worker       absl::Time run_plan_start_time) = 0;
84*14675a02SAndroid Build Coastguard Worker   // Called when an example store error happened during eligibility eval
85*14675a02SAndroid Build Coastguard Worker   // computation.
86*14675a02SAndroid Build Coastguard Worker   virtual void LogEligibilityEvalComputationExampleIteratorError(
87*14675a02SAndroid Build Coastguard Worker       absl::Status error_status, const ExampleStats& example_stats,
88*14675a02SAndroid Build Coastguard Worker       absl::Time run_plan_start_time) = 0;
89*14675a02SAndroid Build Coastguard Worker   // Called when a tensorflow error happened during eligibiliity eval
90*14675a02SAndroid Build Coastguard Worker   // computation.
91*14675a02SAndroid Build Coastguard Worker   virtual void LogEligibilityEvalComputationTensorflowError(
92*14675a02SAndroid Build Coastguard Worker       absl::Status error_status, const ExampleStats& example_stats,
93*14675a02SAndroid Build Coastguard Worker       absl::Time run_plan_start_time, absl::Time reference_time) = 0;
94*14675a02SAndroid Build Coastguard Worker   // Called when the eligibility eval computation is interrupted.
95*14675a02SAndroid Build Coastguard Worker   virtual void LogEligibilityEvalComputationInterrupted(
96*14675a02SAndroid Build Coastguard Worker       absl::Status error_status, const ExampleStats& example_stats,
97*14675a02SAndroid Build Coastguard Worker       absl::Time run_plan_start_time, absl::Time reference_time) = 0;
98*14675a02SAndroid Build Coastguard Worker   // Called when the eligibility eval computation is completed.
99*14675a02SAndroid Build Coastguard Worker   virtual void LogEligibilityEvalComputationCompleted(
100*14675a02SAndroid Build Coastguard Worker       const ExampleStats& example_stats, absl::Time run_plan_start_time,
101*14675a02SAndroid Build Coastguard Worker       absl::Time reference_time) = 0;
102*14675a02SAndroid Build Coastguard Worker 
103*14675a02SAndroid Build Coastguard Worker   // Check-in phase.
104*14675a02SAndroid Build Coastguard Worker   // Called when a regular check-in starts.
105*14675a02SAndroid Build Coastguard Worker   virtual void LogCheckinStarted() = 0;
106*14675a02SAndroid Build Coastguard Worker   // Called when an IO error occurred during check-in.
107*14675a02SAndroid Build Coastguard Worker   virtual void LogCheckinIOError(absl::Status error_status,
108*14675a02SAndroid Build Coastguard Worker                                  const NetworkStats& network_stats,
109*14675a02SAndroid Build Coastguard Worker                                  absl::Time time_before_checkin,
110*14675a02SAndroid Build Coastguard Worker                                  absl::Time reference_time) = 0;
111*14675a02SAndroid Build Coastguard Worker   // Called when an invalid payload is received from the check-in result.
112*14675a02SAndroid Build Coastguard Worker   virtual void LogCheckinInvalidPayload(absl::string_view error_message,
113*14675a02SAndroid Build Coastguard Worker                                         const NetworkStats& network_stats,
114*14675a02SAndroid Build Coastguard Worker                                         absl::Time time_before_checkin,
115*14675a02SAndroid Build Coastguard Worker                                         absl::Time reference_time) = 0;
116*14675a02SAndroid Build Coastguard Worker   // Called when check-in is interrupted by the client.
117*14675a02SAndroid Build Coastguard Worker   virtual void LogCheckinClientInterrupted(absl::Status error_status,
118*14675a02SAndroid Build Coastguard Worker                                            const NetworkStats& network_stats,
119*14675a02SAndroid Build Coastguard Worker                                            absl::Time time_before_checkin,
120*14675a02SAndroid Build Coastguard Worker                                            absl::Time reference_time) = 0;
121*14675a02SAndroid Build Coastguard Worker   // Called when check-in is aborted by the server.
122*14675a02SAndroid Build Coastguard Worker   virtual void LogCheckinServerAborted(absl::Status error_status,
123*14675a02SAndroid Build Coastguard Worker                                        const NetworkStats& network_stats,
124*14675a02SAndroid Build Coastguard Worker                                        absl::Time time_before_checkin,
125*14675a02SAndroid Build Coastguard Worker                                        absl::Time reference_time) = 0;
126*14675a02SAndroid Build Coastguard Worker   // Called when the client's check-in request is turned away by the server.
127*14675a02SAndroid Build Coastguard Worker   virtual void LogCheckinTurnedAway(const NetworkStats& network_stats,
128*14675a02SAndroid Build Coastguard Worker                                     absl::Time time_before_checkin,
129*14675a02SAndroid Build Coastguard Worker                                     absl::Time reference_time) = 0;
130*14675a02SAndroid Build Coastguard Worker   virtual void LogCheckinPlanUriReceived(absl::string_view task_name,
131*14675a02SAndroid Build Coastguard Worker                                          const NetworkStats& network_stats,
132*14675a02SAndroid Build Coastguard Worker                                          absl::Time time_before_checkin) = 0;
133*14675a02SAndroid Build Coastguard Worker   // Called when check-in is completed.
134*14675a02SAndroid Build Coastguard Worker   virtual void LogCheckinCompleted(absl::string_view task_name,
135*14675a02SAndroid Build Coastguard Worker                                    const NetworkStats& network_stats,
136*14675a02SAndroid Build Coastguard Worker                                    absl::Time time_before_checkin,
137*14675a02SAndroid Build Coastguard Worker                                    absl::Time time_before_plan_download,
138*14675a02SAndroid Build Coastguard Worker                                    absl::Time reference_time) = 0;
139*14675a02SAndroid Build Coastguard Worker 
140*14675a02SAndroid Build Coastguard Worker   // Computation phase.
141*14675a02SAndroid Build Coastguard Worker   // Called when computation started.
142*14675a02SAndroid Build Coastguard Worker   virtual void LogComputationStarted() = 0;
143*14675a02SAndroid Build Coastguard Worker   // Called when the input parameters are invalid.
144*14675a02SAndroid Build Coastguard Worker   virtual void LogComputationInvalidArgument(
145*14675a02SAndroid Build Coastguard Worker       absl::Status error_status, const ExampleStats& example_stats,
146*14675a02SAndroid Build Coastguard Worker       const NetworkStats& network_stats, absl::Time run_plan_start_time) = 0;
147*14675a02SAndroid Build Coastguard Worker   // Called when an example store error occurred during computation.
148*14675a02SAndroid Build Coastguard Worker   virtual void LogComputationExampleIteratorError(
149*14675a02SAndroid Build Coastguard Worker       absl::Status error_status, const ExampleStats& example_stats,
150*14675a02SAndroid Build Coastguard Worker       const NetworkStats& network_stats, absl::Time run_plan_start_time) = 0;
151*14675a02SAndroid Build Coastguard Worker   // Called when an IO error happened during computation
152*14675a02SAndroid Build Coastguard Worker   virtual void LogComputationIOError(absl::Status error_status,
153*14675a02SAndroid Build Coastguard Worker                                      const ExampleStats& example_stats,
154*14675a02SAndroid Build Coastguard Worker                                      const NetworkStats& network_stats,
155*14675a02SAndroid Build Coastguard Worker                                      absl::Time run_plan_start_time) = 0;
156*14675a02SAndroid Build Coastguard Worker   // Called when a tensorflow error happened during computation.
157*14675a02SAndroid Build Coastguard Worker   virtual void LogComputationTensorflowError(absl::Status error_status,
158*14675a02SAndroid Build Coastguard Worker                                              const ExampleStats& example_stats,
159*14675a02SAndroid Build Coastguard Worker                                              const NetworkStats& network_stats,
160*14675a02SAndroid Build Coastguard Worker                                              absl::Time run_plan_start_time,
161*14675a02SAndroid Build Coastguard Worker                                              absl::Time reference_time) = 0;
162*14675a02SAndroid Build Coastguard Worker   // Called when computation is interrupted.
163*14675a02SAndroid Build Coastguard Worker   virtual void LogComputationInterrupted(absl::Status error_status,
164*14675a02SAndroid Build Coastguard Worker                                          const ExampleStats& example_stats,
165*14675a02SAndroid Build Coastguard Worker                                          const NetworkStats& network_stats,
166*14675a02SAndroid Build Coastguard Worker                                          absl::Time run_plan_start_time,
167*14675a02SAndroid Build Coastguard Worker                                          absl::Time reference_time) = 0;
168*14675a02SAndroid Build Coastguard Worker   // Called when computation is completed.
169*14675a02SAndroid Build Coastguard Worker   virtual void LogComputationCompleted(const ExampleStats& example_stats,
170*14675a02SAndroid Build Coastguard Worker                                        const NetworkStats& network_stats,
171*14675a02SAndroid Build Coastguard Worker                                        absl::Time run_plan_start_time,
172*14675a02SAndroid Build Coastguard Worker                                        absl::Time reference_time) = 0;
173*14675a02SAndroid Build Coastguard Worker 
174*14675a02SAndroid Build Coastguard Worker   // Result upload phase. Result upload only happens when all the previous
175*14675a02SAndroid Build Coastguard Worker   // phases succeed.
176*14675a02SAndroid Build Coastguard Worker   // Called when result upload started.
177*14675a02SAndroid Build Coastguard Worker   virtual absl::Status LogResultUploadStarted() = 0;
178*14675a02SAndroid Build Coastguard Worker   // Called when an IO error occurred during result upload.
179*14675a02SAndroid Build Coastguard Worker   virtual void LogResultUploadIOError(absl::Status error_status,
180*14675a02SAndroid Build Coastguard Worker                                       const NetworkStats& network_stats,
181*14675a02SAndroid Build Coastguard Worker                                       absl::Time time_before_result_upload,
182*14675a02SAndroid Build Coastguard Worker                                       absl::Time reference_time) = 0;
183*14675a02SAndroid Build Coastguard Worker   // Called when the result upload is interrupted by the client.
184*14675a02SAndroid Build Coastguard Worker   virtual void LogResultUploadClientInterrupted(
185*14675a02SAndroid Build Coastguard Worker       absl::Status error_status, const NetworkStats& network_stats,
186*14675a02SAndroid Build Coastguard Worker       absl::Time time_before_result_upload, absl::Time reference_time) = 0;
187*14675a02SAndroid Build Coastguard Worker   // Called when the result upload is aborted by the server.
188*14675a02SAndroid Build Coastguard Worker   virtual void LogResultUploadServerAborted(
189*14675a02SAndroid Build Coastguard Worker       absl::Status error_status, const NetworkStats& network_stats,
190*14675a02SAndroid Build Coastguard Worker       absl::Time time_before_result_upload, absl::Time reference_time) = 0;
191*14675a02SAndroid Build Coastguard Worker   // Called when result upload is completed.
192*14675a02SAndroid Build Coastguard Worker   virtual void LogResultUploadCompleted(const NetworkStats& network_stats,
193*14675a02SAndroid Build Coastguard Worker                                         absl::Time time_before_result_upload,
194*14675a02SAndroid Build Coastguard Worker                                         absl::Time reference_time) = 0;
195*14675a02SAndroid Build Coastguard Worker 
196*14675a02SAndroid Build Coastguard Worker   // Failure upload phase. Failure upload only happens when any of the previous
197*14675a02SAndroid Build Coastguard Worker   // phases failed.
198*14675a02SAndroid Build Coastguard Worker   // Called when failure upload starts.
199*14675a02SAndroid Build Coastguard Worker   virtual absl::Status LogFailureUploadStarted() = 0;
200*14675a02SAndroid Build Coastguard Worker   // Called when an IO error occurred during failure upload.
201*14675a02SAndroid Build Coastguard Worker   virtual void LogFailureUploadIOError(absl::Status error_status,
202*14675a02SAndroid Build Coastguard Worker                                        const NetworkStats& network_stats,
203*14675a02SAndroid Build Coastguard Worker                                        absl::Time time_before_failure_upload,
204*14675a02SAndroid Build Coastguard Worker                                        absl::Time reference_time) = 0;
205*14675a02SAndroid Build Coastguard Worker   // Called when the failure upload is interrupted by the client.
206*14675a02SAndroid Build Coastguard Worker   virtual void LogFailureUploadClientInterrupted(
207*14675a02SAndroid Build Coastguard Worker       absl::Status error_status, const NetworkStats& network_stats,
208*14675a02SAndroid Build Coastguard Worker       absl::Time time_before_failure_upload, absl::Time reference_time) = 0;
209*14675a02SAndroid Build Coastguard Worker   // Called when the failure upload is aborted by the server.
210*14675a02SAndroid Build Coastguard Worker   virtual void LogFailureUploadServerAborted(
211*14675a02SAndroid Build Coastguard Worker       absl::Status error_status, const NetworkStats& network_stats,
212*14675a02SAndroid Build Coastguard Worker       absl::Time time_before_failure_upload, absl::Time reference_time) = 0;
213*14675a02SAndroid Build Coastguard Worker   // Called when the failure upload is completed.
214*14675a02SAndroid Build Coastguard Worker   virtual void LogFailureUploadCompleted(const NetworkStats& network_stats,
215*14675a02SAndroid Build Coastguard Worker                                          absl::Time time_before_failure_upload,
216*14675a02SAndroid Build Coastguard Worker                                          absl::Time reference_time) = 0;
217*14675a02SAndroid Build Coastguard Worker };
218*14675a02SAndroid Build Coastguard Worker 
219*14675a02SAndroid Build Coastguard Worker }  // namespace client
220*14675a02SAndroid Build Coastguard Worker }  // namespace fcp
221*14675a02SAndroid Build Coastguard Worker 
222*14675a02SAndroid Build Coastguard Worker #endif  // FCP_CLIENT_PHASE_LOGGER_H_
223