Documentation
¶
Overview ¶
Package config 提供 Worker Node 的配置加载(worker.yml + 环境变量覆盖)。
配置真正落盘到 worker.yml 而非堆砌 JIANMANAGER_* 环境变量(FR-080,见 ADR-020); 所有项有合理默认,零配置即可启动开发环境。环境变量以 JIANMANAGER_ 前缀按路径覆盖 (如 Control Plane gRPC 地址 → JIANMANAGER_CONTROL_PLANE_GRPC),与 Control Plane 配置惯例一致。
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func FindConfigFile ¶
FindConfigFile 在给定目录中按 .yml 优先、.yaml 兼容回退的顺序查找 <name>.<ext> 配置文件(FR-224)。 返回首个存在的文件路径;都不存在时返回空串(交回 viper 的名字搜索 + 默认值,零配置仍可启动)。
导出以供 worker 入口的「未配置自检」复用(FR-222,见 ADR-051):自检需判断工作目录是否已有 worker.yml/.yaml 配置文件。
func WorkerConfigExists ¶
func WorkerConfigExists() bool
WorkerConfigExists 报告工作目录、可执行文件所在目录或 configs/ 下是否存在 worker 配置文件 (.yml 优先、.yaml 回退)。供 worker 入口未配置自检使用(FR-222,见 ADR-051)。 纳入「exe 旁」搜索(FIX-3):Windows 服务/从别处启动时 cwd 可能非安装目录,配置随二进制仍可被发现。
Types ¶
type ArtifactCacheConfig ¶
type ArtifactCacheConfig struct {
// MaxBytes 缓存容量上限(字节,0=不限)。存入新项后若超限按 lastUsedAt 升序 LRU 淘汰。
// 可经 CP 端点 PUT /nodes/:id/artifact-cache/cap 运行时下发覆盖。
MaxBytes int64 `mapstructure:"max_bytes"`
}
ArtifactCacheConfig 节点本地制品缓存配置(FR-178)。
type BotWorkerConfig ¶ added in v0.23.0
type BotWorkerConfig struct {
// MaxBots 本节点可创建的 Bot 总上限(多分片时为各片之和);0 = 默认 50。
// 大压测(数百 Bot)需调高,同时关注各片 eventLoopP95Ms 与 RSS。
MaxBots int `mapstructure:"max_bots"`
// Shards bot-worker 子进程分片数;0/1 = 单进程(与旧版行为一致)。
//
// 为什么需要分片:单 Node 进程承载 mineflayer bot 有硬上限——实测 272 bot 时
// 主线程持续 99.9% CPU、RSS 9.2GB,事件循环排不上 10s 心跳定时器,stdout 停止输出,
// 控制面据此判定容量快照过期(CAPACITY_SNAPSHOT_STALE)并使可用容量归零,
// 新 bot 再也起不来。按 ~150 bot/片拆分可让每片的心跳保持可调度。
Shards int `mapstructure:"shards"`
}
BotWorkerConfig bot-worker 子进程调参;零值即用内置默认(总容量 50、单进程)。
func (BotWorkerConfig) ApplyEnv ¶ added in v0.23.0
func (c BotWorkerConfig) ApplyEnv() []string
ApplyEnv 把总容量落到子进程环境变量(单进程场景;多分片请用 ApplyEnvForShard)。
func (BotWorkerConfig) ApplyEnvForShard ¶ added in v0.23.0
func (c BotWorkerConfig) ApplyEnvForShard(perShardMax int) []string
ApplyEnvForShard 把「单片容量」落到子进程环境变量(供 bot-worker 读取)。
多分片时每个子进程只应知道自己那一片的上限,否则各片都按总容量准入, 合起来会超出节点可承载量。perShardMax<=0 时回退到总容量(保持旧行为)。
func (BotWorkerConfig) Normalize ¶ added in v0.23.0
func (c BotWorkerConfig) Normalize() BotWorkerConfig
Normalize 归一化分片配置:Shards<=0 视为 1(单进程),MaxBots<=0 用默认 50。
func (BotWorkerConfig) PerShardMaxBots ¶ added in v0.23.0
func (c BotWorkerConfig) PerShardMaxBots() int
PerShardMaxBots 返回每片的容量上限(总容量按片数向上取整均分)。
type Config ¶
type Config struct {
Name string `mapstructure:"name"`
ControlPlane string `mapstructure:"control_plane"`
NodeSecret string `mapstructure:"node_secret"`
WS WSConfig `mapstructure:"ws"`
// DataDir 是项目自包含数据根(默认 ./data,可经 JIANMANAGER_DATA_DIR 覆盖)。
// JDK、服务器工作目录等运行态数据统一收口到此根。参见 ADR-010。
DataDir string `mapstructure:"data_dir"`
// ServersDir 兼容旧配置:显式指定时覆盖数据根派生的 var/servers。
// 留空则由数据根派生为 <DataDir>/var/servers。
ServersDir string `mapstructure:"servers_dir"`
// Host 注册上报给 CP 的本机地址;留空则自动探测出口 IP(供 CP 反向连接)。
Host string `mapstructure:"host"`
// JWTSecret 历史兼容字段;WS 令牌密钥只接受 CP 注册/心跳下发值。
JWTSecret string `mapstructure:"jwt_secret"`
// EnrollToken 一次性 enrollment token 明文(FR-080,见 ADR-020)。
// 仅经环境变量/命令行传入、绝不写入 worker.yml(一次性凭据不留盘);
// 首次注册(无本地身份文件)时携带,注册成功后即作废。
EnrollToken string `mapstructure:"enroll_token"`
Log LogConfig `mapstructure:"log"`
Decompiler DecompilerConfig `mapstructure:"decompiler"`
// Search 全文搜索索引配置(FR-074,见 ADR-017)。
Search SearchConfig `mapstructure:"search"`
// ArtifactCache 节点本地制品缓存配置(FR-178):按 sha256 缓存下载过的核心 jar,建实例命中即秒拷。
ArtifactCache ArtifactCacheConfig `mapstructure:"artifact_cache"`
// Proxy 本节点出站代理配置(FR-174,见 ADR-037):所有出站下载(自更新/JDK/CFR)
// 经此代理。url 留空=直连(沿用环境变量代理)。各 Worker 在不同机器各配各的。
Proxy httpclient.Config `mapstructure:"proxy"`
Heartbeat time.Duration `mapstructure:"-"`
// MemoryGuard 启动内存闸(FR-317):可用内存不足以再塞下待启实例时拒绝启动,
// 防止把节点内存跑满至失去响应。零值即启用 + 默认保留水位 max(512MB, 总内存 10%)。
MemoryGuard MemoryGuardConfig `mapstructure:"memory_guard"`
// BotWorker bot-worker 子进程容量与资源参数(FR-398 压测编排)。
BotWorker BotWorkerConfig `mapstructure:"bot_worker"`
// OrphanScan 运行期周期孤儿扫描(FR-456):把孤儿清理从「仅启动时」升级为「运行期持续兜底」。
OrphanScan OrphanScanConfig `mapstructure:"orphan_scan"`
// HealthScan 运行期实例健康巡检与自愈(FR-459):识别假死、受控自愈、崩溃熔断。
HealthScan HealthScanConfig `mapstructure:"health_scan"`
}
Config Worker Node 配置。
type DecompilerConfig ¶
type DecompilerConfig struct {
// CFRPath 显式 CFR 反编译器 jar 路径(最高优先级,可空)。
// 运维离线放置时直接指定;空则回退内嵌/数据根缓存/按需下载。
CFRPath string `mapstructure:"cfr_path"`
// AllowDownload 是否允许从 Maven Central 按需下载 CFR jar(sha256 pin 校验后落数据根缓存)。
// 默认开启;离线环境可关并用 CFRPath/内嵌。
AllowDownload bool `mapstructure:"allow_download"`
}
DecompilerConfig 反编译能力配置(FR-075,见 ADR-018)。
type HealthScanConfig ¶ added in v0.23.0
type HealthScanConfig struct {
// Disabled 显式关闭周期巡检(默认 false=启用)。应急逃生口:关闭后巡检不产生任何动作(spec §4 验收 9)。
Disabled bool `mapstructure:"disabled"`
// Interval 巡检周期(time.ParseDuration 字符串,默认 30s)。
Interval string `mapstructure:"interval"`
// ProbeKind 响应维度探针类型:tcp(连服务端口)/ http(GET 探针 /metrics);空=auto。
ProbeKind string `mapstructure:"probe_kind"`
// SuspicionThreshold 连续判假死次数阈值(默认 3,越抖越保守)。
SuspicionThreshold int `mapstructure:"suspicion_threshold"`
// Action 假死动作:warn(默认,仅告警 + 审计 + 标原因)/ restart(优雅重启自愈)。
Action string `mapstructure:"action"`
// CircuitBreakerThreshold 滚动窗口内崩溃重启次数阈值(默认 5)。
CircuitBreakerThreshold int `mapstructure:"circuit_breaker_threshold"`
// CircuitBreakerWindow 崩溃熔断滚动窗口(time.ParseDuration 字符串,默认 10m)。
CircuitBreakerWindow string `mapstructure:"circuit_breaker_window"`
// StartupWarmup 启动宽限期(time.ParseDuration 字符串,默认 5m):Start 返回 RUNNING 后
// 这段时间内不做假死判定,避免慢启动 MC 被误判;"-1s"(负值)=关闭宽限。
StartupWarmup string `mapstructure:"startup_warmup"`
// SelfHealMaxRestarts 一熔断窗口内假死自愈重启次数上限(默认 3;0=用默认)。
SelfHealMaxRestarts int `mapstructure:"self_heal_max_restarts"`
}
HealthScanConfig 运行期实例健康巡检与自愈配置(FR-459)。
本地基线(worker.yml)提供逃生口与默认口径;运行期策略(阈值/动作/探针类型)可经 CP 心跳响应下发覆盖(见 internal/worker/heartbeat 的 health policy 应用)。
func (HealthScanConfig) CircuitWindow ¶ added in v0.23.0
func (c HealthScanConfig) CircuitWindow() time.Duration
CircuitWindow 解析熔断滚动窗口:非法/空回退 10m。
func (HealthScanConfig) HealthPolicy ¶ added in v0.23.0
func (c HealthScanConfig) HealthPolicy() process.HealthPolicy
HealthPolicy 把本地配置组装为进程包可用的巡检策略(阈值/窗口未配时交给进程侧归一取默认)。
func (HealthScanConfig) ScanInterval ¶ added in v0.23.0
func (c HealthScanConfig) ScanInterval() time.Duration
ScanInterval 解析巡检周期:非法/空回退 30s(与 spec §2.1 默认一致)。
func (HealthScanConfig) StartupWarmupDuration ¶ added in v0.23.0
func (c HealthScanConfig) StartupWarmupDuration() time.Duration
StartupWarmupDuration 解析启动宽限期:非法/空回退 5m;显式 "-1s"(负值)=关闭宽限(测试/特殊场景)。
type MemoryGuardConfig ¶
type MemoryGuardConfig struct {
// ReserveMB 保留水位(MB);0 = 默认策略 max(512MB, 总内存 10%)。
ReserveMB int64 `mapstructure:"reserve_mb"`
// Disabled 显式关闭守卫(应急逃生口,如误判阻塞关键启动时)。
Disabled bool `mapstructure:"disabled"`
}
MemoryGuardConfig 启动内存闸配置(FR-317)。
type OrphanScanConfig ¶ added in v0.23.0
type OrphanScanConfig struct {
// Disabled 显式关闭周期扫描(默认 false=启用)。应急逃生口。
Disabled bool `mapstructure:"disabled"`
// Interval 扫描周期(time.ParseDuration 字符串,默认 60s)。
Interval string `mapstructure:"interval"`
// DisposePolicy 处置策略:warn(默认,只告警 + 落审计)/ auto(自动清理)。
DisposePolicy string `mapstructure:"dispose_policy"`
}
OrphanScanConfig 运行期周期孤儿扫描配置(FR-456)。
func (OrphanScanConfig) ScanInterval ¶ added in v0.23.0
func (c OrphanScanConfig) ScanInterval() time.Duration
ScanInterval 解析扫描周期:非法/空回退 60s。
type SearchConfig ¶
type SearchConfig struct {
// Ignore 追加到内置默认忽略集的 glob 规则(相对实例工作目录,/ 分隔)。
// 形如 logs/(目录前缀)、*.bak(basename glob)、vendor(路径段)。默认集已覆盖常见
// 日志/缓存/二进制/归档/MC 世界数据,零配置即可用;此处仅做加性补充。
Ignore []string `mapstructure:"ignore"`
}
SearchConfig 全文搜索索引配置(FR-074,见 ADR-017)。
Directories
¶
| Path | Synopsis |
|---|---|
|
Package artifactcache 提供 Worker 节点本地的内容寻址制品缓存(FR-178)。
|
Package artifactcache 提供 Worker 节点本地的内容寻址制品缓存(FR-178)。 |
|
Package botdist 实现 bot-worker dist 的自愈下发(FR-308,见 ADR-072): Worker 启动后经既有 CP gRPC 通道拉取内嵌归档,物化到 <dataroot>/opt/bot-worker/。
|
Package botdist 实现 bot-worker dist 的自愈下发(FR-308,见 ADR-072): Worker 启动后经既有 CP gRPC 通道拉取内嵌归档,物化到 <dataroot>/opt/bot-worker/。 |
|
Package crashreport 组装并上报实例崩溃快照(FR-313): 进程非正常退出时把退出码/信号/时长 + 终端环形缓冲的尾部输出, 经与注册/心跳同信道的 gRPC ReportCrashSnapshot 上报 CP 持久化。
|
Package crashreport 组装并上报实例崩溃快照(FR-313): 进程非正常退出时把退出码/信号/时长 + 终端环形缓冲的尾部输出, 经与注册/心跳同信道的 gRPC ReportCrashSnapshot 上报 CP 持久化。 |
|
Package decompiler 提供 Worker 侧反编译能力:解析/缓存 CFR 反编译器 jar, 并经实例/系统 JDK 受控调起 CFR 把 class/jar 反编译为 Java 源码。
|
Package decompiler 提供 Worker 侧反编译能力:解析/缓存 CFR 反编译器 jar, 并经实例/系统 JDK 受控调起 CFR 把 class/jar 反编译为 Java 源码。 |
|
Package embed 内嵌 Worker 侧可选构建产物(CFR 反编译器 jar 等)。
|
Package embed 内嵌 Worker 侧可选构建产物(CFR 反编译器 jar 等)。 |
|
Package jdk 提供节点本地 JDK 探测、下载安装、删除与注册表管理。
|
Package jdk 提供节点本地 JDK 探测、下载安装、删除与注册表管理。 |
|
Package orphanaudit 把 Worker 侧的孤儿处置/误杀拦截审计经既有 Worker→CP 出站 gRPC 信道 上报 CP 审计库(FR-455/456)。
|
Package orphanaudit 把 Worker 侧的孤儿处置/误杀拦截审计经既有 Worker→CP 出站 gRPC 信道 上报 CP 审计库(FR-455/456)。 |
|
Package pkgmgr 管理节点包管理器偏好(npm/pnpm/yarn,经 corepack 激活)与多 registry 配置(FR-306)。
|
Package pkgmgr 管理节点包管理器偏好(npm/pnpm/yarn,经 corepack 激活)与多 registry 配置(FR-306)。 |
|
Package runtime 提供节点本地非 JDK 运行时(首批 Node.js)的下载安装与托管删除(FR-299)。
|
Package runtime 提供节点本地非 JDK 运行时(首批 Node.js)的下载安装与托管删除(FR-299)。 |
|
Package runtimescan 扫描节点常见安装路径发现运行时候选(FR-298 节点运行时库)。
|
Package runtimescan 扫描节点常见安装路径发现运行时候选(FR-298 节点运行时库)。 |
|
Package search 实现 Worker 本地持久全文索引(FR-074,见 ADR-017)。
|
Package search 实现 Worker 本地持久全文索引(FR-074,见 ADR-017)。 |
|
Package setup 实现 Worker「免配置自启 setup」(FR-222,见 ADR-051)。
|
Package setup 实现 Worker「免配置自启 setup」(FR-222,见 ADR-051)。 |
|
Package storage 提供备份远程存储后端的传输抽象(FR-057)。
|
Package storage 提供备份远程存储后端的传输抽象(FR-057)。 |
|
Package taskreg 提供 Worker 侧「运行中长任务内存登记表」(FR-183,见 ADR-040)。
|
Package taskreg 提供 Worker 侧「运行中长任务内存登记表」(FR-183,见 ADR-040)。 |
|
Package tunnel 维护 Worker→CP 的常驻 gRPC 反向隧道(FR-281,见 ADR-066)。
|
Package tunnel 维护 Worker→CP 的常驻 gRPC 反向隧道(FR-281,见 ADR-066)。 |