1 /* 2 * Copyright 2022 Google LLC 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 #ifndef FCP_CLIENT_PHASE_LOGGER_IMPL_H_ 17 #define FCP_CLIENT_PHASE_LOGGER_IMPL_H_ 18 19 #include <string> 20 21 #include "absl/strings/string_view.h" 22 #include "fcp/client/event_publisher.h" 23 #include "fcp/client/flags.h" 24 #include "fcp/client/log_manager.h" 25 #include "fcp/client/opstats/opstats_logger.h" 26 #include "fcp/client/phase_logger.h" 27 #include "fcp/protos/federated_api.pb.h" 28 29 namespace fcp { 30 namespace client { 31 32 class PhaseLoggerImpl : public PhaseLogger { 33 public: PhaseLoggerImpl(EventPublisher * event_publisher,opstats::OpStatsLogger * opstats_logger,LogManager * log_manager,const Flags * flags)34 PhaseLoggerImpl(EventPublisher* event_publisher, 35 opstats::OpStatsLogger* opstats_logger, 36 LogManager* log_manager, const Flags* flags) 37 : event_publisher_(event_publisher), 38 opstats_logger_(opstats_logger), 39 log_manager_(log_manager), 40 log_tensorflow_error_messages_(flags->log_tensorflow_error_messages()) { 41 } 42 43 void UpdateRetryWindowAndNetworkStats( 44 const ::google::internal::federatedml::v2::RetryWindow& retry_window, 45 const NetworkStats& network_stats) override; 46 void SetModelIdentifier(absl::string_view model_identifier) override; 47 void LogTaskNotStarted(absl::string_view error_message) override; 48 void LogNonfatalInitializationError(absl::Status error_status) override; 49 void LogFatalInitializationError(absl::Status error_status) override; 50 51 // Eligibility eval check-in phase. 52 void LogEligibilityEvalCheckinStarted() override; 53 void LogEligibilityEvalCheckinIOError( 54 absl::Status error_status, const NetworkStats& network_stats, 55 absl::Time time_before_checkin) override; 56 void LogEligibilityEvalCheckinInvalidPayloadError( 57 absl::string_view error_message, const NetworkStats& network_stats, 58 absl::Time time_before_checkin) override; 59 void LogEligibilityEvalCheckinClientInterrupted( 60 absl::Status error_status, const NetworkStats& network_stats, 61 absl::Time time_before_checkin) override; 62 void LogEligibilityEvalCheckinServerAborted( 63 absl::Status error_status, const NetworkStats& network_stats, 64 absl::Time time_before_checkin) override; 65 void LogEligibilityEvalNotConfigured(const NetworkStats& network_stats, 66 absl::Time time_before_checkin) override; 67 void LogEligibilityEvalCheckinTurnedAway( 68 const NetworkStats& network_stats, 69 absl::Time time_before_checkin) override; 70 void LogEligibilityEvalCheckinPlanUriReceived( 71 const NetworkStats& network_stats, 72 absl::Time time_before_checkin) override; 73 void LogEligibilityEvalCheckinCompleted( 74 const NetworkStats& network_stats, absl::Time time_before_checkin, 75 absl::Time time_before_plan_download) override; 76 77 // Eligibility eval computation phase. 78 void LogEligibilityEvalComputationStarted() override; 79 void LogEligibilityEvalComputationInvalidArgument( 80 absl::Status error_status, const ExampleStats& example_stats, 81 absl::Time run_plan_start_time) override; 82 void LogEligibilityEvalComputationExampleIteratorError( 83 absl::Status error_status, const ExampleStats& example_stats, 84 absl::Time run_plan_start_time) override; 85 void LogEligibilityEvalComputationTensorflowError( 86 absl::Status error_status, const ExampleStats& example_stats, 87 absl::Time run_plan_start_time, absl::Time reference_time) override; 88 void LogEligibilityEvalComputationInterrupted( 89 absl::Status error_status, const ExampleStats& example_stats, 90 absl::Time run_plan_start_time, absl::Time reference_time) override; 91 void LogEligibilityEvalComputationCompleted( 92 const ExampleStats& example_stats, absl::Time run_plan_start_time, 93 absl::Time reference_time) override; 94 95 // Check-in phase. 96 void LogCheckinStarted() override; 97 void LogCheckinIOError(absl::Status error_status, 98 const NetworkStats& network_stats, 99 absl::Time time_before_checkin, 100 absl::Time reference_time) override; 101 void LogCheckinInvalidPayload(absl::string_view error_message, 102 const NetworkStats& network_stats, 103 absl::Time time_before_checkin, 104 absl::Time reference_time) override; 105 void LogCheckinClientInterrupted(absl::Status error_status, 106 const NetworkStats& network_stats, 107 absl::Time time_before_checkin, 108 absl::Time reference_time) override; 109 void LogCheckinServerAborted(absl::Status error_status, 110 const NetworkStats& network_stats, 111 absl::Time time_before_checkin, 112 absl::Time reference_time) override; 113 void LogCheckinTurnedAway(const NetworkStats& network_stats, 114 absl::Time time_before_checkin, 115 absl::Time reference_time) override; 116 void LogCheckinPlanUriReceived(absl::string_view task_name, 117 const NetworkStats& network_stats, 118 absl::Time time_before_checkin) override; 119 void LogCheckinCompleted(absl::string_view task_name, 120 const NetworkStats& network_stats, 121 absl::Time time_before_checkin, 122 absl::Time time_before_plan_download, 123 absl::Time reference_time) override; 124 125 // Computation phase. 126 void LogComputationStarted() override; 127 void LogComputationInvalidArgument(absl::Status error_status, 128 const ExampleStats& example_stats, 129 const NetworkStats& network_stats, 130 absl::Time run_plan_start_time) override; 131 void LogComputationExampleIteratorError( 132 absl::Status error_status, const ExampleStats& example_stats, 133 const NetworkStats& network_stats, 134 absl::Time run_plan_start_time) override; 135 void LogComputationIOError(absl::Status error_status, 136 const ExampleStats& example_stats, 137 const NetworkStats& network_stats, 138 absl::Time run_plan_start_time) override; 139 void LogComputationTensorflowError(absl::Status error_status, 140 const ExampleStats& example_stats, 141 const NetworkStats& network_stats, 142 absl::Time run_plan_start_time, 143 absl::Time reference_time) override; 144 void LogComputationInterrupted(absl::Status error_status, 145 const ExampleStats& example_stats, 146 const NetworkStats& network_stats, 147 absl::Time run_plan_start_time, 148 absl::Time reference_time) override; 149 void LogComputationCompleted(const ExampleStats& example_stats, 150 const NetworkStats& network_stats, 151 absl::Time run_plan_start_time, 152 absl::Time reference_time) override; 153 154 absl::Status LogResultUploadStarted() override; 155 void LogResultUploadIOError(absl::Status error_status, 156 const NetworkStats& network_stats, 157 absl::Time time_before_result_upload, 158 absl::Time reference_time) override; 159 void LogResultUploadClientInterrupted(absl::Status error_status, 160 const NetworkStats& network_stats, 161 absl::Time time_before_result_upload, 162 absl::Time reference_time) override; 163 void LogResultUploadServerAborted(absl::Status error_status, 164 const NetworkStats& network_stats, 165 absl::Time time_before_result_upload, 166 absl::Time reference_time) override; 167 void LogResultUploadCompleted(const NetworkStats& network_stats, 168 absl::Time time_before_result_upload, 169 absl::Time reference_time) override; 170 171 // Failure upload phase. 172 absl::Status LogFailureUploadStarted() override; 173 void LogFailureUploadIOError(absl::Status error_status, 174 const NetworkStats& network_stats, 175 absl::Time time_before_failure_upload, 176 absl::Time reference_time) override; 177 void LogFailureUploadClientInterrupted(absl::Status error_status, 178 const NetworkStats& network_stats, 179 absl::Time time_before_failure_upload, 180 absl::Time reference_time) override; 181 void LogFailureUploadServerAborted(absl::Status error_status, 182 const NetworkStats& network_stats, 183 absl::Time time_before_failure_upload, 184 absl::Time reference_time) override; 185 void LogFailureUploadCompleted(const NetworkStats& network_stats, 186 absl::Time time_before_failure_upload, 187 absl::Time reference_time) override; 188 189 private: 190 void LogTimeSince(HistogramCounters histogram_counter, 191 absl::Time reference_time); 192 void LogEligibilityEvalCheckinLatency(absl::Time time_before_checkin); 193 void LogEligibilityEvalComputationLatency(absl::Time run_plan_start_time, 194 absl::Time reference_time); 195 void LogCheckinLatency(absl::Time time_before_checkin, 196 absl::Time reference_time); 197 void LogComputationLatency(absl::Time run_plan_start_time, 198 absl::Time reference_time); 199 void LogReportLatency(absl::Time time_before_report, 200 absl::Time reference_time); 201 std::string GetErrorMessage(absl::Status error_status, 202 absl::string_view error_prefix, 203 bool keep_error_message); 204 205 EventPublisher* event_publisher_; 206 opstats::OpStatsLogger* opstats_logger_; 207 LogManager* log_manager_; 208 const bool log_tensorflow_error_messages_; 209 }; 210 211 } // namespace client 212 } // namespace fcp 213 214 #endif // FCP_CLIENT_PHASE_LOGGER_IMPL_H_ 215