chore(log): add serialLogger

This commit is contained in:
Siyuan Miao 2025-04-11 07:56:18 +02:00
parent 48a917fd76
commit 612c50bfe2
2 changed files with 34 additions and 14 deletions

1
log.go
View File

@ -53,6 +53,7 @@ var (
watchdogLogger = getLogger("watchdog") watchdogLogger = getLogger("watchdog")
websecureLogger = getLogger("websecure") websecureLogger = getLogger("websecure")
otaLogger = getLogger("ota") otaLogger = getLogger("ota")
serialLogger = getLogger("serial")
// external components // external components
ginLogger = getLogger("gin") ginLogger = getLogger("gin")
) )

View File

@ -35,17 +35,19 @@ var (
) )
func runATXControl() { func runATXControl() {
scopedLogger := serialLogger.With().Str("service", "atx_control").Logger()
reader := bufio.NewReader(port) reader := bufio.NewReader(port)
for { for {
line, err := reader.ReadString('\n') line, err := reader.ReadString('\n')
if err != nil { if err != nil {
logger.Warn().Err(err).Msg("Error reading from serial port") scopedLogger.Warn().Err(err).Msg("Error reading from serial port")
return return
} }
// Each line should be 4 binary digits + newline // Each line should be 4 binary digits + newline
if len(line) != 5 { if len(line) != 5 {
logger.Warn().Int("length", len(line)).Msg("Invalid line length") scopedLogger.Warn().Int("length", len(line)).Msg("Invalid line length")
continue continue
} }
@ -66,7 +68,12 @@ func runATXControl() {
newLedPWRState != ledPWRState || newLedPWRState != ledPWRState ||
newBtnRSTState != btnRSTState || newBtnRSTState != btnRSTState ||
newBtnPWRState != btnPWRState { newBtnPWRState != btnPWRState {
logger.Debug().Bool("hdd", newLedHDDState).Bool("pwr", newLedPWRState).Bool("rst", newBtnRSTState).Bool("pwr", newBtnPWRState).Msg("Status changed") scopedLogger.Debug().
Bool("hdd", newLedHDDState).
Bool("pwr", newLedPWRState).
Bool("rst", newBtnRSTState).
Bool("pwr", newBtnPWRState).
Msg("Status changed")
// Update states // Update states
ledHDDState = newLedHDDState ledHDDState = newLedHDDState
@ -133,45 +140,46 @@ func unmountDCControl() error {
var dcState DCPowerState var dcState DCPowerState
func runDCControl() { func runDCControl() {
scopedLogger := serialLogger.With().Str("service", "dc_control").Logger()
reader := bufio.NewReader(port) reader := bufio.NewReader(port)
for { for {
line, err := reader.ReadString('\n') line, err := reader.ReadString('\n')
if err != nil { if err != nil {
logger.Warn().Err(err).Msg("Error reading from serial port") scopedLogger.Warn().Err(err).Msg("Error reading from serial port")
return return
} }
// Split the line by semicolon // Split the line by semicolon
parts := strings.Split(strings.TrimSpace(line), ";") parts := strings.Split(strings.TrimSpace(line), ";")
if len(parts) != 4 { if len(parts) != 4 {
logger.Warn().Str("line", line).Msg("Invalid line") scopedLogger.Warn().Str("line", line).Msg("Invalid line")
continue continue
} }
// Parse new states // Parse new states
powerState, err := strconv.Atoi(parts[0]) powerState, err := strconv.Atoi(parts[0])
if err != nil { if err != nil {
logger.Warn().Err(err).Msg("Invalid power state") scopedLogger.Warn().Err(err).Msg("Invalid power state")
continue continue
} }
dcState.IsOn = powerState == 1 dcState.IsOn = powerState == 1
milliVolts, err := strconv.ParseFloat(parts[1], 64) milliVolts, err := strconv.ParseFloat(parts[1], 64)
if err != nil { if err != nil {
logger.Warn().Err(err).Msg("Invalid voltage") scopedLogger.Warn().Err(err).Msg("Invalid voltage")
continue continue
} }
volts := milliVolts / 1000 // Convert mV to V volts := milliVolts / 1000 // Convert mV to V
milliAmps, err := strconv.ParseFloat(parts[2], 64) milliAmps, err := strconv.ParseFloat(parts[2], 64)
if err != nil { if err != nil {
logger.Warn().Err(err).Msg("Invalid current") scopedLogger.Warn().Err(err).Msg("Invalid current")
continue continue
} }
amps := milliAmps / 1000 // Convert mA to A amps := milliAmps / 1000 // Convert mA to A
milliWatts, err := strconv.ParseFloat(parts[3], 64) milliWatts, err := strconv.ParseFloat(parts[3], 64)
if err != nil { if err != nil {
logger.Warn().Err(err).Msg("Invalid power") scopedLogger.Warn().Err(err).Msg("Invalid power")
continue continue
} }
watts := milliWatts / 1000 // Convert mW to W watts := milliWatts / 1000 // Convert mW to W
@ -225,12 +233,19 @@ func reopenSerialPort() error {
var err error var err error
port, err = serial.Open(serialPortPath, defaultMode) port, err = serial.Open(serialPortPath, defaultMode)
if err != nil { if err != nil {
logger.Warn().Err(err).Msg("Error opening serial port") serialLogger.Error().
Err(err).
Str("path", serialPortPath).
Interface("mode", defaultMode).
Msg("Error opening serial port")
} }
return nil return nil
} }
func handleSerialChannel(d *webrtc.DataChannel) { func handleSerialChannel(d *webrtc.DataChannel) {
scopedLogger := serialLogger.With().
Uint16("data_channel_id", *d.ID()).Logger()
d.OnOpen(func() { d.OnOpen(func() {
go func() { go func() {
buf := make([]byte, 1024) buf := make([]byte, 1024)
@ -238,13 +253,13 @@ func handleSerialChannel(d *webrtc.DataChannel) {
n, err := port.Read(buf) n, err := port.Read(buf)
if err != nil { if err != nil {
if err != io.EOF { if err != io.EOF {
logger.Warn().Err(err).Msg("Failed to read from serial port") scopedLogger.Warn().Err(err).Msg("Failed to read from serial port")
} }
break break
} }
err = d.Send(buf[:n]) err = d.Send(buf[:n])
if err != nil { if err != nil {
logger.Warn().Err(err).Msg("Failed to send serial output") scopedLogger.Warn().Err(err).Msg("Failed to send serial output")
break break
} }
} }
@ -257,11 +272,15 @@ func handleSerialChannel(d *webrtc.DataChannel) {
} }
_, err := port.Write(msg.Data) _, err := port.Write(msg.Data)
if err != nil { if err != nil {
logger.Warn().Err(err).Msg("Failed to write to serial") scopedLogger.Warn().Err(err).Msg("Failed to write to serial")
} }
}) })
d.OnClose(func() { d.OnError(func(err error) {
scopedLogger.Warn().Err(err).Msg("Serial channel error")
})
d.OnClose(func() {
scopedLogger.Info().Msg("Serial channel closed")
}) })
} }