xref: /aosp_15_r20/external/federated-compute/fcp/client/phase_logger_impl.h (revision 14675a029014e728ec732f129a32e299b2da0601)
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