page.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #pragma once
  2. #include "counters.h"
  3. #include <library/cpp/monlib/encode/format.h>
  4. #include <library/cpp/monlib/service/pages/pre_mon_page.h>
  5. #include <util/generic/ptr.h>
  6. #include <functional>
  7. namespace NMonitoring {
  8. enum class EUnknownGroupPolicy {
  9. Error, // send 404
  10. Ignore, // send 204
  11. };
  12. struct TDynamicCountersPage: public TPreMonPage {
  13. public:
  14. using TOutputCallback = std::function<void()>;
  15. private:
  16. const TIntrusivePtr<TDynamicCounters> Counters;
  17. TOutputCallback OutputCallback;
  18. EUnknownGroupPolicy UnknownGroupPolicy {EUnknownGroupPolicy::Error};
  19. private:
  20. void HandleAbsentSubgroup(IMonHttpRequest& request);
  21. public:
  22. TDynamicCountersPage(const TString& path,
  23. const TString& title,
  24. TIntrusivePtr<TDynamicCounters> counters,
  25. TOutputCallback outputCallback = nullptr)
  26. : TPreMonPage(path, title)
  27. , Counters(counters)
  28. , OutputCallback(outputCallback)
  29. {
  30. }
  31. void Output(NMonitoring::IMonHttpRequest& request) override;
  32. void BeforePre(NMonitoring::IMonHttpRequest& request) override;
  33. void OutputText(IOutputStream& out, NMonitoring::IMonHttpRequest&) override;
  34. /// If set to Error, responds with 404 if the requested subgroup is not found. This is the default.
  35. /// If set to Ignore, responds with 204 if the requested subgroup is not found
  36. void SetUnknownGroupPolicy(EUnknownGroupPolicy value);
  37. protected:
  38. virtual THolder<ICountableConsumer> CreateEncoder(IOutputStream* out, EFormat format, TStringBuf nameLabel, TCountableBase::EVisibility visibility) const;
  39. };
  40. }