feat:data debug config.
This commit is contained in:
+16
-7
@@ -128,13 +128,13 @@ func (l *Listener) connect() error {
|
||||
|
||||
func (l *Listener) subscribe(client mqtt.Client) error {
|
||||
var topics []string
|
||||
if l.cfg.EnableMeasurementSubscriptions {
|
||||
topics = append(topics,
|
||||
fmt.Sprintf("/whgw/v2/region/%s/measurement/band/+/hr", l.cfg.Region),
|
||||
fmt.Sprintf("/whgw/v2/region/%s/measurement/band/+/step", l.cfg.Region),
|
||||
fmt.Sprintf("/whgw/v2/region/%s/gateway/+/status", l.cfg.Region),
|
||||
)
|
||||
}
|
||||
// Measurement topics stay subscribed so runtime config changes take effect
|
||||
// immediately without requiring an MQTT reconnect.
|
||||
topics = append(topics,
|
||||
fmt.Sprintf("/whgw/v2/region/%s/measurement/band/+/hr", l.cfg.Region),
|
||||
fmt.Sprintf("/whgw/v2/region/%s/measurement/band/+/step", l.cfg.Region),
|
||||
fmt.Sprintf("/whgw/v2/region/%s/gateway/+/status", l.cfg.Region),
|
||||
)
|
||||
if l.cfg.EnableTrainingEventSubscription {
|
||||
topics = append(topics, "/whgw/v2/region/test/+/+")
|
||||
}
|
||||
@@ -180,12 +180,21 @@ func (l *Listener) handleMessage(_ mqtt.Client, msg mqtt.Message) {
|
||||
|
||||
switch payload := packet.Choice.(type) {
|
||||
case *whgw_hrpb.GatewaySlaveOutCloudMasterInMsg_NtfHrMeasurement:
|
||||
if !GetListenerStorageConfig().Enabled {
|
||||
return
|
||||
}
|
||||
record := buildHeartRateRecord(payload.NtfHrMeasurement, msg.Topic(), now)
|
||||
l.enqueue(&record)
|
||||
case *whgw_hrpb.GatewaySlaveOutCloudMasterInMsg_NtfStepCountMeasurement:
|
||||
if !GetListenerStorageConfig().Enabled {
|
||||
return
|
||||
}
|
||||
record := buildStepCountRecord(payload.NtfStepCountMeasurement, msg.Topic(), now)
|
||||
l.enqueue(&record)
|
||||
case *whgw_hrpb.GatewaySlaveOutCloudMasterInMsg_NtfGatewayStatus:
|
||||
if !GetListenerStorageConfig().Enabled {
|
||||
return
|
||||
}
|
||||
record := buildGatewayStatusRecord(payload.NtfGatewayStatus, msg.Topic(), now)
|
||||
l.enqueue(&record)
|
||||
default:
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
package mqtt
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"hr_receiver/models"
|
||||
"sync/atomic"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type ListenerStorageConfig struct {
|
||||
Enabled bool `json:"enabled"`
|
||||
ExpireDays int `json:"expireDays"`
|
||||
DeleteExpired bool `json:"deleteExpired"`
|
||||
}
|
||||
|
||||
var listenerStorageConfig atomic.Value
|
||||
|
||||
func InitListenerStorageConfig(db *gorm.DB) error {
|
||||
cfg, err := loadListenerStorageConfig(db)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
storeListenerStorageConfig(cfg)
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetListenerStorageConfig() ListenerStorageConfig {
|
||||
if cfg, ok := listenerStorageConfig.Load().(ListenerStorageConfig); ok {
|
||||
return normalizeListenerStorageConfig(cfg)
|
||||
}
|
||||
return normalizeListenerStorageConfig(ListenerStorageConfig{
|
||||
Enabled: true,
|
||||
ExpireDays: models.DefaultMqttMeasurementExpireDays,
|
||||
DeleteExpired: true,
|
||||
})
|
||||
}
|
||||
|
||||
func UpdateListenerStorageConfig(db *gorm.DB, cfg ListenerStorageConfig) (ListenerStorageConfig, error) {
|
||||
cfg = normalizeListenerStorageConfig(cfg)
|
||||
if cfg.ExpireDays <= 0 {
|
||||
return ListenerStorageConfig{}, fmt.Errorf("expireDays must be greater than 0")
|
||||
}
|
||||
|
||||
record := models.MqttListenerSetting{
|
||||
Model: gorm.Model{ID: models.MqttListenerSettingSingletonID},
|
||||
Enabled: cfg.Enabled,
|
||||
ExpireDays: cfg.ExpireDays,
|
||||
DeleteExpired: cfg.DeleteExpired,
|
||||
}
|
||||
if err := db.Save(&record).Error; err != nil {
|
||||
return ListenerStorageConfig{}, err
|
||||
}
|
||||
storeListenerStorageConfig(cfg)
|
||||
return cfg, nil
|
||||
}
|
||||
|
||||
func loadListenerStorageConfig(db *gorm.DB) (ListenerStorageConfig, error) {
|
||||
var record models.MqttListenerSetting
|
||||
if err := db.First(&record, models.MqttListenerSettingSingletonID).Error; err != nil {
|
||||
return ListenerStorageConfig{}, err
|
||||
}
|
||||
return normalizeListenerStorageConfig(ListenerStorageConfig{
|
||||
Enabled: record.Enabled,
|
||||
ExpireDays: record.ExpireDays,
|
||||
DeleteExpired: record.DeleteExpired,
|
||||
}), nil
|
||||
}
|
||||
|
||||
func storeListenerStorageConfig(cfg ListenerStorageConfig) {
|
||||
listenerStorageConfig.Store(normalizeListenerStorageConfig(cfg))
|
||||
}
|
||||
|
||||
func normalizeListenerStorageConfig(cfg ListenerStorageConfig) ListenerStorageConfig {
|
||||
if cfg.ExpireDays <= 0 {
|
||||
cfg.ExpireDays = models.DefaultMqttMeasurementExpireDays
|
||||
}
|
||||
return cfg
|
||||
}
|
||||
Reference in New Issue
Block a user