Query.h 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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(RD->tiers[0]->db_metric_handle);
  12. }
  13. time_t oldestTime() {
  14. return Ops->oldest_time(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);
  18. Initialized = true;
  19. }
  20. bool isFinished() {
  21. return Ops->is_finished(&Handle);
  22. }
  23. ~Query() {
  24. if (Initialized)
  25. Ops->finalize(&Handle);
  26. }
  27. std::pair<time_t, CalculatedNumber> nextMetric() {
  28. STORAGE_POINT sp = Ops->next_metric(&Handle);
  29. return { sp.start_time, sp.sum / sp.count };
  30. }
  31. private:
  32. RRDDIM *RD;
  33. bool Initialized;
  34. struct storage_engine_query_ops *Ops;
  35. struct storage_engine_query_handle Handle;
  36. };
  37. } // namespace ml
  38. #endif /* QUERY_H */