Skip to content

Commit 5843bee

Browse files
authored
fix(audio): add diagnostic logging for per-source EQ save flow (#2908)
* fix(audio): add diagnostic logging for per-source EQ save flow (#2849) Add debug-level logging at three points in the per-source equalizer save chain to help diagnose reports where per-source EQ filters are not persisting through the Sound Card settings UI. Backend (settings_audio.go): - Log each source's per-source EQ state (nil/enabled/filter count) during every settings save, showing what the backend received. Frontend (SoundCardCard.svelte): - Log EQ state in handleEqualizerUpdate (toggle/filter changes) - Log final transformed EQ in saveEdit before submitting to store Frontend (AudioSettingsPage.svelte): - Log each source's EQ state in updateAudioSources as data enters the settings store All logging is debug-level and only visible when debug mode is enabled, so there is no impact on production. * fix: address review feedback - Remove noisy handleEqualizerUpdate log (fires on every slider input) - Gate per-source EQ logging behind EQ change detection - Redact source names from backend logs (PII risk)
1 parent 4017bdb commit 5843bee

3 files changed

Lines changed: 34 additions & 1 deletion

File tree

frontend/src/lib/desktop/components/forms/SoundCardCard.svelte

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import { slide } from 'svelte/transition';
2222
import { t } from '$lib/i18n';
2323
import { cn } from '$lib/utils/cn';
24+
import { loggers } from '$lib/utils/logger';
2425
import SelectDropdown from './SelectDropdown.svelte';
2526
import InlineSlider from './InlineSlider.svelte';
2627
import QuietHoursEditor from './QuietHoursEditor.svelte';
@@ -47,6 +48,8 @@
4748
}>;
4849
}
4950
51+
const logger = loggers.audio;
52+
5053
// Default model ID — BirdNET v2.4 is the built-in default
5154
const DEFAULT_MODEL_ID = 'birdnet';
5255
@@ -156,6 +159,16 @@
156159
quietHours: editQuietHours,
157160
};
158161
162+
logger.debug('SoundCardCard saveEdit', {
163+
component: 'SoundCardCard',
164+
action: 'saveEdit',
165+
sourceName: trimmedName,
166+
eqEnabled: editEqualizer.enabled,
167+
eqFilterCount: editEqualizer.filters.length,
168+
transformedEqPresent: transformedEqualizer !== undefined,
169+
transformedFilterCount: transformedEqualizer?.filters?.length ?? 0,
170+
});
171+
159172
const success = onUpdate(updated);
160173
if (success) {
161174
isEditing = false;

frontend/src/lib/desktop/features/settings/pages/AudioSettingsPage.svelte

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,15 @@
415415
416416
// Update handlers
417417
function updateAudioSources(sources: AudioSourceConfig[]) {
418+
for (const src of sources) {
419+
logger.debug('updateAudioSources', {
420+
component: 'AudioSettingsPage',
421+
sourceName: src.name,
422+
eqPresent: src.equalizer !== undefined,
423+
eqEnabled: src.equalizer?.enabled,
424+
eqFilterCount: src.equalizer?.filters?.length ?? 0,
425+
});
426+
}
418427
settingsActions.updateSection('realtime', {
419428
audio: { ...$audioSettings!, sources },
420429
});

internal/api/v2/settings_audio.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,8 +269,19 @@ func (c *Controller) handleAudioSettingsChanges(oldSettings, currentSettings *co
269269
perSourceEQChanged := perSourceEqualizerChanged(oldSettings, currentSettings)
270270
perStreamEQChanged := perStreamEqualizerChanged(oldSettings, currentSettings)
271271
nameChanged := srcNameChanged || strmNameChanged
272+
272273
if globalEQChanged || perSourceEQChanged || perStreamEQChanged || nameChanged {
273-
c.Debug("Audio equalizer settings changed, updating filter chains")
274+
c.Debug("Audio equalizer settings changed (global=%v, perSource=%v, perStream=%v, nameChanged=%v)",
275+
globalEQChanged, perSourceEQChanged, perStreamEQChanged, nameChanged)
276+
for i := range currentSettings.Realtime.Audio.Sources {
277+
src := &currentSettings.Realtime.Audio.Sources[i]
278+
if src.Equalizer != nil {
279+
c.Debug("Source %d: per-source EQ enabled=%v, filters=%d",
280+
i, src.Equalizer.Enabled, len(src.Equalizer.Filters))
281+
} else {
282+
c.Debug("Source %d: per-source EQ is nil (using global)", i)
283+
}
284+
}
274285
if err := c.handleEqualizerChange(currentSettings); err != nil {
275286
c.Debug("Failed to update EQ filter chains: %v", err)
276287
}

0 commit comments

Comments
 (0)