core

package
v0.0.8 Latest Latest
Warning

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

Go to latest
Published: Jul 10, 2026 License: MIT Imports: 34 Imported by: 0

Documentation

Overview

ConnectionController is a read-only observability module for connection health. It classifies errors, records read/connection metrics, and exposes health signals.

Reconnect/dial MUST NOT be triggered through ConnectionController. All reconnect behavior goes exclusively through driver.ConnectionManager (EnsureConnected / ScheduleReconnect).

Index

Constants

View Source
const (
	SLAScanLagP95MsThreshold   = 100.0
	SLAScanDriftAvgMsThreshold = 50.0
	SLAScanMissDeadlineMax     = 0
	SLACircuitBreakerRejectMax = 0
)

SLA 告警阈值(运维对齐用,可通过 diagnostics API 的 sla_warnings 查看)。

View Source
const (
	SoakSampleInterval         = 15 * time.Second
	SoakMaxTrendSamples        = 480
	SoakBacklogExcessThreshold = 10 // max allowed backlog above registered task count
	SoakPointSuccessRateGate   = 0.99
)
View Source
const DefaultMaxHistoryRecords = 1000
View Source
const VirtualShadowPrefix = "virtual-"

Variables

View Source
var (
	ErrActorStopped          = errors.New("actor is stopped")
	ErrMailboxFull           = errors.New("actor mailbox is full")
	ErrInvalidMessage        = errors.New("invalid message type")
	ErrDeviceNotFound        = errors.New("device not found")
	ErrPointNotFound         = errors.New("point not found")
	ErrChannelNotFound       = errors.New("channel not found")
	ErrTimeout               = errors.New("operation timeout")
	ErrInvalidState          = errors.New("invalid state transition")
	ErrConnectionUnavailable = errors.New("connection unavailable")
	ErrCircuitOpen           = errors.New("circuit breaker open")
)
View Source
var (
	ErrDriverNotFound = errors.New("driver not found")
	ErrQueueFull      = errors.New("queue full")
	ErrRateLimited    = errors.New("rate limited")
)
View Source
var DLT645StandardPointTemplates = []DLT645PointTemplate{

	{ID: "combined_active_energy", Name: "当前组合有功总电能", DataID: "00-00-00-00", DataType: "uint64", Scale: 0.01, Unit: "kWh"},
	{ID: "last_settlement_combined_active_energy", Name: "上1结算日组合有功总电能", DataID: "00-00-00-01", DataType: "uint64", Scale: 0.01, Unit: "kWh"},
	{ID: "associated_total_energy", Name: "当前关联总电能", DataID: "00-80-00-00", DataType: "uint64", Scale: 0.01, Unit: "kWh"},
	{ID: "last_settlement_a_forward_active_energy", Name: "上1结算日A相正向有功电能", DataID: "00-15-00-01", DataType: "uint64", Scale: 0.01, Unit: "kWh"},
	{ID: "forward_active_energy", Name: "当前正向有功总电能", DataID: "00-01-00-00", DataType: "uint64", Scale: 0.01, Unit: "kWh"},
	{ID: "last_settlement_forward_active_energy", Name: "上1结算日正向有功总电能", DataID: "00-01-00-01", DataType: "uint64", Scale: 0.01, Unit: "kWh"},
	{ID: "reverse_active_energy", Name: "当前反向有功总电能", DataID: "00-02-00-00", DataType: "uint64", Scale: 0.01, Unit: "kWh"},
	{ID: "combined_reactive1_energy", Name: "当前组合无功1总电能", DataID: "00-03-00-00", DataType: "uint64", Scale: 0.01, Unit: "kvarh"},
	{ID: "combined_reactive2_energy", Name: "当前组合无功2总电能", DataID: "00-04-00-00", DataType: "uint64", Scale: 0.01, Unit: "kvarh"},
	{ID: "forward_reactive_energy", Name: "当前正向无功总电能", DataID: "00-05-00-00", DataType: "uint64", Scale: 0.01, Unit: "kvarh"},
	{ID: "reverse_reactive_energy", Name: "当前反向无功总电能", DataID: "00-06-00-00", DataType: "uint64", Scale: 0.01, Unit: "kvarh"},
	{ID: "a_phase_forward_active_energy", Name: "当前A相正向有功电能", DataID: "00-15-00-00", DataType: "uint64", Scale: 0.01, Unit: "kWh"},
	{ID: "a_phase_reverse_active_energy", Name: "当前A相反向有功电能", DataID: "00-16-00-00", DataType: "uint64", Scale: 0.01, Unit: "kWh"},
	{ID: "b_phase_forward_active_energy", Name: "当前B相正向有功电能", DataID: "00-29-00-00", DataType: "uint64", Scale: 0.01, Unit: "kWh"},
	{ID: "b_phase_reverse_active_energy", Name: "当前B相反向有功电能", DataID: "00-2A-00-00", DataType: "uint64", Scale: 0.01, Unit: "kWh"},
	{ID: "c_phase_forward_active_energy", Name: "当前C相正向有功电能", DataID: "00-3D-00-00", DataType: "uint64", Scale: 0.01, Unit: "kWh"},
	{ID: "c_phase_reverse_active_energy", Name: "当前C相反向有功电能", DataID: "00-3E-00-00", DataType: "uint64", Scale: 0.01, Unit: "kWh"},

	{ID: "forward_active_max_demand", Name: "当前正向有功最大需量", DataID: "01-01-00-00", DataType: "uint64", Scale: 0.0001, Unit: "kW"},
	{ID: "forward_active_max_demand_time", Name: "当前正向有功最大需量发生时间", DataID: "01-01-00-00#T", DataType: "string", Scale: 0, Unit: ""},
	{ID: "reverse_active_max_demand", Name: "当前反向有功最大需量", DataID: "01-02-00-00", DataType: "uint64", Scale: 0.0001, Unit: "kW"},
	{ID: "reverse_active_max_demand_time", Name: "当前反向有功最大需量发生时间", DataID: "01-02-00-00#T", DataType: "string", Scale: 0, Unit: ""},

	{ID: "a_phase_voltage", Name: "A相电压", DataID: "02-01-01-00", DataType: "uint16", Scale: 0.1, Unit: "V"},
	{ID: "b_phase_voltage", Name: "B相电压", DataID: "02-01-02-00", DataType: "uint16", Scale: 0.1, Unit: "V"},
	{ID: "c_phase_voltage", Name: "C相电压", DataID: "02-01-03-00", DataType: "uint16", Scale: 0.1, Unit: "V"},
	{ID: "a_phase_current", Name: "A相电流", DataID: "02-02-01-00", DataType: "uint32", Scale: 0.001, Unit: "A"},
	{ID: "b_phase_current", Name: "B相电流", DataID: "02-02-02-00", DataType: "uint32", Scale: 0.001, Unit: "A"},
	{ID: "c_phase_current", Name: "C相电流", DataID: "02-02-03-00", DataType: "uint32", Scale: 0.001, Unit: "A"},
	{ID: "total_active_power", Name: "瞬时总有功功率", DataID: "02-03-00-00", DataType: "int32", Scale: 0.0001, Unit: "kW"},
	{ID: "a_phase_active_power", Name: "A相有功功率", DataID: "02-03-01-00", DataType: "int32", Scale: 0.1, Unit: "kW"},
	{ID: "b_phase_active_power", Name: "B相有功功率", DataID: "02-03-02-00", DataType: "int32", Scale: 0.0001, Unit: "kW"},
	{ID: "c_phase_active_power", Name: "C相有功功率", DataID: "02-03-03-00", DataType: "int32", Scale: 0.0001, Unit: "kW"},
	{ID: "total_reactive_power", Name: "瞬时总无功功率", DataID: "02-04-00-00", DataType: "int32", Scale: 0.0001, Unit: "kvar"},
	{ID: "total_apparent_power", Name: "瞬时总视在功率", DataID: "02-05-00-00", DataType: "int32", Scale: 0.0001, Unit: "kVA"},
	{ID: "total_power_factor", Name: "总功率因数", DataID: "02-06-00-00", DataType: "uint16", Scale: 0.001, Unit: ""},
	{ID: "a_phase_power_factor", Name: "A相功率因数", DataID: "02-06-01-00", DataType: "uint16", Scale: 0.001, Unit: ""},
	{ID: "b_phase_power_factor", Name: "B相功率因数", DataID: "02-06-02-00", DataType: "uint16", Scale: 0.001, Unit: ""},
	{ID: "c_phase_power_factor", Name: "C相功率因数", DataID: "02-06-03-00", DataType: "uint16", Scale: 0.001, Unit: ""},
	{ID: "a_phase_voltage_harmonic_1", Name: "A相电压1次谐波含量", DataID: "02-0A-01-01", DataType: "uint16", Scale: 0.01, Unit: "%"},
	{ID: "b_phase_voltage_harmonic_1", Name: "B相电压1次谐波含量", DataID: "02-0A-02-01", DataType: "uint16", Scale: 0.01, Unit: "%"},
	{ID: "c_phase_voltage_harmonic_1", Name: "C相电压1次谐波含量", DataID: "02-0A-03-01", DataType: "uint16", Scale: 0.01, Unit: "%"},
	{ID: "a_phase_current_harmonic_1", Name: "A相电流1次谐波含量", DataID: "02-0B-01-01", DataType: "uint16", Scale: 0.01, Unit: "%"},
	{ID: "neutral_current", Name: "零线电流", DataID: "02-80-00-01", DataType: "uint16", Scale: 0.01, Unit: "A"},
	{ID: "grid_frequency", Name: "电网频率", DataID: "02-80-00-02", DataType: "uint16", Scale: 0.01, Unit: "Hz"},
	{ID: "current_active_demand", Name: "当前有功需量", DataID: "02-80-00-04", DataType: "int32", Scale: 0.0001, Unit: "kW"},

	{ID: "date_time", Name: "日期及时间", DataID: "04-00-01-01", DataType: "string", Scale: 0, Unit: ""},
	{ID: "max_demand_period", Name: "最大需量周期", DataID: "04-00-01-03", DataType: "uint16", Scale: 0, Unit: "min"},
	{ID: "slip_time", Name: "滑差时间", DataID: "04-00-01-04", DataType: "uint16", Scale: 0, Unit: "min"},
	{ID: "tariff_count", Name: "费率数", DataID: "04-00-02-04", DataType: "uint8", Scale: 0, Unit: ""},
	{ID: "communication_address", Name: "通信地址", DataID: "04-00-04-01", DataType: "string", Scale: 0, Unit: ""},
	{ID: "meter_number", Name: "表号", DataID: "04-00-04-02", DataType: "string", Scale: 0, Unit: ""},
	{ID: "meter_status_word_1", Name: "电表运行状态字1", DataID: "04-00-05-01", DataType: "uint32", Scale: 0, Unit: ""},
	{ID: "meter_status_word_2", Name: "电表运行状态字2", DataID: "04-00-05-02", DataType: "uint32", Scale: 0, Unit: ""},

	{ID: "last_timed_freeze_time", Name: "上1次定时冻结时间", DataID: "05-00-00-01", DataType: "string", Scale: 0, Unit: ""},
	{ID: "last_timed_freeze_forward_active_energy", Name: "上1次定时冻结正向有功总电能", DataID: "05-00-01-01", DataType: "uint32", Scale: 0.01, Unit: "kWh"},
	{ID: "last_timed_freeze_reverse_active_energy", Name: "上1次定时冻结反向有功总电能", DataID: "05-00-02-01", DataType: "uint32", Scale: 0.01, Unit: "kWh"},
	{ID: "last_timed_freeze_forward_active_max_demand", Name: "上1次定时冻结正向有功最大需量", DataID: "05-00-09-01", DataType: "uint32", Scale: 0.0001, Unit: "kW"},
	{ID: "last_timed_freeze_forward_active_max_demand_time", Name: "上1次定时冻结正向有功最大需量发生时间", DataID: "05-00-09-01#T", DataType: "string", Scale: 0, Unit: ""},
	{ID: "last_instant_freeze_time", Name: "上1次瞬时冻结时间", DataID: "05-01-00-01", DataType: "string", Scale: 0, Unit: ""},
	{ID: "last_instant_freeze_forward_active_energy", Name: "上1次瞬时冻结正向有功总电能", DataID: "05-01-01-01", DataType: "uint32", Scale: 0.01, Unit: "kWh"},
	{ID: "last_daily_freeze_time", Name: "上1次日冻结时间", DataID: "05-06-00-01", DataType: "string", Scale: 0, Unit: ""},
	{ID: "last_daily_freeze_forward_active_energy", Name: "上1次日冻结正向有功总电能", DataID: "05-06-01-01", DataType: "uint32", Scale: 0.01, Unit: "kWh"},
}

DLT645StandardPointTemplates lists common standard DIs from DL/T 645-2007 section 4.2.3 and appendix A.2–A.6 (commonly deployed subset).

Functions

func ClassifyEdgeErrorType added in v0.0.7

