mirror of https://github.com/linkerd/linkerd2.git
Add latency stats in new stat summary endpoint (#737)
The new StatSummary endpoint was only providing request volume and successs rate information. Add support for retrieving latency stats via StatSummary. Also make all prometheus calls in parallel, and implement kubernetes test fixtures. Fixes #681 Signed-off-by: Andrew Seigner <siggy@buoyant.io>
This commit is contained in:
parent
e1e1b6b599
commit
259fdcd134
|
@ -746,6 +746,6 @@
|
|||
[solve-meta]
|
||||
analyzer-name = "dep"
|
||||
analyzer-version = 1
|
||||
inputs-digest = "24bea55844bef399aefb2624f12dc240050dd0757d3ff99b7ae07642432b7e0d"
|
||||
inputs-digest = "fcb8abf65ef829da5c65b12728673c4c60aadcc2ae4037874e24943ab3a2db89"
|
||||
solver-name = "gps-cdcl"
|
||||
solver-version = 1
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
## compile binaries
|
||||
FROM gcr.io/runconduit/go-deps:787ece88 as golang
|
||||
FROM gcr.io/runconduit/go-deps:bccd0b8c as golang
|
||||
ARG CONDUIT_VERSION
|
||||
WORKDIR /go/src/github.com/runconduit/conduit
|
||||
COPY cli cli
|
||||
|
|
|
@ -110,8 +110,9 @@ type summaryRow struct {
|
|||
meshed string
|
||||
requestRate float64
|
||||
successRate float64
|
||||
latencyP50 int64
|
||||
latencyP99 int64
|
||||
latencyP50 uint64
|
||||
latencyP95 uint64
|
||||
latencyP99 uint64
|
||||
}
|
||||
|
||||
func writeStatTableToBuffer(resp *pb.StatSummaryResponse, w *tabwriter.Writer) {
|
||||
|
@ -136,6 +137,9 @@ func writeStatTableToBuffer(resp *pb.StatSummaryResponse, w *tabwriter.Writer) {
|
|||
meshed: fmt.Sprintf("%d/%d", r.MeshedPodCount, r.TotalPodCount),
|
||||
requestRate: getRequestRate(*r),
|
||||
successRate: getSuccessRate(*r),
|
||||
latencyP50: r.Stats.LatencyMsP50,
|
||||
latencyP95: r.Stats.LatencyMsP95,
|
||||
latencyP99: r.Stats.LatencyMsP99,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -143,22 +147,24 @@ func writeStatTableToBuffer(resp *pb.StatSummaryResponse, w *tabwriter.Writer) {
|
|||
fmt.Fprintln(w, strings.Join([]string{
|
||||
nameHeader + strings.Repeat(" ", maxNameLength-len(nameHeader)),
|
||||
"MESHED",
|
||||
"IN_RPS",
|
||||
"IN_SUCCESS",
|
||||
"IN_LATENCY_P50",
|
||||
"IN_LATENCY_P99\t", // trailing \t is required to format last column
|
||||
"SUCCESS",
|
||||
"RPS",
|
||||
"LATENCY_P50",
|
||||
"LATENCY_P95",
|
||||
"LATENCY_P99\t", // trailing \t is required to format last column
|
||||
}, "\t"))
|
||||
|
||||
sortedNames := sortStatSummaryKeys(stats)
|
||||
for _, name := range sortedNames {
|
||||
fmt.Fprintf(
|
||||
w,
|
||||
"%s\t%s\t%.1frps\t%.2f%%\t%dms\t%dms\t\n",
|
||||
"%s\t%s\t%.1frps\t%.2f%%\t%dms\t%dms\t%dms\t\n",
|
||||
name+strings.Repeat(" ", maxNameLength-len(name)),
|
||||
stats[name].meshed,
|
||||
stats[name].requestRate,
|
||||
stats[name].successRate*100,
|
||||
stats[name].requestRate,
|
||||
stats[name].latencyP50,
|
||||
stats[name].latencyP95,
|
||||
stats[name].latencyP99,
|
||||
)
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
## compile controller services
|
||||
FROM gcr.io/runconduit/go-deps:787ece88 as golang
|
||||
FROM gcr.io/runconduit/go-deps:bccd0b8c as golang
|
||||
ARG CONDUIT_VERSION
|
||||
WORKDIR /go/src/github.com/runconduit/conduit
|
||||
COPY controller/gen controller/gen
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"math"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
|
@ -18,11 +19,26 @@ import (
|
|||
"k8s.io/apimachinery/pkg/runtime"
|
||||
)
|
||||
|
||||
type promType string
|
||||
type promResult struct {
|
||||
prom promType
|
||||
vec model.Vector
|
||||
err error
|
||||
}
|
||||
|
||||
const (
|
||||
reqQuery = "sum(increase(response_total{%s}[%s])) by (%s, classification)"
|
||||
reqQuery = "sum(increase(response_total{%s}[%s])) by (%s, classification)"
|
||||
latencyQuantileQuery = "histogram_quantile(%s, sum(irate(response_latency_ms_bucket{%s}[%s])) by (le, %s))"
|
||||
|
||||
promRequests = promType("QUERY_REQUESTS")
|
||||
promLatencyP50 = promType("0.5")
|
||||
promLatencyP95 = promType("0.95")
|
||||
promLatencyP99 = promType("0.99")
|
||||
)
|
||||
|
||||
var (
|
||||
promTypes = []promType{promRequests, promLatencyP50, promLatencyP95, promLatencyP99}
|
||||
|
||||
k8sResourceTypesToPromLabels = map[string]model.LabelName{
|
||||
k8s.KubernetesDeployments: "deployment",
|
||||
}
|
||||
|
@ -166,33 +182,83 @@ func buildRequestLabels(req *pb.StatSummaryRequest) string {
|
|||
}
|
||||
|
||||
func (s *grpcServer) getRequests(ctx context.Context, reqLabels string, groupBy string, timeWindow string) (map[string]*pb.BasicStats, error) {
|
||||
requestsQuery := fmt.Sprintf(reqQuery, reqLabels, timeWindow, groupBy)
|
||||
resultChan := make(chan promResult)
|
||||
|
||||
resultVector, err := s.queryProm(ctx, requestsQuery)
|
||||
// kick off 4 asynchronous queries: 1 request volume + 3 latency
|
||||
go func() {
|
||||
requestsQuery := fmt.Sprintf(reqQuery, reqLabels, timeWindow, groupBy)
|
||||
resultVector, err := s.queryProm(ctx, requestsQuery)
|
||||
|
||||
resultChan <- promResult{
|
||||
prom: promRequests,
|
||||
vec: resultVector,
|
||||
err: err,
|
||||
}
|
||||
}()
|
||||
|
||||
for _, quantile := range []promType{promLatencyP50, promLatencyP95, promLatencyP99} {
|
||||
go func(quantile promType) {
|
||||
latencyQuery := fmt.Sprintf(latencyQuantileQuery, quantile, reqLabels, timeWindow, groupBy)
|
||||
latencyResult, err := s.queryProm(ctx, latencyQuery)
|
||||
|
||||
resultChan <- promResult{
|
||||
prom: quantile,
|
||||
vec: latencyResult,
|
||||
err: err,
|
||||
}
|
||||
}(quantile)
|
||||
}
|
||||
|
||||
// process results, receive one message per prometheus query type
|
||||
var err error
|
||||
results := []promResult{}
|
||||
for i := 0; i < len(promTypes); i++ {
|
||||
result := <-resultChan
|
||||
if result.err != nil {
|
||||
log.Errorf("queryProm failed with: %s", err)
|
||||
err = result.err
|
||||
} else {
|
||||
results = append(results, result)
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return processRequests(resultVector, groupBy), nil
|
||||
return processRequests(results, groupBy), nil
|
||||
}
|
||||
|
||||
func processRequests(vec model.Vector, labelSelector string) map[string]*pb.BasicStats {
|
||||
result := make(map[string]*pb.BasicStats)
|
||||
func processRequests(results []promResult, labelSelector string) map[string]*pb.BasicStats {
|
||||
basicStats := make(map[string]*pb.BasicStats)
|
||||
|
||||
for _, sample := range vec {
|
||||
label := string(sample.Metric[model.LabelName(labelSelector)])
|
||||
if result[label] == nil {
|
||||
result[label] = &pb.BasicStats{}
|
||||
}
|
||||
for _, result := range results {
|
||||
for _, sample := range result.vec {
|
||||
label := string(sample.Metric[model.LabelName(labelSelector)])
|
||||
if basicStats[label] == nil {
|
||||
basicStats[label] = &pb.BasicStats{}
|
||||
}
|
||||
|
||||
switch string(sample.Metric[model.LabelName("classification")]) {
|
||||
case "success":
|
||||
result[label].SuccessCount = uint64(sample.Value)
|
||||
case "failure":
|
||||
result[label].FailureCount = uint64(sample.Value)
|
||||
value := uint64(math.Round(float64(sample.Value)))
|
||||
|
||||
switch result.prom {
|
||||
case promRequests:
|
||||
switch string(sample.Metric[model.LabelName("classification")]) {
|
||||
case "success":
|
||||
basicStats[label].SuccessCount = value
|
||||
case "failure":
|
||||
basicStats[label].FailureCount = value
|
||||
}
|
||||
case promLatencyP50:
|
||||
basicStats[label].LatencyMsP50 = value
|
||||
case promLatencyP95:
|
||||
basicStats[label].LatencyMsP95 = value
|
||||
case promLatencyP99:
|
||||
basicStats[label].LatencyMsP99 = value
|
||||
}
|
||||
}
|
||||
}
|
||||
return result
|
||||
|
||||
return basicStats
|
||||
}
|
||||
|
||||
func (s *grpcServer) getDeployment(namespace string, name string) ([]*appsv1.Deployment, map[string]*meshedCount, error) {
|
||||
|
|
|
@ -11,42 +11,76 @@ import (
|
|||
tap "github.com/runconduit/conduit/controller/gen/controller/tap"
|
||||
pb "github.com/runconduit/conduit/controller/gen/public"
|
||||
"github.com/runconduit/conduit/pkg/k8s"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/client-go/informers"
|
||||
"k8s.io/client-go/kubernetes/fake"
|
||||
"k8s.io/client-go/kubernetes/scheme"
|
||||
"k8s.io/client-go/tools/cache"
|
||||
)
|
||||
|
||||
type statSumExpected struct {
|
||||
err error
|
||||
k8sRes []string
|
||||
promRes model.Value
|
||||
req pb.StatSummaryRequest
|
||||
res pb.StatSummaryResponse
|
||||
}
|
||||
|
||||
var (
|
||||
clientSet = fake.NewSimpleClientset()
|
||||
sharedInformers = informers.NewSharedInformerFactory(clientSet, 10*time.Minute)
|
||||
fakeGrpcServer = newGrpcServer(
|
||||
&MockProm{},
|
||||
&mockTelemetry{},
|
||||
tap.NewTapClient(nil),
|
||||
sharedInformers.Apps().V1().Deployments().Lister(),
|
||||
sharedInformers.Core().V1().Pods().Lister(),
|
||||
"conduit",
|
||||
)
|
||||
)
|
||||
|
||||
func TestStatSummary(t *testing.T) {
|
||||
t.Run("Successfully performs a query based on resource type", func(t *testing.T) {
|
||||
expectations := []statSumExpected{
|
||||
statSumExpected{
|
||||
err: nil,
|
||||
promRes: model.Value(model.Vector{}),
|
||||
err: nil,
|
||||
k8sRes: []string{`
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: emoji
|
||||
namespace: emojivoto
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: emoji-svc
|
||||
strategy: {}
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- image: buoyantio/emojivoto-emoji-svc:v3
|
||||
`, `
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: emojivoto-meshed
|
||||
namespace: emojivoto
|
||||
labels:
|
||||
app: emoji-svc
|
||||
annotations:
|
||||
conduit.io/proxy-version: testinjectversion
|
||||
`, `
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: emojivoto-not-meshed
|
||||
namespace: emojivoto
|
||||
labels:
|
||||
app: emoji-svc
|
||||
`,
|
||||
},
|
||||
promRes: model.Vector{
|
||||
&model.Sample{
|
||||
Metric: model.Metric{"deployment": "emoji", "classification": "success"},
|
||||
Value: 123,
|
||||
Timestamp: 456,
|
||||
},
|
||||
},
|
||||
req: pb.StatSummaryRequest{
|
||||
Selector: &pb.ResourceSelection{
|
||||
Resource: &pb.Resource{
|
||||
Type: k8s.KubernetesDeployments,
|
||||
Namespace: "emojivoto",
|
||||
Type: k8s.KubernetesDeployments,
|
||||
},
|
||||
},
|
||||
TimeWindow: pb.TimeWindow_ONE_MIN,
|
||||
},
|
||||
res: pb.StatSummaryResponse{
|
||||
Response: &pb.StatSummaryResponse_Ok_{ // https://github.com/golang/protobuf/issues/205
|
||||
|
@ -55,7 +89,25 @@ func TestStatSummary(t *testing.T) {
|
|||
&pb.StatTable{
|
||||
Table: &pb.StatTable_PodGroup_{
|
||||
PodGroup: &pb.StatTable_PodGroup{
|
||||
Rows: []*pb.StatTable_PodGroup_Row{},
|
||||
Rows: []*pb.StatTable_PodGroup_Row{
|
||||
&pb.StatTable_PodGroup_Row{
|
||||
Resource: &pb.Resource{
|
||||
Namespace: "emojivoto",
|
||||
Type: "deployments",
|
||||
Name: "emoji",
|
||||
},
|
||||
Stats: &pb.BasicStats{
|
||||
SuccessCount: 123,
|
||||
FailureCount: 0,
|
||||
LatencyMsP50: 123,
|
||||
LatencyMsP95: 123,
|
||||
LatencyMsP99: 123,
|
||||
},
|
||||
TimeWindow: pb.TimeWindow_ONE_MIN,
|
||||
MeshedPodCount: 1,
|
||||
TotalPodCount: 2,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -67,7 +119,35 @@ func TestStatSummary(t *testing.T) {
|
|||
}
|
||||
|
||||
for _, exp := range expectations {
|
||||
fakeGrpcServer.prometheusAPI.(*MockProm).Res = exp.promRes
|
||||
k8sObjs := []runtime.Object{}
|
||||
for _, res := range exp.k8sRes {
|
||||
decode := scheme.Codecs.UniversalDeserializer().Decode
|
||||
obj, _, err := decode([]byte(res), nil, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("could not decode yml: %s", err)
|
||||
}
|
||||
k8sObjs = append(k8sObjs, obj)
|
||||
}
|
||||
|
||||
clientSet := fake.NewSimpleClientset(k8sObjs...)
|
||||
sharedInformers := informers.NewSharedInformerFactory(clientSet, 10*time.Minute)
|
||||
|
||||
deployInformer := sharedInformers.Apps().V1().Deployments()
|
||||
podInformer := sharedInformers.Core().V1().Pods()
|
||||
|
||||
fakeGrpcServer := newGrpcServer(
|
||||
&MockProm{Res: exp.promRes},
|
||||
&mockTelemetry{},
|
||||
tap.NewTapClient(nil),
|
||||
deployInformer.Lister(),
|
||||
podInformer.Lister(),
|
||||
"conduit",
|
||||
)
|
||||
stopCh := make(chan struct{})
|
||||
sharedInformers.Start(stopCh)
|
||||
if !cache.WaitForCacheSync(stopCh, deployInformer.Informer().HasSynced, podInformer.Informer().HasSynced) {
|
||||
t.Fatalf("timed out wait for caches to sync")
|
||||
}
|
||||
|
||||
rsp, err := fakeGrpcServer.StatSummary(context.TODO(), &exp.req)
|
||||
if err != exp.err {
|
||||
|
@ -115,7 +195,16 @@ func TestStatSummary(t *testing.T) {
|
|||
}
|
||||
|
||||
for _, exp := range expectations {
|
||||
fakeGrpcServer.prometheusAPI.(*MockProm).Res = exp.promRes
|
||||
clientSet := fake.NewSimpleClientset()
|
||||
sharedInformers := informers.NewSharedInformerFactory(clientSet, 10*time.Minute)
|
||||
fakeGrpcServer := newGrpcServer(
|
||||
&MockProm{Res: exp.promRes},
|
||||
&mockTelemetry{},
|
||||
tap.NewTapClient(nil),
|
||||
sharedInformers.Apps().V1().Deployments().Lister(),
|
||||
sharedInformers.Core().V1().Pods().Lister(),
|
||||
"conduit",
|
||||
)
|
||||
|
||||
_, err := fakeGrpcServer.StatSummary(context.TODO(), &exp.req)
|
||||
if err != nil || exp.err != nil {
|
||||
|
|
|
@ -1205,7 +1205,8 @@ type BasicStats struct {
|
|||
SuccessCount uint64 `protobuf:"varint,1,opt,name=success_count,json=successCount" json:"success_count,omitempty"`
|
||||
FailureCount uint64 `protobuf:"varint,2,opt,name=failure_count,json=failureCount" json:"failure_count,omitempty"`
|
||||
LatencyMsP50 uint64 `protobuf:"varint,3,opt,name=latency_ms_p50,json=latencyMsP50" json:"latency_ms_p50,omitempty"`
|
||||
LatencyMsP90 uint64 `protobuf:"varint,4,opt,name=latency_ms_p90,json=latencyMsP90" json:"latency_ms_p90,omitempty"`
|
||||
LatencyMsP95 uint64 `protobuf:"varint,4,opt,name=latency_ms_p95,json=latencyMsP95" json:"latency_ms_p95,omitempty"`
|
||||
LatencyMsP99 uint64 `protobuf:"varint,5,opt,name=latency_ms_p99,json=latencyMsP99" json:"latency_ms_p99,omitempty"`
|
||||
}
|
||||
|
||||
func (m *BasicStats) Reset() { *m = BasicStats{} }
|
||||
|
@ -1234,9 +1235,16 @@ func (m *BasicStats) GetLatencyMsP50() uint64 {
|
|||
return 0
|
||||
}
|
||||
|
||||
func (m *BasicStats) GetLatencyMsP90() uint64 {
|
||||
func (m *BasicStats) GetLatencyMsP95() uint64 {
|
||||
if m != nil {
|
||||
return m.LatencyMsP90
|
||||
return m.LatencyMsP95
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *BasicStats) GetLatencyMsP99() uint64 {
|
||||
if m != nil {
|
||||
return m.LatencyMsP99
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
@ -1692,13 +1700,13 @@ var _Api_serviceDesc = grpc.ServiceDesc{
|
|||
func init() { proto.RegisterFile("public/api.proto", fileDescriptor0) }
|
||||
|
||||
var fileDescriptor0 = []byte{
|
||||
// 1689 bytes of a gzipped FileDescriptorProto
|
||||
// 1697 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x57, 0xcd, 0x73, 0x23, 0x47,
|
||||
0x15, 0xd7, 0x8c, 0x64, 0x4b, 0x7a, 0xb2, 0x6c, 0x6d, 0x6f, 0x48, 0x29, 0x22, 0x59, 0x9c, 0x49,
|
||||
0x58, 0x5c, 0x0b, 0x68, 0x8d, 0x59, 0xa7, 0xf0, 0xa6, 0xb6, 0x82, 0x2c, 0x2b, 0x2b, 0x57, 0xf9,
|
||||
0x43, 0xb4, 0xb4, 0x21, 0x29, 0xa8, 0x52, 0xb5, 0x67, 0xda, 0xd2, 0xe0, 0x99, 0xe9, 0xc9, 0x74,
|
||||
0xcf, 0x1a, 0x71, 0xe7, 0xca, 0x99, 0x1b, 0x55, 0x1c, 0xf8, 0x27, 0x38, 0xf3, 0x1f, 0xc0, 0x91,
|
||||
0xff, 0x84, 0x03, 0xd5, 0x1f, 0x33, 0xfa, 0x58, 0x79, 0xe3, 0xda, 0x9c, 0xd4, 0xfd, 0xeb, 0xdf,
|
||||
0xcf, 0x1a, 0x71, 0xe7, 0xca, 0x99, 0x1b, 0x37, 0xfe, 0x09, 0xce, 0x54, 0xf1, 0x07, 0xc0, 0x91,
|
||||
0xff, 0x84, 0x03, 0xd5, 0x1f, 0x33, 0xfa, 0xb0, 0xbc, 0xd9, 0xda, 0x9c, 0xd4, 0xfd, 0xeb, 0xdf,
|
||||
0x7b, 0xfd, 0xbe, 0xfa, 0xe9, 0x0d, 0x34, 0xe2, 0xf4, 0x2a, 0xf0, 0xdd, 0xa7, 0x24, 0xf6, 0xdb,
|
||||
0x71, 0xc2, 0x04, 0x43, 0xdb, 0x2e, 0x8b, 0xbc, 0xd4, 0x17, 0x6d, 0x7d, 0xd2, 0x7a, 0x34, 0x61,
|
||||
0x6c, 0x12, 0xd0, 0xa7, 0xea, 0xf4, 0x2a, 0xbd, 0x7e, 0xea, 0xa5, 0x09, 0x11, 0x3e, 0x8b, 0x34,
|
||||
|
@ -1707,14 +1715,14 @@ var fileDescriptor0 = []byte{
|
|||
0x36, 0x49, 0x48, 0xf8, 0x15, 0x09, 0x52, 0x8a, 0x9e, 0xc1, 0x46, 0x40, 0xae, 0x68, 0xd0, 0xb4,
|
||||
0x76, 0xad, 0xbd, 0xed, 0x83, 0x47, 0xed, 0x65, 0x63, 0xda, 0x39, 0xfd, 0x4c, 0xb2, 0xb0, 0x26,
|
||||
0xa3, 0xf7, 0x60, 0xe3, 0xb5, 0x14, 0x6f, 0xda, 0xbb, 0xd6, 0x5e, 0x11, 0xeb, 0x8d, 0xd3, 0x85,
|
||||
0x6a, 0x4e, 0x47, 0x9f, 0xc1, 0xa6, 0x42, 0x79, 0xd3, 0xda, 0x2d, 0xee, 0xd5, 0xde, 0xa2, 0x59,
|
||||
0x6a, 0x4e, 0x47, 0x9f, 0xc1, 0xa6, 0x42, 0x79, 0xd3, 0xda, 0x2d, 0xee, 0xd5, 0xde, 0xa0, 0x59,
|
||||
0x19, 0x82, 0x0d, 0xdb, 0xf9, 0xb3, 0x05, 0xb5, 0x73, 0x2a, 0x12, 0xdf, 0xd5, 0x06, 0xb6, 0xa0,
|
||||
0xec, 0xb2, 0x34, 0x12, 0x34, 0x51, 0x26, 0x16, 0xfb, 0x05, 0x9c, 0x01, 0xe8, 0x7d, 0xd8, 0x98,
|
||||
0x90, 0x74, 0xa2, 0xcd, 0xb0, 0xfa, 0x05, 0xac, 0xb7, 0xe8, 0x08, 0xaa, 0xd3, 0x4c, 0x7b, 0xb3,
|
||||
0xb8, 0x6b, 0xed, 0xd5, 0x0e, 0x3e, 0xb8, 0xf3, 0xfa, 0x7e, 0x01, 0xcf, 0xd9, 0xc7, 0x65, 0xe3,
|
||||
0xb8, 0x6b, 0xed, 0xd5, 0x0e, 0x3e, 0xb8, 0xf7, 0xfa, 0x7e, 0x01, 0xcf, 0xd9, 0xc7, 0x65, 0xe3,
|
||||
0x99, 0x33, 0x81, 0x1d, 0x6d, 0xc6, 0x09, 0x11, 0x24, 0x66, 0x7e, 0x24, 0xd0, 0x2f, 0x32, 0xaf,
|
||||
0x2d, 0xa5, 0xf2, 0x87, 0xab, 0x2a, 0x17, 0xcc, 0x36, 0x21, 0x41, 0x1f, 0xc3, 0x96, 0xf0, 0x43,
|
||||
0xca, 0x05, 0x09, 0xe3, 0x71, 0xc8, 0x4d, 0xbc, 0x6a, 0x39, 0x76, 0xce, 0x9d, 0x7f, 0x5a, 0xb0,
|
||||
0xca, 0x05, 0x09, 0xe3, 0x71, 0xc8, 0x4d, 0xbc, 0x6a, 0x39, 0x76, 0xce, 0x9d, 0x7f, 0x58, 0xb0,
|
||||
0xa5, 0x25, 0x87, 0x34, 0xf1, 0x29, 0x47, 0x6d, 0x28, 0x45, 0x24, 0xa4, 0x26, 0x23, 0xad, 0xf5,
|
||||
0xb7, 0x5c, 0x90, 0x90, 0x62, 0xc5, 0x43, 0xcf, 0xa1, 0x12, 0x52, 0x41, 0x3c, 0x22, 0x88, 0xd2,
|
||||
0xbf, 0x26, 0xd6, 0x5a, 0xe6, 0xdc, 0xb0, 0x70, 0xce, 0x47, 0x5f, 0x00, 0x78, 0x99, 0x7f, 0xbc,
|
||||
|
@ -1724,10 +1732,10 @@ var fileDescriptor0 = []byte{
|
|||
0xba, 0x2c, 0x8c, 0x59, 0x44, 0x23, 0xa1, 0x92, 0x58, 0xc5, 0x73, 0xc0, 0xe9, 0x67, 0xf7, 0x62,
|
||||
0xca, 0x63, 0x16, 0x71, 0x8a, 0x3e, 0x83, 0x72, 0xa8, 0x90, 0xac, 0xe2, 0x3e, 0x5c, 0xef, 0x87,
|
||||
0x8e, 0x32, 0xce, 0xc8, 0xce, 0x5f, 0x6c, 0xa8, 0x67, 0xaa, 0xbe, 0x4d, 0x29, 0x17, 0xe8, 0xd9,
|
||||
0xb2, 0xa6, 0xb7, 0xe7, 0x20, 0xa3, 0xa2, 0x03, 0xd8, 0xbc, 0xf5, 0x23, 0x8f, 0xdd, 0x2a, 0x6f,
|
||||
0xb2, 0xa6, 0x37, 0xe7, 0x20, 0xa3, 0xa2, 0x03, 0xd8, 0xbc, 0xf5, 0x23, 0x8f, 0xdd, 0x2a, 0x6f,
|
||||
0xd6, 0x08, 0x8d, 0xfc, 0x90, 0xfe, 0x56, 0x31, 0xb0, 0x61, 0xa2, 0x23, 0x28, 0x4f, 0x12, 0x96,
|
||||
0xc6, 0xc7, 0x33, 0xe5, 0xe1, 0xf6, 0x9b, 0xb1, 0xef, 0x4c, 0x26, 0x09, 0x9d, 0xa8, 0xe7, 0x3f,
|
||||
0x9a, 0xc5, 0x14, 0x67, 0x7c, 0x99, 0xf5, 0x6b, 0x3f, 0x10, 0x34, 0x39, 0x9e, 0x35, 0x4b, 0xf7,
|
||||
0xc6, 0xc7, 0x33, 0xe5, 0xe1, 0xf6, 0xdd, 0xd8, 0x77, 0x26, 0x93, 0x84, 0x4e, 0xd4, 0xf3, 0x1f,
|
||||
0xcd, 0x62, 0x8a, 0x33, 0xbe, 0xcc, 0xfa, 0xb5, 0x1f, 0x08, 0x9a, 0x1c, 0xcf, 0x9a, 0xa5, 0xb7,
|
||||
0xcb, 0x7a, 0xc6, 0x97, 0xa1, 0xe5, 0x69, 0x18, 0x92, 0xc4, 0xff, 0x13, 0x6d, 0x6e, 0xec, 0x5a,
|
||||
0x7b, 0x15, 0x3c, 0x07, 0x9c, 0x32, 0x6c, 0xf4, 0xc2, 0x58, 0xcc, 0x9c, 0x6f, 0xa1, 0xf6, 0x15,
|
||||
0x4d, 0xb8, 0xcf, 0xa2, 0xd3, 0xe8, 0x9a, 0x49, 0xa9, 0x09, 0x33, 0x80, 0xc9, 0xea, 0x1c, 0x90,
|
||||
|
@ -1741,7 +1749,7 @@ var fileDescriptor0 = []byte{
|
|||
0xe9, 0x19, 0xe1, 0x02, 0xd3, 0x98, 0x25, 0xa2, 0xb9, 0x69, 0x9a, 0x8f, 0x6e, 0xe9, 0xed, 0xac,
|
||||
0xa5, 0xb7, 0x4f, 0x4c, 0x4b, 0xc7, 0xab, 0x12, 0x68, 0x1f, 0x1e, 0xba, 0x2c, 0x12, 0x09, 0x0b,
|
||||
0x02, 0x9a, 0xc8, 0x0a, 0xe3, 0x31, 0x71, 0x69, 0xb3, 0xac, 0xee, 0x5f, 0x77, 0x24, 0x1f, 0x93,
|
||||
0x81, 0x07, 0x01, 0x89, 0x68, 0xb3, 0xa2, 0x6c, 0x5a, 0xc2, 0x9c, 0x7f, 0xd8, 0x00, 0x23, 0x12,
|
||||
0x81, 0x07, 0x01, 0x89, 0x68, 0xb3, 0xa2, 0x6c, 0x5a, 0xc2, 0x9c, 0xbf, 0xdb, 0x00, 0x23, 0x12,
|
||||
0x67, 0x15, 0x8e, 0xa0, 0x18, 0x33, 0x4f, 0x07, 0xa8, 0x5f, 0xc0, 0x72, 0x83, 0x76, 0x97, 0x62,
|
||||
0x61, 0x9b, 0xa3, 0x95, 0x68, 0x84, 0xe4, 0x8f, 0x38, 0xe6, 0x2a, 0x52, 0x36, 0x36, 0x3b, 0x89,
|
||||
0x0b, 0x36, 0x90, 0xee, 0xca, 0x28, 0xd5, 0xb1, 0xd9, 0xc9, 0x3c, 0x08, 0x76, 0x3a, 0x50, 0x41,
|
||||
|
@ -1757,46 +1765,47 @@ var fileDescriptor0 = []byte{
|
|||
0x44, 0x3f, 0x86, 0x6d, 0xf5, 0x0f, 0x3d, 0xe6, 0x4a, 0x11, 0x4b, 0xcc, 0xe5, 0x75, 0x85, 0x0e,
|
||||
0x0d, 0xe8, 0xfc, 0x0e, 0xea, 0x99, 0xb0, 0x76, 0xf5, 0xdd, 0x6e, 0xcb, 0x03, 0x64, 0x2f, 0x06,
|
||||
0xe8, 0x3f, 0x36, 0xa0, 0xa1, 0x20, 0x62, 0xa8, 0x3a, 0xca, 0x2c, 0xab, 0xb9, 0x17, 0x50, 0xc9,
|
||||
0x8d, 0xd2, 0x57, 0x7c, 0x7c, 0xd7, 0x15, 0x79, 0x14, 0x70, 0x2e, 0x82, 0x3e, 0x07, 0xf5, 0xaf,
|
||||
0x39, 0xbe, 0x77, 0x8f, 0x05, 0x91, 0xaf, 0xd1, 0x4f, 0xa1, 0x14, 0xb1, 0x88, 0x9a, 0x59, 0xe0,
|
||||
0x07, 0xab, 0x52, 0xaa, 0xdd, 0xf5, 0x0b, 0x58, 0x91, 0xd0, 0x31, 0xec, 0xb0, 0x54, 0x8c, 0x05,
|
||||
0x1b, 0xe7, 0x21, 0x29, 0xbd, 0x3d, 0x24, 0xfd, 0x02, 0xae, 0xb3, 0x54, 0x8c, 0x58, 0x5e, 0x18,
|
||||
0x5f, 0xc2, 0x03, 0xa9, 0x43, 0x16, 0xf0, 0x5c, 0xcb, 0xc6, 0x77, 0x6a, 0x91, 0x17, 0x7f, 0x99,
|
||||
0xb0, 0x30, 0x83, 0x8e, 0x01, 0x2a, 0x2c, 0x15, 0x57, 0x2c, 0x8d, 0x3c, 0xe7, 0xdf, 0x16, 0x3c,
|
||||
0x5c, 0x8a, 0xab, 0xe9, 0x8f, 0xbf, 0x02, 0x9b, 0xdd, 0x98, 0x90, 0x3e, 0x5e, 0x55, 0xbe, 0x46,
|
||||
0xa0, 0x7d, 0x79, 0xd3, 0x2f, 0x60, 0x9b, 0xdd, 0xa0, 0xc3, 0xc5, 0xfc, 0xd5, 0x0e, 0x3e, 0xba,
|
||||
0xcb, 0x32, 0x55, 0x23, 0x72, 0xbc, 0x52, 0xec, 0xd6, 0xaf, 0xc1, 0xbe, 0xbc, 0x41, 0xcf, 0xa1,
|
||||
0x26, 0xbb, 0xe1, 0x58, 0x90, 0xab, 0x20, 0x9f, 0xf2, 0x3e, 0x58, 0x77, 0xff, 0x48, 0x32, 0x30,
|
||||
0xf0, 0x6c, 0xc9, 0xa5, 0x5b, 0x89, 0xb1, 0xc6, 0xf9, 0xbb, 0x05, 0x70, 0x4c, 0xb8, 0xef, 0x4a,
|
||||
0x2a, 0x47, 0x9f, 0x40, 0x9d, 0xa7, 0xae, 0x4b, 0x39, 0x1f, 0xab, 0x31, 0x4f, 0x39, 0x56, 0xc2,
|
||||
0x5b, 0x06, 0xec, 0x4a, 0x4c, 0x92, 0xae, 0x89, 0x1f, 0xa4, 0x09, 0x35, 0x24, 0x5b, 0x93, 0x0c,
|
||||
0xa8, 0x49, 0x9f, 0xca, 0xb7, 0x20, 0x68, 0xe4, 0xce, 0xc6, 0x21, 0x1f, 0xc7, 0x87, 0xfb, 0x2a,
|
||||
0xfd, 0x25, 0xbc, 0x65, 0xd0, 0x73, 0x3e, 0x38, 0xdc, 0x5f, 0x65, 0x1d, 0xed, 0xab, 0x64, 0x2f,
|
||||
0xb1, 0x8e, 0xf6, 0x9d, 0xbf, 0x15, 0xa1, 0x9a, 0xbb, 0x82, 0x3a, 0x50, 0x8d, 0x99, 0x37, 0x56,
|
||||
0x7f, 0xc5, 0x26, 0xf0, 0xce, 0x9d, 0x8e, 0xcb, 0x3f, 0xa8, 0x97, 0x92, 0xd9, 0x2f, 0xe0, 0x4a,
|
||||
0x6c, 0xd6, 0xad, 0x7f, 0xd9, 0x50, 0xc9, 0x0e, 0xd0, 0x73, 0x28, 0x25, 0xec, 0x36, 0x8b, 0xe1,
|
||||
0xe3, 0xef, 0x56, 0xd5, 0xc6, 0xec, 0x16, 0x2b, 0x99, 0xd6, 0xff, 0x2c, 0x28, 0x62, 0x76, 0xfb,
|
||||
0x8e, 0x2f, 0xf8, 0x7b, 0xbd, 0xaa, 0x3d, 0x68, 0x84, 0x94, 0x4f, 0xa9, 0x37, 0x96, 0xd1, 0xd0,
|
||||
0x89, 0xd0, 0x21, 0xde, 0xd6, 0xf8, 0x80, 0x79, 0x3a, 0x15, 0x8f, 0x61, 0x47, 0x30, 0x41, 0x82,
|
||||
0x05, 0xa2, 0x8e, 0x72, 0x5d, 0xc1, 0x39, 0x6f, 0x1f, 0x36, 0x64, 0x95, 0x70, 0xf3, 0x54, 0xde,
|
||||
0x30, 0x64, 0x5e, 0x27, 0x58, 0x13, 0xe5, 0xbc, 0xae, 0x0a, 0xf0, 0xc9, 0x0b, 0x80, 0xf9, 0x54,
|
||||
0x86, 0x1a, 0xb0, 0x85, 0x7b, 0xbf, 0x79, 0xd5, 0x1b, 0x8e, 0xc6, 0xb8, 0x33, 0xea, 0x35, 0x0a,
|
||||
0xa8, 0x06, 0xe5, 0xb3, 0xce, 0xa8, 0x77, 0xd1, 0xfd, 0xa6, 0x61, 0xc9, 0xe3, 0xe1, 0xab, 0x6e,
|
||||
0xb7, 0x37, 0x1c, 0xea, 0x63, 0xfb, 0x49, 0x07, 0x60, 0xee, 0xa5, 0x24, 0x8f, 0x7a, 0x17, 0xe3,
|
||||
0x61, 0xaf, 0xab, 0x25, 0x2f, 0x2f, 0x7a, 0xe3, 0xf3, 0xd3, 0x8b, 0x86, 0x95, 0x9d, 0xc8, 0x8d,
|
||||
0x8d, 0xb6, 0xa0, 0x22, 0x4f, 0xfa, 0x97, 0xaf, 0x70, 0xa3, 0xf8, 0xa4, 0x03, 0x3b, 0x2b, 0xd3,
|
||||
0x1a, 0x7a, 0x00, 0xf5, 0x51, 0x07, 0xbf, 0xec, 0x8d, 0xc6, 0x27, 0xbd, 0xc1, 0xd9, 0xe5, 0x37,
|
||||
0x8d, 0x82, 0x84, 0x86, 0x97, 0xaf, 0x70, 0xb7, 0x97, 0x41, 0x16, 0xaa, 0x40, 0xe9, 0xbc, 0x37,
|
||||
0xec, 0x37, 0xec, 0x27, 0x2f, 0x16, 0xbe, 0xcf, 0xd4, 0x07, 0x17, 0x2a, 0x43, 0x51, 0xde, 0x55,
|
||||
0x90, 0x8b, 0xc1, 0xe1, 0x7e, 0xc3, 0x52, 0x8b, 0xa3, 0xc3, 0x86, 0xad, 0x17, 0x47, 0x8d, 0xa2,
|
||||
0xe2, 0x74, 0xbe, 0x6e, 0x94, 0x0e, 0xfe, 0x5b, 0x84, 0x62, 0x27, 0xf6, 0xd1, 0x4b, 0x28, 0xc9,
|
||||
0x20, 0xa1, 0x8f, 0xd6, 0x4f, 0x84, 0xa6, 0x23, 0xb7, 0x1e, 0xdd, 0x75, 0x6c, 0x5e, 0x66, 0x01,
|
||||
0x7d, 0x0d, 0xb5, 0x85, 0x06, 0x82, 0x9c, 0xb7, 0x76, 0x17, 0xad, 0xf4, 0x93, 0x7b, 0x74, 0x20,
|
||||
0xa7, 0x80, 0xbe, 0x80, 0x72, 0x36, 0x39, 0xae, 0x6f, 0xc7, 0xad, 0x37, 0x3e, 0xaf, 0x16, 0x66,
|
||||
0x51, 0xa7, 0x80, 0x7a, 0x50, 0xc9, 0x26, 0xc5, 0xbb, 0x34, 0xec, 0xae, 0xc2, 0xab, 0xa3, 0xa5,
|
||||
0x53, 0x40, 0x7f, 0x80, 0xea, 0x90, 0x06, 0xd7, 0x5d, 0xf9, 0x91, 0x8c, 0x7e, 0x96, 0x0b, 0x98,
|
||||
0x6f, 0xeb, 0xc5, 0x2f, 0xe8, 0x9c, 0x96, 0x79, 0xfa, 0xf3, 0x7b, 0xb2, 0x17, 0x7c, 0x2e, 0x8e,
|
||||
0x48, 0x8c, 0xde, 0x7c, 0x5e, 0xf9, 0x60, 0xd6, 0x6a, 0xae, 0xea, 0x1c, 0x91, 0xb8, 0xf7, 0x5a,
|
||||
0x7e, 0xf0, 0x14, 0xf6, 0xad, 0xab, 0x4d, 0x35, 0x3f, 0xfe, 0xf2, 0xff, 0x01, 0x00, 0x00, 0xff,
|
||||
0xff, 0x5f, 0x59, 0x17, 0x25, 0x44, 0x10, 0x00, 0x00,
|
||||
0x8d, 0xd2, 0x57, 0x7c, 0x7c, 0xdf, 0x15, 0x79, 0x14, 0x70, 0x2e, 0x82, 0x3e, 0x07, 0xf5, 0xaf,
|
||||
0x39, 0x7e, 0xeb, 0x1e, 0x0b, 0x22, 0x5f, 0xa3, 0x9f, 0x42, 0x29, 0x62, 0x11, 0x35, 0xb3, 0xc0,
|
||||
0x0f, 0x56, 0xa5, 0x54, 0xbb, 0xeb, 0x17, 0xb0, 0x22, 0xa1, 0x63, 0xd8, 0x61, 0xa9, 0x18, 0x0b,
|
||||
0x36, 0xce, 0x43, 0x52, 0x7a, 0x73, 0x48, 0xfa, 0x05, 0x5c, 0x67, 0xa9, 0x18, 0xb1, 0xbc, 0x30,
|
||||
0xbe, 0x84, 0x07, 0x52, 0x87, 0x2c, 0xe0, 0xb9, 0x96, 0x8d, 0xef, 0xd4, 0x22, 0x2f, 0xfe, 0x32,
|
||||
0x61, 0x61, 0x06, 0x1d, 0x03, 0x54, 0x58, 0x2a, 0xae, 0x58, 0x1a, 0x79, 0xce, 0xbf, 0x2d, 0x78,
|
||||
0xb8, 0x14, 0x57, 0xd3, 0x1f, 0x7f, 0x05, 0x36, 0xbb, 0x31, 0x21, 0x7d, 0xbc, 0xaa, 0x7c, 0x8d,
|
||||
0x40, 0xfb, 0xf2, 0xa6, 0x5f, 0xc0, 0x36, 0xbb, 0x41, 0x87, 0x8b, 0xf9, 0xab, 0x1d, 0x7c, 0x74,
|
||||
0x9f, 0x65, 0xaa, 0x46, 0xe4, 0x78, 0xa5, 0xd8, 0xad, 0x5f, 0x83, 0x7d, 0x79, 0x83, 0x9e, 0x43,
|
||||
0x4d, 0x76, 0xc3, 0xb1, 0x20, 0x57, 0x41, 0x3e, 0xe5, 0x7d, 0xb0, 0xee, 0xfe, 0x91, 0x64, 0x60,
|
||||
0xe0, 0xd9, 0x92, 0x4b, 0xb7, 0x12, 0x63, 0x8d, 0xf3, 0x2f, 0x0b, 0xe0, 0x98, 0x70, 0xdf, 0x95,
|
||||
0x54, 0x8e, 0x3e, 0x81, 0x3a, 0x4f, 0x5d, 0x97, 0x72, 0x3e, 0x56, 0x63, 0x9e, 0x72, 0xac, 0x84,
|
||||
0xb7, 0x0c, 0xd8, 0x95, 0x98, 0x24, 0x5d, 0x13, 0x3f, 0x48, 0x13, 0x6a, 0x48, 0xb6, 0x26, 0x19,
|
||||
0x50, 0x93, 0x3e, 0x95, 0x6f, 0x41, 0xd0, 0xc8, 0x9d, 0x8d, 0x43, 0x3e, 0x8e, 0x0f, 0xf7, 0x55,
|
||||
0xfa, 0x4b, 0x78, 0xcb, 0xa0, 0xe7, 0x7c, 0x70, 0xb8, 0xbf, 0xca, 0x3a, 0x3a, 0x54, 0xc9, 0x5e,
|
||||
0x62, 0x1d, 0x1d, 0xde, 0x61, 0x1d, 0xa9, 0x64, 0x2e, 0xb3, 0x8e, 0x9c, 0xbf, 0x15, 0xa1, 0x9a,
|
||||
0x3b, 0x8c, 0x3a, 0x50, 0x8d, 0x99, 0x37, 0x56, 0x7f, 0xd8, 0x26, 0x3d, 0xce, 0xbd, 0xe1, 0x91,
|
||||
0x7f, 0x63, 0x2f, 0x25, 0xb3, 0x5f, 0xc0, 0x95, 0xd8, 0xac, 0x5b, 0xff, 0xb4, 0xa1, 0x92, 0x1d,
|
||||
0xa0, 0xe7, 0x50, 0x4a, 0xd8, 0x6d, 0x16, 0xe9, 0xc7, 0xdf, 0xad, 0xaa, 0x8d, 0xd9, 0x2d, 0x56,
|
||||
0x32, 0xad, 0xff, 0x59, 0x50, 0xc4, 0xec, 0xf6, 0x1d, 0xdf, 0xf9, 0xf7, 0x7a, 0x7b, 0x7b, 0xd0,
|
||||
0x08, 0x29, 0x9f, 0x52, 0x6f, 0x2c, 0xa3, 0xa1, 0xd3, 0xa5, 0x13, 0xb1, 0xad, 0xf1, 0x01, 0xf3,
|
||||
0x74, 0xc2, 0x1e, 0xc3, 0x8e, 0x60, 0x82, 0x04, 0x0b, 0x44, 0x9d, 0x8b, 0xba, 0x82, 0x73, 0xde,
|
||||
0x3e, 0x6c, 0xc8, 0x5a, 0xe2, 0xe6, 0x41, 0xdd, 0x31, 0x64, 0x5e, 0x4d, 0x58, 0x13, 0xe5, 0x54,
|
||||
0xaf, 0xca, 0xf4, 0xc9, 0x0b, 0x80, 0xf9, 0xec, 0x86, 0x1a, 0xb0, 0x85, 0x7b, 0xbf, 0x79, 0xd5,
|
||||
0x1b, 0x8e, 0xc6, 0xb8, 0x33, 0xea, 0x35, 0x0a, 0xa8, 0x06, 0xe5, 0xb3, 0xce, 0xa8, 0x77, 0xd1,
|
||||
0xfd, 0xa6, 0x61, 0xc9, 0xe3, 0xe1, 0xab, 0x6e, 0xb7, 0x37, 0x1c, 0xea, 0x63, 0xfb, 0x49, 0x07,
|
||||
0x60, 0xee, 0xa5, 0x24, 0x8f, 0x7a, 0x17, 0xe3, 0x61, 0xaf, 0xab, 0x25, 0x2f, 0x2f, 0x7a, 0xe3,
|
||||
0xf3, 0xd3, 0x8b, 0x86, 0x95, 0x9d, 0xc8, 0x8d, 0x8d, 0xb6, 0xa0, 0x22, 0x4f, 0xfa, 0x97, 0xaf,
|
||||
0x70, 0xa3, 0xf8, 0xa4, 0x03, 0x3b, 0x2b, 0x33, 0x1d, 0x7a, 0x00, 0xf5, 0x51, 0x07, 0xbf, 0xec,
|
||||
0x8d, 0xc6, 0x27, 0xbd, 0xc1, 0xd9, 0xe5, 0x37, 0x8d, 0x82, 0x84, 0x86, 0x97, 0xaf, 0x70, 0xb7,
|
||||
0x97, 0x41, 0x16, 0xaa, 0x40, 0xe9, 0xbc, 0x37, 0xec, 0x37, 0xec, 0x27, 0x2f, 0x16, 0xbe, 0xe2,
|
||||
0xd4, 0x67, 0x19, 0x2a, 0x43, 0x51, 0xde, 0x55, 0x90, 0x8b, 0xc1, 0xe1, 0x7e, 0xc3, 0x52, 0x8b,
|
||||
0xa3, 0xc3, 0x86, 0xad, 0x17, 0x47, 0x8d, 0xa2, 0xe2, 0x74, 0xbe, 0x6e, 0x94, 0x0e, 0xfe, 0x5b,
|
||||
0x84, 0x62, 0x27, 0xf6, 0xd1, 0x4b, 0x28, 0xc9, 0x20, 0xa1, 0x8f, 0xd6, 0xcf, 0x8d, 0xa6, 0x6f,
|
||||
0xb7, 0x1e, 0xdd, 0x77, 0x6c, 0xde, 0x6f, 0x01, 0x7d, 0x0d, 0xb5, 0x85, 0x36, 0x83, 0x9c, 0x37,
|
||||
0xf6, 0x20, 0xad, 0xf4, 0x93, 0xb7, 0xe8, 0x53, 0x4e, 0x01, 0x7d, 0x01, 0xe5, 0x6c, 0xbe, 0x5c,
|
||||
0xdf, 0xb4, 0x5b, 0x77, 0x3e, 0xc2, 0x16, 0x26, 0x56, 0xa7, 0x80, 0x7a, 0x50, 0xc9, 0xe6, 0xc9,
|
||||
0xfb, 0x34, 0xec, 0xae, 0xc2, 0xab, 0x03, 0xa8, 0x53, 0x40, 0x7f, 0x80, 0xea, 0x90, 0x06, 0xd7,
|
||||
0x5d, 0xf9, 0x29, 0x8d, 0x7e, 0x96, 0x0b, 0x98, 0x2f, 0xf0, 0xc5, 0xef, 0xec, 0x9c, 0x96, 0x79,
|
||||
0xfa, 0xf3, 0xb7, 0x64, 0x2f, 0xf8, 0x5c, 0x1c, 0x91, 0x18, 0xdd, 0x7d, 0x5e, 0xf9, 0xf8, 0xd6,
|
||||
0x6a, 0xae, 0xea, 0x1c, 0x91, 0xb8, 0xf7, 0x5a, 0x7e, 0x16, 0x15, 0xf6, 0xad, 0xab, 0x4d, 0x35,
|
||||
0x65, 0xfe, 0xf2, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0xec, 0x4b, 0xec, 0x2d, 0x6a, 0x10, 0x00,
|
||||
0x00,
|
||||
}
|
||||
|
|
|
@ -166,7 +166,8 @@ message BasicStats {
|
|||
uint64 success_count = 1;
|
||||
uint64 failure_count = 2;
|
||||
uint64 latency_ms_p50 = 3;
|
||||
uint64 latency_ms_p90 = 4;
|
||||
uint64 latency_ms_p95 = 4;
|
||||
uint64 latency_ms_p99 = 5;
|
||||
}
|
||||
|
||||
message StatTable {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
## compile proxy-init utility
|
||||
FROM gcr.io/runconduit/go-deps:787ece88 as golang
|
||||
FROM gcr.io/runconduit/go-deps:bccd0b8c as golang
|
||||
WORKDIR /go/src/github.com/runconduit/conduit
|
||||
COPY ./proxy-init ./proxy-init
|
||||
RUN CGO_ENABLED=0 GOOS=linux go install -v -installsuffix cgo ./proxy-init/
|
||||
|
|
|
@ -12,7 +12,7 @@ RUN $HOME/.yarn/bin/yarn install --pure-lockfile
|
|||
RUN $HOME/.yarn/bin/yarn webpack
|
||||
|
||||
## compile go server
|
||||
FROM gcr.io/runconduit/go-deps:787ece88 as golang
|
||||
FROM gcr.io/runconduit/go-deps:bccd0b8c as golang
|
||||
ARG CONDUIT_VERSION
|
||||
WORKDIR /go/src/github.com/runconduit/conduit
|
||||
COPY web web
|
||||
|
|
Loading…
Reference in New Issue