Ctrl K
ComunidadGuías…

internal/task/task_temporary_directory_reclaimer.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package task

import (
	"context"
	"log/slog"

	"github.com/yeomyeonggeori/blueclaw/internal/security"
)

type TaskTemporaryDirectoryReclaimer struct {
	cleaner security.TaskTemporaryDirectoryCleaner
	logger  *slog.Logger
}

func NewTaskTemporaryDirectoryReclaimer(workspaceRootPath string, actors security.WorkspaceActorFactory, logger *slog.Logger) TaskTemporaryDirectoryReclaimer {
	return TaskTemporaryDirectoryReclaimer{
		cleaner: security.TaskTemporaryDirectoryCleaner{WorkspaceRootPath: workspaceRootPath, Actors: actors},
		logger:  logger,
	}
}

func (reclaimer TaskTemporaryDirectoryReclaimer) Observe(taskRun TaskRun) {
	if !taskRunHasEnded(taskRun.Status) {
		return
	}
	errorValue := reclaimer.cleaner.RemoveTaskTemporaryDirectory(context.Background(), taskRun.RequesterPersonID, taskRun.TaskRunID)
	if errorValue == nil {
		return
	}
	reclaimer.activeLogger().Warn("task_temporary_directory.remove_failed",
		"taskRunID", taskRun.TaskRunID,
		"status", string(taskRun.Status),
		"error", errorValue)
}

func taskRunHasEnded(status TaskStatus) bool {
	return status == TaskStatusCompleted || status == TaskStatusFailed || status == TaskStatusCancelled
}

func (reclaimer TaskTemporaryDirectoryReclaimer) activeLogger() *slog.Logger {
	if reclaimer.logger != nil {
		return reclaimer.logger
	}
	return slog.Default()
}