xmake.lua 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package("prometheus-cpp")
  2. set_homepage("https://github.com/jupp0r/prometheus-cpp")
  3. set_description("Prometheus Client Library for Modern C++")
  4. set_license("MIT")
  5. add_urls("https://github.com/jupp0r/prometheus-cpp/archive/refs/tags/$(version).tar.gz",
  6. "https://github.com/jupp0r/prometheus-cpp.git")
  7. add_versions("v1.2.1", "190734c4d8d0644c2af327ff8b5ef86cd7ea9074a48d777112394f558dd014f7")
  8. add_versions("v1.0.0", "07018db604ea3e61f5078583e87c80932ea10c300d979061490ee1b7dc8e3a41")
  9. add_configs("pull", {description = "Enable Pull.", default = true, type = "boolean"})
  10. add_configs("push", {description = "Enable push.", default = true, type = "boolean"})
  11. add_configs("compression", {description = "Enable compression.", default = true, type = "boolean"})
  12. add_deps("cmake")
  13. if is_plat("linux") then
  14. add_syslinks("pthread")
  15. end
  16. on_load("linux", function (package)
  17. if package:config("pull") then
  18. package:add("deps", "civetweb v1.15")
  19. package:add("links", "prometheus-cpp-pull")
  20. end
  21. if package:config("push") then
  22. package:add("deps", "libcurl")
  23. package:add("links", "prometheus-cpp-push")
  24. end
  25. if package:config("compression") then
  26. package:add("deps", "zlib")
  27. end
  28. package:add("links", "prometheus-cpp-core")
  29. end)
  30. on_install("linux", function (package)
  31. local configs = {}
  32. for name, enabled in pairs(package:configs()) do
  33. if not package:extraconf("configs", name, "builtin") then
  34. table.insert(configs, "-DENABLE_" .. name:upper() .. "=" .. (enabled and "ON" or "OFF"))
  35. end
  36. end
  37. table.insert(configs, "-DGENERATE_PKGCONFIG=ON")
  38. table.insert(configs, "-DENABLE_TESTING=OFF")
  39. table.insert(configs, "-DUSE_THIRDPARTY_LIBRARIES=OFF")
  40. table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))
  41. table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF"))
  42. import("package.tools.cmake").install(package, configs)
  43. end)
  44. on_test("linux", function (package)
  45. assert(package:has_cxxincludes("prometheus/counter.h"))
  46. if package:config("pull") then
  47. assert(package:has_cxxincludes("prometheus/exposer.h"))
  48. assert(package:check_cxxsnippets({test = [[
  49. #include <array>
  50. #include <chrono>
  51. #include <cstdlib>
  52. #include <memory>
  53. #include <string>
  54. #include <thread>
  55. void test() {
  56. using namespace prometheus;
  57. Exposer exposer{"127.0.0.1:8080"};
  58. auto registry = std::make_shared<Registry>();
  59. auto& packet_counter = BuildCounter()
  60. .Name("observed_packets_total")
  61. .Help("Number of observed packets")
  62. .Register(*registry);
  63. auto& tcp_rx_counter = packet_counter.Add({{"protocol", "tcp"}, {"direction", "rx"}});
  64. auto& tcp_tx_counter = packet_counter.Add({{"protocol", "tcp"}, {"direction", "tx"}});
  65. auto& udp_rx_counter = packet_counter.Add({{"protocol", "udp"}, {"direction", "rx"}});
  66. auto& udp_tx_counter = packet_counter.Add({{"protocol", "udp"}, {"direction", "tx"}});
  67. auto& http_requests_counter = BuildCounter()
  68. .Name("http_requests_total")
  69. .Help("Number of HTTP requests")
  70. .Register(*registry);
  71. exposer.RegisterCollectable(registry);
  72. for (int i = 0; i < 30; i++) {
  73. std::this_thread::sleep_for(std::chrono::seconds(1));
  74. const auto random_value = std::rand();
  75. if (random_value & 1) tcp_rx_counter.Increment();
  76. if (random_value & 2) tcp_tx_counter.Increment();
  77. if (random_value & 4) udp_rx_counter.Increment();
  78. if (random_value & 8) udp_tx_counter.Increment();
  79. const std::array<std::string, 4> methods = {"GET", "PUT", "POST", "HEAD"};
  80. auto method = methods.at(random_value % methods.size());
  81. http_requests_counter.Add({{"method", method}}).Increment();
  82. }
  83. }
  84. ]]}, {configs = {languages = "cxx11"}, includes = {"prometheus/counter.h", "prometheus/exposer.h", "prometheus/registry.h"}}))
  85. end
  86. if package:config("push") then
  87. assert(package:has_cxxincludes("prometheus/gateway.h"))
  88. end
  89. end)