NCBI C++ ToolKit
timing.hpp
Go to the documentation of this file.

Go to the SVN repository for this file.

1 #ifndef PUBSEQ_GATEWAY_TIMING__HPP
2 #define PUBSEQ_GATEWAY_TIMING__HPP
3 
4 /* $Id: timing.hpp 103163 2024-09-17 14:35:26Z satskyse $
5  * ===========================================================================
6  *
7  * PUBLIC DOMAIN NOTICE
8  * National Center for Biotechnology Information
9  *
10  * This software/database is a "United States Government Work" under the
11  * terms of the United States Copyright Act. It was written as part of
12  * the author's official duties as a United States Government employee and
13  * thus cannot be copyrighted. This software/database is freely available
14  * to the public for use. The National Library of Medicine and the U.S.
15  * Government have not placed any restriction on its use or reproduction.
16  *
17  * Although all reasonable efforts have been taken to ensure the accuracy
18  * and reliability of the software and data, the NLM and the U.S.
19  * Government do not and cannot warrant the performance or results that
20  * may be obtained by using this software or data. The NLM and the U.S.
21  * Government disclaim all warranties, express or implied, including
22  * warranties of performance, merchantability or fitness for any particular
23  * purpose.
24  *
25  * Please cite the author in any work or product based on this material.
26  *
27  * ===========================================================================
28  *
29  * Authors: Sergey Satskiy
30  *
31  * File Description:
32  * PSG server timing
33  *
34  */
35 
36 #include "pubseq_gateway_types.hpp"
37 #include "psgs_request.hpp"
38 #include "time_series_stat.hpp"
39 #include "ipsgs_processor.hpp"
40 
41 #include <vector>
42 #include <mutex>
43 using namespace std;
44 
45 #include <util/data_histogram.hpp>
48 
49 
50 const unsigned long kMinStatValue = 0;
51 const unsigned long kMaxStatValue = 16 * 1024 * 1024;
52 const unsigned long kNStatBins = 24;
53 const string kStatScaleType = "log";
54 const unsigned long kTickSpan = 10;
55 
56 
57 class IPSGS_Processor;
58 
59 
63 };
64 
66  // Low level: more or less monolit operations
67  eLookupLmdbSi2csi = 0, // (2)
73 
76 
77  eResolutionLmdb, // (2) From request start
78  eResolutionCass, // (2) From cassandra start
79 
80  eResolutionFoundInCassandra, // (5) From cassandra start
81 
86 
91 
92  // The timings below are collected per processor
93 
94  eResolutionError, // (1) From request start
95  eResolutionNotFound, // (1) From request start
96  eResolutionFound, // (1) From request start
97 
100 
103 
104  eOperationLast // Not for using in the processors' code.
105  // It is for allocating an array with an applog identifiers
106 };
107 
108 
109 // Timing is registered in microseconds, i.e. in integers
110 // Technically speaking the counters will be updated from many threads and
111 // something could be missed. However it seems reasonable not to use atomic
112 // counters because:
113 // - even if something is lost it is not a big deal
114 // - the losses are going to be miserable
115 // - atomic counters may introduce some delays
118 
119 
120 // Returns a serialized dictionary
121 CJsonNode SerializeHistogram(const TOnePSGTiming & histogram,
122  const string & name,
123  const string & description,
124  uint64_t max_value);
125 
126 
127 // The base class for all the collected statistics.
128 // Individual type of operations will derive from it so that they will be able
129 // to tune the nins and intervals as they need.
131 {
132  public:
133  CPSGTimingBase() : m_MaxValue(0) {}
134  virtual ~CPSGTimingBase() {}
135 
136  public:
137  void Add(uint64_t mks)
138  {
139  if (m_PSGTiming)
140  m_PSGTiming->Add(mks);
141  m_AvgTimeSeries.Add(mks);
142  if (mks > m_MaxValue)
143  m_MaxValue = mks;
144  }
145 
146  void Reset(void)
147  {
148  if (m_PSGTiming)
149  m_PSGTiming->Reset();
150  m_AvgTimeSeries.Reset();
151  }
152 
153  void Rotate(void)
154  {
155  if (m_PSGTiming)
156  m_PSGTiming->Rotate();
157  }
158 
159  uint64_t GetMaxValue(void) const
160  {
161  return m_MaxValue;
162  }
163 
164  // The Average time series rotate is done once per minute while the
165  // usual rotate is configurable. So there is a separate method to do
166  // that properly.
168  {
169  m_AvgTimeSeries.Rotate();
170  }
171 
173  {
174  if (m_PSGTiming) {
175  // The histogram series counts ticks starting from 0 so even
176  // before the first tick some data may be collected. So +1
177  // is added here.
178  return m_PSGTiming->GetCurrentTick() + 1;
179  }
180  return 0;
181  }
182 
183  // Generic serialization to json
184  virtual CJsonNode SerializeCombined(int most_ancient_time,
185  int most_recent_time,
186  unsigned long tick_span,
187  const string & name,
188  const string & description) const;
189  virtual CJsonNode SerializeSeries(int most_ancient_time,
190  int most_recent_time,
191  unsigned long tick_span,
192  const string & name,
193  const string & description) const;
194  CJsonNode SerializeAvgPerfSeries(const vector<pair<int, int>> & time_series,
195  int most_ancient_time,
196  int most_recent_time,
197  bool loop,
198  size_t current_index)
199  {
200  return m_AvgTimeSeries.Serialize(time_series,
201  most_ancient_time,
202  most_recent_time,
203  loop, current_index);
204  }
205 
206  protected:
207  unique_ptr<TPSGTiming> m_PSGTiming;
208 
209  // Lets to collect average mks required by an operation within 1 min
210  // intervals for a total of 1 month
212 
214 };
215 
216 // At the moment almost all the timing classes are the same
217 // So a macro is used to define them
218 #define TIMING_CLASS(class_name) \
219  class class_name : public CPSGTimingBase \
220  { \
221  public: \
222  class_name(unsigned long min_stat_value, \
223  unsigned long max_stat_value, \
224  unsigned long n_bins, \
225  TOnePSGTiming::EScaleType stat_type, \
226  bool & reset_to_default); \
227  }
228 
229 
230 // LMDB cache operations are supposed to be fast.
231 // There are three tables covered by LMDB cache.
233 
234 // LMDB resolution may involve many tries with the cached tables.
236 
237 // Cassandra operations are supposed to be slower than LMDB.
238 // There are three cassandra tables
240 
241 // Retrieve data from MyNCBI
243 
244 // Cassandra resolution may need a few tries with a two tables
246 
247 // Out of range blob size; should not really happened
249 
250 // Not found blob
252 
253 // Named annotation retrieval
255 
256 // Split history retrieval
258 
259 // Public comment retrieval
261 
262 // Accession version history retrieval
264 
265 // IPG resolve resolution
267 
268 // TSE chunk retrieve
270 
271 // NA resolve for non-cassandra processors
273 
274 // VDB opening timing
276 
277 // SNP PTIS lookup timing
279 
280 // WGS VDB lookup timing
282 
283 // Resolution
285 
286 // Time staying in the backlog
288 
289 // Time staying in the backlog
291 
292 
293 // Blob retrieval depends on a blob size
295 {
296  public:
297  CBlobRetrieveTiming(unsigned long min_blob_size,
298  unsigned long max_blob_size,
299  unsigned long min_stat_value,
300  unsigned long max_stat_value,
301  unsigned long n_bins,
302  TOnePSGTiming::EScaleType stat_type,
303  bool & reset_to_default);
305 
306  public:
307  virtual CJsonNode SerializeCombined(int most_ancient_time,
308  int most_recent_time,
309  unsigned long tick_span,
310  const string & name,
311  const string & description) const;
312  virtual CJsonNode SerializeSeries(int most_ancient_time,
313  int most_recent_time,
314  unsigned long tick_span,
315  const string & name,
316  const string & description) const;
317 
318  unsigned long GetMinBlobSize(void) const
319  { return m_MinBlobSize; }
320 
321  unsigned long GetMaxBlobSize(void) const
322  { return m_MaxBlobSize; }
323 
324  private:
325  unsigned long m_MinBlobSize;
326  unsigned long m_MaxBlobSize;
327 };
328 
329 
330 
332 {
333  public:
334  COperationTiming(unsigned long min_stat_value,
335  unsigned long max_stat_value,
336  unsigned long n_bins,
337  const string & stat_type,
338  unsigned long small_blob_size,
339  const string & only_for_processor,
340  size_t log_timing_threshold,
341  const map<string, size_t> & proc_group_to_index);
343 
344  public:
345  // Blob size is taken into consideration only if
346  // operation == eBlobRetrieve
347  uint64_t Register(IPSGS_Processor * processor,
349  EPSGOperationStatus status,
350  const psg_time_point_t & op_begin_ts,
351  size_t blob_size=0);
352  void RegisterForTimeSeries(CPSGS_Request::EPSGS_Type request_type,
353  CRequestStatus::ECode status);
354  void RegisterProcessorDone(CPSGS_Request::EPSGS_Type request_type,
355  IPSGS_Processor * processor);
356  void RegisterProcessorPerformance(IPSGS_Processor * processor,
357  IPSGS_Processor::EPSGS_Status proc_finish_status);
358 
359  public:
360  void Rotate(void);
361  void RotateRequestStat(void);
362  void RotateAvgPerfTimeSeries(void);
363  void CollectMomentousStat(size_t tcp_conn_count,
364  size_t active_request_count,
365  size_t backlog_count);
366  void Reset(void);
367  CJsonNode Serialize(int most_ancient_time,
368  int most_recent_time,
369  const vector<CTempString> & histogram_names,
370  const vector<pair<int, int>> & time_series,
371  unsigned long tick_span) const;
372 
373  private:
374  bool x_SetupBlobSizeBins(unsigned long min_stat_value,
375  unsigned long max_stat_value,
376  unsigned long n_bins,
377  TOnePSGTiming::EScaleType stat_type,
378  unsigned long small_blob_size);
379  ssize_t x_GetBlobRetrievalBinIndex(unsigned long blob_size);
380  void x_UpdateMaxReqsStat(size_t index,
381  uint64_t & max_requests,
382  uint64_t & max_errors,
383  uint64_t & max_warnings,
384  uint64_t & max_not_found) const;
385 
386  private:
389  string m_TooLongIDs[eOperationLast];
390 
391  // Note: 2 items, found and not found
392  vector<unique_ptr<CLmdbCacheTiming>> m_LookupLmdbSi2csiTiming;
393  vector<unique_ptr<CLmdbCacheTiming>> m_LookupLmdbBioseqInfoTiming;
394  vector<unique_ptr<CLmdbCacheTiming>> m_LookupLmdbBlobPropTiming;
395  vector<unique_ptr<CCassTiming>> m_LookupCassSi2csiTiming;
396  vector<unique_ptr<CCassTiming>> m_LookupCassBioseqInfoTiming;
397  vector<unique_ptr<CCassTiming>> m_LookupCassBlobPropTiming;
398  vector<unique_ptr<CMyNCBITiming>> m_RetrieveMyNCBITiming;
399  unique_ptr<CMyNCBITiming> m_RetrieveMyNCBIErrorTiming;
400 
401  vector<unique_ptr<CLmdbResolutionTiming>> m_ResolutionLmdbTiming;
402  vector<unique_ptr<CCassResolutionTiming>> m_ResolutionCassTiming;
403 
404  vector<vector<unique_ptr<CNARetrieveTiming>>> m_NARetrieveTiming;
405  vector<vector<unique_ptr<CTSEChunkRetrieveTiming>>> m_TSEChunkRetrieveTiming;
406 
407  // It makes sense only for SNP and CDD processors
408  // The space will be reserved for all the processors however:
409  // - only SNP and CDD processor actually make calls for that
410  // - at the time of serializing only SNP and CDD will be sent
411  vector<vector<unique_ptr<CNAResolveTiming>>> m_NAResolveTiming;
412 
413  vector<unique_ptr<CSplitHistoryRetrieveTiming>> m_SplitHistoryRetrieveTiming;
414  vector<unique_ptr<CPublicCommentRetrieveTiming>> m_PublicCommentRetrieveTiming;
415  vector<unique_ptr<CAccVerHistoryRetrieveTiming>> m_AccVerHistoryRetrieveTiming;
416  vector<unique_ptr<CIPGResolveRetrieveTiming>> m_IPGResolveRetrieveTiming;
417  vector<unique_ptr<CVDBOpenTiming>> m_VDBOpenTiming;
418  vector<unique_ptr<CSNPPTISLookupTiming>> m_SNPPTISLookupTiming;
419  vector<unique_ptr<CWGSVDBLookupTiming>> m_WGSVDBLookupTiming;
420 
421  // The index is calculated basing on the blob size
422  vector<vector<unique_ptr<CBlobRetrieveTiming>>> m_BlobRetrieveTiming;
423  vector<unsigned long> m_Ends;
424  vector<unique_ptr<CHugeBlobRetrieveTiming>> m_HugeBlobRetrievalTiming;
425  vector<unique_ptr<CNotFoundBlobRetrieveTiming>> m_NotFoundBlobRetrievalTiming;
426  vector<vector<uint64_t>> m_BlobByteCounters;
427  vector<uint64_t> m_HugeBlobByteCounter;
428 
429  // Resolution timing
430  vector<unique_ptr<CResolutionTiming>> m_ResolutionErrorTiming;
431  vector<unique_ptr<CResolutionTiming>> m_ResolutionNotFoundTiming;
432  vector<unique_ptr<CResolutionTiming>> m_ResolutionFoundTiming;
433 
434  unique_ptr<CBacklogTiming> m_BacklogTiming;
435 
436  // 1, 2, 3, 4, 5+ trips to cassandra
437  vector<unique_ptr<CResolutionTiming>> m_ResolutionFoundCassandraTiming;
438 
439  struct SInfo {
441  string m_Name;
443 
444  // Specific for blob retrieval. They also have a cummulative
445  // counter for the blob bytes sent to the user.
447  string m_CounterId;
450 
451  SInfo() :
452  m_Timing(nullptr),
453  m_Counter(nullptr)
454  {}
455 
457  const string & name, const string & description) :
458  m_Timing(timing), m_Name(name), m_Description(description),
459  m_Counter(nullptr)
460  {}
461 
463  const string & name, const string & description,
464  uint64_t * counter,
465  const string & counter_id,
466  const string & counter_name,
467  const string & counter_description) :
468  m_Timing(timing), m_Name(name), m_Description(description),
469  m_Counter(counter),
470  m_CounterId(counter_id),
471  m_CounterName(counter_name),
472  m_CounterDescription(counter_description)
473  {}
474 
475  SInfo(const SInfo &) = default;
476  SInfo & operator=(const SInfo &) = default;
477  SInfo(SInfo &&) = default;
478  SInfo & operator=(SInfo &&) = default;
479  };
480  map<string, SInfo> m_NamesMap;
481 
483 
484  mutable mutex m_Lock; // reset-rotate-serialize lock
485 
493 
497 
498  // The items below collect only the fact (per processor) that the
499  // processor did something for the request i.e. finished with status
500  // 'Done'
501  vector<unique_ptr<CProcessorRequestTimeSeries>> m_IdGetDoneByProc;
502  vector<unique_ptr<CProcessorRequestTimeSeries>> m_IdGetblobDoneByProc;
503  vector<unique_ptr<CProcessorRequestTimeSeries>> m_IdResolveDoneByProc;
504  vector<unique_ptr<CProcessorRequestTimeSeries>> m_IdGetTSEChunkDoneByProc;
505  vector<unique_ptr<CProcessorRequestTimeSeries>> m_IdGetNADoneByProc;
506 
508 
509  // The first index is a request kind
510  // The second index is a processor kind
511  vector<vector<unique_ptr<CProcessorPerformanceTiming>>> m_DoneProcPerformance;
512  vector<vector<unique_ptr<CProcessorPerformanceTiming>>> m_NotFoundProcPerformance;
513  vector<vector<unique_ptr<CProcessorPerformanceTiming>>> m_TimeoutProcPerformance;
514  vector<vector<unique_ptr<CProcessorPerformanceTiming>>> m_ErrorProcPerformance;
515 };
516 
517 #endif /* PUBSEQ_GATEWAY_TIMING__HPP */
518 
unsigned long GetMaxBlobSize(void) const
Definition: timing.hpp:321
unsigned long m_MinBlobSize
Definition: timing.hpp:325
unsigned long m_MaxBlobSize
Definition: timing.hpp:326
unsigned long GetMinBlobSize(void) const
Definition: timing.hpp:318
A series of same-structured histograms covering logarithmically (base 2) increasing time periods....
CHistogram – collect the distribution of the numerical data samples.
JSON node abstraction.
CMomentousCounterSeries m_BacklogStat
Definition: timing.hpp:496
CMomentousCounterSeries m_TCPConnectionsStat
Definition: timing.hpp:494
unique_ptr< CMyNCBITiming > m_RetrieveMyNCBIErrorTiming
Definition: timing.hpp:399
vector< unique_ptr< CResolutionTiming > > m_ResolutionFoundTiming
Definition: timing.hpp:432
vector< vector< unique_ptr< CBlobRetrieveTiming > > > m_BlobRetrieveTiming
Definition: timing.hpp:422
vector< vector< unique_ptr< CProcessorPerformanceTiming > > > m_NotFoundProcPerformance
Definition: timing.hpp:512
vector< vector< uint64_t > > m_BlobByteCounters
Definition: timing.hpp:426
CRequestTimeSeries m_IdGetblobStat
Definition: timing.hpp:487
vector< unique_ptr< CWGSVDBLookupTiming > > m_WGSVDBLookupTiming
Definition: timing.hpp:419
vector< unique_ptr< CAccVerHistoryRetrieveTiming > > m_AccVerHistoryRetrieveTiming
Definition: timing.hpp:415
vector< unique_ptr< CProcessorRequestTimeSeries > > m_IdGetDoneByProc
Definition: timing.hpp:501
vector< vector< unique_ptr< CNAResolveTiming > > > m_NAResolveTiming
Definition: timing.hpp:411
CRequestTimeSeries m_IpgResolveStat
Definition: timing.hpp:492
vector< unique_ptr< CResolutionTiming > > m_ResolutionNotFoundTiming
Definition: timing.hpp:431
vector< unique_ptr< CCassTiming > > m_LookupCassBioseqInfoTiming
Definition: timing.hpp:396
vector< unique_ptr< CResolutionTiming > > m_ResolutionErrorTiming
Definition: timing.hpp:430
CMonotonicCounterSeries m_ErrorTimeSeries
Definition: timing.hpp:507
vector< unique_ptr< CMyNCBITiming > > m_RetrieveMyNCBITiming
Definition: timing.hpp:398
CRequestTimeSeries m_IdGetTSEChunkStat
Definition: timing.hpp:490
size_t m_LogTimingThresholdMks
Definition: timing.hpp:388
unique_ptr< CBacklogTiming > m_BacklogTiming
Definition: timing.hpp:434
vector< unique_ptr< CLmdbCacheTiming > > m_LookupLmdbBioseqInfoTiming
Definition: timing.hpp:393
vector< unique_ptr< CResolutionTiming > > m_ResolutionFoundCassandraTiming
Definition: timing.hpp:437
CRequestTimeSeries m_IdGetNAStat
Definition: timing.hpp:491
vector< unique_ptr< CSNPPTISLookupTiming > > m_SNPPTISLookupTiming
Definition: timing.hpp:418
vector< unique_ptr< CVDBOpenTiming > > m_VDBOpenTiming
Definition: timing.hpp:417
map< string, SInfo > m_NamesMap
Definition: timing.hpp:480
vector< unique_ptr< CHugeBlobRetrieveTiming > > m_HugeBlobRetrievalTiming
Definition: timing.hpp:424
vector< unique_ptr< CSplitHistoryRetrieveTiming > > m_SplitHistoryRetrieveTiming
Definition: timing.hpp:413
vector< unique_ptr< CNotFoundBlobRetrieveTiming > > m_NotFoundBlobRetrievalTiming
Definition: timing.hpp:425
vector< vector< unique_ptr< CNARetrieveTiming > > > m_NARetrieveTiming
Definition: timing.hpp:404
vector< unique_ptr< CLmdbCacheTiming > > m_LookupLmdbSi2csiTiming
Definition: timing.hpp:392
vector< unique_ptr< CProcessorRequestTimeSeries > > m_IdGetNADoneByProc
Definition: timing.hpp:505
vector< unique_ptr< CPublicCommentRetrieveTiming > > m_PublicCommentRetrieveTiming
Definition: timing.hpp:414
vector< unique_ptr< CCassResolutionTiming > > m_ResolutionCassTiming
Definition: timing.hpp:402
CRequestTimeSeries m_IdAccVerHistStat
Definition: timing.hpp:489
CRequestTimeSeries m_IdResolveStat
Definition: timing.hpp:488
map< string, size_t > m_ProcGroupToIndex
Definition: timing.hpp:482
vector< vector< unique_ptr< CTSEChunkRetrieveTiming > > > m_TSEChunkRetrieveTiming
Definition: timing.hpp:405
vector< unsigned long > m_Ends
Definition: timing.hpp:423
vector< unique_ptr< CLmdbResolutionTiming > > m_ResolutionLmdbTiming
Definition: timing.hpp:401
vector< unique_ptr< CProcessorRequestTimeSeries > > m_IdGetTSEChunkDoneByProc
Definition: timing.hpp:504
string m_OnlyForProcessor
Definition: timing.hpp:387
vector< unique_ptr< CIPGResolveRetrieveTiming > > m_IPGResolveRetrieveTiming
Definition: timing.hpp:416
vector< unique_ptr< CCassTiming > > m_LookupCassBlobPropTiming
Definition: timing.hpp:397
vector< unique_ptr< CCassTiming > > m_LookupCassSi2csiTiming
Definition: timing.hpp:395
vector< unique_ptr< CLmdbCacheTiming > > m_LookupLmdbBlobPropTiming
Definition: timing.hpp:394
vector< vector< unique_ptr< CProcessorPerformanceTiming > > > m_ErrorProcPerformance
Definition: timing.hpp:514
vector< unique_ptr< CProcessorRequestTimeSeries > > m_IdGetblobDoneByProc
Definition: timing.hpp:502
vector< vector< unique_ptr< CProcessorPerformanceTiming > > > m_DoneProcPerformance
Definition: timing.hpp:511
CMomentousCounterSeries m_ActiveRequestsStat
Definition: timing.hpp:495
vector< unique_ptr< CProcessorRequestTimeSeries > > m_IdResolveDoneByProc
Definition: timing.hpp:503
CRequestTimeSeries m_IdGetStat
Definition: timing.hpp:486
vector< vector< unique_ptr< CProcessorPerformanceTiming > > > m_TimeoutProcPerformance
Definition: timing.hpp:513
vector< uint64_t > m_HugeBlobByteCounter
Definition: timing.hpp:427
unique_ptr< TPSGTiming > m_PSGTiming
Definition: timing.hpp:207
CAvgPerformanceSeries m_AvgTimeSeries
Definition: timing.hpp:211
void Add(uint64_t mks)
Definition: timing.hpp:137
void Reset(void)
Definition: timing.hpp:146
virtual ~CPSGTimingBase()
Definition: timing.hpp:134
CJsonNode SerializeAvgPerfSeries(const vector< pair< int, int >> &time_series, int most_ancient_time, int most_recent_time, bool loop, size_t current_index)
Definition: timing.hpp:194
uint64_t GetMaxValue(void) const
Definition: timing.hpp:159
TPSGTiming::TTicks GetNumberOfCoveredTicks(void) const
Definition: timing.hpp:172
void Rotate(void)
Definition: timing.hpp:153
uint64_t m_MaxValue
Definition: timing.hpp:213
void RotateAvgTimeSeries(void)
Definition: timing.hpp:167
Interface class (and self-factory) for request processor objects that can retrieve data from a given ...
EPSGS_Status
The GetStatus() method returns a processor current status.
Frequency histogram for data distribution of the numerical samples.
Uint8 uint64_t
unsigned int TTicks
Type of the unit of time.
EScaleType
Scale type.
operation
Bit operations.
Definition: bmconst.h:191
int ssize_t
Definition: ncbiconf_msvc.h:93
#define nullptr
Definition: ncbimisc.hpp:45
psg_clock_t::time_point psg_time_point_t
SInfo(CPSGTimingBase *timing, const string &name, const string &description, uint64_t *counter, const string &counter_id, const string &counter_name, const string &counter_description)
Definition: timing.hpp:462
SInfo & operator=(SInfo &&)=default
uint64_t * m_Counter
Definition: timing.hpp:446
SInfo(CPSGTimingBase *timing, const string &name, const string &description)
Definition: timing.hpp:456
SInfo(SInfo &&)=default
SInfo(const SInfo &)=default
CPSGTimingBase * m_Timing
Definition: timing.hpp:440
SInfo & operator=(const SInfo &)=default
const unsigned long kNStatBins
Definition: timing.hpp:52
EPSGOperationStatus
Definition: timing.hpp:60
@ eOpStatusFound
Definition: timing.hpp:61
@ eOpStatusNotFound
Definition: timing.hpp:62
const unsigned long kMinStatValue
Definition: timing.hpp:50
#define TIMING_CLASS(class_name)
Definition: timing.hpp:218
const string kStatScaleType
Definition: timing.hpp:53
EPSGOperation
Definition: timing.hpp:65
@ eTseChunkRetrieve
Definition: timing.hpp:101
@ eWGS_VDBLookup
Definition: timing.hpp:90
@ eIPGResolveRetrieve
Definition: timing.hpp:85
@ eResolutionError
Definition: timing.hpp:94
@ eBacklog
Definition: timing.hpp:88
@ eResolutionNotFound
Definition: timing.hpp:95
@ eNAResolve
Definition: timing.hpp:102
@ eSNP_PTISLookup
Definition: timing.hpp:89
@ eResolutionCass
Definition: timing.hpp:78
@ eSplitHistoryRetrieve
Definition: timing.hpp:82
@ eNARetrieve
Definition: timing.hpp:99
@ eResolutionFound
Definition: timing.hpp:96
@ eVDBOpen
Definition: timing.hpp:87
@ eLookupCassBioseqInfo
Definition: timing.hpp:71
@ eAccVerHistRetrieve
Definition: timing.hpp:84
@ eMyNCBIRetrieve
Definition: timing.hpp:74
@ eLookupCassBlobProp
Definition: timing.hpp:72
@ eMyNCBIRetrieveError
Definition: timing.hpp:75
@ eResolutionFoundInCassandra
Definition: timing.hpp:80
@ eLookupLmdbBlobProp
Definition: timing.hpp:69
@ eBlobRetrieve
Definition: timing.hpp:98
@ eLookupLmdbBioseqInfo
Definition: timing.hpp:68
@ eResolutionLmdb
Definition: timing.hpp:77
@ eOperationLast
Definition: timing.hpp:104
@ eLookupLmdbSi2csi
Definition: timing.hpp:67
@ ePublicCommentRetrieve
Definition: timing.hpp:83
@ eLookupCassSi2csi
Definition: timing.hpp:70
const unsigned long kMaxStatValue
Definition: timing.hpp:51
const unsigned long kTickSpan
Definition: timing.hpp:54
CHistogram< uint64_t, uint64_t, uint64_t > TOnePSGTiming
Definition: timing.hpp:116
CJsonNode SerializeHistogram(const TOnePSGTiming &histogram, const string &name, const string &description, uint64_t max_value)
Definition: timing.cpp:58
CHistogramTimeSeries< uint64_t, uint64_t, uint64_t > TPSGTiming
Definition: timing.hpp:117
USING_NCBI_SCOPE
Definition: timing.hpp:47
void Serialize(CNcbiOstream &, const CRawScoreVector< Key, Score > &)
Generics These throw an exception; we must implement serialization for each type.
Modified on Fri Sep 20 14:58:32 2024 by modify_doxy.py rev. 669887