func ClassifyEdgeErrorType(phase, errMsg string) string

ClassifyEdgeErrorType maps phase and message to a stable error category.

func DLT645StationAddress added in v0.0.7

func DLT645StationAddress(config map[string]any) string

DLT645StationAddress returns the 12-digit meter address from device config.

func GenerateDLT645StandardPoints added in v0.0.7

func GenerateDLT645StandardPoints(stationAddress, deviceID string) []model.Point

GenerateDLT645StandardPoints builds standard DI points for a meter address.

func GenerateModbusRegisterPoints

func GenerateModbusRegisterPoints(existing []model.Point, opts ModbusRegisterGenOptions, mergeExisting bool) []model.Point

GenerateModbusRegisterPoints 按地址区间生成保持/输入等寄存器点位。 mergeExisting 为 true 时保留同 ID 现有点位配置。

func IsDLT645AutoPointsEnabled added in v0.0.7

func IsDLT645AutoPointsEnabled(config map[string]any) bool

IsDLT645AutoPointsEnabled reports whether standard DI points should be auto-created. Defaults to true when the key is absent (new devices and legacy configs).

func IsEdgeErrorMinuteSnapshot added in v0.0.7

func IsEdgeErrorMinuteSnapshot(snap model.RuleMinuteSnapshot) bool

IsEdgeErrorMinuteSnapshot reports whether a persisted minute snapshot is an error log row.

func IsVirtualShadowID

func IsVirtualShadowID(shadowDeviceID string) bool

func MatchesEdgeLogFilter added in v0.0.7

func MatchesEdgeLogFilter(snap model.RuleMinuteSnapshot, filter EdgeLogFilter) bool

MatchesEdgeLogFilter reports whether a snapshot satisfies optional edge log filters.

func ParseAutoPointsRange

func ParseAutoPointsRange(rng string) (start, end int, ok bool)

ParseAutoPointsRange 解析 auto_points_range 配置(如 "0-199")。

func VirtualShadowID

func VirtualShadowID(virtualDeviceID string) string

Types

type AdaptiveThrottle added in v0.0.7

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

func NewAdaptiveThrottle added in v0.0.7

func NewAdaptiveThrottle(metrics *ScanEngineMetrics) *AdaptiveThrottle

func (*AdaptiveThrottle) ApplyInterval added in v0.0.7

func (at *AdaptiveThrottle) ApplyInterval(task *ScanTask) bool

func (*AdaptiveThrottle) DeviceFactor added in v0.0.7

func (at *AdaptiveThrottle) DeviceFactor(deviceKey string) float64

func (*AdaptiveThrottle) EffectiveInterval added in v0.0.7

func (at *AdaptiveThrottle) EffectiveInterval(base time.Duration) time.Duration

func (*AdaptiveThrottle) Factor added in v0.0.7

func (at *AdaptiveThrottle) Factor() float64

func (*AdaptiveThrottle) Refresh added in v0.0.7

func (at *AdaptiveThrottle) Refresh(queueDepth, queueLimit int, failRate, avgRTTMs float64) float64

func (*AdaptiveThrottle) UpdateDeviceRTT added in v0.0.7

func (at *AdaptiveThrottle) UpdateDeviceRTT(deviceKey string, rttMs float64)

UpdateDeviceRTT records per-device RTT and raises interval factor when RTT > 2× baseline.

type AggregatedStats added in v0.0.7

type AggregatedStats struct {
	SuccessCount int
	FailCount    int
	FailRate     float64
	LastError    error
}

AggregatedStats summarizes feedback within a flush window.

type BACnetProtocolAdapter

type BACnetProtocolAdapter struct{}

BACnetProtocolAdapter BACnet协议适配器

func NewBACnetProtocolAdapter

func NewBACnetProtocolAdapter() *BACnetProtocolAdapter

NewBACnetProtocolAdapter 创建BACnet协议适配器

func (*BACnetProtocolAdapter) AdjustParameters

func (a *BACnetProtocolAdapter) AdjustParameters(deviceID string, params map[string]interface{}) map[string]interface{}

AdjustParameters 调整参数

func (*BACnetProtocolAdapter) GetDefaultParameters

func (a *BACnetProtocolAdapter) GetDefaultParameters() map[string]interface{}

GetDefaultParameters 获取默认参数

func (*BACnetProtocolAdapter) GetProtocolType

func (a *BACnetProtocolAdapter) GetProtocolType() string

GetProtocolType 获取协议类型

func (*BACnetProtocolAdapter) ValidateParameters

func (a *BACnetProtocolAdapter) ValidateParameters(params map[string]interface{}) error

ValidateParameters 验证参数

type BackpressureController

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

func NewBackpressureController

func NewBackpressureController(globalLimit int, _ float64) *BackpressureController

func (*BackpressureController) Allow

func (bc *BackpressureController) Allow(deviceKey string, deviceLimit int) bool

func (*BackpressureController) AllowWithReason added in v0.0.7

func (bc *BackpressureController) AllowWithReason(ctx ThrottleContext) (bool, RejectReason)

func (*BackpressureController) LogReject added in v0.0.7

func (bc *BackpressureController) LogReject(deviceKey, protocol string, reason RejectReason)

func (*BackpressureController) ReduceTokenRate added in v0.0.7

func (bc *BackpressureController) ReduceTokenRate(factor float64)

func (*BackpressureController) RejectByReason added in v0.0.7

func (bc *BackpressureController) RejectByReason() map[string]uint64

func (*BackpressureController) RejectTotal added in v0.0.7

func (bc *BackpressureController) RejectTotal() uint64

func (*BackpressureController) Release

func (bc *BackpressureController) Release(deviceKey string)

func (*BackpressureController) TokenRate added in v0.0.7

func (bc *BackpressureController) TokenRate() float64

type BatchAddModbusSlavesResult

type BatchAddModbusSlavesResult struct {
	Created []model.Device
	Skipped []int // slave_id
	Errors  []string
}

BatchAddModbusSlavesResult 批量添加 Modbus 从站结果。

type ChannelManager

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

ChannelManager 管理所有采集通道及其下的设备

func NewChannelManager

func NewChannelManager(pipeline *DataPipeline, saveFunc func([]model.Channel) error) *ChannelManager

func (*ChannelManager) AddChannel

func (cm *ChannelManager) AddChannel(ch *model.Channel) error

AddChannel 添加一个采集通道

func (*ChannelManager) AddDevice

func (cm *ChannelManager) AddDevice(channelID string, dev *model.Device) error

AddDevice 添加设备到通道

func (*ChannelManager) AddDevices added in v0.0.8

func (cm *ChannelManager) AddDevices(channelID string, devices []model.Device) ([]model.Device, error)

AddDevices 批量添加设备(单次持久化与拓扑通知)。

func (*ChannelManager) AddPoint

func (cm *ChannelManager) AddPoint(channelID, deviceID string, point *model.Point) error

AddPoint 添加点位到设备

func (*ChannelManager) AddPoints

func (cm *ChannelManager) AddPoints(channelID, deviceID string, points []model.Point) error

AddPoints 批量添加点位到设备(单次重启)

func (*ChannelManager) BatchAddModbusSlaves

func (cm *ChannelManager) BatchAddModbusSlaves(channelID string, slaveStart, slaveEnd, regStart, regEnd int, interval model.Duration, enable bool, datatype, readwrite string, regType model.RegisterType, fc byte) (*BatchAddModbusSlavesResult, error)

BatchAddModbusSlaves 批量添加 Modbus 从站(单次持久化,跳过已存在设备)。

func (*ChannelManager) GenerateDeviceRegisterPoints

func (cm *ChannelManager) GenerateDeviceRegisterPoints(channelID, deviceID string, opts ModbusRegisterGenOptions, mode string) (*model.Device, error)

GenerateDeviceRegisterPoints 为设备批量生成 Modbus 寄存器点位并持久化。 mode: merge(保留同 ID 现有点)| replace(仅保留新区间点位)。

func (*ChannelManager) GetAllPoints

func (cm *ChannelManager) GetAllPoints() []map[string]any

func (*ChannelManager) GetChannel

func (cm *ChannelManager) GetChannel(channelID string) *model.Channel

GetChannel 获取指定通道

func (*ChannelManager) GetChannelDevices

func (cm *ChannelManager) GetChannelDevices(channelID string) []model.Device

GetChannelDevices 获取指定通道的所有设备

func (*ChannelManager) GetChannelScanEngineMetricsSnapshot added in v0.0.7

func (cm *ChannelManager) GetChannelScanEngineMetricsSnapshot(channelID string) map[string]any

func (*ChannelManager) GetChannelStats

func (cm *ChannelManager) GetChannelStats() []ChannelStatus

func (*ChannelManager) GetChannels

func (cm *ChannelManager) GetChannels() []model.Channel

GetChannels 获取所有通道

func (*ChannelManager) GetDevice

func (cm *ChannelManager) GetDevice(channelID, deviceID string) *model.Device

GetDevice 获取指定通道下的指定设备

func (*ChannelManager) GetDeviceDiagnostics

func (cm *ChannelManager) GetDeviceDiagnostics(deviceID string) map[string]any

func (*ChannelManager) GetDevicePoints

func (cm *ChannelManager) GetDevicePoints(channelID, deviceID string) ([]model.PointData, error)

GetDevicePoints 获取指定设备的所有点位数据

func (*ChannelManager) GetDriver

func (cm *ChannelManager) GetDriver(channelID string) drv.Driver

GetDriver 获取通道的驱动实例

func (*ChannelManager) GetScanEngineMetricsSnapshot

func (cm *ChannelManager) GetScanEngineMetricsSnapshot() map[string]any

func (*ChannelManager) GetShadowPoint

func (cm *ChannelManager) GetShadowPoint(channelID, deviceID, pointID string) (*model.ShadowPoint, error)

GetShadowPoint 从影子设备实时快照中读取单个点位数据。 供 OPC UA Server 的 ReadHandler 调用,使第三方客户端能按需获取实时值。

func (*ChannelManager) GetSoakMonitorSnapshot added in v0.0.7

func (cm *ChannelManager) GetSoakMonitorSnapshot() map[string]any

func (*ChannelManager) GetStateManager

func (cm *ChannelManager) GetStateManager() *CommunicationManageTemplate

GetStateManager 获取状态管理器

func (*ChannelManager) GetTagRegistry

func (cm *ChannelManager) GetTagRegistry() *TagRegistry

func (*ChannelManager) OnBACnetAddressDiscovered added in v0.0.7

func (cm *ChannelManager) OnBACnetAddressDiscovered(deviceKey, ip string, port int)

OnBACnetAddressDiscovered persists a runtime address change (e.g. UDP port after device reboot).

func (*ChannelManager) ReadPoint

func (cm *ChannelManager) ReadPoint(channelID, deviceID, pointID string) (model.Value, error)

ReadPoint 读取指定通道下设备点位的值

func (*ChannelManager) RemoveChannel

func (cm *ChannelManager) RemoveChannel(channelID string) error

RemoveChannel 删除采集通道

func (*ChannelManager) RemoveDevice

func (cm *ChannelManager) RemoveDevice(channelID, deviceID string) error

RemoveDevice 删除设备

func (*ChannelManager) RemoveDevices

func (cm *ChannelManager) RemoveDevices(channelID string, deviceIDs []string) error

RemoveDevices 批量删除设备

func (*ChannelManager) RemovePoint

func (cm *ChannelManager) RemovePoint(channelID, deviceID, pointID string) error

RemovePoint 删除设备点位

func (*ChannelManager) RemovePoints

func (cm *ChannelManager) RemovePoints(channelID, deviceID string, pointIDs []string) error

RemovePoints 批量删除设备点位

func (*ChannelManager) ScanChannel

func (cm *ChannelManager) ScanChannel(channelID string, params map[string]any) (any, error)

ScanChannel 扫描通道下的设备

func (*ChannelManager) ScanDevice

func (cm *ChannelManager) ScanDevice(channelID, deviceID string, params map[string]any) (any, error)

ScanDevice 扫描设备下的对象(点位)

func (*ChannelManager) SetShadowCore

func (cm *ChannelManager) SetShadowCore(sc *ShadowCore)

func (*ChannelManager) SetShadowIngress added in v0.0.7

func (cm *ChannelManager) SetShadowIngress(si *ShadowIngress)

func (*ChannelManager) SetStatusHandler

func (cm *ChannelManager) SetStatusHandler(h func(deviceID string, status int))

func (*ChannelManager) SetTopologyChangeHandler

func (cm *ChannelManager) SetTopologyChangeHandler(h func())

SetTopologyChangeHandler registers a callback invoked when channels/devices/points change. Used to rebuild northbound OPC UA address space.

func (*ChannelManager) Shutdown

func (cm *ChannelManager) Shutdown()

Shutdown 关闭所有通道

func (*ChannelManager) StartChannel

func (cm *ChannelManager) StartChannel(channelID string) error

StartChannel 启动一个采集通道

