프로세스 재시작 요청 추가

This commit is contained in:
2023-06-26 11:26:57 +09:00
parent 3d3020f827
commit 06b390815c
4 changed files with 124 additions and 64 deletions

View File

@ -2,7 +2,6 @@ package server
import (
"encoding/json"
"errors"
"fmt"
"io"
"io/fs"
@ -10,6 +9,7 @@ import (
"os"
"path"
"strconv"
"strings"
"time"
"repositories.action2quare.com/ayo/gocommon/logger"
@ -140,6 +140,43 @@ func (h *houstonHandler) DeleteDeploySource(w http.ResponseWriter, r *http.Reque
}
}
func (h *houstonHandler) findLastestConfigFile(name string) (string, error) {
logger.Println("findLastestConfigFile :", name)
configFiles, err := os.ReadDir(path.Join(h.deployPath, name, "config"))
if err != nil {
logger.Println("findLastestConfigFile failed :", err)
return "", err
}
var cf fs.FileInfo
for _, file := range configFiles {
if file.IsDir() {
continue
}
if strings.HasPrefix(file.Name(), "config.") {
test, err := file.Info()
if err != nil {
return "", err
}
if cf == nil {
cf = test
} else if test.ModTime().After(cf.ModTime()) {
cf = test
}
}
}
if cf != nil {
logger.Println("findLastestConfigFile cf found :", cf.Name())
return path.Join(sub_folder_name_deploys, name, "config", cf.Name()), nil
}
logger.Println("findLastestConfigFile cf NOT found")
return "", nil
}
func (h *houstonHandler) Deploy(w http.ResponseWriter, r *http.Request) {
// <form action="/houston" method="post" enctype="multipart/form-data">
// <input type="text" name="name">
@ -191,9 +228,11 @@ func (h *houstonHandler) Deploy(w http.ResponseWriter, r *http.Request) {
return
}
configPath := ""
if _, err := os.Stat(path.Join(h.deployPath, name, "config", "config.json")); err == nil || errors.Is(err, fs.ErrExist) {
configPath = path.Join(sub_folder_name_deploys, name, "config", "config.json")
configPath, err := h.findLastestConfigFile(name)
if err != nil {
logger.Println(err)
w.WriteHeader(http.StatusBadRequest)
return
}
h.Operation().Deploy(MakeDeployRequest(
@ -310,6 +349,51 @@ func (h *houstonHandler) StopProcess(w http.ResponseWriter, r *http.Request) {
}, targets))
}
func (h *houstonHandler) RestartProcess(w http.ResponseWriter, r *http.Request) {
// <form action="/houston" method="post" enctype="multipart/form-data">
// <input type="text" name="name">
// <input type="text" name="target">
// <input type="text" name="pid">
// <input type="text" name="config">
// </form>
pidstr := r.FormValue("pid")
target := r.FormValue("target")
name := r.FormValue("name")
if len(target) == 0 || len(pidstr) == 0 || len(name) == 0 {
w.WriteHeader(http.StatusBadRequest)
return
}
deployConfig := false
configstr := r.FormValue("config")
if len(configstr) > 0 {
deployConfig, _ = strconv.ParseBool(configstr)
}
pid, err := strconv.ParseInt(pidstr, 10, 0)
if err != nil {
logger.Println(err)
w.WriteHeader(http.StatusBadRequest)
return
}
var configPath string
if deployConfig {
configPath, err = h.findLastestConfigFile(name)
if err != nil {
logger.Println(err)
w.WriteHeader(http.StatusBadRequest)
return
}
}
h.Operation().RestartProcess(MakeRestartRequest(shared.RestartProcessRequest{
Name: name,
Pid: int32(pid),
Config: configPath,
}, []string{target}))
}
func (h *houstonHandler) UploadLogs(w http.ResponseWriter, r *http.Request) {
// <form action="/houston" method="post" enctype="multipart/form-data">
// <input type="text" name="name">

View File

@ -328,26 +328,18 @@ func (os *operationServer) RestartProcess(d RestartProcessRequest) {
return false
})
if len(d.hostnames) > 0 {
// hostname만 재시작
var final []*hostWithChan
conv := make(map[string]bool)
for _, hn := range d.hostnames {
conv[hn] = true
}
for _, t := range targets {
if _, ok := conv[t.Hostname]; ok {
final = append(final, t)
}
}
targets = final
if len(d.hostnames) != 1 {
return
}
// hostname만 재시작
for _, t := range targets {
t.opChan <- &opdef{
operation: shared.Restart,
args: d,
if t.Hostname == d.hostnames[0] {
t.opChan <- &opdef{
operation: shared.Restart,
args: d,
}
return
}
}
}