Files
meshtastic_mqtt_server/internal/store/discard_store.go
T

48 lines
1.4 KiB
Go

package store
import (
"encoding/base64"
"encoding/json"
"fmt"
"time"
)
func (s *Store) InsertDiscardDetails(record map[string]any, raw []byte, clientInfo MQTTClientInfo) error {
details, err := discardDetailsFromRecord(record, raw, clientInfo)
if err != nil {
return err
}
if err := s.db.Create(details).Error; err != nil {
return fmt.Errorf("insert discard_details: %w", err)
}
return nil
}
func discardDetailsFromRecord(record map[string]any, raw []byte, clientInfo MQTTClientInfo) (*DiscardDetailsRecord, error) {
contentJSON, err := json.Marshal(record)
if err != nil {
return nil, fmt.Errorf("encode discard_details content_json: %w", err)
}
return &DiscardDetailsRecord{
Topic: stringValue(record["topic"]),
Error: stringValue(record["error"]),
PayloadLen: int64(len(raw)),
RawBase64: base64.StdEncoding.EncodeToString(raw),
ContentJSON: string(contentJSON),
MQTTClientID: NullableStringValue(clientInfo.ClientID),
MQTTUsername: NullableStringValue(clientInfo.Username),
MQTTListener: NullableStringValue(clientInfo.Listener),
MQTTRemoteAddr: NullableStringValue(clientInfo.RemoteAddr),
MQTTRemoteHost: NullableStringValue(clientInfo.RemoteHost),
MQTTRemotePort: NullableStringValue(clientInfo.RemotePort),
CreatedAt: time.Now(),
}, nil
}
func stringValue(value any) string {
if s := NullableStringValue(value); s != nil {
return *s
}
return ""
}