func (*ChannelManager) StopChannel

func (cm *ChannelManager) StopChannel(channelID string) error

StopChannel 停止一个采集通道

func (*ChannelManager) UpdateChannel

func (cm *ChannelManager) UpdateChannel(ch *model.Channel) error

UpdateChannel 更新采集通道

func (*ChannelManager) UpdateDevice

func (cm *ChannelManager) UpdateDevice(channelID string, dev *model.Device) error

UpdateDevice 更新通道下的设备

func (*ChannelManager) UpdatePoint

func (cm *ChannelManager) UpdatePoint(channelID, deviceID string, point *model.Point) (deviceRestarted bool, err error)

UpdatePoint 更新设备点位。返回值 deviceRestarted 表示是否重启了南向采集设备; 北向 OPC UA 地址空间会在保存后异步重建(仅重启 OPC UA 服务,不重启网关主进程)。

func (*ChannelManager) WritePoint

func (cm *ChannelManager) WritePoint(channelID, deviceID, pointID string, value any) error

WritePoint 写入指定通道下设备点位的值

type ChannelStatus

type ChannelStatus struct {
	ID              string                `json:"id"`
	Name            string                `json:"name"`
	Protocol        string                `json:"protocol"`
	Status          string                `json:"status"`
	Enable          bool                  `json:"enable"`
	DeviceCount     int                   `json:"device_count"`
	OnlineCount     int                   `json:"online_count"`
	OfflineCount    int                   `json:"offline_count"`
	QualityScore    int                   `json:"qualityScore"`      // 质量评分
	SuccessRate     float64               `json:"successRate"`       // 成功率
	LastCollectTime string                `json:"last_collect_time"` // 最后采集时间
	Metrics         *model.ChannelMetrics `json:"metrics,omitempty"` // 详细指标
}

type CircuitBreakerEventHandler added in v0.0.7

type CircuitBreakerEventHandler func(deviceKey, eventType, message string)

CircuitBreakerEventHandler receives Open/Reject events for channel Event Log wiring.

type CircuitState added in v0.0.7

type CircuitState int
const (
	CircuitClosed CircuitState = iota
	CircuitOpen
	CircuitHalfOpen
)

func (CircuitState) String added in v0.0.7

func (s CircuitState) String() string

type CollectContext

type CollectContext struct {
	TotalCmd   int  // 总命令数:本次采集执行的总命令数量
	SuccessCmd int  // 成功命令数:成功执行的命令数量
	FailCmd    int  // 失败命令数:执行失败的命令数量
	PanicOccur bool // 是否发生panic:标记采集过程中是否出现异常
}

==================== 采集上下文结构 ==================== CollectContext 用于记录单次采集过程中的统计信息

func (*CollectContext) MarkFail

func (ctx *CollectContext) MarkFail()

MarkFail 记录一次失败命令 调用此方法会增加失败计数,用于统计采集成功率

func (*CollectContext) MarkSuccess

func (ctx *CollectContext) MarkSuccess()

MarkSuccess 记录一次成功命令 调用此方法会增加成功计数,用于统计采集成功率

type CollectFinalizeFunc

type CollectFinalizeFunc func(deviceID string, result *ExecuteResult)

CollectFinalizeFunc 采集完成后回写设备通信状态。

type CommunicationManageTemplate

type CommunicationManageTemplate struct {
	OnStateChange StateChangeCallback // 状态变更回调
	// contains filtered or unexported fields
}

func NewCommunicationManageTemplate

func NewCommunicationManageTemplate() *CommunicationManageTemplate

NewCommunicationManageTemplate 创建新的通信管理器

func (*CommunicationManageTemplate) FinalizeCollect

func (c *CommunicationManageTemplate) FinalizeCollect(node *DeviceNodeTemplate, ctx *CollectContext)

FinalizeCollect 最终裁决函数 根据采集上下文统计信息,决定本次采集的整体结果并更新节点状态

参数:

  • node: 设备节点
  • ctx: 采集上下文,包含本次采集的统计信息

裁决逻辑:

  1. 发生panic -> 直接判定为失败
  2. 无任何命令交互 -> 判定为失败
  3. 成功率 ≥ 30% -> 判定为成功
  4. 成功率 < 30% -> 判定为失败

设计原则:

  1. panic具有最高优先级,直接否决
  2. 允许部分失败(30%成功率即可),适应工业现场不稳定性
  3. 无交互视为最严重失败

func (*CommunicationManageTemplate) GetNode

GetNode 获取指定的设备节点

func (*CommunicationManageTemplate) MarkOffline added in v0.0.7

func (c *CommunicationManageTemplate) MarkOffline(deviceID string)

MarkOffline 将设备标记为离线(例如通道链路断开时批量更新)。

func (*CommunicationManageTemplate) RegisterNode

func (c *CommunicationManageTemplate) RegisterNode(deviceID, name string) *DeviceNodeTemplate

RegisterNode 注册一个新的设备节点

func (*CommunicationManageTemplate) ShouldCollect

func (c *CommunicationManageTemplate) ShouldCollect(node *DeviceNodeTemplate) bool

ShouldCollect 判断是否允许对指定节点进行本轮采集 根据节点当前状态和退避时间决定是否执行采集

参数:

  • node: 目标设备节点

返回值:

  • bool: true表示允许采集,false表示跳过采集

策略说明:

  • Online/Unstable状态: 始终允许采集
  • Offline/Quarantine状态: 只有在退避时间过后才允许采集

type ConnState

type ConnState int
const (
	ConnStateDisconnected ConnState = iota
	ConnStateConnecting
	ConnStateConnected
	ConnStateRetrying
	ConnStateDead
	ConnStateHealthy
	ConnStateDegraded
)

func (ConnState) String

func (s ConnState) String() string

type ConnectionController

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

func NewConnectionController

func NewConnectionController(driverName, deviceID, protocol string) *ConnectionController

func (*ConnectionController) GetState

func (cc *ConnectionController) GetState() ConnState

func (*ConnectionController) GetStatus

func (cc *ConnectionController) GetStatus() (state ConnState, retryCount int, maxRetries int, coolDownRemaining time.Duration, lastSuccess time.Time, readFailCount int, connectionFailCount int)

func (*ConnectionController) HealthScore added in v0.0.7

func (cc *ConnectionController) HealthScore() float64

HealthScore returns a 0–1 health signal derived from read/connection failure counts.

func (*ConnectionController) IsConnectionFailure

func (cc *ConnectionController) IsConnectionFailure(err error) bool

func (*ConnectionController) IsReadFailure

func (cc *ConnectionController) IsReadFailure(err error) bool

func (*ConnectionController) RecordConnectionFailure

func (cc *ConnectionController) RecordConnectionFailure() (shouldRetry bool, backoff time.Duration)

RecordConnectionFailure increments observability counters only. It does not authorize reconnect; use driver.ConnectionManager for that.

func (*ConnectionController) RecordConnectionSuccess

func (cc *ConnectionController) RecordConnectionSuccess()

func (*ConnectionController) RecordReadFailure

func (cc *ConnectionController) RecordReadFailure()

func (*ConnectionController) RecordReadSuccess

func (cc *ConnectionController) RecordReadSuccess()

func (*ConnectionController) Reset

func (cc *ConnectionController) Reset()

func (*ConnectionController) SetMaxFailCount

func (cc *ConnectionController) SetMaxFailCount(max int)

func (*ConnectionController) SetMaxRetries

func (cc *ConnectionController) SetMaxRetries(max int)

func (*ConnectionController) SetState

func (cc *ConnectionController) SetState(state ConnState)

type DLT645PointTemplate added in v0.0.7

type DLT645PointTemplate struct {
	ID       string
	Name     string
	DataID   string
	DataType string
	Scale    float64
	Unit     string
}

DLT645PointTemplate defines a standard DL/T 645-2007 data identifier point.

type DataPipeline

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

DataPipeline handles the flow of collected data

func NewDataPipeline

func NewDataPipeline(bufferSize int) *DataPipeline

func (*DataPipeline) AddBatchHandler

func (dp *DataPipeline) AddBatchHandler(h func([]model.Value))

AddBatchHandler 注册批量处理器,一次 drain 调用一次,减少 handler 开销。

func (*DataPipeline) AddHandler

func (dp *DataPipeline) AddHandler(h func(model.Value))

func (*DataPipeline) Push

func (dp *DataPipeline) Push(val model.Value)

func (*DataPipeline) PushBatch

func (dp *DataPipeline) PushBatch(vals []model.Value)

func (*DataPipeline) SetShadowIngress

func (dp *DataPipeline) SetShadowIngress(si *ShadowIngress)

func (*DataPipeline) Start

func (dp *DataPipeline) Start()

type DefaultDeviceAdapter

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

DefaultDeviceAdapter 默认设备适配器

func NewDefaultDeviceAdapter

func NewDefaultDeviceAdapter(rttManager *RTTManager, mtuManager *MTUManager, gapOptimizer *GapOptimizer, manager *DeviceAdapterManager) *DefaultDeviceAdapter

NewDefaultDeviceAdapter 创建默认设备适配器

func (*DefaultDeviceAdapter) CalculateStabilityScore

func (a *DefaultDeviceAdapter) CalculateStabilityScore(deviceID string) (float64, error)

CalculateStabilityScore 计算稳定性评分

func (*DefaultDeviceAdapter) GetDeviceProfile

func (a *DefaultDeviceAdapter) GetDeviceProfile(deviceID string) (*model.DeviceCommunicationProfile, error)

GetDeviceProfile 获取设备画像

func (*DefaultDeviceAdapter) OptimizeCollectionParams

func (a *DefaultDeviceAdapter) OptimizeCollectionParams(deviceID string) (map[string]interface{}, error)

OptimizeCollectionParams 优化采集参数

func (*DefaultDeviceAdapter) UpdateDeviceProfile

func (a *DefaultDeviceAdapter) UpdateDeviceProfile(profile *model.DeviceCommunicationProfile) error

UpdateDeviceProfile 更新设备画像

func (*DefaultDeviceAdapter) UpdateGap

func (a *DefaultDeviceAdapter) UpdateGap(deviceID string, gap int) error

UpdateGap 更新Gap

func (*DefaultDeviceAdapter) UpdateMTU

func (a *DefaultDeviceAdapter) UpdateMTU(deviceID string, mtu int) error

UpdateMTU 更新MTU

func (*DefaultDeviceAdapter) UpdateRTT

func (a *DefaultDeviceAdapter) UpdateRTT(deviceID string, rtt int64) error

UpdateRTT 更新RTT

type DefaultProtocolAdapter

type DefaultProtocolAdapter struct{}

DefaultProtocolAdapter 默认协议适配器

func NewDefaultProtocolAdapter

func NewDefaultProtocolAdapter() *DefaultProtocolAdapter

NewDefaultProtocolAdapter 创建默认协议适配器

func (*DefaultProtocolAdapter) AdjustParameters

func (a *DefaultProtocolAdapter) AdjustParameters(deviceID string, params map[string]interface{}) map[string]interface{}

AdjustParameters 调整参数

func (*DefaultProtocolAdapter) GetDefaultParameters

func (a *DefaultProtocolAdapter) GetDefaultParameters() map[string]interface{}

GetDefaultParameters 获取默认参数

func (*DefaultProtocolAdapter) GetProtocolType

func (a *DefaultProtocolAdapter) GetProtocolType() string

GetProtocolType 获取协议类型

func (*DefaultProtocolAdapter) ValidateParameters

func (a *DefaultProtocolAdapter) ValidateParameters(params map[string]interface{}) error

ValidateParameters 验证参数

type DeviceAdapter

type DeviceAdapter interface {
	GetDeviceProfile(deviceID string) (*model.DeviceCommunicationProfile, error)
	UpdateDeviceProfile(profile *model.DeviceCommunicationProfile) error
	OptimizeCollectionParams(deviceID string) (map[string]interface{}, error)
	UpdateRTT(deviceID string, rtt int64) error
	UpdateMTU(deviceID string, mtu int) error
	UpdateGap(deviceID string, gap int) error
	CalculateStabilityScore(deviceID string) (float64, error)
}

DeviceAdapter 设备适配器接口

type DeviceAdapterManager

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

DeviceAdapterManager 设备适配器管理器

func NewDeviceAdapterManager

func NewDeviceAdapterManager() *DeviceAdapterManager

NewDeviceAdapterManager 创建设备适配器管理器

func (*DeviceAdapterManager) GetAdapter

func (m *DeviceAdapterManager) GetAdapter(deviceID string) DeviceAdapter

GetAdapter 获取设备适配器

func (*DeviceAdapterManager) GetDeviceProfile

func (m *DeviceAdapterManager) GetDeviceProfile(deviceID string) (*model.DeviceCommunicationProfile, error)

GetDeviceProfile 获取设备画像

func (*DeviceAdapterManager) RegisterAdapter

func (m *DeviceAdapterManager) RegisterAdapter(deviceID string, adapter DeviceAdapter)

RegisterAdapter 注册设备适配器

func (*DeviceAdapterManager) UpdateDeviceProfile

func (m *DeviceAdapterManager) UpdateDeviceProfile(profile *model.DeviceCommunicationProfile) error

UpdateDeviceProfile 更新设备画像

type DeviceIO

type DeviceIO interface {
	WritePoint(channelID, deviceID, pointID string, value any) error
	ReadPoint(channelID, deviceID, pointID string) (model.Value, error)
}

type DeviceIOProfile

type DeviceIOProfile struct {
	Gap       int
	BatchSize int
}

DeviceIOProfile Modbus 等协议的动态 IO 参数(来自 Shadow 通信画像)。

type DeviceNodeTemplate

type DeviceNodeTemplate struct {
	DeviceID string            // 设备ID
	Name     string            // 设备名称
	Runtime  *NodeRuntimeState // 运行时状态
}

==================== 设备节点模板 ==================== DeviceNodeTemplate 代表一个设备节点,包含设备信息和运行时状态

type DeviceStorageManager

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

DeviceStorageManager 从 ShadowCore 读取影子设备全量点位,按策略写入 device_history_*。

func NewDeviceStorageManager

func NewDeviceStorageManager(s *storage.Storage, dp *DataPipeline) *DeviceStorageManager

func (*DeviceStorageManager) ClearAllHistory

func (m *DeviceStorageManager) ClearAllHistory()

func (*DeviceStorageManager) GetHistory

func (m *DeviceStorageManager) GetHistory(deviceID string, limit int) ([]map[string]any, error)

func (*DeviceStorageManager) GetHistoryByTimeRange

func (m *DeviceStorageManager) GetHistoryByTimeRange(deviceID string, start, end time.Time, limit int) ([]map[string]any, error)

func (*DeviceStorageManager) HistoryBucketNames added in v0.0.7

func (m *DeviceStorageManager) HistoryBucketNames() []string

HistoryBucketNames returns device_history_* bucket names for enabled storage configs.

func (*DeviceStorageManager) RemoveDevice

func (m *DeviceStorageManager) RemoveDevice(deviceID string)

func (*DeviceStorageManager) SetShadowCore

func (m *DeviceStorageManager) SetShadowCore(sc *ShadowCore)

SetShadowCore 绑定影子设备核心,快照数据从影子设备全量点位读取。

func (*DeviceStorageManager) SetStorage

func (m *DeviceStorageManager) SetStorage(s *storage.Storage)

SetStorage 在安装完成后绑定运行时存储(采集值落库)。

func (*DeviceStorageManager) UpdateDeviceConfig

func (m *DeviceStorageManager) UpdateDeviceConfig(deviceID string, cfg model.DeviceStorage)

UpdateDeviceConfig updates the storage configuration for a device

type DriverCircuitBreaker added in v0.0.7

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

func NewDriverCircuitBreaker added in v0.0.7

func NewDriverCircuitBreaker() *DriverCircuitBreaker

func (*DriverCircuitBreaker) Allow added in v0.0.7

func (cb *DriverCircuitBreaker) Allow(key string) bool

func (*DriverCircuitBreaker) DeviceSnapshot added in v0.0.7

func (cb *DriverCircuitBreaker) DeviceSnapshot(key string) map[string]any

func (*DriverCircuitBreaker) OpenTotal added in v0.0.7

func (cb *DriverCircuitBreaker) OpenTotal() uint64

func (*DriverCircuitBreaker) Record added in v0.0.7

func (cb *DriverCircuitBreaker) Record(key string, success bool, timeout bool)

func (*DriverCircuitBreaker) RejectTotal added in v0.0.7

func (cb *DriverCircuitBreaker) RejectTotal() uint64

func (*DriverCircuitBreaker) Reset added in v0.0.7

func (cb *DriverCircuitBreaker) Reset(key string)

func (*DriverCircuitBreaker) SetEventHandler added in v0.0.7

func (cb *DriverCircuitBreaker) SetEventHandler(fn CircuitBreakerEventHandler)

func (*DriverCircuitBreaker) SetOpenedAtForTest added in v0.0.7

func (cb *DriverCircuitBreaker) SetOpenedAtForTest(key string, openedAt time.Time)

SetOpenedAtForTest adjusts the open timestamp (integration tests only).

func (*DriverCircuitBreaker) Snapshot added in v0.0.7

func (cb *DriverCircuitBreaker) Snapshot() map[string]any

func (*DriverCircuitBreaker) State added in v0.0.7

func (cb *DriverCircuitBreaker) State(key string) CircuitState

type DriverTask

type DriverTask struct {
	Ctx       context.Context
	DeviceKey string
	Points    []model.Point
	ReadFunc  func(context.Context, []model.Point) (map[string]model.Value, error)
	Callback  func(map[string]model.Value, error)
}

type EdgeComputeManager

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

func NewEdgeComputeManager

func NewEdgeComputeManager(pipeline *DataPipeline, store *storage.Storage, saveFunc func([]model.EdgeRule) error) *EdgeComputeManager

func (*EdgeComputeManager) ClearEdgeLogs added in v0.0.7

func (em *EdgeComputeManager) ClearEdgeLogs() (EdgeLogsClearResult, error)

ClearEdgeLogs removes historical edge events, failures, and minute-level logs. Rule definitions and runtime state (current_status, execution_phase, windows) are preserved.

func (*EdgeComputeManager) ClearRuntimeState added in v0.0.7

func (em *EdgeComputeManager) ClearRuntimeState()

ClearRuntimeState 清空边缘规则运行时状态(内存态,与 runtime.db 清理配合使用)。

func (*EdgeComputeManager) DeleteRule

func (em *EdgeComputeManager) DeleteRule(id string) error

func (*EdgeComputeManager) GetEvents added in v0.0.7

func (em *EdgeComputeManager) GetEvents(ruleID string, limit int) []model.EdgeRuleEvent

func (*EdgeComputeManager) GetFailedActions

func (em *EdgeComputeManager) GetFailedActions() []model.FailedAction

func (*EdgeComputeManager) GetFailures added in v0.0.7

func (em *EdgeComputeManager) GetFailures(ruleID string, limit int) []model.EdgeFailureRecord

func (*EdgeComputeManager) GetMetrics

func (em *EdgeComputeManager) GetMetrics() EdgeComputeMetrics

func (*EdgeComputeManager) GetRuleStates

func (em *EdgeComputeManager) GetRuleStates() map[string]*model.RuleRuntimeState

func (*EdgeComputeManager) GetRules

func (em *EdgeComputeManager) GetRules() []model.EdgeRule

func (*EdgeComputeManager) GetWindowData

func (em *EdgeComputeManager) GetWindowData(ruleID string) []model.Value

func (*EdgeComputeManager) LoadRules

func (em *EdgeComputeManager) LoadRules(rules []model.EdgeRule)

func (*EdgeComputeManager) QueryLogs

func (em *EdgeComputeManager) QueryLogs(start, end time.Time, ruleID string) ([]model.RuleMinuteSnapshot, error)

QueryLogs retrieves error logs based on time range and optional rule ID.

func (*EdgeComputeManager) RuntimeLogStats added in v0.0.7

func (em *EdgeComputeManager) RuntimeLogStats() (eventsMem, failuresMem, minuteCache int)

RuntimeLogStats returns in-memory edge log buffer sizes for database stats.

func (*EdgeComputeManager) SetActionHook

func (em *EdgeComputeManager) SetActionHook(hook func(ruleID string, action model.RuleAction, val model.Value, env map[string]any, err error))

func (*EdgeComputeManager) SetBatchWindow added in v0.0.7

func (em *EdgeComputeManager) SetBatchWindow(d time.Duration)

func (*EdgeComputeManager) SetChannelManager

func (em *EdgeComputeManager) SetChannelManager(cm *ChannelManager)

func (*EdgeComputeManager) SetDeviceWriter

func (em *EdgeComputeManager) SetDeviceWriter(w DeviceIO)

func (*EdgeComputeManager) SetNorthboundManager

func (em *EdgeComputeManager) SetNorthboundManager(nbm *NorthboundManager)

func (*EdgeComputeManager) SetStorage

func (em *EdgeComputeManager) SetStorage(s *storage.Storage)

func (*EdgeComputeManager) Start

func (em *EdgeComputeManager) Start()

func (*EdgeComputeManager) Stop

func (em *EdgeComputeManager) Stop()

func (*EdgeComputeManager) UpsertRule

func (em *EdgeComputeManager) UpsertRule(rule model.EdgeRule) error

type EdgeComputeMetrics

type EdgeComputeMetrics struct {
	WorkerPoolSize        int   `json:"worker_pool_size"`
	WorkerPoolUsage       int   `json:"worker_pool_usage"`
	RuleCount             int   `json:"rule_count"`
	CacheSize             int   `json:"cache_size"`
	WindowBufferTotal     int   `json:"window_buffer_total"`
	PendingSchedulerTasks int   `json:"pending_scheduler_tasks"`
	MinuteCacheSize       int   `json:"minute_cache_size"`
	EventBufferSize       int   `json:"event_buffer_size"`
	FailureBufferSize     int   `json:"failure_buffer_size"`
	BatchWindowMs         int64 `json:"batch_window_ms"`
	RulesTriggered        int64 `json:"rules_triggered"`
	RulesExecuted         int64 `json:"rules_executed"`
	RulesDropped          int64 `json:"rules_dropped"`
	RulesCoalesced        int64 `json:"rules_coalesced"`
	RulesDebounced        int64 `json:"rules_debounced"`
}

type EdgeLogFilter added in v0.0.7

type EdgeLogFilter struct {
	RuleID    string
	Category  string
	ChannelID string
	DeviceID  string
}

EdgeLogFilter selects persisted edge error logs.

type EdgeLogsClearResult added in v0.0.7

type EdgeLogsClearResult struct {
	EventsMemory   int      `json:"events_memory"`
	FailuresMemory int      `json:"failures_memory"`
	MinuteCache    int      `json:"minute_cache"`
	Buckets        []string `json:"buckets"`
}

EdgeLogsClearResult summarizes what was cleared by ClearEdgeLogs.

type ExecuteResult

type ExecuteResult struct {
	Success bool
	Values  map[string]model.Value
	Error   error
}

type ExecutionContext

type ExecutionContext struct {
	DeviceKey string
	Queue     chan *DriverTask
	Worker    *SerialWorker
	Driver    driver.Driver
	Running   bool
	// contains filtered or unexported fields
}

type ExecutionLayer

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

func NewExecutionLayer

func NewExecutionLayer() *ExecutionLayer

func (*ExecutionLayer) Execute

func (el *ExecutionLayer) Execute(task *ScanTask) *ExecuteResult

func (*ExecutionLayer) GetBackpressure added in v0.0.7

func (el *ExecutionLayer) GetBackpressure() *BackpressureController

func (*ExecutionLayer) GetCircuitBreaker added in v0.0.7

func (el *ExecutionLayer) GetCircuitBreaker() *DriverCircuitBreaker

func (*ExecutionLayer) GetDriver

func (el *ExecutionLayer) GetDriver(deviceKey string) driver.Driver

func (*ExecutionLayer) GetSerialQueueDepths added in v0.0.7

func (el *ExecutionLayer) GetSerialQueueDepths() map[string]int

func (*ExecutionLayer) ReduceBackpressureRate added in v0.0.7

func (el *ExecutionLayer) ReduceBackpressureRate(factor float64)

func (*ExecutionLayer) RegisterDriver

func (el *ExecutionLayer) RegisterDriver(deviceKey string, d driver.Driver)

func (*ExecutionLayer) RegisterProtocol

func (el *ExecutionLayer) RegisterProtocol(protocol string, pType ProtocolType)

func (*ExecutionLayer) SetCircuitBreakerEventHandler added in v0.0.7

func (el *ExecutionLayer) SetCircuitBreakerEventHandler(fn CircuitBreakerEventHandler)

func (*ExecutionLayer) SetIOProfileProvider

func (el *ExecutionLayer) SetIOProfileProvider(fn IOProfileProvider)

func (*ExecutionLayer) SetPointDegradation

func (el *ExecutionLayer) SetPointDegradation(m *PointDegradationManager)

func (*ExecutionLayer) Start

func (el *ExecutionLayer) Start()

func (*ExecutionLayer) Stop

func (el *ExecutionLayer) Stop()

func (*ExecutionLayer) UnregisterDriver

func (el *ExecutionLayer) UnregisterDriver(deviceKey string)

type FeedbackAggregator added in v0.0.7

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

FeedbackAggregator batches scheduling feedback before updateTaskState (v5.2 sketch).

func NewFeedbackAggregator added in v0.0.7

func NewFeedbackAggregator(window time.Duration, onFlush func(string, AggregatedStats)) *FeedbackAggregator

func (*FeedbackAggregator) Start added in v0.0.7

func (fa *FeedbackAggregator) Start()

func (*FeedbackAggregator) Stop added in v0.0.7

