77 lines
2.5 KiB
Go
77 lines
2.5 KiB
Go
package controllers
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
|
|
"git.ourworld.tf/herocode/heroagent/pkg/servers/ui/models"
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
// ProcessController handles requests related to process management.
|
|
type ProcessController struct {
|
|
ProcessService models.ProcessManagerService
|
|
}
|
|
|
|
// NewProcessController creates a new instance of ProcessController.
|
|
func NewProcessController(ps models.ProcessManagerService) *ProcessController {
|
|
return &ProcessController{
|
|
ProcessService: ps,
|
|
}
|
|
}
|
|
|
|
// ShowProcessManager renders the process manager page.
|
|
// @Summary Show process manager
|
|
// @Description Displays a list of running processes.
|
|
// @Tags process
|
|
// @Produce html
|
|
// @Success 200 {string} html "Process manager page HTML"
|
|
// @Failure 500 {object} fiber.Map "Error message if processes cannot be fetched"
|
|
// @Router /processes [get]
|
|
func (pc *ProcessController) ShowProcessManager(c *fiber.Ctx) error {
|
|
processes, err := pc.ProcessService.GetProcesses()
|
|
if err != nil {
|
|
// Log the error appropriately in a real application
|
|
fmt.Println("Error fetching processes:", err)
|
|
return c.Status(fiber.StatusInternalServerError).Render("pages/process_manager", fiber.Map{
|
|
"Title": "Process Manager",
|
|
"Processes": []models.Process{}, // Empty list on error
|
|
"Error": "Failed to retrieve process list.",
|
|
})
|
|
}
|
|
|
|
return c.Render("pages/process_manager", fiber.Map{
|
|
"Title": "Process Manager",
|
|
"Processes": processes,
|
|
})
|
|
}
|
|
|
|
// HandleKillProcess handles the request to kill a specific process.
|
|
// @Summary Kill a process
|
|
// @Description Terminates a process by its PID.
|
|
// @Tags process
|
|
// @Produce html
|
|
// @Param pid path int true "Process ID"
|
|
// @Success 302 "Redirects to process manager page"
|
|
// @Failure 400 {object} fiber.Map "Error message if PID is invalid"
|
|
// @Failure 500 {object} fiber.Map "Error message if process cannot be killed"
|
|
// @Router /processes/kill/{pid} [post]
|
|
func (pc *ProcessController) HandleKillProcess(c *fiber.Ctx) error {
|
|
pidStr := c.Params("pid")
|
|
pid, err := strconv.Atoi(pidStr)
|
|
if err != nil {
|
|
// Log error
|
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid PID format"})
|
|
}
|
|
|
|
err = pc.ProcessService.KillProcess(pid)
|
|
if err != nil {
|
|
// Log error
|
|
// In a real app, you might want to return a more user-friendly error page or message
|
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": "Failed to kill process"})
|
|
}
|
|
|
|
// Redirect back to the process manager page
|
|
return c.Redirect("/processes")
|
|
}
|