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