From de1111f1f5f83ae2421807b594b57249635d47c7 Mon Sep 17 00:00:00 2001 From: langhuihui <178529795@qq.com> Date: Fri, 5 Jul 2024 17:21:27 +0800 Subject: [PATCH] feat: add stress plugin --- api.go | 8 +- example/default/config.yaml | 2 +- example/multiple/config1.yaml | 13 +- example/multiple/config2.yaml | 22 +- example/multiple/main.go | 10 +- pb/global.pb.go | 289 ++++++++++++----------- pb/global.proto | 3 +- pkg/config/types.go | 14 +- pkg/ring_test.go | 20 +- pkg/unit.go | 1 + pkg/util/collection.go | 12 +- plugin.go | 13 +- plugin/console/index.go | 4 + plugin/logrotate/index.go | 6 +- plugin/logrotate/pb/logrotate.pb.go | 83 +++---- plugin/logrotate/pb/logrotate.pb.gw.go | 78 +++--- plugin/logrotate/pb/logrotate.proto | 4 +- plugin/logrotate/pb/logrotate_grpc.pb.go | 76 +++--- plugin/rtmp/api.go | 6 +- plugin/rtmp/pb/rtmp.pb.go | 95 ++------ plugin/rtmp/pb/rtmp.proto | 9 +- plugin/rtmp/pb/rtmp_grpc.pb.go | 11 +- plugin/stress/api.go | 112 +++++++++ plugin/stress/index.go | 23 ++ plugin/stress/pb/stress.proto | 70 ++++++ puller.go | 2 +- pusher.go | 2 +- qodana.yaml | 29 +++ server.go | 83 +++---- subscriber.go | 1 - 30 files changed, 645 insertions(+), 456 deletions(-) create mode 100644 plugin/stress/api.go create mode 100644 plugin/stress/index.go create mode 100644 plugin/stress/pb/stress.proto create mode 100644 qodana.yaml diff --git a/api.go b/api.go index acfdecc..00c1dc4 100644 --- a/api.go +++ b/api.go @@ -331,9 +331,7 @@ func (s *Server) ChangeSubscribe(ctx context.Context, req *pb.ChangeSubscribeReq } err = pkg.ErrNotFound }) - return &pb.SuccessResponse{ - Success: err == nil, - }, err + return &pb.SuccessResponse{}, err } func (s *Server) StopSubscribe(ctx context.Context, req *pb.RequestWithId) (res *pb.SuccessResponse, err error) { @@ -344,9 +342,7 @@ func (s *Server) StopSubscribe(ctx context.Context, req *pb.RequestWithId) (res err = pkg.ErrNotFound } }) - return &pb.SuccessResponse{ - Success: err == nil, - }, err + return &pb.SuccessResponse{}, err } // /api/stream/list diff --git a/example/default/config.yaml b/example/default/config.yaml index 63b5fef..f088e57 100644 --- a/example/default/config.yaml +++ b/example/default/config.yaml @@ -1,5 +1,5 @@ global: - loglevel: debug +# loglevel: debug enableauth: true tcp: listenaddr: :50051 diff --git a/example/multiple/config1.yaml b/example/multiple/config1.yaml index 9ff5d25..5f43fac 100644 --- a/example/multiple/config1.yaml +++ b/example/multiple/config1.yaml @@ -1,14 +1,9 @@ global: # loglevel: debug + http: + listenaddr: :8081 + listenaddrtls: :8555 tcp: - listenaddr: :50051 + listenaddr: :50052 console: secret: de2c0bb9fd47684adc07a426e139239b -webrtc: - publish: - pubaudio: false -rtmp: - chunksize: 2048 - subscribe: - # submode: 1 - subaudio: false diff --git a/example/multiple/config2.yaml b/example/multiple/config2.yaml index 3750022..ac37bb1 100644 --- a/example/multiple/config2.yaml +++ b/example/multiple/config2.yaml @@ -1,22 +1,16 @@ global: loglevel: debug - http: - listenaddr: :8081 - listenaddrtls: :8555 tcp: - listenaddr: :50052 - disableall: true + listenaddr: :50051 console: - enable: true secret: 00aea3af031f134d6307618b05ec4899 rtmp: - enable: true - chunksize: 2048 - tcp: - listenaddr: - subscribe: - # submode: 1 - subaudio: false + enable: false +rtsp: + enable: false +webrtc: + enable: false +hdl: pull: pullonstart: - live/pull: rtmp://localhost/live/test \ No newline at end of file + live/test: /Users/dexter/Movies/jb-demo.flv \ No newline at end of file diff --git a/example/multiple/main.go b/example/multiple/main.go index 9d8981d..9eea995 100644 --- a/example/multiple/main.go +++ b/example/multiple/main.go @@ -2,20 +2,20 @@ package main import ( "context" - "time" - "m7s.live/m7s/v5" + _ "m7s.live/m7s/v5/plugin/console" _ "m7s.live/m7s/v5/plugin/debug" _ "m7s.live/m7s/v5/plugin/hdl" - _ "m7s.live/m7s/v5/plugin/webrtc" + _ "m7s.live/m7s/v5/plugin/logrotate" _ "m7s.live/m7s/v5/plugin/rtmp" - _ "m7s.live/m7s/v5/plugin/console" + _ "m7s.live/m7s/v5/plugin/rtsp" + _ "m7s.live/m7s/v5/plugin/stress" + _ "m7s.live/m7s/v5/plugin/webrtc" ) func main() { ctx := context.Background() // ctx, _ := context.WithDeadline(context.Background(), time.Now().Add(time.Second*100)) go m7s.Run(ctx, "config1.yaml") - time.Sleep(time.Second * 20) m7s.NewServer().Run(ctx, "config2.yaml") } diff --git a/pb/global.pb.go b/pb/global.pb.go index 1e6de0c..3bcd8b9 100644 --- a/pb/global.pb.go +++ b/pb/global.pb.go @@ -1591,7 +1591,8 @@ type SuccessResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` } func (x *SuccessResponse) Reset() { @@ -1626,11 +1627,18 @@ func (*SuccessResponse) Descriptor() ([]byte, []int) { return file_global_proto_rawDescGZIP(), []int{22} } -func (x *SuccessResponse) GetSuccess() bool { +func (x *SuccessResponse) GetCode() int32 { if x != nil { - return x.Success + return x.Code } - return false + return 0 +} + +func (x *SuccessResponse) GetMsg() string { + if x != nil { + return x.Msg + } + return "" } type RequestWithId struct { @@ -2243,149 +2251,150 @@ var file_global_proto_rawDesc = []byte{ 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x6f, 0x70, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x67, 0x6f, 0x70, 0x22, 0x2b, 0x0a, 0x0f, 0x53, 0x75, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, - 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x1f, 0x0a, 0x0d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x57, 0x69, 0x74, 0x68, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x48, 0x0a, 0x16, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x61, 0x74, 0x68, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x61, 0x74, - 0x68, 0x22, 0x6a, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x72, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x50, 0x61, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x67, 0x65, 0x4e, - 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x70, 0x61, 0x67, 0x65, 0x4e, 0x75, - 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x7a, 0x0a, - 0x12, 0x52, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x53, - 0x68, 0x6f, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, - 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x14, 0x0a, - 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x64, 0x65, - 0x6c, 0x61, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0xe8, 0x01, 0x0a, 0x12, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x53, 0x68, 0x6f, 0x74, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x38, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x61, 0x75, - 0x64, 0x69, 0x6f, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x52, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x53, 0x6e, 0x61, 0x70, 0x53, 0x68, 0x6f, 0x74, 0x52, 0x0b, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x52, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x0b, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x52, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x37, 0x73, - 0x2e, 0x52, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x53, - 0x68, 0x6f, 0x74, 0x52, 0x0b, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x22, 0x8e, 0x01, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x70, 0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, - 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x53, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x53, 0x68, 0x6f, 0x74, 0x52, - 0x04, 0x6c, 0x69, 0x73, 0x74, 0x32, 0xc7, 0x0b, 0x0a, 0x06, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, - 0x12, 0x4d, 0x0a, 0x07, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x14, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x0e, 0x12, 0x0c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x79, 0x73, 0x69, 0x6e, 0x66, 0x6f, 0x12, - 0x4d, 0x0a, 0x07, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x67, 0x6f, 0x70, 0x22, 0x37, 0x0a, 0x0f, 0x53, 0x75, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, + 0x73, 0x67, 0x22, 0x1f, 0x0a, 0x0d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x57, 0x69, 0x74, + 0x68, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x02, 0x69, 0x64, 0x22, 0x48, 0x0a, 0x16, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1e, 0x0a, + 0x0a, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x61, 0x74, 0x68, 0x22, 0x6a, 0x0a, + 0x12, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x61, 0x74, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, + 0x61, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x70, 0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, + 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x7a, 0x0a, 0x12, 0x52, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x53, 0x68, 0x6f, 0x74, 0x12, + 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x6c, + 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0xe8, 0x01, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x62, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x53, 0x68, 0x6f, 0x74, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x38, 0x0a, 0x09, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x52, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x37, + 0x73, 0x2e, 0x52, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, + 0x53, 0x68, 0x6f, 0x74, 0x52, 0x0b, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x52, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x12, 0x39, 0x0a, 0x0b, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x52, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x53, 0x68, 0x6f, 0x74, 0x52, + 0x0b, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, + 0x6d, 0x65, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, + 0x22, 0x8e, 0x01, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x72, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x18, + 0x0a, 0x07, 0x70, 0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x70, 0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x53, 0x68, 0x6f, 0x74, 0x52, 0x04, 0x6c, 0x69, 0x73, + 0x74, 0x32, 0xc7, 0x0b, 0x0a, 0x06, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x12, 0x4d, 0x0a, 0x07, + 0x53, 0x79, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x14, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x12, 0x0c, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x73, 0x79, 0x73, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x4d, 0x0a, 0x07, 0x53, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x14, + 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x12, 0x0c, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x52, 0x0a, 0x08, 0x53, 0x68, + 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x12, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x49, 0x64, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x14, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, - 0x12, 0x0c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x52, - 0x0a, 0x08, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x12, 0x2e, 0x6d, 0x37, 0x73, - 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x49, 0x64, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x12, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x2f, 0x7b, 0x69, - 0x64, 0x7d, 0x12, 0x50, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x12, 0x2e, - 0x6d, 0x37, 0x73, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x49, - 0x64, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x13, 0x22, 0x11, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2f, - 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x57, 0x0a, 0x0a, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4c, 0x69, - 0x73, 0x74, 0x12, 0x16, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6d, 0x37, 0x73, - 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x5d, 0x0a, - 0x08, 0x57, 0x61, 0x69, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x1b, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x57, 0x61, - 0x69, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x2f, 0x77, 0x61, 0x69, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x67, 0x0a, 0x0a, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x2e, 0x6d, 0x37, 0x73, - 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x22, 0x12, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x2f, 0x69, 0x6e, 0x66, 0x6f, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x61, 0x74, - 0x68, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x6d, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x62, 0x65, 0x72, 0x73, 0x12, 0x17, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x18, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x22, 0x12, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x61, 0x74, 0x68, - 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x72, 0x0a, 0x0e, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x54, 0x72, 0x61, + 0x74, 0x79, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x12, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x50, + 0x0a, 0x07, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x12, 0x2e, 0x6d, 0x37, 0x73, 0x2e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x49, 0x64, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x11, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2f, 0x7b, 0x69, 0x64, 0x7d, + 0x12, 0x57, 0x0a, 0x0a, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, + 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x5d, 0x0a, 0x08, 0x57, 0x61, 0x69, + 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1b, 0x2e, + 0x6d, 0x37, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x57, 0x61, 0x69, 0x74, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x16, 0x12, 0x14, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, + 0x77, 0x61, 0x69, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x67, 0x0a, 0x0a, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, + 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, + 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x69, 0x6e, 0x66, + 0x6f, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x61, 0x74, 0x68, 0x3d, 0x2a, 0x2a, + 0x7d, 0x12, 0x6d, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, + 0x65, 0x72, 0x73, 0x12, 0x17, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6d, + 0x37, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x72, 0x73, + 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x61, 0x74, 0x68, 0x3d, 0x2a, 0x2a, 0x7d, + 0x12, 0x72, 0x0a, 0x0e, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x6e, + 0x61, 0x70, 0x12, 0x16, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, + 0x6e, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6d, 0x37, 0x73, + 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x6e, 0x61, 0x70, 0x53, 0x68, 0x6f, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x2f, + 0x73, 0x6e, 0x61, 0x70, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x61, 0x74, 0x68, + 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x72, 0x0a, 0x0e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x6e, 0x61, 0x70, 0x12, 0x16, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x6e, 0x61, 0x70, 0x53, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x26, 0x12, 0x24, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x74, 0x72, + 0x02, 0x26, 0x12, 0x24, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x2f, 0x73, 0x6e, 0x61, 0x70, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x50, 0x61, 0x74, 0x68, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x72, 0x0a, 0x0e, 0x56, 0x69, 0x64, 0x65, - 0x6f, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x6e, 0x61, 0x70, 0x12, 0x16, 0x2e, 0x6d, 0x37, 0x73, - 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x6e, - 0x61, 0x70, 0x53, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x69, 0x64, - 0x65, 0x6f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x2f, 0x73, 0x6e, 0x61, 0x70, 0x2f, 0x7b, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x50, 0x61, 0x74, 0x68, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x7b, 0x0a, 0x0f, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, - 0x1b, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x6d, + 0x50, 0x61, 0x74, 0x68, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x7b, 0x0a, 0x0f, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x1b, 0x2e, 0x6d, 0x37, + 0x73, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x53, + 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2f, 0x7b, 0x69, + 0x64, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x61, 0x74, 0x68, 0x3d, 0x2a, + 0x2a, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x5e, 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x12, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x49, 0x64, 0x1a, 0x14, 0x2e, 0x6d, 0x37, 0x73, + 0x2e, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x2f, 0x7b, 0x69, + 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x5a, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x15, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6d, 0x37, 0x73, 0x2e, + 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, + 0x7d, 0x12, 0x5f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x69, 0x6c, 0x79, 0x12, + 0x15, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x47, 0x65, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x6c, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x12, 0x67, 0x0a, 0x0c, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x18, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2a, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x61, - 0x74, 0x68, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x5e, 0x0a, 0x0d, 0x53, 0x74, 0x6f, - 0x70, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x12, 0x2e, 0x6d, 0x37, 0x73, - 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x49, 0x64, 0x1a, 0x14, - 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2f, 0x73, 0x74, 0x6f, - 0x70, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x5a, 0x0a, 0x09, 0x47, 0x65, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x15, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x47, 0x65, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, - 0x6d, 0x37, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, - 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x5f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x6d, - 0x69, 0x6c, 0x79, 0x12, 0x15, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6d, 0x37, 0x73, - 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x6c, 0x79, 0x2f, - 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x67, 0x0a, 0x0c, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x4d, 0x6f, 0x64, - 0x69, 0x66, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x14, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x19, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6d, 0x6f, 0x64, 0x69, - 0x66, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x04, 0x79, 0x61, 0x6d, 0x6c, 0x42, - 0x14, 0x5a, 0x12, 0x6d, 0x37, 0x73, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x2f, 0x6d, 0x37, 0x73, 0x2f, - 0x76, 0x35, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x19, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x2f, 0x7b, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x04, 0x79, 0x61, 0x6d, 0x6c, 0x42, 0x14, 0x5a, 0x12, 0x6d, + 0x37, 0x73, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x2f, 0x6d, 0x37, 0x73, 0x2f, 0x76, 0x35, 0x2f, 0x70, + 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/pb/global.proto b/pb/global.proto index 244aee7..e3c5bf3 100644 --- a/pb/global.proto +++ b/pb/global.proto @@ -243,7 +243,8 @@ message VideoTrackInfo { } message SuccessResponse { - bool success = 1; + int32 code = 1; + string msg = 2; } message RequestWithId { diff --git a/pkg/config/types.go b/pkg/config/types.go index e3c6d3c..57e6965 100755 --- a/pkg/config/types.go +++ b/pkg/config/types.go @@ -49,13 +49,13 @@ type Subscribe struct { SubAudio bool `default:"true" desc:"是否订阅音频"` SubVideo bool `default:"true" desc:"是否订阅视频"` BufferTime time.Duration `desc:"缓冲时长,从缓冲时长的关键帧开始播放"` - SubMode int `desc:"订阅模式" enum:"0:实时模式,1:首屏后不进行追赶"` // 0,实时模式:追赶发布者进度,在播放首屏后等待发布者的下一个关键帧,然后跳到该帧。1、首屏后不进行追赶。2、从缓冲最大的关键帧开始播放,也不追赶,需要发布者配置缓存长度 - SyncMode int `desc:"同步模式" enum:"0:采用时间戳同步,1:采用写入时间同步"` // 0,采用时间戳同步,1,采用写入时间同步 - IFrameOnly bool `desc:"只要关键帧"` // 只要关键帧 - WaitTimeout time.Duration `default:"10s" desc:"等待流超时时间"` // 等待流超时 - WriteBufferSize int `desc:"写缓冲大小"` // 写缓冲大小 - Key string `desc:"订阅鉴权key"` // 订阅鉴权key - Internal bool `default:"false" desc:"是否内部订阅"` // 是否内部订阅 + SubMode int `desc:"订阅模式" enum:"0:实时模式,1:首屏后不进行追赶"` // 0,实时模式:追赶发布者进度,在播放首屏后等待发布者的下一个关键帧,然后跳到该帧。1、首屏后不进行追赶。2、从缓冲最大的关键帧开始播放,也不追赶,需要发布者配置缓存长度 + SyncMode int `default:"1" desc:"同步模式" enum:"0:采用时间戳同步,1:采用写入时间同步"` // 0,采用时间戳同步,1,采用写入时间同步 + IFrameOnly bool `desc:"只要关键帧"` // 只要关键帧 + WaitTimeout time.Duration `default:"10s" desc:"等待流超时时间"` // 等待流超时 + WriteBufferSize int `desc:"写缓冲大小"` // 写缓冲大小 + Key string `desc:"订阅鉴权key"` // 订阅鉴权key + Internal bool `default:"false" desc:"是否内部订阅"` // 是否内部订阅 } func (c *Subscribe) GetSubscribeConfig() *Subscribe { diff --git a/pkg/ring_test.go b/pkg/ring_test.go index 566688c..cc50ddb 100644 --- a/pkg/ring_test.go +++ b/pkg/ring_test.go @@ -2,12 +2,14 @@ package pkg import ( "context" + "log/slog" "testing" "time" ) func TestRing(t *testing.T) { - w := NewRingWriter(10) + w := NewRingWriter([2]int{10, 10}) + w.SLogger = slog.Default() ctx, _ := context.WithTimeout(context.Background(), time.Second*5) go t.Run("writer", func(t *testing.T) { for i := 0; ctx.Err() == nil; i++ { @@ -59,14 +61,18 @@ func TestRing(t *testing.T) { }) } func TestRingWriter_Resize(t *testing.T) { - w := NewRingWriter(10) - w.Resize(5) - w.Resize(-5) - w.Resize(5) - w.Resize(-5) + t.Run("resize", func(t *testing.T) { + w := NewRingWriter([2]int{10, 20}) + w.SLogger = slog.Default() + w.Resize(5) + w.Resize(-5) + w.Resize(5) + w.Resize(-5) + }) } func BenchmarkRing(b *testing.B) { - w := NewRingWriter(10) + w := NewRingWriter([2]int{10, 10}) + w.SLogger = slog.Default() ctx, _ := context.WithTimeout(context.Background(), time.Second*5) go func() { for i := 0; ctx.Err() == nil; i++ { diff --git a/pkg/unit.go b/pkg/unit.go index 6205abe..682f587 100644 --- a/pkg/unit.go +++ b/pkg/unit.go @@ -9,6 +9,7 @@ import ( const TraceLevel = slog.Level(-8) type Unit struct { + ID int StartTime time.Time *slog.Logger `json:"-" yaml:"-"` context.Context `json:"-" yaml:"-"` diff --git a/pkg/util/collection.go b/pkg/util/collection.go index d546970..e417cc2 100644 --- a/pkg/util/collection.go +++ b/pkg/util/collection.go @@ -91,7 +91,7 @@ func (c *Collection[K, T]) Get(key K) (item T, ok bool) { item, ok = c.m[key] return item, ok } - for _, item := range c.Items { + for _, item = range c.Items { if item.GetKey() == key { return item, true } @@ -102,3 +102,13 @@ func (c *Collection[K, T]) Get(key K) (item T, ok bool) { func (c *Collection[K, T]) GetKey() K { return c.Items[0].GetKey() } + +func (c *Collection[K, T]) Clear() { + if c.L != nil { + c.L.Lock() + defer c.L.Unlock() + } + c.Items = nil + c.m = nil + c.Length = 0 +} diff --git a/plugin.go b/plugin.go index 9434405..dd82cdc 100644 --- a/plugin.go +++ b/plugin.go @@ -2,6 +2,7 @@ package m7s import ( "context" + "log/slog" "net" "net/http" "os" @@ -89,10 +90,11 @@ func (plugin *PluginMeta) Init(s *Server, userConfig map[string]any) { if plugin.ServiceDesc != nil && s.grpcServer != nil { s.grpcServer.RegisterService(plugin.ServiceDesc, instance) if plugin.RegisterGRPCHandler != nil { - err = plugin.RegisterGRPCHandler(p.Context, s.config.HTTP.GetGRPCMux(), s.grpcClientConn) - if err != nil { + if err = plugin.RegisterGRPCHandler(p.Context, s.config.HTTP.GetGRPCMux(), s.grpcClientConn); err != nil { p.Error("init", "error", err) p.Stop(err) + } else { + p.Info("grpc handler registered") } } } @@ -417,7 +419,14 @@ func (p *Plugin) handle(pattern string, handler http.Handler) { p.server.apiList = append(p.server.apiList, pattern) } +func (p *Plugin) AddLogHandler(handler slog.Handler) { + p.server.LogHandler.Add(handler) +} + func (p *Plugin) PostToServer(event any) { + if p.server.eventChan == nil { + panic("eventChan is nil") + } p.server.PostMessage(event) } diff --git a/plugin/console/index.go b/plugin/console/index.go index d92172a..b4e8e73 100644 --- a/plugin/console/index.go +++ b/plugin/console/index.go @@ -156,6 +156,10 @@ func (cfg *ConsolePlugin) ReceiveRequest(s quic.Stream, conn quic.Connection) er } h.ServeHTTP(&writer, req) //建立websocket连接,握手 } else { + method := req.Header.Get("M7s-Method") + if method == "POST" { + req.Method = "POST" + } h.ServeHTTP(wr, req) } } diff --git a/plugin/logrotate/index.go b/plugin/logrotate/index.go index c3d192b..66d4477 100644 --- a/plugin/logrotate/index.go +++ b/plugin/logrotate/index.go @@ -13,7 +13,7 @@ import ( ) type LogRotatePlugin struct { - pb.UnimplementedLogrotateServer + pb.UnimplementedApiServer m7s.Plugin Path string `default:"./logs" desc:"日志文件存放目录"` Size uint64 `default:"1048576" desc:"日志文件大小,单位:字节"` @@ -24,7 +24,7 @@ type LogRotatePlugin struct { handler slog.Handler } -var _ = m7s.InstallPlugin[LogRotatePlugin](&pb.Logrotate_ServiceDesc, pb.RegisterLogrotateHandler) +var _ = m7s.InstallPlugin[LogRotatePlugin](&pb.Api_ServiceDesc, pb.RegisterApiHandler) func (config *LogRotatePlugin) OnInit() (err error) { builder := func(w io.Writer, opts *slog.HandlerOptions) slog.Handler { @@ -32,7 +32,7 @@ func (config *LogRotatePlugin) OnInit() (err error) { } config.handler, err = rotoslog.NewHandler(rotoslog.LogHandlerBuilder(builder), rotoslog.LogDir(config.Path), rotoslog.MaxFileSize(config.Size), rotoslog.DateTimeLayout(config.Formatter), rotoslog.MaxRotatedFiles(config.MaxFiles)) if err == nil { - config.PostToServer(config.handler) + config.AddLogHandler(config.handler) } return } diff --git a/plugin/logrotate/pb/logrotate.pb.go b/plugin/logrotate/pb/logrotate.pb.go index 373d086..e190cae 100644 --- a/plugin/logrotate/pb/logrotate.pb.go +++ b/plugin/logrotate/pb/logrotate.pb.go @@ -222,38 +222,39 @@ var File_logrotate_proto protoreflect.FileDescriptor var file_logrotate_proto_rawDesc = []byte{ 0x0a, 0x0f, 0x6c, 0x6f, 0x67, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x03, 0x6d, 0x37, 0x73, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0x28, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4f, 0x70, 0x65, - 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x2d, 0x0a, 0x0f, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, - 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x37, 0x0a, 0x10, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x23, - 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, - 0x6d, 0x37, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x66, 0x69, - 0x6c, 0x65, 0x73, 0x22, 0x32, 0x0a, 0x08, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x32, 0xb9, 0x01, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x72, - 0x6f, 0x74, 0x61, 0x74, 0x65, 0x12, 0x52, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x15, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x1b, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x6c, 0x6f, 0x67, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x58, 0x0a, 0x03, 0x47, 0x65, 0x74, - 0x12, 0x14, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, - 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x1a, 0x11, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4f, 0x70, 0x65, 0x6e, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x22, 0x12, 0x20, 0x2f, 0x6c, 0x6f, 0x67, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x3d, - 0x2a, 0x2a, 0x7d, 0x42, 0x25, 0x5a, 0x23, 0x6d, 0x37, 0x73, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x2f, - 0x6d, 0x37, 0x73, 0x2f, 0x76, 0x35, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x6c, 0x6f, - 0x67, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x6f, 0x12, 0x09, 0x6c, 0x6f, 0x67, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x1a, 0x1c, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x28, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x22, 0x2d, 0x0a, 0x0f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x22, 0x3d, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x46, 0x69, 0x6c, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x29, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x6f, 0x67, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x2e, + 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x22, + 0x32, 0x0a, 0x08, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, + 0x69, 0x7a, 0x65, 0x32, 0xc5, 0x01, 0x0a, 0x03, 0x61, 0x70, 0x69, 0x12, 0x58, 0x0a, 0x04, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1b, 0x2e, 0x6c, 0x6f, + 0x67, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, + 0x12, 0x13, 0x2f, 0x6c, 0x6f, 0x67, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x64, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x6c, + 0x6f, 0x67, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x1a, 0x17, 0x2e, 0x6c, 0x6f, 0x67, 0x72, 0x6f, + 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4f, 0x70, 0x65, + 0x6e, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, 0x2f, 0x6c, 0x6f, 0x67, 0x72, + 0x6f, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x66, + 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x42, 0x25, 0x5a, 0x23, 0x6d, + 0x37, 0x73, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x2f, 0x6d, 0x37, 0x73, 0x2f, 0x76, 0x35, 0x2f, 0x70, + 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x6c, 0x6f, 0x67, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x2f, + 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -270,18 +271,18 @@ func file_logrotate_proto_rawDescGZIP() []byte { var file_logrotate_proto_msgTypes = make([]protoimpl.MessageInfo, 4) var file_logrotate_proto_goTypes = []interface{}{ - (*ResponseOpen)(nil), // 0: m7s.ResponseOpen - (*RequestFileInfo)(nil), // 1: m7s.RequestFileInfo - (*ResponseFileInfo)(nil), // 2: m7s.ResponseFileInfo - (*FileInfo)(nil), // 3: m7s.FileInfo + (*ResponseOpen)(nil), // 0: logrotate.ResponseOpen + (*RequestFileInfo)(nil), // 1: logrotate.RequestFileInfo + (*ResponseFileInfo)(nil), // 2: logrotate.ResponseFileInfo + (*FileInfo)(nil), // 3: logrotate.FileInfo (*emptypb.Empty)(nil), // 4: google.protobuf.Empty } var file_logrotate_proto_depIdxs = []int32{ - 3, // 0: m7s.ResponseFileInfo.files:type_name -> m7s.FileInfo - 4, // 1: m7s.logrotate.List:input_type -> google.protobuf.Empty - 1, // 2: m7s.logrotate.Get:input_type -> m7s.RequestFileInfo - 2, // 3: m7s.logrotate.List:output_type -> m7s.ResponseFileInfo - 0, // 4: m7s.logrotate.Get:output_type -> m7s.ResponseOpen + 3, // 0: logrotate.ResponseFileInfo.files:type_name -> logrotate.FileInfo + 4, // 1: logrotate.api.List:input_type -> google.protobuf.Empty + 1, // 2: logrotate.api.Get:input_type -> logrotate.RequestFileInfo + 2, // 3: logrotate.api.List:output_type -> logrotate.ResponseFileInfo + 0, // 4: logrotate.api.Get:output_type -> logrotate.ResponseOpen 3, // [3:5] is the sub-list for method output_type 1, // [1:3] is the sub-list for method input_type 1, // [1:1] is the sub-list for extension type_name diff --git a/plugin/logrotate/pb/logrotate.pb.gw.go b/plugin/logrotate/pb/logrotate.pb.gw.go index b8e170c..2f75c52 100644 --- a/plugin/logrotate/pb/logrotate.pb.gw.go +++ b/plugin/logrotate/pb/logrotate.pb.gw.go @@ -32,7 +32,7 @@ var _ = runtime.String var _ = utilities.NewDoubleArray var _ = metadata.Join -func request_Logrotate_List_0(ctx context.Context, marshaler runtime.Marshaler, client LogrotateClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Api_List_0(ctx context.Context, marshaler runtime.Marshaler, client ApiClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq emptypb.Empty var metadata runtime.ServerMetadata @@ -41,7 +41,7 @@ func request_Logrotate_List_0(ctx context.Context, marshaler runtime.Marshaler, } -func local_request_Logrotate_List_0(ctx context.Context, marshaler runtime.Marshaler, server LogrotateServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_Api_List_0(ctx context.Context, marshaler runtime.Marshaler, server ApiServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq emptypb.Empty var metadata runtime.ServerMetadata @@ -50,7 +50,7 @@ func local_request_Logrotate_List_0(ctx context.Context, marshaler runtime.Marsh } -func request_Logrotate_Get_0(ctx context.Context, marshaler runtime.Marshaler, client LogrotateClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Api_Get_0(ctx context.Context, marshaler runtime.Marshaler, client ApiClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq RequestFileInfo var metadata runtime.ServerMetadata @@ -76,7 +76,7 @@ func request_Logrotate_Get_0(ctx context.Context, marshaler runtime.Marshaler, c } -func local_request_Logrotate_Get_0(ctx context.Context, marshaler runtime.Marshaler, server LogrotateServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_Api_Get_0(ctx context.Context, marshaler runtime.Marshaler, server ApiServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq RequestFileInfo var metadata runtime.ServerMetadata @@ -102,13 +102,13 @@ func local_request_Logrotate_Get_0(ctx context.Context, marshaler runtime.Marsha } -// RegisterLogrotateHandlerServer registers the http handlers for service Logrotate to "mux". -// UnaryRPC :call LogrotateServer directly. +// RegisterApiHandlerServer registers the http handlers for service Api to "mux". +// UnaryRPC :call ApiServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterLogrotateHandlerFromEndpoint instead. -func RegisterLogrotateHandlerServer(ctx context.Context, mux *runtime.ServeMux, server LogrotateServer) error { +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterApiHandlerFromEndpoint instead. +func RegisterApiHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ApiServer) error { - mux.Handle("GET", pattern_Logrotate_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Api_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -116,12 +116,12 @@ func RegisterLogrotateHandlerServer(ctx context.Context, mux *runtime.ServeMux, inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/m7s.Logrotate/List", runtime.WithHTTPPathPattern("/logrotate/api/list")) + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/logrotate.Api/List", runtime.WithHTTPPathPattern("/logrotate/api/list")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Logrotate_List_0(annotatedContext, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Api_List_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { @@ -129,11 +129,11 @@ func RegisterLogrotateHandlerServer(ctx context.Context, mux *runtime.ServeMux, return } - forward_Logrotate_List_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Api_List_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Logrotate_Get_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Api_Get_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -141,12 +141,12 @@ func RegisterLogrotateHandlerServer(ctx context.Context, mux *runtime.ServeMux, inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/m7s.Logrotate/Get", runtime.WithHTTPPathPattern("/logrotate/api/get/{fileName=**}")) + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/logrotate.Api/Get", runtime.WithHTTPPathPattern("/logrotate/api/get/{fileName=**}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Logrotate_Get_0(annotatedContext, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Api_Get_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { @@ -154,16 +154,16 @@ func RegisterLogrotateHandlerServer(ctx context.Context, mux *runtime.ServeMux, return } - forward_Logrotate_Get_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Api_Get_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) return nil } -// RegisterLogrotateHandlerFromEndpoint is same as RegisterLogrotateHandler but +// RegisterApiHandlerFromEndpoint is same as RegisterApiHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterLogrotateHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { +func RegisterApiHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { conn, err := grpc.DialContext(ctx, endpoint, opts...) if err != nil { return err @@ -183,63 +183,63 @@ func RegisterLogrotateHandlerFromEndpoint(ctx context.Context, mux *runtime.Serv }() }() - return RegisterLogrotateHandler(ctx, mux, conn) + return RegisterApiHandler(ctx, mux, conn) } -// RegisterLogrotateHandler registers the http handlers for service Logrotate to "mux". +// RegisterApiHandler registers the http handlers for service Api to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterLogrotateHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterLogrotateHandlerClient(ctx, mux, NewLogrotateClient(conn)) +func RegisterApiHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterApiHandlerClient(ctx, mux, NewApiClient(conn)) } -// RegisterLogrotateHandlerClient registers the http handlers for service Logrotate -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "LogrotateClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "LogrotateClient" +// RegisterApiHandlerClient registers the http handlers for service Api +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "ApiClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "ApiClient" // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "LogrotateClient" to call the correct interceptors. -func RegisterLogrotateHandlerClient(ctx context.Context, mux *runtime.ServeMux, client LogrotateClient) error { +// "ApiClient" to call the correct interceptors. +func RegisterApiHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ApiClient) error { - mux.Handle("GET", pattern_Logrotate_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Api_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/m7s.Logrotate/List", runtime.WithHTTPPathPattern("/logrotate/api/list")) + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/logrotate.Api/List", runtime.WithHTTPPathPattern("/logrotate/api/list")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Logrotate_List_0(annotatedContext, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Api_List_0(annotatedContext, inboundMarshaler, client, req, pathParams) annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Logrotate_List_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Api_List_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Logrotate_Get_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Api_Get_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/m7s.Logrotate/Get", runtime.WithHTTPPathPattern("/logrotate/api/get/{fileName=**}")) + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/logrotate.Api/Get", runtime.WithHTTPPathPattern("/logrotate/api/get/{fileName=**}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Logrotate_Get_0(annotatedContext, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Api_Get_0(annotatedContext, inboundMarshaler, client, req, pathParams) annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Logrotate_Get_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Api_Get_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -247,13 +247,13 @@ func RegisterLogrotateHandlerClient(ctx context.Context, mux *runtime.ServeMux, } var ( - pattern_Logrotate_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"logrotate", "api", "list"}, "")) + pattern_Api_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"logrotate", "api", "list"}, "")) - pattern_Logrotate_Get_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"logrotate", "api", "get", "fileName"}, "")) + pattern_Api_Get_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"logrotate", "api", "get", "fileName"}, "")) ) var ( - forward_Logrotate_List_0 = runtime.ForwardResponseMessage + forward_Api_List_0 = runtime.ForwardResponseMessage - forward_Logrotate_Get_0 = runtime.ForwardResponseMessage + forward_Api_Get_0 = runtime.ForwardResponseMessage ) diff --git a/plugin/logrotate/pb/logrotate.proto b/plugin/logrotate/pb/logrotate.proto index 160e108..dbec135 100644 --- a/plugin/logrotate/pb/logrotate.proto +++ b/plugin/logrotate/pb/logrotate.proto @@ -1,10 +1,10 @@ syntax = "proto3"; import "google/api/annotations.proto"; import "google/protobuf/empty.proto"; -package m7s; +package logrotate; option go_package="m7s.live/m7s/v5/plugin/logrotate/pb"; -service logrotate { +service api { rpc List (google.protobuf.Empty) returns (ResponseFileInfo) { option (google.api.http) = { get: "/logrotate/api/list" diff --git a/plugin/logrotate/pb/logrotate_grpc.pb.go b/plugin/logrotate/pb/logrotate_grpc.pb.go index fcef430..24ad4e1 100644 --- a/plugin/logrotate/pb/logrotate_grpc.pb.go +++ b/plugin/logrotate/pb/logrotate_grpc.pb.go @@ -19,122 +19,122 @@ import ( // Requires gRPC-Go v1.32.0 or later. const _ = grpc.SupportPackageIsVersion7 -// LogrotateClient is the client API for Logrotate service. +// ApiClient is the client API for Api service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type LogrotateClient interface { +type ApiClient interface { List(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*ResponseFileInfo, error) Get(ctx context.Context, in *RequestFileInfo, opts ...grpc.CallOption) (*ResponseOpen, error) } -type logrotateClient struct { +type apiClient struct { cc grpc.ClientConnInterface } -func NewLogrotateClient(cc grpc.ClientConnInterface) LogrotateClient { - return &logrotateClient{cc} +func NewApiClient(cc grpc.ClientConnInterface) ApiClient { + return &apiClient{cc} } -func (c *logrotateClient) List(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*ResponseFileInfo, error) { +func (c *apiClient) List(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*ResponseFileInfo, error) { out := new(ResponseFileInfo) - err := c.cc.Invoke(ctx, "/m7s.logrotate/List", in, out, opts...) + err := c.cc.Invoke(ctx, "/logrotate.api/List", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *logrotateClient) Get(ctx context.Context, in *RequestFileInfo, opts ...grpc.CallOption) (*ResponseOpen, error) { +func (c *apiClient) Get(ctx context.Context, in *RequestFileInfo, opts ...grpc.CallOption) (*ResponseOpen, error) { out := new(ResponseOpen) - err := c.cc.Invoke(ctx, "/m7s.logrotate/Get", in, out, opts...) + err := c.cc.Invoke(ctx, "/logrotate.api/Get", in, out, opts...) if err != nil { return nil, err } return out, nil } -// LogrotateServer is the server API for Logrotate service. -// All implementations must embed UnimplementedLogrotateServer +// ApiServer is the server API for Api service. +// All implementations must embed UnimplementedApiServer // for forward compatibility -type LogrotateServer interface { +type ApiServer interface { List(context.Context, *emptypb.Empty) (*ResponseFileInfo, error) Get(context.Context, *RequestFileInfo) (*ResponseOpen, error) - mustEmbedUnimplementedLogrotateServer() + mustEmbedUnimplementedApiServer() } -// UnimplementedLogrotateServer must be embedded to have forward compatible implementations. -type UnimplementedLogrotateServer struct { +// UnimplementedApiServer must be embedded to have forward compatible implementations. +type UnimplementedApiServer struct { } -func (UnimplementedLogrotateServer) List(context.Context, *emptypb.Empty) (*ResponseFileInfo, error) { +func (UnimplementedApiServer) List(context.Context, *emptypb.Empty) (*ResponseFileInfo, error) { return nil, status.Errorf(codes.Unimplemented, "method List not implemented") } -func (UnimplementedLogrotateServer) Get(context.Context, *RequestFileInfo) (*ResponseOpen, error) { +func (UnimplementedApiServer) Get(context.Context, *RequestFileInfo) (*ResponseOpen, error) { return nil, status.Errorf(codes.Unimplemented, "method Get not implemented") } -func (UnimplementedLogrotateServer) mustEmbedUnimplementedLogrotateServer() {} +func (UnimplementedApiServer) mustEmbedUnimplementedApiServer() {} -// UnsafeLogrotateServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to LogrotateServer will +// UnsafeApiServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to ApiServer will // result in compilation errors. -type UnsafeLogrotateServer interface { - mustEmbedUnimplementedLogrotateServer() +type UnsafeApiServer interface { + mustEmbedUnimplementedApiServer() } -func RegisterLogrotateServer(s grpc.ServiceRegistrar, srv LogrotateServer) { - s.RegisterService(&Logrotate_ServiceDesc, srv) +func RegisterApiServer(s grpc.ServiceRegistrar, srv ApiServer) { + s.RegisterService(&Api_ServiceDesc, srv) } -func _Logrotate_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _Api_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(emptypb.Empty) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(LogrotateServer).List(ctx, in) + return srv.(ApiServer).List(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/m7s.logrotate/List", + FullMethod: "/logrotate.api/List", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(LogrotateServer).List(ctx, req.(*emptypb.Empty)) + return srv.(ApiServer).List(ctx, req.(*emptypb.Empty)) } return interceptor(ctx, in, info, handler) } -func _Logrotate_Get_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _Api_Get_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(RequestFileInfo) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(LogrotateServer).Get(ctx, in) + return srv.(ApiServer).Get(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/m7s.logrotate/Get", + FullMethod: "/logrotate.api/Get", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(LogrotateServer).Get(ctx, req.(*RequestFileInfo)) + return srv.(ApiServer).Get(ctx, req.(*RequestFileInfo)) } return interceptor(ctx, in, info, handler) } -// Logrotate_ServiceDesc is the grpc.ServiceDesc for Logrotate service. +// Api_ServiceDesc is the grpc.ServiceDesc for Api service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) -var Logrotate_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "m7s.logrotate", - HandlerType: (*LogrotateServer)(nil), +var Api_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "logrotate.api", + HandlerType: (*ApiServer)(nil), Methods: []grpc.MethodDesc{ { MethodName: "List", - Handler: _Logrotate_List_Handler, + Handler: _Api_List_Handler, }, { MethodName: "Get", - Handler: _Logrotate_Get_Handler, + Handler: _Api_Get_Handler, }, }, Streams: []grpc.StreamDesc{}, diff --git a/plugin/rtmp/api.go b/plugin/rtmp/api.go index 8f5491f..6fc07e7 100644 --- a/plugin/rtmp/api.go +++ b/plugin/rtmp/api.go @@ -2,12 +2,12 @@ package plugin_rtmp import ( "context" - + gpb "m7s.live/m7s/v5/pb" "m7s.live/m7s/v5/plugin/rtmp/pb" rtmp "m7s.live/m7s/v5/plugin/rtmp/pkg" ) -func (r *RTMPPlugin) PushOut(ctx context.Context, req *pb.PushRequest) (res *pb.PushResponse, err error) { +func (r *RTMPPlugin) PushOut(ctx context.Context, req *pb.PushRequest) (res *gpb.SuccessResponse, err error) { go r.Push(req.StreamPath, req.RemoteURL, &rtmp.Client{}) - return &pb.PushResponse{}, nil + return &gpb.SuccessResponse{}, nil } diff --git a/plugin/rtmp/pb/rtmp.pb.go b/plugin/rtmp/pb/rtmp.pb.go index 5da3d9b..cab0d51 100644 --- a/plugin/rtmp/pb/rtmp.pb.go +++ b/plugin/rtmp/pb/rtmp.pb.go @@ -10,7 +10,7 @@ import ( _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - _ "google.golang.org/protobuf/types/known/emptypb" + pb "m7s.live/m7s/v5/pb" reflect "reflect" sync "sync" ) @@ -77,67 +77,28 @@ func (x *PushRequest) GetRemoteURL() string { return "" } -type PushResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *PushResponse) Reset() { - *x = PushResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_rtmp_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PushResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PushResponse) ProtoMessage() {} - -func (x *PushResponse) ProtoReflect() protoreflect.Message { - mi := &file_rtmp_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PushResponse.ProtoReflect.Descriptor instead. -func (*PushResponse) Descriptor() ([]byte, []int) { - return file_rtmp_proto_rawDescGZIP(), []int{1} -} - var File_rtmp_proto protoreflect.FileDescriptor var file_rtmp_proto_rawDesc = []byte{ 0x0a, 0x0a, 0x72, 0x74, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x6d, 0x37, 0x73, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x4b, 0x0a, 0x0b, - 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x73, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x72, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x55, 0x52, 0x4c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x55, 0x52, 0x4c, 0x22, 0x0e, 0x0a, 0x0c, 0x50, 0x75, 0x73, - 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x69, 0x0a, 0x04, 0x72, 0x74, 0x6d, - 0x70, 0x12, 0x61, 0x0a, 0x07, 0x50, 0x75, 0x73, 0x68, 0x4f, 0x75, 0x74, 0x12, 0x10, 0x2e, 0x6d, - 0x37, 0x73, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, - 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x22, 0x1e, 0x2f, 0x72, 0x74, 0x6d, 0x70, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x75, 0x73, 0x68, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x50, 0x61, 0x74, 0x68, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, - 0x65, 0x55, 0x52, 0x4c, 0x42, 0x20, 0x5a, 0x1e, 0x6d, 0x37, 0x73, 0x2e, 0x6c, 0x69, 0x76, 0x65, - 0x2f, 0x6d, 0x37, 0x73, 0x2f, 0x76, 0x35, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x72, - 0x74, 0x6d, 0x70, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x0c, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x4b, 0x0a, + 0x0b, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, + 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x55, 0x52, 0x4c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x55, 0x52, 0x4c, 0x32, 0x6c, 0x0a, 0x04, 0x72, 0x74, + 0x6d, 0x70, 0x12, 0x64, 0x0a, 0x07, 0x50, 0x75, 0x73, 0x68, 0x4f, 0x75, 0x74, 0x12, 0x10, 0x2e, + 0x6d, 0x37, 0x73, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x14, 0x2e, 0x6d, 0x37, 0x73, 0x2e, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x22, 0x1e, 0x2f, + 0x72, 0x74, 0x6d, 0x70, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x75, 0x73, 0x68, 0x2f, 0x7b, 0x73, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x61, 0x74, 0x68, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x09, 0x72, + 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x55, 0x52, 0x4c, 0x42, 0x20, 0x5a, 0x1e, 0x6d, 0x37, 0x73, 0x2e, + 0x6c, 0x69, 0x76, 0x65, 0x2f, 0x6d, 0x37, 0x73, 0x2f, 0x76, 0x35, 0x2f, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x2f, 0x72, 0x74, 0x6d, 0x70, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -152,14 +113,14 @@ func file_rtmp_proto_rawDescGZIP() []byte { return file_rtmp_proto_rawDescData } -var file_rtmp_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_rtmp_proto_msgTypes = make([]protoimpl.MessageInfo, 1) var file_rtmp_proto_goTypes = []interface{}{ - (*PushRequest)(nil), // 0: m7s.PushRequest - (*PushResponse)(nil), // 1: m7s.PushResponse + (*PushRequest)(nil), // 0: m7s.PushRequest + (*pb.SuccessResponse)(nil), // 1: m7s.SuccessResponse } var file_rtmp_proto_depIdxs = []int32{ 0, // 0: m7s.rtmp.PushOut:input_type -> m7s.PushRequest - 1, // 1: m7s.rtmp.PushOut:output_type -> m7s.PushResponse + 1, // 1: m7s.rtmp.PushOut:output_type -> m7s.SuccessResponse 1, // [1:2] is the sub-list for method output_type 0, // [0:1] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name @@ -185,18 +146,6 @@ func file_rtmp_proto_init() { return nil } } - file_rtmp_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PushResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } } type x struct{} out := protoimpl.TypeBuilder{ @@ -204,7 +153,7 @@ func file_rtmp_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_rtmp_proto_rawDesc, NumEnums: 0, - NumMessages: 2, + NumMessages: 1, NumExtensions: 0, NumServices: 1, }, diff --git a/plugin/rtmp/pb/rtmp.proto b/plugin/rtmp/pb/rtmp.proto index 9e9eef2..bd8e5ba 100644 --- a/plugin/rtmp/pb/rtmp.proto +++ b/plugin/rtmp/pb/rtmp.proto @@ -1,11 +1,12 @@ syntax = "proto3"; import "google/api/annotations.proto"; -import "google/protobuf/empty.proto"; +//import "google/protobuf/empty.proto"; +import "global.proto"; package m7s; option go_package="m7s.live/m7s/v5/plugin/rtmp/pb"; service rtmp { - rpc PushOut (PushRequest) returns (PushResponse) { + rpc PushOut (PushRequest) returns (SuccessResponse) { option (google.api.http) = { post: "/rtmp/api/push/{streamPath=**}" body: "remoteURL" @@ -17,7 +18,3 @@ message PushRequest { string streamPath = 1; string remoteURL = 2; } - -message PushResponse { - -} \ No newline at end of file diff --git a/plugin/rtmp/pb/rtmp_grpc.pb.go b/plugin/rtmp/pb/rtmp_grpc.pb.go index effbc5a..c836033 100644 --- a/plugin/rtmp/pb/rtmp_grpc.pb.go +++ b/plugin/rtmp/pb/rtmp_grpc.pb.go @@ -11,6 +11,7 @@ import ( grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" + pb "m7s.live/m7s/v5/pb" ) // This is a compile-time assertion to ensure that this generated file @@ -22,7 +23,7 @@ const _ = grpc.SupportPackageIsVersion7 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type RtmpClient interface { - PushOut(ctx context.Context, in *PushRequest, opts ...grpc.CallOption) (*PushResponse, error) + PushOut(ctx context.Context, in *PushRequest, opts ...grpc.CallOption) (*pb.SuccessResponse, error) } type rtmpClient struct { @@ -33,8 +34,8 @@ func NewRtmpClient(cc grpc.ClientConnInterface) RtmpClient { return &rtmpClient{cc} } -func (c *rtmpClient) PushOut(ctx context.Context, in *PushRequest, opts ...grpc.CallOption) (*PushResponse, error) { - out := new(PushResponse) +func (c *rtmpClient) PushOut(ctx context.Context, in *PushRequest, opts ...grpc.CallOption) (*pb.SuccessResponse, error) { + out := new(pb.SuccessResponse) err := c.cc.Invoke(ctx, "/m7s.rtmp/PushOut", in, out, opts...) if err != nil { return nil, err @@ -46,7 +47,7 @@ func (c *rtmpClient) PushOut(ctx context.Context, in *PushRequest, opts ...grpc. // All implementations must embed UnimplementedRtmpServer // for forward compatibility type RtmpServer interface { - PushOut(context.Context, *PushRequest) (*PushResponse, error) + PushOut(context.Context, *PushRequest) (*pb.SuccessResponse, error) mustEmbedUnimplementedRtmpServer() } @@ -54,7 +55,7 @@ type RtmpServer interface { type UnimplementedRtmpServer struct { } -func (UnimplementedRtmpServer) PushOut(context.Context, *PushRequest) (*PushResponse, error) { +func (UnimplementedRtmpServer) PushOut(context.Context, *PushRequest) (*pb.SuccessResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method PushOut not implemented") } func (UnimplementedRtmpServer) mustEmbedUnimplementedRtmpServer() {} diff --git a/plugin/stress/api.go b/plugin/stress/api.go new file mode 100644 index 0000000..38d725e --- /dev/null +++ b/plugin/stress/api.go @@ -0,0 +1,112 @@ +package plugin_stress + +import ( + "context" + "fmt" + "google.golang.org/protobuf/types/known/emptypb" + "m7s.live/m7s/v5" + gpb "m7s.live/m7s/v5/pb" + "m7s.live/m7s/v5/pkg" + hdl "m7s.live/m7s/v5/plugin/hdl/pkg" + rtmp "m7s.live/m7s/v5/plugin/rtmp/pkg" + rtsp "m7s.live/m7s/v5/plugin/rtsp/pkg" + "m7s.live/m7s/v5/plugin/stress/pb" +) + +func (r *StressPlugin) PushRTMP(ctx context.Context, req *pb.PushRequest) (res *gpb.SuccessResponse, err error) { + l := r.pushers.Length + for i := range req.PushCount { + pusher, err := r.Push(req.StreamPath, fmt.Sprintf("rtmp://%s/stress/%d", req.RemoteHost, int(i)+l)) + if err != nil { + return nil, err + } + go r.startPush(pusher, &rtmp.Client{}) + } + return &gpb.SuccessResponse{}, nil +} + +func (r *StressPlugin) PushRTSP(ctx context.Context, req *pb.PushRequest) (res *gpb.SuccessResponse, err error) { + l := r.pushers.Length + for i := range req.PushCount { + pusher, err := r.Push(req.StreamPath, fmt.Sprintf("rtsp://%s/stress/%d", req.RemoteHost, int(i)+l)) + if err != nil { + return nil, err + } + go r.startPush(pusher, &rtsp.Client{}) + } + return &gpb.SuccessResponse{}, nil +} + +func (r *StressPlugin) PullRTMP(ctx context.Context, req *pb.PullRequest) (res *gpb.SuccessResponse, err error) { + i := r.pullers.Length + for range req.PullCount { + puller, err := r.Pull(fmt.Sprintf("stress/%d", i), fmt.Sprintf("rtmp://%s", req.RemoteURL)) + if err != nil { + return nil, err + } + go r.startPull(puller, &rtmp.Client{}) + i++ + } + return &gpb.SuccessResponse{}, nil +} + +func (r *StressPlugin) PullRTSP(ctx context.Context, req *pb.PullRequest) (res *gpb.SuccessResponse, err error) { + i := r.pullers.Length + for range req.PullCount { + puller, err := r.Pull(fmt.Sprintf("stress/%d", i), fmt.Sprintf("rtsp://%s", req.RemoteURL)) + if err != nil { + return nil, err + } + go r.startPull(puller, &rtsp.Client{}) + i++ + } + return &gpb.SuccessResponse{}, nil +} + +func (r *StressPlugin) PullHDL(ctx context.Context, req *pb.PullRequest) (res *gpb.SuccessResponse, err error) { + i := r.pullers.Length + for range req.PullCount { + puller, err := r.Pull(fmt.Sprintf("stress/%d", i), fmt.Sprintf("http://%s", req.RemoteURL)) + if err != nil { + return nil, err + } + go r.startPull(puller, hdl.NewHDLPuller()) + i++ + } + return &gpb.SuccessResponse{}, nil +} + +func (r *StressPlugin) startPush(pusher *m7s.Pusher, handler m7s.PushHandler) { + r.pushers.AddUnique(pusher) + pusher.Start(handler) + r.pushers.Remove(pusher) +} + +func (r *StressPlugin) startPull(puller *m7s.Puller, handler m7s.PullHandler) { + r.pullers.AddUnique(puller) + puller.Start(handler) + r.pullers.Remove(puller) +} + +func (r *StressPlugin) StopPush(ctx context.Context, req *emptypb.Empty) (res *gpb.SuccessResponse, err error) { + for pusher := range r.pushers.Range { + pusher.Stop(pkg.ErrStopFromAPI) + } + r.pushers.Clear() + return &gpb.SuccessResponse{}, nil +} + +func (r *StressPlugin) StopPull(ctx context.Context, req *emptypb.Empty) (res *gpb.SuccessResponse, err error) { + for puller := range r.pullers.Range { + puller.Stop(pkg.ErrStopFromAPI) + } + r.pullers.Clear() + return &gpb.SuccessResponse{}, nil +} + +func (r *StressPlugin) GetCount(ctx context.Context, req *emptypb.Empty) (res *pb.CountResponse, err error) { + return &pb.CountResponse{ + PullCount: uint32(r.pullers.Length), + PushCount: uint32(r.pushers.Length), + }, nil +} diff --git a/plugin/stress/index.go b/plugin/stress/index.go new file mode 100644 index 0000000..6b5b11f --- /dev/null +++ b/plugin/stress/index.go @@ -0,0 +1,23 @@ +package plugin_stress + +import ( + "m7s.live/m7s/v5" + "m7s.live/m7s/v5/pkg/util" + "m7s.live/m7s/v5/plugin/stress/pb" + "sync" +) + +type StressPlugin struct { + pb.UnimplementedApiServer + m7s.Plugin + pushers util.Collection[string, *m7s.Pusher] + pullers util.Collection[string, *m7s.Puller] +} + +var _ = m7s.InstallPlugin[StressPlugin](&pb.Api_ServiceDesc, pb.RegisterApiHandler) + +func (r *StressPlugin) OnInit() error { + r.pushers.L = &sync.RWMutex{} + r.pullers.L = &sync.RWMutex{} + return nil +} diff --git a/plugin/stress/pb/stress.proto b/plugin/stress/pb/stress.proto new file mode 100644 index 0000000..37d885f --- /dev/null +++ b/plugin/stress/pb/stress.proto @@ -0,0 +1,70 @@ +syntax = "proto3"; +import "google/api/annotations.proto"; +import "google/protobuf/empty.proto"; +import "global.proto"; +package stress; +option go_package="m7s.live/m7s/v5/plugin/stress/pb"; + +service api { + rpc PushRTMP (PushRequest) returns (m7s.SuccessResponse) { + option (google.api.http) = { + post: "/stress/api/push/rtmp/{pushCount}" + body: "*" + }; + } + rpc PushRTSP (PushRequest) returns (m7s.SuccessResponse) { + option (google.api.http) = { + post: "/stress/api/push/rtsp/{pushCount}" + body: "*" + }; + } + rpc PullRTMP (PullRequest) returns (m7s.SuccessResponse) { + option (google.api.http) = { + post: "/stress/api/pull/rtmp/{pullCount}" + body: "*" + }; + } + rpc PullRTSP (PullRequest) returns (m7s.SuccessResponse) { + option (google.api.http) = { + post: "/stress/api/pull/rtsp/{pullCount}" + body: "*" + }; + } + rpc PullHDL (PullRequest) returns (m7s.SuccessResponse) { + option (google.api.http) = { + post: "/stress/api/pull/hdl/{pullCount}" + body: "*" + }; + } + rpc GetCount (google.protobuf.Empty) returns (CountResponse) { + option (google.api.http) = { + get: "/stress/api/count" + }; + } + rpc StopPush (google.protobuf.Empty) returns (m7s.SuccessResponse) { + option (google.api.http) = { + post: "/stress/api/stop/push" + }; + } + rpc StopPull (google.protobuf.Empty) returns (m7s.SuccessResponse) { + option (google.api.http) = { + post: "/stress/api/stop/pull" + }; + } +} + +message CountResponse { + uint32 pushCount = 1; + uint32 pullCount = 2; + +} +message PushRequest { + string streamPath = 1; + string remoteHost = 2; + int32 pushCount = 3; +} + +message PullRequest { + string remoteURL = 1; + int32 pullCount = 2; +} \ No newline at end of file diff --git a/puller.go b/puller.go index 97d3cff..9f3ae4f 100644 --- a/puller.go +++ b/puller.go @@ -35,7 +35,7 @@ type Puller struct { func (p *Puller) Start(handler PullHandler) (err error) { badPuller := true var startTime time.Time - for p.Info("start pull"); p.Client.reconnect(p.RePull); p.Warn("restart pull") { + for p.Info("start pull", "url", p.Client.RemoteURL); p.Client.reconnect(p.RePull); p.Warn("restart pull") { if time.Since(startTime) < 5*time.Second { time.Sleep(5 * time.Second) } diff --git a/pusher.go b/pusher.go index cc0ba04..0fbf8f3 100644 --- a/pusher.go +++ b/pusher.go @@ -26,7 +26,7 @@ func (p *Pusher) GetKey() string { func (p *Pusher) Start(handler PushHandler) (err error) { badPuller := true var startTime time.Time - for p.Info("start push"); p.Client.reconnect(p.RePush); p.Warn("restart push") { + for p.Info("start push", "url", p.Client.RemoteURL); p.Client.reconnect(p.RePush); p.Warn("restart push") { if time.Since(startTime) < 5*time.Second { time.Sleep(5 * time.Second) } diff --git a/qodana.yaml b/qodana.yaml new file mode 100644 index 0000000..215d808 --- /dev/null +++ b/qodana.yaml @@ -0,0 +1,29 @@ +#-------------------------------------------------------------------------------# +# Qodana analysis is configured by qodana.yaml file # +# https://www.jetbrains.com/help/qodana/qodana-yaml.html # +#-------------------------------------------------------------------------------# +version: "1.0" + +#Specify inspection profile for code analysis +profile: + name: qodana.starter + +#Enable inspections +#include: +# - name: + +#Disable inspections +#exclude: +# - name: +# paths: +# - + +#Execute shell command before Qodana execution (Applied in CI/CD pipeline) +#bootstrap: sh ./prepare-qodana.sh + +#Install IDE plugins before Qodana execution (Applied in CI/CD pipeline) +#plugins: +# - id: #(plugin id can be found at https://plugins.jetbrains.com) + +#Specify Qodana linter for analysis (Applied in CI/CD pipeline) +linter: jetbrains/qodana-go:latest diff --git a/server.go b/server.go index 17c5d51..bb6a22d 100644 --- a/server.go +++ b/server.go @@ -51,39 +51,27 @@ type Server struct { pb.UnimplementedGlobalServer Plugin ServerConfig - ID int - eventChan chan any - Plugins util.Collection[string, *Plugin] - Streams util.Collection[string, *Publisher] - Pulls util.Collection[string, *Puller] - Pushs util.Collection[string, *Pusher] - Waiting util.Collection[string, *Publisher] - Subscribers util.Collection[int, *Subscriber] - LogHandler MultiLogHandler - pidG int - sidG int - apiList []string - grpcServer *grpc.Server - grpcClientConn *grpc.ClientConn - lastSummaryTime time.Time - lastSummary *pb.SummaryResponse - OnAuthPubs map[string]func(p *util.Promise[*Publisher]) - OnAuthSubs map[string]func(p *util.Promise[*Subscriber]) + eventChan chan any + Plugins util.Collection[string, *Plugin] + Streams, Waiting util.Collection[string, *Publisher] + Pulls util.Collection[string, *Puller] + Pushs util.Collection[string, *Pusher] + Subscribers util.Collection[int, *Subscriber] + LogHandler MultiLogHandler + pidG, sidG int + apiList []string + grpcServer *grpc.Server + grpcClientConn *grpc.ClientConn + lastSummaryTime time.Time + lastSummary *pb.SummaryResponse + OnAuthPubs map[string]func(p *util.Promise[*Publisher]) + OnAuthSubs map[string]func(p *util.Promise[*Subscriber]) } func NewServer() (s *Server) { - s = &Server{ - ID: int(serverIndexG.Add(1)), - eventChan: make(chan any, 10), - } - s.config.HTTP.ListenAddrTLS = ":8443" - s.config.HTTP.ListenAddr = ":8080" - s.handler = s - s.server = s + s = &Server{} + s.ID = int(serverIndexG.Add(1)) s.Meta = &serverMeta - s.LogHandler.Add(defaultLogHandler) - s.LogHandler.SetLevel(slog.LevelInfo) - s.Logger = slog.New(&s.LogHandler).With("server", s.ID) s.OnAuthPubs = make(map[string]func(p *util.Promise[*Publisher])) s.OnAuthSubs = make(map[string]func(p *util.Promise[*Subscriber])) Servers[s.ID] = s @@ -96,35 +84,28 @@ func Run(ctx context.Context, conf any) error { type rawconfig = map[string]map[string]any -func (s *Server) reset() { - server := Server{ - ID: s.ID, - eventChan: make(chan any, 10), - } - server.Logger = s.Logger - server.handler = s.handler - server.server = s.server - server.Meta = s.Meta - server.config.HTTP.ListenAddrTLS = ":8443" - server.config.HTTP.ListenAddr = ":8080" - server.LogHandler = MultiLogHandler{} - server.LogHandler.SetLevel(slog.LevelInfo) - server.LogHandler.Add(defaultLogHandler) - server.OnAuthPubs = s.OnAuthPubs - server.OnAuthSubs = s.OnAuthSubs - // server.Logger = slog.New(&server.LogHandler).With("server", s.ID) - *s = server -} - func (s *Server) Run(ctx context.Context, conf any) (err error) { s.StartTime = time.Now() for err = s.run(ctx, conf); err == ErrRestart; err = s.run(ctx, conf) { - s.reset() + var server Server + server.ID = s.ID + server.Meta = s.Meta + server.OnAuthPubs = s.OnAuthPubs + server.OnAuthSubs = s.OnAuthSubs + *s = server } return } func (s *Server) run(ctx context.Context, conf any) (err error) { + s.server = s + s.handler = s + s.config.HTTP.ListenAddrTLS = ":8443" + s.config.HTTP.ListenAddr = ":8080" + s.LogHandler.SetLevel(slog.LevelInfo) + s.LogHandler.Add(defaultLogHandler) + s.Logger = slog.New(&s.LogHandler).With("server", s.ID) + httpConf, tcpConf := &s.config.HTTP, &s.config.TCP mux := runtime.NewServeMux(runtime.WithMarshalerOption("text/plain", &pb.TextPlain{}), runtime.WithRoutingErrorHandler(runtime.RoutingErrorHandlerFunc(func(_ context.Context, _ *runtime.ServeMux, _ runtime.Marshaler, w http.ResponseWriter, r *http.Request, _ int) { httpConf.GetHttpMux().ServeHTTP(w, r) @@ -157,6 +138,7 @@ func (s *Server) run(ctx context.Context, conf any) (err error) { if cg != nil { s.Config.ParseUserFile(cg["global"]) } + s.eventChan = make(chan any, s.EventBusSize) s.LogHandler.SetLevel(ParseLevel(s.config.LogLevel)) s.registerHandler(map[string]http.HandlerFunc{ "/api/config/json/{name}": s.api_Config_JSON_, @@ -250,6 +232,7 @@ func (s *Server) doneEventLoop(input chan DoneChan, output chan int) { } } +// eventLoop powerful grateful graceful beautiful func (s *Server) eventLoop() { pulse := time.NewTicker(s.PulseInterval) defer pulse.Stop() diff --git a/subscriber.go b/subscriber.go index 267a67b..a7f8c44 100644 --- a/subscriber.go +++ b/subscriber.go @@ -28,7 +28,6 @@ type Owner struct { type PubSubBase struct { Unit - ID int Owner Plugin *Plugin StreamPath string