get component pod nums

This commit is contained in:
GLYASAI 2021-05-26 10:00:36 +08:00
parent 0ecaeb324b
commit d49693bf19
10 changed files with 346 additions and 223 deletions

View File

@ -142,6 +142,7 @@ func (v2 *V2) tenantNameRouter() chi.Router {
r.Mount("/apps/{app_id}", v2.applicationRouter())
//get some service pod info
r.Get("/pods", controller.Pods)
r.Get("/pod_nums", controller.PodNums)
//app backup
r.Get("/groupapp/backups", controller.Backups)
r.Post("/groupapp/backups", controller.NewBackups)

View File

@ -85,6 +85,17 @@ func Pods(w http.ResponseWriter, r *http.Request) {
httputil.ReturnSuccess(r, w, allpods)
}
// PodNums reutrns the number of pods for components.
func PodNums(w http.ResponseWriter, r *http.Request) {
componentIDs := strings.Split(r.FormValue("service_ids"), ",")
podNums, err := handler.GetServiceManager().GetComponentPodNums(r.Context(), componentIDs)
if err != nil {
httputil.ReturnBcodeError(r, w, err)
return
}
httputil.ReturnSuccess(r, w, podNums)
}
// PodDetail -
func (p *PodController) PodDetail(w http.ResponseWriter, r *http.Request) {
podName := chi.URLParam(r, "pod_name")

View File

@ -19,8 +19,8 @@
package handler
import (
"context"
"encoding/json"
"errors"
"fmt"
"os"
"strconv"
@ -40,6 +40,7 @@ import (
"github.com/goodrain/rainbond/worker/server"
"github.com/goodrain/rainbond/worker/server/pb"
"github.com/jinzhu/gorm"
"github.com/pkg/errors"
"github.com/pquerna/ffjson/ffjson"
"github.com/sirupsen/logrus"
"github.com/twinj/uuid"
@ -416,7 +417,7 @@ func (s *ServiceAction) ServiceHorizontal(hs *model.HorizontalScalingTaskBody) e
logrus.Errorf("get service pods error: %v", err)
return fmt.Errorf("horizontal service faliure:%s", err.Error())
}
if int32(len(pods.NewPods)) == hs.Replicas{
if int32(len(pods.NewPods)) == hs.Replicas {
return bcode.ErrHorizontalDueToNoChange
}
@ -1951,6 +1952,20 @@ func (s *ServiceAction) GetMultiServicePods(serviceIDs []string) (*K8sPodInfos,
return &re, nil
}
//GetMultiServicePods get pods
func (s *ServiceAction) GetComponentPodNums(ctx context.Context, componentIDs []string) (map[string]int32, error) {
if logrus.IsLevelEnabled(logrus.DebugLevel) {
defer core_util.Elapsed(fmt.Sprintf("[AppRuntimeSyncClient] [GetComponentPodNums] component nums: %d", len(componentIDs)))()
}
podNums, err := s.statusCli.GetComponentPodNums(ctx, componentIDs)
if err != nil {
return nil, errors.Wrap(err, "get component nums")
}
return podNums, nil
}
//GetPodContainerMemory Use Prometheus to query memory resources
func (s *ServiceAction) GetPodContainerMemory(podNames []string) (map[string]map[string]string, error) {
memoryUsageMap := make(map[string]map[string]string, 10)

View File

@ -258,6 +258,10 @@ func (b *BatchOperationHandler) Upgrade(ctx context.Context, tenant *dbmodel.Ten
}
func (b *BatchOperationHandler) checkEvents(batchOpReqs model.BatchOpRequesters) (model.BatchOpRequesters, model.BatchOpResult) {
if logrus.IsLevelEnabled(logrus.DebugLevel) {
defer util.Elapsed("[BatchOperationHandler] check events")()
}
var validReqs model.BatchOpRequesters
var batchOpResult model.BatchOpResult
for _, req := range batchOpReqs {

View File

@ -19,6 +19,8 @@
package handler
import (
"context"
api_model "github.com/goodrain/rainbond/api/model"
"github.com/goodrain/rainbond/api/util"
"github.com/goodrain/rainbond/builder/exector"
@ -65,6 +67,7 @@ type ServiceHandler interface {
CreateTenandIDAndName(eid string) (string, string, error)
GetPods(serviceID string) (*K8sPodInfos, error)
GetMultiServicePods(serviceIDs []string) (*K8sPodInfos, error)
GetComponentPodNums(ctx context.Context, componentIDs []string) (map[string]int32, error)
TransServieToDelete(tenantID, serviceID string) error
TenantServiceDeletePluginRelation(tenantID, serviceID, pluginID string) *util.APIHandleError
GetTenantServicePluginRelation(serviceID string) ([]*dbmodel.TenantServicePluginRelation, *util.APIHandleError)

View File

@ -67,6 +67,10 @@ func (o *OperationHandler) Build(batchOpReq model.ComponentOpReq) (*model.Compon
}
func (o *OperationHandler) build(batchOpReq model.ComponentOpReq) error {
if logrus.IsLevelEnabled(logrus.DebugLevel) {
util.Elapsed(fmt.Sprintf("build component(%s)", batchOpReq.GetComponentID()))()
}
service, err := db.GetManager().TenantServiceDao().GetServiceByID(batchOpReq.GetComponentID())
if err != nil {
return err
@ -281,6 +285,7 @@ func (o *OperationHandler) buildFromMarketSlug(r *model.ComponentBuildReq, servi
return o.sendBuildTopic(service.ServiceID, "build_from_market_slug", body)
}
func (o *OperationHandler) sendBuildTopic(serviceID, taskType string, body map[string]interface{}) error {
topic := gclient.BuilderTopic
if o.isWindowsService(serviceID) {
topic = gclient.WindowsBuilderTopic
@ -293,6 +298,10 @@ func (o *OperationHandler) sendBuildTopic(serviceID, taskType string, body map[s
}
func (o *OperationHandler) buildFromImage(r *model.ComponentBuildReq, service *dbmodel.TenantServices) error {
if logrus.IsLevelEnabled(logrus.DebugLevel) {
util.Elapsed(fmt.Sprintf("[buildFromImage] build component(%s)", r.GetComponentID()))()
}
if r.ImageInfo.ImageURL == "" || r.DeployVersion == "" {
return fmt.Errorf("build from image failure, args error")
}

View File

@ -20,10 +20,14 @@ package client
import (
"context"
"fmt"
"strings"
"time"
"github.com/goodrain/rainbond/util"
"github.com/goodrain/rainbond/worker/server/pb"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
)
//GetServicePods get service pods list
@ -35,11 +39,29 @@ func (a *AppRuntimeSyncClient) GetServicePods(serviceID string) (*pb.ServiceAppP
//GetMultiServicePods get multi service pods list
func (a *AppRuntimeSyncClient) GetMultiServicePods(serviceIDs []string) (*pb.MultiServiceAppPodList, error) {
if logrus.IsLevelEnabled(logrus.DebugLevel) {
defer util.Elapsed(fmt.Sprintf("[AppRuntimeSyncClient] [GetMultiServicePods] component nums: %d", len(serviceIDs)))()
}
ctx, cancel := context.WithTimeout(a.ctx, time.Second*5)
defer cancel()
return a.AppRuntimeSyncClient.GetMultiAppPods(ctx, &pb.ServicesRequest{ServiceIds: strings.Join(serviceIDs, ",")})
}
// GetComponentPodNums -
func (a *AppRuntimeSyncClient) GetComponentPodNums(ctx context.Context, componentIDs []string) (map[string]int32, error) {
if logrus.IsLevelEnabled(logrus.DebugLevel) {
defer util.Elapsed(fmt.Sprintf("[AppRuntimeSyncClient] get component pod nums: %d", len(componentIDs)))()
}
res, err := a.AppRuntimeSyncClient.GetComponentPodNums(ctx, &pb.ServicesRequest{ServiceIds: strings.Join(componentIDs, ",")})
if err != nil {
return nil, errors.Wrap(err, "get component pod nums")
}
return res.PodNums, nil
}
// GetPodDetail -
func (a *AppRuntimeSyncClient) GetPodDetail(sid, name string) (*pb.PodDetail, error) {
ctx, cancel := context.WithCancel(context.Background())

View File

@ -8,8 +8,6 @@ import (
fmt "fmt"
proto "github.com/golang/protobuf/proto"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
math "math"
)
@ -22,7 +20,7 @@ var _ = math.Inf
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
type ServiceVolumeStatus int32
@ -109,7 +107,7 @@ func (x PodStatus_Type) String() string {
}
func (PodStatus_Type) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_f94cf1a886c479d6, []int{22, 0}
return fileDescriptor_f94cf1a886c479d6, []int{23, 0}
}
type AppStatus_Status int32
@ -146,7 +144,7 @@ func (x AppStatus_Status) String() string {
}
func (AppStatus_Status) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_f94cf1a886c479d6, []int{30, 0}
return fileDescriptor_f94cf1a886c479d6, []int{31, 0}
}
type Empty struct {
@ -500,6 +498,45 @@ func (m *MultiServiceAppPodList) GetServicePods() map[string]*ServiceAppPodList
return nil
}
type ComponentPodNums struct {
PodNums map[string]int32 `protobuf:"bytes,1,rep,name=podNums,proto3" json:"podNums,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ComponentPodNums) Reset() { *m = ComponentPodNums{} }
func (m *ComponentPodNums) String() string { return proto.CompactTextString(m) }
func (*ComponentPodNums) ProtoMessage() {}
func (*ComponentPodNums) Descriptor() ([]byte, []int) {
return fileDescriptor_f94cf1a886c479d6, []int{9}
}
func (m *ComponentPodNums) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ComponentPodNums.Unmarshal(m, b)
}
func (m *ComponentPodNums) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ComponentPodNums.Marshal(b, m, deterministic)
}
func (m *ComponentPodNums) XXX_Merge(src proto.Message) {
xxx_messageInfo_ComponentPodNums.Merge(m, src)
}
func (m *ComponentPodNums) XXX_Size() int {
return xxx_messageInfo_ComponentPodNums.Size(m)
}
func (m *ComponentPodNums) XXX_DiscardUnknown() {
xxx_messageInfo_ComponentPodNums.DiscardUnknown(m)
}
var xxx_messageInfo_ComponentPodNums proto.InternalMessageInfo
func (m *ComponentPodNums) GetPodNums() map[string]int32 {
if m != nil {
return m.PodNums
}
return nil
}
type ServiceAppPod struct {
ServiceId string `protobuf:"bytes,1,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"`
DeployId string `protobuf:"bytes,2,opt,name=deploy_id,json=deployId,proto3" json:"deploy_id,omitempty"`
@ -518,7 +555,7 @@ func (m *ServiceAppPod) Reset() { *m = ServiceAppPod{} }
func (m *ServiceAppPod) String() string { return proto.CompactTextString(m) }
func (*ServiceAppPod) ProtoMessage() {}
func (*ServiceAppPod) Descriptor() ([]byte, []int) {
return fileDescriptor_f94cf1a886c479d6, []int{9}
return fileDescriptor_f94cf1a886c479d6, []int{10}
}
func (m *ServiceAppPod) XXX_Unmarshal(b []byte) error {
@ -608,7 +645,7 @@ func (m *Container) Reset() { *m = Container{} }
func (m *Container) String() string { return proto.CompactTextString(m) }
func (*Container) ProtoMessage() {}
func (*Container) Descriptor() ([]byte, []int) {
return fileDescriptor_f94cf1a886c479d6, []int{10}
return fileDescriptor_f94cf1a886c479d6, []int{11}
}
func (m *Container) XXX_Unmarshal(b []byte) error {
@ -671,7 +708,7 @@ func (m *DeployInfo) Reset() { *m = DeployInfo{} }
func (m *DeployInfo) String() string { return proto.CompactTextString(m) }
func (*DeployInfo) ProtoMessage() {}
func (*DeployInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_f94cf1a886c479d6, []int{11}
return fileDescriptor_f94cf1a886c479d6, []int{12}
}
func (m *DeployInfo) XXX_Unmarshal(b []byte) error {
@ -786,7 +823,7 @@ func (m *TenantResource) Reset() { *m = TenantResource{} }
func (m *TenantResource) String() string { return proto.CompactTextString(m) }
func (*TenantResource) ProtoMessage() {}
func (*TenantResource) Descriptor() ([]byte, []int) {
return fileDescriptor_f94cf1a886c479d6, []int{12}
return fileDescriptor_f94cf1a886c479d6, []int{13}
}
func (m *TenantResource) XXX_Unmarshal(b []byte) error {
@ -867,7 +904,7 @@ func (m *TenantResourceList) Reset() { *m = TenantResourceList{} }
func (m *TenantResourceList) String() string { return proto.CompactTextString(m) }
func (*TenantResourceList) ProtoMessage() {}
func (*TenantResourceList) Descriptor() ([]byte, []int) {
return fileDescriptor_f94cf1a886c479d6, []int{13}
return fileDescriptor_f94cf1a886c479d6, []int{14}
}
func (m *TenantResourceList) XXX_Unmarshal(b []byte) error {
@ -910,7 +947,7 @@ func (m *AddThirdPartyEndpointsReq) Reset() { *m = AddThirdPartyEndpoint
func (m *AddThirdPartyEndpointsReq) String() string { return proto.CompactTextString(m) }
func (*AddThirdPartyEndpointsReq) ProtoMessage() {}
func (*AddThirdPartyEndpointsReq) Descriptor() ([]byte, []int) {
return fileDescriptor_f94cf1a886c479d6, []int{14}
return fileDescriptor_f94cf1a886c479d6, []int{15}
}
func (m *AddThirdPartyEndpointsReq) XXX_Unmarshal(b []byte) error {
@ -981,7 +1018,7 @@ func (m *UpdThirdPartyEndpointsReq) Reset() { *m = UpdThirdPartyEndpoint
func (m *UpdThirdPartyEndpointsReq) String() string { return proto.CompactTextString(m) }
func (*UpdThirdPartyEndpointsReq) ProtoMessage() {}
func (*UpdThirdPartyEndpointsReq) Descriptor() ([]byte, []int) {
return fileDescriptor_f94cf1a886c479d6, []int{15}
return fileDescriptor_f94cf1a886c479d6, []int{16}
}
func (m *UpdThirdPartyEndpointsReq) XXX_Unmarshal(b []byte) error {
@ -1051,7 +1088,7 @@ func (m *DelThirdPartyEndpointsReq) Reset() { *m = DelThirdPartyEndpoint
func (m *DelThirdPartyEndpointsReq) String() string { return proto.CompactTextString(m) }
func (*DelThirdPartyEndpointsReq) ProtoMessage() {}
func (*DelThirdPartyEndpointsReq) Descriptor() ([]byte, []int) {
return fileDescriptor_f94cf1a886c479d6, []int{16}
return fileDescriptor_f94cf1a886c479d6, []int{17}
}
func (m *DelThirdPartyEndpointsReq) XXX_Unmarshal(b []byte) error {
@ -1116,7 +1153,7 @@ func (m *ThirdPartyEndpoint) Reset() { *m = ThirdPartyEndpoint{} }
func (m *ThirdPartyEndpoint) String() string { return proto.CompactTextString(m) }
func (*ThirdPartyEndpoint) ProtoMessage() {}
func (*ThirdPartyEndpoint) Descriptor() ([]byte, []int) {
return fileDescriptor_f94cf1a886c479d6, []int{17}
return fileDescriptor_f94cf1a886c479d6, []int{18}
}
func (m *ThirdPartyEndpoint) XXX_Unmarshal(b []byte) error {
@ -1190,7 +1227,7 @@ func (m *ThirdPartyEndpoints) Reset() { *m = ThirdPartyEndpoints{} }
func (m *ThirdPartyEndpoints) String() string { return proto.CompactTextString(m) }
func (*ThirdPartyEndpoints) ProtoMessage() {}
func (*ThirdPartyEndpoints) Descriptor() ([]byte, []int) {
return fileDescriptor_f94cf1a886c479d6, []int{18}
return fileDescriptor_f94cf1a886c479d6, []int{19}
}
func (m *ThirdPartyEndpoints) XXX_Unmarshal(b []byte) error {
@ -1229,7 +1266,7 @@ func (m *ListPodsBySIDReq) Reset() { *m = ListPodsBySIDReq{} }
func (m *ListPodsBySIDReq) String() string { return proto.CompactTextString(m) }
func (*ListPodsBySIDReq) ProtoMessage() {}
func (*ListPodsBySIDReq) Descriptor() ([]byte, []int) {
return fileDescriptor_f94cf1a886c479d6, []int{19}
return fileDescriptor_f94cf1a886c479d6, []int{20}
}
func (m *ListPodsBySIDReq) XXX_Unmarshal(b []byte) error {
@ -1269,7 +1306,7 @@ func (m *GetPodDetailReq) Reset() { *m = GetPodDetailReq{} }
func (m *GetPodDetailReq) String() string { return proto.CompactTextString(m) }
func (*GetPodDetailReq) ProtoMessage() {}
func (*GetPodDetailReq) Descriptor() ([]byte, []int) {
return fileDescriptor_f94cf1a886c479d6, []int{20}
return fileDescriptor_f94cf1a886c479d6, []int{21}
}
func (m *GetPodDetailReq) XXX_Unmarshal(b []byte) error {
@ -1318,7 +1355,7 @@ func (m *PodEvent) Reset() { *m = PodEvent{} }
func (m *PodEvent) String() string { return proto.CompactTextString(m) }
func (*PodEvent) ProtoMessage() {}
func (*PodEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_f94cf1a886c479d6, []int{21}
return fileDescriptor_f94cf1a886c479d6, []int{22}
}
func (m *PodEvent) XXX_Unmarshal(b []byte) error {
@ -1382,7 +1419,7 @@ func (m *PodStatus) Reset() { *m = PodStatus{} }
func (m *PodStatus) String() string { return proto.CompactTextString(m) }
func (*PodStatus) ProtoMessage() {}
func (*PodStatus) Descriptor() ([]byte, []int) {
return fileDescriptor_f94cf1a886c479d6, []int{22}
return fileDescriptor_f94cf1a886c479d6, []int{23}
}
func (m *PodStatus) XXX_Unmarshal(b []byte) error {
@ -1456,7 +1493,7 @@ func (m *PodContainer) Reset() { *m = PodContainer{} }
func (m *PodContainer) String() string { return proto.CompactTextString(m) }
func (*PodContainer) ProtoMessage() {}
func (*PodContainer) Descriptor() ([]byte, []int) {
return fileDescriptor_f94cf1a886c479d6, []int{23}
return fileDescriptor_f94cf1a886c479d6, []int{24}
}
func (m *PodContainer) XXX_Unmarshal(b []byte) error {
@ -1553,7 +1590,7 @@ func (m *PodDetail) Reset() { *m = PodDetail{} }
func (m *PodDetail) String() string { return proto.CompactTextString(m) }
func (*PodDetail) ProtoMessage() {}
func (*PodDetail) Descriptor() ([]byte, []int) {
return fileDescriptor_f94cf1a886c479d6, []int{24}
return fileDescriptor_f94cf1a886c479d6, []int{25}
}
func (m *PodDetail) XXX_Unmarshal(b []byte) error {
@ -1655,7 +1692,7 @@ func (m *StorageClasses) Reset() { *m = StorageClasses{} }
func (m *StorageClasses) String() string { return proto.CompactTextString(m) }
func (*StorageClasses) ProtoMessage() {}
func (*StorageClasses) Descriptor() ([]byte, []int) {
return fileDescriptor_f94cf1a886c479d6, []int{25}
return fileDescriptor_f94cf1a886c479d6, []int{26}
}
func (m *StorageClasses) XXX_Unmarshal(b []byte) error {
@ -1700,7 +1737,7 @@ func (m *StorageClassDetail) Reset() { *m = StorageClassDetail{} }
func (m *StorageClassDetail) String() string { return proto.CompactTextString(m) }
func (*StorageClassDetail) ProtoMessage() {}
func (*StorageClassDetail) Descriptor() ([]byte, []int) {
return fileDescriptor_f94cf1a886c479d6, []int{26}
return fileDescriptor_f94cf1a886c479d6, []int{27}
}
func (m *StorageClassDetail) XXX_Unmarshal(b []byte) error {
@ -1781,7 +1818,7 @@ func (m *TopologySelectorTerm) Reset() { *m = TopologySelectorTerm{} }
func (m *TopologySelectorTerm) String() string { return proto.CompactTextString(m) }
func (*TopologySelectorTerm) ProtoMessage() {}
func (*TopologySelectorTerm) Descriptor() ([]byte, []int) {
return fileDescriptor_f94cf1a886c479d6, []int{27}
return fileDescriptor_f94cf1a886c479d6, []int{28}
}
func (m *TopologySelectorTerm) XXX_Unmarshal(b []byte) error {
@ -1821,7 +1858,7 @@ func (m *TopologySelectorLabelRequirement) Reset() { *m = TopologySelect
func (m *TopologySelectorLabelRequirement) String() string { return proto.CompactTextString(m) }
func (*TopologySelectorLabelRequirement) ProtoMessage() {}
func (*TopologySelectorLabelRequirement) Descriptor() ([]byte, []int) {
return fileDescriptor_f94cf1a886c479d6, []int{28}
return fileDescriptor_f94cf1a886c479d6, []int{29}
}
func (m *TopologySelectorLabelRequirement) XXX_Unmarshal(b []byte) error {
@ -1867,7 +1904,7 @@ func (m *ServiceVolumeStatusMessage) Reset() { *m = ServiceVolumeStatusM
func (m *ServiceVolumeStatusMessage) String() string { return proto.CompactTextString(m) }
func (*ServiceVolumeStatusMessage) ProtoMessage() {}
func (*ServiceVolumeStatusMessage) Descriptor() ([]byte, []int) {
return fileDescriptor_f94cf1a886c479d6, []int{29}
return fileDescriptor_f94cf1a886c479d6, []int{30}
}
func (m *ServiceVolumeStatusMessage) XXX_Unmarshal(b []byte) error {
@ -1908,7 +1945,7 @@ func (m *AppStatus) Reset() { *m = AppStatus{} }
func (m *AppStatus) String() string { return proto.CompactTextString(m) }
func (*AppStatus) ProtoMessage() {}
func (*AppStatus) Descriptor() ([]byte, []int) {
return fileDescriptor_f94cf1a886c479d6, []int{30}
return fileDescriptor_f94cf1a886c479d6, []int{31}
}
func (m *AppStatus) XXX_Unmarshal(b []byte) error {
@ -1966,6 +2003,8 @@ func init() {
proto.RegisterType((*ServiceAppPodList)(nil), "pb.ServiceAppPodList")
proto.RegisterType((*MultiServiceAppPodList)(nil), "pb.MultiServiceAppPodList")
proto.RegisterMapType((map[string]*ServiceAppPodList)(nil), "pb.MultiServiceAppPodList.ServicePodsEntry")
proto.RegisterType((*ComponentPodNums)(nil), "pb.ComponentPodNums")
proto.RegisterMapType((map[string]int32)(nil), "pb.ComponentPodNums.PodNumsEntry")
proto.RegisterType((*ServiceAppPod)(nil), "pb.ServiceAppPod")
proto.RegisterMapType((map[string]*Container)(nil), "pb.ServiceAppPod.ContainersEntry")
proto.RegisterType((*Container)(nil), "pb.Container")
@ -2000,160 +2039,162 @@ func init() {
proto.RegisterType((*AppStatus)(nil), "pb.AppStatus")
}
func init() {
proto.RegisterFile("app_runtime_server.proto", fileDescriptor_f94cf1a886c479d6)
}
func init() { proto.RegisterFile("app_runtime_server.proto", fileDescriptor_f94cf1a886c479d6) }
var fileDescriptor_f94cf1a886c479d6 = []byte{
// 2217 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0x4b, 0x73, 0x1b, 0xc7,
0x11, 0x26, 0x00, 0xe2, 0xd5, 0x20, 0x40, 0x70, 0x24, 0x52, 0x30, 0x6c, 0x59, 0xf2, 0x46, 0x52,
0xa9, 0x24, 0x05, 0xb6, 0x19, 0xab, 0x2c, 0xd9, 0x8a, 0x53, 0x20, 0x00, 0x53, 0x48, 0x40, 0x10,
0xb5, 0x00, 0x93, 0x72, 0x55, 0xaa, 0x50, 0x4b, 0xec, 0x98, 0xde, 0x68, 0x1f, 0xa3, 0x7d, 0xd0,
0xc1, 0x31, 0xb9, 0xe5, 0x9c, 0x9f, 0x90, 0x43, 0x0e, 0xc9, 0x31, 0x97, 0x5c, 0xfc, 0x17, 0xf2,
0x53, 0x7c, 0xc9, 0x0f, 0x48, 0xf5, 0xcc, 0xec, 0x13, 0x4b, 0x33, 0x4c, 0x25, 0x95, 0xdb, 0x4e,
0x4f, 0x7f, 0xd3, 0x3d, 0x3d, 0x3d, 0xfd, 0x98, 0x85, 0x8e, 0xc6, 0xd8, 0xd2, 0x0d, 0x6c, 0xdf,
0xb0, 0xe8, 0xd2, 0xa3, 0xee, 0x25, 0x75, 0x7b, 0xcc, 0x75, 0x7c, 0x87, 0x14, 0xd9, 0xb9, 0x52,
0x85, 0xf2, 0xc8, 0x62, 0xfe, 0x5a, 0x79, 0x08, 0x3b, 0x7d, 0xc6, 0xe6, 0xbe, 0xe6, 0x07, 0x9e,
0x4a, 0xdf, 0x92, 0x7d, 0xa8, 0x20, 0xd0, 0xd0, 0x3b, 0x85, 0xfb, 0x85, 0xc7, 0x75, 0xb5, 0xac,
0x31, 0x36, 0xd6, 0x95, 0x0f, 0xa1, 0x35, 0xa7, 0xee, 0xa5, 0xb1, 0xa2, 0x2a, 0x7d, 0x1b, 0x50,
0xcf, 0x27, 0x77, 0x01, 0x3c, 0x41, 0x89, 0x99, 0xeb, 0x92, 0x32, 0xd6, 0x95, 0x43, 0xd8, 0x95,
0x00, 0x2f, 0x44, 0xdc, 0x83, 0x46, 0x8c, 0xf0, 0x24, 0x04, 0x22, 0x88, 0xa7, 0x3c, 0x83, 0xe6,
0x82, 0xda, 0x9a, 0xed, 0x87, 0x88, 0x77, 0xa1, 0xee, 0x73, 0x42, 0x2c, 0xa2, 0x26, 0x08, 0x63,
0x5d, 0xf9, 0x5d, 0x01, 0x9a, 0x42, 0xef, 0x13, 0xea, 0x79, 0xda, 0x05, 0x25, 0xcf, 0xa1, 0xe2,
0x71, 0x42, 0xa7, 0x70, 0xbf, 0xf4, 0xb8, 0x71, 0x78, 0xb7, 0xc7, 0xce, 0x7b, 0x29, 0x16, 0x39,
0x1a, 0xd9, 0xbe, 0xbb, 0x56, 0x25, 0x73, 0xf7, 0x25, 0x34, 0x12, 0x64, 0xd2, 0x86, 0xd2, 0x1b,
0xba, 0x96, 0xe2, 0xf0, 0x93, 0xdc, 0x86, 0xf2, 0xa5, 0x66, 0x06, 0xb4, 0x53, 0x14, 0x26, 0xe1,
0x83, 0xcf, 0x8a, 0x2f, 0x0a, 0xca, 0x1a, 0x1a, 0x43, 0xc3, 0x7b, 0x13, 0x2a, 0xf0, 0x11, 0x94,
0x75, 0xc3, 0x7b, 0x13, 0xca, 0xef, 0xa2, 0xfc, 0xc4, 0x3c, 0xff, 0x96, 0xc2, 0x05, 0x63, 0xf7,
0x05, 0x40, 0x4c, 0xbc, 0x4e, 0x74, 0x21, 0x29, 0xda, 0x82, 0x3d, 0x69, 0xe0, 0x3e, 0x63, 0x33,
0x47, 0x9f, 0x18, 0x9e, 0x4f, 0x9e, 0x42, 0xd5, 0x31, 0xf5, 0x99, 0xa3, 0x87, 0x2a, 0xec, 0x71,
0x13, 0x24, 0xf9, 0xd4, 0x90, 0x03, 0x99, 0x6d, 0xfa, 0x2d, 0x67, 0x2e, 0x5e, 0xc9, 0x2c, 0x39,
0x94, 0xef, 0x0a, 0x70, 0x70, 0x12, 0x98, 0xbe, 0xb1, 0x29, 0xf4, 0x24, 0x3a, 0xd7, 0x84, 0xe0,
0xa7, 0xb8, 0x56, 0x3e, 0x20, 0x14, 0x81, 0xdc, 0xc2, 0x18, 0x49, 0x7c, 0xf7, 0x0c, 0xda, 0x59,
0x86, 0x1c, 0xc3, 0x3c, 0x4d, 0x1a, 0xa6, 0x71, 0xb8, 0xbf, 0xa1, 0x3a, 0x4a, 0x4a, 0xda, 0xeb,
0xfb, 0x22, 0x34, 0x53, 0x0c, 0xd7, 0x78, 0x30, 0x3a, 0x9f, 0x4e, 0x99, 0xe9, 0xac, 0x71, 0x56,
0x9c, 0x7c, 0x4d, 0x10, 0xc6, 0x3a, 0xfa, 0xb2, 0x9c, 0xf4, 0xd7, 0x8c, 0x76, 0x4a, 0xc2, 0x97,
0x05, 0x69, 0xb1, 0x66, 0x94, 0xbc, 0x03, 0x35, 0xe6, 0xe8, 0x4b, 0x5b, 0xb3, 0x68, 0x67, 0x9b,
0xcf, 0x56, 0x99, 0xa3, 0x4f, 0x35, 0x8b, 0xe2, 0x15, 0xc3, 0x29, 0x83, 0x75, 0xca, 0xc2, 0x9f,
0x98, 0xa3, 0x8f, 0x19, 0xaa, 0x83, 0x64, 0xe9, 0xc1, 0x15, 0xa1, 0x0e, 0x73, 0x74, 0xe1, 0x9b,
0xa4, 0x0f, 0xb0, 0x72, 0x6c, 0x5f, 0x33, 0x6c, 0xea, 0x7a, 0x9d, 0x2a, 0x37, 0xf2, 0x07, 0x1b,
0xbb, 0xee, 0x0d, 0x22, 0x1e, 0x61, 0xda, 0x04, 0x08, 0x95, 0x46, 0x09, 0x97, 0x8e, 0x19, 0x58,
0xd4, 0xeb, 0xd4, 0xee, 0x97, 0x50, 0x69, 0xe6, 0xe8, 0xbf, 0x14, 0x94, 0xee, 0x04, 0x76, 0x33,
0xf8, 0x1c, 0xcb, 0xff, 0x28, 0x6d, 0xf9, 0x26, 0xea, 0x10, 0xa1, 0x92, 0x16, 0xbf, 0x84, 0x7a,
0x44, 0x27, 0x0f, 0xa1, 0x15, 0x69, 0x22, 0xac, 0x22, 0x96, 0x6c, 0x46, 0x54, 0x6e, 0x9b, 0x0f,
0x60, 0xc7, 0xa2, 0x96, 0xe3, 0xae, 0x97, 0xa6, 0x61, 0x19, 0x3e, 0x97, 0x51, 0x52, 0x1b, 0x82,
0x36, 0x41, 0x12, 0xee, 0x62, 0xc5, 0x82, 0xa5, 0x2b, 0x62, 0x04, 0x37, 0x7d, 0x49, 0x85, 0x15,
0x0b, 0x64, 0xd4, 0x50, 0xbe, 0xaf, 0x00, 0x0c, 0xc5, 0x41, 0xd9, 0x5f, 0x3b, 0xe4, 0x3d, 0xa8,
0xa3, 0x3c, 0x8f, 0x69, 0xab, 0x50, 0x68, 0x4c, 0x20, 0x0a, 0xec, 0xa0, 0xc5, 0xe9, 0xd7, 0x81,
0x49, 0x3d, 0xea, 0xcb, 0x83, 0x4e, 0xd1, 0xc8, 0xfb, 0x20, 0x4f, 0xd6, 0xa2, 0xb6, 0x9f, 0x3e,
0x6b, 0xa4, 0x70, 0x47, 0xf2, 0x35, 0xd7, 0x5f, 0x62, 0xac, 0x95, 0xa7, 0x5d, 0xe7, 0x94, 0x85,
0x61, 0x51, 0xf2, 0x0c, 0xb6, 0x19, 0x5e, 0x8c, 0x32, 0x3f, 0xb3, 0x0e, 0x0f, 0x0a, 0x91, 0x7a,
0xbd, 0xf8, 0x16, 0x70, 0x2e, 0xf2, 0x02, 0x6a, 0xd2, 0x07, 0xd1, 0x09, 0x10, 0xf1, 0x5e, 0x06,
0x11, 0xc6, 0x55, 0x81, 0x8a, 0xb8, 0xc9, 0xe7, 0x50, 0xa7, 0xb6, 0xce, 0x1c, 0xc3, 0xf6, 0x43,
0x07, 0xb9, 0x9b, 0x81, 0x8e, 0xc2, 0x79, 0x81, 0x8d, 0xf9, 0xc9, 0x73, 0xa8, 0x7a, 0x74, 0xe5,
0x52, 0x5f, 0xf8, 0x45, 0xe3, 0xf0, 0xdd, 0x0d, 0xa9, 0x7c, 0x56, 0x00, 0x43, 0x5e, 0x94, 0x69,
0xd8, 0x17, 0x2e, 0xf5, 0x3c, 0xea, 0x75, 0xea, 0xb9, 0x32, 0xc7, 0xe1, 0xbc, 0x94, 0x19, 0xf1,
0x93, 0x3e, 0x34, 0x5c, 0xca, 0x4c, 0x63, 0xa5, 0xf9, 0x68, 0x7a, 0xe0, 0xf0, 0x7b, 0x19, 0xb8,
0x1a, 0x73, 0xc8, 0x60, 0x91, 0xc0, 0x90, 0x83, 0x28, 0xe4, 0x37, 0xb8, 0xd9, 0xc3, 0x98, 0xfe,
0x29, 0xd4, 0x7f, 0x28, 0x7a, 0x5c, 0x19, 0xd1, 0xbb, 0x9f, 0x47, 0x51, 0xe2, 0x3f, 0x00, 0xbf,
0x82, 0x56, 0xda, 0xc2, 0x37, 0x42, 0x7f, 0x06, 0x3b, 0x49, 0x23, 0xdf, 0x54, 0x72, 0xda, 0xce,
0x37, 0x42, 0x7f, 0x01, 0xed, 0xac, 0x99, 0x6f, 0x94, 0x06, 0xff, 0x5a, 0x84, 0x56, 0x98, 0xb9,
0x3d, 0x27, 0x70, 0x57, 0x34, 0x7b, 0x4b, 0x0b, 0xd9, 0x5b, 0x8a, 0xe1, 0x15, 0x19, 0x92, 0xd7,
0xbc, 0xb6, 0x62, 0x81, 0xb8, 0xe3, 0x0f, 0xa1, 0x25, 0xc3, 0x40, 0xfa, 0x9a, 0x37, 0x05, 0x35,
0x5c, 0x23, 0x1b, 0x2d, 0xb6, 0x37, 0xa3, 0xc5, 0x23, 0xd8, 0x75, 0x03, 0xdb, 0x36, 0xec, 0x8b,
0x25, 0xd6, 0x35, 0x76, 0x60, 0xf1, 0xa8, 0x5b, 0x52, 0x9b, 0x92, 0xdc, 0x67, 0x6c, 0x1a, 0x58,
0xe4, 0x63, 0xd8, 0x4f, 0xf2, 0xf9, 0xdf, 0x18, 0xae, 0xce, 0xb9, 0x81, 0x73, 0x93, 0x98, 0x7b,
0x81, 0x53, 0x08, 0xf9, 0x14, 0x3a, 0x49, 0x88, 0x61, 0xfb, 0xd4, 0xb5, 0x35, 0x93, 0xa3, 0x1a,
0x1c, 0xb5, 0x1f, 0xa3, 0xc6, 0x72, 0x76, 0x1a, 0x58, 0xca, 0x5f, 0x0a, 0x40, 0xd2, 0xe6, 0xe2,
0x79, 0x74, 0x00, 0x75, 0x57, 0x8e, 0xc3, 0x2c, 0xfa, 0x10, 0x2f, 0xc3, 0x26, 0x6b, 0x2f, 0x1c,
0x84, 0x77, 0x2a, 0xc2, 0x75, 0x67, 0xd0, 0x4a, 0x4f, 0xe6, 0x1c, 0xe4, 0xe3, 0x74, 0x04, 0x27,
0x9b, 0x42, 0x92, 0x87, 0xfb, 0xfb, 0x02, 0xbc, 0xd3, 0xd7, 0x75, 0xbe, 0xed, 0x99, 0xe6, 0xfa,
0xeb, 0xc8, 0xc5, 0xb1, 0x5e, 0x24, 0xb0, 0x1d, 0x04, 0x51, 0xfa, 0xe4, 0xdf, 0x28, 0xd1, 0x8b,
0x72, 0x26, 0x7e, 0x92, 0x16, 0x14, 0x0d, 0x26, 0x23, 0x67, 0xd1, 0x60, 0x88, 0x62, 0x8e, 0x2b,
0x0e, 0xac, 0xac, 0xf2, 0x6f, 0x74, 0x08, 0xc3, 0x5b, 0x3a, 0xb6, 0x69, 0xd8, 0x94, 0x9f, 0x51,
0x4d, 0xad, 0x19, 0xde, 0x29, 0x1f, 0x73, 0x25, 0xce, 0xd8, 0xff, 0x59, 0x09, 0x0a, 0xef, 0x0c,
0xa9, 0xf9, 0xbf, 0xd6, 0x41, 0xf9, 0x23, 0xba, 0xc7, 0x86, 0x90, 0xff, 0xe2, 0x26, 0xe3, 0xa0,
0x59, 0x4e, 0x06, 0xcd, 0xf4, 0xe6, 0x2b, 0x99, 0xcd, 0xff, 0x0c, 0x6e, 0xe5, 0xec, 0x9c, 0x3c,
0x86, 0x92, 0x73, 0xfe, 0x1b, 0xe9, 0xae, 0x07, 0xdc, 0x93, 0x36, 0xb8, 0x54, 0x64, 0x51, 0x1e,
0x40, 0x1b, 0x7d, 0x17, 0xc3, 0xf2, 0xd1, 0x7a, 0x3e, 0x1e, 0xa2, 0xd1, 0xa4, 0xfe, 0x85, 0x48,
0x7f, 0xe5, 0x0b, 0xd8, 0x3d, 0xa6, 0xc8, 0x34, 0xa4, 0xbe, 0x66, 0x98, 0xb9, 0x4c, 0xa9, 0xe2,
0xaa, 0x98, 0x2a, 0xae, 0x94, 0x73, 0xa8, 0xcd, 0x1c, 0x7d, 0x74, 0x49, 0x85, 0xc5, 0x78, 0x75,
0x26, 0x2d, 0x86, 0xdf, 0xb8, 0x77, 0x97, 0x6a, 0x9e, 0x63, 0x4b, 0xa0, 0x1c, 0xa1, 0x10, 0xed,
0x22, 0x2c, 0xe4, 0xf0, 0x93, 0x74, 0xa0, 0x6a, 0x89, 0xba, 0x5d, 0x9a, 0x29, 0x1c, 0x2a, 0xdf,
0x15, 0x79, 0x76, 0x91, 0x85, 0xd9, 0xa3, 0x84, 0x94, 0x96, 0xb8, 0x4c, 0xd1, 0x64, 0x0f, 0x6b,
0xc1, 0x6b, 0x24, 0x27, 0xe4, 0x94, 0x52, 0x72, 0x10, 0xa1, 0xe9, 0x98, 0x8a, 0x64, 0x4d, 0x21,
0x47, 0xb8, 0x7d, 0x5c, 0x71, 0xe9, 0xf9, 0x6e, 0xa8, 0x1a, 0x8e, 0xe7, 0xbe, 0xab, 0xfc, 0xa9,
0x00, 0xdb, 0xbc, 0xfe, 0x6c, 0x40, 0x75, 0x36, 0x9a, 0x0e, 0xc7, 0xd3, 0xe3, 0xf6, 0x16, 0x0e,
0xd4, 0xb3, 0xe9, 0x14, 0x07, 0x05, 0xd2, 0x84, 0xfa, 0xfc, 0x6c, 0x30, 0x18, 0x8d, 0x86, 0xa3,
0x61, 0xbb, 0x48, 0x00, 0x2a, 0x5f, 0xf6, 0xc7, 0x93, 0xd1, 0xb0, 0x5d, 0x42, 0xbe, 0xb3, 0xe9,
0x2f, 0xa6, 0xa7, 0xbf, 0x9a, 0xb6, 0xb7, 0x49, 0x0b, 0x60, 0x31, 0x3a, 0x19, 0x4f, 0xfb, 0x0b,
0xc4, 0x95, 0xc9, 0x0e, 0xd4, 0xfa, 0x47, 0xd3, 0x53, 0xf5, 0xa4, 0x3f, 0x69, 0x57, 0x70, 0x76,
0x3c, 0x1d, 0x2f, 0xc6, 0x62, 0xb6, 0x8a, 0xe3, 0xf9, 0xe0, 0xf5, 0x68, 0x78, 0x36, 0xc1, 0x71,
0x0d, 0xb9, 0xa7, 0xa7, 0x0b, 0x75, 0xd4, 0x1f, 0x7e, 0xd5, 0xae, 0xa3, 0xcc, 0xb3, 0xe9, 0xeb,
0x51, 0x7f, 0xb2, 0x78, 0xfd, 0x55, 0x1b, 0x94, 0x7f, 0x16, 0x60, 0x67, 0xe6, 0xe8, 0x71, 0x75,
0x78, 0x1b, 0xca, 0x86, 0x85, 0x16, 0x90, 0x4d, 0x27, 0x1f, 0x20, 0x95, 0xd7, 0x61, 0x61, 0xc2,
0xe1, 0x83, 0x84, 0x1d, 0x4b, 0x59, 0x3b, 0xf2, 0x9a, 0x8b, 0xea, 0x61, 0xc1, 0x2d, 0x87, 0x98,
0x26, 0x78, 0x7e, 0x58, 0x8a, 0xc4, 0x20, 0x6d, 0xd6, 0xe0, 0xb4, 0x13, 0x4e, 0x42, 0xd7, 0x17,
0x2c, 0x2b, 0x16, 0xc8, 0xda, 0xbb, 0xc6, 0x09, 0x03, 0x16, 0x60, 0x36, 0x92, 0x69, 0x28, 0x5c,
0xa1, 0x2a, 0x6a, 0x57, 0x49, 0x95, 0x6b, 0xdc, 0xc3, 0x72, 0x46, 0xb0, 0xe1, 0x2a, 0x35, 0x51,
0x27, 0x4a, 0xd2, 0x80, 0x05, 0xca, 0x3f, 0x84, 0xdf, 0x08, 0xcf, 0x46, 0xef, 0x4c, 0xd4, 0xc1,
0xfc, 0x9b, 0xd3, 0x1c, 0x3d, 0xdc, 0x30, 0xff, 0xce, 0x54, 0x97, 0xa5, 0x6c, 0x75, 0xf9, 0x30,
0xba, 0xcc, 0xdb, 0x71, 0x3d, 0x1e, 0x39, 0x60, 0x74, 0xb7, 0x45, 0x5c, 0x28, 0x47, 0x71, 0xe1,
0x0e, 0x54, 0x71, 0x75, 0xec, 0x42, 0xc4, 0x76, 0x2b, 0x38, 0x1c, 0x33, 0x34, 0xe3, 0x25, 0x75,
0x3d, 0xc3, 0xb1, 0xe5, 0x2e, 0xc3, 0x21, 0x79, 0x09, 0xbb, 0x86, 0x8d, 0x26, 0x8a, 0xdb, 0x10,
0x51, 0x2a, 0xb6, 0xa5, 0xc8, 0xb8, 0x0b, 0x68, 0x21, 0x63, 0xdc, 0x4a, 0x90, 0x8f, 0x52, 0xcd,
0x4b, 0xfd, 0x0a, 0x54, 0xb2, 0x57, 0x79, 0x00, 0x15, 0x8a, 0x97, 0xd8, 0x93, 0x65, 0xe1, 0x8e,
0xe4, 0xe6, 0x37, 0x5b, 0x95, 0x73, 0xca, 0x2b, 0x68, 0xcd, 0x7d, 0xc7, 0xd5, 0x2e, 0xe8, 0xc0,
0xd4, 0x78, 0x4d, 0xf9, 0x04, 0xb6, 0x4d, 0x83, 0x17, 0x1c, 0x51, 0x40, 0x4a, 0x72, 0xc8, 0xa8,
0xc2, 0x79, 0x94, 0x3f, 0x97, 0x80, 0x6c, 0x4e, 0xe6, 0x1e, 0xcc, 0x7d, 0x68, 0x30, 0xd7, 0xb9,
0x34, 0xd0, 0x10, 0xd4, 0x95, 0xe7, 0x93, 0x24, 0x91, 0x2f, 0x01, 0x98, 0xe6, 0x6a, 0x16, 0xf5,
0x71, 0x8b, 0x25, 0x2e, 0xfe, 0x51, 0xbe, 0xf8, 0xde, 0x2c, 0x62, 0x94, 0x4d, 0x5a, 0x8c, 0x14,
0xce, 0xb6, 0x32, 0x35, 0xc3, 0x5a, 0x32, 0xc7, 0x34, 0x56, 0x6b, 0xe9, 0xcd, 0x4d, 0x49, 0x9d,
0x71, 0x22, 0xf9, 0x04, 0x0e, 0x34, 0xd3, 0x74, 0xbe, 0x95, 0xdd, 0xdc, 0x92, 0xfe, 0x96, 0x69,
0x36, 0x3f, 0x35, 0x91, 0xb5, 0x6e, 0xf3, 0x59, 0xd1, 0xd8, 0x8d, 0xc2, 0x39, 0xd2, 0x83, 0x5b,
0x92, 0xff, 0xdc, 0xb0, 0x75, 0xac, 0x5c, 0x2c, 0x74, 0x37, 0xe1, 0x01, 0x7b, 0x62, 0xea, 0x48,
0xcc, 0x9c, 0xa0, 0xef, 0x1d, 0x03, 0xe1, 0xeb, 0x50, 0x7d, 0xe9, 0x3b, 0xcc, 0x31, 0x9d, 0x0b,
0x83, 0x86, 0xbd, 0x05, 0x6f, 0x64, 0x16, 0x82, 0xba, 0x9e, 0x53, 0x93, 0xae, 0x7c, 0xc7, 0x5d,
0x50, 0xd7, 0x52, 0xf7, 0x24, 0x66, 0x11, 0x41, 0xba, 0x3f, 0x85, 0xdd, 0xcc, 0xa6, 0x6f, 0x54,
0x60, 0xfa, 0x70, 0x3b, 0x4f, 0x12, 0xf9, 0x35, 0xdc, 0xb1, 0x34, 0x7f, 0xf5, 0xcd, 0xd2, 0xd4,
0xce, 0xa9, 0x89, 0x46, 0xc0, 0x12, 0xd8, 0x70, 0xec, 0xb0, 0x80, 0x7a, 0x90, 0xa7, 0xe4, 0x04,
0x99, 0xb1, 0x86, 0x34, 0x5c, 0x8a, 0x0d, 0x9c, 0xba, 0xcf, 0x17, 0xe1, 0xe4, 0x51, 0xbc, 0x84,
0x32, 0x81, 0xfb, 0xd7, 0x41, 0x73, 0x76, 0x71, 0x00, 0x15, 0xae, 0xb8, 0x78, 0x55, 0xa9, 0xab,
0x72, 0xa4, 0xfc, 0xad, 0x00, 0x5d, 0xd9, 0x5a, 0x88, 0x63, 0x49, 0x3f, 0x5e, 0x1d, 0x65, 0x1e,
0xaf, 0x9e, 0x24, 0x7a, 0xfb, 0x1c, 0xfe, 0xdc, 0x97, 0x2c, 0xf5, 0xba, 0x97, 0xac, 0x1f, 0x27,
0x2d, 0xdc, 0x3a, 0xbc, 0x73, 0x85, 0x8c, 0xa4, 0xe9, 0xff, 0x5e, 0x80, 0x7a, 0xf4, 0x42, 0x48,
0x9e, 0x25, 0xb4, 0xc4, 0x15, 0x6e, 0xe3, 0x0a, 0xd1, 0x74, 0x2f, 0x13, 0x74, 0xda, 0x50, 0xc2,
0x48, 0x28, 0xaa, 0x7b, 0xfc, 0x44, 0xe3, 0xc8, 0x10, 0x2a, 0x0a, 0x7a, 0x39, 0x52, 0x16, 0x50,
0x91, 0x12, 0xaa, 0x50, 0x9a, 0x8e, 0x27, 0xd9, 0xa4, 0x05, 0x50, 0x19, 0x4c, 0x4e, 0xe7, 0x3c,
0x63, 0x25, 0x13, 0x51, 0x09, 0x47, 0xf3, 0x45, 0x5f, 0xe5, 0x69, 0x68, 0x5b, 0x8c, 0x4e, 0x67,
0x33, 0x9e, 0xb2, 0x9e, 0x7c, 0x08, 0xb7, 0x72, 0x76, 0x47, 0xea, 0x50, 0x16, 0x89, 0x69, 0x0b,
0x13, 0xd3, 0xf4, 0x74, 0xb1, 0x14, 0xc3, 0xc2, 0xe1, 0x1f, 0xaa, 0xd0, 0xea, 0x33, 0xa6, 0x8a,
0x67, 0xd3, 0xf9, 0xda, 0x5e, 0x91, 0x23, 0x38, 0x38, 0xa6, 0x7e, 0xb4, 0xc5, 0x21, 0x65, 0x2e,
0x5d, 0x69, 0x98, 0x56, 0x6e, 0x25, 0xac, 0x17, 0x3e, 0x72, 0x76, 0xf7, 0x36, 0xde, 0x1c, 0x95,
0x2d, 0xf2, 0x31, 0xec, 0x24, 0xd7, 0x20, 0xed, 0x94, 0xd5, 0x54, 0xfa, 0xb6, 0xdb, 0x4c, 0x51,
0x94, 0x2d, 0xf2, 0x12, 0x40, 0x40, 0xf8, 0x53, 0x1d, 0x49, 0x88, 0x0a, 0x25, 0xe5, 0x3f, 0x79,
0x29, 0x5b, 0x64, 0xc8, 0x4b, 0x28, 0xfe, 0xf6, 0x16, 0xe2, 0x73, 0x55, 0xed, 0x5e, 0xfd, 0x44,
0xa7, 0x6c, 0x91, 0xe7, 0xd0, 0x3c, 0xa6, 0x7e, 0xe2, 0x1d, 0x25, 0x4f, 0x87, 0x56, 0xba, 0x59,
0x57, 0xb6, 0xc8, 0x2b, 0xd8, 0x3b, 0xa6, 0x7e, 0xa6, 0x19, 0xdc, 0x4b, 0x76, 0x18, 0x02, 0x99,
0xd3, 0x74, 0xf0, 0x5d, 0x93, 0x0d, 0xb4, 0x47, 0xea, 0xc8, 0xcb, 0x9f, 0xab, 0xbb, 0x07, 0xf9,
0x0d, 0x91, 0xb2, 0x45, 0x5e, 0xc3, 0x1d, 0xfc, 0xca, 0xab, 0x51, 0xf3, 0x34, 0xbf, 0x93, 0x5f,
0xaa, 0xa2, 0xe9, 0x07, 0xb0, 0x9f, 0xdb, 0xef, 0x10, 0xfe, 0xb2, 0x71, 0x65, 0x2b, 0xd4, 0x8d,
0xd5, 0x14, 0x8b, 0xe4, 0xf6, 0x2b, 0x62, 0x91, 0x2b, 0x5b, 0x99, 0x8d, 0x45, 0x72, 0x1b, 0x0e,
0x22, 0xdf, 0x58, 0xcc, 0x7f, 0x67, 0x91, 0x4f, 0xb8, 0xf3, 0xc5, 0x75, 0x07, 0xf7, 0x85, 0x4c,
0x8d, 0xdd, 0x0d, 0xab, 0x06, 0x41, 0xe1, 0x28, 0x3c, 0xc7, 0x4c, 0x72, 0x4d, 0x1c, 0x04, 0xc9,
0xa6, 0x36, 0x8a, 0xa6, 0xfb, 0x39, 0x3f, 0xbf, 0x3e, 0x63, 0xa9, 0xfb, 0x96, 0x67, 0xff, 0xf7,
0x7f, 0x38, 0xbc, 0x29, 0x5b, 0xe7, 0x15, 0xfe, 0xb7, 0xe2, 0x27, 0xff, 0x0a, 0x00, 0x00, 0xff,
0xff, 0xd3, 0x7f, 0x3d, 0x80, 0xc9, 0x18, 0x00, 0x00,
// 2275 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x19, 0xcb, 0x72, 0x1b, 0xc7,
0x91, 0x20, 0x88, 0x57, 0x83, 0x00, 0xc1, 0x11, 0x49, 0x41, 0xb0, 0x65, 0xc9, 0x1b, 0x49, 0xa5,
0x92, 0x14, 0xd8, 0x66, 0xac, 0xb2, 0x5e, 0x71, 0x0a, 0x04, 0x60, 0x0a, 0x09, 0x08, 0xa2, 0x16,
0x60, 0x52, 0xae, 0x4a, 0x15, 0x6a, 0x89, 0x1d, 0xd3, 0x1b, 0xed, 0x63, 0xb4, 0x0f, 0x3a, 0x38,
0x26, 0xd7, 0x1c, 0xf3, 0x09, 0x39, 0xe4, 0x90, 0x1c, 0x73, 0xc9, 0xc5, 0x7f, 0x90, 0xca, 0xa7,
0xf8, 0x92, 0x0f, 0x48, 0xf5, 0xcc, 0xec, 0x13, 0x4b, 0x33, 0x4a, 0x25, 0xe5, 0x13, 0xb6, 0x7b,
0xba, 0xa7, 0x7b, 0x7a, 0xfa, 0x39, 0x80, 0xb6, 0xc6, 0xd8, 0xc2, 0x0d, 0x6c, 0xdf, 0xb0, 0xe8,
0xc2, 0xa3, 0xee, 0x25, 0x75, 0xbb, 0xcc, 0x75, 0x7c, 0x87, 0x6c, 0xb2, 0x73, 0xa5, 0x02, 0xa5,
0xa1, 0xc5, 0xfc, 0x95, 0x72, 0x1f, 0xb6, 0x7b, 0x8c, 0xcd, 0x7c, 0xcd, 0x0f, 0x3c, 0x95, 0xbe,
0x25, 0xfb, 0x50, 0x46, 0x46, 0x43, 0x6f, 0x17, 0xee, 0x16, 0x1e, 0xd6, 0xd4, 0x92, 0xc6, 0xd8,
0x48, 0x57, 0x3e, 0x82, 0xe6, 0x8c, 0xba, 0x97, 0xc6, 0x92, 0xaa, 0xf4, 0x6d, 0x40, 0x3d, 0x9f,
0xdc, 0x06, 0xf0, 0x04, 0x26, 0x26, 0xae, 0x49, 0xcc, 0x48, 0x57, 0x0e, 0x61, 0x47, 0x32, 0x78,
0x21, 0xc7, 0x1d, 0xa8, 0xc7, 0x1c, 0x9e, 0x64, 0x81, 0x88, 0xc5, 0x53, 0x9e, 0x40, 0x63, 0x4e,
0x6d, 0xcd, 0xf6, 0x43, 0x8e, 0xf7, 0xa0, 0xe6, 0x73, 0x44, 0x2c, 0xa2, 0x2a, 0x10, 0x23, 0x5d,
0xf9, 0x5d, 0x01, 0x1a, 0x42, 0xef, 0x13, 0xea, 0x79, 0xda, 0x05, 0x25, 0x4f, 0xa1, 0xec, 0x71,
0x44, 0xbb, 0x70, 0xb7, 0xf8, 0xb0, 0x7e, 0x78, 0xbb, 0xcb, 0xce, 0xbb, 0x29, 0x12, 0x09, 0x0d,
0x6d, 0xdf, 0x5d, 0xa9, 0x92, 0xb8, 0xf3, 0x1c, 0xea, 0x09, 0x34, 0x69, 0x41, 0xf1, 0x0d, 0x5d,
0x49, 0x71, 0xf8, 0x49, 0xf6, 0xa0, 0x74, 0xa9, 0x99, 0x01, 0x6d, 0x6f, 0x0a, 0x93, 0x70, 0xe0,
0xc5, 0xe6, 0xb3, 0x82, 0xb2, 0x82, 0xfa, 0xc0, 0xf0, 0xde, 0x84, 0x0a, 0x7c, 0x0c, 0x25, 0xdd,
0xf0, 0xde, 0x84, 0xf2, 0x3b, 0x28, 0x3f, 0xb1, 0xce, 0xbf, 0xa5, 0x70, 0x41, 0xd8, 0x79, 0x06,
0x10, 0x23, 0xaf, 0x13, 0x5d, 0x48, 0x8a, 0xb6, 0x60, 0x57, 0x1a, 0xb8, 0xc7, 0xd8, 0xd4, 0xd1,
0xc7, 0x86, 0xe7, 0x93, 0xc7, 0x50, 0x71, 0x4c, 0x7d, 0xea, 0xe8, 0xa1, 0x0a, 0xbb, 0xdc, 0x04,
0x49, 0x3a, 0x35, 0xa4, 0x40, 0x62, 0x9b, 0x7e, 0xc3, 0x89, 0x37, 0xaf, 0x24, 0x96, 0x14, 0xca,
0xb7, 0x05, 0x38, 0x38, 0x09, 0x4c, 0xdf, 0x58, 0x17, 0x7a, 0x12, 0xdd, 0x6b, 0x42, 0xf0, 0x63,
0xdc, 0x2b, 0x9f, 0x21, 0x14, 0x81, 0xd4, 0xc2, 0x18, 0x49, 0xfe, 0xce, 0x19, 0xb4, 0xb2, 0x04,
0x39, 0x86, 0x79, 0x9c, 0x34, 0x4c, 0xfd, 0x70, 0x7f, 0x4d, 0x75, 0x94, 0x94, 0xb4, 0xd7, 0x1f,
0x0a, 0xd0, 0xea, 0x3b, 0x16, 0x73, 0x6c, 0x6a, 0xfb, 0x53, 0x47, 0x9f, 0x04, 0x96, 0x47, 0x5e,
0x42, 0x85, 0x89, 0x4f, 0xa9, 0xf6, 0x87, 0xb8, 0x4f, 0x96, 0xac, 0x2b, 0x7f, 0x85, 0xb2, 0x21,
0x47, 0xe7, 0x05, 0x6c, 0x27, 0x17, 0xae, 0xbb, 0xbd, 0x52, 0x52, 0x9b, 0xef, 0x36, 0xa1, 0x91,
0x52, 0xf7, 0x9a, 0x78, 0xc2, 0x50, 0xd0, 0x29, 0x33, 0x9d, 0x15, 0xae, 0x0a, 0x3f, 0xac, 0x0a,
0xc4, 0x48, 0xc7, 0xc8, 0x92, 0x8b, 0xfe, 0x8a, 0xd1, 0x76, 0x51, 0x44, 0x96, 0x40, 0xcd, 0x57,
0x8c, 0x92, 0x5b, 0x50, 0x65, 0x8e, 0xbe, 0xb0, 0x35, 0x8b, 0xb6, 0xb7, 0xf8, 0x2a, 0x3f, 0x85,
0x66, 0x51, 0x0c, 0x78, 0x5c, 0x32, 0x58, 0xbb, 0x24, 0xbc, 0x9b, 0x39, 0xfa, 0x88, 0xa1, 0x3a,
0x88, 0x96, 0xf1, 0x54, 0x16, 0xea, 0x30, 0x47, 0x17, 0x91, 0x42, 0x7a, 0x00, 0x4b, 0xc7, 0xf6,
0x35, 0xc3, 0xa6, 0xae, 0xd7, 0xae, 0xc4, 0xb6, 0x4b, 0x1d, 0xaa, 0xdb, 0x8f, 0x68, 0x84, 0xed,
0x12, 0x4c, 0xa8, 0x34, 0x4a, 0xb8, 0x74, 0xcc, 0xc0, 0xa2, 0x5e, 0xbb, 0x7a, 0xb7, 0x88, 0x4a,
0x33, 0x47, 0xff, 0xa5, 0xc0, 0x74, 0xc6, 0xb0, 0x93, 0xe1, 0xcf, 0x31, 0xf1, 0x8f, 0xd2, 0x7e,
0xd0, 0x10, 0xf7, 0x27, 0xb9, 0x92, 0x16, 0xbf, 0x84, 0x5a, 0x84, 0x27, 0xf7, 0xa1, 0x19, 0x69,
0x22, 0xac, 0x22, 0xb6, 0x6c, 0x44, 0x58, 0x6e, 0x9b, 0x0f, 0x61, 0xdb, 0xa2, 0x96, 0xe3, 0xae,
0x16, 0xa6, 0x61, 0x19, 0x3e, 0x97, 0x51, 0x54, 0xeb, 0x02, 0x37, 0x46, 0x14, 0x9e, 0x62, 0xc9,
0x82, 0x85, 0x2b, 0x32, 0x16, 0x37, 0x7d, 0x51, 0x85, 0x25, 0x0b, 0x64, 0x0e, 0x53, 0xbe, 0x2b,
0x03, 0x0c, 0xc4, 0x45, 0xd9, 0x5f, 0x39, 0xe4, 0x7d, 0xa8, 0xa1, 0x3c, 0x8f, 0x69, 0xcb, 0x50,
0x68, 0x8c, 0x20, 0x0a, 0x6c, 0xa3, 0xc5, 0xe9, 0x57, 0x81, 0x49, 0x3d, 0xea, 0xcb, 0x8b, 0x4e,
0xe1, 0xc8, 0x07, 0x20, 0x6f, 0xd6, 0xa2, 0xb6, 0x9f, 0xbe, 0x6b, 0xc4, 0x70, 0x47, 0xf2, 0x35,
0xd7, 0x5f, 0x60, 0xe6, 0x97, 0xb7, 0x5d, 0xe3, 0x98, 0xb9, 0x61, 0x51, 0xf2, 0x04, 0xb6, 0x18,
0x86, 0x69, 0x89, 0xdf, 0x59, 0x9b, 0xa7, 0xa8, 0x48, 0xbd, 0x6e, 0x1c, 0x93, 0x9c, 0x8a, 0x3c,
0x83, 0xaa, 0xf4, 0x41, 0x74, 0x02, 0xe4, 0x78, 0x3f, 0xc3, 0x11, 0x66, 0x79, 0xc1, 0x15, 0x51,
0x93, 0x97, 0x50, 0xa3, 0xb6, 0xce, 0x1c, 0xc3, 0xf6, 0x43, 0x07, 0xb9, 0x9d, 0x61, 0x1d, 0x86,
0xeb, 0x82, 0x37, 0xa6, 0x27, 0x4f, 0xa1, 0xe2, 0xd1, 0xa5, 0x4b, 0x7d, 0xe1, 0x17, 0xf5, 0xc3,
0xf7, 0xd6, 0xa4, 0xf2, 0x55, 0x19, 0x91, 0x92, 0x16, 0x65, 0x1a, 0xf6, 0x85, 0x4b, 0x3d, 0x8f,
0x7a, 0xed, 0x5a, 0xae, 0xcc, 0x51, 0xb8, 0x2e, 0x65, 0x46, 0xf4, 0xa4, 0x07, 0x75, 0x97, 0x32,
0xd3, 0x58, 0x6a, 0x3e, 0x9a, 0x1e, 0x38, 0xfb, 0x9d, 0x0c, 0xbb, 0x1a, 0x53, 0xc8, 0xd4, 0x95,
0xe0, 0x21, 0x07, 0x51, 0x01, 0xaa, 0x73, 0xb3, 0x87, 0x15, 0xe6, 0x33, 0xa8, 0x7d, 0x5f, 0x2e,
0xbb, 0xb2, 0xbe, 0x74, 0x5e, 0x46, 0x59, 0xe2, 0xbf, 0x60, 0x7e, 0x05, 0xcd, 0xb4, 0x85, 0xdf,
0x89, 0xfb, 0x05, 0x6c, 0x27, 0x8d, 0xfc, 0xae, 0x92, 0xd3, 0x76, 0x7e, 0x27, 0xee, 0xcf, 0xa1,
0x95, 0x35, 0xf3, 0x3b, 0x15, 0xe5, 0xbf, 0x6e, 0x42, 0x33, 0xec, 0x23, 0x3c, 0x27, 0x70, 0x97,
0x34, 0x1b, 0xa5, 0x85, 0x6c, 0x94, 0x62, 0x7a, 0x45, 0x82, 0x64, 0x98, 0x57, 0x97, 0x2c, 0x10,
0x31, 0x7e, 0x1f, 0x9a, 0x32, 0x0d, 0xa4, 0xc3, 0xbc, 0x21, 0xb0, 0xe1, 0x1e, 0xd9, 0x6c, 0xb1,
0xb5, 0x9e, 0x2d, 0x1e, 0xc0, 0x8e, 0x1b, 0xd8, 0xb6, 0x61, 0x5f, 0x2c, 0xb0, 0xcb, 0xb2, 0x03,
0x8b, 0x67, 0xdd, 0xa2, 0xda, 0x90, 0xe8, 0x1e, 0x63, 0x93, 0xc0, 0x22, 0x9f, 0xc0, 0x7e, 0x92,
0xce, 0xff, 0xda, 0x70, 0x75, 0x4e, 0x0d, 0x9c, 0x9a, 0xc4, 0xd4, 0x73, 0x5c, 0x42, 0x96, 0xcf,
0xa0, 0x9d, 0x64, 0x31, 0x6c, 0x9f, 0xba, 0xb6, 0x66, 0x72, 0xae, 0x3a, 0xe7, 0xda, 0x8f, 0xb9,
0x46, 0x72, 0x75, 0x12, 0x58, 0xca, 0x5f, 0x0a, 0x40, 0xd2, 0xe6, 0xe2, 0x55, 0xbd, 0x0f, 0x35,
0x57, 0xc2, 0x61, 0x71, 0xbc, 0x8f, 0xc1, 0xb0, 0x4e, 0xda, 0x0d, 0x81, 0x30, 0xa6, 0x22, 0xbe,
0xce, 0x14, 0x9a, 0xe9, 0xc5, 0x9c, 0x8b, 0x7c, 0x98, 0xce, 0xe0, 0x64, 0x5d, 0x48, 0xf2, 0x72,
0x7f, 0x5f, 0x80, 0x5b, 0x3d, 0x5d, 0xe7, 0xc7, 0x9e, 0x6a, 0xae, 0xbf, 0x8a, 0x5c, 0x1c, 0xbb,
0x57, 0x02, 0x5b, 0x41, 0x10, 0x95, 0x4f, 0xfe, 0x8d, 0x12, 0xbd, 0xa8, 0x66, 0xe2, 0x27, 0x69,
0xc2, 0xa6, 0xc1, 0x64, 0xe6, 0xdc, 0x34, 0x18, 0x72, 0x31, 0xc7, 0x15, 0x17, 0x56, 0x52, 0xf9,
0x37, 0x3a, 0x84, 0xe1, 0x2d, 0x1c, 0xdb, 0x34, 0x6c, 0xca, 0xef, 0xa8, 0xaa, 0x56, 0x0d, 0xef,
0x94, 0xc3, 0x5c, 0x89, 0x33, 0xf6, 0x03, 0x2b, 0x41, 0xe1, 0xd6, 0x80, 0x9a, 0xff, 0x6f, 0x1d,
0x94, 0x3f, 0xa2, 0x7b, 0xac, 0x09, 0xf9, 0x1f, 0x1e, 0x32, 0x4e, 0x9a, 0xa5, 0x64, 0xd2, 0x4c,
0x1f, 0xbe, 0x9c, 0x39, 0xfc, 0xcf, 0xe0, 0x46, 0xce, 0xc9, 0xc9, 0x43, 0x28, 0x3a, 0xe7, 0xbf,
0x91, 0xee, 0x7a, 0xc0, 0x3d, 0x69, 0x8d, 0x4a, 0x45, 0x12, 0xe5, 0x1e, 0xb4, 0xd0, 0x77, 0x31,
0x2d, 0x1f, 0xad, 0x66, 0xa3, 0x01, 0x1a, 0x4d, 0xea, 0x5f, 0x88, 0xf4, 0x57, 0x3e, 0x87, 0x9d,
0x63, 0x8a, 0x44, 0x03, 0xea, 0x6b, 0x86, 0x99, 0x4b, 0x94, 0x6a, 0xae, 0x36, 0x53, 0xcd, 0x95,
0x72, 0x0e, 0xd5, 0xa9, 0xa3, 0x0f, 0x2f, 0xa9, 0xb0, 0x18, 0xef, 0xce, 0xa4, 0xc5, 0xf0, 0x1b,
0xcf, 0xee, 0x52, 0xcd, 0x73, 0x6c, 0xc9, 0x28, 0x21, 0x14, 0xa2, 0x5d, 0x84, 0x8d, 0x1c, 0x7e,
0x92, 0x36, 0x54, 0x2c, 0x31, 0x45, 0x48, 0x33, 0x85, 0xa0, 0xf2, 0xed, 0x26, 0xaf, 0x2e, 0xb2,
0x31, 0x7b, 0x90, 0x90, 0xd2, 0x14, 0xc1, 0x14, 0x2d, 0x76, 0xb1, 0x17, 0xbc, 0x46, 0x72, 0x42,
0x4e, 0x31, 0x25, 0x07, 0x39, 0x34, 0x1d, 0x4b, 0x91, 0xec, 0x29, 0x24, 0x84, 0xc7, 0xc7, 0x1d,
0x17, 0x9e, 0xef, 0x86, 0xaa, 0x21, 0x3c, 0xf3, 0x5d, 0xe5, 0x4f, 0x05, 0xd8, 0xe2, 0xfd, 0x67,
0x1d, 0x2a, 0xd3, 0xe1, 0x64, 0x30, 0x9a, 0x1c, 0xb7, 0x36, 0x10, 0x50, 0xcf, 0x26, 0x13, 0x04,
0x0a, 0xa4, 0x01, 0xb5, 0xd9, 0x59, 0xbf, 0x3f, 0x1c, 0x0e, 0x86, 0x83, 0xd6, 0x26, 0x01, 0x28,
0x7f, 0xd1, 0x1b, 0x8d, 0x87, 0x83, 0x56, 0x11, 0xe9, 0xce, 0x26, 0xbf, 0x98, 0x9c, 0xfe, 0x6a,
0xd2, 0xda, 0x22, 0x4d, 0x80, 0xf9, 0xf0, 0x64, 0x34, 0xe9, 0xcd, 0x91, 0xaf, 0x44, 0xb6, 0xa1,
0xda, 0x3b, 0x9a, 0x9c, 0xaa, 0x27, 0xbd, 0x71, 0xab, 0x8c, 0xab, 0xa3, 0xc9, 0x68, 0x3e, 0x12,
0xab, 0x15, 0x84, 0x67, 0xfd, 0xd7, 0xc3, 0xc1, 0xd9, 0x18, 0xe1, 0x2a, 0x52, 0x4f, 0x4e, 0xe7,
0xea, 0xb0, 0x37, 0xf8, 0xb2, 0x55, 0x43, 0x99, 0x67, 0x93, 0xd7, 0xc3, 0xde, 0x78, 0xfe, 0xfa,
0xcb, 0x16, 0x28, 0xff, 0x2a, 0xf0, 0x46, 0x3e, 0xee, 0x0e, 0xf7, 0xa0, 0x64, 0x58, 0x68, 0x01,
0x39, 0x02, 0x73, 0x00, 0xb1, 0xbc, 0x0f, 0x0b, 0x0b, 0x0e, 0x07, 0x12, 0x76, 0x2c, 0x66, 0xed,
0xc8, 0x7b, 0x2e, 0xaa, 0x87, 0x0d, 0xb7, 0x04, 0xb1, 0x4c, 0xf0, 0xfa, 0xb0, 0x10, 0x85, 0x41,
0xda, 0xac, 0xce, 0x71, 0x27, 0x1c, 0x85, 0xae, 0x2f, 0x48, 0x96, 0x2c, 0x90, 0xbd, 0x77, 0x95,
0x23, 0xfa, 0x2c, 0xc0, 0x6a, 0x24, 0xcb, 0x50, 0xb8, 0x43, 0x45, 0xf4, 0xae, 0x12, 0x2b, 0xf7,
0xb8, 0x83, 0xed, 0x8c, 0x20, 0xc3, 0x5d, 0xaa, 0xa2, 0x4f, 0x94, 0xa8, 0x3e, 0x0b, 0x94, 0x7f,
0x0a, 0xbf, 0x11, 0x9e, 0x8d, 0xde, 0x99, 0xe8, 0x83, 0xf9, 0x37, 0xc7, 0x39, 0x7a, 0x78, 0x60,
0xfe, 0x9d, 0xe9, 0x2e, 0x8b, 0xd9, 0xee, 0xf2, 0x7e, 0x14, 0xcc, 0x5b, 0x71, 0x3f, 0x1e, 0x39,
0x60, 0x14, 0xdb, 0x22, 0x2f, 0x94, 0xa2, 0xbc, 0x70, 0x13, 0x2a, 0xb8, 0x3b, 0x4e, 0x21, 0xe2,
0xb8, 0x65, 0x04, 0x47, 0x0c, 0xcd, 0x78, 0x49, 0x5d, 0xcf, 0x70, 0x6c, 0x79, 0xca, 0x10, 0x24,
0xcf, 0x61, 0xc7, 0xb0, 0xd1, 0x44, 0xf1, 0x18, 0x22, 0x5a, 0xc5, 0x96, 0x14, 0x19, 0x4f, 0x01,
0x4d, 0x24, 0x8c, 0x47, 0x09, 0xf2, 0x71, 0x6a, 0x78, 0xa9, 0x5d, 0xc1, 0x95, 0x9c, 0x55, 0xee,
0x41, 0x99, 0x62, 0x10, 0x7b, 0xb2, 0x2d, 0xdc, 0x96, 0xd4, 0x3c, 0xb2, 0x55, 0xb9, 0xa6, 0xbc,
0x82, 0xe6, 0xcc, 0x77, 0x5c, 0xed, 0x82, 0xf6, 0x4d, 0x8d, 0xf7, 0x94, 0x8f, 0x60, 0xcb, 0x34,
0x78, 0xc3, 0x11, 0x25, 0xa4, 0x24, 0x85, 0xcc, 0x2a, 0x9c, 0x46, 0xf9, 0x73, 0x11, 0xc8, 0xfa,
0x62, 0xee, 0xc5, 0xdc, 0x85, 0x3a, 0x73, 0x9d, 0x4b, 0x03, 0x0d, 0x41, 0x5d, 0x79, 0x3f, 0x49,
0x14, 0xf9, 0x02, 0x80, 0x69, 0xae, 0x66, 0x51, 0x1f, 0x8f, 0x58, 0xe4, 0xe2, 0x1f, 0xe4, 0x8b,
0xef, 0x4e, 0x23, 0x42, 0x39, 0xa4, 0xc5, 0x9c, 0xc2, 0xd9, 0x96, 0xa6, 0x66, 0x58, 0x0b, 0xe6,
0x98, 0xc6, 0x72, 0x25, 0xbd, 0xb9, 0x21, 0xb1, 0x53, 0x8e, 0x24, 0x9f, 0xc2, 0x81, 0x66, 0x9a,
0xce, 0x37, 0x72, 0x9a, 0x5b, 0xd0, 0xdf, 0x32, 0xcd, 0xe6, 0xb7, 0x26, 0xaa, 0xd6, 0x1e, 0x5f,
0x15, 0x83, 0xdd, 0x30, 0x5c, 0x23, 0x5d, 0xb8, 0x21, 0xe9, 0xcf, 0x0d, 0x5b, 0xc7, 0xce, 0xc5,
0x42, 0x77, 0x13, 0x1e, 0xb0, 0x2b, 0x96, 0x8e, 0xc4, 0xca, 0x09, 0xfa, 0xde, 0x31, 0x10, 0xbe,
0x0f, 0xd5, 0x17, 0xbe, 0xc3, 0x1c, 0xd3, 0xb9, 0x30, 0x68, 0x38, 0x5b, 0xf0, 0x41, 0x66, 0x2e,
0xb0, 0xab, 0x19, 0x35, 0xe9, 0xd2, 0x77, 0xdc, 0x39, 0x75, 0x2d, 0x75, 0x57, 0xf2, 0xcc, 0x23,
0x96, 0xce, 0x4f, 0x61, 0x27, 0x73, 0xe8, 0x77, 0x6a, 0x30, 0x7d, 0xd8, 0xcb, 0x93, 0x44, 0x7e,
0x0d, 0x37, 0x2d, 0xcd, 0x5f, 0x7e, 0xbd, 0x30, 0xb5, 0x73, 0x6a, 0xa2, 0x11, 0xb0, 0x05, 0x36,
0x1c, 0x3b, 0x6c, 0xa0, 0xee, 0xe5, 0x29, 0x39, 0x46, 0x62, 0xec, 0x21, 0x0d, 0x97, 0xe2, 0x00,
0xa7, 0xee, 0xf3, 0x4d, 0x38, 0x7a, 0x18, 0x6f, 0xa1, 0x8c, 0xe1, 0xee, 0x75, 0xac, 0x39, 0xa7,
0x38, 0x80, 0x32, 0x57, 0x5c, 0xbc, 0xf1, 0xd4, 0x54, 0x09, 0x29, 0x7f, 0x2b, 0x40, 0x47, 0x8e,
0x16, 0xe2, 0x5a, 0xd2, 0x4f, 0x69, 0x47, 0x99, 0xa7, 0xb4, 0x47, 0x89, 0xd9, 0x3e, 0x87, 0x3e,
0xf7, 0x5d, 0x4d, 0xbd, 0xee, 0x5d, 0xed, 0xc7, 0x49, 0x0b, 0x37, 0x0f, 0x6f, 0x5e, 0x21, 0x23,
0x69, 0xfa, 0xbf, 0x17, 0xa0, 0x16, 0xbd, 0x57, 0x92, 0x27, 0x09, 0x2d, 0x71, 0x87, 0x3d, 0xdc,
0x21, 0x5a, 0xee, 0x66, 0x92, 0x4e, 0x0b, 0x8a, 0x98, 0x09, 0x45, 0x77, 0x8f, 0x9f, 0x68, 0x1c,
0x99, 0x42, 0x45, 0x43, 0x2f, 0x21, 0x65, 0x0e, 0x65, 0x29, 0xa1, 0x02, 0xc5, 0xc9, 0x68, 0x9c,
0x2d, 0x5a, 0x00, 0xe5, 0xfe, 0xf8, 0x74, 0xc6, 0x2b, 0x56, 0xb2, 0x10, 0x15, 0x11, 0x9a, 0xcd,
0x7b, 0x2a, 0x2f, 0x43, 0x5b, 0x02, 0x3a, 0x9d, 0x4e, 0x79, 0xc9, 0x7a, 0xf4, 0x11, 0xdc, 0xc8,
0x39, 0x1d, 0xa9, 0x41, 0x49, 0x14, 0xa6, 0x0d, 0x2c, 0x4c, 0x93, 0xd3, 0xf9, 0x42, 0x80, 0x85,
0xc3, 0x7f, 0x54, 0xa0, 0xd9, 0x63, 0x4c, 0x15, 0x8f, 0xb8, 0xb3, 0x95, 0xbd, 0x24, 0x47, 0x70,
0x70, 0x4c, 0xfd, 0xe8, 0x88, 0x03, 0xca, 0x5c, 0xba, 0xd4, 0xb0, 0xac, 0xdc, 0x48, 0x58, 0x2f,
0x7c, 0x72, 0xed, 0xec, 0xae, 0xbd, 0x80, 0x2a, 0x1b, 0xe4, 0x13, 0xd8, 0x4e, 0xee, 0x41, 0x5a,
0x29, 0xab, 0xa9, 0xf4, 0x6d, 0xa7, 0x91, 0xc2, 0x28, 0x1b, 0xe4, 0x39, 0x80, 0x60, 0xe1, 0x0f,
0x87, 0x24, 0x21, 0x2a, 0x94, 0x94, 0xff, 0x00, 0xa7, 0x6c, 0x90, 0x01, 0x6f, 0xa1, 0xf8, 0x4b,
0x60, 0xc8, 0x9f, 0xab, 0x6a, 0xe7, 0xea, 0x07, 0x43, 0x65, 0x83, 0x1c, 0xc1, 0x8d, 0x63, 0xea,
0xaf, 0xbd, 0xdf, 0xe5, 0xee, 0xb4, 0x97, 0xf7, 0x86, 0xa7, 0x6c, 0x90, 0xa7, 0xd0, 0x38, 0xa6,
0x7e, 0xe2, 0x2d, 0x26, 0xef, 0x1c, 0xcd, 0xf4, 0xc0, 0xaf, 0x6c, 0x90, 0x57, 0xb0, 0x7b, 0x4c,
0xfd, 0xcc, 0x40, 0xb9, 0x9b, 0x9c, 0x52, 0x04, 0x67, 0xce, 0xe0, 0xc2, 0x2d, 0x47, 0xd6, 0xb8,
0x3d, 0x52, 0x43, 0x5a, 0xfe, 0x00, 0xdf, 0x39, 0xc8, 0x1f, 0xaa, 0x94, 0x0d, 0xf2, 0x1a, 0x6e,
0xe2, 0x57, 0x5e, 0x9f, 0x9b, 0xa7, 0xf9, 0xcd, 0xfc, 0x76, 0x17, 0x4f, 0xde, 0x87, 0xfd, 0xdc,
0x99, 0x89, 0xf0, 0xd7, 0x91, 0x2b, 0xc7, 0xa9, 0x4e, 0xac, 0xa6, 0xd8, 0x24, 0x77, 0xe6, 0x11,
0x9b, 0x5c, 0x39, 0x0e, 0xad, 0x6d, 0x92, 0x3b, 0xb4, 0x10, 0xf9, 0x4e, 0x63, 0xfe, 0x27, 0x9b,
0x7c, 0xca, 0x1d, 0x38, 0xee, 0x5d, 0xb8, 0x17, 0x64, 0xfa, 0xf4, 0x4e, 0xd8, 0x79, 0x08, 0x0c,
0xe7, 0xc2, 0x7b, 0xcc, 0x14, 0xe8, 0xc4, 0x45, 0x90, 0x6c, 0x79, 0xa4, 0x68, 0xba, 0x9f, 0xf3,
0xfb, 0xeb, 0x31, 0x96, 0x8a, 0xd9, 0x3c, 0xfb, 0x7f, 0xf0, 0xfd, 0x29, 0x52, 0xd9, 0x38, 0x2f,
0xf3, 0xff, 0x5f, 0x7e, 0xf2, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0xec, 0xf0, 0x5c, 0x78, 0x9b,
0x19, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConnInterface
var _ grpc.ClientConn
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion6
const _ = grpc.SupportPackageIsVersion4
// AppRuntimeSyncClient is the client API for AppRuntimeSync service.
//
@ -2164,6 +2205,7 @@ type AppRuntimeSyncClient interface {
GetAppStatus(ctx context.Context, in *AppStatusReq, opts ...grpc.CallOption) (*AppStatus, error)
GetAppPods(ctx context.Context, in *ServiceRequest, opts ...grpc.CallOption) (*ServiceAppPodList, error)
GetMultiAppPods(ctx context.Context, in *ServicesRequest, opts ...grpc.CallOption) (*MultiServiceAppPodList, error)
GetComponentPodNums(ctx context.Context, in *ServicesRequest, opts ...grpc.CallOption) (*ComponentPodNums, error)
GetDeployInfo(ctx context.Context, in *ServiceRequest, opts ...grpc.CallOption) (*DeployInfo, error)
GetTenantResource(ctx context.Context, in *TenantRequest, opts ...grpc.CallOption) (*TenantResource, error)
GetTenantResources(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*TenantResourceList, error)
@ -2177,10 +2219,10 @@ type AppRuntimeSyncClient interface {
}
type appRuntimeSyncClient struct {
cc grpc.ClientConnInterface
cc *grpc.ClientConn
}
func NewAppRuntimeSyncClient(cc grpc.ClientConnInterface) AppRuntimeSyncClient {
func NewAppRuntimeSyncClient(cc *grpc.ClientConn) AppRuntimeSyncClient {
return &appRuntimeSyncClient{cc}
}
@ -2220,6 +2262,15 @@ func (c *appRuntimeSyncClient) GetMultiAppPods(ctx context.Context, in *Services
return out, nil
}
func (c *appRuntimeSyncClient) GetComponentPodNums(ctx context.Context, in *ServicesRequest, opts ...grpc.CallOption) (*ComponentPodNums, error) {
out := new(ComponentPodNums)
err := c.cc.Invoke(ctx, "/pb.AppRuntimeSync/GetComponentPodNums", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *appRuntimeSyncClient) GetDeployInfo(ctx context.Context, in *ServiceRequest, opts ...grpc.CallOption) (*DeployInfo, error) {
out := new(DeployInfo)
err := c.cc.Invoke(ctx, "/pb.AppRuntimeSync/GetDeployInfo", in, out, opts...)
@ -2317,6 +2368,7 @@ type AppRuntimeSyncServer interface {
GetAppStatus(context.Context, *AppStatusReq) (*AppStatus, error)
GetAppPods(context.Context, *ServiceRequest) (*ServiceAppPodList, error)
GetMultiAppPods(context.Context, *ServicesRequest) (*MultiServiceAppPodList, error)
GetComponentPodNums(context.Context, *ServicesRequest) (*ComponentPodNums, error)
GetDeployInfo(context.Context, *ServiceRequest) (*DeployInfo, error)
GetTenantResource(context.Context, *TenantRequest) (*TenantResource, error)
GetTenantResources(context.Context, *Empty) (*TenantResourceList, error)
@ -2329,53 +2381,6 @@ type AppRuntimeSyncServer interface {
GetAppVolumeStatus(context.Context, *ServiceRequest) (*ServiceVolumeStatusMessage, error)
}
// UnimplementedAppRuntimeSyncServer can be embedded to have forward compatible implementations.
type UnimplementedAppRuntimeSyncServer struct {
}
func (*UnimplementedAppRuntimeSyncServer) GetAppStatusDeprecated(ctx context.Context, req *ServicesRequest) (*StatusMessage, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetAppStatusDeprecated not implemented")
}
func (*UnimplementedAppRuntimeSyncServer) GetAppStatus(ctx context.Context, req *AppStatusReq) (*AppStatus, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetAppStatus not implemented")
}
func (*UnimplementedAppRuntimeSyncServer) GetAppPods(ctx context.Context, req *ServiceRequest) (*ServiceAppPodList, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetAppPods not implemented")
}
func (*UnimplementedAppRuntimeSyncServer) GetMultiAppPods(ctx context.Context, req *ServicesRequest) (*MultiServiceAppPodList, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetMultiAppPods not implemented")
}
func (*UnimplementedAppRuntimeSyncServer) GetDeployInfo(ctx context.Context, req *ServiceRequest) (*DeployInfo, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetDeployInfo not implemented")
}
func (*UnimplementedAppRuntimeSyncServer) GetTenantResource(ctx context.Context, req *TenantRequest) (*TenantResource, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetTenantResource not implemented")
}
func (*UnimplementedAppRuntimeSyncServer) GetTenantResources(ctx context.Context, req *Empty) (*TenantResourceList, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetTenantResources not implemented")
}
func (*UnimplementedAppRuntimeSyncServer) ListThirdPartyEndpoints(ctx context.Context, req *ServiceRequest) (*ThirdPartyEndpoints, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListThirdPartyEndpoints not implemented")
}
func (*UnimplementedAppRuntimeSyncServer) AddThirdPartyEndpoint(ctx context.Context, req *AddThirdPartyEndpointsReq) (*Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method AddThirdPartyEndpoint not implemented")
}
func (*UnimplementedAppRuntimeSyncServer) UpdThirdPartyEndpoint(ctx context.Context, req *UpdThirdPartyEndpointsReq) (*Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method UpdThirdPartyEndpoint not implemented")
}
func (*UnimplementedAppRuntimeSyncServer) DelThirdPartyEndpoint(ctx context.Context, req *DelThirdPartyEndpointsReq) (*Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method DelThirdPartyEndpoint not implemented")
}
func (*UnimplementedAppRuntimeSyncServer) GetPodDetail(ctx context.Context, req *GetPodDetailReq) (*PodDetail, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetPodDetail not implemented")
}
func (*UnimplementedAppRuntimeSyncServer) GetStorageClasses(ctx context.Context, req *Empty) (*StorageClasses, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetStorageClasses not implemented")
}
func (*UnimplementedAppRuntimeSyncServer) GetAppVolumeStatus(ctx context.Context, req *ServiceRequest) (*ServiceVolumeStatusMessage, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetAppVolumeStatus not implemented")
}
func RegisterAppRuntimeSyncServer(s *grpc.Server, srv AppRuntimeSyncServer) {
s.RegisterService(&_AppRuntimeSync_serviceDesc, srv)
}
@ -2452,6 +2457,24 @@ func _AppRuntimeSync_GetMultiAppPods_Handler(srv interface{}, ctx context.Contex
return interceptor(ctx, in, info, handler)
}
func _AppRuntimeSync_GetComponentPodNums_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ServicesRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(AppRuntimeSyncServer).GetComponentPodNums(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/pb.AppRuntimeSync/GetComponentPodNums",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(AppRuntimeSyncServer).GetComponentPodNums(ctx, req.(*ServicesRequest))
}
return interceptor(ctx, in, info, handler)
}
func _AppRuntimeSync_GetDeployInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ServiceRequest)
if err := dec(in); err != nil {
@ -2652,6 +2675,10 @@ var _AppRuntimeSync_serviceDesc = grpc.ServiceDesc{
MethodName: "GetMultiAppPods",
Handler: _AppRuntimeSync_GetMultiAppPods_Handler,
},
{
MethodName: "GetComponentPodNums",
Handler: _AppRuntimeSync_GetComponentPodNums_Handler,
},
{
MethodName: "GetDeployInfo",
Handler: _AppRuntimeSync_GetDeployInfo_Handler,

View File

@ -7,6 +7,7 @@ service AppRuntimeSync {
rpc GetAppStatus (AppStatusReq) returns (AppStatus) {}
rpc GetAppPods (ServiceRequest) returns (ServiceAppPodList) {}
rpc GetMultiAppPods (ServicesRequest) returns (MultiServiceAppPodList) {}
rpc GetComponentPodNums (ServicesRequest) returns (ComponentPodNums) {}
rpc GetDeployInfo (ServiceRequest) returns (DeployInfo) {}
rpc GetTenantResource (TenantRequest) returns (TenantResource) {}
rpc GetTenantResources (Empty) returns (TenantResourceList) {}
@ -52,6 +53,10 @@ message MultiServiceAppPodList {
map<string, ServiceAppPodList> servicePods = 1;
}
message ComponentPodNums {
map<string, int32> podNums = 1;
}
message ServiceAppPod {
string service_id = 1;
string deploy_id = 2;

View File

@ -230,6 +230,10 @@ func (r *RuntimeServer) GetAppPods(ctx context.Context, re *pb.ServiceRequest) (
//GetMultiAppPods get multi app pods
func (r *RuntimeServer) GetMultiAppPods(ctx context.Context, re *pb.ServicesRequest) (*pb.MultiServiceAppPodList, error) {
serviceIDs := strings.Split(re.ServiceIds, ",")
if logrus.IsLevelEnabled(logrus.DebugLevel) {
defer util.Elapsed(fmt.Sprintf("[RuntimeServer] [GetMultiAppPods] componnt nums: %d ", len(serviceIDs)))()
}
var res pb.MultiServiceAppPodList
res.ServicePods = make(map[string]*pb.ServiceAppPodList, len(serviceIDs))
for _, id := range serviceIDs {
@ -245,6 +249,28 @@ func (r *RuntimeServer) GetMultiAppPods(ctx context.Context, re *pb.ServicesRequ
return &res, nil
}
// GetComponentNums -
func (r *RuntimeServer) GetComponentPodNums(ctx context.Context, re *pb.ServicesRequest) (*pb.ComponentPodNums, error) {
serviceIDs := strings.Split(re.ServiceIds, ",")
if logrus.IsLevelEnabled(logrus.DebugLevel) {
defer util.Elapsed(fmt.Sprintf("[RuntimeServer] [GetComponentNums] componnt nums: %d ", len(serviceIDs)))()
}
podNums := make(map[string]int32)
for _, componentID := range serviceIDs {
app := r.store.GetAppService(componentID)
if app == nil {
podNums[componentID] = 0
} else {
pods := app.GetPods(false)
podNums[componentID] = int32(len(pods))
}
}
return &pb.ComponentPodNums{
PodNums: podNums,
}, nil
}
// translateTimestampSince returns the elapsed time since timestamp in
// human-readable approximation.
func translateTimestampSince(timestamp metav1.Time) string {