func()

in internal/vulnerability/worker.go [82:158]


func (f *VulnerabilityWorker) Run(ctx context.Context) {
	f.log.Info("Starting VulnerabilityWorker.work")
	defer func() {
		if err := f.runner.Close(ctx); err != nil {
			f.log.Warnf("error during runner closing %s", err.Error())
		}
	}()

	if ctx.Err() != nil {
		f.log.Info("VulnerabilityWorker.work context canceled")
		return
	}

	defer f.manager.Cleanup(ctx)

	jobs := []struct {
		name string
		fn   func(ctx context.Context) error
	}{
		{
			name: "DeleteOldSnapshots",
			fn: func(ctx context.Context) error {
				f.manager.DeleteOldSnapshots(ctx)
				return nil
			},
		},
		{
			name: "FetchInstances",
			fn:   f.fetcher.FetchInstances,
		},
		{
			name: "SnapshotInstance",
			fn: func(ctx context.Context) error {
				f.replicator.SnapshotInstance(ctx, f.fetcher.GetChan())
				return nil
			},
		},
		{
			name: "VerifySnapshot",
			fn: func(ctx context.Context) error {
				f.verifier.VerifySnapshot(ctx, f.replicator.GetChan())
				return nil
			},
		},
		{
			name: "ScanSnapshot",
			fn: func(ctx context.Context) error {
				f.evaluator.ScanSnapshot(ctx, f.verifier.GetChan())
				return nil
			},
		},
		{
			name: "CreateEvents",
			fn: func(ctx context.Context) error {
				f.eventsCreator.CreateEvents(ctx, f.evaluator.GetChan())
				return nil
			},
		},
	}
	var wg sync.WaitGroup
	wg.Add(len(jobs))
	for _, job := range jobs {
		go func() {
			defer wg.Done()
			err := job.fn(ctx)
			if err != nil {
				f.log.Errorf("VulnerabilityWorker.work job %s failed: %s", job.name, err.Error())
			} else {
				f.log.Infof("VulnerabilityWorker.work job %s finished", job.name)
			}
		}()
	}

	f.log.Info("VulnerabilityWorker.work waiting on workers")
	wg.Wait()
	f.log.Info("VulnerabilityWorker.work finished waiting on workers")
}