func (fa *FeedbackAggregator) Stop()

func (*FeedbackAggregator) Submit added in v0.0.7

func (fa *FeedbackAggregator) Submit(ev FeedbackEvent)

func (*FeedbackAggregator) Window added in v0.0.7

func (fa *FeedbackAggregator) Window() time.Duration

type FeedbackEvent added in v0.0.7

type FeedbackEvent struct {
	DeviceKey string
	TaskID    string
	Success   bool
	Err       error
	At        time.Time
	LagMicros int64
}

FeedbackEvent is a single task execution outcome for aggregation.

type GCMonitor added in v0.0.7

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

func NewGCMonitor added in v0.0.7

func NewGCMonitor(onHighPause func(pauseMaxMs float64)) *GCMonitor

func (*GCMonitor) Metrics added in v0.0.7

func (m *GCMonitor) Metrics() *GCMonitorMetrics

func (*GCMonitor) Start added in v0.0.7

func (m *GCMonitor) Start()

func (*GCMonitor) Stop added in v0.0.7

func (m *GCMonitor) Stop()

type GCMonitorMetrics added in v0.0.7

type GCMonitorMetrics struct {
	PauseMaxMs        atomic.Uint64
	AllocRateBytesSec atomic.Uint64
}

func (*GCMonitorMetrics) Snapshot added in v0.0.7

func (m *GCMonitorMetrics) Snapshot() map[string]any

type GapOptimizer

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

GapOptimizer Gap优化器

func NewGapOptimizer

func NewGapOptimizer() *GapOptimizer

NewGapOptimizer 创建Gap优化器

func (*GapOptimizer) ClearGapData

func (g *GapOptimizer) ClearGapData(deviceID string)

ClearGapData 清除设备的Gap数据

func (*GapOptimizer) GetCurrentGap

func (g *GapOptimizer) GetCurrentGap(deviceID string) int

GetCurrentGap 获取当前Gap

func (*GapOptimizer) OptimizeGap

func (g *GapOptimizer) OptimizeGap(deviceID string, mtu int, rtt int64) int

OptimizeGap 优化Gap

func (*GapOptimizer) SetGap

func (g *GapOptimizer) SetGap(deviceID string, gap int)

SetGap 设置Gap

type IOProfileProvider

type IOProfileProvider func(deviceID string) DeviceIOProfile

type MTUManager

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

MTUManager MTU管理器

func NewMTUManager

func NewMTUManager() *MTUManager

NewMTUManager 创建MTU管理器

func (*MTUManager) ClearMTUData

func (m *MTUManager) ClearMTUData(deviceID string)

ClearMTUData 清除设备的MTU数据

func (*MTUManager) GetCurrentMTU

func (m *MTUManager) GetCurrentMTU(deviceID string) int

GetCurrentMTU 获取当前MTU

func (*MTUManager) GetMTUHistory

func (m *MTUManager) GetMTUHistory(deviceID string) []model.MTUNegotiationRecord

GetMTUHistory 获取MTU历史记录

func (*MTUManager) NegotiateMTU

func (m *MTUManager) NegotiateMTU(deviceID string, rtt int64) int

NegotiateMTU 协商MTU

func (*MTUManager) SetMTU

func (m *MTUManager) SetMTU(deviceID string, mtu int)

SetMTU 设置MTU

type ModbusProtocolAdapter

type ModbusProtocolAdapter struct{}

ModbusProtocolAdapter Modbus协议适配器

func NewModbusProtocolAdapter

func NewModbusProtocolAdapter() *ModbusProtocolAdapter

NewModbusProtocolAdapter 创建Modbus协议适配器

func (*ModbusProtocolAdapter) AdjustParameters

func (a *ModbusProtocolAdapter) AdjustParameters(deviceID string, params map[string]interface{}) map[string]interface{}

AdjustParameters 调整参数

func (*ModbusProtocolAdapter) GetDefaultParameters

func (a *ModbusProtocolAdapter) GetDefaultParameters() map[string]interface{}

GetDefaultParameters 获取默认参数

func (*ModbusProtocolAdapter) GetProtocolType

func (a *ModbusProtocolAdapter) GetProtocolType() string

GetProtocolType 获取协议类型

func (*ModbusProtocolAdapter) ValidateParameters

func (a *ModbusProtocolAdapter) ValidateParameters(params map[string]interface{}) error

ValidateParameters 验证参数

type ModbusRegisterGenOptions

type ModbusRegisterGenOptions struct {
	Start        int
	End          int
	DataType     string
	ReadWrite    string
	RegisterType model.RegisterType
	FunctionCode byte
	DeviceID     string
}

ModbusRegisterGenOptions 批量生成 Modbus 寄存器点位参数。

type NodeRuntimeState

type NodeRuntimeState struct {
	FailCount     int       // 连续失败次数
	SuccessCount  int       // 连续成功次数
	LastSuccess   time.Time // 最后一次成功时间
	LastFailTime  time.Time // 最后一次失败时间
	NextRetryTime time.Time // 下一次重试时间(用于退避机制)
	State         NodeState // 当前节点状态
}

==================== 节点运行时状态结构 ==================== NodeRuntimeState 存储设备节点的运行时状态信息

type NodeState

type NodeState int

==================== 节点运行状态定义 ==================== NodeState 定义设备节点的运行状态

const (
	NodeStateOnline     NodeState = iota // 0 在线状态:设备正常通信
	NodeStateUnstable                    // 1 不稳定状态:设备通信时好时坏
	NodeStateOffline                     // 2 离线状态:设备暂时无法连接
	NodeStateQuarantine                  // 3 隔离状态:设备持续故障,需要延长退避时间
)

设备节点状态枚举

type NorthboundManager

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

func (*NorthboundManager) BatchWriteOPCUA

func (nm *NorthboundManager) BatchWriteOPCUA(serverID string, requests []opcua.WriteRequest) []opcua.BatchWriteResult

BatchWriteOPCUA 批量写入多个点位

func (*NorthboundManager) DeleteEdgeOSMQTTConfig

func (nm *NorthboundManager) DeleteEdgeOSMQTTConfig(id string) error

DeleteEdgeOSMQTTConfig 删除 edgeOS(MQTT) 配置

func (*NorthboundManager) DeleteEdgeOSNATSConfig

func (nm *NorthboundManager) DeleteEdgeOSNATSConfig(id string) error

DeleteEdgeOSNATSConfig 删除 edgeOS(NATS) 配置

func (*NorthboundManager) DeleteHTTPConfig

func (nm *NorthboundManager) DeleteHTTPConfig(id string) error

func (*NorthboundManager) DeleteMQTTConfig

func (nm *NorthboundManager) DeleteMQTTConfig(id string) error

func (*NorthboundManager) DeleteOPCUAConfig

func (nm *NorthboundManager) DeleteOPCUAConfig(id string) error

func (*NorthboundManager) DeleteSparkplugBConfig

func (nm *NorthboundManager) DeleteSparkplugBConfig(id string) error

func (*NorthboundManager) GetConfig

func (nm *NorthboundManager) GetConfig() model.NorthboundConfig

func (*NorthboundManager) GetEdgeOSMQTTStats

func (nm *NorthboundManager) GetEdgeOSMQTTStats(id string) (edgos_mqtt.EdgeOSMQTTStats, error)

GetEdgeOSMQTTStats 获取 edgeOS(MQTT) 统计信息

func (*NorthboundManager) GetEdgeOSNATSStats

func (nm *NorthboundManager) GetEdgeOSNATSStats(id string) (edgos_nats.EdgeOSNATSStats, error)

GetEdgeOSNATSStats 获取 edgeOS(NATS) 统计信息

func (*NorthboundManager) GetMQTTStats

func (nm *NorthboundManager) GetMQTTStats(id string) (mqtt.MQTTStats, error)

func (*NorthboundManager) GetNorthboundStats

func (nm *NorthboundManager) GetNorthboundStats() []NorthboundStatus

func (*NorthboundManager) GetOPCUAStats

func (nm *NorthboundManager) GetOPCUAStats(id string) (opcua.Stats, error)

func (*NorthboundManager) GetOPCUAWriteHistory

func (nm *NorthboundManager) GetOPCUAWriteHistory(serverID string, limit int) ([]opcua.WriteHistoryItem, error)

GetOPCUAWriteHistory 获取 OPC-UA 写入历史

func (*NorthboundManager) OnDeviceStatusChange

func (nm *NorthboundManager) OnDeviceStatusChange(deviceID string, status int)

OnDeviceStatusChange handles device status changes and notifies northbound clients. Virtual shadow devices do not emit southbound status events; only physical devices are handled here.

func (*NorthboundManager) PublishEdgeOSMQTT

func (nm *NorthboundManager) PublishEdgeOSMQTT(clientID, topic string, payload []byte) error

PublishEdgeOSMQTT 发布消息到指定的 edgeOS(MQTT) 客户端

func (*NorthboundManager) PublishEdgeOSNATS

func (nm *NorthboundManager) PublishEdgeOSNATS(clientID, subject string, payload []byte) error

PublishEdgeOSNATS 发布消息到指定的 edgeOS(NATS) 客户端

func (*NorthboundManager) PublishHTTP

func (nm *NorthboundManager) PublishHTTP(configID string, payload []byte) error

PublishHTTP sends a raw payload via a specific HTTP config

func (*NorthboundManager) PublishMQTT

func (nm *NorthboundManager) PublishMQTT(clientID string, topic string, payload []byte) error

PublishMQTT publishes a message to a specific MQTT client or all if clientID is empty

func (*NorthboundManager) PublishMQTTClient

func (nm *NorthboundManager) PublishMQTTClient(clientID string, topic string, payload []byte) error

PublishMQTTClient publishes to a specific client

func (*NorthboundManager) PublishPointsMetadata

func (nm *NorthboundManager) PublishPointsMetadata()

PublishPointsMetadata publishes all point definitions to all edgeOS clients

func (*NorthboundManager) PublishPointsSync

func (nm *NorthboundManager) PublishPointsSync(channelID, deviceID string)

PublishPointsSync publishes all point current values for a device to all edgeOS clients

func (*NorthboundManager) RebuildOPCUAServers

func (nm *NorthboundManager) RebuildOPCUAServers()

RebuildOPCUAServers 重建所有已启用的 OPC UA Server 地址空间(仅重启北向 OPC UA 服务,不影响网关主进程与南向采集)。

func (*NorthboundManager) SetChannelManager

func (nm *NorthboundManager) SetChannelManager(cm *ChannelManager)

SetChannelManager sets the ChannelManager reference for device lookups

func (*NorthboundManager) SetVirtualShadowManager added in v0.0.7

func (nm *NorthboundManager) SetVirtualShadowManager(vsm *VirtualShadowManager)

func (*NorthboundManager) Start

func (nm *NorthboundManager) Start()

func (*NorthboundManager) Stop

func (nm *NorthboundManager) Stop()

func (*NorthboundManager) SyncOPCUAServer

func (nm *NorthboundManager) SyncOPCUAServer(id string) error

SyncOPCUAServer 重建指定 OPC UA Server 的地址空间(同步南向点位读写权限等变更)。

func (*NorthboundManager) UpdateConfig

func (nm *NorthboundManager) UpdateConfig(newConfig model.NorthboundConfig)

UpdateConfig 更新北向配置并重启相关客户端/服务器

func (*NorthboundManager) UpdateOPCUACertificates

func (nm *NorthboundManager) UpdateOPCUACertificates(id string, certPEM, keyPEM string, trusted []string) (model.OPCUAConfig, error)

UpdateOPCUACertificates updates server/trusted PEM blobs and restarts the OPC UA server.

func (*NorthboundManager) UpsertEdgeOSMQTTConfig

func (nm *NorthboundManager) UpsertEdgeOSMQTTConfig(cfg model.EdgeOSMQTTConfig) (string, error)

UpsertEdgeOSMQTTConfig 更新或插入 edgeOS(MQTT) 配置

func (*NorthboundManager) UpsertEdgeOSNATSConfig

func (nm *NorthboundManager) UpsertEdgeOSNATSConfig(cfg model.EdgeOSNATSConfig) (string, error)

UpsertEdgeOSNATSConfig 更新或插入 edgeOS(NATS) 配置

func (*NorthboundManager) UpsertHTTPConfig

func (nm *NorthboundManager) UpsertHTTPConfig(cfg model.HTTPConfig) error

func (*NorthboundManager) UpsertMQTTConfig

func (nm *NorthboundManager) UpsertMQTTConfig(cfg model.MQTTConfig) (string, error)

func (*NorthboundManager) UpsertOPCUAConfig

func (nm *NorthboundManager) UpsertOPCUAConfig(cfg model.OPCUAConfig) (model.OPCUAConfig, string, error)

func (*NorthboundManager) UpsertSparkplugBConfig

func (nm *NorthboundManager) UpsertSparkplugBConfig(cfg model.SparkplugBConfig) (string, error)

func (*NorthboundManager) WriteOPCUA

