diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 90f2a74..686224f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -2,7 +2,7 @@ name: Release on: push: - tags: ["v*.*.*"] + tags: ["exp-v*.*.*"] env: REGISTRY: ghcr.io @@ -179,6 +179,7 @@ jobs: with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} tags: | + type=raw,value={{tag}} type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} @@ -281,7 +282,7 @@ jobs: ### Quick Install Script ```bash - curl -sSf https://get.warpparse.ai/inst-x.sh | bash -s -- wparse ${{ steps.branch.outputs.branch }} + curl -fsSL https://raw.githubusercontent.com/wp-labs/warp-parse/${{ steps.branch.outputs.branch }}/scripts/install.sh | bash ``` ### Docker Image @@ -363,9 +364,11 @@ jobs: - name: Build assets map and validate run: | set -euo pipefail - jq -c ' + REPO="${{ github.event.repository.name }}" + jq -c --arg prefix "${REPO}-" ' [ .assets[] - | select(.name | test("^warp-parse-v[^/]+-(aarch64-apple-darwin|aarch64-unknown-linux-gnu|x86_64-unknown-linux-gnu)\\.tar\\.gz$")) + | select(.name | startswith($prefix)) + | select(.name | test("-(aarch64-apple-darwin|aarch64-unknown-linux-gnu|x86_64-unknown-linux-gnu)\\.tar\\.gz$")) | { key: (.name | capture("-(?aarch64-apple-darwin|aarch64-unknown-linux-gnu|x86_64-unknown-linux-gnu)\\.tar\\.gz$").target), value: { @@ -376,9 +379,9 @@ jobs: ] | from_entries ' /tmp/release.json > /tmp/assets.json - jq -e ' + jq -e --arg release_url_prefix "https://github.com/${GITHUB_REPOSITORY}/releases/download/" ' (keys | sort) == ["aarch64-apple-darwin","aarch64-unknown-linux-gnu","x86_64-unknown-linux-gnu"] and - (to_entries | all(.value.url | startswith("https://github.com/wp-labs/warp-parse/releases/download/"))) and + (to_entries | all(.value.url | startswith($release_url_prefix))) and (to_entries | all(.value.sha256 | test("^[0-9a-f]{64}$"))) ' /tmp/assets.json >/dev/null @@ -400,8 +403,8 @@ jobs: fi cd wp-install - MANIFEST="updates/${CHANNEL}/manifest.json" - HISTORY="updates/${CHANNEL}/versions/${TAG}.json" + MANIFEST="updates-exp/${CHANNEL}/manifest.json" + HISTORY="updates-exp/${CHANNEL}/versions/${TAG}.json" mkdir -p "$(dirname "$MANIFEST")" "$(dirname "$HISTORY")" jq -n \ @@ -428,7 +431,7 @@ jobs: cd wp-install git config user.name "github-actions[bot]" git config user.email "41898282+github-actions[bot]@users.noreply.github.com" - git add updates + git add updates-exp if git diff --cached --quiet; then echo "no manifest changes" exit 0 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f463048..b957867 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -106,7 +106,7 @@ cargo build --no-default-features --features core --release ./target/release/wpgen --help # Run the project manager -./target/release/wproj --help +./target/release/wpadm --help # Run the recovery tool ./target/release/wprescue --help @@ -475,7 +475,7 @@ cargo build --no-default-features --features core --release ./target/release/wpgen --help # 运行项目管理工具 -./target/release/wproj --help +./target/release/wpadm --help # 运行恢复工具 ./target/release/wprescue --help diff --git a/Cargo.lock b/Cargo.lock index c4c5e16..b1a0d18 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -156,7 +156,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "smallvec", - "socket2 0.6.4", + "socket2 0.6.5", "time", "tracing", "url", @@ -918,9 +918,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.12.3" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cee35f73844aa3014bb606320a6c1f010249dbdf43342fe54b5a4f6a8ed4b79" +checksum = "1f7dc094d718f2e1c1559ad110e27eeaae14a5465d3d56dd6dbd793079fbd530" dependencies = [ "memchr", ] @@ -2335,9 +2335,9 @@ dependencies = [ [[package]] name = "http-body" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" dependencies = [ "bytes", "http 1.4.2", @@ -2345,9 +2345,9 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +checksum = "e9f41fd6a08e4d4ec69df65976da761afd5ad5e58a9d4acb46bd1c953a9e3ff2" dependencies = [ "bytes", "futures-core", @@ -2437,7 +2437,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.4", + "socket2 0.6.5", "system-configuration", "tokio", "tower-service", @@ -2959,6 +2959,16 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "libloading" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +dependencies = [ + "cfg-if", + "windows-link", +] + [[package]] name = "libm" version = "0.2.16" @@ -3193,9 +3203,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" +checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" dependencies = [ "libc", "log", @@ -4191,7 +4201,7 @@ dependencies = [ "quinn-udp", "rustc-hash", "rustls", - "socket2 0.6.4", + "socket2 0.6.5", "thiserror 2.0.18", "tokio", "tracing", @@ -4230,7 +4240,7 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.6.4", + "socket2 0.6.5", "tracing", "windows-sys 0.61.2", ] @@ -4609,9 +4619,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.41" +version = "0.23.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" +checksum = "3c54fcab019b409d04215d3a17cb438fd7fbf192ee61461f20f4fe18704bc138" dependencies = [ "aws-lc-rs", "log", @@ -5038,15 +5048,15 @@ dependencies = [ [[package]] name = "simd-adler32" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" [[package]] name = "simd_cesu8" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94f90157bb87cddf702797c5dadfa0be7d266cdf49e22da2fcaa32eff75b2c33" +checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520" dependencies = [ "rustc_version", "simdutf8", @@ -5101,9 +5111,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" dependencies = [ "libc", "windows-sys 0.61.2", @@ -5111,9 +5121,9 @@ dependencies = [ [[package]] name = "spin" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e" dependencies = [ "lock_api", ] @@ -5544,9 +5554,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.118" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" dependencies = [ "proc-macro2", "quote", @@ -5786,7 +5796,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.4", + "socket2 0.6.5", "tokio-macros", "windows-sys 0.61.2", ] @@ -5855,9 +5865,9 @@ dependencies = [ [[package]] name = "toml" -version = "1.1.2+spec-1.1.0" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" +checksum = "53c96ecdfa941c8fc4fcaed14f99ada8ebed502eef533015095a07e3301d4c3c" dependencies = [ "indexmap", "serde_core", @@ -5879,9 +5889,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.12+spec-1.1.0" +version = "0.25.13+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" +checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b" dependencies = [ "indexmap", "toml_datetime", @@ -5900,9 +5910,9 @@ dependencies = [ [[package]] name = "toml_writer" -version = "1.1.1+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" [[package]] name = "tower" @@ -6106,9 +6116,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.23.4" +version = "1.23.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf80a72845275afea99e7f2b434723d3bc7e38470fcd1c7ed39a599c73319a53" +checksum = "ea5fab0d6c3c01ae70085a09cb03d4c7a1d6314e2b3e075392783396d724ca0a" dependencies = [ "getrandom 0.4.3", "js-sys", @@ -6149,7 +6159,7 @@ dependencies = [ [[package]] name = "warp-parse" -version = "0.25.8" +version = "0.25.8-E3" dependencies = [ "anyhow", "chrono", @@ -6186,6 +6196,7 @@ dependencies = [ "wp-config", "wp-connector-api 0.10.1", "wp-connectors", + "wp-connectors-labs", "wp-engine", "wp-error", "wp-knowledge", @@ -6649,9 +6660,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" dependencies = [ "memchr", ] @@ -6817,8 +6828,8 @@ dependencies = [ [[package]] name = "wp-connectors" -version = "0.17.0" -source = "git+https://github.com/wp-labs/wp-connectors?tag=v0.17.0#8adc119c74ad8d920004654f29696fed01b93f31" +version = "0.17.1" +source = "git+https://github.com/wp-labs/wp-connectors?tag=v0.17.1#ac321ccadae1b3bd2181d1d088700f1b9d9d9b93" dependencies = [ "actix-web", "anyhow", @@ -6843,7 +6854,7 @@ dependencies = [ "sea-orm", "serde", "serde_json", - "socket2 0.6.4", + "socket2 0.6.5", "sqlx 0.9.0", "strum 0.28.0", "sysinfo", @@ -6863,6 +6874,32 @@ dependencies = [ "wp-specs", ] +[[package]] +name = "wp-connectors-labs" +version = "0.1.12" +source = "git+https://github.com/wp-labs/wp-connectors-labs.git?tag=v0.1.12#851970ae6ef63ae7f34a8c86ca60cba1c3aa89c7" +dependencies = [ + "async-trait", + "bytes", + "chrono", + "educe 0.6.0", + "hex", + "libloading", + "log", + "orion-error", + "orion_conf", + "serde", + "serde_json", + "socket2 0.6.5", + "thiserror 2.0.18", + "tokio", + "wp-conf-base", + "wp-connector-api 0.11.2", + "wp-data-fmt", + "wp-log", + "wp-model-core", +] + [[package]] name = "wp-core-connectors" version = "0.7.0" @@ -6885,7 +6922,7 @@ dependencies = [ "orion-error", "orion_conf", "serde_json", - "socket2 0.6.4", + "socket2 0.6.5", "thiserror 2.0.18", "tokio", "toml", @@ -6976,7 +7013,7 @@ dependencies = [ "serde_json", "shadow-rs", "smol_str", - "socket2 0.6.4", + "socket2 0.6.5", "strfmt", "sysinfo", "thiserror 2.0.18", @@ -7446,9 +7483,9 @@ dependencies = [ [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" [[package]] name = "zstd" diff --git a/Cargo.toml b/Cargo.toml index d848405..7390da1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ # Binary applications for data parsing and processing: # - wparse: 主解析引擎 # - wpgen: 规则生成工具 -# - wproj: 项目管理工具 +# - wpadm: 项目管理工具 # - wprescue: 数据恢复工具 # # Feature flags: @@ -16,7 +16,7 @@ [package] name = "warp-parse" -version = "0.25.8" # @gxl:set(version) +version = "0.25.8-E3" # @gxl:set(version) edition = "2021" rust-version = "1.75" authors = ["Warp Parse Team"] @@ -92,12 +92,15 @@ default = ["community"] core = [] # --- Community Edition (default) --- -community = ["core", "wp-connectors"] +community = ["core", "wp-connectors", "labs"] + +# --- Labs (experimental connectors) --- +labs = ["wp-connectors-labs"] # --- Enterprise --- # --- Convenience --- -all = ["community"] +all = ["community", "labs"] # --- Testing (cfg gates) --- sys_test = [] @@ -195,13 +198,14 @@ wp-proj = { package = "wp-proj", git = "https://github.com/wp-labs/w # @gxl:end(remote_motor) wp-self-update = "0.3" -wp-connectors = { git = "https://github.com/wp-labs/wp-connectors", tag = "v0.17.0", optional = true } - +wp-connectors = { git = "https://github.com/wp-labs/wp-connectors", tag = "v0.17.1", optional = true } +wp-connectors-labs = { git = "https://github.com/wp-labs/wp-connectors-labs.git", tag = "v0.1.12", optional = true, features = ["dmdb", "udp"] } +# wp-connectors-labs = {package = "wp-connectors-labs", path = "../wp-connectors-exp", optional = true, features = ["dmdb", "udp"] } # @gxl:block(local_motor) -#wp-engine = { path = "../wp-motor" } -#wp-config = { path = "../wp-motor/crates/wp-config" } -#wp-cli-core = { path = "../wp-motor/crates/wp-cli-core" } -#wp-proj = { path = "../wp-motor/crates/wp-proj" } +# wp-engine = { path = "../wp-motor" } +# wp-config = { path = "../wp-motor/crates/wp-config" } +# wp-cli-core = { path = "../wp-motor/crates/wp-cli-core" } +# wp-proj = { path = "../wp-motor/crates/wp-proj" } # @gxl:end(local_motor) # wp-enterprise = { path = "../wp-enterprise" } diff --git a/README.md b/README.md index 0e9f49f..447bde6 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ Warp Parse is a high-performance Rust ETL engine built for observability, securi - **🚀 Extreme throughput:** EPS (Events Per Second) significantly surpasses Vector across multiple scenarios, with 2~6x performance advantages in core scenarios like fixed rate and large logs (see [Performance Report](https://github.com/wp-labs/wp-examples/tree/main/benchmark/report)). - **📝 Readable rules:** Self-developed WPL (Parse DSL) + OML (Transform DSL) offer far superior readability and maintainability compared to regular expressions and Lua scripts. - **🔌 Unified connectors:** Built on standardized `wp-connector-api` interface design, enabling community developers to rapidly extend multi-source log connector ecosystem. -- **🛠️ Ops friendly:** Single binary deployment with full configuration-based management; includes `wproj`, `wpgen`, `wprescue` tool suite to reduce operational costs. +- **🛠️ Ops friendly:** Single binary deployment with full configuration-based management; includes `wpadm`, `wpgen`, `wprescue` tool suite to reduce operational costs. - **🧠 Knowledge transformation:** Built-in in-memory database supports real-time SQL queries for log data field enrichment and correlation analysis. - **🎯 Data routing:** Flexible routing based on rule engine and transformation models, supporting multi-path data replication, precise filtering, and target distribution. @@ -54,8 +54,8 @@ curl -sSf https://get.warpparse.ai/inst-x.sh | bash -s -- wp-skills Warp Parse currently supports runtime admin operations in daemon mode only. - Usage guide: [docs/ENGINE_ADMIN_USAGE.md](docs/ENGINE_ADMIN_USAGE.md) -- Status query: `cargo run --bin wproj -- engine status --work-root .` -- Reload trigger: `cargo run --bin wproj -- engine reload --work-root . --reason "manual reload"` +- Status query: `cargo run --bin wpadm -- engine status --work-root .` +- Reload trigger: `cargo run --bin wpadm -- engine reload --work-root . --reason "manual reload"` To enable the admin API, configure `[admin_api]` in `conf/wparse.toml`, create `${HOME}/.warp_parse/admin_api.token`, and start: @@ -102,7 +102,7 @@ For details, please refer to the [LICENSE](LICENSE) file in the repository root. - **🚀 极致吞吐:** 多场景下 EPS(事件处理速率)全面超越 Vector,固定速率/大日志等核心场景性能优势达 2~6 倍(详见[性能测试报告](https://github.com/wp-labs/wp-examples/tree/main/benchmark/report))。 - **📝 规则易编写:** 自研 WPL(解析 DSL)+ OML(转换 DSL),可读性、可维护性远超正则表达式与 Lua 脚本。 - **🔌 连接器统一:** 基于 `wp-connector-api` 标准化接口设计,支持社区开发者快速扩展多源日志连接器生态。 -- **🛠️ 运维友好:** 单二进制文件部署,全配置化管理;配套 `wproj`、`wpgen`、`wprescue` 工具套件,降低运维成本。 +- **🛠️ 运维友好:** 单二进制文件部署,全配置化管理;配套 `wpadm`、`wpgen`、`wprescue` 工具套件,降低运维成本。 - **🧠 知识转换:** 内置内存数据库支持 SQL 实时查询,实现日志数据字段富化与关联分析。 - **🎯 数据路由:** 基于规则引擎与转换模型的灵活路由,支持多路数据复制、精准过滤与目标分发。 diff --git a/_gal/adm.gxl b/_gal/adm.gxl index 57797ff..18cbc50 100644 --- a/_gal/adm.gxl +++ b/_gal/adm.gxl @@ -8,11 +8,18 @@ mod envs { mod main : ver_adm { #[auto_load(entry)] - flow _entry : ver.use { + flow _entry | ver.use { + gx.sn( file: "./exp_sn.txt"); } #[auto_load(exit)] flow _set_ver | ver.syn_file { + VERSION = "${VERSION}-E${SN}"; SYN_FILE= "${ENV_ROOT}/Cargo.toml"; + gx.echo ("syn cargo file"); + } + + flow up_sn { + gx.sn( file: "./exp_sn.txt", action : "add"); } } diff --git a/_gal/vfm.gxl b/_gal/vfm.gxl index 95a7c5c..1c2ce48 100644 --- a/_gal/vfm.gxl +++ b/_gal/vfm.gxl @@ -10,18 +10,21 @@ mod sys_ver_adm { #[usage(desp="add tag by version ")] flow tag_stable { gx.ver ( file : "${GXL_START_ROOT}/version.txt" , inc : "null" ); - gx.cmd ( "git tag v${VERSION}" ); + gx.sn( file: "./exp_sn.txt"); + gx.cmd ( "git tag exp-v${VERSION}-${SN}" ); gx.cmd ( "git push --tags" ); } flow tag_beta{ gx.ver ( file : "${GXL_START_ROOT}/version.txt" , inc : "null" ); - gx.cmd ( "git tag v${VERSION}-beta" ); + gx.sn( file: "./exp_sn.txt"); + gx.cmd ( "git tag exp-v${VERSION}-${SN}-beta" ); gx.cmd ( "git push --tags" ); } flow tag_alpha{ gx.ver ( file : "${GXL_START_ROOT}/version.txt" , inc : "null" ); - gx.cmd ( "git tag v${VERSION}-alpha" ); + gx.sn( file: "./exp_sn.txt"); + gx.cmd ( "git tag exp-v${VERSION}-${SN}-alpha" ); gx.cmd ( "git push --tags" ); } } diff --git a/docker/Dockerfile b/docker/Dockerfile index 57fde0f..3810771 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -10,7 +10,9 @@ LABEL org.opencontainers.image.source="https://github.com/wp-labs/warp-parse" LABEL org.opencontainers.image.description="High-performance flow data parsing and processing system" LABEL org.opencontainers.image.licenses="ELv2" -# Install runtime dependencies +# 安装运行时依赖。 +# 其中 unixODBC 运行时用于 DMDB connector 在启动时通过 libloading 加载 ODBC Driver Manager。 +# 达梦运行时还会按库名查找 `libodbc.so` / `libodbcinst.so`,这里在镜像内补齐无版本软链。 RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ libssl3t64 \ @@ -18,6 +20,17 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ zlib1g \ libsasl2-2 \ libzstd1 \ + libodbc2 \ + libodbcinst2 \ + unixodbc \ + odbcinst \ + libltdl7 \ + && ODBC_SO="$(find /usr/lib -path '*/libodbc.so.2' | head -n1)" \ + && test -n "$ODBC_SO" \ + && ln -sf "$(basename "$ODBC_SO")" "$(dirname "$ODBC_SO")/libodbc.so" \ + && ODBCINST_SO="$(find /usr/lib -path '*/libodbcinst.so.2' | head -n1)" \ + && test -n "$ODBCINST_SO" \ + && ln -sf "$(basename "$ODBCINST_SO")" "$(dirname "$ODBCINST_SO")/libodbcinst.so" \ && rm -rf /var/lib/apt/lists/* \ && useradd -r -s /bin/false wparse diff --git a/exp_sn.txt b/exp_sn.txt new file mode 100644 index 0000000..e440e5c --- /dev/null +++ b/exp_sn.txt @@ -0,0 +1 @@ +3 \ No newline at end of file diff --git a/src/admin_api.rs b/src/admin_api.rs index 9a19ab3..9ff8125 100644 --- a/src/admin_api.rs +++ b/src/admin_api.rs @@ -191,10 +191,10 @@ fn load_config(work_root: &Path, dict: &EnvDict) -> RunResult &'static str { +pub fn features_list() -> String { + let mut features = String::new(); if cfg!(feature = "wp-connectors") { - "community (kafka,mysql,postgres,clickhouse,elasticsearch,prometheus,victorialogs,victoriametrics,doris,http,count)" + features.push_str("community (kafka,mysql,postgres,clickhouse,elasticsearch,prometheus,victorialogs,victoriametrics,doris,http,count,udp) "); } else { - "core" + features.push_str("core "); + } + + if cfg!(feature = "wp-connectors-labs") { + features.push_str("labs (dmdb)"); } + features }