mirror of
https://github.com/komari-monitor/komari.git
synced 2025-11-04 05:53:15 +00:00
106 lines
2.9 KiB
Go
106 lines
2.9 KiB
Go
package tasks
|
|
|
|
import (
|
|
"encoding/json"
|
|
"time"
|
|
|
|
"github.com/komari-monitor/komari/database/dbcore"
|
|
"github.com/komari-monitor/komari/database/models"
|
|
)
|
|
|
|
func CreateTask(taskId string, clients []string, command string) error {
|
|
db := dbcore.GetDBInstance()
|
|
// Convert clients slice to JSON string
|
|
clientsJSON, err := json.Marshal(clients)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
// Create a new task in the database
|
|
task := models.Task{
|
|
TaskId: taskId,
|
|
Clients: string(clientsJSON),
|
|
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: "",
|
|
CreatedAt: time.Now().Format(time.RFC3339),
|
|
})
|
|
}
|
|
if len(taskResults) > 0 {
|
|
return db.Create(&taskResults).Error
|
|
}
|
|
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 time.Time) error {
|
|
taskResult := models.TaskResult{
|
|
TaskId: taskId,
|
|
Client: clientId,
|
|
Result: result,
|
|
ExitCode: &exitCode,
|
|
FinishedAt: timestamp.Format(time.RFC3339),
|
|
}
|
|
return dbcore.GetDBInstance().Create(&taskResult).Error
|
|
}
|
|
|
|
func ClearTaskResultsByTimeBefore(before time.Time) error {
|
|
return dbcore.GetDBInstance().Where("created_at < ?", before.Format(time.RFC3339)).Delete(&models.TaskResult{}).Error
|
|
}
|