diff --git a/gosuv.go b/gosuv.go index 90f3e2e..46ece06 100644 --- a/gosuv.go +++ b/gosuv.go @@ -154,6 +154,22 @@ func ActionStop(ctx *cli.Context) { fmt.Println(res.Message) } +func ActionRemove(ctx *cli.Context) { + conn, err := connect(ctx) + if err != nil { + log.Fatal(err) + } + defer conn.Close() + + name := ctx.Args().First() + client := pb.NewProgramClient(conn) + res, err := client.Remove(context.Background(), &pb.Request{Name: name}) + if err != nil { + Errorf("ERR: %#v\n", err) + } + fmt.Println(res.Message) +} + func ActionTail(ctx *cli.Context, client pb.ProgramClient) { req := &pb.TailRequest{ Name: ctx.Args().First(), @@ -289,6 +305,11 @@ func initCli() { Usage: "Stop running program", Action: wrap(ActionStop), }, + { + Name: "remove", + Usage: "Remove program", + Action: wrap(ActionRemove), + }, { Name: "tail", Usage: "tail log", diff --git a/gosuvpb/gosuv.pb.go b/gosuvpb/gosuv.pb.go index 65329f8..d3c0a41 100644 --- a/gosuvpb/gosuv.pb.go +++ b/gosuvpb/gosuv.pb.go @@ -259,6 +259,7 @@ var _GoSuv_serviceDesc = grpc.ServiceDesc{ type ProgramClient interface { Start(ctx context.Context, in *Request, opts ...grpc.CallOption) (*Response, error) Stop(ctx context.Context, in *Request, opts ...grpc.CallOption) (*Response, error) + Remove(ctx context.Context, in *Request, opts ...grpc.CallOption) (*Response, error) Tail(ctx context.Context, in *TailRequest, opts ...grpc.CallOption) (Program_TailClient, error) } @@ -288,6 +289,15 @@ func (c *programClient) Stop(ctx context.Context, in *Request, opts ...grpc.Call return out, nil } +func (c *programClient) Remove(ctx context.Context, in *Request, opts ...grpc.CallOption) (*Response, error) { + out := new(Response) + err := grpc.Invoke(ctx, "/gosuvpb.Program/Remove", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *programClient) Tail(ctx context.Context, in *TailRequest, opts ...grpc.CallOption) (Program_TailClient, error) { stream, err := grpc.NewClientStream(ctx, &_Program_serviceDesc.Streams[0], c.cc, "/gosuvpb.Program/Tail", opts...) if err != nil { @@ -325,6 +335,7 @@ func (x *programTailClient) Recv() (*LogLine, error) { type ProgramServer interface { Start(context.Context, *Request) (*Response, error) Stop(context.Context, *Request) (*Response, error) + Remove(context.Context, *Request) (*Response, error) Tail(*TailRequest, Program_TailServer) error } @@ -356,6 +367,18 @@ func _Program_Stop_Handler(srv interface{}, ctx context.Context, dec func(interf return out, nil } +func _Program_Remove_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error) (interface{}, error) { + in := new(Request) + if err := dec(in); err != nil { + return nil, err + } + out, err := srv.(ProgramServer).Remove(ctx, in) + if err != nil { + return nil, err + } + return out, nil +} + func _Program_Tail_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(TailRequest) if err := stream.RecvMsg(m); err != nil { @@ -389,6 +412,10 @@ var _Program_serviceDesc = grpc.ServiceDesc{ MethodName: "Stop", Handler: _Program_Stop_Handler, }, + { + MethodName: "Remove", + Handler: _Program_Remove_Handler, + }, }, Streams: []grpc.StreamDesc{ { diff --git a/gosuvpb/gosuv.proto b/gosuvpb/gosuv.proto index 34d7d22..eed19d7 100644 --- a/gosuvpb/gosuv.proto +++ b/gosuvpb/gosuv.proto @@ -49,5 +49,6 @@ service GoSuv { service Program { rpc Start(Request) returns (Response) {} rpc Stop(Request) returns (Response) {} + rpc Remove(Request) returns (Response) {} rpc Tail(TailRequest) returns (stream LogLine) {} } diff --git a/service.go b/service.go index de21878..a3c12b2 100644 --- a/service.go +++ b/service.go @@ -2,7 +2,6 @@ package main import ( "fmt" - "log" "net" "os" "os/exec" @@ -11,6 +10,7 @@ import ( "time" pb "github.com/codeskyblue/gosuv/gosuvpb" + "github.com/qiniu/log" "golang.org/x/net/context" "google.golang.org/grpc" ) @@ -39,6 +39,13 @@ func (this *PbProgram) Stop(ctx context.Context, in *pb.Request) (res *pb.Respon return res, nil } +// Remove(ctx context.Context, in *Request, opts ...grpc.CallOption) (*Response, error) +func (s *PbProgram) Remove(ctx context.Context, in *pb.Request) (res *pb.Response, err error) { + res = &pb.Response{} + res.Message = "TODO: remove not finished. " + in.Name + return res, nil +} + //func (this *PbProgram) Tail(ctx context.Context, in *pb.Request)(stream func (c *PbProgram) Tail(in *pb.TailRequest, stream pb.Program_TailServer) (err error) { program, err := programTable.Get(in.Name)