rule

package
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Oct 16, 2026 License: MIT Imports: 16 Imported by: 0

Documentation

Index

Constants

View Source
const (
	StateRunning  = "running"
	StateDisabled = "disabled"
	StateError    = "error"
)
View Source
const DefaultUDPIdleTimeout = 60 * time.Second

Variables

This section is empty.

Functions

func NewID

func NewID() string

NewID 生成规则 ID。

func SaveRules

func SaveRules(path string, rules []Rule) error

SaveRules 原子写入规则文件(tmp + fsync + rename)。

func WatchRules

func WatchRules(ctx context.Context, path string, onChange func([]Rule))

WatchRules 监听规则文件变化(含原子替换),去抖后重新加载并回调。 加载失败保留旧规则,只记日志。

Types

type ConflictError

type ConflictError struct{ Msg string }

ConflictError 表示规则集冲突(监听端口冲突、ID 重复),API 层映射为 409。

func (*ConflictError) Error

func (e *ConflictError) Error() string

type Manager

type Manager struct {
	// contains filtered or unexported fields
}

Manager 负责规则生命周期编排:校验、diff 应用、目标解析与状态维护。

func NewManager

func NewManager(rs *dockerx.Resolver) *Manager

func (*Manager) Apply

func (m *Manager) Apply(rules []Rule) error

Apply 全量应用一组规则。校验失败时整体拒绝、保持现状。

func (*Manager) ListWithStatus

func (m *Manager) ListWithStatus() []RuleWithStatus

ListWithStatus 返回规则及运行时状态,按规则集顺序。

func (*Manager) Rules

func (m *Manager) Rules() []Rule

Rules 返回当前规则集(有序副本)。

func (*Manager) Shutdown

func (m *Manager) Shutdown()

type Rule

type Rule struct {
	ID            string `json:"id"`
	Name          string `json:"name"`
	Protocol      string `json:"protocol"` // tcp | udp
	ListenAddr    string `json:"listenAddr"`
	ListenPort    int    `json:"listenPort"`
	ContainerName string `json:"containerName"`
	Network       string `json:"network,omitempty"`
	TargetPort    int    `json:"targetPort"`
	Enabled       bool   `json:"enabled"`
	CloseOnSwitch bool   `json:"closeOnSwitch,omitempty"`
	// UDPIdleTimeoutSec UDP 会话空闲超时(秒),0 或缺省为 60。仅 udp 协议有意义。
	UDPIdleTimeoutSec int       `json:"udpIdleTimeoutSec,omitempty"`
	CreatedAt         time.Time `json:"createdAt"`
	UpdatedAt         time.Time `json:"updatedAt"`
}

func LoadRules

func LoadRules(path string) ([]Rule, error)

LoadRules 读取规则文件(JSON 数组)。

func ValidateSet

func ValidateSet(in []Rule) ([]Rule, error)

ValidateSet 校验整组规则:语法、ID 唯一、启用规则间监听端口不冲突。 ID 为空的规则会被自动分配 ID。

func (Rule) Listen

func (r Rule) Listen() string

func (Rule) ListenKey

func (r Rule) ListenKey() string

func (Rule) UDPIdleTimeout

func (r Rule) UDPIdleTimeout() time.Duration

func (Rule) Validate

func (r Rule) Validate() error

type RuleStatus

type RuleStatus struct {
	RuleID        string    `json:"ruleId"`
	State         string    `json:"state"` // running | disabled | error
	ResolvedIP    string    `json:"resolvedIp,omitempty"`
	ContainerID   string    `json:"containerId,omitempty"`
	Network       string    `json:"network,omitempty"`
	ActiveConns   int64     `json:"activeConns"`
	LastError     string    `json:"lastError,omitempty"`
	LastResolveAt time.Time `json:"lastResolveAt,omitempty"`
}

type RuleWithStatus

type RuleWithStatus struct {
	Rule   Rule
	Status RuleStatus
}

RuleWithStatus 规则 + 运行时状态,供 API 返回。

Jump to

Keyboard shortcuts

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