func (nm *NorthboundManager) WriteOPCUA(serverID, channelID, deviceID, pointID string, value any) error

WriteOPCUA 通过 OPC-UA 服务端写入单个点位值

type NorthboundStatus

type NorthboundStatus struct {
	ID     string `json:"id"`
	Name   string `json:"name"`
	Type   string `json:"type"`
	Status string `json:"status"`
}

type PointDegradationManager

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

PointDegradationManager 点位级降级:连续失败跳过常规采集,指数探测恢复。

func NewPointDegradationManager

func NewPointDegradationManager() *PointDegradationManager

func (*PointDegradationManager) FilterForRead

func (m *PointDegradationManager) FilterForRead(deviceID string, pointIDs []string) (active []string, skipped []string)

FilterForRead 返回应参与本次读取的点位 ID;降级且未到探测时间的点位被跳过。

func (*PointDegradationManager) IsDegraded

func (m *PointDegradationManager) IsDegraded(deviceID, pointID string) bool

IsDegraded 查询点位是否处于降级状态。

func (*PointDegradationManager) RecordResults

func (m *PointDegradationManager) RecordResults(deviceID string, results map[string]string)

RecordResults 根据读结果更新点位状态。

func (*PointDegradationManager) SnapshotDevice

func (m *PointDegradationManager) SnapshotDevice(deviceID string, pointIDs []string) map[string]any

SnapshotDevice 返回设备下各点位的降级快照。

type PriorityQueue

type PriorityQueue []*ScanTask

func (PriorityQueue) Len

func (pq PriorityQueue) Len() int

func (PriorityQueue) Less

func (pq PriorityQueue) Less(i, j int) bool

func (*PriorityQueue) Peek

func (pq *PriorityQueue) Peek() *ScanTask

func (*PriorityQueue) Pop

func (pq *PriorityQueue) Pop() interface{}

func (*PriorityQueue) Push

func (pq *PriorityQueue) Push(x interface{})

func (PriorityQueue) Swap

func (pq PriorityQueue) Swap(i, j int)

type ProtocolAdapter

type ProtocolAdapter interface {
	GetProtocolType() string
	AdjustParameters(deviceID string, params map[string]interface{}) map[string]interface{}
	ValidateParameters(params map[string]interface{}) error
	GetDefaultParameters() map[string]interface{}
}

ProtocolAdapter 协议适配器接口

type ProtocolAdapterRegistry

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

ProtocolAdapterRegistry 协议适配器注册表

func NewProtocolAdapterRegistry

func NewProtocolAdapterRegistry() *ProtocolAdapterRegistry

NewProtocolAdapterRegistry 创建协议适配器注册表

func (*ProtocolAdapterRegistry) GetAdapter

func (r *ProtocolAdapterRegistry) GetAdapter(protocolType string) ProtocolAdapter

GetAdapter 获取协议适配器

func (*ProtocolAdapterRegistry) RegisterAdapter

func (r *ProtocolAdapterRegistry) RegisterAdapter(adapter ProtocolAdapter)

RegisterAdapter 注册协议适配器

type ProtocolCongestionController added in v0.0.7

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

ProtocolCongestionController is deprecated; protocol rate limiting lives in BackpressureController.AllowWithReason (layer 3). Kept for test compatibility.

func NewProtocolCongestionController added in v0.0.7

func NewProtocolCongestionController() *ProtocolCongestionController

func (*ProtocolCongestionController) Allow added in v0.0.7

func (pc *ProtocolCongestionController) Allow(protocol string) bool

func (*ProtocolCongestionController) RejectTotal added in v0.0.7

func (pc *ProtocolCongestionController) RejectTotal() uint64

type ProtocolType

type ProtocolType int
const (
	ProtocolTypeSerial ProtocolType = iota
	ProtocolTypeParallel
	ProtocolTypeLimited
)

type RTTManager

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

RTTManager RTT管理器

func NewRTTManager

func NewRTTManager() *RTTManager

NewRTTManager 创建RTT管理器

func (*RTTManager) ClearRTTData

func (r *RTTManager) ClearRTTData(deviceID string)

ClearRTTData 清除设备的RTT数据

func (*RTTManager) GetAverageRTT

func (r *RTTManager) GetAverageRTT(deviceID string) int64

GetAverageRTT 获取平均RTT

func (*RTTManager) GetEWMARTT

func (r *RTTManager) GetEWMARTT(deviceID string) int64

GetEWMARTT 获取EWMA RTT

func (*RTTManager) GetMaxRTT

func (r *RTTManager) GetMaxRTT(deviceID string) int64

GetMaxRTT 获取最大RTT

func (*RTTManager) GetRTTSamples

func (r *RTTManager) GetRTTSamples(deviceID string) []int64

GetRTTSamples 获取RTT采样数据

func (*RTTManager) UpdateRTT

func (r *RTTManager) UpdateRTT(deviceID string, rtt int64)

UpdateRTT 更新RTT数据

type RejectReason added in v0.0.7

type RejectReason string
const (
	RejectNone            RejectReason = ""
	RejectGlobalSemaphore RejectReason = "global_semaphore"
	RejectDeviceSemaphore RejectReason = "device_semaphore"
	RejectProtocolRate    RejectReason = "protocol_rate"
)

type ResourceController

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

func NewResourceController

func NewResourceController(limits ResourceLimits) *ResourceController

func (*ResourceController) Acquire

func (rc *ResourceController) Acquire()

func (*ResourceController) AcquireConnection

func (rc *ResourceController) AcquireConnection() bool

func (*ResourceController) CanExecute

func (rc *ResourceController) CanExecute() bool

func (*ResourceController) GetConnectionCount

func (rc *ResourceController) GetConnectionCount() int32

func (*ResourceController) GetGoroutineCount

func (rc *ResourceController) GetGoroutineCount() int32

func (*ResourceController) Monitor

func (rc *ResourceController) Monitor(wg *sync.WaitGroup)

func (*ResourceController) Release

func (rc *ResourceController) Release()

func (*ResourceController) ReleaseConnection

func (rc *ResourceController) ReleaseConnection()

func (*ResourceController) Stop

func (rc *ResourceController) Stop()

type ResourceLimits

type ResourceLimits struct {
	GoroutineLimit  int
	FDLimit         int
	ConnectionLimit int
	QueueLimit      int
}

type ScanEngine

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

func NewScanEngine

func NewScanEngine(config ScanEngineConfig) *ScanEngine

func (*ScanEngine) AddTask

func (se *ScanEngine) AddTask(deviceKey, protocol string, interval time.Duration, priority int, pointIDs []string, params map[string]any) *ScanTask

func (*ScanEngine) AddTaskWithScanClass

func (se *ScanEngine) AddTaskWithScanClass(deviceKey, protocol, scanClass string, interval time.Duration, priority int, pointIDs []string, params map[string]any) *ScanTask

func (*ScanEngine) ExecuteTask added in v0.0.7

func (se *ScanEngine) ExecuteTask(task *ScanTask) *ExecuteResult

func (*ScanEngine) GetActiveTaskCount

func (se *ScanEngine) GetActiveTaskCount() int

func (*ScanEngine) GetCircuitBreaker added in v0.0.7

func (se *ScanEngine) GetCircuitBreaker() *DriverCircuitBreaker

func (*ScanEngine) GetGCMonitor added in v0.0.7

func (se *ScanEngine) GetGCMonitor() *GCMonitor

func (*ScanEngine) GetMetrics

func (se *ScanEngine) GetMetrics() *ScanEngineMetrics

func (*ScanEngine) GetPendingTaskCount

func (se *ScanEngine) GetPendingTaskCount() int

func (*ScanEngine) GetShadowCore

func (se *ScanEngine) GetShadowCore() *ShadowCore

func (*ScanEngine) GetTask

func (se *ScanEngine) GetTask(taskID string) *ScanTask

func (*ScanEngine) GetTaskByDeviceKey

func (se *ScanEngine) GetTaskByDeviceKey(deviceKey string) *ScanTask

func (*ScanEngine) GetTasks

func (se *ScanEngine) GetTasks() []*ScanTask

func (*ScanEngine) GetTasksByDeviceKey

func (se *ScanEngine) GetTasksByDeviceKey(deviceKey string) []*ScanTask

func (*ScanEngine) IsRunning added in v0.0.7

func (se *ScanEngine) IsRunning() bool

func (*ScanEngine) OperationalSnapshot added in v0.0.7

func (se *ScanEngine) OperationalSnapshot() map[string]any

func (*ScanEngine) RegisterDriver

func (se *ScanEngine) RegisterDriver(deviceKey string, d driver.Driver)

func (*ScanEngine) RegisterProtocol

func (se *ScanEngine) RegisterProtocol(protocol string, pType ProtocolType)

func (*ScanEngine) RemoveTask

func (se *ScanEngine) RemoveTask(taskID string)

func (*ScanEngine) RemoveTasksByDeviceKey

func (se *ScanEngine) RemoveTasksByDeviceKey(deviceKey string)

func (*ScanEngine) Run

func (se *ScanEngine) Run()

func (*ScanEngine) SetCircuitBreakerEventHandler added in v0.0.7

func (se *ScanEngine) SetCircuitBreakerEventHandler(fn CircuitBreakerEventHandler)

func (*ScanEngine) SetCollectFinalize

func (se *ScanEngine) SetCollectFinalize(fn CollectFinalizeFunc)

func (*ScanEngine) SetIOProfileProvider

func (se *ScanEngine) SetIOProfileProvider(fn IOProfileProvider)

func (*ScanEngine) SetPointDegradation

func (se *ScanEngine) SetPointDegradation(m *PointDegradationManager)

func (*ScanEngine) SetShadowCore

func (se *ScanEngine) SetShadowCore(sc *ShadowCore)

func (*ScanEngine) SetShadowIngress added in v0.0.7

func (se *ScanEngine) SetShadowIngress(si *ShadowIngress)

func (*ScanEngine) Stop

func (se *ScanEngine) Stop()

func (*ScanEngine) UnregisterDriver

func (se *ScanEngine) UnregisterDriver(deviceKey string)

func (*ScanEngine) UpdateTaskDriverConfig added in v0.0.7

func (se *ScanEngine) UpdateTaskDriverConfig(deviceKey string, updates map[string]any)

func (*ScanEngine) UpdateTaskInterval

func (se *ScanEngine) UpdateTaskInterval(deviceKey string, interval time.Duration)

func (*ScanEngine) UpdateTaskPriority

func (se *ScanEngine) UpdateTaskPriority(deviceKey string, priority int)

type ScanEngineAdapter

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

func NewScanEngineAdapter

func NewScanEngineAdapter(scanEngine *ScanEngine) *ScanEngineAdapter

func (*ScanEngineAdapter) GetActiveTaskCount

func (a *ScanEngineAdapter) GetActiveTaskCount() int

func (*ScanEngineAdapter) GetDriver

func (a *ScanEngineAdapter) GetDriver(deviceID string) driver.Driver

func (*ScanEngineAdapter) GetPendingTaskCount

func (a *ScanEngineAdapter) GetPendingTaskCount() int

func (*ScanEngineAdapter) GetTaskStatus

func (a *ScanEngineAdapter) GetTaskStatus(deviceID string) ScanTaskStatus

func (*ScanEngineAdapter) GetTasks

func (a *ScanEngineAdapter) GetTasks() []*ScanTask

func (*ScanEngineAdapter) IsStarted

func (a *ScanEngineAdapter) IsStarted() bool

func (*ScanEngineAdapter) RegisterDevice

func (a *ScanEngineAdapter) RegisterDevice(
	deviceID string,
	protocol string,
	channelDriver driver.Driver,
	channelMu *sync.Mutex,
	ch *model.Channel,
	dev *model.Device,
	interval time.Duration,
	priority int,
) error

func (*ScanEngineAdapter) Start

func (a *ScanEngineAdapter) Start()

func (*ScanEngineAdapter) Stop

func (a *ScanEngineAdapter) Stop()

func (*ScanEngineAdapter) UnregisterDevice

func (a *ScanEngineAdapter) UnregisterDevice(deviceID string)

func (*ScanEngineAdapter) UpdateDeviceDriverConfig added in v0.0.7

func (a *ScanEngineAdapter) UpdateDeviceDriverConfig(deviceID string, updates map[string]any)

func (*ScanEngineAdapter) UpdateDeviceInterval

func (a *ScanEngineAdapter) UpdateDeviceInterval(deviceID string, interval time.Duration)

func (*ScanEngineAdapter) UpdateDevicePriority

func (a *ScanEngineAdapter) UpdateDevicePriority(deviceID string, priority int)

type ScanEngineConfig

type ScanEngineConfig struct {
	TickInterval      time.Duration
	WorkerCount       int
	MaxQueueSize      int
	AntiStarvationSec int
	PriorityLevels    int
	GoroutineLimit    int
	ConnectionLimit   int
	JitterBound       time.Duration
}

type ScanEngineMetrics

