config

package
v0.23.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 24, 2026 License: MIT Imports: 9 Imported by: 0

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

func FindConfigFile(name string, dirs ...string) string

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 配置。

func Load

func Load(path string) (*Config, error)

Load 从配置文件和环境变量加载 Worker 配置(FR-080,见 ADR-020)。

path 为空时在工作目录与 configs/ 下查找 worker.yml(均可选),找不到回退 worker.yaml(FR-224 兼容)。 所有项有合理默认,零配置即可启动;JIANMANAGER_ 前缀环境变量按路径覆盖配置文件值。 enrollment token 经 JIANMANAGER_ENROLL_TOKEN 注入、不从 yaml 读取(一次性凭据不留盘)。

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 LogConfig

type LogConfig struct {
	Level  string `mapstructure:"level"`
	Format string `mapstructure:"format"`
}

LogConfig 日志配置。

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)。

type WSConfig

type WSConfig struct {
	Port int `mapstructure:"port"`
}

WSConfig WebSocket 服务器配置。

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)。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL