mirror of
https://github.com/gazer-x/komari.git
synced 2026-06-22 00:05:52 +08:00
107 lines
3.1 KiB
Go
107 lines
3.1 KiB
Go
package tasks
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/gookit/event"
|
|
"github.com/komari-monitor/komari/internal/database/dbcore"
|
|
"github.com/komari-monitor/komari/internal/database/models"
|
|
"github.com/komari-monitor/komari/internal/eventType"
|
|
)
|
|
|
|
func CreateTask(taskId string, clients []string, command string) error {
|
|
db := dbcore.GetDBInstance()
|
|
// Create a new task in the database with clients as JSON array
|
|
task := models.Task{
|
|
TaskId: taskId,
|
|
Clients: models.StringArray(clients),
|
|
Command: command,
|
|
}
|
|
if err := db.Create(&task).Error; err != nil {
|
|
return err
|
|
}
|
|
var taskResults []models.TaskResult
|
|
for _, client := range clients {
|
|
taskResults = append(taskResults, models.TaskResult{
|
|
TaskId: taskId,
|
|
Client: client,
|
|
Result: "",
|
|
ExitCode: nil,
|
|
FinishedAt: nil,
|
|
CreatedAt: models.FromTime(time.Now()),
|
|
})
|
|
}
|
|
if len(taskResults) > 0 {
|
|
return db.Create(&taskResults).Error
|
|
}
|
|
event.Trigger(eventType.TaskCreated, event.M{
|
|
"task": taskId,
|
|
"clients": clients,
|
|
"command": command,
|
|
})
|
|
return nil
|
|
}
|
|
func GetTaskByTaskId(taskId string) (*models.Task, error) {
|
|
var task models.Task
|
|
if err := dbcore.GetDBInstance().Where("task_id = ?", taskId).First(&task).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return &task, nil
|
|
}
|
|
func GetTasksByClientId(clientId string) ([]models.Task, error) {
|
|
var tasks []models.Task
|
|
if err := dbcore.GetDBInstance().Where("clients LIKE ?", "%"+clientId+"%").Find(&tasks).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return tasks, nil
|
|
}
|
|
|
|
func GetSpecificTaskResult(taskId, clientId string) (*models.TaskResult, error) {
|
|
var result models.TaskResult
|
|
if err := dbcore.GetDBInstance().Where("task_id = ? AND client = ?", taskId, clientId).First(&result).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return &result, nil
|
|
}
|
|
|
|
func GetAllTasksResultByUUID(uuid string) ([]models.TaskResult, error) {
|
|
var results []models.TaskResult
|
|
if err := dbcore.GetDBInstance().Where("client = ?", uuid).Find(&results).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return results, nil
|
|
}
|
|
func GetAllTasks() ([]models.Task, error) {
|
|
var tasks []models.Task
|
|
if err := dbcore.GetDBInstance().Find(&tasks).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return tasks, nil
|
|
}
|
|
|
|
func GetTaskResultsByTaskId(taskId string) ([]models.TaskResult, error) {
|
|
var results []models.TaskResult
|
|
if err := dbcore.GetDBInstance().Where("task_id = ?", taskId).Find(&results).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return results, nil
|
|
}
|
|
func DeleteTaskByTaskId(taskId string) error {
|
|
return dbcore.GetDBInstance().Where("task_id = ?", taskId).Delete(&models.Task{}).Error
|
|
}
|
|
|
|
func SaveTaskResult(taskId, clientId, result string, exitCode int, timestamp models.LocalTime) error {
|
|
return dbcore.GetDBInstance().
|
|
Model(&models.TaskResult{}).
|
|
Where("task_id = ? AND client = ?", taskId, clientId).
|
|
Updates(map[string]interface{}{
|
|
"result": result,
|
|
"exit_code": exitCode,
|
|
"finished_at": timestamp,
|
|
}).Error
|
|
}
|
|
|
|
func ClearTaskResultsByTimeBefore(before time.Time) error {
|
|
return dbcore.GetDBInstance().Where("created_at < ?", before.Format(time.RFC3339)).Delete(&models.TaskResult{}).Error
|
|
}
|