type ScanEngineMetrics struct {
	TasksExecuted         atomic.Uint64
	TasksSucceeded        atomic.Uint64
	TasksFailed           atomic.Uint64
	StarvationRescues     atomic.Uint64
	TaskOverdueTotal      atomic.Uint64
	ScanMissDeadlineTotal atomic.Uint64
	ScanDriftMicrosTotal  atomic.Uint64
	ScanDriftSamples      atomic.Uint64
	TotalScanLagMicros    atomic.Uint64
	ScanLagSamples        atomic.Uint64
	MaxScanLagMicros      atomic.Uint64
	IntervalAdjustedTotal atomic.Uint64
	// contains filtered or unexported fields
}

ScanEngineMetrics 调度引擎可观测指标(对标 Kepware Diagnostics)。

func (*ScanEngineMetrics) AdaptiveSlowdownFactor added in v0.0.7

func (m *ScanEngineMetrics) AdaptiveSlowdownFactor() float64

func (*ScanEngineMetrics) AvgLagMs added in v0.0.7

func (m *ScanEngineMetrics) AvgLagMs() float64

func (*ScanEngineMetrics) ChannelSLAWarnings added in v0.0.7

func (m *ScanEngineMetrics) ChannelSLAWarnings(channelID string, cb *DriverCircuitBreaker, deviceKeys []string) []map[string]any

func (*ScanEngineMetrics) ChannelSnapshot added in v0.0.7

func (m *ScanEngineMetrics) ChannelSnapshot(channelID string) map[string]any

func (*ScanEngineMetrics) GlobalFailRate added in v0.0.7

func (m *ScanEngineMetrics) GlobalFailRate() float64

func (*ScanEngineMetrics) RecordDrift added in v0.0.7

func (m *ScanEngineMetrics) RecordDrift(driftMicros int64)

func (*ScanEngineMetrics) RecordDriftForChannel added in v0.0.7

func (m *ScanEngineMetrics) RecordDriftForChannel(channelID string, driftMicros int64)

func (*ScanEngineMetrics) RecordExecute

func (m *ScanEngineMetrics) RecordExecute(success bool, lagMicros int64)

func (*ScanEngineMetrics) RecordExecuteForChannel added in v0.0.7

func (m *ScanEngineMetrics) RecordExecuteForChannel(channelID string, success bool, lagMicros int64)

func (*ScanEngineMetrics) RecordIntervalAdjusted added in v0.0.7

func (m *ScanEngineMetrics) RecordIntervalAdjusted()

func (*ScanEngineMetrics) RecordMissDeadline added in v0.0.7

func (m *ScanEngineMetrics) RecordMissDeadline()

func (*ScanEngineMetrics) RecordMissDeadlineForChannel added in v0.0.7

func (m *ScanEngineMetrics) RecordMissDeadlineForChannel(channelID string)

func (*ScanEngineMetrics) RecordOverdue

func (m *ScanEngineMetrics) RecordOverdue()

func (*ScanEngineMetrics) RecordStarvationRescue

func (m *ScanEngineMetrics) RecordStarvationRescue()

func (*ScanEngineMetrics) ResetWindow added in v0.0.7

func (m *ScanEngineMetrics) ResetWindow()

ResetWindow clears cumulative counters and lag samples for steady-state measurement windows (benchmarks/soak).

func (*ScanEngineMetrics) SLAWarnings added in v0.0.7

func (m *ScanEngineMetrics) SLAWarnings(cb *DriverCircuitBreaker) []map[string]any

func (*ScanEngineMetrics) SetAdaptiveSlowdownFactor added in v0.0.7

func (m *ScanEngineMetrics) SetAdaptiveSlowdownFactor(factor float64)

func (*ScanEngineMetrics) Snapshot

func (m *ScanEngineMetrics) Snapshot() map[string]any

type ScanTask

type ScanTask struct {
	ID                  string
	DeviceKey           string
	ScanClass           string
	Protocol            string
	Interval            time.Duration
	BaseInterval        time.Duration
	NextRun             time.Time
	LastScheduledAt     time.Time
	DeadlineAt          time.Time
	PhaseOffset         time.Duration
	Priority            int
	FailRate            float64
	Status              ScanTaskStatus
	ConsecutiveFailures int
	ConsecutiveSuccess  int
	LastSuccess         time.Time
	LastFailure         time.Time
	PointIDs            []string
	Points              []model.Point

	Params map[string]any
	// contains filtered or unexported fields
}

func (*ScanTask) GetStatus

func (t *ScanTask) GetStatus() ScanTaskStatus

func (*ScanTask) SetStatus

func (t *ScanTask) SetStatus(status ScanTaskStatus)

func (*ScanTask) UpdateNextRun

func (t *ScanTask) UpdateNextRun(interval time.Duration)

type ScanTaskStatus

type ScanTaskStatus int
const (
	ScanTaskStatusIdle ScanTaskStatus = iota
	ScanTaskStatusRunning
	ScanTaskStatusDegraded
	ScanTaskStatusStopped
)

func (ScanTaskStatus) String

func (s ScanTaskStatus) String() string

type SerialQueueManager

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

func NewSerialQueueManager

func NewSerialQueueManager() *SerialQueueManager

func (*SerialQueueManager) QueueDepths added in v0.0.7

func (sqm *SerialQueueManager) QueueDepths() map[string]int

func (*SerialQueueManager) RegisterDriver

func (sqm *SerialQueueManager) RegisterDriver(deviceKey string, d driver.Driver)

func (*SerialQueueManager) RemoveContext

func (sqm *SerialQueueManager) RemoveContext(deviceKey string)

func (*SerialQueueManager) Stop

func (sqm *SerialQueueManager) Stop()

func (*SerialQueueManager) Submit

func (sqm *SerialQueueManager) Submit(task *DriverTask) bool

type SerialWorker

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

type ShadowBridge

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

ShadowBridge 将 ShadowCore 快照变更扇出到 DataPipeline, 使边缘规则、北向推送与历史落库与 UI 影子数据源一致。

func NewShadowBridge

func NewShadowBridge(pipeline *DataPipeline) *ShadowBridge

func (*ShadowBridge) Attach

func (sb *ShadowBridge) Attach(sc *ShadowCore)

Attach 订阅 ShadowCore 变更并推送到 DataPipeline。

type ShadowCore

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

ShadowCore 维护每物理设备唯一的内存态影子设备(全量点位 + 通信画像),不落盘。

func NewShadowCore

func NewShadowCore() *ShadowCore

func NewShadowCoreWithNotifyWorkers added in v0.0.7

func NewShadowCoreWithNotifyWorkers(workers int) *ShadowCore

func (*ShadowCore) ApplyShadowWrites added in v0.0.7

func (sc *ShadowCore) ApplyShadowWrites(msgs []model.ShadowIngressMessage) error

ApplyShadowWrites applies multiple ingress messages under a single lock, emitting one delta notify per device touched.

func (*ShadowCore) CheckConsistency

func (sc *ShadowCore) CheckConsistency(deviceID string, t time.Time) (*model.ConsistencyCheckResult, error)

func (*ShadowCore) ClearAllShadowDevices added in v0.0.7

func (sc *ShadowCore) ClearAllShadowDevices()

ClearAllShadowDevices 清空全部内存态影子设备(含虚拟影子与优化画像)。

func (*ShadowCore) CompareAndSwap

func (sc *ShadowCore) CompareAndSwap(deviceID string, expectedVersion uint64, updates map[string]any) (*model.ShadowWriteResponse, error)

func (*ShadowCore) DeleteShadowDevice

func (sc *ShadowCore) DeleteShadowDevice(deviceID string) error

func (*ShadowCore) GetAllShadowDevices

func (sc *ShadowCore) GetAllShadowDevices() []*model.ShadowDevice

func (*ShadowCore) GetDeviceOptimization

func (sc *ShadowCore) GetDeviceOptimization(deviceID string) map[string]interface{}

GetDeviceOptimization 返回设备 RTT/MTU/Gap 通信画像(微秒 RTT)。

func (*ShadowCore) GetMetrics

func (sc *ShadowCore) GetMetrics() map[string]interface{}

func (*ShadowCore) GetShadowDevice

func (sc *ShadowCore) GetShadowDevice(deviceID string) (*model.ShadowDevice, error)

func (*ShadowCore) GetShadowPoint

func (sc *ShadowCore) GetShadowPoint(deviceID, pointID string) (*model.ShadowPoint, error)

func (*ShadowCore) GetVirtualShadowDevice

func (sc *ShadowCore) GetVirtualShadowDevice(virtualDeviceID string) (*model.VirtualDevice, error)

GetVirtualShadowDevice 返回虚拟影子设备快照。

func (*ShadowCore) GetVirtualShadowPoint

func (sc *ShadowCore) GetVirtualShadowPoint(virtualDeviceID, pointID string) (*model.ShadowPoint, error)

GetVirtualShadowPoint 读取虚拟影子设备单个点位。

func (*ShadowCore) NotifyWorkerCount added in v0.0.7

func (sc *ShadowCore) NotifyWorkerCount() int

func (*ShadowCore) ResolvePublishTarget

func (sc *ShadowCore) ResolvePublishTarget(shadowDeviceID string) (channelID, deviceID string, err error)

ResolvePublishTarget 解析订阅通知中的 channel / device,供 ShadowBridge 与 WebSocket 使用。

func (*ShadowCore) RuntimePointStats added in v0.0.7

func (sc *ShadowCore) RuntimePointStats() (deviceCount, pointCount int)

RuntimePointStats returns in-memory shadow device and point counts for database stats.

func (*ShadowCore) Start

func (sc *ShadowCore) Start()

func (*ShadowCore) Stop

func (sc *ShadowCore) Stop()

func (*ShadowCore) Subscribe

func (sc *ShadowCore) Subscribe(sub ShadowSubscriber)

func (*ShadowCore) UpdateDeviceRTT

func (sc *ShadowCore) UpdateDeviceRTT(deviceID string, rtt int64)

UpdateDeviceRTT 更新设备的RTT数据

func (*ShadowCore) WriteShadowDevice

func (sc *ShadowCore) WriteShadowDevice(msg model.ShadowIngressMessage) (*model.ShadowWriteResponse, error)

func (*ShadowCore) WriteShadowPoint

func (sc *ShadowCore) WriteShadowPoint(req model.ShadowWriteRequest) (*model.ShadowWriteResponse, error)

func (*ShadowCore) WriteVirtualShadowDevice

func (sc *ShadowCore) WriteVirtualShadowDevice(channelID, virtualDeviceID string, points map[string]model.ShadowPoint)

WriteVirtualShadowDevice 将虚拟影子计算结果写入 ShadowCore 并通知订阅者(Pipeline / UI)。

type ShadowDeviceOptimizer

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

ShadowDeviceOptimizer 影子设备优化器,集成RTT、MTU、Gap优化

func NewShadowDeviceOptimizer

func NewShadowDeviceOptimizer() *ShadowDeviceOptimizer

NewShadowDeviceOptimizer 创建影子设备优化器

func (*ShadowDeviceOptimizer) ClearDeviceData

func (sdo *ShadowDeviceOptimizer) ClearDeviceData(deviceID string)

ClearDeviceData 清除设备数据

func (*ShadowDeviceOptimizer) GetAllDevices

func (sdo *ShadowDeviceOptimizer) GetAllDevices() []string

GetAllDevices 获取所有设备的优化数据

func (*ShadowDeviceOptimizer) GetDeviceOptimization

func (sdo *ShadowDeviceOptimizer) GetDeviceOptimization(deviceID string) map[string]interface{}

GetDeviceOptimization 获取设备优化参数

func (*ShadowDeviceOptimizer) GetGapOptimizer

func (sdo *ShadowDeviceOptimizer) GetGapOptimizer() *GapOptimizer

GetGapOptimizer 获取Gap优化器

func (*ShadowDeviceOptimizer) GetMTUManager

func (sdo *ShadowDeviceOptimizer) GetMTUManager() *MTUManager

GetMTUManager 获取MTU管理器

func (*ShadowDeviceOptimizer) GetRTTManager

func (sdo *ShadowDeviceOptimizer) GetRTTManager() *RTTManager

GetRTTManager 获取RTT管理器

func (*ShadowDeviceOptimizer) LogDeviceOptimization

func (sdo *ShadowDeviceOptimizer) LogDeviceOptimization(deviceID string)

LogDeviceOptimization 记录设备优化数据

func (*ShadowDeviceOptimizer) UpdateDeviceRTT

func (sdo *ShadowDeviceOptimizer) UpdateDeviceRTT(deviceID string, rtt int64)

UpdateDeviceRTT 更新设备RTT并触发相关优化

func (*ShadowDeviceOptimizer) UpdateShadowDeviceProfile

func (sdo *ShadowDeviceOptimizer) UpdateShadowDeviceProfile(shadowDevice *model.ShadowDevice)

UpdateShadowDeviceProfile 更新影子设备的通信画像(无条件,供测试与显式刷新)。

