package jobs import ( "context" "encoding/json" "fmt" "log" "time" "github.com/hibiken/asynq" ) const ( TypeInstallChart = "chart:install" ) type InstallChartPayload struct { ChartName string Version string Namespace string UserID string } func NewInstallCahrtTask(chartname, version, ns, userID string) *asynq.Task { payload, _ := json.Marshal(InstallChartPayload{ ChartName: chartname, Version: version, Namespace: ns, UserID: userID, }) return asynq.NewTask(TypeInstallChart, payload) } func HandleInstallCahrt(ctx context.Context, t *asynq.Task) error { var payload InstallChartPayload if err := json.Unmarshal(t.Payload(), &payload); err != nil { return fmt.Errorf("Faild to parse payload: %w", err) } log.Printf("[Job] Installing chart %s in namespace %s", payload.ChartName, payload.Namespace) log.Printf("[Job] Validating Chart ... ") time.Sleep(2 * time.Second) log.Printf("[Job] Creating resources ...") time.Sleep(2 * time.Second) log.Printf("[Job] Wating for pods ...") time.Sleep(2 * time.Second) log.Printf("[Job] Finilizing installation ...") log.Printf("[Job] chart %s installed successfully", payload.ChartName) return nil }