mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
adding img pull stats (#1541)
adding image pull time and pull retries with changes in docker cookie adding extra proto fields in callfinished and runnerstatus to add the img stats adding fields in pure runner and runner_client
This commit is contained in:
@@ -888,9 +888,9 @@ func (a *agent) runHot(ctx context.Context, caller slotCaller, call *call, tok R
|
||||
if needsPull {
|
||||
waitStart := time.Now()
|
||||
pullCtx, pullCancel := context.WithTimeout(ctx, a.cfg.HotPullTimeout)
|
||||
err = cookie.PullImage(pullCtx)
|
||||
pullResult := cookie.PullImage(pullCtx)
|
||||
pullCancel()
|
||||
if err != nil && pullCtx.Err() == context.DeadlineExceeded {
|
||||
if err = pullResult.Err; err != nil && pullCtx.Err() == context.DeadlineExceeded {
|
||||
err = models.ErrDockerPullTimeout
|
||||
}
|
||||
if tryQueueErr(err, errQueue) == nil {
|
||||
@@ -901,6 +901,8 @@ func (a *agent) runHot(ctx context.Context, caller slotCaller, call *call, tok R
|
||||
}
|
||||
}
|
||||
atomic.StoreInt64(&call.imagePullWaitTime, int64(time.Since(waitStart)/time.Millisecond))
|
||||
atomic.StoreInt64(&call.imagePullTime, int64(pullResult.Duration/time.Millisecond))
|
||||
atomic.StoreInt32(&call.imagePullRetries, pullResult.Retries)
|
||||
}
|
||||
if tryQueueErr(err, errQueue) != nil {
|
||||
return
|
||||
|
||||
@@ -306,6 +306,12 @@ type call struct {
|
||||
// Init wait start timestamp for goroutine in runHot
|
||||
initStartTime int64
|
||||
|
||||
// amount of time attributed to image pull
|
||||
imagePullTime int64
|
||||
|
||||
// amount of time attributed to image pull
|
||||
imagePullRetries int32
|
||||
|
||||
// LB & Pure Runner Extra Config
|
||||
extensions map[string]string
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import (
|
||||
"net/http"
|
||||
"path"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/fnproject/fn/api/agent/drivers"
|
||||
"github.com/fnproject/fn/api/common"
|
||||
@@ -450,15 +451,15 @@ func (c *cookie) ValidateImage(ctx context.Context) (bool, error) {
|
||||
}
|
||||
|
||||
// implements Cookie
|
||||
func (c *cookie) PullImage(ctx context.Context) error {
|
||||
func (c *cookie) PullImage(ctx context.Context) drivers.PullResult {
|
||||
ctx, log := common.LoggerWithFields(ctx, logrus.Fields{"stack": "PullImage"})
|
||||
if c.image != nil {
|
||||
return nil
|
||||
return drivers.PullResult{Err: nil, Retries: 0, Duration: 0 * time.Second}
|
||||
}
|
||||
|
||||
cfg, err := c.authImage(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
return drivers.PullResult{Err: err, Retries: 0, Duration: 0 * time.Second}
|
||||
}
|
||||
|
||||
repo := path.Join(c.imgReg, c.imgRepo)
|
||||
@@ -467,8 +468,8 @@ func (c *cookie) PullImage(ctx context.Context) error {
|
||||
log.WithFields(logrus.Fields{"call_id": c.task.Id(), "image": c.task.Image()}).Debug("docker pull")
|
||||
ctx = common.WithLogger(ctx, log)
|
||||
|
||||
errC := c.drv.imgPuller.PullImage(ctx, cfg, c.task.Image(), repo, c.imgTag)
|
||||
return <-errC
|
||||
pullRes := c.drv.imgPuller.PullImage(ctx, cfg, c.task.Image(), repo, c.imgTag)
|
||||
return <-pullRes
|
||||
}
|
||||
|
||||
// implements Cookie
|
||||
|
||||
@@ -79,7 +79,8 @@ func commonCookiePull(ctx context.Context, cookie drivers.Cookie) error {
|
||||
return err
|
||||
}
|
||||
if shouldPull {
|
||||
err = cookie.PullImage(ctx)
|
||||
pullRes := cookie.PullImage(ctx)
|
||||
err = pullRes.Err
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ import (
|
||||
// any new requests are added as listeners to the ongoing docker-pull requests.
|
||||
|
||||
type ImagePuller interface {
|
||||
PullImage(ctx context.Context, cfg *docker.AuthConfiguration, img, repo, tag string) chan error
|
||||
PullImage(ctx context.Context, cfg *docker.AuthConfiguration, img, repo, tag string) chan drivers.PullResult
|
||||
SetRetryPolicy(policy common.BackOffConfig, checker drivers.RetryErrorChecker) error
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ type transfer struct {
|
||||
repo string
|
||||
tag string
|
||||
|
||||
listeners []chan error
|
||||
listeners []chan drivers.PullResult
|
||||
}
|
||||
|
||||
type imagePuller struct {
|
||||
@@ -68,7 +68,7 @@ func (i *imagePuller) SetRetryPolicy(policy common.BackOffConfig, checker driver
|
||||
}
|
||||
|
||||
// newTransfer initiates a new docker-pull if there's no active docker-pull present for the same image.
|
||||
func (i *imagePuller) newTransfer(ctx context.Context, cfg *docker.AuthConfiguration, img, repo, tag string) chan error {
|
||||
func (i *imagePuller) newTransfer(ctx context.Context, cfg *docker.AuthConfiguration, img, repo, tag string) chan drivers.PullResult {
|
||||
|
||||
key := fmt.Sprintf("%s %s %+v", repo, tag, cfg)
|
||||
|
||||
@@ -83,13 +83,13 @@ func (i *imagePuller) newTransfer(ctx context.Context, cfg *docker.AuthConfigura
|
||||
img: img,
|
||||
repo: repo,
|
||||
tag: tag,
|
||||
listeners: make([]chan error, 0, 1),
|
||||
listeners: make([]chan drivers.PullResult, 0, 1),
|
||||
}
|
||||
i.transfers[key] = trx
|
||||
}
|
||||
|
||||
errC := make(chan error, 1)
|
||||
trx.listeners = append(trx.listeners, errC)
|
||||
pullRes := make(chan drivers.PullResult, 1)
|
||||
trx.listeners = append(trx.listeners, pullRes)
|
||||
|
||||
i.lock.Unlock()
|
||||
|
||||
@@ -98,41 +98,42 @@ func (i *imagePuller) newTransfer(ctx context.Context, cfg *docker.AuthConfigura
|
||||
go i.startTransfer(trx)
|
||||
}
|
||||
|
||||
return errC
|
||||
return pullRes
|
||||
}
|
||||
|
||||
func (i *imagePuller) pullWithRetry(trx *transfer) error {
|
||||
func (i *imagePuller) pullWithRetry(trx *transfer) (error, int32, time.Duration) {
|
||||
backoff := common.NewBackOff(i.backOffCfg)
|
||||
timer := common.NewTimer(time.Duration(i.backOffCfg.MinDelay) * time.Millisecond)
|
||||
defer timer.Stop()
|
||||
|
||||
var retries int32
|
||||
startTime := time.Now()
|
||||
for {
|
||||
err := i.docker.PullImage(docker.PullImageOptions{Repository: trx.repo, Tag: trx.tag, Context: trx.ctx}, *trx.cfg)
|
||||
ok, reason := i.isRetriable(err)
|
||||
if !ok {
|
||||
return err
|
||||
return err, retries, time.Since(startTime)
|
||||
}
|
||||
|
||||
delay, ok := backoff.NextBackOff()
|
||||
if !ok {
|
||||
return err
|
||||
return err, retries, time.Since(startTime)
|
||||
}
|
||||
|
||||
timer.Reset(delay)
|
||||
|
||||
select {
|
||||
case <-timer.C:
|
||||
retries += 1
|
||||
recordRetry(trx.ctx, "docker_pull_image", reason)
|
||||
case <-trx.ctx.Done():
|
||||
return trx.ctx.Err()
|
||||
return trx.ctx.Err(), retries, time.Since(startTime)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *imagePuller) startTransfer(trx *transfer) {
|
||||
var ferr error
|
||||
|
||||
err := i.pullWithRetry(trx)
|
||||
err, retries, duration := i.pullWithRetry(trx)
|
||||
if err != nil {
|
||||
common.Logger(trx.ctx).WithError(err).Info("Failed to pull image")
|
||||
|
||||
@@ -157,7 +158,7 @@ func (i *imagePuller) startTransfer(trx *transfer) {
|
||||
// notify any listeners
|
||||
for _, ch := range trx.listeners {
|
||||
if ferr != nil {
|
||||
ch <- ferr
|
||||
ch <- drivers.PullResult{Err: ferr, Retries: retries, Duration: duration}
|
||||
}
|
||||
close(ch)
|
||||
}
|
||||
@@ -166,7 +167,7 @@ func (i *imagePuller) startTransfer(trx *transfer) {
|
||||
delete(i.transfers, trx.key)
|
||||
}
|
||||
|
||||
func (i *imagePuller) PullImage(ctx context.Context, cfg *docker.AuthConfiguration, img, repo, tag string) chan error {
|
||||
func (i *imagePuller) PullImage(ctx context.Context, cfg *docker.AuthConfiguration, img, repo, tag string) chan drivers.PullResult {
|
||||
return i.newTransfer(ctx, cfg, img, repo, tag)
|
||||
}
|
||||
|
||||
|
||||
@@ -51,7 +51,8 @@ func TestImagePullConcurrent1(t *testing.T) {
|
||||
for i := 0; i < 10; i++ {
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
err := <-puller.PullImage(ctx, &cfg, img, repo, tag1)
|
||||
pullRes := <-puller.PullImage(ctx, &cfg, img, repo, tag1)
|
||||
err := pullRes.Err
|
||||
if err != nil {
|
||||
t.Fatalf("err received %v", err)
|
||||
}
|
||||
@@ -60,7 +61,8 @@ func TestImagePullConcurrent1(t *testing.T) {
|
||||
for i := 0; i < 10; i++ {
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
err := <-puller.PullImage(ctx, &cfg, img, repo, tag2)
|
||||
pullRes := <-puller.PullImage(ctx, &cfg, img, repo, tag2)
|
||||
err := pullRes.Err
|
||||
if err != nil {
|
||||
t.Fatalf("err received %v", err)
|
||||
}
|
||||
@@ -97,7 +99,8 @@ func TestImagePullConcurrent2(t *testing.T) {
|
||||
for i := 0; i < 10; i++ {
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
err := <-puller.PullImage(ctx, &cfg, img, repo, tag)
|
||||
pullRes := <-puller.PullImage(ctx, &cfg, img, repo, tag)
|
||||
err := pullRes.Err
|
||||
if err == nil || strings.Index(err.Error(), "yogurt") == -1 {
|
||||
t.Fatalf("Unknown err received %v", err)
|
||||
}
|
||||
@@ -149,7 +152,8 @@ func TestImagePullConcurrent3(t *testing.T) {
|
||||
for i := 0; i < 10; i++ {
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
err := <-puller.PullImage(ctx, &cfg, img, repo, tag)
|
||||
pullRes := <-puller.PullImage(ctx, &cfg, img, repo, tag)
|
||||
err := pullRes.Err
|
||||
if err == nil {
|
||||
t.Fatalf("no err received")
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import (
|
||||
"context"
|
||||
"io"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/fnproject/fn/api/agent/drivers/stats"
|
||||
"github.com/fnproject/fn/api/common"
|
||||
@@ -44,7 +45,7 @@ type Cookie interface {
|
||||
|
||||
// Pull the image. An image pull requires validation/inspection
|
||||
// again.
|
||||
PullImage(ctx context.Context) error
|
||||
PullImage(ctx context.Context) PullResult
|
||||
|
||||
// Create container which can be Run() later
|
||||
CreateContainer(ctx context.Context) error
|
||||
@@ -100,6 +101,13 @@ type LoggerTag struct {
|
||||
Value string
|
||||
}
|
||||
|
||||
// Configuration for Image Pull details
|
||||
type PullResult struct {
|
||||
Err error
|
||||
Retries int32
|
||||
Duration time.Duration
|
||||
}
|
||||
|
||||
// Logger Configuration for container
|
||||
type LoggerConfig struct {
|
||||
// Log Sink URL
|
||||
|
||||
@@ -52,8 +52,8 @@ func (c *cookie) ValidateImage(context.Context) (bool, error) {
|
||||
return false, nil
|
||||
}
|
||||
|
||||
func (c *cookie) PullImage(context.Context) error {
|
||||
return nil
|
||||
func (c *cookie) PullImage(context.Context) drivers.PullResult {
|
||||
return drivers.PullResult{Err: nil, Retries: 0, Duration: 0 * time.Second}
|
||||
}
|
||||
|
||||
func (c *cookie) CreateContainer(context.Context) error {
|
||||
|
||||
@@ -335,6 +335,8 @@ type CallFinished struct {
|
||||
CtrPrepDuration int64 `protobuf:"varint,13,opt,name=ctrPrepDuration,proto3" json:"ctrPrepDuration,omitempty"`
|
||||
CtrCreateDuration int64 `protobuf:"varint,14,opt,name=ctrCreateDuration,proto3" json:"ctrCreateDuration,omitempty"`
|
||||
InitStartTime int64 `protobuf:"varint,15,opt,name=initStartTime,proto3" json:"initStartTime,omitempty"`
|
||||
ImagePullDuration int64 `protobuf:"varint,16,opt,name=imagePullDuration,proto3" json:"imagePullDuration,omitempty"`
|
||||
ImagePullRetries int32 `protobuf:"varint,17,opt,name=imagePullRetries,proto3" json:"imagePullRetries,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
@@ -470,6 +472,20 @@ func (m *CallFinished) GetInitStartTime() int64 {
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *CallFinished) GetImagePullDuration() int64 {
|
||||
if m != nil {
|
||||
return m.ImagePullDuration
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *CallFinished) GetImagePullRetries() int32 {
|
||||
if m != nil {
|
||||
return m.ImagePullRetries
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
type ClientMsg struct {
|
||||
// Types that are valid to be assigned to Body:
|
||||
// *ClientMsg_Try
|
||||
@@ -667,6 +683,8 @@ type RunnerStatus struct {
|
||||
CtrPrepDuration int64 `protobuf:"varint,20,opt,name=ctrPrepDuration,proto3" json:"ctrPrepDuration,omitempty"`
|
||||
CtrCreateDuration int64 `protobuf:"varint,21,opt,name=ctrCreateDuration,proto3" json:"ctrCreateDuration,omitempty"`
|
||||
InitStartTime int64 `protobuf:"varint,22,opt,name=initStartTime,proto3" json:"initStartTime,omitempty"`
|
||||
ImagePullDuration int64 `protobuf:"varint,23,opt,name=imagePullDuration,proto3" json:"imagePullDuration,omitempty"`
|
||||
ImagePullRetries int32 `protobuf:"varint,24,opt,name=imagePullRetries,proto3" json:"imagePullRetries,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
@@ -844,6 +862,20 @@ func (m *RunnerStatus) GetInitStartTime() int64 {
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *RunnerStatus) GetImagePullDuration() int64 {
|
||||
if m != nil {
|
||||
return m.ImagePullDuration
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *RunnerStatus) GetImagePullRetries() int32 {
|
||||
if m != nil {
|
||||
return m.ImagePullRetries
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
type ConfigMsg struct {
|
||||
Config map[string]string `protobuf:"bytes,1,rep,name=config,proto3" json:"config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
@@ -1352,89 +1384,90 @@ func init() {
|
||||
func init() { proto.RegisterFile("runner.proto", fileDescriptor_48eceea7e2abc593) }
|
||||
|
||||
var fileDescriptor_48eceea7e2abc593 = []byte{
|
||||
// 1297 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0x5b, 0x6f, 0x1b, 0x45,
|
||||
0x14, 0x8e, 0x6f, 0x6b, 0xfb, 0xf8, 0x9a, 0xa1, 0x8d, 0x96, 0xa5, 0xa2, 0xc6, 0x94, 0xca, 0x82,
|
||||
0x74, 0x4b, 0x43, 0x2b, 0x95, 0x4a, 0x80, 0x8a, 0x93, 0xca, 0x45, 0x2d, 0xad, 0xc6, 0x29, 0x3c,
|
||||
0x46, 0x93, 0xdd, 0x89, 0x3d, 0x78, 0xbd, 0x6b, 0x66, 0x66, 0x43, 0x23, 0xf1, 0xce, 0x6f, 0xe0,
|
||||
0x05, 0x89, 0x47, 0xde, 0xf9, 0x11, 0x3c, 0xf1, 0xc8, 0x4f, 0xe1, 0x19, 0xcd, 0xc5, 0xeb, 0x5b,
|
||||
0x9a, 0x26, 0x12, 0x6f, 0x73, 0xbe, 0xef, 0xcc, 0x9c, 0x33, 0xc7, 0xdf, 0x39, 0x3b, 0x86, 0x3a,
|
||||
0x4f, 0xe3, 0x98, 0x72, 0x7f, 0xc6, 0x13, 0x99, 0x78, 0xef, 0x8d, 0x92, 0x64, 0x14, 0xd1, 0xbb,
|
||||
0xda, 0x3a, 0x4e, 0x4f, 0xee, 0xd2, 0xe9, 0x4c, 0x9e, 0x19, 0xb2, 0xfb, 0x77, 0x0e, 0xca, 0x87,
|
||||
0xfc, 0xac, 0x4f, 0xa2, 0x08, 0xf5, 0xa0, 0x3d, 0x4d, 0x42, 0x1a, 0x89, 0xa3, 0x80, 0x44, 0xd1,
|
||||
0xd1, 0x0f, 0x22, 0x89, 0xdd, 0x5c, 0x27, 0xd7, 0xab, 0xe2, 0xa6, 0xc1, 0x95, 0xd7, 0x37, 0x22,
|
||||
0x89, 0x51, 0x07, 0xea, 0x22, 0x4a, 0xe4, 0xd1, 0x98, 0x88, 0xf1, 0x11, 0x0b, 0xdd, 0xbc, 0xf6,
|
||||
0x02, 0x85, 0x0d, 0x88, 0x18, 0x3f, 0x0d, 0xd1, 0x43, 0x00, 0xfa, 0x5a, 0xd2, 0x58, 0xb0, 0x24,
|
||||
0x16, 0x6e, 0xa1, 0x53, 0xe8, 0xd5, 0xf6, 0x5c, 0xdf, 0x46, 0xf2, 0x0f, 0x32, 0xea, 0x20, 0x96,
|
||||
0xfc, 0x0c, 0x2f, 0xf9, 0x7a, 0x5f, 0x40, 0x6b, 0x8d, 0x46, 0x6d, 0x28, 0x4c, 0xe8, 0x99, 0xcd,
|
||||
0x45, 0x2d, 0xd1, 0x35, 0x28, 0x9d, 0x92, 0x28, 0xa5, 0x36, 0xb2, 0x31, 0x1e, 0xe5, 0x1f, 0xe6,
|
||||
0xba, 0xf7, 0xa0, 0xba, 0x4f, 0x24, 0x79, 0xc2, 0xc9, 0x94, 0x22, 0x04, 0xc5, 0x90, 0x48, 0xa2,
|
||||
0x77, 0xd6, 0xb1, 0x5e, 0xab, 0xc3, 0x68, 0x72, 0xa2, 0x37, 0x56, 0xb0, 0x5a, 0x76, 0xef, 0x03,
|
||||
0x0c, 0xa4, 0x9c, 0x0d, 0x28, 0x09, 0x29, 0xbf, 0x6c, 0xb0, 0xee, 0x77, 0x50, 0x57, 0xbb, 0x30,
|
||||
0x15, 0xb3, 0xe7, 0x54, 0x12, 0x74, 0x13, 0x6a, 0x42, 0x12, 0x99, 0x8a, 0xa3, 0x20, 0x09, 0xa9,
|
||||
0xde, 0x5f, 0xc2, 0x60, 0xa0, 0x7e, 0x12, 0x52, 0xf4, 0x11, 0x94, 0xc7, 0x3a, 0x84, 0x70, 0xf3,
|
||||
0xba, 0x1e, 0x35, 0x7f, 0x11, 0x16, 0xcf, 0xb9, 0xee, 0x97, 0xd0, 0x52, 0x35, 0xc2, 0x54, 0xa4,
|
||||
0x91, 0x1c, 0x4a, 0xc2, 0x25, 0xfa, 0x10, 0x8a, 0x63, 0x29, 0x67, 0x6e, 0xd8, 0xc9, 0xf5, 0x6a,
|
||||
0x7b, 0x0d, 0x7f, 0x39, 0xee, 0x60, 0x0b, 0x6b, 0xf2, 0x6b, 0x07, 0x8a, 0x53, 0x2a, 0x49, 0xf7,
|
||||
0xb7, 0x22, 0xd4, 0xd5, 0x01, 0x4f, 0x58, 0xcc, 0xc4, 0x98, 0x86, 0xc8, 0x85, 0xb2, 0x48, 0x83,
|
||||
0x80, 0x0a, 0xa1, 0x93, 0xaa, 0xe0, 0xb9, 0xa9, 0x98, 0x90, 0x4a, 0xc2, 0x22, 0x61, 0xaf, 0x36,
|
||||
0x37, 0xd1, 0x0d, 0xa8, 0x52, 0xce, 0x13, 0xae, 0x12, 0x77, 0x0b, 0xfa, 0x2a, 0x0b, 0x00, 0x79,
|
||||
0x50, 0xd1, 0xc6, 0x50, 0x72, 0xb7, 0xa8, 0x37, 0x66, 0xb6, 0xda, 0x19, 0x70, 0x4a, 0x24, 0x0d,
|
||||
0x1f, 0x4b, 0xb7, 0xa4, 0xc9, 0x05, 0xa0, 0x58, 0xa1, 0xae, 0xa4, 0x59, 0xc7, 0xb0, 0x19, 0x80,
|
||||
0x3a, 0x50, 0x0b, 0x92, 0xe9, 0x2c, 0xa2, 0x86, 0x2f, 0x6b, 0x7e, 0x19, 0x42, 0xbb, 0xb0, 0x2d,
|
||||
0x82, 0x31, 0x0d, 0xd3, 0x88, 0xf2, 0xfd, 0x94, 0x13, 0xc9, 0x92, 0xd8, 0xad, 0x74, 0x72, 0xbd,
|
||||
0x02, 0xde, 0x24, 0x94, 0x37, 0x7d, 0x4d, 0x83, 0x54, 0x19, 0x99, 0x77, 0xd5, 0x78, 0x6f, 0x10,
|
||||
0xd9, 0x9d, 0x5f, 0x09, 0xca, 0x5d, 0xd0, 0x95, 0x5a, 0x00, 0x4a, 0x04, 0x6c, 0x4a, 0x46, 0xd4,
|
||||
0xad, 0x19, 0x11, 0x68, 0x03, 0xdd, 0x87, 0xeb, 0x7a, 0xf1, 0x32, 0x8d, 0xa2, 0xef, 0x09, 0x93,
|
||||
0x59, 0x94, 0xba, 0x8e, 0x72, 0x3e, 0x89, 0x7a, 0xd0, 0x0a, 0x24, 0x7f, 0xc9, 0xe9, 0x2c, 0xf3,
|
||||
0x6f, 0x68, 0xff, 0x75, 0x58, 0xdd, 0x20, 0x90, 0xbc, 0xaf, 0xeb, 0x97, 0xf9, 0x36, 0xcd, 0x0d,
|
||||
0x36, 0x08, 0x74, 0x0b, 0x1a, 0x2c, 0x66, 0x46, 0x34, 0x87, 0x6c, 0x4a, 0xdd, 0x96, 0xf6, 0x5c,
|
||||
0x05, 0xbb, 0x43, 0xa8, 0xf6, 0x23, 0x46, 0x63, 0xf9, 0x5c, 0x8c, 0xd0, 0x0d, 0x28, 0x48, 0x6e,
|
||||
0xd4, 0x5e, 0xdb, 0xab, 0xcc, 0x1b, 0x74, 0xb0, 0x85, 0x15, 0x8c, 0x3a, 0xb6, 0x7f, 0xf2, 0x9a,
|
||||
0x06, 0x3f, 0xeb, 0x2c, 0xa5, 0x3a, 0xc5, 0x28, 0xd5, 0x1d, 0x27, 0xe1, 0x59, 0xf7, 0xd7, 0x1c,
|
||||
0x54, 0xb1, 0x9e, 0x3a, 0xea, 0xd4, 0x07, 0x50, 0xe7, 0x5a, 0xbf, 0x47, 0xfa, 0xc7, 0xb5, 0xc7,
|
||||
0xb7, 0xfd, 0x35, 0x61, 0x0f, 0xb6, 0x70, 0x8d, 0x2f, 0xe9, 0xfc, 0xad, 0xe1, 0xd0, 0x27, 0x50,
|
||||
0x39, 0xb1, 0xba, 0xd6, 0xb2, 0x54, 0xdd, 0xb0, 0x2c, 0xf6, 0xc1, 0x16, 0xce, 0x1c, 0xb2, 0xdc,
|
||||
0xfe, 0x71, 0xa0, 0x6e, 0x72, 0x1b, 0xea, 0x6e, 0x44, 0x3b, 0xe0, 0x90, 0x40, 0xb2, 0x53, 0xd3,
|
||||
0xd1, 0x25, 0x6c, 0x2d, 0x85, 0x9f, 0x10, 0x16, 0xd9, 0xb3, 0x2b, 0xd8, 0x5a, 0xa8, 0x09, 0x79,
|
||||
0x16, 0x5a, 0xa5, 0xe7, 0x59, 0xb8, 0xdc, 0x37, 0xa5, 0x0b, 0xfa, 0xc6, 0xb9, 0xa8, 0x6f, 0xca,
|
||||
0x17, 0xf5, 0x4d, 0xe5, 0xc2, 0xbe, 0xa9, 0xbe, 0xa5, 0x6f, 0x60, 0xb3, 0x6f, 0x76, 0xc0, 0x09,
|
||||
0x88, 0xea, 0x0f, 0x2d, 0xdf, 0x0a, 0xb6, 0x16, 0xfa, 0x18, 0xda, 0x9c, 0xfe, 0x98, 0x52, 0x21,
|
||||
0x05, 0xa6, 0x01, 0x65, 0xa7, 0x34, 0xd4, 0xd2, 0x2d, 0xe2, 0x0d, 0x5c, 0xa9, 0x76, 0x8e, 0x0d,
|
||||
0x48, 0x1c, 0xaa, 0x32, 0x35, 0xb4, 0xeb, 0x3a, 0x8c, 0xba, 0x50, 0x9f, 0x84, 0xe9, 0x74, 0x26,
|
||||
0x5e, 0xc4, 0xfb, 0x4c, 0x4c, 0xb4, 0x60, 0x8b, 0x78, 0x05, 0x3b, 0xbf, 0x93, 0x5b, 0x57, 0xea,
|
||||
0xe4, 0xf6, 0x9b, 0x3a, 0x79, 0x17, 0xb6, 0x99, 0xf8, 0x96, 0xca, 0x9f, 0x12, 0x3e, 0xd9, 0x67,
|
||||
0x82, 0x1c, 0xab, 0x5c, 0xb7, 0xf5, 0xc5, 0x37, 0x09, 0xd4, 0x87, 0x7a, 0x90, 0x0a, 0x99, 0x4c,
|
||||
0x8d, 0x3a, 0x5c, 0xa4, 0x87, 0xf3, 0x4d, 0x7f, 0x59, 0x32, 0x7e, 0x7f, 0xc9, 0xc3, 0x7c, 0xb3,
|
||||
0x56, 0x36, 0xbd, 0x79, 0x10, 0xbc, 0x73, 0xc5, 0x41, 0x70, 0xed, 0x0a, 0x83, 0xe0, 0xfa, 0xa5,
|
||||
0x07, 0xc1, 0xce, 0x39, 0x83, 0xc0, 0xfb, 0x0a, 0xb6, 0x37, 0xae, 0x75, 0xa5, 0x6f, 0xed, 0x29,
|
||||
0x54, 0xfb, 0x49, 0x7c, 0xc2, 0x46, 0xaa, 0xe7, 0x7d, 0x70, 0x02, 0x6d, 0xb8, 0x39, 0x5d, 0xc0,
|
||||
0x1d, 0x3f, 0xe3, 0xec, 0xca, 0xd4, 0xcd, 0x7a, 0x79, 0x9f, 0x43, 0x6d, 0x09, 0xbe, 0x52, 0xdc,
|
||||
0x26, 0xd4, 0xcd, 0x56, 0x93, 0x78, 0xf7, 0x8f, 0x3c, 0x34, 0x9e, 0x25, 0x23, 0x6c, 0x64, 0xa8,
|
||||
0x92, 0xd9, 0x85, 0xd2, 0xf2, 0xe4, 0xb9, 0xe6, 0xaf, 0xd0, 0xfe, 0x7c, 0xfa, 0x18, 0x27, 0x74,
|
||||
0x1b, 0x0a, 0x24, 0x98, 0xd8, 0xb1, 0x83, 0xd6, 0x7c, 0x1f, 0x07, 0x13, 0x35, 0x0e, 0x49, 0xa0,
|
||||
0x34, 0x5b, 0xe2, 0x94, 0x84, 0x67, 0x76, 0xf4, 0xac, 0x9f, 0x8a, 0x15, 0xa7, 0x4e, 0xd5, 0x4e,
|
||||
0xde, 0xcf, 0x50, 0x32, 0x63, 0xed, 0xe1, 0x5a, 0x65, 0x3a, 0xe7, 0x65, 0xf3, 0x3f, 0xd7, 0xc8,
|
||||
0x2b, 0x41, 0xe1, 0x71, 0x30, 0xf1, 0xca, 0x50, 0xd2, 0x69, 0x65, 0xc3, 0xf0, 0xdf, 0x02, 0x34,
|
||||
0x75, 0x78, 0x31, 0x4b, 0x62, 0x41, 0x55, 0xb1, 0xee, 0x64, 0xaf, 0x24, 0x95, 0xdd, 0xbb, 0xfe,
|
||||
0x2a, 0xad, 0x12, 0x93, 0x84, 0xc5, 0x94, 0x9b, 0x19, 0xec, 0xfd, 0x59, 0xd0, 0x3f, 0xbb, 0xc1,
|
||||
0x94, 0xd4, 0xc8, 0x6c, 0x16, 0xb1, 0x40, 0x2b, 0xef, 0x69, 0x68, 0xb3, 0x5b, 0x05, 0xd1, 0xfb,
|
||||
0x00, 0x27, 0x69, 0x1c, 0x58, 0x17, 0xfb, 0x5c, 0x5c, 0x20, 0x66, 0x82, 0xd9, 0x23, 0x9f, 0x9a,
|
||||
0xf1, 0xab, 0x27, 0x58, 0x06, 0xa1, 0x07, 0x36, 0xc9, 0xa2, 0x4e, 0xf2, 0x83, 0x37, 0x26, 0xe9,
|
||||
0xdb, 0xc2, 0xda, 0x64, 0x7f, 0xc9, 0x43, 0xd9, 0x22, 0x6a, 0x88, 0xda, 0x49, 0x95, 0xa5, 0xb9,
|
||||
0x00, 0xd0, 0xa3, 0xec, 0xe3, 0xa3, 0x02, 0xdc, 0x7e, 0x6b, 0x00, 0xff, 0x19, 0x8b, 0xa9, 0x8d,
|
||||
0xf2, 0x7b, 0x0e, 0x8a, 0xca, 0x54, 0x21, 0x24, 0x9b, 0x52, 0x21, 0xc9, 0x74, 0xa6, 0x43, 0x14,
|
||||
0xf0, 0x02, 0x40, 0x07, 0xe0, 0x88, 0x24, 0xe5, 0x81, 0xf9, 0xb9, 0x9a, 0x7b, 0x77, 0x2e, 0x17,
|
||||
0xc4, 0x1f, 0xea, 0x4d, 0xd8, 0x6e, 0xce, 0x5e, 0xb5, 0x85, 0xc5, 0xab, 0xb6, 0xdb, 0x01, 0xc7,
|
||||
0x78, 0x21, 0x00, 0x67, 0x78, 0xb8, 0xff, 0xe2, 0xd5, 0x61, 0x7b, 0xcb, 0xae, 0x0f, 0x30, 0x6e,
|
||||
0xe7, 0xf6, 0xfe, 0xca, 0x41, 0xd3, 0x8c, 0xb4, 0x97, 0xea, 0xe5, 0x1f, 0x24, 0x11, 0xba, 0x05,
|
||||
0xce, 0x41, 0x3c, 0x52, 0xef, 0x18, 0xf0, 0xb3, 0x27, 0x81, 0x07, 0x7e, 0xf6, 0x21, 0xef, 0xe5,
|
||||
0x3e, 0xcd, 0xa1, 0xbb, 0xe0, 0xcc, 0xbf, 0x9b, 0xbe, 0xf9, 0x2b, 0xe1, 0xcf, 0xff, 0x4a, 0xf8,
|
||||
0x07, 0xea, 0xaf, 0x84, 0xd7, 0x58, 0x99, 0x95, 0x68, 0x17, 0x5a, 0x46, 0xb5, 0x29, 0xa7, 0x86,
|
||||
0x50, 0xe7, 0xcf, 0x87, 0x81, 0xd7, 0xf0, 0x97, 0x9b, 0x17, 0xdd, 0x03, 0x18, 0x4a, 0x4e, 0xc9,
|
||||
0xf4, 0x59, 0x32, 0x12, 0xa8, 0xb9, 0xda, 0x1b, 0x5e, 0x6b, 0xad, 0x44, 0x2a, 0xa3, 0x63, 0x47,
|
||||
0xc7, 0xff, 0xec, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x35, 0xd2, 0x0f, 0x74, 0xe8, 0x0c, 0x00,
|
||||
0x00,
|
||||
// 1328 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0x4b, 0x8f, 0x1b, 0x45,
|
||||
0x17, 0x9d, 0xf6, 0xdb, 0xd7, 0xcf, 0xa9, 0x2f, 0x99, 0xaf, 0x69, 0x22, 0x62, 0x4c, 0x88, 0x2c,
|
||||
0x48, 0x3a, 0x64, 0x48, 0xa4, 0x10, 0x09, 0x50, 0xf0, 0x4c, 0xe4, 0xa0, 0x84, 0x44, 0xe5, 0x09,
|
||||
0x2c, 0x47, 0x35, 0xdd, 0x35, 0x76, 0xe1, 0x76, 0xb7, 0xa9, 0xaa, 0x1e, 0x32, 0x12, 0x7b, 0x7e,
|
||||
0x03, 0x4b, 0x96, 0xec, 0x58, 0xf0, 0x23, 0x58, 0xf1, 0x73, 0x10, 0x4b, 0x54, 0x0f, 0xb7, 0x5f,
|
||||
0x93, 0x79, 0x48, 0xec, 0xba, 0xce, 0xb9, 0x55, 0xf7, 0x56, 0xf5, 0x3d, 0xa7, 0xab, 0xa1, 0xce,
|
||||
0xd3, 0x38, 0xa6, 0xdc, 0x9f, 0xf1, 0x44, 0x26, 0xde, 0xbb, 0xa3, 0x24, 0x19, 0x45, 0xf4, 0x9e,
|
||||
0x1e, 0x1d, 0xa5, 0xc7, 0xf7, 0xe8, 0x74, 0x26, 0x4f, 0x0d, 0xd9, 0xfd, 0xcb, 0x81, 0xf2, 0x01,
|
||||
0x3f, 0xed, 0x93, 0x28, 0x42, 0x3d, 0x68, 0x4f, 0x93, 0x90, 0x46, 0xe2, 0x30, 0x20, 0x51, 0x74,
|
||||
0xf8, 0xbd, 0x48, 0x62, 0xd7, 0xe9, 0x38, 0xbd, 0x2a, 0x6e, 0x1a, 0x5c, 0x45, 0x7d, 0x2d, 0x92,
|
||||
0x18, 0x75, 0xa0, 0x2e, 0xa2, 0x44, 0x1e, 0x8e, 0x89, 0x18, 0x1f, 0xb2, 0xd0, 0xcd, 0xe9, 0x28,
|
||||
0x50, 0xd8, 0x80, 0x88, 0xf1, 0xb3, 0x10, 0x3d, 0x02, 0xa0, 0x6f, 0x24, 0x8d, 0x05, 0x4b, 0x62,
|
||||
0xe1, 0xe6, 0x3b, 0xf9, 0x5e, 0x6d, 0xd7, 0xf5, 0x6d, 0x26, 0x7f, 0x3f, 0xa3, 0xf6, 0x63, 0xc9,
|
||||
0x4f, 0xf1, 0x52, 0xac, 0xf7, 0x39, 0xb4, 0xd6, 0x68, 0xd4, 0x86, 0xfc, 0x84, 0x9e, 0xda, 0x5a,
|
||||
0xd4, 0x23, 0xba, 0x06, 0xc5, 0x13, 0x12, 0xa5, 0xd4, 0x66, 0x36, 0x83, 0xc7, 0xb9, 0x47, 0x4e,
|
||||
0xf7, 0x3e, 0x54, 0xf7, 0x88, 0x24, 0x4f, 0x39, 0x99, 0x52, 0x84, 0xa0, 0x10, 0x12, 0x49, 0xf4,
|
||||
0xcc, 0x3a, 0xd6, 0xcf, 0x6a, 0x31, 0x9a, 0x1c, 0xeb, 0x89, 0x15, 0xac, 0x1e, 0xbb, 0x0f, 0x00,
|
||||
0x06, 0x52, 0xce, 0x06, 0x94, 0x84, 0x94, 0x5f, 0x36, 0x59, 0xf7, 0x5b, 0xa8, 0xab, 0x59, 0x98,
|
||||
0x8a, 0xd9, 0x0b, 0x2a, 0x09, 0xba, 0x09, 0x35, 0x21, 0x89, 0x4c, 0xc5, 0x61, 0x90, 0x84, 0x54,
|
||||
0xcf, 0x2f, 0x62, 0x30, 0x50, 0x3f, 0x09, 0x29, 0xfa, 0x10, 0xca, 0x63, 0x9d, 0x42, 0xb8, 0x39,
|
||||
0x7d, 0x1e, 0x35, 0x7f, 0x91, 0x16, 0xcf, 0xb9, 0xee, 0x17, 0xd0, 0x52, 0x67, 0x84, 0xa9, 0x48,
|
||||
0x23, 0x39, 0x94, 0x84, 0x4b, 0xf4, 0x01, 0x14, 0xc6, 0x52, 0xce, 0xdc, 0xb0, 0xe3, 0xf4, 0x6a,
|
||||
0xbb, 0x0d, 0x7f, 0x39, 0xef, 0x60, 0x0b, 0x6b, 0xf2, 0xab, 0x12, 0x14, 0xa6, 0x54, 0x92, 0xee,
|
||||
0x3f, 0x05, 0xa8, 0xab, 0x05, 0x9e, 0xb2, 0x98, 0x89, 0x31, 0x0d, 0x91, 0x0b, 0x65, 0x91, 0x06,
|
||||
0x01, 0x15, 0x42, 0x17, 0x55, 0xc1, 0xf3, 0xa1, 0x62, 0x42, 0x2a, 0x09, 0x8b, 0x84, 0xdd, 0xda,
|
||||
0x7c, 0x88, 0x6e, 0x40, 0x95, 0x72, 0x9e, 0x70, 0x55, 0xb8, 0x9b, 0xd7, 0x5b, 0x59, 0x00, 0xc8,
|
||||
0x83, 0x8a, 0x1e, 0x0c, 0x25, 0x77, 0x0b, 0x7a, 0x62, 0x36, 0x56, 0x33, 0x03, 0x4e, 0x89, 0xa4,
|
||||
0xe1, 0x13, 0xe9, 0x16, 0x35, 0xb9, 0x00, 0x14, 0x2b, 0xd4, 0x96, 0x34, 0x5b, 0x32, 0x6c, 0x06,
|
||||
0xa0, 0x0e, 0xd4, 0x82, 0x64, 0x3a, 0x8b, 0xa8, 0xe1, 0xcb, 0x9a, 0x5f, 0x86, 0xd0, 0x1d, 0xd8,
|
||||
0x16, 0xc1, 0x98, 0x86, 0x69, 0x44, 0xf9, 0x5e, 0xca, 0x89, 0x64, 0x49, 0xec, 0x56, 0x3a, 0x4e,
|
||||
0x2f, 0x8f, 0x37, 0x09, 0x15, 0x4d, 0xdf, 0xd0, 0x20, 0x55, 0x83, 0x2c, 0xba, 0x6a, 0xa2, 0x37,
|
||||
0x88, 0x6c, 0xcf, 0xaf, 0x05, 0xe5, 0x2e, 0xe8, 0x93, 0x5a, 0x00, 0xaa, 0x09, 0xd8, 0x94, 0x8c,
|
||||
0xa8, 0x5b, 0x33, 0x4d, 0xa0, 0x07, 0xe8, 0x01, 0x5c, 0xd7, 0x0f, 0xaf, 0xd2, 0x28, 0xfa, 0x8e,
|
||||
0x30, 0x99, 0x65, 0xa9, 0xeb, 0x2c, 0x67, 0x93, 0xa8, 0x07, 0xad, 0x40, 0xf2, 0x57, 0x9c, 0xce,
|
||||
0xb2, 0xf8, 0x86, 0x8e, 0x5f, 0x87, 0xd5, 0x0e, 0x02, 0xc9, 0xfb, 0xfa, 0xfc, 0xb2, 0xd8, 0xa6,
|
||||
0xd9, 0xc1, 0x06, 0x81, 0x6e, 0x41, 0x83, 0xc5, 0xcc, 0x34, 0xcd, 0x01, 0x9b, 0x52, 0xb7, 0xa5,
|
||||
0x23, 0x57, 0x41, 0xb5, 0x66, 0x56, 0x56, 0xb6, 0x66, 0xdb, 0xac, 0xb9, 0x41, 0xa0, 0x8f, 0xa0,
|
||||
0x9d, 0x81, 0x98, 0x4a, 0xce, 0xa8, 0x70, 0xb7, 0x75, 0x43, 0x6c, 0xe0, 0xdd, 0x21, 0x54, 0xfb,
|
||||
0x11, 0xa3, 0xb1, 0x7c, 0x21, 0x46, 0xe8, 0x06, 0xe4, 0x25, 0x37, 0x3a, 0xaa, 0xed, 0x56, 0xe6,
|
||||
0xd2, 0x1f, 0x6c, 0x61, 0x05, 0xa3, 0x8e, 0x55, 0x66, 0x4e, 0xd3, 0xe0, 0x67, 0x9a, 0x55, 0xfd,
|
||||
0xac, 0x18, 0xd5, 0xcf, 0x47, 0x49, 0x78, 0xda, 0xfd, 0xc5, 0x81, 0x2a, 0xd6, 0x7e, 0xa6, 0x56,
|
||||
0x7d, 0x08, 0x75, 0xae, 0x95, 0x71, 0xa8, 0xdb, 0xc6, 0x2e, 0xdf, 0xf6, 0xd7, 0x24, 0x33, 0xd8,
|
||||
0xc2, 0x35, 0xbe, 0xa4, 0xa0, 0x0b, 0xd3, 0xa1, 0x8f, 0xa1, 0x72, 0x6c, 0x15, 0xa3, 0x1b, 0x5e,
|
||||
0xe9, 0x6c, 0x59, 0x46, 0x83, 0x2d, 0x9c, 0x05, 0x64, 0xb5, 0xfd, 0x5e, 0x86, 0xba, 0xa9, 0x6d,
|
||||
0xa8, 0x75, 0x8e, 0x76, 0xa0, 0x44, 0x02, 0xc9, 0x4e, 0x8c, 0x57, 0x14, 0xb1, 0x1d, 0x29, 0xfc,
|
||||
0x98, 0xb0, 0xc8, 0xae, 0x5d, 0xc1, 0x76, 0x84, 0x9a, 0x90, 0x63, 0xa1, 0xd5, 0x50, 0x8e, 0x85,
|
||||
0xcb, 0x8a, 0x2c, 0x9e, 0xa3, 0xc8, 0xd2, 0x79, 0x8a, 0x2c, 0x9f, 0xa7, 0xc8, 0xca, 0xb9, 0x8a,
|
||||
0xac, 0x5e, 0xa0, 0x48, 0xd8, 0x54, 0xe4, 0x0e, 0x94, 0x02, 0xa2, 0x94, 0xa7, 0x85, 0x51, 0xc1,
|
||||
0x76, 0xa4, 0xfa, 0x86, 0xd3, 0x1f, 0x52, 0x2a, 0xa4, 0xc0, 0x34, 0xa0, 0xec, 0x84, 0x86, 0x5a,
|
||||
0x14, 0x05, 0xbc, 0x81, 0x2b, 0x3d, 0xcc, 0xb1, 0x01, 0x89, 0x43, 0x75, 0x4c, 0x0d, 0x1d, 0xba,
|
||||
0x0e, 0xa3, 0x2e, 0xd4, 0x27, 0x61, 0x3a, 0x9d, 0x89, 0x97, 0xf1, 0x1e, 0x13, 0x13, 0x2d, 0x85,
|
||||
0x02, 0x5e, 0xc1, 0xce, 0xf6, 0x88, 0xd6, 0x95, 0x3c, 0xa2, 0xfd, 0x36, 0x8f, 0x50, 0xda, 0x11,
|
||||
0xdf, 0x50, 0xf9, 0x63, 0xc2, 0x27, 0x7b, 0x4c, 0x90, 0x23, 0x55, 0xeb, 0xb6, 0xde, 0xf8, 0x26,
|
||||
0x81, 0xfa, 0x50, 0x0f, 0x52, 0x21, 0x93, 0xa9, 0xe9, 0x0e, 0x17, 0x69, 0xdb, 0xbf, 0xe9, 0x2f,
|
||||
0xb7, 0x8c, 0xdf, 0x5f, 0x8a, 0x30, 0x5f, 0xc3, 0x95, 0x49, 0x6f, 0xb7, 0x98, 0xff, 0x5d, 0xd1,
|
||||
0x62, 0xae, 0x5d, 0xc1, 0x62, 0xae, 0x5f, 0xda, 0x62, 0x76, 0x2e, 0x6d, 0x31, 0xff, 0xbf, 0x8a,
|
||||
0xc5, 0xb8, 0x67, 0x5b, 0x8c, 0xf7, 0x25, 0x6c, 0x6f, 0x1c, 0xd8, 0x95, 0xee, 0x07, 0x27, 0x50,
|
||||
0xed, 0x27, 0xf1, 0x31, 0x1b, 0x29, 0x37, 0xf1, 0xa1, 0x14, 0xe8, 0x81, 0xeb, 0xe8, 0x57, 0xb3,
|
||||
0xe3, 0x67, 0x9c, 0x7d, 0x32, 0x6f, 0xc4, 0x46, 0x79, 0x9f, 0x41, 0x6d, 0x09, 0xbe, 0x52, 0xde,
|
||||
0x26, 0xd4, 0xcd, 0x54, 0x53, 0x78, 0xf7, 0xb7, 0x1c, 0x34, 0x9e, 0x27, 0x23, 0x6c, 0x1a, 0x5c,
|
||||
0x15, 0x73, 0x07, 0x8a, 0xcb, 0x9e, 0x76, 0xcd, 0x5f, 0xa1, 0xfd, 0xb9, 0xaf, 0x99, 0x20, 0x74,
|
||||
0x1b, 0xf2, 0x24, 0x98, 0x58, 0x43, 0x43, 0x6b, 0xb1, 0x4f, 0x82, 0x89, 0x32, 0x5a, 0x12, 0x28,
|
||||
0x35, 0x14, 0x39, 0x25, 0xe1, 0xa9, 0x35, 0xb5, 0xf5, 0x55, 0xb1, 0xe2, 0xd4, 0xaa, 0x3a, 0xc8,
|
||||
0xfb, 0x09, 0x8a, 0xc6, 0x30, 0x1f, 0xad, 0x9d, 0x4c, 0xe7, 0xac, 0x6a, 0xfe, 0xe3, 0x33, 0xf2,
|
||||
0x8a, 0x90, 0x7f, 0x12, 0x4c, 0xbc, 0x32, 0x14, 0x75, 0x59, 0x99, 0xcd, 0xfe, 0x9d, 0x87, 0xa6,
|
||||
0x4e, 0x2f, 0x66, 0x49, 0x2c, 0xa8, 0x3a, 0xac, 0xbb, 0xd9, 0xcd, 0x4e, 0x55, 0xf7, 0x8e, 0xbf,
|
||||
0x4a, 0xab, 0xc2, 0x24, 0x61, 0x31, 0xe5, 0xc6, 0xdd, 0xbd, 0x3f, 0xf2, 0xfa, 0xb5, 0x1b, 0x4c,
|
||||
0x35, 0x31, 0x99, 0xcd, 0x22, 0x16, 0xe8, 0xfe, 0x7b, 0x16, 0xda, 0xea, 0x56, 0x41, 0xf4, 0x1e,
|
||||
0xc0, 0x71, 0x1a, 0x07, 0x36, 0xc4, 0x5e, 0x71, 0x17, 0x88, 0xf1, 0x46, 0xbb, 0xe4, 0x33, 0x63,
|
||||
0xec, 0xda, 0x1b, 0x33, 0x08, 0x3d, 0xb4, 0x45, 0x16, 0x74, 0x91, 0xef, 0xbf, 0xb5, 0x48, 0xdf,
|
||||
0x1e, 0xac, 0x2d, 0xf6, 0xe7, 0x1c, 0x94, 0x2d, 0xa2, 0xec, 0xd9, 0x7a, 0x60, 0x56, 0xe6, 0x02,
|
||||
0x40, 0x8f, 0xb3, 0xcf, 0x9a, 0x4a, 0x70, 0xfb, 0xc2, 0x04, 0xfe, 0x73, 0x16, 0x53, 0x9b, 0xe5,
|
||||
0x57, 0x07, 0x0a, 0x6a, 0xa8, 0x52, 0x48, 0x36, 0xa5, 0x42, 0x92, 0xe9, 0x4c, 0xa7, 0xc8, 0xe3,
|
||||
0x05, 0x80, 0xf6, 0xa1, 0x24, 0x92, 0x94, 0x07, 0xe6, 0x75, 0x35, 0x77, 0xef, 0x5e, 0x2e, 0x89,
|
||||
0x3f, 0xd4, 0x93, 0xb0, 0x9d, 0x9c, 0xdd, 0xc4, 0xf3, 0x8b, 0x9b, 0x78, 0xb7, 0x03, 0x25, 0x13,
|
||||
0x85, 0x00, 0x4a, 0xc3, 0x83, 0xbd, 0x97, 0xaf, 0x0f, 0xda, 0x5b, 0xf6, 0x79, 0x1f, 0xe3, 0xb6,
|
||||
0xb3, 0xfb, 0xa7, 0x03, 0x4d, 0x63, 0x96, 0xaf, 0xd4, 0xdf, 0x4a, 0x90, 0x44, 0xe8, 0x16, 0x94,
|
||||
0xf6, 0xe3, 0x91, 0xba, 0x7b, 0x81, 0x9f, 0x5d, 0x36, 0x3c, 0xf0, 0xb3, 0x2b, 0x42, 0xcf, 0xf9,
|
||||
0xc4, 0x41, 0xf7, 0xa0, 0x34, 0xff, 0x22, 0xfb, 0xe6, 0xf7, 0xc7, 0x9f, 0xff, 0xfe, 0xf8, 0xfb,
|
||||
0xea, 0xf7, 0xc7, 0x6b, 0xac, 0xb8, 0x30, 0xba, 0x03, 0x2d, 0xd3, 0xb5, 0x29, 0xa7, 0x86, 0x50,
|
||||
0xeb, 0xcf, 0xcd, 0xc0, 0x6b, 0xf8, 0xcb, 0xe2, 0x45, 0xf7, 0x01, 0x86, 0x92, 0x53, 0x32, 0x7d,
|
||||
0x9e, 0x8c, 0x04, 0x6a, 0xae, 0x6a, 0xc3, 0x6b, 0xad, 0x1d, 0x91, 0xaa, 0xe8, 0xa8, 0xa4, 0xf3,
|
||||
0x7f, 0xfa, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5a, 0x4a, 0x9d, 0x51, 0x9c, 0x0d, 0x00, 0x00,
|
||||
}
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
|
||||
@@ -53,6 +53,8 @@ message CallFinished {
|
||||
int64 ctrPrepDuration = 13;
|
||||
int64 ctrCreateDuration = 14;
|
||||
int64 initStartTime = 15;
|
||||
int64 imagePullDuration = 16;
|
||||
int32 imagePullRetries = 17;
|
||||
}
|
||||
|
||||
message ClientMsg {
|
||||
@@ -92,6 +94,8 @@ message RunnerStatus {
|
||||
int64 ctrPrepDuration = 20;
|
||||
int64 ctrCreateDuration = 21;
|
||||
int64 initStartTime = 22;
|
||||
int64 imagePullDuration = 23;
|
||||
int32 imagePullRetries = 24;
|
||||
}
|
||||
|
||||
message ConfigMsg {
|
||||
|
||||
@@ -236,6 +236,8 @@ func (ch *callHandle) enqueueCallResponse(err error) {
|
||||
var errUser bool
|
||||
var nErr error
|
||||
var imagePullWaitDuration int64
|
||||
var imagePullDuration int64
|
||||
var imagePullRetries int32
|
||||
var ctrCreateDuration int64
|
||||
var ctrPrepDuration int64
|
||||
var initStartTime int64
|
||||
@@ -280,6 +282,8 @@ func (ch *callHandle) enqueueCallResponse(err error) {
|
||||
image = mcall.Image
|
||||
details = mcall.ID
|
||||
imagePullWaitDuration = ch.c.imagePullWaitTime
|
||||
imagePullDuration = ch.c.imagePullTime
|
||||
imagePullRetries = ch.c.imagePullRetries
|
||||
ctrCreateDuration = ch.c.ctrCreateTime
|
||||
ctrCreateDuration = ch.c.ctrCreateTime
|
||||
initStartTime = ch.c.initStartTime
|
||||
@@ -298,6 +302,8 @@ func (ch *callHandle) enqueueCallResponse(err error) {
|
||||
ErrorUser: errUser,
|
||||
ExecutionDuration: int64(executionDuration),
|
||||
Image: image,
|
||||
ImagePullDuration: imagePullDuration,
|
||||
ImagePullRetries: imagePullRetries,
|
||||
ImagePullWaitDuration: imagePullWaitDuration,
|
||||
InitStartTime: initStartTime,
|
||||
SchedulerDuration: int64(schedulerDuration),
|
||||
@@ -942,6 +948,9 @@ func (pr *pureRunner) runStatusCall(ctx context.Context) *runner.RunnerStatus {
|
||||
|
||||
// Loading with runHot metrics if not nil
|
||||
if mcall != nil {
|
||||
result.ImagePullWaitDuration = atomic.LoadInt64(&mcall.imagePullWaitTime)
|
||||
result.ImagePullDuration = atomic.LoadInt64(&mcall.imagePullTime)
|
||||
result.ImagePullRetries = atomic.LoadInt32(&mcall.imagePullRetries)
|
||||
result.ImagePullWaitDuration = atomic.LoadInt64(&mcall.imagePullWaitTime)
|
||||
result.CtrCreateDuration = atomic.LoadInt64(&mcall.ctrCreateTime)
|
||||
result.CtrPrepDuration = atomic.LoadInt64(&mcall.ctrPrepTime)
|
||||
|
||||
@@ -124,6 +124,8 @@ func TranslateGRPCStatusToRunnerStatus(status *pb.RunnerStatus) *pool.RunnerStat
|
||||
ctrPrepDuration := time.Duration(status.GetCtrPrepDuration())
|
||||
ctrCreateDuration := time.Duration(status.GetCtrCreateDuration())
|
||||
imagePullWaitDuration := time.Duration(status.GetImagePullWaitDuration())
|
||||
imagePullDuration := time.Duration(status.GetImagePullDuration())
|
||||
imagePullRetries := status.GetImagePullRetries()
|
||||
initStartTime := time.Duration(status.GetInitStartTime())
|
||||
|
||||
creat, _ := common.ParseDateTime(status.CreatedAt)
|
||||
@@ -147,6 +149,8 @@ func TranslateGRPCStatusToRunnerStatus(status *pb.RunnerStatus) *pool.RunnerStat
|
||||
SchedulerDuration: runnerSchedLatency,
|
||||
ExecutionDuration: runnerExecLatency,
|
||||
ImagePullWaitDuration: imagePullWaitDuration,
|
||||
ImagePullDuration: imagePullDuration,
|
||||
ImagePullRetries: imagePullRetries,
|
||||
CtrPrepDuration: ctrPrepDuration,
|
||||
CtrCreateDuration: ctrCreateDuration,
|
||||
InitStartTime: initStartTime,
|
||||
@@ -447,12 +451,14 @@ DataLoop:
|
||||
span.Annotate([]trace.Attribute{
|
||||
trace.BoolAttribute("error_user", body.Finished.GetErrorUser()),
|
||||
trace.BoolAttribute("success", body.Finished.GetSuccess()),
|
||||
trace.Int64Attribute("execution_duration", body.Finished.GetExecutionDuration()),
|
||||
trace.Int64Attribute("scheduler_duration", body.Finished.GetSchedulerDuration()),
|
||||
trace.Int64Attribute("image_pull_wait", body.Finished.GetImagePullWaitDuration()),
|
||||
trace.Int64Attribute("container_create_duration", body.Finished.GetCtrCreateDuration()),
|
||||
trace.Int64Attribute("container_preparation_duration", body.Finished.GetCtrPrepDuration()),
|
||||
trace.Int64Attribute("execution_duration", body.Finished.GetExecutionDuration()),
|
||||
trace.Int64Attribute("image_pull_duration", body.Finished.GetImagePullDuration()),
|
||||
trace.Int64Attribute("image_pull_retries", int64(body.Finished.GetImagePullRetries())),
|
||||
trace.Int64Attribute("image_pull_wait", body.Finished.GetImagePullWaitDuration()),
|
||||
trace.Int64Attribute("init_start", body.Finished.GetInitStartTime()),
|
||||
trace.Int64Attribute("scheduler_duration", body.Finished.GetSchedulerDuration()),
|
||||
trace.StringAttribute("completed_at", body.Finished.GetCompletedAt()),
|
||||
trace.StringAttribute("created_at", body.Finished.GetCreatedAt()),
|
||||
trace.StringAttribute("started_at", body.Finished.GetStartedAt()),
|
||||
|
||||
@@ -27,6 +27,7 @@ type RunnerPool interface {
|
||||
// RunnerStatus is general information on Runner health as returned by Runner::Status() call
|
||||
type RunnerStatus struct {
|
||||
ActiveRequestCount int32 // Number of active running requests on Runner
|
||||
ImagePullRetries int32 // Number of retries during image pull
|
||||
RequestsReceived uint64 // Number of requests received by Runner
|
||||
RequestsHandled uint64 // Number of requests handled without NACK by Runner
|
||||
KdumpsOnDisk uint64 // Number of kdumps on disk
|
||||
@@ -39,12 +40,13 @@ type RunnerStatus struct {
|
||||
CreatedAt common.DateTime // Status creation date at Runner
|
||||
StartedAt common.DateTime // Status execution date at Runner
|
||||
CompletedAt common.DateTime // Status completion date at Runner
|
||||
SchedulerDuration time.Duration // Amount of time runner scheduler spent on the request
|
||||
ExecutionDuration time.Duration // Amount of time runner spent on function execution
|
||||
ImagePullWaitDuration time.Duration // Amount of time spent waiting for the image pull
|
||||
CtrPrepDuration time.Duration // Amount of time spent preparing for the container creation
|
||||
CtrCreateDuration time.Duration //Amount of time spent creating the container
|
||||
CtrPrepDuration time.Duration // Amount of time spent preparing for the container creation
|
||||
ExecutionDuration time.Duration // Amount of time runner spent on function execution
|
||||
ImagePullDuration time.Duration // Amount of time spent pulling the image
|
||||
ImagePullWaitDuration time.Duration // Amount of time spent waiting for the image pull
|
||||
InitStartTime time.Duration // Container Init UDS Latency time
|
||||
SchedulerDuration time.Duration // Amount of time runner scheduler spent on the request
|
||||
IsNetworkDisabled bool // True if network on runner is offline
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user