func (*ShadowDeviceOptimizer) UpdateShadowDeviceProfileIfNeeded added in v0.0.7

func (sdo *ShadowDeviceOptimizer) UpdateShadowDeviceProfileIfNeeded(deviceID, channelID string, profilePtr **model.DeviceCommunicationProfile) bool

UpdateShadowDeviceProfileIfNeeded 仅在 RTT 变化超过阈值时更新通信画像。 profilePtr 指向当前快照上的 profile 指针;更新时会替换为新克隆。

type ShadowIngress

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

func NewShadowIngress

func NewShadowIngress(sc *ShadowCore, bufferSize int, flushInterval time.Duration) *ShadowIngress

func (*ShadowIngress) GetBufferSize

func (si *ShadowIngress) GetBufferSize() int

func (*ShadowIngress) GetMetrics

func (si *ShadowIngress) GetMetrics() ShadowIngressMetrics

func (*ShadowIngress) Ingest

func (si *ShadowIngress) Ingest(val model.Value) error

func (*ShadowIngress) IngestBatch

func (si *ShadowIngress) IngestBatch(values []model.Value) error

func (*ShadowIngress) IngestDirect

func (si *ShadowIngress) IngestDirect(msg model.ShadowIngressMessage) error

func (*ShadowIngress) Start

func (si *ShadowIngress) Start()

func (*ShadowIngress) Stop

func (si *ShadowIngress) Stop()

type ShadowIngressMetrics

type ShadowIngressMetrics struct {
	TotalMessages   uint64
	TotalPoints     uint64
	FailedMessages  uint64
	BatchFlushes    uint64
	LastProcessTime time.Time
}

type ShadowSubscriber

type ShadowSubscriber func(deviceID string, points map[string]model.ShadowPoint)

type ShadowWriteRingBuffer added in v0.0.7

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

ShadowWriteRingBuffer is a fixed-capacity queue for shadow ingress messages. Producers push message pointers (zero-copy payload); Flush drains and returns the batch for batch apply to ShadowCore.

func NewShadowWriteRingBuffer added in v0.0.7

func NewShadowWriteRingBuffer(capacity int) *ShadowWriteRingBuffer

func (*ShadowWriteRingBuffer) Flush added in v0.0.7

func (*ShadowWriteRingBuffer) Len added in v0.0.7

func (rb *ShadowWriteRingBuffer) Len() int

func (*ShadowWriteRingBuffer) Push added in v0.0.7

type SoakMonitor added in v0.0.7

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

SoakMonitor tracks in-process ScanEngine SLA samples for dashboard soak views.

func NewSoakMonitor added in v0.0.7

func NewSoakMonitor(cm *ChannelManager) *SoakMonitor

func (*SoakMonitor) Snapshot added in v0.0.7

func (sm *SoakMonitor) Snapshot() map[string]any

func (*SoakMonitor) Start added in v0.0.7

func (sm *SoakMonitor) Start()

func (*SoakMonitor) Stop added in v0.0.7

func (sm *SoakMonitor) Stop()

type StateChangeCallback

type StateChangeCallback func(deviceID string, oldState, newState NodeState)

==================== 通信管理模板 ==================== CommunicationManageTemplate 管理设备采集的状态机和重试策略

type StoreForwardManager

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

StoreForwardManager 统一 Store & Forward:南向 values 与北向 NorthboundCache。

func NewStoreForwardManager

func NewStoreForwardManager(store *storage.Storage, policy StoreForwardPolicy) *StoreForwardManager

func (*StoreForwardManager) CacheNorthbound

func (m *StoreForwardManager) CacheNorthbound(configID string, data []byte) error

CacheNorthbound 缓存北向离线消息(复用 NorthboundCache bucket)。

func (*StoreForwardManager) HandleBatch

func (m *StoreForwardManager) HandleBatch(batch []model.Value)

HandleBatch 作为 Pipeline 批量处理器缓存南向采集值。

func (*StoreForwardManager) ReplaySouthbound

func (m *StoreForwardManager) ReplaySouthbound(limit int) []model.Value

ReplaySouthbound 回放最近缓存的南向值。

func (*StoreForwardManager) SetStorage

func (m *StoreForwardManager) SetStorage(store *storage.Storage)

type StoreForwardPolicy

type StoreForwardPolicy struct {
	MaxSouthboundRecords int
	MaxNorthboundPerID   int
}

StoreForwardPolicy 统一南向历史与北向离线缓存策略。

type SystemManager

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

func NewSystemManager

func NewSystemManager(cfg *config.Config) *SystemManager

func (*SystemManager) AddRoute added in v0.0.7

func (sm *SystemManager) AddRoute(route model.StaticRoute) error

func (*SystemManager) DeleteRoute added in v0.0.7

func (sm *SystemManager) DeleteRoute(route model.StaticRoute) error

func (*SystemManager) GetConfig

func (sm *SystemManager) GetConfig() model.SystemConfig

func (*SystemManager) GetHostnameAccessStatus added in v0.0.7

func (sm *SystemManager) GetHostnameAccessStatus() network.HostnameAccessStatus

func (*SystemManager) GetNetworkBackendInfo added in v0.0.7

func (sm *SystemManager) GetNetworkBackendInfo() network.BackendInfo

func (*SystemManager) GetNetworkInterfaces

func (sm *SystemManager) GetNetworkInterfaces() ([]model.NetworkInterface, error)

func (*SystemManager) GetRoutes

func (sm *SystemManager) GetRoutes() ([]model.StaticRoute, error)

func (*SystemManager) GetUser

func (sm *SystemManager) GetUser(username string) (*model.UserConfig, bool)

func (*SystemManager) SetConfigManager

func (sm *SystemManager) SetConfigManager(cm *config.ConfigManager)

SetConfigManager 注入配置管理器,使系统/用户配置持久化到数据库。

func (*SystemManager) UpdateConfig

func (sm *SystemManager) UpdateConfig(newConfig model.SystemConfig) error

func (*SystemManager) UpdateUserPassword

func (sm *SystemManager) UpdateUserPassword(username, newPassword string) error

func (*SystemManager) ValidateConnectivity added in v0.0.7

func (sm *SystemManager) ValidateConnectivity(targets []model.ConnectivityTarget) (model.ConnectivityReport, error)

type TCPProtocolAdapter

type TCPProtocolAdapter struct{}

TCPProtocolAdapter TCP协议适配器

func NewTCPProtocolAdapter

func NewTCPProtocolAdapter() *TCPProtocolAdapter

NewTCPProtocolAdapter 创建TCP协议适配器

func (*TCPProtocolAdapter) AdjustParameters

func (a *TCPProtocolAdapter) AdjustParameters(deviceID string, params map[string]interface{}) map[string]interface{}

AdjustParameters 调整参数

func (*TCPProtocolAdapter) GetDefaultParameters

func (a *TCPProtocolAdapter) GetDefaultParameters() map[string]interface{}

GetDefaultParameters 获取默认参数

func (*TCPProtocolAdapter) GetProtocolType

func (a *TCPProtocolAdapter) GetProtocolType() string

GetProtocolType 获取协议类型

func (*TCPProtocolAdapter) ValidateParameters

func (a *TCPProtocolAdapter) ValidateParameters(params map[string]interface{}) error

ValidateParameters 验证参数

type TagEntry

type TagEntry struct {
	ChannelID string
	DeviceID  string
	PointID   string
	Name      string
	Alias     string
	EU        string
	Scale     float64
	Offset    float64
	ScanClass string
}

TagEntry 表示 Tag 数据库中的标准化点位元数据。

type TagRegistry

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

TagRegistry 统一点位 ID、别名、工程单位与缩放因子。

func NewTagRegistry

func NewTagRegistry() *TagRegistry

func (*TagRegistry) ApplyScaling

func (tr *TagRegistry) ApplyScaling(v model.Value) model.Value

func (*TagRegistry) Count

func (tr *TagRegistry) Count() int

func (*TagRegistry) Get

func (tr *TagRegistry) Get(channelID, deviceID, pointID string) (TagEntry, bool)

func (*TagRegistry) RegisterFromDevice

func (tr *TagRegistry) RegisterFromDevice(channelID string, dev *model.Device)

func (*TagRegistry) Resolve

func (tr *TagRegistry) Resolve(alias string) (TagEntry, error)

func (*TagRegistry) UnregisterDevice

func (tr *TagRegistry) UnregisterDevice(channelID, deviceID string)

type ThrottleContext added in v0.0.7

type ThrottleContext struct {
	DeviceKey   string
	Protocol    string
	DeviceLimit int
}

type TokenBucket

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

func NewTokenBucket

func NewTokenBucket(rate float64, capacity float64) *TokenBucket

func (*TokenBucket) Allow

func (tb *TokenBucket) Allow() bool

type VirtualShadowEngine

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

func NewVirtualShadowEngine

func NewVirtualShadowEngine(sc *ShadowCore) *VirtualShadowEngine

func (*VirtualShadowEngine) CreateVirtualDevice

func (vse *VirtualShadowEngine) CreateVirtualDevice(deviceID, channelID string, formulaPoints map[string]string) error

func (*VirtualShadowEngine) DeleteVirtualDevice

func (vse *VirtualShadowEngine) DeleteVirtualDevice(deviceID string) error

func (*VirtualShadowEngine) GetAllVirtualDevices

func (vse *VirtualShadowEngine) GetAllVirtualDevices() []*model.VirtualDevice

func (*VirtualShadowEngine) GetDependencyGraph

func (vse *VirtualShadowEngine) GetDependencyGraph() map[string][]string

func (*VirtualShadowEngine) GetMetrics

func (vse *VirtualShadowEngine) GetMetrics() map[string]interface{}

func (*VirtualShadowEngine) GetVirtualDevice

func (vse *VirtualShadowEngine) GetVirtualDevice(deviceID string) (*model.VirtualDevice, error)

func (*VirtualShadowEngine) RecomputeDevice

func (vse *VirtualShadowEngine) RecomputeDevice(deviceID string)

RecomputeDevice 同步重算虚拟设备点位(供 API 刷新当前值)。

func (*VirtualShadowEngine) ReplaceVirtualDevice

func (vse *VirtualShadowEngine) ReplaceVirtualDevice(deviceID, channelID string, formulaPoints map[string]string) error

ReplaceVirtualDevice 全量替换虚拟设备公式并触发重算。

func (*VirtualShadowEngine) UpdateFormula

func (vse *VirtualShadowEngine) UpdateFormula(deviceID, pointID, newFormula string) error

type VirtualShadowManager

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

VirtualShadowManager 管理虚拟影子设备配置与运行时引擎。

func (*VirtualShadowManager) Create

func (*VirtualShadowManager) Delete

func (m *VirtualShadowManager) Delete(id string) error

func (*VirtualShadowManager) Engine

func (*VirtualShadowManager) Get

func (*VirtualShadowManager) GetRuntime

func (*VirtualShadowManager) List

func (*VirtualShadowManager) ListDevicePointSources

func (m *VirtualShadowManager) ListDevicePointSources(channelID, deviceID, query string) ([]model.PointSourceRef, error)

ListDevicePointSources 返回指定设备的可选点位(支持点位级过滤)。

func (*VirtualShadowManager) ListPointSources

func (m *VirtualShadowManager) ListPointSources() []model.PointSourceRef

func (*VirtualShadowManager) Load

func (*VirtualShadowManager) RefreshRuntime

RefreshRuntime 触发重算后返回最新运行时快照。

func (*VirtualShadowManager) ReloadAll

func (m *VirtualShadowManager) ReloadAll()

ReloadAll 在通道/设备/点位拓扑变更后,重新应用所有已启用的虚拟影子设备。

func (*VirtualShadowManager) SearchSourceDevices

func (m *VirtualShadowManager) SearchSourceDevices(query, channelID string, limit int) []model.SourceDeviceSummary

SearchSourceDevices 按设备名称/ID/通道模糊检索源设备(不含点位明细)。

func (*VirtualShadowManager) Update

type Worker

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

func NewWorker

func NewWorker(id int, taskQueue chan func(), stopCh chan struct{}, wg *sync.WaitGroup) *Worker

type WorkerPool

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

func NewWorkerPool

func NewWorkerPool(workerCount int) *WorkerPool

func (*WorkerPool) ActiveCount

func (wp *WorkerPool) ActiveCount() int

func (*WorkerPool) PendingCount

func (wp *WorkerPool) PendingCount() int

func (*WorkerPool) SetWorkerCount

func (wp *WorkerPool) SetWorkerCount(count int)

func (*WorkerPool) Start

func (wp *WorkerPool) Start()

func (*WorkerPool) Stop

func (wp *WorkerPool) Stop()

func (*WorkerPool) Submit

func (wp *WorkerPool) Submit(task func()) bool

func (*WorkerPool) WaitForIdle

func (wp *WorkerPool) WaitForIdle(timeout time.Duration) bool

Jump to

Keyboard shortcuts

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