cleaned up api a bit

pull/2342/head
John Welsh 9 years ago
parent f70b1db6f9
commit 8602ba648f

@ -21,9 +21,8 @@ import "google/protobuf/timestamp.proto";
option go_package = "release";
message Log {
// Allows filtering by log event source
enum Source {
enum LogSource {
HOOK = 0;
TEST = 1;
POD = 2;
@ -31,7 +30,7 @@ message Log {
}
// Syslog log levels
enum Level {
enum LogLevel {
EMERG = 0;
ALERT = 1;
CRIT = 2;
@ -42,9 +41,16 @@ message Log {
DEBUG = 7;
}
Source source = 1;
Level level = 2;
string release = 3;
message LogSubscription {
string release = 1;
LogLevel level = 2;
repeated LogSource sources = 3;
}
message Log {
string release = 1;
LogLevel level = 2;
LogSource source = 3;
string log = 4;
google.protobuf.Timestamp timestamp = 5;
}

@ -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 {

@ -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,

@ -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)
}

@ -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)
}

@ -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)

@ -17,6 +17,7 @@ It is generated from these files:
It has these top-level messages:
Hook
Info
LogSubscription
Log
Release
Status

@ -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,
}

@ -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,
}

@ -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 {

@ -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{})
for {
rq, err := svc.Recv()
if err != nil {
fmt.Println("Errored: ", err, ", Closing stream")
done <- struct{}{}
break
}
sub := s.logs.Subscribe(rq.Subscription.Release, rq.Subscription.Level, rq.Subscription.Sources...)
go func() {
for {
select {
case <-t.C:
case l := <-sub.C:
fmt.Println("Sending a log")
svc.Send(&services.GetReleaseLogsResponse{Log: &release.Log{Log: "Test log!"}})
svc.Send(&services.GetReleaseLogsResponse{Log: l})
case <-done:
s.logs.Unsubscribe(sub)
return
}
}
}()
for {
rq, err := svc.Recv()
fmt.Println("Req: ", rq, " Error: ", err)
if err != nil {
done <- struct{}{}
break
}
s.logs.Subscribe(rq.Name, )
rq.Name
}
return nil

Loading…
Cancel
Save