Skip to content

Commit

Permalink
makes writing startup settings explict call instead of happening in c…
Browse files Browse the repository at this point in the history
…onstructor
  • Loading branch information
James-Pickett committed Apr 26, 2024
1 parent 3d5aa29 commit cdfb553
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 13 deletions.
7 changes: 7 additions & 0 deletions cmd/launcher/launcher.go
Original file line number Diff line number Diff line change
Expand Up @@ -247,6 +247,13 @@ func runLauncher(ctx context.Context, cancel func(), multiSlogger, systemMultiSl
}
defer s.Close()

if err := s.WriteSettings(); err != nil {
slogger.Log(ctx, slog.LevelError,
"writing startup settings",
"err", err,
)
}

// If we have successfully opened the DB, and written a pid,
// we expect we're live. Record the version for osquery to
// pickup
Expand Down
17 changes: 6 additions & 11 deletions ee/agent/startupsettings/writer.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,20 +44,15 @@ func OpenWriter(ctx context.Context, knapsack types.Knapsack) (*startupSettingsW
},
}

// Attempt to ensure flags are up-to-date
if err := s.setFlags(); err != nil {
s.knapsack.Slogger().Log(ctx, slog.LevelWarn, "could not set flags", "err", err)
}

for k := range s.storedFlags {
s.knapsack.RegisterChangeObserver(s, k)
}

return s, nil
}

// setFlags updates the flags with their values from the agent flag data store.
func (s *startupSettingsWriter) setFlags() error {
// WriteSettings updates the flags with their values from the agent flag data store.
func (s *startupSettingsWriter) WriteSettings() error {
updatedFlags := make(map[string]string)
for flag, getter := range s.storedFlags {
updatedFlags[flag.String()] = getter()
Expand All @@ -69,15 +64,15 @@ func (s *startupSettingsWriter) setFlags() error {
atcConfig, err := s.extractAutoTableConstructionConfig()
if err != nil {
s.knapsack.Slogger().Log(context.TODO(), slog.LevelDebug,
"could not extract auto_table_construction config",
"extracting auto_table_construction config",
"err", err,
)
} else {
updatedFlags["auto_table_construction"] = atcConfig
}

if _, err := s.kvStore.Update(updatedFlags); err != nil {
return fmt.Errorf("updating flags: %w", err)
return fmt.Errorf("writing settings: %w", err)
}

return nil
Expand All @@ -87,9 +82,9 @@ func (s *startupSettingsWriter) setFlags() error {
// that the startup database is registered for has a new value, the startup database
// stores that updated value.
func (s *startupSettingsWriter) FlagsChanged(flagKeys ...keys.FlagKey) {
if err := s.setFlags(); err != nil {
if err := s.WriteSettings(); err != nil {
s.knapsack.Slogger().Log(context.Background(), slog.LevelError,
"could not set flags after change",
"writing startup settings after flag change",
"err", err,
)
}
Expand Down
6 changes: 6 additions & 0 deletions ee/agent/startupsettings/writer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ func TestOpenWriter_NewDatabase(t *testing.T) {
s, err := OpenWriter(context.TODO(), k)
require.NoError(t, err, "expected no error setting up storage db")

require.NoError(t, s.WriteSettings(), "should be able to writing settings")

// Check that all values were set
v1, err := s.kvStore.Get([]byte(keys.UpdateChannel.String()))
require.NoError(t, err, "getting startup value")
Expand Down Expand Up @@ -98,6 +100,8 @@ func TestOpenWriter_DatabaseAlreadyExists(t *testing.T) {
s, err := OpenWriter(context.TODO(), k)
require.NoError(t, err, "expected no error setting up storage db")

require.NoError(t, s.WriteSettings(), "should be able to writing settings")

// Now check that all values were updated
v1, err = s.kvStore.Get([]byte(keys.UpdateChannel.String()))
require.NoError(t, err, "getting startup value")
Expand Down Expand Up @@ -146,6 +150,8 @@ func TestFlagsChanged(t *testing.T) {
s, err := OpenWriter(context.TODO(), k)
require.NoError(t, err, "expected no error setting up storage db")

require.NoError(t, s.WriteSettings(), "should be able to writing settings")

// Check that all values were set
v1, err := s.kvStore.Get([]byte(keys.UpdateChannel.String()))
require.NoError(t, err, "getting startup value")
Expand Down
11 changes: 9 additions & 2 deletions pkg/osquery/extension.go
Original file line number Diff line number Diff line change
Expand Up @@ -523,12 +523,19 @@ func (e *Extension) GenerateConfigs(ctx context.Context) (map[string]string, err
// then we can immediately close it
startupSettingsWriter, err := startupsettings.OpenWriter(ctx, e.knapsack)
if err != nil {
e.slogger.Log(ctx, slog.LevelWarn,
e.slogger.Log(ctx, slog.LevelError,
"could not get startup settings writer",
"err", err,
)
} else {
startupSettingsWriter.Close()
defer startupSettingsWriter.Close()

if err := startupSettingsWriter.WriteSettings(); err != nil {
e.slogger.Log(ctx, slog.LevelError,
"writing startup settings",
"err", err,
)
}
}
// TODO log or record metrics when caching config fails? We
// would probably like to return the config and not an error in
Expand Down

0 comments on commit cdfb553

Please sign in to comment.