Query.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #ifndef QUERY_H
  2. #define QUERY_H
  3. #include "ml-private.h"
  4. namespace ml {
  5. class Query {
  6. public:
  7. Query(RRDDIM *RD) : RD(RD), Initialized(false) {
  8. Ops = RD->tiers[0].query_ops;
  9. }
  10. time_t latestTime() {
  11. return Ops->latest_time_s(RD->tiers[0].db_metric_handle);
  12. }
  13. time_t oldestTime() {
  14. return Ops->oldest_time_s(RD->tiers[0].db_metric_handle);
  15. }
  16. void init(time_t AfterT, time_t BeforeT) {
  17. Ops->init(RD->tiers[0].db_metric_handle, &Handle, AfterT, BeforeT, STORAGE_PRIORITY_BEST_EFFORT);
  18. Initialized = true;
  19. points_read = 0;
  20. }
  21. bool isFinished() {
  22. return Ops->is_finished(&Handle);
  23. }
  24. ~Query() {
  25. if (Initialized) {
  26. Ops->finalize(&Handle);
  27. global_statistics_ml_query_completed(points_read);
  28. points_read = 0;
  29. }
  30. }
  31. std::pair<time_t, CalculatedNumber> nextMetric() {
  32. points_read++;
  33. STORAGE_POINT sp = Ops->next_metric(&Handle);
  34. return {sp.end_time_s, sp.sum / sp.count };
  35. }
  36. private:
  37. RRDDIM *RD;
  38. bool Initialized;
  39. size_t points_read;
  40. struct storage_engine_query_ops *Ops;
  41. struct storage_engine_query_handle Handle;
  42. };
  43. } // namespace ml
  44. #endif /* QUERY_H */