Доработка документации
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
// Package pipe читает поток байт GPIO из именованного канала (FIFO) и раздаёт
|
||||
// их потребителям: кольцевому буферу, бинарному и текстовым логгерам, watchdog.
|
||||
package pipe
|
||||
|
||||
import (
|
||||
@@ -10,6 +12,10 @@ import (
|
||||
"gpio-monitor/internal/logger"
|
||||
)
|
||||
|
||||
// PipeReader — единственный «производитель» данных в системе: следит за FIFO,
|
||||
// переподключается при обрывах и раздаёт каждый принятый байт потребителям.
|
||||
// Ведёт машину состояний пайпа (unknown/found/not_found/error/disconnected)
|
||||
// и пишет события смены состояния без дублей.
|
||||
type PipeReader struct {
|
||||
buf *adapter.RingBuffer
|
||||
dataLogger *logger.RotatingLogger
|
||||
@@ -31,6 +37,8 @@ type PipeReader struct {
|
||||
lastLoggedState string // для отслеживания изменений
|
||||
}
|
||||
|
||||
// NewPipeReader создаёт читателя с настройками анти-спама из config.
|
||||
// Любой из потребителей (dataLogger, humanLogger, monitor, eventLog) может быть nil.
|
||||
func NewPipeReader(
|
||||
buf *adapter.RingBuffer,
|
||||
dataLogger *logger.RotatingLogger,
|
||||
@@ -63,6 +71,9 @@ func (pr *PipeReader) logStateChange(newState string, eventName string) {
|
||||
}
|
||||
}
|
||||
|
||||
// Start запускает чтение pipePath в отдельной горутине и сразу возвращается.
|
||||
// Если FIFO отсутствует — ждёт его появления (проверка каждые 2 с); при обрыве
|
||||
// чтения переоткрывает файл через 1 с. Останавливается по отмене ctx.
|
||||
func (pr *PipeReader) Start(ctx context.Context, pipePath string) {
|
||||
go func() {
|
||||
buffer := make([]byte, 4096)
|
||||
@@ -184,6 +195,8 @@ func (pr *PipeReader) Start(ctx context.Context, pipePath string) {
|
||||
}()
|
||||
}
|
||||
|
||||
// handleAlert пишет алерт превышения (count > 10) в event- и human-логи,
|
||||
// не чаще одного раза в alertCooldownSec для одинакового значения count.
|
||||
func (pr *PipeReader) handleAlert(data logger.GPIOData, timestamp time.Time) {
|
||||
// Anti-spam: не чаще 1 алерта в N секунд для одинакового количества
|
||||
key := data.Count
|
||||
|
||||
Reference in New Issue
Block a user