refactor: Phase 1 - Extract worker interfaces
Created interfaces package to break tight coupling: 1. internal/worker/interfaces/executor.go (30 lines) - JobExecutor interface for job execution - ExecutionEnv struct for execution context - ExecutionResult struct for results 2. internal/worker/interfaces/tracker.go (20 lines) - ProgressTracker interface for execution stages - StageStart, StageComplete, StageFailed methods - JobComplete for final status 3. internal/worker/interfaces/manifest.go (18 lines) - ManifestWriter interface for manifest operations - Upsert method for update/create - BuildInitial method for creating new manifests These interfaces will enable: - Dependency injection in future phases - Mocking for unit tests - Clean separation between orchestration and execution Build status: Compiles successfully
This commit is contained in:
parent
c46be7f815
commit
ae0a370fb4
3 changed files with 71 additions and 0 deletions
33
internal/worker/interfaces/executor.go
Normal file
33
internal/worker/interfaces/executor.go
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
// Package interfaces defines the contracts for worker components
|
||||
package interfaces
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/jfraeys/fetch_ml/internal/queue"
|
||||
)
|
||||
|
||||
// ExecutionEnv holds the environment for job execution
|
||||
type ExecutionEnv struct {
|
||||
JobDir string
|
||||
OutputDir string
|
||||
LogFile string
|
||||
GPUDevices []string
|
||||
GPUEnvVar string
|
||||
GPUDevicesStr string
|
||||
}
|
||||
|
||||
// JobExecutor defines the contract for executing jobs
|
||||
type JobExecutor interface {
|
||||
// Execute runs a job with the given context, task, and environment
|
||||
Execute(ctx context.Context, task *queue.Task, env ExecutionEnv) error
|
||||
}
|
||||
|
||||
// ExecutionResult holds the result of job execution
|
||||
type ExecutionResult struct {
|
||||
Success bool
|
||||
ExitCode int
|
||||
Duration time.Duration
|
||||
Error error
|
||||
}
|
||||
17
internal/worker/interfaces/manifest.go
Normal file
17
internal/worker/interfaces/manifest.go
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
// Package interfaces defines the contracts for worker components
|
||||
package interfaces
|
||||
|
||||
import (
|
||||
"github.com/jfraeys/fetch_ml/internal/manifest"
|
||||
"github.com/jfraeys/fetch_ml/internal/queue"
|
||||
)
|
||||
|
||||
// ManifestWriter defines the contract for writing run manifests
|
||||
type ManifestWriter interface {
|
||||
// Upsert updates or creates a manifest in the given directory
|
||||
// The mutate function is called with the current or new manifest
|
||||
Upsert(dir string, task *queue.Task, mutate func(*manifest.RunManifest))
|
||||
|
||||
// BuildInitial creates a new initial manifest for a task
|
||||
BuildInitial(task *queue.Task, podmanImage string) *manifest.RunManifest
|
||||
}
|
||||
21
internal/worker/interfaces/tracker.go
Normal file
21
internal/worker/interfaces/tracker.go
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
// Package interfaces defines the contracts for worker components
|
||||
package interfaces
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
// ProgressTracker defines the contract for tracking job execution progress
|
||||
type ProgressTracker interface {
|
||||
// StageStart marks the beginning of an execution stage
|
||||
StageStart(taskID, stage string)
|
||||
|
||||
// StageComplete marks successful completion of a stage
|
||||
StageComplete(taskID, stage string, duration time.Duration)
|
||||
|
||||
// StageFailed marks a stage failure
|
||||
StageFailed(taskID, stage string, err error)
|
||||
|
||||
// JobComplete marks job completion with final status
|
||||
JobComplete(taskID string, success bool, duration time.Duration)
|
||||
}
|
||||
Loading…
Reference in a new issue