diff --git a/_proto/hapi/release/log.proto b/_proto/hapi/release/log.proto index e1152030f..591f6ebae 100644 --- a/_proto/hapi/release/log.proto +++ b/_proto/hapi/release/log.proto @@ -21,30 +21,36 @@ import "google/protobuf/timestamp.proto"; option go_package = "release"; +// Allows filtering by log event source +enum LogSource { + HOOK = 0; + TEST = 1; + POD = 2; + SYSTEM = 3; +} + +// Syslog log levels +enum LogLevel { + EMERG = 0; + ALERT = 1; + CRIT = 2; + ERR = 3; + WARNING = 4; + NOTICE = 5; + INFO = 6; + DEBUG = 7; +} + +message LogSubscription { + string release = 1; + LogLevel level = 2; + repeated LogSource sources = 3; +} + message Log { - // Allows filtering by log event source - enum Source { - HOOK = 0; - TEST = 1; - POD = 2; - SYSTEM = 3; - } - - // Syslog log levels - enum Level { - EMERG = 0; - ALERT = 1; - CRIT = 2; - ERR = 3; - WARNING = 4; - NOTICE = 5; - INFO = 6; - DEBUG = 7; - } - - Source source = 1; - Level level = 2; - string release = 3; + string release = 1; + LogLevel level = 2; + LogSource source = 3; string log = 4; google.protobuf.Timestamp timestamp = 5; } diff --git a/_proto/hapi/services/tiller.proto b/_proto/hapi/services/tiller.proto index 53ce0016b..836ba15af 100644 --- a/_proto/hapi/services/tiller.proto +++ b/_proto/hapi/services/tiller.proto @@ -57,7 +57,7 @@ service ReleaseService { } // GetReleaseLogs returns a stream of logging information from the release - rpc GetReleaseLogs(GetReleaseLogsRequest) returns (stream GetReleaseLogsResponse) { + rpc GetReleaseLogs(stream GetReleaseLogsRequest) returns (stream GetReleaseLogsResponse) { } // UpdateRelease updates release content. @@ -188,10 +188,7 @@ message GetReleaseContentResponse { } message GetReleaseLogsRequest { - // Name is the name of the release - string name = 1; - // Version is the version of the release - int32 version = 2; + hapi.release.LogSubscription subscription = 1; } message GetReleaseLogsResponse { diff --git a/cmd/helm/install.go b/cmd/helm/install.go index 36ce27d4f..c4f7bdaa0 100644 --- a/cmd/helm/install.go +++ b/cmd/helm/install.go @@ -177,22 +177,22 @@ func newInstallCmd(c helm.Interface, out io.Writer) *cobra.Command { return cmd } -func streamLogs(client helm.Interface, rlsName string, done <-chan struct{}) error { - logs, err := client.ReleaseLogs(rlsName, done) - if err != nil { - return err - } - - go func() { - select { - case log := <-logs: - fmt.Println(log.Log) - case <-done: - return - } - }() - return nil -} +//func streamLogs(client helm.Interface, rlsName string, done <-chan struct{}) error { +// logs, err := client.ReleaseLogs(rlsName, done) +// if err != nil { +// return err +// } +// +// go func() { +// select { +// case log := <-logs: +// fmt.Println(log.Log) +// case <-done: +// return +// } +// }() +// return nil +//} func (i *installCmd) run() error { debug("CHART PATH: %s\n", i.chartPath) @@ -226,8 +226,8 @@ func (i *installCmd) run() error { checkDependencies(chartRequested, req, i.out) } - done := make(chan struct{}) - streamLogs(i.client, i.name, done) + //done := make(chan struct{}) + //streamLogs(i.client, i.name, done) res, err := i.client.InstallReleaseFromChart( chartRequested, i.namespace, diff --git a/cmd/helm/logs.go b/cmd/helm/logs.go index a43b12a33..1fc210d2d 100644 --- a/cmd/helm/logs.go +++ b/cmd/helm/logs.go @@ -22,6 +22,7 @@ import ( "k8s.io/helm/pkg/helm" "fmt" + "k8s.io/helm/pkg/proto/hapi/release" ) var logsHelp = ` @@ -63,7 +64,7 @@ func newLogsCmd(client helm.Interface, out io.Writer) *cobra.Command { func (l *logsCmd) run() error { done := make(chan struct{}) - stream, err := l.client.ReleaseLogs(l.release, done) + stream, err := l.client.ReleaseLogs(l.release, release.LogLevel_DEBUG, done, release.LogSource_SYSTEM, release.LogSource_POD) fmt.Println("Listening for logs") for { @@ -77,6 +78,7 @@ func (l *logsCmd) run() error { } if err != nil { + done <- struct{}{} return prettyError(err) } diff --git a/pkg/helm/client.go b/pkg/helm/client.go index c77b61c0b..12fdc3b42 100644 --- a/pkg/helm/client.go +++ b/pkg/helm/client.go @@ -28,6 +28,7 @@ import ( "k8s.io/helm/pkg/proto/hapi/chart" rls "k8s.io/helm/pkg/proto/hapi/services" "fmt" + "k8s.io/helm/pkg/proto/hapi/release" ) // Client manages client side of the helm-tiller protocol @@ -217,9 +218,10 @@ func (h *Client) RollbackRelease(rlsName string, opts ...RollbackOption) (*rls.R } // ReleaseLogs returns a channel streaming log data from the release -func (h *Client) ReleaseLogs(rlsName string, done <-chan struct{}) (<-chan *rls.GetReleaseLogsResponse, error) { +func (h *Client) ReleaseLogs(rlsName string, level release.LogLevel, done <-chan struct{}, sources ...release.LogSource) (<-chan *rls.GetReleaseLogsResponse, error) { ctx := NewContext() - req := &rls.GetReleaseLogsRequest{Name: rlsName} + sub := &release.LogSubscription{Release: rlsName, Level: level, Sources: sources} + req := &rls.GetReleaseLogsRequest{Subscription: sub} return h.logs(ctx, req, done) } diff --git a/pkg/helm/interface.go b/pkg/helm/interface.go index 2320c18f1..7ea2eaf80 100644 --- a/pkg/helm/interface.go +++ b/pkg/helm/interface.go @@ -19,6 +19,7 @@ package helm import ( "k8s.io/helm/pkg/proto/hapi/chart" rls "k8s.io/helm/pkg/proto/hapi/services" + "k8s.io/helm/pkg/proto/hapi/release" ) // Interface for helm client for mocking in tests @@ -28,7 +29,7 @@ type Interface interface { InstallReleaseFromChart(chart *chart.Chart, namespace string, opts ...InstallOption) (*rls.InstallReleaseResponse, error) DeleteRelease(rlsName string, opts ...DeleteOption) (*rls.UninstallReleaseResponse, error) ReleaseStatus(rlsName string, opts ...StatusOption) (*rls.GetReleaseStatusResponse, error) - ReleaseLogs(rlsName string, done <-chan struct{}) (<-chan *rls.GetReleaseLogsResponse, error) + ReleaseLogs(rlsName string, level release.LogLevel, done <-chan struct{}, sources ...release.LogSource) (<-chan *rls.GetReleaseLogsResponse, error) UpdateRelease(rlsName, chStr string, opts ...UpdateOption) (*rls.UpdateReleaseResponse, error) UpdateReleaseFromChart(rlsName string, chart *chart.Chart, opts ...UpdateOption) (*rls.UpdateReleaseResponse, error) RollbackRelease(rlsName string, opts ...RollbackOption) (*rls.RollbackReleaseResponse, error) diff --git a/pkg/proto/hapi/release/hook.pb.go b/pkg/proto/hapi/release/hook.pb.go index 8989146b3..272da0590 100644 --- a/pkg/proto/hapi/release/hook.pb.go +++ b/pkg/proto/hapi/release/hook.pb.go @@ -17,6 +17,7 @@ It is generated from these files: It has these top-level messages: Hook Info + LogSubscription Log Release Status diff --git a/pkg/proto/hapi/release/log.pb.go b/pkg/proto/hapi/release/log.pb.go index e965daf69..04b606b05 100644 --- a/pkg/proto/hapi/release/log.pb.go +++ b/pkg/proto/hapi/release/log.pb.go @@ -15,48 +15,48 @@ var _ = fmt.Errorf var _ = math.Inf // Allows filtering by log event source -type Log_Source int32 +type LogSource int32 const ( - Log_HOOK Log_Source = 0 - Log_TEST Log_Source = 1 - Log_POD Log_Source = 2 - Log_SYSTEM Log_Source = 3 + LogSource_HOOK LogSource = 0 + LogSource_TEST LogSource = 1 + LogSource_POD LogSource = 2 + LogSource_SYSTEM LogSource = 3 ) -var Log_Source_name = map[int32]string{ +var LogSource_name = map[int32]string{ 0: "HOOK", 1: "TEST", 2: "POD", 3: "SYSTEM", } -var Log_Source_value = map[string]int32{ +var LogSource_value = map[string]int32{ "HOOK": 0, "TEST": 1, "POD": 2, "SYSTEM": 3, } -func (x Log_Source) String() string { - return proto.EnumName(Log_Source_name, int32(x)) +func (x LogSource) String() string { + return proto.EnumName(LogSource_name, int32(x)) } -func (Log_Source) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{0, 0} } +func (LogSource) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } // Syslog log levels -type Log_Level int32 +type LogLevel int32 const ( - Log_EMERG Log_Level = 0 - Log_ALERT Log_Level = 1 - Log_CRIT Log_Level = 2 - Log_ERR Log_Level = 3 - Log_WARNING Log_Level = 4 - Log_NOTICE Log_Level = 5 - Log_INFO Log_Level = 6 - Log_DEBUG Log_Level = 7 + LogLevel_EMERG LogLevel = 0 + LogLevel_ALERT LogLevel = 1 + LogLevel_CRIT LogLevel = 2 + LogLevel_ERR LogLevel = 3 + LogLevel_WARNING LogLevel = 4 + LogLevel_NOTICE LogLevel = 5 + LogLevel_INFO LogLevel = 6 + LogLevel_DEBUG LogLevel = 7 ) -var Log_Level_name = map[int32]string{ +var LogLevel_name = map[int32]string{ 0: "EMERG", 1: "ALERT", 2: "CRIT", @@ -66,7 +66,7 @@ var Log_Level_name = map[int32]string{ 6: "INFO", 7: "DEBUG", } -var Log_Level_value = map[string]int32{ +var LogLevel_value = map[string]int32{ "EMERG": 0, "ALERT": 1, "CRIT": 2, @@ -77,15 +77,26 @@ var Log_Level_value = map[string]int32{ "DEBUG": 7, } -func (x Log_Level) String() string { - return proto.EnumName(Log_Level_name, int32(x)) +func (x LogLevel) String() string { + return proto.EnumName(LogLevel_name, int32(x)) } -func (Log_Level) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{0, 1} } +func (LogLevel) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } + +type LogSubscription struct { + Release string `protobuf:"bytes,1,opt,name=release" json:"release,omitempty"` + Level LogLevel `protobuf:"varint,2,opt,name=level,enum=hapi.release.LogLevel" json:"level,omitempty"` + Sources []LogSource `protobuf:"varint,3,rep,packed,name=sources,enum=hapi.release.LogSource" json:"sources,omitempty"` +} + +func (m *LogSubscription) Reset() { *m = LogSubscription{} } +func (m *LogSubscription) String() string { return proto.CompactTextString(m) } +func (*LogSubscription) ProtoMessage() {} +func (*LogSubscription) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } type Log struct { - Source Log_Source `protobuf:"varint,1,opt,name=source,enum=hapi.release.Log_Source" json:"source,omitempty"` - Level Log_Level `protobuf:"varint,2,opt,name=level,enum=hapi.release.Log_Level" json:"level,omitempty"` - Release string `protobuf:"bytes,3,opt,name=release" json:"release,omitempty"` + Release string `protobuf:"bytes,1,opt,name=release" json:"release,omitempty"` + Level LogLevel `protobuf:"varint,2,opt,name=level,enum=hapi.release.LogLevel" json:"level,omitempty"` + Source LogSource `protobuf:"varint,3,opt,name=source,enum=hapi.release.LogSource" json:"source,omitempty"` Log string `protobuf:"bytes,4,opt,name=log" json:"log,omitempty"` Timestamp *google_protobuf.Timestamp `protobuf:"bytes,5,opt,name=timestamp" json:"timestamp,omitempty"` } @@ -93,7 +104,7 @@ type Log struct { func (m *Log) Reset() { *m = Log{} } func (m *Log) String() string { return proto.CompactTextString(m) } func (*Log) ProtoMessage() {} -func (*Log) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } +func (*Log) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } func (m *Log) GetTimestamp() *google_protobuf.Timestamp { if m != nil { @@ -103,33 +114,37 @@ func (m *Log) GetTimestamp() *google_protobuf.Timestamp { } func init() { + proto.RegisterType((*LogSubscription)(nil), "hapi.release.LogSubscription") proto.RegisterType((*Log)(nil), "hapi.release.Log") - proto.RegisterEnum("hapi.release.Log_Source", Log_Source_name, Log_Source_value) - proto.RegisterEnum("hapi.release.Log_Level", Log_Level_name, Log_Level_value) + proto.RegisterEnum("hapi.release.LogSource", LogSource_name, LogSource_value) + proto.RegisterEnum("hapi.release.LogLevel", LogLevel_name, LogLevel_value) } func init() { proto.RegisterFile("hapi/release/log.proto", fileDescriptor2) } var fileDescriptor2 = []byte{ - // 317 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x8f, 0x4b, 0x4b, 0xfb, 0x40, - 0x14, 0xc5, 0x9b, 0x77, 0x73, 0xfb, 0xe7, 0xcf, 0x65, 0x16, 0x3a, 0x74, 0x63, 0xe9, 0xaa, 0x1b, - 0x27, 0x5a, 0x37, 0x6e, 0xfb, 0x18, 0x6b, 0x30, 0x4d, 0x64, 0x12, 0x11, 0x5d, 0x08, 0xad, 0x8c, - 0xb1, 0x90, 0x32, 0xa5, 0x0f, 0xbf, 0xae, 0x5f, 0x45, 0x66, 0xd2, 0xa8, 0xe0, 0xee, 0xde, 0x7b, - 0x7e, 0xe7, 0x72, 0x0e, 0x9c, 0xbc, 0x2f, 0x36, 0xab, 0x68, 0x2b, 0x2b, 0xb9, 0xd8, 0xc9, 0xa8, - 0x52, 0x25, 0xdb, 0x6c, 0xd5, 0x5e, 0x91, 0x7f, 0xfa, 0xce, 0x8e, 0xf7, 0xee, 0x59, 0xa9, 0x54, - 0x59, 0xc9, 0xc8, 0x68, 0xcb, 0xc3, 0x5b, 0xb4, 0x5f, 0xad, 0xe5, 0x6e, 0xbf, 0x58, 0x6f, 0x6a, - 0xbc, 0xff, 0x69, 0x83, 0x93, 0xa8, 0x92, 0x5c, 0x80, 0xbf, 0x53, 0x87, 0xed, 0xab, 0xa4, 0x56, - 0xcf, 0x1a, 0xfc, 0x1f, 0x52, 0xf6, 0xfb, 0x0f, 0x4b, 0x54, 0xc9, 0x72, 0xa3, 0x8b, 0x23, 0x47, - 0xce, 0xc1, 0xab, 0xe4, 0x87, 0xac, 0xa8, 0x6d, 0x0c, 0xa7, 0x7f, 0x0d, 0x89, 0x96, 0x45, 0x4d, - 0x11, 0x0a, 0xc1, 0x51, 0xa3, 0x4e, 0xcf, 0x1a, 0x84, 0xa2, 0x59, 0x09, 0x82, 0x53, 0xa9, 0x92, - 0xba, 0xe6, 0xaa, 0x47, 0x72, 0x0d, 0xe1, 0x77, 0x4e, 0xea, 0xf5, 0xac, 0x41, 0x67, 0xd8, 0x65, - 0x75, 0x13, 0xd6, 0x34, 0x61, 0x45, 0x43, 0x88, 0x1f, 0xb8, 0x7f, 0x09, 0x7e, 0x1d, 0x93, 0xb4, - 0xc1, 0xbd, 0xcd, 0xb2, 0x3b, 0x6c, 0xe9, 0xa9, 0xe0, 0x79, 0x81, 0x16, 0x09, 0xc0, 0xb9, 0xcf, - 0xa6, 0x68, 0x13, 0x00, 0x3f, 0x7f, 0xca, 0x0b, 0x3e, 0x47, 0xa7, 0xff, 0x02, 0x9e, 0x09, 0x4a, - 0x42, 0xf0, 0xf8, 0x9c, 0x8b, 0x19, 0xb6, 0xf4, 0x38, 0x4a, 0xb8, 0xd0, 0x9e, 0x36, 0xb8, 0x13, - 0x11, 0x17, 0x68, 0x6b, 0x37, 0x17, 0x02, 0x1d, 0xd2, 0x81, 0xe0, 0x71, 0x24, 0xd2, 0x38, 0x9d, - 0xa1, 0xab, 0x5f, 0xa5, 0x59, 0x11, 0x4f, 0x38, 0x7a, 0x9a, 0x8d, 0xd3, 0x9b, 0x0c, 0x7d, 0xfd, - 0x60, 0xca, 0xc7, 0x0f, 0x33, 0x0c, 0xc6, 0xe1, 0x73, 0xd3, 0x74, 0xe9, 0x9b, 0xf0, 0x57, 0x5f, - 0x01, 0x00, 0x00, 0xff, 0xff, 0xe3, 0x7b, 0x56, 0xb1, 0xbc, 0x01, 0x00, 0x00, + // 359 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x90, 0xcf, 0x6e, 0x9b, 0x40, + 0x10, 0xc6, 0x8d, 0x97, 0x3f, 0x66, 0x5c, 0xb9, 0xab, 0x3d, 0xb8, 0xc8, 0x97, 0x22, 0x9f, 0x90, + 0x55, 0x81, 0xea, 0xf6, 0xd0, 0xab, 0xff, 0x6c, 0x5d, 0x54, 0x0c, 0xd5, 0x42, 0x55, 0xb5, 0x37, + 0x6c, 0x6d, 0x09, 0x12, 0xce, 0x22, 0xc0, 0x79, 0x8a, 0x3c, 0x59, 0x9e, 0x2a, 0x5a, 0x30, 0x4e, + 0xa4, 0x28, 0xb7, 0xdc, 0x66, 0x77, 0x7e, 0xf3, 0x7d, 0x33, 0x1f, 0x4c, 0x6f, 0xd2, 0x32, 0xf7, + 0x2a, 0x5e, 0xf0, 0xb4, 0xe6, 0x5e, 0x21, 0x32, 0xb7, 0xac, 0x44, 0x23, 0xc8, 0x3b, 0xf9, 0xef, + 0x5e, 0xfe, 0x67, 0x1f, 0x33, 0x21, 0xb2, 0x82, 0x7b, 0x6d, 0xef, 0x70, 0xfe, 0xef, 0x35, 0xf9, + 0x89, 0xd7, 0x4d, 0x7a, 0x2a, 0x3b, 0x7c, 0x7e, 0xaf, 0xc0, 0xfb, 0x40, 0x64, 0xf1, 0xf9, 0x50, + 0x1f, 0xab, 0xbc, 0x6c, 0x72, 0x71, 0x4b, 0x2c, 0x30, 0x2e, 0xf3, 0x96, 0x62, 0x2b, 0x8e, 0xc9, + 0xfa, 0x27, 0xf9, 0x04, 0x5a, 0xc1, 0xef, 0x78, 0x61, 0x0d, 0x6d, 0xc5, 0x99, 0x2c, 0xa7, 0xee, + 0x73, 0x33, 0x37, 0x10, 0x59, 0x20, 0xbb, 0xac, 0x83, 0xc8, 0x67, 0x30, 0x6a, 0x71, 0xae, 0x8e, + 0xbc, 0xb6, 0x90, 0x8d, 0x9c, 0xc9, 0xf2, 0xc3, 0x0b, 0x3e, 0x6e, 0xfb, 0xac, 0xe7, 0xe6, 0x0f, + 0x0a, 0xa0, 0x40, 0x64, 0x6f, 0xb6, 0x82, 0x07, 0x7a, 0x27, 0x6d, 0xa1, 0x16, 0x7f, 0x75, 0x83, + 0x0b, 0x46, 0x30, 0xa0, 0x42, 0x64, 0x96, 0xda, 0x9a, 0xca, 0x92, 0x7c, 0x03, 0xf3, 0x1a, 0x9a, + 0xa5, 0xd9, 0x8a, 0x33, 0x5e, 0xce, 0xdc, 0x2e, 0x56, 0xb7, 0x8f, 0xd5, 0x4d, 0x7a, 0x82, 0x3d, + 0xc1, 0x8b, 0xaf, 0x60, 0x5e, 0x0d, 0xc8, 0x08, 0xd4, 0x1f, 0x51, 0xf4, 0x13, 0x0f, 0x64, 0x95, + 0xd0, 0x38, 0xc1, 0x0a, 0x31, 0x00, 0xfd, 0x8a, 0xb6, 0x78, 0x48, 0x00, 0xf4, 0xf8, 0x6f, 0x9c, + 0xd0, 0x3d, 0x46, 0x8b, 0x14, 0x46, 0xfd, 0x15, 0xc4, 0x04, 0x8d, 0xee, 0x29, 0xdb, 0xe1, 0x81, + 0x2c, 0x57, 0x01, 0x65, 0x72, 0x6c, 0x04, 0xea, 0x86, 0xf9, 0x09, 0x1e, 0x4a, 0x01, 0xca, 0x18, + 0x46, 0x64, 0x0c, 0xc6, 0x9f, 0x15, 0x0b, 0xfd, 0x70, 0x87, 0x55, 0xa9, 0x16, 0x46, 0x89, 0xbf, + 0xa1, 0x58, 0x93, 0xac, 0x1f, 0x7e, 0x8f, 0xb0, 0x2e, 0x05, 0xb6, 0x74, 0xfd, 0x7b, 0x87, 0x8d, + 0xb5, 0xf9, 0xaf, 0x8f, 0xf3, 0xa0, 0xb7, 0x27, 0x7c, 0x79, 0x0c, 0x00, 0x00, 0xff, 0xff, 0x5f, + 0x53, 0x1a, 0x42, 0x4f, 0x02, 0x00, 0x00, } diff --git a/pkg/proto/hapi/services/tiller.pb.go b/pkg/proto/hapi/services/tiller.pb.go index 817730f03..f5d315347 100644 --- a/pkg/proto/hapi/services/tiller.pb.go +++ b/pkg/proto/hapi/services/tiller.pb.go @@ -242,10 +242,7 @@ func (m *GetReleaseContentResponse) GetRelease() *hapi_release5.Release { } type GetReleaseLogsRequest struct { - // Name is the name of the release - Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - // Version is the version of the release - Version int32 `protobuf:"varint,2,opt,name=version" json:"version,omitempty"` + Subscription *hapi_release6.LogSubscription `protobuf:"bytes,1,opt,name=subscription" json:"subscription,omitempty"` } func (m *GetReleaseLogsRequest) Reset() { *m = GetReleaseLogsRequest{} } @@ -253,6 +250,13 @@ func (m *GetReleaseLogsRequest) String() string { return proto.Compac func (*GetReleaseLogsRequest) ProtoMessage() {} func (*GetReleaseLogsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } +func (m *GetReleaseLogsRequest) GetSubscription() *hapi_release6.LogSubscription { + if m != nil { + return m.Subscription + } + return nil +} + type GetReleaseLogsResponse struct { Log *hapi_release6.Log `protobuf:"bytes,1,opt,name=log" json:"log,omitempty"` } @@ -1099,83 +1103,84 @@ var _ReleaseService_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("hapi/services/tiller.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 1233 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0xdd, 0x72, 0xdb, 0x44, - 0x14, 0x8e, 0x2c, 0xc7, 0x3f, 0x27, 0x69, 0x70, 0xb7, 0x89, 0xa3, 0x6a, 0x80, 0x09, 0xea, 0x40, - 0xdd, 0x96, 0x3a, 0xc5, 0x5c, 0x31, 0x03, 0xcc, 0xa4, 0xa9, 0x27, 0x29, 0x98, 0x74, 0x46, 0x6e, - 0xcb, 0x0c, 0xc3, 0xe0, 0x51, 0xec, 0xb5, 0x2b, 0x2a, 0x6b, 0x5d, 0xed, 0x2a, 0x34, 0xb7, 0xdc, - 0xf1, 0x28, 0xbc, 0x05, 0x2f, 0x40, 0x9f, 0x89, 0xd1, 0xfe, 0xc8, 0x5e, 0x45, 0x4a, 0x84, 0x6f, - 0xac, 0xdd, 0x3d, 0x67, 0xcf, 0xcf, 0x77, 0x4e, 0xbe, 0x3d, 0x01, 0xfb, 0x8d, 0xb7, 0xf0, 0x0f, - 0x29, 0x8e, 0x2e, 0xfc, 0x31, 0xa6, 0x87, 0xcc, 0x0f, 0x02, 0x1c, 0x75, 0x17, 0x11, 0x61, 0x04, - 0xed, 0x26, 0xb2, 0xae, 0x92, 0x75, 0x85, 0xcc, 0x6e, 0xf3, 0x1b, 0xe3, 0x37, 0x5e, 0xc4, 0xc4, - 0xaf, 0xd0, 0xb6, 0xf7, 0x57, 0xcf, 0x49, 0x38, 0xf5, 0x67, 0x52, 0x20, 0x5c, 0x44, 0x38, 0xc0, - 0x1e, 0xc5, 0xea, 0x2b, 0x65, 0x6d, 0x4d, 0x16, 0x90, 0x99, 0x66, 0x4c, 0x9d, 0xfb, 0xe1, 0x94, - 0x48, 0xc1, 0x5d, 0x4d, 0x40, 0x99, 0xc7, 0x62, 0xaa, 0xf9, 0xb9, 0xc0, 0x11, 0xf5, 0x49, 0xa8, - 0xbe, 0x42, 0xe6, 0xfc, 0x53, 0x81, 0x3b, 0x03, 0x9f, 0x32, 0x57, 0x5c, 0xa4, 0x2e, 0x7e, 0x17, - 0x63, 0xca, 0xd0, 0x2e, 0x6c, 0x06, 0xfe, 0xdc, 0x67, 0x96, 0x71, 0x60, 0x74, 0x4c, 0x57, 0x6c, - 0x50, 0x1b, 0x6a, 0x64, 0x3a, 0xa5, 0x98, 0x59, 0x95, 0x03, 0xa3, 0xd3, 0x74, 0xe5, 0x0e, 0x7d, - 0x0f, 0x75, 0x4a, 0x22, 0x36, 0x3a, 0xbf, 0xb4, 0xcc, 0x03, 0xa3, 0xb3, 0xd3, 0xfb, 0xbc, 0x9b, - 0x07, 0x51, 0x37, 0xf1, 0x34, 0x24, 0x11, 0xeb, 0x26, 0x3f, 0x4f, 0x2f, 0xdd, 0x1a, 0xe5, 0xdf, - 0xc4, 0xee, 0xd4, 0x0f, 0x18, 0x8e, 0xac, 0xaa, 0xb0, 0x2b, 0x76, 0xe8, 0x04, 0x80, 0xdb, 0x25, - 0xd1, 0x04, 0x47, 0xd6, 0x26, 0x37, 0xdd, 0x29, 0x61, 0xfa, 0x45, 0xa2, 0xef, 0x36, 0xa9, 0x5a, - 0xa2, 0x6f, 0x61, 0x5b, 0x40, 0x32, 0x1a, 0x93, 0x09, 0xa6, 0x56, 0xed, 0xc0, 0xec, 0xec, 0xf4, - 0xee, 0x0a, 0x53, 0x0a, 0xf9, 0xa1, 0x00, 0xed, 0x98, 0x4c, 0xb0, 0xbb, 0x25, 0xd4, 0x93, 0x35, - 0x45, 0x1f, 0x43, 0x33, 0xf4, 0xe6, 0x98, 0x2e, 0xbc, 0x31, 0xb6, 0xea, 0x3c, 0xc2, 0xe5, 0x81, - 0xf3, 0x1b, 0x34, 0x94, 0x73, 0xa7, 0x07, 0x35, 0x91, 0x1a, 0xda, 0x82, 0xfa, 0xab, 0xb3, 0x1f, - 0xcf, 0x5e, 0xfc, 0x7c, 0xd6, 0xda, 0x40, 0x0d, 0xa8, 0x9e, 0x1d, 0xfd, 0xd4, 0x6f, 0x19, 0xe8, - 0x36, 0xdc, 0x1a, 0x1c, 0x0d, 0x5f, 0x8e, 0xdc, 0xfe, 0xa0, 0x7f, 0x34, 0xec, 0x3f, 0x6b, 0x55, - 0x9c, 0x4f, 0xa1, 0x99, 0xc6, 0x8c, 0xea, 0x60, 0x1e, 0x0d, 0x8f, 0xc5, 0x95, 0x67, 0xfd, 0xe1, - 0x71, 0xcb, 0x70, 0xfe, 0x32, 0x60, 0x57, 0x2f, 0x11, 0x5d, 0x90, 0x90, 0xe2, 0xa4, 0x46, 0x63, - 0x12, 0x87, 0x69, 0x8d, 0xf8, 0x06, 0x21, 0xa8, 0x86, 0xf8, 0xbd, 0xaa, 0x10, 0x5f, 0x27, 0x9a, - 0x8c, 0x30, 0x2f, 0xe0, 0xd5, 0x31, 0x5d, 0xb1, 0x41, 0x5f, 0x41, 0x43, 0xa6, 0x4e, 0xad, 0xea, - 0x81, 0xd9, 0xd9, 0xea, 0xed, 0xe9, 0x80, 0x48, 0x8f, 0x6e, 0xaa, 0xe6, 0x9c, 0xc0, 0xfe, 0x09, - 0x56, 0x91, 0x08, 0xbc, 0x54, 0xc7, 0x24, 0x7e, 0xbd, 0x39, 0xe6, 0xc1, 0x24, 0x7e, 0xbd, 0x39, - 0x46, 0x16, 0xd4, 0x65, 0xbb, 0xf1, 0x70, 0x36, 0x5d, 0xb5, 0x75, 0x18, 0x58, 0x57, 0x0d, 0xc9, - 0xbc, 0xf2, 0x2c, 0x7d, 0x01, 0xd5, 0xa4, 0xd9, 0xb9, 0x99, 0xad, 0x1e, 0xd2, 0xe3, 0x7c, 0x1e, - 0x4e, 0x89, 0xcb, 0xe5, 0x7a, 0xa9, 0xcc, 0x6c, 0xa9, 0x4e, 0x57, 0xbd, 0x1e, 0x93, 0x90, 0xe1, - 0x90, 0xad, 0x17, 0xff, 0x00, 0xee, 0xe6, 0x58, 0x92, 0x09, 0x1c, 0x42, 0x5d, 0x86, 0xc6, 0xad, - 0x15, 0xe2, 0xaa, 0xb4, 0x9c, 0x3e, 0xec, 0x2d, 0xad, 0x0d, 0xc8, 0x6c, 0x4d, 0x50, 0xbf, 0x83, - 0x76, 0xd6, 0x8c, 0x8c, 0xe8, 0x1e, 0x98, 0x01, 0x99, 0xc9, 0x68, 0x6e, 0xeb, 0xd1, 0x0c, 0xc8, - 0xcc, 0x4d, 0xa4, 0xce, 0xbf, 0x15, 0xd8, 0x7d, 0xb5, 0x98, 0x78, 0x0c, 0xab, 0x00, 0xaf, 0x89, - 0xe2, 0x3e, 0x6c, 0x72, 0x4a, 0x93, 0x15, 0x91, 0x36, 0x05, 0xef, 0x1d, 0x27, 0xbf, 0xae, 0x90, - 0xa3, 0x87, 0x50, 0xbb, 0xf0, 0x82, 0x18, 0x53, 0x5e, 0x8e, 0xb4, 0x76, 0x52, 0x93, 0xf3, 0xa1, - 0x2b, 0x35, 0xd0, 0x3e, 0xd4, 0x27, 0xd1, 0xe5, 0x28, 0x8a, 0x43, 0x4e, 0x04, 0x0d, 0xb7, 0x36, - 0x89, 0x2e, 0xdd, 0x38, 0x44, 0xf7, 0xe0, 0xd6, 0xc4, 0xa7, 0xde, 0x79, 0x80, 0x47, 0x6f, 0x08, - 0x79, 0x4b, 0x39, 0x17, 0x34, 0xdc, 0x6d, 0x79, 0x78, 0x9a, 0x9c, 0x21, 0x3b, 0xe9, 0xe7, 0x71, - 0x84, 0x3d, 0x86, 0xad, 0x1a, 0x97, 0xa7, 0xfb, 0x04, 0x34, 0xe6, 0xcf, 0x31, 0x89, 0x19, 0xff, - 0x03, 0x36, 0x5d, 0xb5, 0x45, 0x9f, 0xc1, 0x76, 0x84, 0x29, 0x66, 0x23, 0x19, 0x65, 0x83, 0xdf, - 0xdc, 0xe2, 0x67, 0xaf, 0x45, 0x58, 0x08, 0xaa, 0x7f, 0x78, 0x3e, 0xb3, 0x9a, 0x5c, 0xc4, 0xd7, - 0xe2, 0x5a, 0x4c, 0xb1, 0xba, 0x06, 0xea, 0x5a, 0x4c, 0xb1, 0xb8, 0xe6, 0x9c, 0xc2, 0x5e, 0x06, - 0xce, 0x75, 0xfb, 0xe3, 0x83, 0x01, 0x6d, 0x97, 0x04, 0xc1, 0xb9, 0x37, 0x7e, 0x5b, 0xa2, 0x36, - 0x2b, 0x30, 0x56, 0xae, 0x87, 0xd1, 0xcc, 0x81, 0x71, 0xa5, 0xbf, 0xaa, 0x5a, 0x7f, 0x69, 0x00, - 0x6f, 0x16, 0x03, 0x5c, 0xd3, 0x01, 0x56, 0xe8, 0xd5, 0x97, 0xe8, 0x39, 0x3f, 0xc0, 0xfe, 0x95, - 0x7c, 0xd6, 0x05, 0xe7, 0xef, 0x0a, 0xec, 0x3d, 0x0f, 0x29, 0xf3, 0x82, 0x20, 0x83, 0x4d, 0xda, - 0xa3, 0x46, 0xe9, 0x1e, 0xad, 0xfc, 0x9f, 0x1e, 0x35, 0x35, 0x70, 0x55, 0x25, 0xaa, 0x2b, 0x95, - 0x28, 0xd5, 0xb7, 0x1a, 0x67, 0xd5, 0x32, 0x9c, 0x85, 0x3e, 0x01, 0x10, 0x8d, 0xc6, 0x8d, 0x0b, - 0x10, 0x9b, 0xfc, 0xe4, 0x4c, 0xb2, 0x81, 0xc2, 0xbd, 0x91, 0x8f, 0xfb, 0x4a, 0xd7, 0x3a, 0xcf, - 0xa1, 0x9d, 0x85, 0x6a, 0x5d, 0xd8, 0xff, 0x34, 0x60, 0xff, 0x55, 0xe8, 0xe7, 0x02, 0x9f, 0xd7, - 0x94, 0x57, 0xa0, 0xa8, 0xe4, 0x40, 0xb1, 0x0b, 0x9b, 0x8b, 0x38, 0x9a, 0x61, 0x09, 0xad, 0xd8, - 0xac, 0xe6, 0x58, 0xd5, 0x72, 0x74, 0x46, 0x60, 0x5d, 0x8d, 0x61, 0xcd, 0x8c, 0x92, 0xa8, 0xd3, - 0x37, 0xa6, 0x29, 0xde, 0x13, 0xe7, 0x0e, 0xdc, 0x3e, 0xc1, 0xec, 0xb5, 0xf8, 0x03, 0x90, 0xe9, - 0x39, 0x7d, 0x40, 0xab, 0x87, 0x4b, 0x7f, 0xf2, 0x48, 0xf7, 0xa7, 0x06, 0x2e, 0xa5, 0x9f, 0xd2, - 0xf5, 0x37, 0xdc, 0xf6, 0xa9, 0x4f, 0x19, 0x89, 0x2e, 0xaf, 0x83, 0xae, 0x05, 0xe6, 0xdc, 0x7b, - 0x2f, 0xd9, 0x3e, 0x59, 0x3a, 0x27, 0x3c, 0x82, 0xf4, 0xaa, 0x8c, 0x60, 0xf5, 0x41, 0x37, 0xca, - 0x3d, 0xe8, 0xbf, 0x02, 0x7a, 0x89, 0xd3, 0xd9, 0xe2, 0x86, 0x67, 0x47, 0x15, 0xa1, 0xa2, 0x37, - 0x9a, 0x05, 0xf5, 0x71, 0x80, 0xbd, 0x30, 0x5e, 0xc8, 0xb2, 0xa9, 0xad, 0x73, 0x1f, 0xee, 0x68, - 0xd6, 0x65, 0x9c, 0x49, 0x3e, 0x74, 0x26, 0xad, 0x27, 0xcb, 0xde, 0x87, 0x26, 0xec, 0xa8, 0x61, - 0x40, 0x0c, 0x76, 0xc8, 0x87, 0xed, 0xd5, 0xa9, 0x07, 0x3d, 0x28, 0x9e, 0xfb, 0x32, 0xc3, 0xab, - 0xfd, 0xb0, 0x8c, 0xaa, 0x88, 0xc5, 0xd9, 0x78, 0x62, 0x20, 0x0a, 0xad, 0xec, 0x30, 0x82, 0x1e, - 0xe7, 0xdb, 0x28, 0x98, 0x7e, 0xec, 0x6e, 0x59, 0x75, 0xe5, 0x16, 0x5d, 0xf0, 0xea, 0xeb, 0x13, - 0x04, 0xba, 0xd1, 0x8c, 0x3e, 0xb4, 0xd8, 0x87, 0xa5, 0xf5, 0x53, 0xbf, 0xef, 0x60, 0x47, 0x1f, - 0x12, 0xd0, 0xa3, 0x9b, 0x8c, 0xac, 0x4c, 0x24, 0xf6, 0x97, 0xe5, 0x94, 0x95, 0xbb, 0x8e, 0xf1, - 0xc4, 0x40, 0xbf, 0xc3, 0x2d, 0xed, 0x21, 0x44, 0x05, 0x05, 0xca, 0x1b, 0x3e, 0xec, 0x47, 0xa5, - 0x74, 0xd3, 0xf4, 0xe6, 0xb0, 0xa3, 0x33, 0x5c, 0x51, 0x7a, 0xb9, 0x4f, 0x46, 0x51, 0x7a, 0xf9, - 0xa4, 0xe9, 0x6c, 0x24, 0xad, 0x93, 0x25, 0xa0, 0xa2, 0xd6, 0x29, 0x20, 0xcb, 0xa2, 0xd6, 0x29, - 0xe2, 0x35, 0x67, 0x03, 0x79, 0x00, 0x4b, 0xfe, 0x41, 0xf7, 0x0b, 0x2b, 0xa2, 0xd3, 0x96, 0xdd, - 0xb9, 0x59, 0x31, 0x75, 0xb1, 0x80, 0x8f, 0x32, 0x0f, 0x34, 0x2a, 0x80, 0x26, 0x7f, 0x2e, 0xb1, - 0x1f, 0x97, 0xd4, 0xce, 0x24, 0x25, 0x29, 0xed, 0x9a, 0xa4, 0x74, 0xbe, 0xbc, 0x26, 0xa9, 0x0c, - 0x3b, 0x3a, 0x1b, 0xc8, 0x87, 0x1d, 0x37, 0x0e, 0xa5, 0xeb, 0x84, 0x98, 0x50, 0xc1, 0xed, 0xab, - 0x94, 0x68, 0x3f, 0x28, 0xa1, 0xb9, 0xa4, 0x94, 0xa7, 0xf0, 0x4b, 0x43, 0xa9, 0x9e, 0xd7, 0xf8, - 0xbf, 0xda, 0x5f, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0x78, 0x8f, 0xed, 0x5d, 0x53, 0x10, 0x00, - 0x00, + // 1257 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0xdb, 0x6e, 0xdb, 0x46, + 0x10, 0x35, 0x45, 0x59, 0x97, 0xb1, 0xe3, 0x3a, 0x1b, 0x5f, 0x18, 0xa2, 0x29, 0x5c, 0x06, 0x6d, + 0x94, 0xa4, 0x91, 0x53, 0xf7, 0xa9, 0x40, 0x5b, 0xc0, 0x71, 0x04, 0x3b, 0xad, 0xea, 0x00, 0x54, + 0x92, 0x02, 0x41, 0x51, 0x81, 0x96, 0x56, 0x32, 0x1b, 0x8a, 0xab, 0x70, 0x97, 0x6e, 0xfc, 0xda, + 0xb7, 0x7e, 0x4a, 0xff, 0xa2, 0x3f, 0xd0, 0x7c, 0x53, 0xc1, 0xbd, 0x50, 0x5c, 0x8a, 0xb4, 0x59, + 0xbf, 0x88, 0xdc, 0x9d, 0xd9, 0x33, 0x33, 0x67, 0x86, 0xb3, 0x23, 0xb0, 0xcf, 0xbd, 0xb9, 0xbf, + 0x4f, 0x71, 0x74, 0xe1, 0x8f, 0x30, 0xdd, 0x67, 0x7e, 0x10, 0xe0, 0xa8, 0x3b, 0x8f, 0x08, 0x23, + 0x68, 0x2b, 0x91, 0x75, 0x95, 0xac, 0x2b, 0x64, 0xf6, 0x0e, 0x3f, 0x31, 0x3a, 0xf7, 0x22, 0x26, + 0x7e, 0x85, 0xb6, 0xbd, 0x9b, 0xdd, 0x27, 0xe1, 0xc4, 0x9f, 0x4a, 0x81, 0x30, 0x11, 0xe1, 0x00, + 0x7b, 0x14, 0xab, 0xa7, 0x94, 0xed, 0x68, 0xb2, 0x80, 0x4c, 0x35, 0x30, 0xb5, 0xef, 0x87, 0x13, + 0x22, 0x05, 0x77, 0x35, 0x01, 0x65, 0x1e, 0x8b, 0xa9, 0x66, 0xe7, 0x02, 0x47, 0xd4, 0x27, 0xa1, + 0x7a, 0x0a, 0x99, 0xf3, 0x4f, 0x0d, 0xee, 0xf4, 0x7d, 0xca, 0x5c, 0x71, 0x90, 0xba, 0xf8, 0x7d, + 0x8c, 0x29, 0x43, 0x5b, 0xb0, 0x1a, 0xf8, 0x33, 0x9f, 0x59, 0xc6, 0x9e, 0xd1, 0x31, 0x5d, 0xb1, + 0x40, 0x3b, 0xd0, 0x20, 0x93, 0x09, 0xc5, 0xcc, 0xaa, 0xed, 0x19, 0x9d, 0xb6, 0x2b, 0x57, 0xe8, + 0x07, 0x68, 0x52, 0x12, 0xb1, 0xe1, 0xd9, 0xa5, 0x65, 0xee, 0x19, 0x9d, 0x8d, 0x83, 0x2f, 0xba, + 0x45, 0x14, 0x75, 0x13, 0x4b, 0x03, 0x12, 0xb1, 0x6e, 0xf2, 0xf3, 0xec, 0xd2, 0x6d, 0x50, 0xfe, + 0x4c, 0x70, 0x27, 0x7e, 0xc0, 0x70, 0x64, 0xd5, 0x05, 0xae, 0x58, 0xa1, 0x63, 0x00, 0x8e, 0x4b, + 0xa2, 0x31, 0x8e, 0xac, 0x55, 0x0e, 0xdd, 0xa9, 0x00, 0xfd, 0x32, 0xd1, 0x77, 0xdb, 0x54, 0xbd, + 0xa2, 0xef, 0x60, 0x5d, 0x50, 0x32, 0x1c, 0x91, 0x31, 0xa6, 0x56, 0x63, 0xcf, 0xec, 0x6c, 0x1c, + 0xdc, 0x15, 0x50, 0x8a, 0xf9, 0x81, 0x20, 0xed, 0x88, 0x8c, 0xb1, 0xbb, 0x26, 0xd4, 0x93, 0x77, + 0x8a, 0x3e, 0x85, 0x76, 0xe8, 0xcd, 0x30, 0x9d, 0x7b, 0x23, 0x6c, 0x35, 0xb9, 0x87, 0x8b, 0x0d, + 0xe7, 0x37, 0x68, 0x29, 0xe3, 0xce, 0x01, 0x34, 0x44, 0x68, 0x68, 0x0d, 0x9a, 0xaf, 0x4f, 0x7f, + 0x3a, 0x7d, 0xf9, 0xcb, 0xe9, 0xe6, 0x0a, 0x6a, 0x41, 0xfd, 0xf4, 0xf0, 0xe7, 0xde, 0xa6, 0x81, + 0x6e, 0xc3, 0xad, 0xfe, 0xe1, 0xe0, 0xd5, 0xd0, 0xed, 0xf5, 0x7b, 0x87, 0x83, 0xde, 0xf3, 0xcd, + 0x9a, 0xf3, 0x19, 0xb4, 0x53, 0x9f, 0x51, 0x13, 0xcc, 0xc3, 0xc1, 0x91, 0x38, 0xf2, 0xbc, 0x37, + 0x38, 0xda, 0x34, 0x9c, 0xbf, 0x0c, 0xd8, 0xd2, 0x53, 0x44, 0xe7, 0x24, 0xa4, 0x38, 0xc9, 0xd1, + 0x88, 0xc4, 0x61, 0x9a, 0x23, 0xbe, 0x40, 0x08, 0xea, 0x21, 0xfe, 0xa0, 0x32, 0xc4, 0xdf, 0x13, + 0x4d, 0x46, 0x98, 0x17, 0xf0, 0xec, 0x98, 0xae, 0x58, 0xa0, 0xaf, 0xa1, 0x25, 0x43, 0xa7, 0x56, + 0x7d, 0xcf, 0xec, 0xac, 0x1d, 0x6c, 0xeb, 0x84, 0x48, 0x8b, 0x6e, 0xaa, 0xe6, 0x1c, 0xc3, 0xee, + 0x31, 0x56, 0x9e, 0x08, 0xbe, 0x54, 0xc5, 0x24, 0x76, 0xbd, 0x19, 0xe6, 0xce, 0x24, 0x76, 0xbd, + 0x19, 0x46, 0x16, 0x34, 0x65, 0xb9, 0x71, 0x77, 0x56, 0x5d, 0xb5, 0x74, 0x18, 0x58, 0xcb, 0x40, + 0x32, 0xae, 0x22, 0xa4, 0x2f, 0xa1, 0x9e, 0x14, 0x3b, 0x87, 0x59, 0x3b, 0x40, 0xba, 0x9f, 0x2f, + 0xc2, 0x09, 0x71, 0xb9, 0x5c, 0x4f, 0x95, 0x99, 0x4f, 0xd5, 0x49, 0xd6, 0xea, 0x11, 0x09, 0x19, + 0x0e, 0xd9, 0xcd, 0xfc, 0xef, 0xc3, 0xdd, 0x02, 0x24, 0x19, 0xc0, 0x3e, 0x34, 0xa5, 0x6b, 0x1c, + 0xad, 0x94, 0x57, 0xa5, 0xe5, 0xbc, 0x85, 0xed, 0x05, 0x5a, 0x9f, 0x4c, 0x53, 0x52, 0x0f, 0x61, + 0x9d, 0xc6, 0x67, 0x74, 0x14, 0xf9, 0x73, 0x96, 0x78, 0x21, 0xe0, 0xee, 0xe9, 0x70, 0x7d, 0x32, + 0x1d, 0x64, 0x94, 0x5c, 0xed, 0x88, 0xf3, 0x3d, 0xec, 0xe4, 0xb1, 0xa5, 0x9b, 0xf7, 0xc1, 0x0c, + 0xc8, 0x54, 0x62, 0xde, 0x5e, 0xc2, 0x74, 0x13, 0xa9, 0xf3, 0x6f, 0x0d, 0xb6, 0x5e, 0xcf, 0xc7, + 0x1e, 0xc3, 0xca, 0xeb, 0x2b, 0xf8, 0x7a, 0x00, 0xab, 0xbc, 0xcf, 0xc9, 0x34, 0x49, 0x4c, 0xd1, + 0x0c, 0x8f, 0x92, 0x5f, 0x57, 0xc8, 0xd1, 0x23, 0x68, 0x5c, 0x78, 0x41, 0x8c, 0x29, 0xcf, 0x51, + 0x9a, 0x50, 0xa9, 0xc9, 0x9b, 0xa4, 0x2b, 0x35, 0xd0, 0x2e, 0x34, 0xc7, 0xd1, 0xe5, 0x30, 0x8a, + 0x43, 0xde, 0x1d, 0x5a, 0x6e, 0x63, 0x1c, 0x5d, 0xba, 0x71, 0x88, 0xee, 0xc3, 0xad, 0xb1, 0x4f, + 0xbd, 0xb3, 0x00, 0x0f, 0xcf, 0x09, 0x79, 0x47, 0x79, 0x83, 0x68, 0xb9, 0xeb, 0x72, 0xf3, 0x24, + 0xd9, 0x43, 0x76, 0x52, 0xe4, 0xa3, 0x08, 0x7b, 0x0c, 0x5b, 0x0d, 0x2e, 0x4f, 0xd7, 0x49, 0x7a, + 0x99, 0x3f, 0xc3, 0x24, 0x66, 0xfc, 0xab, 0x36, 0x5d, 0xb5, 0x44, 0x9f, 0xc3, 0x7a, 0x84, 0x29, + 0x66, 0x43, 0xe9, 0x65, 0x8b, 0x9f, 0x5c, 0xe3, 0x7b, 0x6f, 0x84, 0x5b, 0x08, 0xea, 0x7f, 0x78, + 0x3e, 0xb3, 0xda, 0x5c, 0xc4, 0xdf, 0xc5, 0xb1, 0x98, 0x62, 0x75, 0x0c, 0xd4, 0xb1, 0x98, 0x62, + 0x71, 0xcc, 0x39, 0x81, 0xed, 0x1c, 0x9d, 0x37, 0x2d, 0x9a, 0x8f, 0x06, 0xec, 0xb8, 0x24, 0x08, + 0xce, 0xbc, 0xd1, 0xbb, 0x0a, 0xb9, 0xc9, 0xd0, 0x58, 0xbb, 0x9a, 0x46, 0xb3, 0x80, 0xc6, 0xcc, + 0x97, 0x50, 0xd7, 0xbe, 0x04, 0x8d, 0xe0, 0xd5, 0x72, 0x82, 0x1b, 0x3a, 0xc1, 0x8a, 0xbd, 0xe6, + 0x82, 0x3d, 0xe7, 0x47, 0xd8, 0x5d, 0x8a, 0xe7, 0xa6, 0xe4, 0xfc, 0x5d, 0x83, 0xed, 0x17, 0x21, + 0x65, 0x5e, 0x10, 0xe4, 0xb8, 0x49, 0x6b, 0xd4, 0xa8, 0x5c, 0xa3, 0xb5, 0xff, 0x53, 0xa3, 0xa6, + 0x46, 0xae, 0xca, 0x44, 0x3d, 0x93, 0x89, 0x4a, 0x75, 0xab, 0x35, 0xb2, 0x46, 0xae, 0x91, 0xa1, + 0x7b, 0x00, 0xa2, 0xd0, 0x38, 0xb8, 0x20, 0xb1, 0xcd, 0x77, 0x4e, 0x65, 0xdf, 0x52, 0xbc, 0xb7, + 0x8a, 0x79, 0xcf, 0x54, 0xad, 0xf3, 0x02, 0x76, 0xf2, 0x54, 0xdd, 0x94, 0xf6, 0x3f, 0x0d, 0xd8, + 0x7d, 0x1d, 0xfa, 0x85, 0xc4, 0x17, 0x15, 0xe5, 0x12, 0x15, 0xb5, 0x02, 0x2a, 0xb6, 0x60, 0x75, + 0x1e, 0x47, 0x53, 0x2c, 0xa9, 0x15, 0x8b, 0x6c, 0x8c, 0x75, 0x2d, 0x46, 0x67, 0x08, 0xd6, 0xb2, + 0x0f, 0x37, 0x8c, 0x28, 0xf1, 0x3a, 0xbd, 0x78, 0xda, 0xe2, 0x92, 0x71, 0xee, 0xc0, 0xed, 0x63, + 0xcc, 0xde, 0x88, 0x0f, 0x40, 0x86, 0xe7, 0xf4, 0x00, 0x65, 0x37, 0x17, 0xf6, 0xe4, 0x96, 0x6e, + 0x4f, 0x4d, 0x61, 0x4a, 0x3f, 0xbd, 0x58, 0xbe, 0xe5, 0xd8, 0x27, 0x3e, 0x65, 0x24, 0xba, 0xbc, + 0x8a, 0xba, 0x4d, 0x30, 0x67, 0xde, 0x07, 0x79, 0x2f, 0x25, 0xaf, 0xce, 0x31, 0xf7, 0x20, 0x3d, + 0x2a, 0x3d, 0xc8, 0xde, 0xf2, 0x46, 0xb5, 0x5b, 0xfe, 0x57, 0x40, 0xaf, 0x70, 0x3a, 0x70, 0x5c, + 0x73, 0x41, 0xaa, 0x24, 0xd4, 0xf4, 0x42, 0xb3, 0xa0, 0x39, 0x0a, 0xb0, 0x17, 0xc6, 0x73, 0x99, + 0x36, 0xb5, 0x74, 0x1e, 0xc0, 0x1d, 0x0d, 0x5d, 0xfa, 0x99, 0xc4, 0x43, 0xa7, 0x12, 0x3d, 0x79, + 0x3d, 0xf8, 0xd8, 0x86, 0x0d, 0x35, 0x21, 0x88, 0x69, 0x0f, 0xf9, 0xb0, 0x9e, 0x1d, 0x85, 0xd0, + 0xc3, 0xf2, 0x61, 0x30, 0x37, 0xd1, 0xda, 0x8f, 0xaa, 0xa8, 0x0a, 0x5f, 0x9c, 0x95, 0xa7, 0x06, + 0xa2, 0xb0, 0x99, 0x9f, 0x50, 0xd0, 0x93, 0x62, 0x8c, 0x92, 0x91, 0xc8, 0xee, 0x56, 0x55, 0x57, + 0x66, 0xd1, 0x05, 0xcf, 0xbe, 0x3e, 0x56, 0xa0, 0x6b, 0x61, 0xf4, 0x49, 0xc6, 0xde, 0xaf, 0xac, + 0x9f, 0xda, 0x7d, 0x0f, 0x1b, 0xfa, 0x90, 0x80, 0x1e, 0x5f, 0x07, 0x92, 0x19, 0x53, 0xec, 0xaf, + 0xaa, 0x29, 0x2b, 0x73, 0x1d, 0xe3, 0xa9, 0x81, 0x7e, 0x87, 0x5b, 0xda, 0x45, 0x88, 0x4a, 0x12, + 0x54, 0x34, 0x7c, 0xd8, 0x8f, 0x2b, 0xe9, 0xa6, 0xe1, 0xcd, 0x60, 0x43, 0xef, 0x70, 0x65, 0xe1, + 0x15, 0x5e, 0x19, 0x65, 0xe1, 0x15, 0x37, 0x4d, 0x67, 0x25, 0x29, 0x9d, 0x7c, 0x03, 0x2a, 0x2b, + 0x9d, 0x92, 0x66, 0x59, 0x56, 0x3a, 0x65, 0x7d, 0xcd, 0x59, 0x41, 0x1e, 0xc0, 0xa2, 0xff, 0xa0, + 0x07, 0xa5, 0x19, 0xd1, 0xdb, 0x96, 0xdd, 0xb9, 0x5e, 0x31, 0x35, 0x31, 0x87, 0x4f, 0x72, 0x17, + 0x34, 0x2a, 0xa1, 0xa6, 0x78, 0x2e, 0xb1, 0x9f, 0x54, 0xd4, 0xce, 0x05, 0x25, 0x5b, 0xda, 0x15, + 0x41, 0xe9, 0xfd, 0xf2, 0x8a, 0xa0, 0x72, 0xdd, 0xd1, 0x59, 0x41, 0x3e, 0x6c, 0xb8, 0x71, 0x28, + 0x4d, 0x27, 0x8d, 0x09, 0x95, 0x9c, 0x5e, 0x6e, 0x89, 0xf6, 0xc3, 0x0a, 0x9a, 0x8b, 0x96, 0xf2, + 0x0c, 0xde, 0xb6, 0x94, 0xea, 0x59, 0x83, 0xff, 0xff, 0xfe, 0xe6, 0xbf, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xd2, 0xe7, 0x93, 0xb8, 0x68, 0x10, 0x00, 0x00, } diff --git a/pkg/tiller/logdistributor/log_streamer.go b/pkg/tiller/logdistributor/log_streamer.go index a5d9f5c88..da0091ffd 100644 --- a/pkg/tiller/logdistributor/log_streamer.go +++ b/pkg/tiller/logdistributor/log_streamer.go @@ -7,13 +7,13 @@ import ( type Logsub struct { C chan *rspb.Log release string - sources []rspb.Log_Source - level rspb.Log_Level + sources []rspb.LogSource + level rspb.LogLevel } type release struct { name string - sourceMappings map[rspb.Log_Source]map[*Logsub]bool + sourceMappings map[rspb.LogSource]map[*Logsub]bool } type Pubsub struct { @@ -27,18 +27,18 @@ func New() *Pubsub { func newRelease(name string) *release { rs := &release{name: name} - rs.sourceMappings = make(map[rspb.Log_Source]map[*Logsub]bool, len(rspb.Log_Source_name)) + rs.sourceMappings = make(map[rspb.LogSource]map[*Logsub]bool, len(rspb.LogSource_name)) return rs } func (rs *release) subscribe(sub *Logsub) { for _, source := range sub.sources { - log_source := rspb.Log_Source(source) - if _, ok := rs.sourceMappings[log_source]; !ok { + logSource := rspb.LogSource(source) + if _, ok := rs.sourceMappings[logSource]; !ok { subs := make(map[*Logsub]bool, 1) - rs.sourceMappings[log_source] = subs + rs.sourceMappings[logSource] = subs } - rs.sourceMappings[log_source][sub] = true + rs.sourceMappings[logSource][sub] = true } } @@ -51,7 +51,7 @@ func (ps *Pubsub) subscribe(sub *Logsub) { ps.releases[sub.release].subscribe(sub) } -func (ps *Pubsub) Subscribe(release string, level rspb.Log_Level, sources ...rspb.Log_Source) *Logsub { +func (ps *Pubsub) Subscribe(release string, level rspb.LogLevel, sources ...rspb.LogSource) *Logsub { ch := make(chan *rspb.Log) ls := &Logsub{C: ch, release: release, level: level, sources: sources} ps.subscribe(ls) @@ -72,7 +72,7 @@ func (ps *Pubsub) Unsubscribe(sub *Logsub) { } } -func (ps *Pubsub) PubLog(rls string, source rspb.Log_Source, level rspb.Log_Level, message string) { +func (ps *Pubsub) PubLog(rls string, source rspb.LogSource, level rspb.LogLevel, message string) { log := &rspb.Log{Release: rls, Source: source, Level: level, Log: message} if rls, ok := ps.releases[log.Release]; ok { if subs, ok := rls.sourceMappings[log.Source]; ok { diff --git a/pkg/tiller/release_server.go b/pkg/tiller/release_server.go index 46f0bf480..968bf1b43 100644 --- a/pkg/tiller/release_server.go +++ b/pkg/tiller/release_server.go @@ -43,7 +43,6 @@ import ( "k8s.io/helm/pkg/timeconv" "k8s.io/helm/pkg/version" "k8s.io/helm/pkg/tiller/logdistributor" - "time" ) // releaseNameMaxLen is the maximum length of a release name. @@ -255,6 +254,8 @@ func (s *ReleaseServer) GetReleaseStatus(c ctx.Context, req *services.GetRelease Info: rel.Info, } + s.logs.PubLog(req.Name, release.LogSource_SYSTEM, release.LogLevel_INFO, "Got release status for the release") + // Ok, we got the status of the release as we had jotted down, now we need to match the // manifest we stashed away with reality from the cluster. kubeCli := s.env.KubeClient @@ -286,29 +287,29 @@ func (s *ReleaseServer) GetReleaseContent(c ctx.Context, req *services.GetReleas } func (s *ReleaseServer) GetReleaseLogs(svc services.ReleaseService_GetReleaseLogsServer) error { - t := time.NewTicker(time.Second) done := make(chan struct{}) - go func() { - for { - select { - case <-t.C: - fmt.Println("Sending a log") - svc.Send(&services.GetReleaseLogsResponse{Log: &release.Log{Log: "Test log!"}}) - case <-done: - return - } - } - }() for { rq, err := svc.Recv() - fmt.Println("Req: ", rq, " Error: ", err) if err != nil { + fmt.Println("Errored: ", err, ", Closing stream") done <- struct{}{} break } - s.logs.Subscribe(rq.Name, ) - rq.Name + + sub := s.logs.Subscribe(rq.Subscription.Release, rq.Subscription.Level, rq.Subscription.Sources...) + go func() { + for { + select { + case l := <-sub.C: + fmt.Println("Sending a log") + svc.Send(&services.GetReleaseLogsResponse{Log: l}) + case <-done: + s.logs.Unsubscribe(sub) + return + } + } + }() } return nil