From 763fbf318d4fd743865b6cc804e9400d46004556 Mon Sep 17 00:00:00 2001 From: Victor Lyuboslavsky <2685025+getvictor@users.noreply.github.com> Date: Mon, 23 Feb 2026 13:18:07 -0600 Subject: [PATCH] Migrating server/worker and related code to slog (#40205) **Related issue:** Resolves #40054 # Checklist for submitter - [x] Changes file added for user-visible changes in `changes/`, `orbit/changes/` or `ee/fleetd-chrome/changes`. ## Testing - [x] Added/updated automated tests - [x] QA'd all new/changed functionality manually ## Summary by CodeRabbit ## Release Notes * **Refactor** * Updated logging infrastructure across background jobs and worker services to use standardized structured logging, improving consistency and log output formatting across the system. --- cmd/fleet/cron.go | 30 ++--- ee/server/service/mdm.go | 8 +- ee/server/service/software_installers.go | 2 +- ee/server/service/teams.go | 2 +- ee/server/service/vpp.go | 6 +- server/mdm/lifecycle/lifecycle.go | 11 +- server/mdm/lifecycle/lifecycle_test.go | 5 +- server/service/apple_mdm_cmd_results.go | 8 +- server/service/hosts.go | 6 +- server/service/integration_mdm_dep_test.go | 6 +- server/service/integration_mdm_test.go | 12 +- server/service/orbit.go | 2 +- server/worker/apple_mdm.go | 53 ++++---- server/worker/apple_mdm_test.go | 129 ++++++++++---------- server/worker/automation_failer_test.go | 6 +- server/worker/batch_activities.go | 4 +- server/worker/db_migrations.go | 6 +- server/worker/db_migrations_test.go | 5 +- server/worker/jira.go | 35 +++--- server/worker/jira_test.go | 10 +- server/worker/macos_setup_assistant.go | 33 +++-- server/worker/macos_setup_assistant_test.go | 26 ++-- server/worker/software_worker.go | 24 ++-- server/worker/software_worker_test.go | 6 +- server/worker/vpp_verification.go | 13 +- server/worker/worker.go | 19 ++- server/worker/worker_test.go | 8 +- server/worker/zendesk.go | 32 +++-- server/worker/zendesk_test.go | 10 +- tools/jira-integration/main.go | 4 +- tools/zendesk-integration/main.go | 4 +- 31 files changed, 257 insertions(+), 268 deletions(-) diff --git a/cmd/fleet/cron.go b/cmd/fleet/cron.go index 76e5f782a3..4798b65b91 100644 --- a/cmd/fleet/cron.go +++ b/cmd/fleet/cron.go @@ -261,7 +261,7 @@ func scanVulnerabilities( if err := worker.QueueJiraVulnJobs( automationCtx, ds, - logger.With("jira", "vulnerabilities"), + logger.SlogLogger().With("jira", "vulnerabilities"), recentV, matchingMeta, ); err != nil { @@ -273,7 +273,7 @@ func scanVulnerabilities( if err := worker.QueueZendeskVulnJobs( automationCtx, ds, - logger.With("zendesk", "vulnerabilities"), + logger.SlogLogger().With("zendesk", "vulnerabilities"), recentV, matchingMeta, ); err != nil { @@ -692,7 +692,7 @@ func triggerFailingPoliciesAutomation( if err != nil { return ctxerr.Wrapf(ctx, err, "listing hosts for failing policies set %d", policy.ID) } - if err := worker.QueueJiraFailingPolicyJob(ctx, ds, logger, policy, hosts); err != nil { + if err := worker.QueueJiraFailingPolicyJob(ctx, ds, logger.SlogLogger(), policy, hosts); err != nil { return err } if err := failingPoliciesSet.RemoveHosts(policy.ID, hosts); err != nil { @@ -704,7 +704,7 @@ func triggerFailingPoliciesAutomation( if err != nil { return ctxerr.Wrapf(ctx, err, "listing hosts for failing policies set %d", policy.ID) } - if err := worker.QueueZendeskFailingPolicyJob(ctx, ds, logger, policy, hosts); err != nil { + if err := worker.QueueZendeskFailingPolicyJob(ctx, ds, logger.SlogLogger(), policy, hosts); err != nil { return err } if err := failingPoliciesSet.RemoveHosts(policy.ID, hosts); err != nil { @@ -747,17 +747,17 @@ func newWorkerIntegrationsSchedule( // create the worker and register the Jira and Zendesk jobs even if no // integration is enabled, as that config can change live (and if it's not // there won't be any records to process so it will mostly just sleep). - w := worker.NewWorker(ds, logger) + w := worker.NewWorker(ds, logger.SlogLogger()) // leave the url empty for now, will be filled when the lock is acquired with // the up-to-date config. jira := &worker.Jira{ Datastore: ds, - Log: logger, + Log: logger.SlogLogger(), NewClientFunc: newJiraClient, } zendesk := &worker.Zendesk{ Datastore: ds, - Log: logger, + Log: logger.SlogLogger(), NewClientFunc: newZendeskClient, } var ( @@ -773,29 +773,29 @@ func newWorkerIntegrationsSchedule( } macosSetupAsst := &worker.MacosSetupAssistant{ Datastore: ds, - Log: logger, + Log: logger.SlogLogger(), DEPService: depSvc, DEPClient: depCli, } appleMDM := &worker.AppleMDM{ Datastore: ds, - Log: logger, + Log: logger.SlogLogger(), Commander: commander, BootstrapPackageStore: bootstrapPackageStore, VPPInstaller: vppInstaller, } vppVerify := &worker.AppleSoftware{ Datastore: ds, - Log: logger, + Log: logger.SlogLogger(), Commander: commander, } dbMigrate := &worker.DBMigration{ Datastore: ds, - Log: logger, + Log: logger.SlogLogger(), } softwareWorker := &worker.SoftwareWorker{ Datastore: ds, - Log: logger, + Log: logger.SlogLogger(), AndroidModule: androidModule, } w.Register(jira, zendesk, macosSetupAsst, appleMDM, dbMigrate, vppVerify, softwareWorker) @@ -839,7 +839,7 @@ func newWorkerIntegrationsSchedule( return nil }), schedule.WithJob("dep_cooldowns", func(ctx context.Context) error { - return worker.ProcessDEPCooldowns(ctx, ds, logger) + return worker.ProcessDEPCooldowns(ctx, ds, logger.SlogLogger()) }), ) @@ -1870,11 +1870,11 @@ func newBatchActivitiesSchedule( logger = logger.With("cron", name) - w := worker.NewWorker(ds, logger) + w := worker.NewWorker(ds, logger.SlogLogger()) scriptsJob := &worker.BatchScripts{ Datastore: ds, - Log: logger, + Log: logger.SlogLogger(), } w.Register(scriptsJob) diff --git a/ee/server/service/mdm.go b/ee/server/service/mdm.go index 1fb3198ccd..748813dd09 100644 --- a/ee/server/service/mdm.go +++ b/ee/server/service/mdm.go @@ -265,7 +265,7 @@ func (svc *Service) updateAppConfigMDMAppleSetup(ctx context.Context, payload fl } func (svc *Service) updateMacOSSetupEnableEndUserAuth(ctx context.Context, enable bool, teamID *uint, teamName *string) error { - if _, err := worker.QueueMacosSetupAssistantJob(ctx, svc.ds, svc.logger, worker.MacosSetupAssistantUpdateProfile, teamID); err != nil { + if _, err := worker.QueueMacosSetupAssistantJob(ctx, svc.ds, svc.logger.SlogLogger(), worker.MacosSetupAssistantUpdateProfile, teamID); err != nil { return ctxerr.Wrap(ctx, err, "queue macos setup assistant update profile job") } @@ -657,7 +657,7 @@ func (svc *Service) SetOrUpdateMDMAppleSetupAssistant(ctx context.Context, asst if _, err := worker.QueueMacosSetupAssistantJob( ctx, svc.ds, - svc.logger, + svc.logger.SlogLogger(), worker.MacosSetupAssistantProfileChanged, newAsst.TeamID); err != nil { return nil, ctxerr.Wrap(ctx, err, "enqueue macos setup assistant profile changed job") @@ -702,7 +702,7 @@ func (svc *Service) DeleteMDMAppleSetupAssistant(ctx context.Context, teamID *ui if _, err := worker.QueueMacosSetupAssistantJob( ctx, svc.ds, - svc.logger, + svc.logger.SlogLogger(), worker.MacosSetupAssistantProfileDeleted, teamID); err != nil { return ctxerr.Wrap(ctx, err, "enqueue macos setup assistant profile deleted job") @@ -988,7 +988,7 @@ func (svc *Service) mdmSSOHandleCallbackAuth( } func (svc *Service) mdmAppleSyncDEPProfiles(ctx context.Context) error { - if _, err := worker.QueueMacosSetupAssistantJob(ctx, svc.ds, svc.logger, worker.MacosSetupAssistantUpdateAllProfiles, nil); err != nil { + if _, err := worker.QueueMacosSetupAssistantJob(ctx, svc.ds, svc.logger.SlogLogger(), worker.MacosSetupAssistantUpdateAllProfiles, nil); err != nil { return ctxerr.Wrap(ctx, err, "queue macos setup assistant update all profiles job") } return nil diff --git a/ee/server/service/software_installers.go b/ee/server/service/software_installers.go index ce4225ed5e..df8975abd3 100644 --- a/ee/server/service/software_installers.go +++ b/ee/server/service/software_installers.go @@ -826,7 +826,7 @@ func (svc *Service) deleteVPPApp(ctx context.Context, teamID *uint, meta *fleet. if err != nil { return &fleet.BadRequestError{Message: "Android MDM is not enabled", InternalErr: err} } - err = worker.QueueMakeAndroidAppUnavailableJob(ctx, svc.ds, svc.logger, meta.VPPAppID.AdamID, androidHostsUUIDToPolicyID, enterprise.Name()) + err = worker.QueueMakeAndroidAppUnavailableJob(ctx, svc.ds, svc.logger.SlogLogger(), meta.VPPAppID.AdamID, androidHostsUUIDToPolicyID, enterprise.Name()) if err != nil { return ctxerr.Wrap(ctx, err, "enqueuing job to make android app unavailable") } diff --git a/ee/server/service/teams.go b/ee/server/service/teams.go index be12d38bda..f14b33c067 100644 --- a/ee/server/service/teams.go +++ b/ee/server/service/teams.go @@ -740,7 +740,7 @@ func (svc *Service) DeleteTeam(ctx context.Context, teamID uint) error { if _, err := worker.QueueMacosSetupAssistantJob( ctx, svc.ds, - svc.logger, + svc.logger.SlogLogger(), worker.MacosSetupAssistantTeamDeleted, nil, mdmHostSerials...); err != nil { diff --git a/ee/server/service/vpp.go b/ee/server/service/vpp.go index de55d9ba9b..4dade341ef 100644 --- a/ee/server/service/vpp.go +++ b/ee/server/service/vpp.go @@ -440,7 +440,7 @@ func (svc *Service) BatchAssociateVPPApps(ctx context.Context, teamName string, if len(androidHostPoliciesToUpdate) > 0 && enterprise != nil { for hostUUID, policyID := range androidHostPoliciesToUpdate { - err := worker.QueueBulkSetAndroidAppsAvailableForHost(ctx, svc.ds, svc.logger, hostUUID, policyID, appIDs, enterprise.Name()) + err := worker.QueueBulkSetAndroidAppsAvailableForHost(ctx, svc.ds, svc.logger.SlogLogger(), hostUUID, policyID, appIDs, enterprise.Name()) if err != nil { return nil, ctxerr.WrapWithData( ctx, @@ -737,7 +737,7 @@ func (svc *Service) AddAppStoreApp(ctx context.Context, teamID *uint, appID flee return 0, ctxerr.Wrap(ctx, err, "writing VPP app to db") } if appID.Platform == fleet.AndroidPlatform { - err := worker.QueueMakeAndroidAppAvailableJob(ctx, svc.ds, svc.logger, appID.AdamID, addedApp.AppTeamID, androidEnterpriseName, androidConfigChanged) + err := worker.QueueMakeAndroidAppAvailableJob(ctx, svc.ds, svc.logger.SlogLogger(), appID.AdamID, addedApp.AppTeamID, androidEnterpriseName, androidConfigChanged) if err != nil { return 0, ctxerr.Wrap(ctx, err, "enqueuing job to make android app available") } @@ -1020,7 +1020,7 @@ func (svc *Service) UpdateAppStoreApp(ctx context.Context, titleID uint, teamID if err != nil { return nil, nil, &fleet.BadRequestError{Message: "Android MDM is not enabled", InternalErr: err} } - err = worker.QueueMakeAndroidAppAvailableJob(ctx, svc.ds, svc.logger, appToWrite.AdamID, insertedApp.AppTeamID, enterprise.Name(), androidConfigChanged) + err = worker.QueueMakeAndroidAppAvailableJob(ctx, svc.ds, svc.logger.SlogLogger(), appToWrite.AdamID, insertedApp.AppTeamID, enterprise.Name(), androidConfigChanged) if err != nil { return nil, nil, ctxerr.Wrap(ctx, err, "enqueuing job to make android app available") } diff --git a/server/mdm/lifecycle/lifecycle.go b/server/mdm/lifecycle/lifecycle.go index 8ea7ec8111..6ae4fc8540 100644 --- a/server/mdm/lifecycle/lifecycle.go +++ b/server/mdm/lifecycle/lifecycle.go @@ -7,6 +7,7 @@ import ( "github.com/fleetdm/fleet/v4/server/contexts/license" "github.com/fleetdm/fleet/v4/server/fleet" "github.com/fleetdm/fleet/v4/server/mdm/nanomdm/mdm" + "github.com/fleetdm/fleet/v4/server/platform/logging" "github.com/fleetdm/fleet/v4/server/ptr" "github.com/fleetdm/fleet/v4/server/worker" kitlog "github.com/go-kit/log" @@ -52,7 +53,7 @@ type HostOptions struct { // HostLifecycle manages MDM host lifecycle actions type HostLifecycle struct { ds fleet.Datastore - logger kitlog.Logger + logger *logging.Logger newActivityFunc NewActivityFunc } @@ -62,7 +63,7 @@ type HostLifecycle struct { type NewActivityFunc func(ctx context.Context, user *fleet.User, details fleet.ActivityDetails, ds fleet.Datastore, logger kitlog.Logger) error // New creates a new HostLifecycle struct -func New(ds fleet.Datastore, logger kitlog.Logger, newActivityFn NewActivityFunc) *HostLifecycle { +func New(ds fleet.Datastore, logger *logging.Logger, newActivityFn NewActivityFunc) *HostLifecycle { return &HostLifecycle{ ds: ds, logger: logger, @@ -245,7 +246,7 @@ func (t *HostLifecycle) turnOnApple(ctx context.Context, opts HostOptions) error err := worker.QueueAppleMDMJob( ctx, t.ds, - t.logger, + t.logger.SlogLogger(), worker.AppleMDMPostDEPEnrollmentTask, opts.UUID, opts.Platform, @@ -263,7 +264,7 @@ func (t *HostLifecycle) turnOnApple(ctx context.Context, opts HostOptions) error if err := worker.QueueAppleMDMJob( ctx, t.ds, - t.logger, + t.logger.SlogLogger(), worker.AppleMDMPostManualEnrollmentTask, opts.UUID, opts.Platform, @@ -329,7 +330,7 @@ func (t *HostLifecycle) restorePendingDEPHost(ctx context.Context, host *fleet.H return ctxerr.Wrap(ctx, err, "restore pending dep host") } - if _, err := worker.QueueMacosSetupAssistantJob(ctx, t.ds, t.logger, + if _, err := worker.QueueMacosSetupAssistantJob(ctx, t.ds, t.logger.SlogLogger(), worker.MacosSetupAssistantHostsTransferred, tmID, host.HardwareSerial); err != nil { return ctxerr.Wrap(ctx, err, "queue macos setup assistant update profile job") } diff --git a/server/mdm/lifecycle/lifecycle_test.go b/server/mdm/lifecycle/lifecycle_test.go index 75c24a9778..3de52530c4 100644 --- a/server/mdm/lifecycle/lifecycle_test.go +++ b/server/mdm/lifecycle/lifecycle_test.go @@ -6,6 +6,7 @@ import ( "github.com/fleetdm/fleet/v4/server/fleet" "github.com/fleetdm/fleet/v4/server/mock" + "github.com/fleetdm/fleet/v4/server/platform/logging" kitlog "github.com/go-kit/log" "github.com/stretchr/testify/require" ) @@ -16,7 +17,7 @@ func nopNewActivity(ctx context.Context, user *fleet.User, details fleet.Activit func TestDoUnsupportedParams(t *testing.T) { ds := new(mock.Store) - lc := New(ds, kitlog.NewNopLogger(), nopNewActivity) + lc := New(ds, logging.NewNopLogger(), nopNewActivity) err := lc.Do(context.Background(), HostOptions{}) require.ErrorContains(t, err, "unsupported platform") @@ -33,7 +34,7 @@ func TestDoUnsupportedParams(t *testing.T) { func TestDoParamValidation(t *testing.T) { ds := new(mock.Store) - lf := New(ds, kitlog.NewNopLogger(), nopNewActivity) + lf := New(ds, logging.NewNopLogger(), nopNewActivity) ctx := context.Background() cases := []struct { diff --git a/server/service/apple_mdm_cmd_results.go b/server/service/apple_mdm_cmd_results.go index f3c0d11cb6..1083dbfb21 100644 --- a/server/service/apple_mdm_cmd_results.go +++ b/server/service/apple_mdm_cmd_results.go @@ -10,8 +10,8 @@ import ( "github.com/fleetdm/fleet/v4/server/fleet" apple_mdm "github.com/fleetdm/fleet/v4/server/mdm/apple" "github.com/fleetdm/fleet/v4/server/mdm/nanomdm/mdm" + "github.com/fleetdm/fleet/v4/server/platform/logging" "github.com/fleetdm/fleet/v4/server/worker" - kitlog "github.com/go-kit/log" "github.com/go-kit/log/level" "github.com/micromdm/plist" ) @@ -63,7 +63,7 @@ func NewInstalledApplicationListResult(ctx context.Context, rawResult []byte, uu func NewInstalledApplicationListResultsHandler( ds fleet.Datastore, commander *apple_mdm.MDMAppleCommander, - logger kitlog.Logger, + logger *logging.Logger, verifyTimeout, verifyRequestDelay time.Duration, ) fleet.MDMCommandResultsHandler { return func(ctx context.Context, commandResults fleet.MDMCommandResults) error { @@ -250,7 +250,7 @@ func NewInstalledApplicationListResultsHandler( // Queue a job to verify the VPP install. return ctxerr.Wrap( ctx, - worker.QueueVPPInstallVerificationJob(ctx, ds, logger, verifyRequestDelay, + worker.QueueVPPInstallVerificationJob(ctx, ds, logger.SlogLogger(), verifyRequestDelay, installedAppResult.HostUUID(), installedAppResult.UUID(), requireXcodeSpecialCase), "InstalledApplicationList handler: queueing vpp install verification job", ) @@ -332,7 +332,7 @@ func NewDeviceLocationResult(result *mdm.CommandResults, hostID uint) (DeviceLoc func NewDeviceLocationResultsHandler( ds fleet.Datastore, commander *apple_mdm.MDMAppleCommander, - logger kitlog.Logger, + logger *logging.Logger, ) fleet.MDMCommandResultsHandler { return func(ctx context.Context, commandResults fleet.MDMCommandResults) error { deviceLocResult, ok := commandResults.(DeviceLocationResult) diff --git a/server/service/hosts.go b/server/service/hosts.go index 93e82aded9..fc7084678f 100644 --- a/server/service/hosts.go +++ b/server/service/hosts.go @@ -1194,7 +1194,7 @@ func (svc *Service) AddHostsToTeam(ctx context.Context, teamID *uint, hostIDs [] if _, err := worker.QueueMacosSetupAssistantJob( ctx, svc.ds, - svc.logger, + svc.logger.SlogLogger(), worker.MacosSetupAssistantHostsTransferred, teamID, serials...); err != nil { @@ -1214,7 +1214,7 @@ func (svc *Service) AddHostsToTeam(ctx context.Context, teamID *uint, hostIDs [] return ctxerr.Wrap(ctx, err, "get android enterprise") } - if err := worker.QueueBulkSetAndroidAppsAvailableForHosts(ctx, svc.ds, svc.logger, androidUUIDs, enterprise.Name()); err != nil { + if err := worker.QueueBulkSetAndroidAppsAvailableForHosts(ctx, svc.ds, svc.logger.SlogLogger(), androidUUIDs, enterprise.Name()); err != nil { return ctxerr.Wrap(ctx, err, "queue bulk set available android apps for hosts job") } } @@ -1346,7 +1346,7 @@ func (svc *Service) AddHostsToTeamByFilter(ctx context.Context, teamID *uint, fi if _, err := worker.QueueMacosSetupAssistantJob( ctx, svc.ds, - svc.logger, + svc.logger.SlogLogger(), worker.MacosSetupAssistantHostsTransferred, teamID, serials...); err != nil { diff --git a/server/service/integration_mdm_dep_test.go b/server/service/integration_mdm_dep_test.go index 33b8cca3b5..33fae08356 100644 --- a/server/service/integration_mdm_dep_test.go +++ b/server/service/integration_mdm_dep_test.go @@ -7,6 +7,7 @@ import ( "encoding/json" "fmt" "io" + "log/slog" "net/http" "net/url" "os" @@ -32,7 +33,6 @@ import ( "github.com/fleetdm/fleet/v4/server/service/contract" "github.com/fleetdm/fleet/v4/server/service/redis_key_value" "github.com/fleetdm/fleet/v4/server/worker" - kitlog "github.com/go-kit/log" redigo "github.com/gomodule/redigo/redis" "github.com/google/uuid" "github.com/jmoiron/sqlx" @@ -1486,7 +1486,7 @@ func (s *integrationMDMTestSuite) TestDEPProfileAssignment() { checkNoJobsPending() // cooldown hosts are screened from update profile jobs that would assign profiles - _, err = worker.QueueMacosSetupAssistantJob(ctx, s.ds, kitlog.NewNopLogger(), worker.MacosSetupAssistantUpdateProfile, &dummyTeam.ID, eHost.HardwareSerial) + _, err = worker.QueueMacosSetupAssistantJob(ctx, s.ds, slog.New(slog.DiscardHandler), worker.MacosSetupAssistantUpdateProfile, &dummyTeam.ID, eHost.HardwareSerial) require.NoError(t, err) checkPendingMacOSSetupAssistantJob("update_profile", &dummyTeam.ID, []string{eHost.HardwareSerial}, 0) s.runIntegrationsSchedule() @@ -1495,7 +1495,7 @@ func (s *integrationMDMTestSuite) TestDEPProfileAssignment() { checkNoJobsPending() // cooldown hosts are screened from delete profile jobs that would assign profiles - _, err = worker.QueueMacosSetupAssistantJob(ctx, s.ds, kitlog.NewNopLogger(), worker.MacosSetupAssistantProfileDeleted, &dummyTeam.ID, eHost.HardwareSerial) + _, err = worker.QueueMacosSetupAssistantJob(ctx, s.ds, slog.New(slog.DiscardHandler), worker.MacosSetupAssistantProfileDeleted, &dummyTeam.ID, eHost.HardwareSerial) require.NoError(t, err) checkPendingMacOSSetupAssistantJob("profile_deleted", &dummyTeam.ID, []string{eHost.HardwareSerial}, 0) s.runIntegrationsSchedule() diff --git a/server/service/integration_mdm_test.go b/server/service/integration_mdm_test.go index b6d2f8eda1..d688501a78 100644 --- a/server/service/integration_mdm_test.go +++ b/server/service/integration_mdm_test.go @@ -238,26 +238,26 @@ func (s *integrationMDMTestSuite) SetupSuite() { macosJob := &worker.MacosSetupAssistant{ Datastore: s.ds, - Log: wlog, + Log: wlog.SlogLogger(), DEPService: apple_mdm.NewDEPService(s.ds, depStorage, wlog.SlogLogger()), DEPClient: apple_mdm.NewDEPClient(depStorage, s.ds, wlog.SlogLogger()), } appleMDMJob := &worker.AppleMDM{ Datastore: s.ds, - Log: wlog, + Log: wlog.SlogLogger(), Commander: mdmCommander, } vppVerifyJob := &worker.AppleSoftware{ Datastore: s.ds, - Log: wlog, + Log: wlog.SlogLogger(), Commander: mdmCommander, } softwareWorker := &worker.SoftwareWorker{ Datastore: s.ds, - Log: wlog, + Log: wlog.SlogLogger(), AndroidModule: androidSvc, } - workr := worker.NewWorker(s.ds, wlog) + workr := worker.NewWorker(s.ds, wlog.SlogLogger()) workr.TestIgnoreUnknownJobs = true workr.Register(macosJob, appleMDMJob, vppVerifyJob, softwareWorker) @@ -391,7 +391,7 @@ func (s *integrationMDMTestSuite) SetupSuite() { defer s.onIntegrationsScheduleDone() } - return worker.ProcessDEPCooldowns(ctx, ds, logger) + return worker.ProcessDEPCooldowns(ctx, ds, logger.SlogLogger()) }), ) return integrationsSchedule, nil diff --git a/server/service/orbit.go b/server/service/orbit.go index 681c89f2ce..0fc627620f 100644 --- a/server/service/orbit.go +++ b/server/service/orbit.go @@ -641,7 +641,7 @@ func (svc *Service) processReleaseDeviceForOldFleetd(ctx context.Context, host * } // Enroll reference arg is not used in the release device task, passing empty string. - if err := worker.QueueAppleMDMJob(ctx, svc.ds, svc.logger, worker.AppleMDMPostDEPReleaseDeviceTask, + if err := worker.QueueAppleMDMJob(ctx, svc.ds, svc.logger.SlogLogger(), worker.AppleMDMPostDEPReleaseDeviceTask, host.UUID, host.Platform, host.TeamID, "", false, false, bootstrapCmdUUID, acctConfigCmdUUID); err != nil { return ctxerr.Wrap(ctx, err, "queue Apple Post-DEP release device job") } diff --git a/server/worker/apple_mdm.go b/server/worker/apple_mdm.go index 5d49959211..aaec058687 100644 --- a/server/worker/apple_mdm.go +++ b/server/worker/apple_mdm.go @@ -6,6 +6,7 @@ import ( "encoding/json" "errors" "fmt" + "log/slog" "os" "strings" "time" @@ -17,8 +18,6 @@ import ( apple_mdm "github.com/fleetdm/fleet/v4/server/mdm/apple" "github.com/fleetdm/fleet/v4/server/mdm/apple/appmanifest" "github.com/fleetdm/fleet/v4/server/ptr" - kitlog "github.com/go-kit/log" - "github.com/go-kit/log/level" "github.com/google/uuid" ) @@ -43,7 +42,7 @@ const ( // AppleMDM is the job processor for the apple_mdm job. type AppleMDM struct { Datastore fleet.Datastore - Log kitlog.Logger + Log *slog.Logger Commander *apple_mdm.MDMAppleCommander BootstrapPackageStore fleet.MDMBootstrapPackageStore VPPInstaller fleet.AppleMDMVPPInstaller @@ -168,7 +167,7 @@ func (a *AppleMDM) runPostDEPEnrollment(ctx context.Context, args appleMDMArgs) } if args.FromMDMMigration && !allowBootstrapDuringMigration { - level.Info(a.Log).Log("info", "skipping bootstrap package installation during MDM migration", "host_uuid", args.HostUUID) + a.Log.InfoContext(ctx, "skipping bootstrap package installation during MDM migration", "host_uuid", args.HostUUID) err = a.Datastore.RecordSkippedHostBootstrapPackage(ctx, args.HostUUID) if err != nil { return ctxerr.Wrap(ctx, err, "recording skipped bootstrap package") @@ -191,7 +190,7 @@ func (a *AppleMDM) runPostDEPEnrollment(ctx context.Context, args appleMDMArgs) } if ref := args.EnrollReference; ref != "" { - a.Log.Log("info", "got an enroll_reference", "host_uuid", args.HostUUID, "ref", ref) + a.Log.InfoContext(ctx, "got an enroll_reference", "host_uuid", args.HostUUID, "ref", ref) if appCfg, err = a.getAppConfig(ctx, appCfg); err != nil { return err } @@ -214,7 +213,7 @@ func (a *AppleMDM) runPostDEPEnrollment(ctx context.Context, args appleMDMArgs) if err != nil { return ctxerr.Wrap(ctx, err, "getting idp account display name") } - a.Log.Log("info", "setting username and fullname", "host_uuid", args.HostUUID) + a.Log.InfoContext(ctx, "setting username and fullname", "host_uuid", args.HostUUID) cmdUUID := uuid.New().String() if err := a.Commander.AccountConfiguration( ctx, @@ -337,9 +336,9 @@ func (a *AppleMDM) runPostDEPReleaseDevice(ctx context.Context, args appleMDMArg args.ReleaseDeviceStartedAt = &now } - level.Debug(a.Log).Log( + a.Log.DebugContext(ctx, + fmt.Sprintf("awaiting commands %v and profiles to settle for host %s", args.EnrollmentCommands, args.HostUUID), "task", "runPostDEPReleaseDevice", - "msg", fmt.Sprintf("awaiting commands %v and profiles to settle for host %s", args.EnrollmentCommands, args.HostUUID), "attempt", args.ReleaseDeviceAttempt, "started_at", args.ReleaseDeviceStartedAt.Format(time.RFC3339), ) @@ -351,7 +350,7 @@ func (a *AppleMDM) runPostDEPReleaseDevice(ctx context.Context, args appleMDMArg // not appear to be reached. if (args.ReleaseDeviceAttempt >= minAttempts && time.Since(*args.ReleaseDeviceStartedAt) >= maxWaitTime) || (args.ReleaseDeviceAttempt >= maxAttempts) { - a.Log.Log("info", "releasing device after too many attempts or too long wait", "host_uuid", args.HostUUID, "attempts", args.ReleaseDeviceAttempt) + a.Log.InfoContext(ctx, "releasing device after too many attempts or too long wait", "host_uuid", args.HostUUID, "attempts", args.ReleaseDeviceAttempt) if err := a.Commander.DeviceConfigured(ctx, args.HostUUID, uuid.NewString()); err != nil { return ctxerr.Wrapf(ctx, err, "failed to enqueue DeviceConfigured command after %d attempts", args.ReleaseDeviceAttempt) } @@ -403,9 +402,9 @@ func (a *AppleMDM) runPostDEPReleaseDevice(ctx context.Context, args appleMDMArg } return nil } - level.Debug(a.Log).Log( + a.Log.DebugContext(ctx, + fmt.Sprintf("command %s has completed", cmdUUID), "task", "runPostDEPReleaseDevice", - "msg", fmt.Sprintf("command %s has completed", cmdUUID), ) } @@ -438,9 +437,9 @@ func (a *AppleMDM) runPostDEPReleaseDevice(ctx context.Context, args appleMDMArg } return nil } - level.Debug(a.Log).Log( + a.Log.DebugContext(ctx, + fmt.Sprintf("profile %s has been deployed", prof.Identifier), "task", "runPostDEPReleaseDevice", - "msg", fmt.Sprintf("profile %s has been deployed", prof.Identifier), ) } @@ -454,7 +453,7 @@ func (a *AppleMDM) runPostDEPReleaseDevice(ctx context.Context, args appleMDMArg } if len(profilesMissingInstallation) > 0 { - level.Info(a.Log).Log("msg", "re-enqueuing due to profiles missing installation", "host_uuid", args.HostUUID) + a.Log.InfoContext(ctx, "re-enqueuing due to profiles missing installation", "host_uuid", args.HostUUID) // requeue the task if some profiles are still missing. if err := reenqueueTask(); err != nil { return ctxerr.Wrap(ctx, err, "failed to re-enqueue task") @@ -477,7 +476,7 @@ func (a *AppleMDM) runPostDEPReleaseDevice(ctx context.Context, args appleMDMArg } if status.Status == fleet.SetupExperienceStatusPending || status.Status == fleet.SetupExperienceStatusRunning { - level.Info(a.Log).Log("msg", "re-enqueuing due to setup experience items still pending or running", "host_uuid", args.HostUUID, "status_id", status.ID) + a.Log.InfoContext(ctx, "re-enqueuing due to setup experience items still pending or running", "host_uuid", args.HostUUID, "status_id", status.ID) if err := reenqueueTask(); err != nil { return ctxerr.Wrap(ctx, err, "failed to re-enqueue task due to pending setup experience items") } @@ -487,7 +486,7 @@ func (a *AppleMDM) runPostDEPReleaseDevice(ctx context.Context, args appleMDMArg } // release the device - a.Log.Log("info", "releasing device, all DEP enrollment commands and profiles have completed", "host_uuid", args.HostUUID) + a.Log.InfoContext(ctx, "releasing device, all DEP enrollment commands and profiles have completed", "host_uuid", args.HostUUID) if err := a.Commander.DeviceConfigured(ctx, args.HostUUID, uuid.NewString()); err != nil { return ctxerr.Wrap(ctx, err, "failed to enqueue DeviceConfigured command") } @@ -500,7 +499,7 @@ func (a *AppleMDM) installFleetd(ctx context.Context, hostUUID string) (string, if err := a.Commander.InstallEnterpriseApplication(ctx, []string{hostUUID}, cmdUUID, manifestURL); err != nil { return "", err } - a.Log.Log("info", "sent command to install fleetd", "host_uuid", hostUUID) + a.Log.InfoContext(ctx, "sent command to install fleetd", "host_uuid", hostUUID) return cmdUUID, nil } @@ -529,7 +528,7 @@ func (a *AppleMDM) installSetupExperienceVPPAppsOnIosIpadOS(ctx context.Context, return nil, ctxerr.Wrap(ctx, err, "updating setup experience status result to failure") } // If we enqueued a non-VPP item for an iOS/iPadOS device, it likely a code bug - level.Error(a.Log).Log("msg", "unexpected setup experience item for iOS/iPadOS device, only VPP apps are supported", "host_uuid", hostUUID, "status_id", status.ID) + a.Log.ErrorContext(ctx, "unexpected setup experience item for iOS/iPadOS device, only VPP apps are supported", "host_uuid", hostUUID, "status_id", status.ID) } } @@ -571,7 +570,7 @@ func (a *AppleMDM) installSetupExperienceVPPAppsOnIosIpadOS(ctx context.Context, // if we get an error (e.g. no available licenses) while attempting to enqueue the // install, then we should immediately go to an error state so setup experience // isn't blocked. - level.Error(a.Log).Log("msg", "got an error when attempting to enqueue VPP app install", "err", err, "adam_id", app.VPPAppAdamID) + a.Log.ErrorContext(ctx, "got an error when attempting to enqueue VPP app install", "err", err, "adam_id", app.VPPAppAdamID) app.Status = fleet.SetupExperienceStatusFailure app.Error = ptr.String(err.Error()) } else { @@ -610,7 +609,7 @@ func (a *AppleMDM) installBootstrapPackage(ctx context.Context, hostUUID string, if err != nil { var nfe fleet.NotFoundError if errors.As(err, &nfe) { - a.Log.Log("info", "unable to find a bootstrap package for DEP enrolled device, skipping installation", "host_uuid", hostUUID) + a.Log.InfoContext(ctx, "unable to find a bootstrap package for DEP enrolled device, skipping installation", "host_uuid", hostUUID) return "", nil } @@ -642,7 +641,7 @@ func (a *AppleMDM) installBootstrapPackage(ctx context.Context, hostUUID string, if err != nil { return "", err } - a.Log.Log("info", "sent command to install bootstrap package", "host_uuid", hostUUID) + a.Log.InfoContext(ctx, "sent command to install bootstrap package", "host_uuid", hostUUID) return cmdUUID, nil } @@ -656,16 +655,16 @@ func (a *AppleMDM) getSignedURL(ctx context.Context, meta *fleet.MDMAppleBootstr // no CDN configured, fall back to the MDM URL case err != nil: // log the error but continue with the MDM URL - level.Error(a.Log).Log("msg", "failed to sign bootstrap package URL", "err", err) + a.Log.ErrorContext(ctx, "failed to sign bootstrap package URL", "err", err) default: exists, err := a.BootstrapPackageStore.Exists(ctx, pkgID) switch { case err != nil: // log the error but continue with the MDM URL - level.Error(a.Log).Log("msg", "failed to check if bootstrap package exists", "err", err) + a.Log.ErrorContext(ctx, "failed to check if bootstrap package exists", "err", err) case !exists: // log the error but continue with the MDM URL - level.Error(a.Log).Log("msg", "bootstrap package does not exist in package store", "pkg_id", pkgID) + a.Log.ErrorContext(ctx, "bootstrap package does not exist in package store", "pkg_id", pkgID) default: url = signedURL } @@ -679,7 +678,7 @@ func (a *AppleMDM) getSignedURL(ctx context.Context, meta *fleet.MDMAppleBootstr func QueueAppleMDMJob( ctx context.Context, ds fleet.Datastore, - logger kitlog.Logger, + logger *slog.Logger, task AppleMDMTask, hostUUID string, platform string, @@ -703,7 +702,7 @@ func QueueAppleMDMJob( if len(enrollmentCommandUUIDs) > 0 { attrs = append(attrs, "enrollment_commands", fmt.Sprintf("%v", enrollmentCommandUUIDs)) } - level.Info(logger).Log(attrs...) + logger.InfoContext(ctx, "queuing Apple MDM job", attrs...) args := &appleMDMArgs{ Task: task, @@ -725,6 +724,6 @@ func QueueAppleMDMJob( if err != nil { return ctxerr.Wrap(ctx, err, "queueing job") } - level.Debug(logger).Log("job_id", job.ID) + logger.DebugContext(ctx, "queued Apple MDM job", "job_id", job.ID) return nil } diff --git a/server/worker/apple_mdm_test.go b/server/worker/apple_mdm_test.go index c58f4a9c8a..c48c3ced95 100644 --- a/server/worker/apple_mdm_test.go +++ b/server/worker/apple_mdm_test.go @@ -101,6 +101,7 @@ func TestAppleMDM(t *testing.T) { // nopLog := logging.NewNopLogger() // use this to debug/verify details of calls nopLog := logging.NewJSONLogger(os.Stdout) + slogLog := nopLog.SlogLogger() testOrgName := "fleet-test" @@ -189,14 +190,14 @@ func TestAppleMDM(t *testing.T) { mdmWorker := &AppleMDM{ Datastore: ds, - Log: nopLog, + Log: slogLog, } - w := NewWorker(ds, nopLog) + w := NewWorker(ds, slogLog) w.Register(mdmWorker) // create a host and enqueue the job h := createEnrolledHost(t, 1, nil, true, "darwin") - err := QueueAppleMDMJob(ctx, ds, nopLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", nil, "", false, false) + err := QueueAppleMDMJob(ctx, ds, slogLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", nil, "", false, false) require.NoError(t, err) // run the worker, should mark the job as done @@ -218,15 +219,15 @@ func TestAppleMDM(t *testing.T) { mdmWorker := &AppleMDM{ Datastore: ds, - Log: nopLog, + Log: slogLog, Commander: apple_mdm.NewMDMAppleCommander(mdmStorage, mockPusher{}), } - w := NewWorker(ds, nopLog) + w := NewWorker(ds, slogLog) w.Register(mdmWorker) // create a host and enqueue the job h := createEnrolledHost(t, 1, nil, true, "darwin") - err := QueueAppleMDMJob(ctx, ds, nopLog, AppleMDMTask("no-such-task"), h.UUID, "darwin", nil, "", false, false) + err := QueueAppleMDMJob(ctx, ds, slogLog, AppleMDMTask("no-such-task"), h.UUID, "darwin", nil, "", false, false) require.NoError(t, err) // run the worker, should mark the job as failed @@ -252,14 +253,14 @@ func TestAppleMDM(t *testing.T) { mdmWorker := &AppleMDM{ Datastore: ds, - Log: nopLog, + Log: slogLog, Commander: apple_mdm.NewMDMAppleCommander(mdmStorage, mockPusher{}), } - w := NewWorker(ds, nopLog) + w := NewWorker(ds, slogLog) w.Register(mdmWorker) // use "" instead of "darwin" as platform to test a queued job after the upgrade to iOS/iPadOS support. - err := QueueAppleMDMJob(ctx, ds, nopLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "", nil, "", false, false) + err := QueueAppleMDMJob(ctx, ds, slogLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "", nil, "", false, false) require.NoError(t, err) // run the worker, should succeed @@ -288,13 +289,13 @@ func TestAppleMDM(t *testing.T) { mdmWorker := &AppleMDM{ Datastore: ds, - Log: nopLog, + Log: slogLog, Commander: apple_mdm.NewMDMAppleCommander(mdmStorage, mockPusher{}), } - w := NewWorker(ds, nopLog) + w := NewWorker(ds, slogLog) w.Register(mdmWorker) - err = QueueAppleMDMJob(ctx, ds, nopLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", nil, "", false, false) + err = QueueAppleMDMJob(ctx, ds, slogLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", nil, "", false, false) require.NoError(t, err) // run the worker, should succeed @@ -330,13 +331,13 @@ func TestAppleMDM(t *testing.T) { mdmWorker := &AppleMDM{ Datastore: ds, - Log: nopLog, + Log: slogLog, Commander: apple_mdm.NewMDMAppleCommander(mdmStorage, mockPusher{}), } - w := NewWorker(ds, nopLog) + w := NewWorker(ds, slogLog) w.Register(mdmWorker) - err = QueueAppleMDMJob(ctx, ds, nopLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", nil, "", false, false) + err = QueueAppleMDMJob(ctx, ds, slogLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", nil, "", false, false) require.NoError(t, err) // run the worker, should succeed @@ -379,13 +380,13 @@ func TestAppleMDM(t *testing.T) { mdmWorker := &AppleMDM{ Datastore: ds, - Log: nopLog, + Log: slogLog, Commander: apple_mdm.NewMDMAppleCommander(mdmStorage, mockPusher{}), } - w := NewWorker(ds, nopLog) + w := NewWorker(ds, slogLog) w.Register(mdmWorker) - err = QueueAppleMDMJob(ctx, ds, nopLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", &tm.ID, "", false, false) + err = QueueAppleMDMJob(ctx, ds, slogLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", &tm.ID, "", false, false) require.NoError(t, err) // run the worker, should succeed @@ -429,13 +430,13 @@ func TestAppleMDM(t *testing.T) { mdmWorker := &AppleMDM{ Datastore: ds, - Log: nopLog, + Log: slogLog, Commander: apple_mdm.NewMDMAppleCommander(mdmStorage, mockPusher{}), } - w := NewWorker(ds, nopLog) + w := NewWorker(ds, slogLog) w.Register(mdmWorker) - err = QueueAppleMDMJob(ctx, ds, nopLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", &tm.ID, "", false, false) + err = QueueAppleMDMJob(ctx, ds, slogLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", &tm.ID, "", false, false) require.NoError(t, err) // run the worker, should succeed @@ -475,13 +476,13 @@ func TestAppleMDM(t *testing.T) { mdmWorker := &AppleMDM{ Datastore: ds, - Log: nopLog, + Log: slogLog, Commander: apple_mdm.NewMDMAppleCommander(mdmStorage, mockPusher{}), } - w := NewWorker(ds, nopLog) + w := NewWorker(ds, slogLog) w.Register(mdmWorker) - err = QueueAppleMDMJob(ctx, ds, nopLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", nil, "", false, true) + err = QueueAppleMDMJob(ctx, ds, slogLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", nil, "", false, true) require.NoError(t, err) // run the worker, should succeed @@ -525,13 +526,13 @@ func TestAppleMDM(t *testing.T) { mdmWorker := &AppleMDM{ Datastore: ds, - Log: nopLog, + Log: slogLog, Commander: apple_mdm.NewMDMAppleCommander(mdmStorage, mockPusher{}), } - w := NewWorker(ds, nopLog) + w := NewWorker(ds, slogLog) w.Register(mdmWorker) - err = QueueAppleMDMJob(ctx, ds, nopLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", &tm.ID, "", false, true) + err = QueueAppleMDMJob(ctx, ds, slogLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", &tm.ID, "", false, true) require.NoError(t, err) // run the worker, should succeed @@ -576,13 +577,13 @@ func TestAppleMDM(t *testing.T) { mdmWorker := &AppleMDM{ Datastore: ds, - Log: nopLog, + Log: slogLog, Commander: apple_mdm.NewMDMAppleCommander(mdmStorage, mockPusher{}), } - w := NewWorker(ds, nopLog) + w := NewWorker(ds, slogLog) w.Register(mdmWorker) - err = QueueAppleMDMJob(ctx, ds, nopLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", nil, "", false, true) + err = QueueAppleMDMJob(ctx, ds, slogLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", nil, "", false, true) require.NoError(t, err) // run the worker, should succeed @@ -630,13 +631,13 @@ func TestAppleMDM(t *testing.T) { mdmWorker := &AppleMDM{ Datastore: ds, - Log: nopLog, + Log: slogLog, Commander: apple_mdm.NewMDMAppleCommander(mdmStorage, mockPusher{}), } - w := NewWorker(ds, nopLog) + w := NewWorker(ds, slogLog) w.Register(mdmWorker) - err = QueueAppleMDMJob(ctx, ds, nopLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", &tm.ID, "", false, true) + err = QueueAppleMDMJob(ctx, ds, slogLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", &tm.ID, "", false, true) require.NoError(t, err) // run the worker, should succeed @@ -669,13 +670,13 @@ func TestAppleMDM(t *testing.T) { mdmWorker := &AppleMDM{ Datastore: ds, - Log: nopLog, + Log: slogLog, Commander: apple_mdm.NewMDMAppleCommander(mdmStorage, mockPusher{}), } - w := NewWorker(ds, nopLog) + w := NewWorker(ds, slogLog) w.Register(mdmWorker) - err := QueueAppleMDMJob(ctx, ds, nopLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", nil, "abcd", false, false) + err := QueueAppleMDMJob(ctx, ds, slogLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", nil, "abcd", false, false) require.NoError(t, err) // run the worker, should succeed @@ -712,13 +713,13 @@ func TestAppleMDM(t *testing.T) { mdmWorker := &AppleMDM{ Datastore: ds, - Log: nopLog, + Log: slogLog, Commander: apple_mdm.NewMDMAppleCommander(mdmStorage, mockPusher{}), } - w := NewWorker(ds, nopLog) + w := NewWorker(ds, slogLog) w.Register(mdmWorker) - err = QueueAppleMDMJob(ctx, ds, nopLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", nil, idpAcc.UUID, false, false) + err = QueueAppleMDMJob(ctx, ds, slogLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", nil, idpAcc.UUID, false, false) require.NoError(t, err) // run the worker, should succeed @@ -765,13 +766,13 @@ func TestAppleMDM(t *testing.T) { mdmWorker := &AppleMDM{ Datastore: ds, - Log: nopLog, + Log: slogLog, Commander: apple_mdm.NewMDMAppleCommander(mdmStorage, mockPusher{}), } - w := NewWorker(ds, nopLog) + w := NewWorker(ds, slogLog) w.Register(mdmWorker) - err = QueueAppleMDMJob(ctx, ds, nopLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", &tm.ID, idpAcc.UUID, false, false) + err = QueueAppleMDMJob(ctx, ds, slogLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", &tm.ID, idpAcc.UUID, false, false) require.NoError(t, err) // run the worker, should succeed @@ -799,13 +800,13 @@ func TestAppleMDM(t *testing.T) { mdmWorker := &AppleMDM{ Datastore: ds, - Log: nopLog, + Log: slogLog, Commander: apple_mdm.NewMDMAppleCommander(mdmStorage, mockPusher{}), } - w := NewWorker(ds, nopLog) + w := NewWorker(ds, slogLog) w.Register(mdmWorker) - err := QueueAppleMDMJob(ctx, ds, nopLog, AppleMDMPostManualEnrollmentTask, h.UUID, "darwin", nil, "", false, false) + err := QueueAppleMDMJob(ctx, ds, slogLog, AppleMDMPostManualEnrollmentTask, h.UUID, "darwin", nil, "", false, false) require.NoError(t, err) // run the worker, should succeed @@ -830,13 +831,13 @@ func TestAppleMDM(t *testing.T) { mdmWorker := &AppleMDM{ Datastore: ds, - Log: nopLog, + Log: slogLog, Commander: apple_mdm.NewMDMAppleCommander(mdmStorage, mockPusher{}), } - w := NewWorker(ds, nopLog) + w := NewWorker(ds, slogLog) w.Register(mdmWorker) - err := QueueAppleMDMJob(ctx, ds, nopLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", nil, "", true, false) + err := QueueAppleMDMJob(ctx, ds, slogLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", nil, "", true, false) require.NoError(t, err) // run the worker, should succeed @@ -866,13 +867,13 @@ func TestAppleMDM(t *testing.T) { mdmWorker := &AppleMDM{ Datastore: ds, - Log: nopLog, + Log: slogLog, Commander: apple_mdm.NewMDMAppleCommander(mdmStorage, mockPusher{}), } - w := NewWorker(ds, nopLog) + w := NewWorker(ds, slogLog) w.Register(mdmWorker) - err := QueueAppleMDMJob(ctx, ds, nopLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", nil, "", true, false) + err := QueueAppleMDMJob(ctx, ds, slogLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", nil, "", true, false) require.NoError(t, err) // run the worker, should succeed @@ -961,13 +962,13 @@ func TestAppleMDM(t *testing.T) { mdmWorker := &AppleMDM{ Datastore: ds, - Log: nopLog, + Log: slogLog, Commander: apple_mdm.NewMDMAppleCommander(mdmStorage, mockPusher{}), } - w := NewWorker(ds, nopLog) + w := NewWorker(ds, slogLog) w.Register(mdmWorker) - err := QueueAppleMDMJob(ctx, ds, nopLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", nil, "", true, false) + err := QueueAppleMDMJob(ctx, ds, slogLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", nil, "", true, false) require.NoError(t, err) // run the worker, should succeed @@ -1064,13 +1065,13 @@ INSERT INTO setup_experience_status_results ( mdmWorker := &AppleMDM{ VPPInstaller: vppInstaller, Datastore: ds, - Log: nopLog, + Log: slogLog, Commander: apple_mdm.NewMDMAppleCommander(mdmStorage, mockPusher{}), } - w := NewWorker(ds, nopLog) + w := NewWorker(ds, slogLog) w.Register(mdmWorker) - err = QueueAppleMDMJob(ctx, ds, nopLog, AppleMDMPostDEPEnrollmentTask, h.UUID, h.Platform, nil, "", true, false) + err = QueueAppleMDMJob(ctx, ds, slogLog, AppleMDMPostDEPEnrollmentTask, h.UUID, h.Platform, nil, "", true, false) require.NoError(t, err) // run the worker, should succeed @@ -1229,13 +1230,13 @@ INSERT INTO setup_experience_status_results ( mdmWorker := &AppleMDM{ VPPInstaller: vppInstaller, Datastore: ds, - Log: nopLog, + Log: slogLog, Commander: apple_mdm.NewMDMAppleCommander(mdmStorage, mockPusher{}), } - w := NewWorker(ds, nopLog) + w := NewWorker(ds, slogLog) w.Register(mdmWorker) - err = QueueAppleMDMJob(ctx, ds, nopLog, AppleMDMPostDEPEnrollmentTask, h.UUID, h.Platform, nil, "", true, false) + err = QueueAppleMDMJob(ctx, ds, slogLog, AppleMDMPostDEPEnrollmentTask, h.UUID, h.Platform, nil, "", true, false) require.NoError(t, err) // run the worker, should succeed @@ -1359,13 +1360,13 @@ INSERT INTO setup_experience_status_results ( mdmWorker := &AppleMDM{ Datastore: ds, - Log: nopLog, + Log: slogLog, Commander: apple_mdm.NewMDMAppleCommander(mdmStorage, mockPusher{}), } - w := NewWorker(ds, nopLog) + w := NewWorker(ds, slogLog) w.Register(mdmWorker) - err := QueueAppleMDMJob(ctx, ds, nopLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", nil, "", true, false) + err := QueueAppleMDMJob(ctx, ds, slogLog, AppleMDMPostDEPEnrollmentTask, h.UUID, "darwin", nil, "", true, false) require.NoError(t, err) // run the worker, should succeed and enqueue the release job @@ -1426,7 +1427,7 @@ func TestGetSignedURL(t *testing.T) { var data []byte buf := bytes.NewBuffer(data) logger := logging.NewLogfmtLogger(buf) - a := &AppleMDM{Log: logger} + a := &AppleMDM{Log: logger.SlogLogger()} // S3 not configured assert.Empty(t, a.getSignedURL(ctx, meta)) diff --git a/server/worker/automation_failer_test.go b/server/worker/automation_failer_test.go index c1e68613c8..262ffeb64c 100644 --- a/server/worker/automation_failer_test.go +++ b/server/worker/automation_failer_test.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "log/slog" "net/http" "net/http/httptest" "testing" @@ -12,7 +13,6 @@ import ( "github.com/fleetdm/fleet/v4/server/fleet" "github.com/fleetdm/fleet/v4/server/mock" "github.com/fleetdm/fleet/v4/server/service/externalsvc" - kitlog "github.com/go-kit/log" "github.com/stretchr/testify/require" ) @@ -63,7 +63,7 @@ func TestJiraFailer(t *testing.T) { jira := &Jira{ FleetURL: "http://example.com", Datastore: ds, - Log: kitlog.NewNopLogger(), + Log: slog.New(slog.DiscardHandler), NewClientFunc: func(opts *externalsvc.JiraOptions) (JiraClient, error) { return failer, nil }, @@ -122,7 +122,7 @@ func TestZendeskFailer(t *testing.T) { zendesk := &Zendesk{ FleetURL: "http://example.com", Datastore: ds, - Log: kitlog.NewNopLogger(), + Log: slog.New(slog.DiscardHandler), NewClientFunc: func(opts *externalsvc.ZendeskOptions) (ZendeskClient, error) { return failer, nil }, diff --git a/server/worker/batch_activities.go b/server/worker/batch_activities.go index 43624306e0..0a1dc226e1 100644 --- a/server/worker/batch_activities.go +++ b/server/worker/batch_activities.go @@ -3,15 +3,15 @@ package worker import ( "context" "encoding/json" + "log/slog" "github.com/fleetdm/fleet/v4/server/contexts/ctxerr" "github.com/fleetdm/fleet/v4/server/fleet" - kitlog "github.com/go-kit/log" ) type BatchScripts struct { Datastore fleet.Datastore - Log kitlog.Logger + Log *slog.Logger } func (b *BatchScripts) Name() string { diff --git a/server/worker/db_migrations.go b/server/worker/db_migrations.go index 88d0839d19..7f4aa7c57d 100644 --- a/server/worker/db_migrations.go +++ b/server/worker/db_migrations.go @@ -5,11 +5,11 @@ import ( "encoding/base64" "encoding/json" "fmt" + "log/slog" "time" "github.com/fleetdm/fleet/v4/server/contexts/ctxerr" "github.com/fleetdm/fleet/v4/server/fleet" - kitlog "github.com/go-kit/log" ) // Name of the DB migration job as registered in the worker. Note that although @@ -29,7 +29,7 @@ const ( // DBMigration is the job processor for the db_migration job. type DBMigration struct { Datastore fleet.Datastore - Log kitlog.Logger + Log *slog.Logger } // Name returns the name of the job. @@ -81,7 +81,7 @@ func (m *DBMigration) migrateVPPToken(ctx context.Context) error { // it should've updated, as the location, org name and renew date were all // dummy values after the DB migration. Log something, but otherwise // continue as retrying won't change the result. - m.Log.Log("info", "VPP token metadata was not updated") + m.Log.InfoContext(ctx, "VPP token metadata was not updated") } if _, err := m.Datastore.UpdateVPPToken(ctx, tok.ID, tokenData); err != nil { diff --git a/server/worker/db_migrations_test.go b/server/worker/db_migrations_test.go index 6ba4caa2f1..405a30e46c 100644 --- a/server/worker/db_migrations_test.go +++ b/server/worker/db_migrations_test.go @@ -28,11 +28,12 @@ func TestDBMigrationsVPPToken(t *testing.T) { // nopLog := logging.NewJSONLogger(os.Stdout) // create and register the worker + slogLog := nopLog.SlogLogger() processor := &DBMigration{ Datastore: ds, - Log: nopLog, + Log: slogLog, } - w := NewWorker(ds, nopLog) + w := NewWorker(ds, slogLog) w.Register(processor) // create the migrated token and enqueue the job diff --git a/server/worker/jira.go b/server/worker/jira.go index 206366028c..5f6d411a16 100644 --- a/server/worker/jira.go +++ b/server/worker/jira.go @@ -6,6 +6,7 @@ import ( "encoding/json" "errors" "fmt" + "log/slog" "sort" "sync" "text/template" @@ -16,8 +17,6 @@ import ( "github.com/fleetdm/fleet/v4/server/contexts/license" "github.com/fleetdm/fleet/v4/server/fleet" "github.com/fleetdm/fleet/v4/server/service/externalsvc" - kitlog "github.com/go-kit/log" - "github.com/go-kit/log/level" ) // jiraName is the name of the job as registered in the worker. @@ -122,7 +121,7 @@ type JiraClient interface { type Jira struct { FleetURL string Datastore fleet.Datastore - Log kitlog.Logger + Log *slog.Logger NewClientFunc func(*externalsvc.JiraOptions) (JiraClient, error) // mu protects concurrent access to clientsCache, so that the job processor @@ -300,8 +299,7 @@ func (j *Jira) runVuln(ctx context.Context, cli JiraClient, args jiraArgs) error if err != nil { return err } - level.Debug(j.Log).Log( - "msg", "created jira issue for cve", + j.Log.DebugContext(ctx, "created jira issue for cve", "cve", vargs.CVE, "issue_id", createdIssue.ID, "issue_key", createdIssue.Key, @@ -317,8 +315,7 @@ func (j *Jira) runFailingPolicy(ctx context.Context, cli JiraClient, args jiraAr return err } - attrs := []interface{}{ - "msg", "created jira issue for failing policy", + attrs := []any{ "policy_id", args.FailingPolicy.PolicyID, "policy_name", args.FailingPolicy.PolicyName, "issue_id", createdIssue.ID, @@ -327,11 +324,11 @@ func (j *Jira) runFailingPolicy(ctx context.Context, cli JiraClient, args jiraAr if args.FailingPolicy.TeamID != nil { attrs = append(attrs, "team_id", *args.FailingPolicy.TeamID) } - level.Debug(j.Log).Log(attrs...) + j.Log.DebugContext(ctx, "created jira issue for failing policy", attrs...) return nil } -func (j *Jira) createTemplatedIssue(ctx context.Context, cli JiraClient, summaryTpl, descTpl *template.Template, args interface{}) (*jira.Issue, error) { +func (j *Jira) createTemplatedIssue(ctx context.Context, cli JiraClient, summaryTpl, descTpl *template.Template, args any) (*jira.Issue, error) { var buf bytes.Buffer if err := summaryTpl.Execute(&buf, args); err != nil { return nil, ctxerr.Wrap(ctx, err, "execute summary template") @@ -366,11 +363,11 @@ func (j *Jira) createTemplatedIssue(ctx context.Context, cli JiraClient, summary func QueueJiraVulnJobs( ctx context.Context, ds fleet.Datastore, - logger kitlog.Logger, + logger *slog.Logger, recentVulns []fleet.SoftwareVulnerability, cveMeta map[string]fleet.CVEMeta, ) error { - level.Info(logger).Log("enabled", "true", "recentVulns", len(recentVulns)) + logger.InfoContext(ctx, "jira integration enabled", "recent_vulns", len(recentVulns)) // for troubleshooting, log in debug level the CVEs that we will process // (cannot be done in the loop below as we want to add the debug log @@ -380,7 +377,7 @@ func QueueJiraVulnJobs( cves = append(cves, vuln.GetCVE()) } sort.Strings(cves) - level.Debug(logger).Log("recent_cves", fmt.Sprintf("%v", cves)) + logger.DebugContext(ctx, "recent CVEs to process", "recent_cves", fmt.Sprintf("%v", cves)) cveGrouped := make(map[string][]uint) for _, v := range recentVulns { @@ -399,18 +396,17 @@ func QueueJiraVulnJobs( if err != nil { return ctxerr.Wrap(ctx, err, "queueing job") } - level.Debug(logger).Log("job_id", job.ID) + logger.DebugContext(ctx, "queued jira vuln job", "job_id", job.ID) } return nil } // QueueJiraFailingPolicyJob queues a Jira job for a failing policy to process // asynchronously via the worker. -func QueueJiraFailingPolicyJob(ctx context.Context, ds fleet.Datastore, logger kitlog.Logger, +func QueueJiraFailingPolicyJob(ctx context.Context, ds fleet.Datastore, logger *slog.Logger, policy *fleet.Policy, hosts []fleet.PolicySetHost, ) error { - attrs := []interface{}{ - "enabled", "true", + attrs := []any{ "failing_policy", policy.ID, "hosts_count", len(hosts), } @@ -418,12 +414,11 @@ func QueueJiraFailingPolicyJob(ctx context.Context, ds fleet.Datastore, logger k attrs = append(attrs, "team_id", *policy.TeamID) } if len(hosts) == 0 { - attrs = append(attrs, "msg", "skipping, no host") - level.Debug(logger).Log(attrs...) + logger.DebugContext(ctx, "skipping, no host", attrs...) return nil } - level.Info(logger).Log(attrs...) + logger.InfoContext(ctx, "queueing Jira failing policy job", attrs...) args := &failingPolicyArgs{ PolicyID: policy.ID, @@ -436,6 +431,6 @@ func QueueJiraFailingPolicyJob(ctx context.Context, ds fleet.Datastore, logger k if err != nil { return ctxerr.Wrap(ctx, err, "queueing job") } - level.Debug(logger).Log("job_id", job.ID) + logger.DebugContext(ctx, "queued jira failing policy job", "job_id", job.ID) return nil } diff --git a/server/worker/jira_test.go b/server/worker/jira_test.go index dfb8c4e585..bfe8fa243a 100644 --- a/server/worker/jira_test.go +++ b/server/worker/jira_test.go @@ -6,6 +6,7 @@ import ( "errors" "fmt" "io" + "log/slog" "net/http" "net/http/httptest" "testing" @@ -16,7 +17,6 @@ import ( "github.com/fleetdm/fleet/v4/server/mock" "github.com/fleetdm/fleet/v4/server/ptr" "github.com/fleetdm/fleet/v4/server/service/externalsvc" - kitlog "github.com/go-kit/log" "github.com/stretchr/testify/require" ) @@ -203,7 +203,7 @@ func TestJiraRun(t *testing.T) { jira := &Jira{ FleetURL: "https://fleetdm.com", Datastore: ds, - Log: kitlog.NewNopLogger(), + Log: slog.New(slog.DiscardHandler), NewClientFunc: func(opts *externalsvc.JiraOptions) (JiraClient, error) { return client, nil }, @@ -221,7 +221,7 @@ func TestJiraRun(t *testing.T) { func TestJiraQueueVulnJobs(t *testing.T) { ds := new(mock.Store) ctx := context.Background() - logger := kitlog.NewNopLogger() + logger := slog.New(slog.DiscardHandler) t.Run("same vulnerability on multiple software only queue one job", func(t *testing.T) { var count int @@ -284,7 +284,7 @@ func TestJiraQueueVulnJobs(t *testing.T) { func TestJiraQueueFailingPolicyJob(t *testing.T) { ds := new(mock.Store) ctx := context.Background() - logger := kitlog.NewNopLogger() + logger := slog.New(slog.DiscardHandler) t.Run("success global", func(t *testing.T) { ds.NewJobFunc = func(ctx context.Context, job *fleet.Job) (*fleet.Job, error) { @@ -407,7 +407,7 @@ func TestJiraRunClientUpdate(t *testing.T) { jiraJob := &Jira{ FleetURL: "http://example.com", Datastore: ds, - Log: kitlog.NewNopLogger(), + Log: slog.New(slog.DiscardHandler), NewClientFunc: func(opts *externalsvc.JiraOptions) (JiraClient, error) { // keep track of project keys received in calls to NewClientFunc projectKeys = append(projectKeys, opts.ProjectKey) diff --git a/server/worker/macos_setup_assistant.go b/server/worker/macos_setup_assistant.go index 87b232fd02..f14ca69158 100644 --- a/server/worker/macos_setup_assistant.go +++ b/server/worker/macos_setup_assistant.go @@ -4,13 +4,12 @@ import ( "context" "encoding/json" "fmt" + "log/slog" "github.com/fleetdm/fleet/v4/server/contexts/ctxerr" "github.com/fleetdm/fleet/v4/server/fleet" apple_mdm "github.com/fleetdm/fleet/v4/server/mdm/apple" "github.com/fleetdm/fleet/v4/server/mdm/nanodep/godep" - kitlog "github.com/go-kit/log" - "github.com/go-kit/log/level" ) // Name of the macos setup assistant job as registered in the worker. Note that @@ -34,7 +33,7 @@ const ( // MacosSetupAssistant is the job processor for the macos_setup_assistant job. type MacosSetupAssistant struct { Datastore fleet.Datastore - Log kitlog.Logger + Log *slog.Logger DEPService *apple_mdm.DEPService DEPClient *godep.Client } @@ -110,10 +109,10 @@ func (m *MacosSetupAssistant) runProfileChanged(ctx context.Context, args macosS if len(skipSerials) > 0 { // NOTE: the `dep_cooldown` job of the `integrations`` cron picks up the assignments // after the cooldown period is over - level.Info(m.Log).Log("msg", "run profile changed: skipping assign profile for devices on cooldown", "serials", fmt.Sprintf("%s", skipSerials)) + m.Log.InfoContext(ctx, "run profile changed: skipping assign profile for devices on cooldown", "serials", fmt.Sprintf("%s", skipSerials)) } if len(assignSerials) == 0 { - level.Info(m.Log).Log("msg", "run profile changed: no devices to assign profile") + m.Log.InfoContext(ctx, "run profile changed: no devices to assign profile") return nil } @@ -183,10 +182,10 @@ func (m *MacosSetupAssistant) runProfileDeleted(ctx context.Context, args macosS if len(skipSerials) > 0 { // NOTE: the `dep_cooldown` job of the `integrations`` cron picks up the assignments // after the cooldown period is over - level.Info(m.Log).Log("msg", "run profile deleted: skipping assign profile for devices on cooldown", "serials", fmt.Sprintf("%s", skipSerials)) + m.Log.InfoContext(ctx, "run profile deleted: skipping assign profile for devices on cooldown", "serials", fmt.Sprintf("%s", skipSerials)) } if len(assignSerials) == 0 { - level.Info(m.Log).Log("msg", "run profile deleted: no devices to assign profile") + m.Log.InfoContext(ctx, "run profile deleted: no devices to assign profile") return nil } @@ -242,11 +241,11 @@ func (m *MacosSetupAssistant) runHostsTransferred(ctx context.Context, args maco } else if len(cooldownSerials) > 0 { // NOTE: the `dep_cooldown` job of the `integrations` cron picks up the assignments // after the cooldown period is over - level.Info(m.Log).Log("msg", "run hosts transferred: skipping assign profile for devices on cooldown", "serials", fmt.Sprintf("%s", cooldownSerials)) + m.Log.InfoContext(ctx, "run hosts transferred: skipping assign profile for devices on cooldown", "serials", fmt.Sprintf("%s", cooldownSerials)) } if len(assignSerials) == 0 { - level.Info(m.Log).Log("msg", "run hosts transferred: no devices to assign profile") + m.Log.InfoContext(ctx, "run hosts transferred: no devices to assign profile") return nil } @@ -362,12 +361,12 @@ func (m *MacosSetupAssistant) getTeamNoTeam(ctx context.Context, tmID *uint) (*f func QueueMacosSetupAssistantJob( ctx context.Context, ds fleet.Datastore, - logger kitlog.Logger, + logger *slog.Logger, task MacosSetupAssistantTask, teamID *uint, serialNumbers ...string, ) (uint, error) { - attrs := []interface{}{ + attrs := []any{ "enabled", "true", macosSetupAssistantJobName, task, "hosts_count", len(serialNumbers), @@ -375,7 +374,7 @@ func QueueMacosSetupAssistantJob( if teamID != nil { attrs = append(attrs, "team_id", *teamID) } - level.Info(logger).Log(attrs...) + logger.InfoContext(ctx, "queueing macOS setup assistant job", attrs...) args := &macosSetupAssistantArgs{ Task: task, @@ -386,27 +385,27 @@ func QueueMacosSetupAssistantJob( if err != nil { return 0, ctxerr.Wrap(ctx, err, "queueing job") } - level.Debug(logger).Log("job_id", job.ID) + logger.DebugContext(ctx, "queued macOS setup assistant job", "job_id", job.ID) return job.ID, nil } -func ProcessDEPCooldowns(ctx context.Context, ds fleet.Datastore, logger kitlog.Logger) error { +func ProcessDEPCooldowns(ctx context.Context, ds fleet.Datastore, logger *slog.Logger) error { serialsByTeamID, err := ds.GetDEPAssignProfileExpiredCooldowns(ctx) if err != nil { return ctxerr.Wrap(ctx, err, "getting cooldowns") } if len(serialsByTeamID) == 0 { - level.Info(logger).Log("msg", "no cooldowns to process") + logger.InfoContext(ctx, "no cooldowns to process") return nil } // queue job for each team so that macOS setup assistant worker can pick it up and process it for teamID, serials := range serialsByTeamID { if len(serials) == 0 { - logger.Log("msg", "no cooldowns", "team_id", teamID) + logger.InfoContext(ctx, "no cooldowns", "team_id", teamID) continue } - level.Info(logger).Log("msg", "processing cooldowns", "team_id", teamID, "serials", serials) + logger.InfoContext(ctx, "processing cooldowns", "team_id", teamID, "serials", serials) var tid *uint if teamID != 0 { diff --git a/server/worker/macos_setup_assistant_test.go b/server/worker/macos_setup_assistant_test.go index b7eb21dec9..c9b414b1bb 100644 --- a/server/worker/macos_setup_assistant_test.go +++ b/server/worker/macos_setup_assistant_test.go @@ -78,7 +78,7 @@ func TestMacosSetupAssistant(t *testing.T) { require.NoError(t, err) macosJob := &MacosSetupAssistant{ Datastore: ds, - Log: logger, + Log: logger.SlogLogger(), DEPService: apple_mdm.NewDEPService(ds, depStorage, logger.SlogLogger()), DEPClient: apple_mdm.NewDEPClient(depStorage, ds, logger.SlogLogger()), } @@ -144,7 +144,7 @@ func TestMacosSetupAssistant(t *testing.T) { err = depStorage.StoreConfig(ctx, org2Name, &nanodep_client.Config{BaseURL: srv.URL}) require.NoError(t, err) - w := NewWorker(ds, logger) + w := NewWorker(ds, logger.SlogLogger()) w.Register(macosJob) runCheckDone := func() { @@ -166,7 +166,7 @@ func TestMacosSetupAssistant(t *testing.T) { start := time.Now().Truncate(time.Second) // enqueue a regenerate all and process the jobs - _, err = QueueMacosSetupAssistantJob(ctx, ds, logger, MacosSetupAssistantUpdateAllProfiles, nil) + _, err = QueueMacosSetupAssistantJob(ctx, ds, logger.SlogLogger(), MacosSetupAssistantUpdateAllProfiles, nil) require.NoError(t, err) runCheckDone() @@ -209,7 +209,7 @@ func TestMacosSetupAssistant(t *testing.T) { }) require.NoError(t, err) require.NotZero(t, tm1Asst.ID) - _, err = QueueMacosSetupAssistantJob(ctx, ds, logger, MacosSetupAssistantProfileChanged, &tm1.ID) + _, err = QueueMacosSetupAssistantJob(ctx, ds, logger.SlogLogger(), MacosSetupAssistantProfileChanged, &tm1.ID) require.NoError(t, err) runCheckDone() @@ -248,7 +248,7 @@ func TestMacosSetupAssistant(t *testing.T) { tm2, err = ds.SaveTeam(ctx, tm2) require.NoError(t, err) - _, err = QueueMacosSetupAssistantJob(ctx, ds, logger, MacosSetupAssistantUpdateProfile, &tm2.ID) + _, err = QueueMacosSetupAssistantJob(ctx, ds, logger.SlogLogger(), MacosSetupAssistantUpdateProfile, &tm2.ID) require.NoError(t, err) runCheckDone() @@ -278,11 +278,11 @@ func TestMacosSetupAssistant(t *testing.T) { require.NotZero(t, tm3Asst.ID) err = ds.DeleteMDMAppleSetupAssistant(ctx, &tm1.ID) require.NoError(t, err) - _, err = QueueMacosSetupAssistantJob(ctx, ds, logger, MacosSetupAssistantProfileChanged, &tm2.ID) + _, err = QueueMacosSetupAssistantJob(ctx, ds, logger.SlogLogger(), MacosSetupAssistantProfileChanged, &tm2.ID) require.NoError(t, err) - _, err = QueueMacosSetupAssistantJob(ctx, ds, logger, MacosSetupAssistantProfileChanged, &tm3.ID) + _, err = QueueMacosSetupAssistantJob(ctx, ds, logger.SlogLogger(), MacosSetupAssistantProfileChanged, &tm3.ID) require.NoError(t, err) - _, err = QueueMacosSetupAssistantJob(ctx, ds, logger, MacosSetupAssistantProfileDeleted, &tm1.ID) + _, err = QueueMacosSetupAssistantJob(ctx, ds, logger.SlogLogger(), MacosSetupAssistantProfileDeleted, &tm1.ID) require.NoError(t, err) runCheckDone() @@ -300,7 +300,7 @@ func TestMacosSetupAssistant(t *testing.T) { tm2, err = ds.SaveTeam(ctx, tm2) require.NoError(t, err) - _, err = QueueMacosSetupAssistantJob(ctx, ds, logger, MacosSetupAssistantUpdateProfile, &tm2.ID) + _, err = QueueMacosSetupAssistantJob(ctx, ds, logger.SlogLogger(), MacosSetupAssistantUpdateProfile, &tm2.ID) require.NoError(t, err) runCheckDone() @@ -319,9 +319,9 @@ func TestMacosSetupAssistant(t *testing.T) { err = ds.DeleteTeam(ctx, tm2.ID) require.NoError(t, err) - _, err = QueueMacosSetupAssistantJob(ctx, ds, logger, MacosSetupAssistantHostsTransferred, &tm3.ID, "serial-2", "serial-4") + _, err = QueueMacosSetupAssistantJob(ctx, ds, logger.SlogLogger(), MacosSetupAssistantHostsTransferred, &tm3.ID, "serial-2", "serial-4") require.NoError(t, err) - _, err = QueueMacosSetupAssistantJob(ctx, ds, logger, MacosSetupAssistantTeamDeleted, nil, "serial-5") // hosts[5] was in team 2 + _, err = QueueMacosSetupAssistantJob(ctx, ds, logger.SlogLogger(), MacosSetupAssistantTeamDeleted, nil, "serial-5") // hosts[5] was in team 2 require.NoError(t, err) runCheckDone() @@ -343,7 +343,7 @@ func TestMacosSetupAssistant(t *testing.T) { require.NoError(t, err) require.NotZero(t, noTmAsst.ID) - _, err = QueueMacosSetupAssistantJob(ctx, ds, logger, MacosSetupAssistantProfileChanged, nil) + _, err = QueueMacosSetupAssistantJob(ctx, ds, logger.SlogLogger(), MacosSetupAssistantProfileChanged, nil) require.NoError(t, err) runCheckDone() @@ -358,7 +358,7 @@ func TestMacosSetupAssistant(t *testing.T) { // check that profiles get re-generated (note that timestamps are not // impacted as the content of the profiles did not change) - _, err = QueueMacosSetupAssistantJob(ctx, ds, logger, MacosSetupAssistantUpdateAllProfiles, nil) + _, err = QueueMacosSetupAssistantJob(ctx, ds, logger.SlogLogger(), MacosSetupAssistantUpdateAllProfiles, nil) require.NoError(t, err) runCheckDone() diff --git a/server/worker/software_worker.go b/server/worker/software_worker.go index b8fd3a7029..4d0acd09f9 100644 --- a/server/worker/software_worker.go +++ b/server/worker/software_worker.go @@ -10,8 +10,6 @@ import ( "github.com/fleetdm/fleet/v4/server/fleet" "github.com/fleetdm/fleet/v4/server/mdm/android" "github.com/fleetdm/fleet/v4/server/ptr" - kitlog "github.com/go-kit/log" - "github.com/go-kit/log/level" "github.com/google/uuid" "google.golang.org/api/androidmanagement/v1" "google.golang.org/api/googleapi" @@ -24,7 +22,7 @@ type SoftwareWorkerTask string type SoftwareWorker struct { Datastore fleet.Datastore AndroidModule android.Service - Log kitlog.Logger + Log *slog.Logger } func (v *SoftwareWorker) Name() string { @@ -387,7 +385,7 @@ func (v *SoftwareWorker) bulkMakeAndroidAppsAvailableForHost(ctx context.Context // Include the Fleet Agent in the app list so it's not removed when we replace the apps. fleetAgentPolicy, err := v.AndroidModule.BuildFleetAgentApplicationPolicy(ctx, hostUUID) if err != nil { - level.Error(v.Log).Log("msg", "failed to build Fleet Agent policy, Fleet Agent may be removed", "host_uuid", hostUUID, "err", err) + v.Log.ErrorContext(ctx, "failed to build Fleet Agent policy, Fleet Agent may be removed", "host_uuid", hostUUID, "err", err) } else if fleetAgentPolicy != nil { appPolicies = append(appPolicies, fleetAgentPolicy) } @@ -454,7 +452,7 @@ func QueueRunAndroidSetupExperience(ctx context.Context, ds fleet.Datastore, log return nil } -func QueueMakeAndroidAppAvailableJob(ctx context.Context, ds fleet.Datastore, logger kitlog.Logger, applicationID string, appTeamID uint, enterpriseName string, appConfigChanged bool) error { +func QueueMakeAndroidAppAvailableJob(ctx context.Context, ds fleet.Datastore, logger *slog.Logger, applicationID string, appTeamID uint, enterpriseName string, appConfigChanged bool) error { args := &softwareWorkerArgs{ Task: makeAndroidAppAvailableTask, ApplicationID: applicationID, @@ -468,11 +466,11 @@ func QueueMakeAndroidAppAvailableJob(ctx context.Context, ds fleet.Datastore, lo return ctxerr.Wrap(ctx, err, "queueing job") } - level.Debug(logger).Log("job_id", job.ID, "job_name", softwareWorkerJobName, "task", args.Task) + logger.DebugContext(ctx, "queued software worker job", "job_id", job.ID, "job_name", softwareWorkerJobName, "task", args.Task) return nil } -func QueueMakeAndroidAppUnavailableJob(ctx context.Context, ds fleet.Datastore, logger kitlog.Logger, applicationID string, hostsUUIDToPolicyID map[string]string, enterpriseName string) error { +func QueueMakeAndroidAppUnavailableJob(ctx context.Context, ds fleet.Datastore, logger *slog.Logger, applicationID string, hostsUUIDToPolicyID map[string]string, enterpriseName string) error { args := &softwareWorkerArgs{ Task: makeAndroidAppUnavailableTask, ApplicationID: applicationID, @@ -485,14 +483,14 @@ func QueueMakeAndroidAppUnavailableJob(ctx context.Context, ds fleet.Datastore, return ctxerr.Wrap(ctx, err, "queueing job") } - level.Debug(logger).Log("job_id", job.ID, "job_name", softwareWorkerJobName, "task", args.Task) + logger.DebugContext(ctx, "queued software worker job", "job_id", job.ID, "job_name", softwareWorkerJobName, "task", args.Task) return nil } func QueueBulkSetAndroidAppsAvailableForHost( ctx context.Context, ds fleet.Datastore, - logger kitlog.Logger, + logger *slog.Logger, hostUUID string, policyID string, applicationIDs []string, @@ -512,7 +510,7 @@ func QueueBulkSetAndroidAppsAvailableForHost( return ctxerr.Wrap(ctx, err, "queueing job") } - level.Debug(logger).Log("job_id", job.ID, "job_name", softwareWorkerJobName, "task", args.Task) + logger.DebugContext(ctx, "queued software worker job", "job_id", job.ID, "job_name", softwareWorkerJobName, "task", args.Task) return nil } @@ -556,7 +554,7 @@ func (v *SoftwareWorker) bulkSetAndroidAppsAvailableForHosts(ctx context.Context // Include the Fleet Agent in the app list so it's not removed when we replace the apps. fleetAgentPolicy, err := v.AndroidModule.BuildFleetAgentApplicationPolicy(ctx, uuid) if err != nil { - level.Error(v.Log).Log("msg", "failed to build Fleet Agent policy, Fleet Agent may be removed", "host_uuid", uuid, "err", err) + v.Log.ErrorContext(ctx, "failed to build Fleet Agent policy, Fleet Agent may be removed", "host_uuid", uuid, "err", err) } else if fleetAgentPolicy != nil { appPolicies = append(appPolicies, fleetAgentPolicy) } @@ -576,7 +574,7 @@ func (v *SoftwareWorker) bulkSetAndroidAppsAvailableForHosts(ctx context.Context func QueueBulkSetAndroidAppsAvailableForHosts( ctx context.Context, ds fleet.Datastore, - logger kitlog.Logger, + logger *slog.Logger, uuidsToIDs map[string]uint, enterpriseName string) error { @@ -591,6 +589,6 @@ func QueueBulkSetAndroidAppsAvailableForHosts( return ctxerr.Wrap(ctx, err, "queueing job") } - level.Debug(logger).Log("job_id", job.ID, "job_name", softwareWorkerJobName, "task", args.Task) + logger.DebugContext(ctx, "queued software worker job", "job_id", job.ID, "job_name", softwareWorkerJobName, "task", args.Task) return nil } diff --git a/server/worker/software_worker_test.go b/server/worker/software_worker_test.go index 704879035e..27b898171c 100644 --- a/server/worker/software_worker_test.go +++ b/server/worker/software_worker_test.go @@ -3,6 +3,7 @@ package worker import ( "context" "encoding/json" + "log/slog" "testing" "github.com/fleetdm/fleet/v4/server/datastore/mysql" @@ -10,7 +11,6 @@ import ( "github.com/fleetdm/fleet/v4/server/mdm/android" "github.com/fleetdm/fleet/v4/server/mock" "github.com/fleetdm/fleet/v4/server/ptr" - kitlog "github.com/go-kit/log" "github.com/stretchr/testify/require" "google.golang.org/api/androidmanagement/v1" ) @@ -95,7 +95,7 @@ func TestBulkSetAndroidAppsAvailableForHostsPreservesFleetAgent(t *testing.T) { worker := &SoftwareWorker{ Datastore: ds, AndroidModule: androidModule, - Log: kitlog.NewNopLogger(), + Log: slog.New(slog.DiscardHandler), } err := worker.bulkSetAndroidAppsAvailableForHosts(ctx, map[string]uint{hostUUID: hostID}, "enterprises/test") @@ -149,7 +149,7 @@ func TestBulkMakeAndroidAppsAvailableForHostPreservesFleetAgent(t *testing.T) { worker := &SoftwareWorker{ Datastore: ds, AndroidModule: androidModule, - Log: kitlog.NewNopLogger(), + Log: slog.New(slog.DiscardHandler), } // Simulate adding a VPP app via BatchAssociateVPPApps diff --git a/server/worker/vpp_verification.go b/server/worker/vpp_verification.go index 8bc697c247..d6aaf25e58 100644 --- a/server/worker/vpp_verification.go +++ b/server/worker/vpp_verification.go @@ -3,13 +3,12 @@ package worker import ( "context" "encoding/json" + "log/slog" "time" "github.com/fleetdm/fleet/v4/server/contexts/ctxerr" "github.com/fleetdm/fleet/v4/server/fleet" apple_mdm "github.com/fleetdm/fleet/v4/server/mdm/apple" - kitlog "github.com/go-kit/log" - "github.com/go-kit/log/level" ) const AppleSoftwareJobName = "apple_software" @@ -21,7 +20,7 @@ const verifyVPPTask AppleSoftwareTask = "verify_vpp_installs" type AppleSoftware struct { Datastore fleet.Datastore Commander *apple_mdm.MDMAppleCommander - Log kitlog.Logger + Log *slog.Logger } func (v *AppleSoftware) Name() string { @@ -52,7 +51,7 @@ func (v *AppleSoftware) Run(ctx context.Context, argsJSON json.RawMessage) error } func (v *AppleSoftware) verifyVPPInstalls(ctx context.Context, hostUUID, verificationCommandUUID string, disableManagedOnlyApps bool) error { - level.Debug(v.Log).Log("msg", "verifying VPP installs", "host_uuid", hostUUID, "verification_command_uuid", verificationCommandUUID) + v.Log.DebugContext(ctx, "verifying VPP installs", "host_uuid", hostUUID, "verification_command_uuid", verificationCommandUUID) newListCmdUUID := fleet.VerifySoftwareInstallCommandUUID() // for app verification, we always request only managed apps except // if disableManagedOnlyApps is true @@ -69,12 +68,12 @@ func (v *AppleSoftware) verifyVPPInstalls(ctx context.Context, hostUUID, verific return ctxerr.Wrap(ctx, err, "update in-house app install record") } - level.Debug(v.Log).Log("msg", "new installed application list command sent", "uuid", newListCmdUUID) + v.Log.DebugContext(ctx, "new installed application list command sent", "uuid", newListCmdUUID) return nil } -func QueueVPPInstallVerificationJob(ctx context.Context, ds fleet.Datastore, logger kitlog.Logger, requestDelay time.Duration, hostUUID, verificationCommandUUID string, disableManagedOnly bool) error { +func QueueVPPInstallVerificationJob(ctx context.Context, ds fleet.Datastore, logger *slog.Logger, requestDelay time.Duration, hostUUID, verificationCommandUUID string, disableManagedOnly bool) error { args := &appleSoftwareArgs{ Task: verifyVPPTask, HostUUID: hostUUID, @@ -87,6 +86,6 @@ func QueueVPPInstallVerificationJob(ctx context.Context, ds fleet.Datastore, log return ctxerr.Wrap(ctx, err, "queueing job") } - level.Debug(logger).Log("job_id", job.ID, "job_name", appleMDMJobName, "task", args.Task) + logger.DebugContext(ctx, "queued VPP install verification job", "job_id", job.ID, "job_name", AppleSoftwareJobName, "task", args.Task) return nil } diff --git a/server/worker/worker.go b/server/worker/worker.go index 68846667b9..111620d40d 100644 --- a/server/worker/worker.go +++ b/server/worker/worker.go @@ -4,12 +4,11 @@ import ( "context" "encoding/json" "fmt" + "log/slog" "time" "github.com/fleetdm/fleet/v4/server/contexts/ctxerr" "github.com/fleetdm/fleet/v4/server/fleet" - "github.com/fleetdm/fleet/v4/server/platform/logging" - "github.com/go-kit/log/level" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/trace" @@ -62,7 +61,7 @@ type vulnArgs struct { // Worker runs jobs. NOT SAFE FOR CONCURRENT USE. type Worker struct { ds fleet.Datastore - log *logging.Logger + log *slog.Logger // For tests only, allows ignoring unknown jobs instead of failing them. TestIgnoreUnknownJobs bool @@ -74,7 +73,7 @@ type Worker struct { registry map[string]Job } -func NewWorker(ds fleet.Datastore, log *logging.Logger) *Worker { +func NewWorker(ds fleet.Datastore, log *slog.Logger) *Worker { return &Worker{ ds: ds, log: log, @@ -149,7 +148,7 @@ func (w *Worker) ProcessJobs(ctx context.Context) error { jobNames := w.jobNames() if len(jobNames) == 0 { - level.Info(w.log).Log("msg", "no jobs registered, nothing to process") + w.log.InfoContext(ctx, "no jobs registered, nothing to process") return nil } @@ -175,18 +174,18 @@ func (w *Worker) ProcessJobs(ctx context.Context) error { log := w.log.With("job_id", job.ID) if _, ok := seen[job.ID]; ok { - level.Debug(log).Log("msg", "some jobs failed, retrying on next cron execution") + log.DebugContext(ctx, "some jobs failed, retrying on next cron execution") return nil } seen[job.ID] = struct{}{} - level.Debug(log).Log("msg", "processing job") + log.DebugContext(ctx, "processing job") if err := w.processJob(ctx, job); err != nil { - level.Error(log).Log("msg", "process job", "err", err) + log.ErrorContext(ctx, "process job", "err", err) job.Error = err.Error() if job.Retries < maxRetries { - level.Debug(log).Log("msg", "will retry job") + log.DebugContext(ctx, "will retry job") job.Retries += 1 delays := w.delayPerRetry if delays == nil { @@ -207,7 +206,7 @@ func (w *Worker) ProcessJobs(ctx context.Context) error { // of queue. GetQueuedJobs fetches jobs by updated_at, so it will not return the same job until the queue // has been processed once. if _, err := w.ds.UpdateJob(ctx, job.ID, job); err != nil { - level.Error(log).Log("update job", "err", err) + log.ErrorContext(ctx, "update job", "err", err) } } } diff --git a/server/worker/worker_test.go b/server/worker/worker_test.go index 022a2dee22..cf8916645e 100644 --- a/server/worker/worker_test.go +++ b/server/worker/worker_test.go @@ -57,7 +57,7 @@ func TestWorker(t *testing.T) { } logger := logging.NewNopLogger() - w := NewWorker(ds, logger) + w := NewWorker(ds, logger.SlogLogger()) // register a test job jobCalled := false @@ -113,7 +113,7 @@ func TestWorkerRetries(t *testing.T) { } logger := logging.NewNopLogger() - w := NewWorker(ds, logger) + w := NewWorker(ds, logger.SlogLogger()) // register a test job jobCalled := 0 @@ -189,7 +189,7 @@ func TestWorkerMiddleJobFails(t *testing.T) { } logger := logging.NewNopLogger() - w := NewWorker(ds, logger) + w := NewWorker(ds, logger.SlogLogger()) // register a test job var jobCallCount int @@ -246,7 +246,7 @@ func TestWorkerWithRealDatastore(t *testing.T) { mysql.TruncateTables(t, ds) logger := logging.NewNopLogger() - w := NewWorker(ds, logger) + w := NewWorker(ds, logger.SlogLogger()) w.delayPerRetry = []time.Duration{ 1: 0, 2: 0, diff --git a/server/worker/zendesk.go b/server/worker/zendesk.go index 5283e202a7..d56fc2751a 100644 --- a/server/worker/zendesk.go +++ b/server/worker/zendesk.go @@ -6,6 +6,7 @@ import ( "encoding/json" "errors" "fmt" + "log/slog" "sort" "sync" "text/template" @@ -15,8 +16,6 @@ import ( "github.com/fleetdm/fleet/v4/server/contexts/license" "github.com/fleetdm/fleet/v4/server/fleet" "github.com/fleetdm/fleet/v4/server/service/externalsvc" - kitlog "github.com/go-kit/log" - "github.com/go-kit/log/level" zendesk "github.com/nukosuke/go-zendesk/zendesk" ) @@ -123,7 +122,7 @@ type ZendeskClient interface { type Zendesk struct { FleetURL string Datastore fleet.Datastore - Log kitlog.Logger + Log *slog.Logger NewClientFunc func(*externalsvc.ZendeskOptions) (ZendeskClient, error) // mu protects concurrent access to clientsCache, so that the job processor @@ -303,8 +302,7 @@ func (z *Zendesk) runVuln(ctx context.Context, cli ZendeskClient, args zendeskAr if err != nil { return err } - level.Debug(z.Log).Log( - "msg", "created zendesk ticket for cve", + z.Log.DebugContext(ctx, "created zendesk ticket for cve", "cve", vargs.CVE, "ticket_id", createdTicket.ID, ) @@ -319,8 +317,7 @@ func (z *Zendesk) runFailingPolicy(ctx context.Context, cli ZendeskClient, args return err } - attrs := []interface{}{ - "msg", "created zendesk ticket for failing policy", + attrs := []any{ "policy_id", args.FailingPolicy.PolicyID, "policy_name", args.FailingPolicy.PolicyName, "ticket_id", createdTicket.ID, @@ -328,11 +325,11 @@ func (z *Zendesk) runFailingPolicy(ctx context.Context, cli ZendeskClient, args if args.FailingPolicy.TeamID != nil { attrs = append(attrs, "team_id", *args.FailingPolicy.TeamID) } - level.Debug(z.Log).Log(attrs...) + z.Log.DebugContext(ctx, "created zendesk ticket for failing policy", attrs...) return nil } -func (z *Zendesk) createTemplatedTicket(ctx context.Context, cli ZendeskClient, summaryTpl, descTpl *template.Template, args interface{}) (*zendesk.Ticket, error) { +func (z *Zendesk) createTemplatedTicket(ctx context.Context, cli ZendeskClient, summaryTpl, descTpl *template.Template, args any) (*zendesk.Ticket, error) { var buf bytes.Buffer if err := summaryTpl.Execute(&buf, args); err != nil { return nil, ctxerr.Wrap(ctx, err, "execute summary template") @@ -362,11 +359,11 @@ func (z *Zendesk) createTemplatedTicket(ctx context.Context, cli ZendeskClient, func QueueZendeskVulnJobs( ctx context.Context, ds fleet.Datastore, - logger kitlog.Logger, + logger *slog.Logger, recentVulns []fleet.SoftwareVulnerability, cveMeta map[string]fleet.CVEMeta, ) error { - level.Info(logger).Log("enabled", "true", "recentVulns", len(recentVulns)) + logger.InfoContext(ctx, "zendesk integration enabled", "recent_vulns", len(recentVulns)) // for troubleshooting, log in debug level the CVEs that we will process // (cannot be done in the loop below as we want to add the debug log @@ -376,7 +373,7 @@ func QueueZendeskVulnJobs( cves = append(cves, vuln.GetCVE()) } sort.Strings(cves) - level.Debug(logger).Log("recent_cves", fmt.Sprintf("%v", cves)) + logger.DebugContext(ctx, "recent CVEs to process", "recent_cves", fmt.Sprintf("%v", cves)) cveGrouped := make(map[string][]uint) for _, v := range recentVulns { @@ -395,14 +392,14 @@ func QueueZendeskVulnJobs( if err != nil { return ctxerr.Wrap(ctx, err, "queueing job") } - level.Debug(logger).Log("job_id", job.ID) + logger.DebugContext(ctx, "queued zendesk vuln job", "job_id", job.ID) } return nil } // QueueZendeskFailingPolicyJob queues a Zendesk job for a failing policy to // process asynchronously via the worker. -func QueueZendeskFailingPolicyJob(ctx context.Context, ds fleet.Datastore, logger kitlog.Logger, +func QueueZendeskFailingPolicyJob(ctx context.Context, ds fleet.Datastore, logger *slog.Logger, policy *fleet.Policy, hosts []fleet.PolicySetHost, ) error { attrs := []interface{}{ @@ -414,12 +411,11 @@ func QueueZendeskFailingPolicyJob(ctx context.Context, ds fleet.Datastore, logge attrs = append(attrs, "team_id", *policy.TeamID) } if len(hosts) == 0 { - attrs = append(attrs, "msg", "skipping, no host") - level.Debug(logger).Log(attrs...) + logger.DebugContext(ctx, "skipping, no host", attrs...) return nil } - level.Info(logger).Log(attrs...) + logger.InfoContext(ctx, "queueing Zendesk failing policy job", attrs...) args := &failingPolicyArgs{ PolicyID: policy.ID, @@ -432,6 +428,6 @@ func QueueZendeskFailingPolicyJob(ctx context.Context, ds fleet.Datastore, logge if err != nil { return ctxerr.Wrap(ctx, err, "queueing job") } - level.Debug(logger).Log("job_id", job.ID) + logger.DebugContext(ctx, "queued zendesk failing policy job", "job_id", job.ID) return nil } diff --git a/server/worker/zendesk_test.go b/server/worker/zendesk_test.go index 548ec6bf5f..98a2967ea9 100644 --- a/server/worker/zendesk_test.go +++ b/server/worker/zendesk_test.go @@ -5,6 +5,7 @@ import ( "encoding/json" "errors" "io" + "log/slog" "net/http" "net/http/httptest" "testing" @@ -14,7 +15,6 @@ import ( "github.com/fleetdm/fleet/v4/server/mock" "github.com/fleetdm/fleet/v4/server/ptr" "github.com/fleetdm/fleet/v4/server/service/externalsvc" - kitlog "github.com/go-kit/log" zendesk "github.com/nukosuke/go-zendesk/zendesk" "github.com/stretchr/testify/require" ) @@ -182,7 +182,7 @@ func TestZendeskRun(t *testing.T) { zendesk := &Zendesk{ FleetURL: "https://fleetdm.com", Datastore: ds, - Log: kitlog.NewNopLogger(), + Log: slog.New(slog.DiscardHandler), NewClientFunc: func(opts *externalsvc.ZendeskOptions) (ZendeskClient, error) { return client, nil }, @@ -200,7 +200,7 @@ func TestZendeskRun(t *testing.T) { func TestZendeskQueueVulnJobs(t *testing.T) { ds := new(mock.Store) ctx := context.Background() - logger := kitlog.NewNopLogger() + logger := slog.New(slog.DiscardHandler) t.Run("same vulnerability on multiple software only queue one job", func(t *testing.T) { var count int @@ -263,7 +263,7 @@ func TestZendeskQueueVulnJobs(t *testing.T) { func TestZendeskQueueFailingPolicyJob(t *testing.T) { ds := new(mock.Store) ctx := context.Background() - logger := kitlog.NewNopLogger() + logger := slog.New(slog.DiscardHandler) t.Run("success global", func(t *testing.T) { ds.NewJobFunc = func(ctx context.Context, job *fleet.Job) (*fleet.Job, error) { @@ -386,7 +386,7 @@ func TestZendeskRunClientUpdate(t *testing.T) { zendeskJob := &Zendesk{ FleetURL: "http://example.com", Datastore: ds, - Log: kitlog.NewNopLogger(), + Log: slog.New(slog.DiscardHandler), NewClientFunc: func(opts *externalsvc.ZendeskOptions) (ZendeskClient, error) { // keep track of group IDs received in calls to NewClientFunc groupIDs = append(groupIDs, opts.GroupID) diff --git a/tools/jira-integration/main.go b/tools/jira-integration/main.go index 88fa74a060..fdb785cf1a 100644 --- a/tools/jira-integration/main.go +++ b/tools/jira-integration/main.go @@ -12,6 +12,7 @@ import ( "flag" "fmt" "log" + "log/slog" "os" "github.com/fleetdm/fleet/v4/server/contexts/license" @@ -19,7 +20,6 @@ import ( "github.com/fleetdm/fleet/v4/server/mock" "github.com/fleetdm/fleet/v4/server/service/externalsvc" "github.com/fleetdm/fleet/v4/server/worker" - kitlog "github.com/go-kit/log" ) func main() { @@ -77,7 +77,7 @@ func main() { os.Exit(1) } - logger := kitlog.NewLogfmtLogger(os.Stdout) + logger := slog.New(slog.NewTextHandler(os.Stdout, nil)) ds := new(mock.Store) ds.HostsByCVEFunc = func(ctx context.Context, cve string) ([]fleet.HostVulnerabilitySummary, error) { diff --git a/tools/zendesk-integration/main.go b/tools/zendesk-integration/main.go index b4b24cf708..bcb81eb04a 100644 --- a/tools/zendesk-integration/main.go +++ b/tools/zendesk-integration/main.go @@ -12,6 +12,7 @@ import ( "flag" "fmt" "log" + "log/slog" "os" "github.com/fleetdm/fleet/v4/server/contexts/license" @@ -19,7 +20,6 @@ import ( "github.com/fleetdm/fleet/v4/server/mock" "github.com/fleetdm/fleet/v4/server/service/externalsvc" "github.com/fleetdm/fleet/v4/server/worker" - kitlog "github.com/go-kit/log" ) func main() { @@ -77,7 +77,7 @@ func main() { os.Exit(1) } - logger := kitlog.NewLogfmtLogger(os.Stdout) + logger := slog.New(slog.NewTextHandler(os.Stdout, nil)) ds := new(mock.Store) ds.HostsByCVEFunc = func(ctx context.Context, cve string) ([]fleet.HostVulnerabilitySummary, error) {