Files
houston/server/server.go

183 lines
3.8 KiB
Go
Raw Normal View History

2023-05-21 23:37:54 +09:00
package server
import (
"fmt"
"net"
"repositories.action2quare.com/ayo/gocommon"
2024-09-27 17:34:29 +09:00
"repositories.action2quare.com/ayo/gocommon/flagx"
2023-06-14 00:13:51 +09:00
"repositories.action2quare.com/ayo/gocommon/logger"
2023-05-22 02:13:03 +09:00
"repositories.action2quare.com/ayo/houston/shared"
"repositories.action2quare.com/ayo/houston/shared/protos"
2023-05-21 23:37:54 +09:00
"google.golang.org/grpc"
)
// protoc --go_out=. --go-grpc_out=. protos/*.proto
type HoustonServer interface {
2023-06-09 11:53:31 +09:00
Start() error
2023-05-21 23:37:54 +09:00
Stop()
Operation() Operation
}
2023-06-09 11:53:31 +09:00
type serverConfig struct {
2024-09-27 17:34:29 +09:00
GrpcPort int `json:"grpc_port"`
StorageRoot string `json:"storage_path"`
2023-06-09 11:53:31 +09:00
}
2023-05-21 23:37:54 +09:00
type DeployRequest struct {
shared.DeployRequest
hostnames []string
}
func MakeDeployRequest(req shared.DeployRequest, targets []string) DeployRequest {
return DeployRequest{
DeployRequest: req,
hostnames: targets,
}
}
type WithdrawRequest struct {
shared.WithdrawRequest
hostnames []string
}
func MakeWithdrawRequest(req shared.WithdrawRequest, targets []string) WithdrawRequest {
return WithdrawRequest{
WithdrawRequest: req,
hostnames: targets,
}
}
type StartProcessRequest struct {
shared.StartProcessRequest
hostnames []string
}
func MakeStartProcessRequest(req shared.StartProcessRequest, targets []string) StartProcessRequest {
return StartProcessRequest{
StartProcessRequest: req,
hostnames: targets,
}
}
type StopProcessRequest struct {
shared.StopProcessRequest
hostnames []string
}
2023-05-22 15:40:01 +09:00
func MakeStopProcessRequest(req shared.StopProcessRequest, targets []string) StopProcessRequest {
2023-05-21 23:37:54 +09:00
return StopProcessRequest{
StopProcessRequest: req,
hostnames: targets,
}
}
type RestartProcessRequest struct {
shared.RestartProcessRequest
hostnames []string
}
func MakeRestartRequest(req shared.RestartProcessRequest, targets []string) RestartProcessRequest {
return RestartProcessRequest{
RestartProcessRequest: req,
hostnames: targets,
}
}
type UploadRequest struct {
shared.UploadRequest
hostnames []string
}
func MakeUploadRequest(req shared.UploadRequest, targets []string) UploadRequest {
return UploadRequest{
UploadRequest: req,
hostnames: targets,
}
}
type Operation interface {
Deploy(DeployRequest)
Withdraw(WithdrawRequest)
StartProcess(StartProcessRequest)
StopProcess(StopProcessRequest)
RestartProcess(RestartProcessRequest)
Upload(UploadRequest)
Hosts() map[string]hostSnapshot
DeplyingProgress() []deployingProgress
2023-05-21 23:37:54 +09:00
}
type outerconfig struct {
2024-09-27 17:34:29 +09:00
Houston struct {
Server serverConfig `json:"server"`
} `json:"houston"`
}
2023-06-13 16:26:00 +09:00
2024-09-27 17:34:29 +09:00
var storagePath = flagx.String("hs_storage", "", "")
var grpcPort = flagx.Int("hs_grpc_port", 0, "")
func loadServerConfig() serverConfig {
var oc outerconfig
err := gocommon.LoadConfig[outerconfig](&oc)
if err != nil {
2023-06-14 00:13:51 +09:00
logger.Println(err)
2023-06-13 16:26:00 +09:00
return serverConfig{
GrpcPort: 8080,
}
}
2024-09-27 17:34:29 +09:00
if len(*storagePath) > 0 {
// override
oc.Houston.Server.StorageRoot = *storagePath
}
if *grpcPort != 0 {
oc.Houston.Server.GrpcPort = *grpcPort
}
return oc.Houston.Server
}
func NewServer() HoustonServer {
2023-05-21 23:37:54 +09:00
var opts []grpc.ServerOption
grpcServer := grpc.NewServer(opts...)
os := newOperationServer()
ms := newMonitorServer()
protos.RegisterOperationServer(grpcServer, os)
protos.RegisterMonitorServer(grpcServer, ms)
return &houstonServer{
rpcServer: grpcServer,
os: os,
ms: ms,
2023-06-13 16:26:00 +09:00
port: loadServerConfig().GrpcPort,
2023-05-21 23:37:54 +09:00
}
}
type houstonServer struct {
rpcServer *grpc.Server
os *operationServer
ms *monitorServer
2023-06-09 11:53:31 +09:00
port int
2023-05-21 23:37:54 +09:00
}
2023-06-09 11:53:31 +09:00
func (hs *houstonServer) Start() error {
2023-06-14 00:13:51 +09:00
logger.Println("houston server is started at port", hs.port)
2023-06-09 11:53:31 +09:00
lis, err := net.Listen("tcp", fmt.Sprintf("0.0.0.0:%d", hs.port))
2023-05-21 23:37:54 +09:00
if err != nil {
return err
}
return hs.rpcServer.Serve(lis)
2023-05-21 23:37:54 +09:00
}
func (hs *houstonServer) Stop() {
2023-06-29 12:24:13 +09:00
hs.rpcServer.Stop()
2023-05-21 23:37:54 +09:00
}
func (hs *houstonServer) Operation() Operation {
return hs.os
}