Bläddra i källkod

new(packages/p): create prometheus-cpp package (#1237)

* new(packages/p): create prometheus-cpp package

Signed-off-by: Leonardo Di Donato <[email protected]>

* update(packages/p/prometheus-cpp): links ordering

Signed-off-by: Leonardo Di Donato <[email protected]>

* Update xmake.lua

Co-authored-by: ruki <[email protected]>
Leo Di Donato 3 år sedan
förälder
incheckning
28116e5fbd
1 ändrade filer med 98 tillägg och 0 borttagningar
  1. 98 0
      packages/p/prometheus-cpp/xmake.lua

+ 98 - 0
packages/p/prometheus-cpp/xmake.lua

@@ -0,0 +1,98 @@
+package("prometheus-cpp")
+    set_homepage("https://github.com/jupp0r/prometheus-cpp")
+    set_description("Prometheus Client Library for Modern C++")
+    set_license("MIT")
+
+    add_urls("https://github.com/jupp0r/prometheus-cpp/archive/refs/tags/$(version).tar.gz",
+             "https://github.com/jupp0r/prometheus-cpp.git")
+    add_versions("v1.0.0", "07018db604ea3e61f5078583e87c80932ea10c300d979061490ee1b7dc8e3a41")
+
+    add_configs("pull",        {description = "Enable Pull.", default = true, type = "boolean"})
+    add_configs("push",        {description = "Enable push.", default = true, type = "boolean"})
+    add_configs("compression", {description = "Enable compression.", default = true, type = "boolean"})
+
+    add_deps("cmake")
+
+    if is_plat("linux") then
+        add_syslinks("pthread")
+    end
+
+    on_load("linux", function (package)
+        if package:config("pull") then
+            package:add("deps", "civetweb v1.15")
+            package:add("links", "prometheus-cpp-pull")
+        end
+        if package:config("push") then
+            package:add("deps", "libcurl")
+            package:add("links", "prometheus-cpp-push")
+        end
+        if package:config("compression") then
+            package:add("deps", "zlib")
+        end
+        package:add("links", "prometheus-cpp-core")
+    end)
+
+    on_install("linux", function (package)
+        local configs = {}
+        for name, enabled in pairs(package:configs()) do
+            if not package:extraconf("configs", name, "builtin") then
+                table.insert(configs, "-DENABLE_" .. name:upper() .. "=" .. (enabled and "ON" or "OFF"))
+            end
+        end
+        table.insert(configs, "-DGENERATE_PKGCONFIG=ON")
+        table.insert(configs, "-DENABLE_TESTING=OFF")
+        table.insert(configs, "-DUSE_THIRDPARTY_LIBRARIES=OFF")
+        table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))
+        table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF"))
+        import("package.tools.cmake").install(package, configs)
+    end)
+
+    on_test("linux", function (package)
+        assert(package:has_cxxincludes("prometheus/counter.h"))
+
+        if package:config("pull") then
+            assert(package:has_cxxincludes("prometheus/exposer.h"))
+            assert(package:check_cxxsnippets({test = [[
+                #include <array>
+                #include <chrono>
+                #include <cstdlib>
+                #include <memory>
+                #include <string>
+                #include <thread>
+
+                void test() {
+                    using namespace prometheus;
+                    Exposer exposer{"127.0.0.1:8080"};
+                    auto registry = std::make_shared<Registry>();
+                    auto& packet_counter = BuildCounter()
+                        .Name("observed_packets_total")
+                        .Help("Number of observed packets")
+                        .Register(*registry);
+                    auto& tcp_rx_counter = packet_counter.Add({{"protocol", "tcp"}, {"direction", "rx"}});
+                    auto& tcp_tx_counter = packet_counter.Add({{"protocol", "tcp"}, {"direction", "tx"}});
+                    auto& udp_rx_counter = packet_counter.Add({{"protocol", "udp"}, {"direction", "rx"}});
+                    auto& udp_tx_counter = packet_counter.Add({{"protocol", "udp"}, {"direction", "tx"}});
+                    auto& http_requests_counter = BuildCounter()
+                        .Name("http_requests_total")
+                        .Help("Number of HTTP requests")
+                        .Register(*registry);
+                    exposer.RegisterCollectable(registry);
+                    for (int i = 0; i < 30; i++) {
+                        std::this_thread::sleep_for(std::chrono::seconds(1));
+                        const auto random_value = std::rand();
+                        if (random_value & 1) tcp_rx_counter.Increment();
+                        if (random_value & 2) tcp_tx_counter.Increment();
+                        if (random_value & 4) udp_rx_counter.Increment();
+                        if (random_value & 8) udp_tx_counter.Increment();
+                        const std::array<std::string, 4> methods = {"GET", "PUT", "POST", "HEAD"};
+                        auto method = methods.at(random_value % methods.size());
+                        http_requests_counter.Add({{"method", method}}).Increment();
+                    }
+                }
+            ]]}, {configs = {languages = "cxx11"}, includes = {"prometheus/counter.h", "prometheus/exposer.h", "prometheus/registry.h"}}))
+        end
+
+        if package:config("push") then
+            assert(package:has_cxxincludes("prometheus/gateway.h"))
+        end
+    end)