reconmesh/worker-sdk
GitHub: reconmesh/worker-sdk
面向 Parabellum 分布式安全侦察平台的 Go 语言 Worker SDK,将任务调度、消息队列、结果去重、可观测性等基础设施统一封装,使安全工具开发者只需实现扫描逻辑即可接入平台。
Stars: 0 | Forks: 0
# worker-sdk
每个 parabellum worker 都会链接的共享 Go 库。它承载了控制平面与 worker 之间的通信契约,以及每个 worker 否则都需要重新实现的运行时基础管道:River 订阅、Postgres 连接池、OpenTelemetry 链路追踪、Prometheus 指标、发现去重和优雅停机。
SDK 的接口设计非常精简:三个接口、少量类型以及一个 `Serve` 入口点。新工具只需实现 `Tool.Run` 并调用 `worker.Serve(t)` 即可。仅此而已。其他一切均被隐藏。
## 版本控制
`worker-sdk` 即为通信契约。破坏性更改会导致每个 worker 大约需要一个 PR 来处理,因此我们对此非常谨慎:
- MINOR / PATCH 版本升级保持完全的向后兼容性。
- MAJOR 版本升级会经历至少一个 MINOR 版本的弃用周期,然后才会移除旧 API。
- SDK 自带 `Version` 常量;控制平面会读取每个 worker 的 `manifest.sdk_version` 以确保兼容性。
有关全组织范围的策略,请参阅 `../platform/docs/VERSIONING.md`。
## 目录结构
```
worker-sdk/
├── worker/ # the public package; what `import` consumers use
│ ├── tool.go # Tool interface, Job, Result, Finding, Asset
│ ├── manifest.go # YAML manifest schema + load/validate (incl. Description)
│ ├── jobargs.go # CascadeArgs wire contract (matches controlplane/jobtype)
│ ├── serve.go # Serve() entry point: River + signal handling
│ ├── runtime.go # PG pool, metrics, OTel, config reload
│ ├── river_adapter.go # River JobArgs binding + worker registration
│ ├── asset_writer.go # UpsertAsset + sync.Pool fingerprint
│ ├── dedup.go # finding hash canonicalization
│ └── once.go # --once / --asset synthetic-job mode (no DB, no River)
├── sdk/ # opt-in helpers; workers import only what they need
│ ├── mtls/ # cleanhttp-style http.Client with mTLS roots
│ ├── httpcache/ # cluster body cache + SourceCache
│ ├── dns/ # dns-service HTTP client wrapper + local fallback
│ ├── secretbox/ # AES-256-GCM decrypt (read-only by design)
│ ├── metrics/ # shared prometheus collectors for the worker side
│ └── tracing/ # OTLP exporter helpers
├── docs/ # ASSETS / FINDINGS / IDEMPOTENCE / CONCURRENCY / MANIFEST
├── grafana/ # ready-to-import dashboards for worker-side metrics
└── CHANGELOG.md
```
`consumes.filter` DSL 在控制平面(cascade 引擎)内部进行解析,而不是在 SDK 中。worker 接收到的都是已经匹配过滤条件 的 job。SDK 仅提供用于声明它的 *manifest* 类型。
## 快速示例
```
package main
import (
"context"
"git.vozec.fr/Parabellum/worker-sdk/worker"
)
type MyTool struct{}
func (t *MyTool) Name() string { return "tm-mytool" }
func (t *MyTool) Run(ctx context.Context, j worker.Job) (worker.Result, error) {
return worker.Result{
Findings: []worker.Finding{{
Kind: "demo",
Severity: worker.SeverityInfo,
Title: "Hello from " + j.Asset.Value,
}},
}, nil
}
func main() { worker.Serve(&MyTool{}) }
```
包含上述主体代码的 worker 将会:
- 读取二进制文件旁的 `manifest.yaml`
- 连接到 Postgres(`PG_DSN` 环境变量)
- 通过 River 订阅其声明的阶段队列
- 在 `:9090` 端口(可配置)暴露 `/metrics` 和 `/healthz` 端点
- 如果设置了 `OTEL_EXPORTER_OTLP_ENDPOINT`,则发出 OTLP 追踪
## 文档
- [`docs/IDEMPOTENCE.md`](./docs/IDEMPOTENCE.md) - 为什么你的 `Run` 必须能够安全地重试,SDK 保证了什么以及你需要负责什么
- [`docs/MANIFEST.md`](./docs/MANIFEST.md) - 详细的 YAML schema
- [`docs/ASSETS.md`](./docs/ASSETS.md) - 类型、各类型的 attrs 约定以及 JSONB 往返 (round-trip) 注意事项
- [`docs/FINDINGS.md`](./docs/FINDINGS.md) - finding 结构、去重哈希 (dedup hash) 算法、类型 + 严重性级别
- [`docs/CONCURRENCY.md`](./docs/CONCURRENCY.md) - 单主机限制、AIMD、熔断器、DNS 侧并发
- [`docs/OBSERVABILITY.md`](./docs/OBSERVABILITY.md) - SDK 暴露的免费指标、自定义指标 + 结构化日志约定
## 更新日志
有关各版本的发布说明,请参阅 [CHANGELOG.md](./CHANGELOG.md)。
## 许可证
MIT。
标签:API集成, DNS解析, GET参数, Go语言, mTLS, OpenTelemetry, PostgreSQL, River, Worker, YAML, 优雅关机, 作业调度, 分布式任务队列, 可观测性, 后端开发, 安全可观测性, 安全库, 开源项目, 接口契约, 控制平面, 插件系统, 数据去重, 无线安全, 日志审计, 测试用例, 渗透测试框架, 版本控制, 用户代理, 程序破解, 网络安全, 网络安全审计, 自定义请求头, 资产同步, 防御, 隐私保护