Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 0 additions & 6 deletions cmd/api/settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,6 @@ func loadingSettings(mgr *settings.Settings, cfg *config.ServiceParameters) erro
return fmt.Errorf("failed to add %s to settings: %w", settings.ServiceMetrics, err)
}
}
// Check if service settings for environments refresh is ready
if !mgr.IsValue(config.ServiceAPI, settings.RefreshEnvs, settings.NoEnvironmentID) {
if err := mgr.NewIntegerValue(config.ServiceAPI, settings.RefreshEnvs, int64(defaultRefresh), settings.NoEnvironmentID); err != nil {
return fmt.Errorf("failed to add %s to settings: %w", settings.RefreshEnvs, err)
}
}
// Check if service settings for settings refresh is ready
if !mgr.IsValue(config.ServiceAPI, settings.RefreshSettings, settings.NoEnvironmentID) {
if err := mgr.NewIntegerValue(config.ServiceAPI, settings.RefreshSettings, int64(defaultRefresh), settings.NoEnvironmentID); err != nil {
Expand Down
26 changes: 26 additions & 0 deletions cmd/api/settings_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package main

import (
"testing"

"github.com/jmpsec/osctrl/pkg/config"
"github.com/jmpsec/osctrl/pkg/settings"
"github.com/stretchr/testify/require"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)

func TestLoadingSettingsDoesNotSeedRefreshEnvs(t *testing.T) {
db, err := gorm.Open(sqlite.Open("file:"+t.Name()+"?mode=memory&cache=shared"), &gorm.Config{})
require.NoError(t, err)
mgr := settings.NewSettings(db)

require.NoError(t, loadingSettings(mgr, &config.ServiceParameters{
Service: &config.YAMLConfigurationService{},
Logger: &config.YAMLConfigurationLogger{},
Carver: &config.YAMLConfigurationCarver{},
}))

_, err = mgr.RetrieveValue(config.ServiceAPI, "refresh_envs", settings.NoEnvironmentID)
require.Error(t, err)
}
6 changes: 0 additions & 6 deletions cmd/tls/settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,6 @@ func loadingSettings(mgr *settings.Settings, cfg *config.ServiceParameters) erro
return fmt.Errorf("failed to add %s to configuration: %w", settings.AcceleratedSeconds, err)
}
}
// Check if service settings for environments refresh is ready
if !mgr.IsValue(config.ServiceTLS, settings.RefreshEnvs, settings.NoEnvironmentID) {
if err := mgr.NewIntegerValue(config.ServiceTLS, settings.RefreshEnvs, int64(defaultRefresh), settings.NoEnvironmentID); err != nil {
return fmt.Errorf("failed to add %s to configuration: %w", settings.RefreshEnvs, err)
}
}
// Check if service settings for enroll/remove oneliner links is ready
if !mgr.IsValue(config.ServiceTLS, settings.OnelinerExpiration, settings.NoEnvironmentID) {
if err := mgr.NewBooleanValue(config.ServiceTLS, settings.OnelinerExpiration, defaultOnelinerExpiration, settings.NoEnvironmentID); err != nil {
Expand Down
15 changes: 15 additions & 0 deletions cmd/tls/settings_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,18 @@ func TestLoadingSettingsDefaultsAcceleratedSecondsToFive(t *testing.T) {
require.NoError(t, err)
require.Equal(t, int64(5), got)
}

func TestLoadingSettingsDoesNotSeedRefreshEnvs(t *testing.T) {
db, err := gorm.Open(sqlite.Open("file:"+t.Name()+"?mode=memory&cache=shared"), &gorm.Config{})
require.NoError(t, err)
mgr := settings.NewSettings(db)

require.NoError(t, loadingSettings(mgr, &config.ServiceParameters{
Service: &config.YAMLConfigurationService{},
Logger: &config.YAMLConfigurationLogger{},
Carver: &config.YAMLConfigurationCarver{},
}))

_, err = mgr.RetrieveValue(config.ServiceTLS, "refresh_envs", settings.NoEnvironmentID)
require.Error(t, err)
}
14 changes: 14 additions & 0 deletions frontend/src/features/settings/SettingsPage.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,20 @@ describe('SettingsPage', () => {
expect(screen.getByText('NodeDashboard')).toBeInTheDocument();
});

it('hides stale refresh_envs rows for tls and api settings', async () => {
mockList.mockResolvedValue([
makeSetting({ ID: 1, Name: 'refresh_envs', Service: 'tls', Info: 'legacy env refresh interval' }),
makeSetting({ ID: 2, Name: 'accelerated_seconds', Service: 'tls', Info: 'Console acceleration' }),
]);

renderWithProviders(makeTestRouter('/_app/settings/tls'));

await waitFor(() => {
expect(screen.getByText('accelerated_seconds')).toBeInTheDocument();
});
expect(screen.queryByText('refresh_envs')).not.toBeInTheDocument();
});

it('shows empty state when no settings exist', async () => {
mockList.mockResolvedValue([]);
renderWithProviders(makeTestRouter());
Expand Down
8 changes: 7 additions & 1 deletion frontend/src/features/settings/SettingsPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ import { formatRelative } from '$/lib/time';
// the user-facing labels add the `osctrl-` prefix for readability.
const SERVICES = ['tls', 'admin', 'api'] as const;
type Service = (typeof SERVICES)[number];
const HIDDEN_SETTINGS_BY_SERVICE: Partial<Record<Service, ReadonlySet<string>>> = {
tls: new Set(['refresh_envs']),
api: new Set(['refresh_envs']),
};

export function SettingsPage() {
usePageTitle('Settings');
Expand All @@ -41,7 +45,9 @@ export function SettingsPage() {
return null;
}

const items = data ?? [];
const items = (data ?? []).filter(
(setting) => !HIDDEN_SETTINGS_BY_SERVICE[service]?.has(setting.Name),
);

return (
<div className="flex flex-col h-full min-h-0">
Expand Down
10 changes: 0 additions & 10 deletions pkg/settings/settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,6 @@ const (

// Names for all possible settings values for services
const (
RefreshEnvs string = "refresh_envs"
RefreshSettings string = "refresh_settings"
CleanupSessions string = "cleanup_sessions"
CleanupExpired string = "cleanup_expired"
Expand Down Expand Up @@ -534,15 +533,6 @@ func (conf *Settings) IsJSON(service, name string, envID uint) bool {
return err == nil
}

// RefreshEnvs gets the interval in seconds to refresh environments by service
func (conf *Settings) RefreshEnvs(service string) int64 {
value, err := conf.RetrieveValue(service, RefreshEnvs, NoEnvironmentID)
if err != nil {
return 0
}
return value.Integer
}

// RefreshSettings gets the interval in seconds to refresh settings by service
func (conf *Settings) RefreshSettings(service string) int64 {
value, err := conf.RetrieveValue(service, RefreshSettings, NoEnvironmentID)
Expand Down
Loading