Files
houston/server/server.go

145 lines
2.9 KiB
Go
Raw Normal View History

2023-05-21 23:37:54 +09:00
package server
import (
"fmt"
"net"
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 {
Start(port int) error
Stop()
Operation() Operation
}
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
}
func NewServer() HoustonServer {
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,
}
}
type houstonServer struct {
rpcServer *grpc.Server
os *operationServer
ms *monitorServer
}
func (hs *houstonServer) Start(port int) error {
lis, err := net.Listen("tcp", fmt.Sprintf("localhost:%d", port))
if err != nil {
return err
}
if err := hs.rpcServer.Serve(lis); err != nil {
return err
}
return nil
}
func (hs *houstonServer) Stop() {
hs.rpcServer.GracefulStop()
}
func (hs *houstonServer) Operation() Operation {
return hs.os
}