@@ -115,8 +115,7 @@ struct THistBase
115115
116116// //////////////////////////////////////////////////////////////////////////////
117117
118- struct TTimeHist
119- : public THistBase<TRequestUsTimeBuckets>
118+ struct TUsTimeHist : public THistBase <TRequestUsTimeBuckets>
120119{
121120 using THistBase::THistBase;
122121
@@ -128,6 +127,101 @@ struct TTimeHist
128127
129128// //////////////////////////////////////////////////////////////////////////////
130129
130+ struct TMsTimeHist : public THistBase <TRequestMsTimeBuckets>
131+ {
132+ using THistBase::THistBase;
133+
134+ void Increment (TDuration requestTime, ui64 count = 1 )
135+ {
136+ THistBase::Increment (requestTime.MicroSeconds () / 1000 ., count);
137+ }
138+ };
139+
140+ // //////////////////////////////////////////////////////////////////////////////
141+
142+ // Allows to use both microseconds and milliseconds for time histograms.
143+ class TCompoundTimeHist
144+ {
145+ private:
146+ std::unique_ptr<TUsTimeHist> UsTimeHist;
147+ std::unique_ptr<TMsTimeHist> MsTimeHist;
148+
149+ public:
150+ TCompoundTimeHist (
151+ const TString& name,
152+ EHistogramCounterOptions counterOptions)
153+ {
154+ const bool useMsUnitsForTimeHistogram =
155+ counterOptions &
156+ EHistogramCounterOption::UseMsUnitsForTimeHistogram;
157+ const bool useUsUnitsForTimeHistogram =
158+ counterOptions &
159+ EHistogramCounterOption::UseUsUnitsForTimeHistogram;
160+ Y_ABORT_UNLESS (
161+ useMsUnitsForTimeHistogram || useUsUnitsForTimeHistogram,
162+ " At least one of the units must be enabled" );
163+ if (useMsUnitsForTimeHistogram) {
164+ MsTimeHist = std::make_unique<TMsTimeHist>(name, counterOptions);
165+ }
166+ if (useUsUnitsForTimeHistogram) {
167+ UsTimeHist = std::make_unique<TUsTimeHist>(name, counterOptions);
168+ }
169+ }
170+ ~TCompoundTimeHist () = default ;
171+
172+ TCompoundTimeHist (const TCompoundTimeHist&) = delete ;
173+ TCompoundTimeHist (TCompoundTimeHist&&) = default ;
174+ TCompoundTimeHist& operator =(const TCompoundTimeHist&) = delete ;
175+ TCompoundTimeHist& operator =(TCompoundTimeHist&&) = default ;
176+
177+ void Increment (TDuration requestTime, ui64 count = 1 )
178+ {
179+ if (MsTimeHist) {
180+ MsTimeHist->Increment (requestTime, count);
181+ }
182+ if (UsTimeHist) {
183+ UsTimeHist->Increment (requestTime, count);
184+ }
185+ }
186+
187+ template <typename ... Args>
188+ void Register (Args&&... args)
189+ {
190+ if (MsTimeHist) {
191+ MsTimeHist->Register (args...);
192+ }
193+ if (UsTimeHist) {
194+ UsTimeHist->Register (std::forward<Args>(args)...);
195+ }
196+ }
197+
198+ [[nodiscard]] TVector<TBucketInfo> GetBuckets () const
199+ {
200+ if (MsTimeHist) {
201+ return MsTimeHist->GetBuckets ();
202+ }
203+ return UsTimeHist->GetBuckets ();
204+ }
205+
206+ [[nodiscard]] const TString& GetUnits () const
207+ {
208+ if (MsTimeHist) {
209+ return MsTimeHist->GetUnits ();
210+ }
211+ return UsTimeHist->GetUnits ();
212+ }
213+
214+ [[nodiscard]] const TString& GetName () const
215+ {
216+ if (MsTimeHist) {
217+ return MsTimeHist->GetName ();
218+ }
219+ return UsTimeHist->GetName ();
220+ }
221+ };
222+
223+ // //////////////////////////////////////////////////////////////////////////////
224+
131225struct TSizeHist
132226 : public THistBase<TKbSizeBuckets>
133227{
@@ -289,19 +383,19 @@ struct TRequestCounters::TStatCounters
289383 TSizeHist SizeHist;
290384 TRequestPercentiles<TSizeHist> SizePercentiles;
291385
292- TTimeHist TimeHist;
293- TTimeHist TimeHistUnaligned;
294- TRequestPercentiles<TTimeHist > TimePercentiles;
386+ TCompoundTimeHist TimeHist;
387+ TCompoundTimeHist TimeHistUnaligned;
388+ TRequestPercentiles<TCompoundTimeHist > TimePercentiles;
295389
296- TTimeHist ExecutionTimeHist;
297- TTimeHist ExecutionTimeHistUnaligned;
298- TRequestPercentiles<TTimeHist > ExecutionTimePercentiles;
390+ TCompoundTimeHist ExecutionTimeHist;
391+ TCompoundTimeHist ExecutionTimeHistUnaligned;
392+ TRequestPercentiles<TCompoundTimeHist > ExecutionTimePercentiles;
299393
300- TTimeHist RequestCompletionTimeHist;
301- TRequestPercentiles<TTimeHist > RequestCompletionTimePercentiles;
394+ TCompoundTimeHist RequestCompletionTimeHist;
395+ TRequestPercentiles<TCompoundTimeHist > RequestCompletionTimePercentiles;
302396
303- TTimeHist PostponedTimeHist;
304- TRequestPercentiles<TTimeHist > PostponedTimePercentiles;
397+ TCompoundTimeHist PostponedTimeHist;
398+ TRequestPercentiles<TCompoundTimeHist > PostponedTimePercentiles;
305399
306400 TMaxCalculator<DEFAULT_BUCKET_COUNT> MaxTimeCalc;
307401 TMaxCalculator<DEFAULT_BUCKET_COUNT> MaxTotalTimeCalc;
0 commit comments