houston package 독립
This commit is contained in:
143
server/server.go
Normal file
143
server/server.go
Normal file
@ -0,0 +1,143 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"houston/shared"
|
||||
"houston/shared/protos"
|
||||
"net"
|
||||
|
||||
"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
|
||||
}
|
||||
|
||||
func MakeStopRequest(req shared.StopProcessRequest, targets []string) StopProcessRequest {
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user