magmise/api/controllers/container.go

74 lines
1.4 KiB
Go

package controllers
import (
"io"
"log"
"magmise/models"
"net/http"
"github.com/go-chi/chi/v5"
"github.com/gorilla/websocket"
)
var upgrader = websocket.Upgrader{}
type Container struct {
}
func (c Container) Start(w http.ResponseWriter, r *http.Request) {
name := chi.URLParam(r, "name")
if name == "" {
http.Error(w, "Missing container name", http.StatusNotFound)
return
}
id, err := models.GetId(name)
if err != nil {
http.Error(w, err.Error(), http.StatusNotFound)
return
}
models.ContainerStart(id)
}
func (c Container) Stop(w http.ResponseWriter, r *http.Request) {
name := chi.URLParam(r, "name")
if name == "" {
http.Error(w, "Missing container name", http.StatusNotFound)
return
}
id, err := models.GetId(name)
if err != nil {
http.Error(w, err.Error(), http.StatusNotFound)
return
}
models.ContainerStop(id)
}
func (c Container) Logs(w http.ResponseWriter, r *http.Request) {
name := chi.URLParam(r, "name")
if name == "" {
http.Error(w, "Missing container name", http.StatusNotFound)
return
}
log.Println("Logs ", name)
id, err := models.GetId(name)
if err != nil {
http.Error(w, err.Error(), http.StatusNotFound)
return
}
ws, err := Websocket(w, r)
if err != nil {
log.Print("upgrade:", err)
return
}
defer ws.Close()
logs, err := models.ContainerLogs(id, true)
if err != nil {
http.Error(w, err.Error(), http.StatusNotFound)
return
}
defer logs.Close()
io.Copy(ws, logs)
}