storagenode dashboard is working and passing tests locally (#1072)
* storagenode dashboard is working and passing tests locally * linter fixes * linter fixes * moar linter fixes god * review fixes and updates * linter fixes
This commit is contained in:
parent
681d77c41a
commit
82b9b54695
@ -6,13 +6,18 @@ package main
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"runtime"
|
||||
"sort"
|
||||
"text/tabwriter"
|
||||
|
||||
"github.com/fatih/color"
|
||||
"github.com/gogo/protobuf/proto"
|
||||
"github.com/golang/protobuf/ptypes"
|
||||
"github.com/spf13/cobra"
|
||||
"go.uber.org/zap"
|
||||
|
||||
@ -22,6 +27,7 @@ import (
|
||||
"storj.io/storj/pkg/identity"
|
||||
"storj.io/storj/pkg/kademlia"
|
||||
"storj.io/storj/pkg/pb"
|
||||
"storj.io/storj/pkg/piecestore/psclient"
|
||||
"storj.io/storj/pkg/piecestore/psserver"
|
||||
"storj.io/storj/pkg/piecestore/psserver/psdb"
|
||||
"storj.io/storj/pkg/process"
|
||||
@ -69,7 +75,11 @@ var (
|
||||
Short: "Diagnostic Tool support",
|
||||
RunE: cmdDiag,
|
||||
}
|
||||
|
||||
dashboardCmd = &cobra.Command{
|
||||
Use: "dashboard",
|
||||
Short: "Display a dashbaord",
|
||||
RunE: dashCmd,
|
||||
}
|
||||
runCfg StorageNode
|
||||
setupCfg StorageNode
|
||||
|
||||
@ -82,7 +92,6 @@ var (
|
||||
)
|
||||
|
||||
const (
|
||||
// default server address, only for storage node
|
||||
defaultServerAddr = ":28967"
|
||||
)
|
||||
|
||||
@ -101,6 +110,7 @@ func init() {
|
||||
rootCmd.AddCommand(setupCmd)
|
||||
rootCmd.AddCommand(configCmd)
|
||||
rootCmd.AddCommand(diagCmd)
|
||||
rootCmd.AddCommand(dashboardCmd)
|
||||
cfgstruct.Bind(runCmd.Flags(), &runCfg, cfgstruct.ConfDir(defaultConfDir))
|
||||
cfgstruct.BindSetup(setupCmd.Flags(), &setupCfg, cfgstruct.ConfDir(defaultConfDir))
|
||||
cfgstruct.BindSetup(configCmd.Flags(), &setupCfg, cfgstruct.ConfDir(defaultConfDir))
|
||||
@ -124,7 +134,7 @@ func cmdRun(cmd *cobra.Command, args []string) (err error) {
|
||||
zap.S().Error("Failed to initialize telemetry batcher:", err)
|
||||
}
|
||||
|
||||
return runCfg.Server.Run(ctx, nil, runCfg.Kademlia, runCfg.Storage)
|
||||
return runCfg.Server.Run(process.Ctx(cmd), nil, runCfg.Kademlia, runCfg.Storage)
|
||||
}
|
||||
|
||||
func cmdSetup(cmd *cobra.Command, args []string) (err error) {
|
||||
@ -301,6 +311,71 @@ func cmdDiag(cmd *cobra.Command, args []string) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
func dashCmd(cmd *cobra.Command, args []string) (err error) {
|
||||
ctx := context.Background()
|
||||
|
||||
// create new client on localhost:7777
|
||||
lc, err := psclient.NewLiteClient(ctx, ":7777")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
stream, err := lc.Dashboard(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for {
|
||||
data, err := stream.Recv()
|
||||
if err == io.EOF {
|
||||
break
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
clr()
|
||||
heading := color.New(color.FgGreen, color.Bold)
|
||||
|
||||
_, _ = heading.Printf("\nStorage Node Dashboard Stats\n")
|
||||
_, _ = heading.Printf("\n===============================\n")
|
||||
|
||||
fmt.Fprintf(color.Output, "Node ID: %s\n", color.BlueString(data.GetNodeId()))
|
||||
|
||||
if data.GetConnection() {
|
||||
fmt.Fprintf(color.Output, "%s ", color.GreenString("ONLINE"))
|
||||
} else {
|
||||
fmt.Fprintf(color.Output, "%s ", color.RedString("OFFLINE"))
|
||||
}
|
||||
|
||||
uptime, err := ptypes.Duration(data.GetUptime())
|
||||
if err != nil {
|
||||
color.Red(" %+v \n", err)
|
||||
} else {
|
||||
color.Yellow(" %s \n", uptime)
|
||||
}
|
||||
|
||||
fmt.Fprintf(color.Output, "Node Connections: %+v\n", whiteInt(data.GetNodeConnections()))
|
||||
|
||||
color.Green("\nIO\t\tAvailable\tUsed\n--\t\t---------\t----")
|
||||
stats := data.GetStats()
|
||||
if stats != nil {
|
||||
fmt.Fprintf(color.Output, "Bandwidth\t%+v\t%+v\n", whiteInt(stats.GetAvailableBandwidth()), whiteInt(stats.GetUsedBandwidth()))
|
||||
fmt.Fprintf(color.Output, "Disk\t\t%+v\t%+v\n", whiteInt(stats.GetAvailableSpace()), whiteInt(stats.GetUsedSpace()))
|
||||
} else {
|
||||
color.Yellow("Loading...")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func whiteInt(value int64) string {
|
||||
return color.WhiteString(fmt.Sprintf("%+v", value))
|
||||
}
|
||||
|
||||
func isOperatorEmailValid(email string) error {
|
||||
if email == "" {
|
||||
return fmt.Errorf("Operator mail address isn't specified")
|
||||
@ -319,6 +394,42 @@ func isOperatorWalletValid(wallet string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// clr clears the screen so it can be redrawn
|
||||
func clr() {
|
||||
var clear = make(map[string]func())
|
||||
clear["linux"] = func() {
|
||||
cmd := exec.Command("clear")
|
||||
cmd.Stdout = os.Stdout
|
||||
err := cmd.Run()
|
||||
if err != nil {
|
||||
_ = fmt.Errorf("Linux clear screen command returned an error %+v", err)
|
||||
}
|
||||
}
|
||||
clear["darwin"] = func() {
|
||||
cmd := exec.Command("clear")
|
||||
cmd.Stdout = os.Stdout
|
||||
err := cmd.Run()
|
||||
if err != nil {
|
||||
_ = fmt.Errorf("MacOS clear screen command returned an error %+v", err)
|
||||
}
|
||||
}
|
||||
clear["windows"] = func() {
|
||||
cmd := exec.Command("cmd", "/c", "cls")
|
||||
cmd.Stdout = os.Stdout
|
||||
err := cmd.Run()
|
||||
if err != nil {
|
||||
_ = fmt.Errorf("Windows clear screen command returned an error %+v", err)
|
||||
}
|
||||
}
|
||||
|
||||
value, ok := clear[runtime.GOOS]
|
||||
if ok {
|
||||
value()
|
||||
} else {
|
||||
panic("Your platform is unsupported! I can't clear terminal screen :(")
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
process.Exec(rootCmd)
|
||||
}
|
||||
|
@ -48,6 +48,11 @@ func main() {
|
||||
Type: pb.NodeType_STORAGE,
|
||||
}
|
||||
tc := transport.NewClient(clientIdent)
|
||||
// create a new liteclient for dashboard on localhost port 7777
|
||||
liteClient, err := psclient.NewLiteClient(ctx, ":7777")
|
||||
if err != nil {
|
||||
log.Fatalf("could not initialize lite client: %s", err)
|
||||
}
|
||||
psClient, err := psclient.NewPSClient(ctx, tc, n, 0)
|
||||
if err != nil {
|
||||
log.Fatalf("could not initialize Client: %s", err)
|
||||
@ -232,7 +237,7 @@ func main() {
|
||||
Short: "Retrieve statistics",
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
var summary *pb.StatSummary
|
||||
summary, err := psClient.Stats(context.Background())
|
||||
summary, err := liteClient.Stats(context.Background())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
2
go.mod
2
go.mod
@ -37,7 +37,7 @@ require (
|
||||
github.com/eapache/queue v1.1.0 // indirect
|
||||
github.com/eclipse/paho.mqtt.golang v1.1.1 // indirect
|
||||
github.com/elazarl/go-bindata-assetfs v1.0.0 // indirect
|
||||
github.com/fatih/color v1.7.0 // indirect
|
||||
github.com/fatih/color v1.7.0
|
||||
github.com/fatih/structs v1.0.0 // indirect
|
||||
github.com/go-redis/redis v6.14.1+incompatible
|
||||
github.com/gogo/protobuf v1.1.2-0.20181116123445-07eab6a8298c
|
||||
|
@ -36,7 +36,7 @@ func (m *GetStatsRequest) Reset() { *m = GetStatsRequest{} }
|
||||
func (m *GetStatsRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*GetStatsRequest) ProtoMessage() {}
|
||||
func (*GetStatsRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_inspector_7b7fedb7046661e4, []int{0}
|
||||
return fileDescriptor_inspector_27853f276f81267a, []int{0}
|
||||
}
|
||||
func (m *GetStatsRequest) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_GetStatsRequest.Unmarshal(m, b)
|
||||
@ -70,7 +70,7 @@ func (m *GetStatsResponse) Reset() { *m = GetStatsResponse{} }
|
||||
func (m *GetStatsResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*GetStatsResponse) ProtoMessage() {}
|
||||
func (*GetStatsResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_inspector_7b7fedb7046661e4, []int{1}
|
||||
return fileDescriptor_inspector_27853f276f81267a, []int{1}
|
||||
}
|
||||
func (m *GetStatsResponse) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_GetStatsResponse.Unmarshal(m, b)
|
||||
@ -134,7 +134,7 @@ func (m *CreateStatsRequest) Reset() { *m = CreateStatsRequest{} }
|
||||
func (m *CreateStatsRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*CreateStatsRequest) ProtoMessage() {}
|
||||
func (*CreateStatsRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_inspector_7b7fedb7046661e4, []int{2}
|
||||
return fileDescriptor_inspector_27853f276f81267a, []int{2}
|
||||
}
|
||||
func (m *CreateStatsRequest) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_CreateStatsRequest.Unmarshal(m, b)
|
||||
@ -192,7 +192,7 @@ func (m *CreateStatsResponse) Reset() { *m = CreateStatsResponse{} }
|
||||
func (m *CreateStatsResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*CreateStatsResponse) ProtoMessage() {}
|
||||
func (*CreateStatsResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_inspector_7b7fedb7046661e4, []int{3}
|
||||
return fileDescriptor_inspector_27853f276f81267a, []int{3}
|
||||
}
|
||||
func (m *CreateStatsResponse) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_CreateStatsResponse.Unmarshal(m, b)
|
||||
@ -224,7 +224,7 @@ func (m *CountNodesResponse) Reset() { *m = CountNodesResponse{} }
|
||||
func (m *CountNodesResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*CountNodesResponse) ProtoMessage() {}
|
||||
func (*CountNodesResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_inspector_7b7fedb7046661e4, []int{4}
|
||||
return fileDescriptor_inspector_27853f276f81267a, []int{4}
|
||||
}
|
||||
func (m *CountNodesResponse) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_CountNodesResponse.Unmarshal(m, b)
|
||||
@ -261,7 +261,7 @@ func (m *CountNodesRequest) Reset() { *m = CountNodesRequest{} }
|
||||
func (m *CountNodesRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*CountNodesRequest) ProtoMessage() {}
|
||||
func (*CountNodesRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_inspector_7b7fedb7046661e4, []int{5}
|
||||
return fileDescriptor_inspector_27853f276f81267a, []int{5}
|
||||
}
|
||||
func (m *CountNodesRequest) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_CountNodesRequest.Unmarshal(m, b)
|
||||
@ -292,7 +292,7 @@ func (m *GetBucketsRequest) Reset() { *m = GetBucketsRequest{} }
|
||||
func (m *GetBucketsRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*GetBucketsRequest) ProtoMessage() {}
|
||||
func (*GetBucketsRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_inspector_7b7fedb7046661e4, []int{6}
|
||||
return fileDescriptor_inspector_27853f276f81267a, []int{6}
|
||||
}
|
||||
func (m *GetBucketsRequest) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_GetBucketsRequest.Unmarshal(m, b)
|
||||
@ -324,7 +324,7 @@ func (m *GetBucketsResponse) Reset() { *m = GetBucketsResponse{} }
|
||||
func (m *GetBucketsResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*GetBucketsResponse) ProtoMessage() {}
|
||||
func (*GetBucketsResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_inspector_7b7fedb7046661e4, []int{7}
|
||||
return fileDescriptor_inspector_27853f276f81267a, []int{7}
|
||||
}
|
||||
func (m *GetBucketsResponse) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_GetBucketsResponse.Unmarshal(m, b)
|
||||
@ -363,7 +363,7 @@ func (m *GetBucketRequest) Reset() { *m = GetBucketRequest{} }
|
||||
func (m *GetBucketRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*GetBucketRequest) ProtoMessage() {}
|
||||
func (*GetBucketRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_inspector_7b7fedb7046661e4, []int{8}
|
||||
return fileDescriptor_inspector_27853f276f81267a, []int{8}
|
||||
}
|
||||
func (m *GetBucketRequest) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_GetBucketRequest.Unmarshal(m, b)
|
||||
@ -395,7 +395,7 @@ func (m *GetBucketResponse) Reset() { *m = GetBucketResponse{} }
|
||||
func (m *GetBucketResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*GetBucketResponse) ProtoMessage() {}
|
||||
func (*GetBucketResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_inspector_7b7fedb7046661e4, []int{9}
|
||||
return fileDescriptor_inspector_27853f276f81267a, []int{9}
|
||||
}
|
||||
func (m *GetBucketResponse) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_GetBucketResponse.Unmarshal(m, b)
|
||||
@ -433,7 +433,7 @@ func (m *Bucket) Reset() { *m = Bucket{} }
|
||||
func (m *Bucket) String() string { return proto.CompactTextString(m) }
|
||||
func (*Bucket) ProtoMessage() {}
|
||||
func (*Bucket) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_inspector_7b7fedb7046661e4, []int{10}
|
||||
return fileDescriptor_inspector_27853f276f81267a, []int{10}
|
||||
}
|
||||
func (m *Bucket) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_Bucket.Unmarshal(m, b)
|
||||
@ -471,7 +471,7 @@ func (m *BucketList) Reset() { *m = BucketList{} }
|
||||
func (m *BucketList) String() string { return proto.CompactTextString(m) }
|
||||
func (*BucketList) ProtoMessage() {}
|
||||
func (*BucketList) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_inspector_7b7fedb7046661e4, []int{11}
|
||||
return fileDescriptor_inspector_27853f276f81267a, []int{11}
|
||||
}
|
||||
func (m *BucketList) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_BucketList.Unmarshal(m, b)
|
||||
@ -511,7 +511,7 @@ func (m *PingNodeRequest) Reset() { *m = PingNodeRequest{} }
|
||||
func (m *PingNodeRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*PingNodeRequest) ProtoMessage() {}
|
||||
func (*PingNodeRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_inspector_7b7fedb7046661e4, []int{12}
|
||||
return fileDescriptor_inspector_27853f276f81267a, []int{12}
|
||||
}
|
||||
func (m *PingNodeRequest) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_PingNodeRequest.Unmarshal(m, b)
|
||||
@ -549,7 +549,7 @@ func (m *PingNodeResponse) Reset() { *m = PingNodeResponse{} }
|
||||
func (m *PingNodeResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*PingNodeResponse) ProtoMessage() {}
|
||||
func (*PingNodeResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_inspector_7b7fedb7046661e4, []int{13}
|
||||
return fileDescriptor_inspector_27853f276f81267a, []int{13}
|
||||
}
|
||||
func (m *PingNodeResponse) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_PingNodeResponse.Unmarshal(m, b)
|
||||
@ -588,7 +588,7 @@ func (m *LookupNodeRequest) Reset() { *m = LookupNodeRequest{} }
|
||||
func (m *LookupNodeRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*LookupNodeRequest) ProtoMessage() {}
|
||||
func (*LookupNodeRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_inspector_7b7fedb7046661e4, []int{14}
|
||||
return fileDescriptor_inspector_27853f276f81267a, []int{14}
|
||||
}
|
||||
func (m *LookupNodeRequest) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_LookupNodeRequest.Unmarshal(m, b)
|
||||
@ -634,7 +634,7 @@ func (m *LookupNodeResponse) Reset() { *m = LookupNodeResponse{} }
|
||||
func (m *LookupNodeResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*LookupNodeResponse) ProtoMessage() {}
|
||||
func (*LookupNodeResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_inspector_7b7fedb7046661e4, []int{15}
|
||||
return fileDescriptor_inspector_27853f276f81267a, []int{15}
|
||||
}
|
||||
func (m *LookupNodeResponse) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_LookupNodeResponse.Unmarshal(m, b)
|
||||
@ -1068,9 +1068,9 @@ var _StatDBInspector_serviceDesc = grpc.ServiceDesc{
|
||||
Metadata: "inspector.proto",
|
||||
}
|
||||
|
||||
func init() { proto.RegisterFile("inspector.proto", fileDescriptor_inspector_7b7fedb7046661e4) }
|
||||
func init() { proto.RegisterFile("inspector.proto", fileDescriptor_inspector_27853f276f81267a) }
|
||||
|
||||
var fileDescriptor_inspector_7b7fedb7046661e4 = []byte{
|
||||
var fileDescriptor_inspector_27853f276f81267a = []byte{
|
||||
// 644 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0xcb, 0x6e, 0xd3, 0x40,
|
||||
0x14, 0xc5, 0x4e, 0x9a, 0x26, 0x37, 0x51, 0x1e, 0x93, 0x22, 0x45, 0x4e, 0x68, 0xc2, 0x2c, 0x20,
|
||||
|
@ -7,6 +7,7 @@ import proto "github.com/gogo/protobuf/proto"
|
||||
import fmt "fmt"
|
||||
import math "math"
|
||||
import _ "github.com/gogo/protobuf/gogoproto"
|
||||
import duration "github.com/golang/protobuf/ptypes/duration"
|
||||
|
||||
import (
|
||||
context "golang.org/x/net/context"
|
||||
@ -53,7 +54,7 @@ func (x PayerBandwidthAllocation_Action) String() string {
|
||||
return proto.EnumName(PayerBandwidthAllocation_Action_name, int32(x))
|
||||
}
|
||||
func (PayerBandwidthAllocation_Action) EnumDescriptor() ([]byte, []int) {
|
||||
return fileDescriptor_piecestore_494b76725f4df406, []int{0, 0}
|
||||
return fileDescriptor_piecestore_664948018be76fe5, []int{0, 0}
|
||||
}
|
||||
|
||||
type PayerBandwidthAllocation struct {
|
||||
@ -68,7 +69,7 @@ func (m *PayerBandwidthAllocation) Reset() { *m = PayerBandwidthAllocati
|
||||
func (m *PayerBandwidthAllocation) String() string { return proto.CompactTextString(m) }
|
||||
func (*PayerBandwidthAllocation) ProtoMessage() {}
|
||||
func (*PayerBandwidthAllocation) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_piecestore_494b76725f4df406, []int{0}
|
||||
return fileDescriptor_piecestore_664948018be76fe5, []int{0}
|
||||
}
|
||||
func (m *PayerBandwidthAllocation) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_PayerBandwidthAllocation.Unmarshal(m, b)
|
||||
@ -120,7 +121,7 @@ func (m *PayerBandwidthAllocation_Data) Reset() { *m = PayerBandwidthAll
|
||||
func (m *PayerBandwidthAllocation_Data) String() string { return proto.CompactTextString(m) }
|
||||
func (*PayerBandwidthAllocation_Data) ProtoMessage() {}
|
||||
func (*PayerBandwidthAllocation_Data) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_piecestore_494b76725f4df406, []int{0, 0}
|
||||
return fileDescriptor_piecestore_664948018be76fe5, []int{0, 0}
|
||||
}
|
||||
func (m *PayerBandwidthAllocation_Data) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_PayerBandwidthAllocation_Data.Unmarshal(m, b)
|
||||
@ -194,7 +195,7 @@ func (m *RenterBandwidthAllocation) Reset() { *m = RenterBandwidthAlloca
|
||||
func (m *RenterBandwidthAllocation) String() string { return proto.CompactTextString(m) }
|
||||
func (*RenterBandwidthAllocation) ProtoMessage() {}
|
||||
func (*RenterBandwidthAllocation) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_piecestore_494b76725f4df406, []int{1}
|
||||
return fileDescriptor_piecestore_664948018be76fe5, []int{1}
|
||||
}
|
||||
func (m *RenterBandwidthAllocation) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_RenterBandwidthAllocation.Unmarshal(m, b)
|
||||
@ -241,7 +242,7 @@ func (m *RenterBandwidthAllocation_Data) Reset() { *m = RenterBandwidthA
|
||||
func (m *RenterBandwidthAllocation_Data) String() string { return proto.CompactTextString(m) }
|
||||
func (*RenterBandwidthAllocation_Data) ProtoMessage() {}
|
||||
func (*RenterBandwidthAllocation_Data) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_piecestore_494b76725f4df406, []int{1, 0}
|
||||
return fileDescriptor_piecestore_664948018be76fe5, []int{1, 0}
|
||||
}
|
||||
func (m *RenterBandwidthAllocation_Data) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_RenterBandwidthAllocation_Data.Unmarshal(m, b)
|
||||
@ -288,7 +289,7 @@ func (m *PieceStore) Reset() { *m = PieceStore{} }
|
||||
func (m *PieceStore) String() string { return proto.CompactTextString(m) }
|
||||
func (*PieceStore) ProtoMessage() {}
|
||||
func (*PieceStore) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_piecestore_494b76725f4df406, []int{2}
|
||||
return fileDescriptor_piecestore_664948018be76fe5, []int{2}
|
||||
}
|
||||
func (m *PieceStore) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_PieceStore.Unmarshal(m, b)
|
||||
@ -343,7 +344,7 @@ func (m *PieceStore_PieceData) Reset() { *m = PieceStore_PieceData{} }
|
||||
func (m *PieceStore_PieceData) String() string { return proto.CompactTextString(m) }
|
||||
func (*PieceStore_PieceData) ProtoMessage() {}
|
||||
func (*PieceStore_PieceData) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_piecestore_494b76725f4df406, []int{2, 0}
|
||||
return fileDescriptor_piecestore_664948018be76fe5, []int{2, 0}
|
||||
}
|
||||
func (m *PieceStore_PieceData) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_PieceStore_PieceData.Unmarshal(m, b)
|
||||
@ -397,7 +398,7 @@ func (m *PieceId) Reset() { *m = PieceId{} }
|
||||
func (m *PieceId) String() string { return proto.CompactTextString(m) }
|
||||
func (*PieceId) ProtoMessage() {}
|
||||
func (*PieceId) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_piecestore_494b76725f4df406, []int{3}
|
||||
return fileDescriptor_piecestore_664948018be76fe5, []int{3}
|
||||
}
|
||||
func (m *PieceId) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_PieceId.Unmarshal(m, b)
|
||||
@ -444,7 +445,7 @@ func (m *PieceSummary) Reset() { *m = PieceSummary{} }
|
||||
func (m *PieceSummary) String() string { return proto.CompactTextString(m) }
|
||||
func (*PieceSummary) ProtoMessage() {}
|
||||
func (*PieceSummary) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_piecestore_494b76725f4df406, []int{4}
|
||||
return fileDescriptor_piecestore_664948018be76fe5, []int{4}
|
||||
}
|
||||
func (m *PieceSummary) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_PieceSummary.Unmarshal(m, b)
|
||||
@ -498,7 +499,7 @@ func (m *PieceRetrieval) Reset() { *m = PieceRetrieval{} }
|
||||
func (m *PieceRetrieval) String() string { return proto.CompactTextString(m) }
|
||||
func (*PieceRetrieval) ProtoMessage() {}
|
||||
func (*PieceRetrieval) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_piecestore_494b76725f4df406, []int{5}
|
||||
return fileDescriptor_piecestore_664948018be76fe5, []int{5}
|
||||
}
|
||||
func (m *PieceRetrieval) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_PieceRetrieval.Unmarshal(m, b)
|
||||
@ -553,7 +554,7 @@ func (m *PieceRetrieval_PieceData) Reset() { *m = PieceRetrieval_PieceDa
|
||||
func (m *PieceRetrieval_PieceData) String() string { return proto.CompactTextString(m) }
|
||||
func (*PieceRetrieval_PieceData) ProtoMessage() {}
|
||||
func (*PieceRetrieval_PieceData) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_piecestore_494b76725f4df406, []int{5, 0}
|
||||
return fileDescriptor_piecestore_664948018be76fe5, []int{5, 0}
|
||||
}
|
||||
func (m *PieceRetrieval_PieceData) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_PieceRetrieval_PieceData.Unmarshal(m, b)
|
||||
@ -606,7 +607,7 @@ func (m *PieceRetrievalStream) Reset() { *m = PieceRetrievalStream{} }
|
||||
func (m *PieceRetrievalStream) String() string { return proto.CompactTextString(m) }
|
||||
func (*PieceRetrievalStream) ProtoMessage() {}
|
||||
func (*PieceRetrievalStream) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_piecestore_494b76725f4df406, []int{6}
|
||||
return fileDescriptor_piecestore_664948018be76fe5, []int{6}
|
||||
}
|
||||
func (m *PieceRetrievalStream) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_PieceRetrievalStream.Unmarshal(m, b)
|
||||
@ -653,7 +654,7 @@ func (m *PieceDelete) Reset() { *m = PieceDelete{} }
|
||||
func (m *PieceDelete) String() string { return proto.CompactTextString(m) }
|
||||
func (*PieceDelete) ProtoMessage() {}
|
||||
func (*PieceDelete) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_piecestore_494b76725f4df406, []int{7}
|
||||
return fileDescriptor_piecestore_664948018be76fe5, []int{7}
|
||||
}
|
||||
func (m *PieceDelete) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_PieceDelete.Unmarshal(m, b)
|
||||
@ -698,7 +699,7 @@ func (m *PieceDeleteSummary) Reset() { *m = PieceDeleteSummary{} }
|
||||
func (m *PieceDeleteSummary) String() string { return proto.CompactTextString(m) }
|
||||
func (*PieceDeleteSummary) ProtoMessage() {}
|
||||
func (*PieceDeleteSummary) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_piecestore_494b76725f4df406, []int{8}
|
||||
return fileDescriptor_piecestore_664948018be76fe5, []int{8}
|
||||
}
|
||||
func (m *PieceDeleteSummary) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_PieceDeleteSummary.Unmarshal(m, b)
|
||||
@ -737,7 +738,7 @@ func (m *PieceStoreSummary) Reset() { *m = PieceStoreSummary{} }
|
||||
func (m *PieceStoreSummary) String() string { return proto.CompactTextString(m) }
|
||||
func (*PieceStoreSummary) ProtoMessage() {}
|
||||
func (*PieceStoreSummary) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_piecestore_494b76725f4df406, []int{9}
|
||||
return fileDescriptor_piecestore_664948018be76fe5, []int{9}
|
||||
}
|
||||
func (m *PieceStoreSummary) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_PieceStoreSummary.Unmarshal(m, b)
|
||||
@ -781,7 +782,7 @@ func (m *StatsReq) Reset() { *m = StatsReq{} }
|
||||
func (m *StatsReq) String() string { return proto.CompactTextString(m) }
|
||||
func (*StatsReq) ProtoMessage() {}
|
||||
func (*StatsReq) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_piecestore_494b76725f4df406, []int{10}
|
||||
return fileDescriptor_piecestore_664948018be76fe5, []int{10}
|
||||
}
|
||||
func (m *StatsReq) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_StatsReq.Unmarshal(m, b)
|
||||
@ -815,7 +816,7 @@ func (m *StatSummary) Reset() { *m = StatSummary{} }
|
||||
func (m *StatSummary) String() string { return proto.CompactTextString(m) }
|
||||
func (*StatSummary) ProtoMessage() {}
|
||||
func (*StatSummary) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_piecestore_494b76725f4df406, []int{11}
|
||||
return fileDescriptor_piecestore_664948018be76fe5, []int{11}
|
||||
}
|
||||
func (m *StatSummary) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_StatSummary.Unmarshal(m, b)
|
||||
@ -876,7 +877,7 @@ func (m *SignedMessage) Reset() { *m = SignedMessage{} }
|
||||
func (m *SignedMessage) String() string { return proto.CompactTextString(m) }
|
||||
func (*SignedMessage) ProtoMessage() {}
|
||||
func (*SignedMessage) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_piecestore_494b76725f4df406, []int{12}
|
||||
return fileDescriptor_piecestore_664948018be76fe5, []int{12}
|
||||
}
|
||||
func (m *SignedMessage) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_SignedMessage.Unmarshal(m, b)
|
||||
@ -917,6 +918,114 @@ func (m *SignedMessage) GetPublicKey() []byte {
|
||||
return nil
|
||||
}
|
||||
|
||||
type DashboardReq struct {
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *DashboardReq) Reset() { *m = DashboardReq{} }
|
||||
func (m *DashboardReq) String() string { return proto.CompactTextString(m) }
|
||||
func (*DashboardReq) ProtoMessage() {}
|
||||
func (*DashboardReq) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_piecestore_664948018be76fe5, []int{13}
|
||||
}
|
||||
func (m *DashboardReq) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_DashboardReq.Unmarshal(m, b)
|
||||
}
|
||||
func (m *DashboardReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
return xxx_messageInfo_DashboardReq.Marshal(b, m, deterministic)
|
||||
}
|
||||
func (dst *DashboardReq) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_DashboardReq.Merge(dst, src)
|
||||
}
|
||||
func (m *DashboardReq) XXX_Size() int {
|
||||
return xxx_messageInfo_DashboardReq.Size(m)
|
||||
}
|
||||
func (m *DashboardReq) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_DashboardReq.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_DashboardReq proto.InternalMessageInfo
|
||||
|
||||
type DashboardStats struct {
|
||||
NodeId string `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"`
|
||||
NodeConnections int64 `protobuf:"varint,2,opt,name=node_connections,json=nodeConnections,proto3" json:"node_connections,omitempty"`
|
||||
Address string `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"`
|
||||
Stats *StatSummary `protobuf:"bytes,4,opt,name=stats" json:"stats,omitempty"`
|
||||
Connection bool `protobuf:"varint,5,opt,name=connection,proto3" json:"connection,omitempty"`
|
||||
Uptime *duration.Duration `protobuf:"bytes,6,opt,name=uptime" json:"uptime,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *DashboardStats) Reset() { *m = DashboardStats{} }
|
||||
func (m *DashboardStats) String() string { return proto.CompactTextString(m) }
|
||||
func (*DashboardStats) ProtoMessage() {}
|
||||
func (*DashboardStats) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_piecestore_664948018be76fe5, []int{14}
|
||||
}
|
||||
func (m *DashboardStats) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_DashboardStats.Unmarshal(m, b)
|
||||
}
|
||||
func (m *DashboardStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
return xxx_messageInfo_DashboardStats.Marshal(b, m, deterministic)
|
||||
}
|
||||
func (dst *DashboardStats) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_DashboardStats.Merge(dst, src)
|
||||
}
|
||||
func (m *DashboardStats) XXX_Size() int {
|
||||
return xxx_messageInfo_DashboardStats.Size(m)
|
||||
}
|
||||
func (m *DashboardStats) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_DashboardStats.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_DashboardStats proto.InternalMessageInfo
|
||||
|
||||
func (m *DashboardStats) GetNodeId() string {
|
||||
if m != nil {
|
||||
return m.NodeId
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (m *DashboardStats) GetNodeConnections() int64 {
|
||||
if m != nil {
|
||||
return m.NodeConnections
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *DashboardStats) GetAddress() string {
|
||||
if m != nil {
|
||||
return m.Address
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (m *DashboardStats) GetStats() *StatSummary {
|
||||
if m != nil {
|
||||
return m.Stats
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *DashboardStats) GetConnection() bool {
|
||||
if m != nil {
|
||||
return m.Connection
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (m *DashboardStats) GetUptime() *duration.Duration {
|
||||
if m != nil {
|
||||
return m.Uptime
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func init() {
|
||||
proto.RegisterType((*PayerBandwidthAllocation)(nil), "piecestoreroutes.PayerBandwidthAllocation")
|
||||
proto.RegisterType((*PayerBandwidthAllocation_Data)(nil), "piecestoreroutes.PayerBandwidthAllocation.Data")
|
||||
@ -935,6 +1044,8 @@ func init() {
|
||||
proto.RegisterType((*StatsReq)(nil), "piecestoreroutes.StatsReq")
|
||||
proto.RegisterType((*StatSummary)(nil), "piecestoreroutes.StatSummary")
|
||||
proto.RegisterType((*SignedMessage)(nil), "piecestoreroutes.SignedMessage")
|
||||
proto.RegisterType((*DashboardReq)(nil), "piecestoreroutes.DashboardReq")
|
||||
proto.RegisterType((*DashboardStats)(nil), "piecestoreroutes.DashboardStats")
|
||||
proto.RegisterEnum("piecestoreroutes.PayerBandwidthAllocation_Action", PayerBandwidthAllocation_Action_name, PayerBandwidthAllocation_Action_value)
|
||||
}
|
||||
|
||||
@ -955,6 +1066,7 @@ type PieceStoreRoutesClient interface {
|
||||
Store(ctx context.Context, opts ...grpc.CallOption) (PieceStoreRoutes_StoreClient, error)
|
||||
Delete(ctx context.Context, in *PieceDelete, opts ...grpc.CallOption) (*PieceDeleteSummary, error)
|
||||
Stats(ctx context.Context, in *StatsReq, opts ...grpc.CallOption) (*StatSummary, error)
|
||||
Dashboard(ctx context.Context, in *DashboardReq, opts ...grpc.CallOption) (PieceStoreRoutes_DashboardClient, error)
|
||||
}
|
||||
|
||||
type pieceStoreRoutesClient struct {
|
||||
@ -1057,6 +1169,38 @@ func (c *pieceStoreRoutesClient) Stats(ctx context.Context, in *StatsReq, opts .
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *pieceStoreRoutesClient) Dashboard(ctx context.Context, in *DashboardReq, opts ...grpc.CallOption) (PieceStoreRoutes_DashboardClient, error) {
|
||||
stream, err := c.cc.NewStream(ctx, &_PieceStoreRoutes_serviceDesc.Streams[2], "/piecestoreroutes.PieceStoreRoutes/Dashboard", opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
x := &pieceStoreRoutesDashboardClient{stream}
|
||||
if err := x.ClientStream.SendMsg(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := x.ClientStream.CloseSend(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return x, nil
|
||||
}
|
||||
|
||||
type PieceStoreRoutes_DashboardClient interface {
|
||||
Recv() (*DashboardStats, error)
|
||||
grpc.ClientStream
|
||||
}
|
||||
|
||||
type pieceStoreRoutesDashboardClient struct {
|
||||
grpc.ClientStream
|
||||
}
|
||||
|
||||
func (x *pieceStoreRoutesDashboardClient) Recv() (*DashboardStats, error) {
|
||||
m := new(DashboardStats)
|
||||
if err := x.ClientStream.RecvMsg(m); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
||||
// PieceStoreRoutesServer is the server API for PieceStoreRoutes service.
|
||||
type PieceStoreRoutesServer interface {
|
||||
Piece(context.Context, *PieceId) (*PieceSummary, error)
|
||||
@ -1064,6 +1208,7 @@ type PieceStoreRoutesServer interface {
|
||||
Store(PieceStoreRoutes_StoreServer) error
|
||||
Delete(context.Context, *PieceDelete) (*PieceDeleteSummary, error)
|
||||
Stats(context.Context, *StatsReq) (*StatSummary, error)
|
||||
Dashboard(*DashboardReq, PieceStoreRoutes_DashboardServer) error
|
||||
}
|
||||
|
||||
func RegisterPieceStoreRoutesServer(s *grpc.Server, srv PieceStoreRoutesServer) {
|
||||
@ -1176,6 +1321,27 @@ func _PieceStoreRoutes_Stats_Handler(srv interface{}, ctx context.Context, dec f
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _PieceStoreRoutes_Dashboard_Handler(srv interface{}, stream grpc.ServerStream) error {
|
||||
m := new(DashboardReq)
|
||||
if err := stream.RecvMsg(m); err != nil {
|
||||
return err
|
||||
}
|
||||
return srv.(PieceStoreRoutesServer).Dashboard(m, &pieceStoreRoutesDashboardServer{stream})
|
||||
}
|
||||
|
||||
type PieceStoreRoutes_DashboardServer interface {
|
||||
Send(*DashboardStats) error
|
||||
grpc.ServerStream
|
||||
}
|
||||
|
||||
type pieceStoreRoutesDashboardServer struct {
|
||||
grpc.ServerStream
|
||||
}
|
||||
|
||||
func (x *pieceStoreRoutesDashboardServer) Send(m *DashboardStats) error {
|
||||
return x.ServerStream.SendMsg(m)
|
||||
}
|
||||
|
||||
var _PieceStoreRoutes_serviceDesc = grpc.ServiceDesc{
|
||||
ServiceName: "piecestoreroutes.PieceStoreRoutes",
|
||||
HandlerType: (*PieceStoreRoutesServer)(nil),
|
||||
@ -1205,73 +1371,88 @@ var _PieceStoreRoutes_serviceDesc = grpc.ServiceDesc{
|
||||
Handler: _PieceStoreRoutes_Store_Handler,
|
||||
ClientStreams: true,
|
||||
},
|
||||
{
|
||||
StreamName: "Dashboard",
|
||||
Handler: _PieceStoreRoutes_Dashboard_Handler,
|
||||
ServerStreams: true,
|
||||
},
|
||||
},
|
||||
Metadata: "piecestore.proto",
|
||||
}
|
||||
|
||||
func init() { proto.RegisterFile("piecestore.proto", fileDescriptor_piecestore_494b76725f4df406) }
|
||||
func init() { proto.RegisterFile("piecestore.proto", fileDescriptor_piecestore_664948018be76fe5) }
|
||||
|
||||
var fileDescriptor_piecestore_494b76725f4df406 = []byte{
|
||||
// 972 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xcd, 0x6e, 0xdb, 0x46,
|
||||
0x10, 0x36, 0x49, 0x5b, 0xb2, 0xc6, 0x96, 0xac, 0xac, 0x8d, 0x96, 0x16, 0xe2, 0xda, 0x60, 0x9a,
|
||||
0x54, 0x48, 0x00, 0xb5, 0x71, 0x81, 0xde, 0x6d, 0x58, 0x08, 0x88, 0xa0, 0x8e, 0xb0, 0x92, 0x2e,
|
||||
0x39, 0x94, 0x59, 0x91, 0x13, 0x65, 0x11, 0x8a, 0x64, 0xc9, 0xa5, 0x2b, 0xf9, 0x55, 0xfa, 0x08,
|
||||
0x45, 0xdf, 0xa3, 0x4f, 0xd0, 0x43, 0x0f, 0x01, 0x0a, 0xf4, 0x2d, 0x0a, 0x14, 0x05, 0x77, 0x29,
|
||||
0xca, 0xb2, 0xfe, 0x8a, 0xa0, 0xb9, 0x71, 0x7e, 0xf6, 0x9b, 0xd9, 0x4f, 0xdf, 0xec, 0x08, 0xea,
|
||||
0x11, 0x47, 0x17, 0x13, 0x11, 0xc6, 0xd8, 0x8a, 0xe2, 0x50, 0x84, 0xe4, 0x8e, 0x27, 0x0e, 0x53,
|
||||
0x81, 0x49, 0x03, 0x86, 0xe1, 0x30, 0x54, 0x51, 0xeb, 0x1f, 0x03, 0xcc, 0x0e, 0x9b, 0x60, 0x7c,
|
||||
0xc9, 0x02, 0xef, 0x27, 0xee, 0x89, 0x77, 0x17, 0xbe, 0x1f, 0xba, 0x4c, 0xf0, 0x30, 0x20, 0x0f,
|
||||
0xa1, 0x92, 0xf0, 0x61, 0xc0, 0x44, 0x1a, 0xa3, 0xa9, 0x9d, 0x69, 0xcd, 0x7d, 0x3a, 0x73, 0x10,
|
||||
0x02, 0xdb, 0x1e, 0x13, 0xcc, 0xd4, 0x65, 0x40, 0x7e, 0x37, 0xfe, 0xd2, 0x61, 0xfb, 0x8a, 0x09,
|
||||
0x46, 0x9e, 0xc3, 0x7e, 0xc2, 0x04, 0xfa, 0x3e, 0x17, 0xe8, 0x70, 0x4f, 0x9d, 0xbe, 0xac, 0xfd,
|
||||
0xf6, 0xe1, 0x74, 0xeb, 0x8f, 0x0f, 0xa7, 0xa5, 0xeb, 0xd0, 0x43, 0xfb, 0x8a, 0xee, 0x15, 0x39,
|
||||
0xb6, 0x47, 0x9e, 0x41, 0x25, 0x8d, 0x7c, 0x1e, 0xbc, 0xcf, 0xf2, 0xf5, 0xa5, 0xf9, 0xbb, 0x2a,
|
||||
0xc1, 0xf6, 0xc8, 0x31, 0xec, 0x8e, 0xd8, 0xd8, 0x49, 0xf8, 0x2d, 0x9a, 0xc6, 0x99, 0xd6, 0x34,
|
||||
0x68, 0x79, 0xc4, 0xc6, 0x5d, 0x7e, 0x8b, 0xa4, 0x05, 0x87, 0x38, 0x8e, 0x78, 0x2c, 0xef, 0xe0,
|
||||
0xa4, 0x01, 0x1f, 0x3b, 0x09, 0xba, 0xe6, 0xb6, 0xcc, 0x7a, 0x30, 0x0b, 0xf5, 0x03, 0x3e, 0xee,
|
||||
0xa2, 0x4b, 0x1e, 0x41, 0x35, 0xc1, 0x98, 0x33, 0xdf, 0x09, 0xd2, 0xd1, 0x00, 0x63, 0x73, 0xe7,
|
||||
0x4c, 0x6b, 0x56, 0xe8, 0xbe, 0x72, 0x5e, 0x4b, 0x1f, 0xb1, 0xa1, 0xc4, 0xdc, 0xec, 0x94, 0x59,
|
||||
0x3a, 0xd3, 0x9a, 0xb5, 0xf3, 0xe7, 0xad, 0xfb, 0xb4, 0xb6, 0x56, 0xd1, 0xd8, 0xba, 0x90, 0x07,
|
||||
0x69, 0x0e, 0x40, 0x9a, 0x50, 0x77, 0x63, 0x64, 0x02, 0xbd, 0x59, 0x73, 0x65, 0xd9, 0x5c, 0x2d,
|
||||
0xf7, 0x4f, 0x3b, 0xfb, 0x1c, 0xca, 0x51, 0x3a, 0x70, 0xde, 0xe3, 0xc4, 0xdc, 0x95, 0x24, 0x97,
|
||||
0xa2, 0x74, 0xf0, 0x12, 0x27, 0x96, 0x0d, 0x25, 0x05, 0x4a, 0xca, 0x60, 0x74, 0xfa, 0xbd, 0xfa,
|
||||
0x56, 0xf6, 0xf1, 0xa2, 0xdd, 0xab, 0x6b, 0xa4, 0x0a, 0x95, 0x17, 0xed, 0x9e, 0x73, 0xd1, 0xbf,
|
||||
0xb2, 0x7b, 0x75, 0x9d, 0xd4, 0x00, 0x32, 0x93, 0xb6, 0x3b, 0x17, 0x36, 0xad, 0x1b, 0x99, 0xdd,
|
||||
0xe9, 0x17, 0xf6, 0xb6, 0xf5, 0xb7, 0x06, 0xc7, 0x14, 0x03, 0xf1, 0x7f, 0x29, 0xe0, 0x17, 0x2d,
|
||||
0x57, 0x40, 0x1f, 0xea, 0x51, 0xc6, 0x88, 0xc3, 0x0a, 0x38, 0x89, 0xb0, 0x77, 0xfe, 0xf4, 0xbf,
|
||||
0x73, 0x47, 0x0f, 0x24, 0xc6, 0x9d, 0x8e, 0x8e, 0x60, 0x47, 0x84, 0x82, 0xf9, 0xb2, 0xa8, 0x41,
|
||||
0x95, 0x41, 0xbe, 0x83, 0x83, 0x0c, 0x8e, 0x0d, 0xd1, 0x09, 0x42, 0x4f, 0x2a, 0xce, 0x58, 0xaa,
|
||||
0xa0, 0x6a, 0x9e, 0x26, 0x4d, 0xcf, 0xfa, 0x53, 0x07, 0xe8, 0x64, 0xcd, 0x74, 0xb3, 0x66, 0xc8,
|
||||
0x0f, 0x70, 0x34, 0x98, 0x36, 0xb1, 0xd8, 0xf7, 0xb3, 0xc5, 0xbe, 0x57, 0x32, 0x47, 0x0f, 0x07,
|
||||
0x4b, 0xe8, 0x6c, 0x03, 0x48, 0x08, 0xa7, 0xa0, 0x6d, 0xef, 0xfc, 0xc9, 0x12, 0x36, 0x8a, 0x8e,
|
||||
0xd4, 0x67, 0xc6, 0x27, 0xad, 0x44, 0xd3, 0x4f, 0xd2, 0x86, 0x2a, 0x4b, 0xc5, 0xbb, 0x30, 0xe6,
|
||||
0xb7, 0xaa, 0x3f, 0x43, 0x22, 0x9d, 0x2e, 0x22, 0x75, 0xf9, 0x30, 0x40, 0xef, 0x7b, 0x4c, 0x12,
|
||||
0x36, 0x44, 0x3a, 0x7f, 0xaa, 0x81, 0x50, 0x29, 0xe0, 0x49, 0x0d, 0xf4, 0x7c, 0x4c, 0x2b, 0x54,
|
||||
0xe7, 0xde, 0xaa, 0x29, 0xd2, 0x57, 0x4d, 0x91, 0x09, 0x65, 0x37, 0x0c, 0x04, 0x06, 0x42, 0x31,
|
||||
0x4f, 0xa7, 0xa6, 0xf5, 0x06, 0xca, 0xb2, 0x8c, 0xed, 0x2d, 0x14, 0x59, 0xb8, 0x88, 0xfe, 0x31,
|
||||
0x17, 0xb1, 0x46, 0xb0, 0xaf, 0x28, 0x4b, 0x47, 0x23, 0x16, 0x4f, 0x16, 0xca, 0x9c, 0x4c, 0x69,
|
||||
0x97, 0xcf, 0x85, 0xba, 0x82, 0xa2, 0x73, 0xdd, 0x83, 0x61, 0xac, 0xb8, 0xaa, 0xf5, 0xbb, 0x0e,
|
||||
0x35, 0x59, 0x8f, 0xa2, 0x88, 0x39, 0xde, 0x30, 0xff, 0x93, 0x0b, 0xc7, 0x5e, 0x22, 0x9c, 0xa7,
|
||||
0x2b, 0x84, 0x53, 0x74, 0xf5, 0x49, 0xc5, 0x43, 0xd7, 0x89, 0x67, 0x03, 0xe1, 0x9f, 0x41, 0x29,
|
||||
0x7c, 0xfb, 0x36, 0x41, 0x91, 0x73, 0x9c, 0x5b, 0xd6, 0x2b, 0x38, 0x9a, 0xbf, 0x41, 0x57, 0xc4,
|
||||
0xc8, 0x46, 0xf7, 0xe0, 0xb4, 0xfb, 0x70, 0x77, 0xa4, 0xa7, 0xcf, 0x4b, 0xcf, 0x83, 0x3d, 0xd5,
|
||||
0x24, 0xfa, 0x28, 0x70, 0xb3, 0xfc, 0x3e, 0x8a, 0x0a, 0xab, 0x05, 0xe4, 0x4e, 0x95, 0xa9, 0x08,
|
||||
0x4d, 0x28, 0x8f, 0x54, 0x7e, 0x5e, 0x71, 0x6a, 0x5a, 0x3d, 0x78, 0x30, 0x9b, 0xf0, 0x8d, 0xe9,
|
||||
0xe4, 0x31, 0xd4, 0xe4, 0x23, 0xe7, 0xc4, 0xe8, 0x22, 0xbf, 0x41, 0x2f, 0x27, 0xb4, 0x2a, 0xbd,
|
||||
0x34, 0x77, 0x5a, 0x00, 0xbb, 0x5d, 0xc1, 0x44, 0x42, 0xf1, 0x47, 0xeb, 0x57, 0x0d, 0xf6, 0x32,
|
||||
0x63, 0x0a, 0x7e, 0x02, 0x90, 0x26, 0xe8, 0x39, 0x49, 0xc4, 0xdc, 0x82, 0xc0, 0xcc, 0xd3, 0xcd,
|
||||
0x1c, 0xe4, 0x2b, 0x38, 0x60, 0x37, 0x8c, 0xfb, 0x6c, 0xe0, 0x63, 0x9e, 0xa3, 0x4a, 0xd4, 0x0a,
|
||||
0xb7, 0x4a, 0x7c, 0x0c, 0x35, 0x89, 0x53, 0x48, 0x34, 0xff, 0x01, 0xab, 0x99, 0xb7, 0x10, 0x33,
|
||||
0xf9, 0x1a, 0x0e, 0x67, 0x78, 0xb3, 0x5c, 0xb5, 0x81, 0x49, 0x11, 0x2a, 0x0e, 0x58, 0x6f, 0xa0,
|
||||
0x3a, 0xc7, 0x70, 0xb1, 0x59, 0xb4, 0xd9, 0x66, 0x99, 0xdf, 0x45, 0xfa, 0xfd, 0x5d, 0x94, 0x69,
|
||||
0x24, 0x1d, 0xf8, 0xdc, 0x95, 0xeb, 0x52, 0x3d, 0x41, 0x15, 0xe5, 0x79, 0x89, 0x93, 0xf3, 0x9f,
|
||||
0x0d, 0xa8, 0xcf, 0x48, 0xa7, 0xf2, 0x57, 0x25, 0x57, 0xb0, 0x23, 0x7d, 0xe4, 0x78, 0xc5, 0x28,
|
||||
0xd9, 0x5e, 0xe3, 0x8b, 0x55, 0xcf, 0xb3, 0xa2, 0xd6, 0xda, 0x22, 0xaf, 0x61, 0x37, 0x17, 0x2c,
|
||||
0x92, 0xb3, 0x4d, 0x33, 0xd9, 0x78, 0xb2, 0x29, 0x43, 0x69, 0xde, 0xda, 0x6a, 0x6a, 0xdf, 0x68,
|
||||
0xe4, 0x1a, 0x76, 0xd4, 0x66, 0x7a, 0xb8, 0x6e, 0x4b, 0x34, 0x1e, 0xad, 0x8b, 0x16, 0x9d, 0x36,
|
||||
0x35, 0xf2, 0x0a, 0x4a, 0xf9, 0x2c, 0x9c, 0xac, 0x38, 0xa2, 0xc2, 0x8d, 0x2f, 0xd7, 0x86, 0x67,
|
||||
0x97, 0xbf, 0xca, 0x1a, 0x64, 0x22, 0x21, 0x8d, 0x25, 0x43, 0x93, 0xcb, 0xb1, 0x71, 0xb2, 0x3c,
|
||||
0x56, 0xa0, 0x5c, 0x6e, 0xbf, 0xd6, 0xa3, 0xc1, 0xa0, 0x24, 0xff, 0x92, 0x7e, 0xfb, 0x6f, 0x00,
|
||||
0x00, 0x00, 0xff, 0xff, 0x81, 0xcd, 0xfd, 0x25, 0xc4, 0x0a, 0x00, 0x00,
|
||||
var fileDescriptor_piecestore_664948018be76fe5 = []byte{
|
||||
// 1130 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0x4b, 0x6f, 0xdb, 0xc6,
|
||||
0x13, 0x17, 0x29, 0x5b, 0x8f, 0x91, 0x25, 0x2b, 0x9b, 0xe0, 0xff, 0x97, 0x85, 0xd8, 0x16, 0x98,
|
||||
0x26, 0x55, 0x13, 0x40, 0x8e, 0x15, 0xa0, 0x77, 0xbb, 0x32, 0x02, 0xa1, 0xa8, 0xe3, 0xae, 0xec,
|
||||
0x4b, 0x0e, 0x65, 0x56, 0xe4, 0x58, 0x26, 0x42, 0x91, 0x2c, 0xb9, 0x74, 0x6d, 0x7f, 0xa5, 0xa2,
|
||||
0xdf, 0xa3, 0x9f, 0xa0, 0x87, 0x1e, 0x02, 0x14, 0xe8, 0xb9, 0xc7, 0x5e, 0x0a, 0x14, 0xc5, 0xee,
|
||||
0xf2, 0x21, 0x5b, 0x0f, 0x17, 0x41, 0x73, 0xdb, 0x79, 0xec, 0xcc, 0xec, 0x6f, 0x7f, 0xb3, 0xb3,
|
||||
0xd0, 0x0c, 0x1c, 0xb4, 0x30, 0xe2, 0x7e, 0x88, 0xbd, 0x20, 0xf4, 0xb9, 0x4f, 0x66, 0x34, 0xa1,
|
||||
0x1f, 0x73, 0x8c, 0xda, 0xe0, 0xf9, 0x76, 0x62, 0x6d, 0xc3, 0xc4, 0x9f, 0xf8, 0xc9, 0x7a, 0x67,
|
||||
0xe2, 0xfb, 0x13, 0x17, 0xf7, 0xa4, 0x34, 0x8e, 0xcf, 0xf7, 0xec, 0x38, 0x64, 0xdc, 0xf1, 0x3d,
|
||||
0x65, 0x37, 0xfe, 0x2e, 0x42, 0xeb, 0x84, 0x5d, 0x63, 0x78, 0xc8, 0x3c, 0xfb, 0x07, 0xc7, 0xe6,
|
||||
0x17, 0x07, 0xae, 0xeb, 0x5b, 0xd2, 0x85, 0x3c, 0x86, 0x6a, 0xe4, 0x4c, 0x3c, 0xc6, 0xe3, 0x10,
|
||||
0x5b, 0x5a, 0x47, 0xeb, 0x6e, 0xd0, 0x5c, 0x41, 0x08, 0xac, 0xd9, 0x8c, 0xb3, 0x96, 0x2e, 0x0d,
|
||||
0x72, 0xdd, 0xfe, 0x5d, 0x87, 0xb5, 0x01, 0xe3, 0x8c, 0xec, 0xc3, 0x46, 0xc4, 0x38, 0xba, 0xae,
|
||||
0xc3, 0xd1, 0x74, 0x6c, 0xb5, 0xfb, 0xb0, 0xf1, 0xf3, 0x87, 0xdd, 0xc2, 0xaf, 0x1f, 0x76, 0x4b,
|
||||
0xc7, 0xbe, 0x8d, 0xc3, 0x01, 0xad, 0x65, 0x3e, 0x43, 0x9b, 0xbc, 0x80, 0x6a, 0x1c, 0xb8, 0x8e,
|
||||
0xf7, 0x5e, 0xf8, 0xeb, 0x0b, 0xfd, 0x2b, 0xca, 0x61, 0x68, 0x93, 0x2d, 0xa8, 0x4c, 0xd9, 0x95,
|
||||
0x19, 0x39, 0x37, 0xd8, 0x2a, 0x76, 0xb4, 0x6e, 0x91, 0x96, 0xa7, 0xec, 0x6a, 0xe4, 0xdc, 0x20,
|
||||
0xe9, 0xc1, 0x43, 0xbc, 0x0a, 0x1c, 0x75, 0x4c, 0x33, 0xf6, 0x9c, 0x2b, 0x33, 0x42, 0xab, 0xb5,
|
||||
0x26, 0xbd, 0x1e, 0xe4, 0xa6, 0x33, 0xcf, 0xb9, 0x1a, 0xa1, 0x45, 0x9e, 0x40, 0x3d, 0xc2, 0xd0,
|
||||
0x61, 0xae, 0xe9, 0xc5, 0xd3, 0x31, 0x86, 0xad, 0xf5, 0x8e, 0xd6, 0xad, 0xd2, 0x0d, 0xa5, 0x3c,
|
||||
0x96, 0x3a, 0x32, 0x84, 0x12, 0xb3, 0xc4, 0xae, 0x56, 0xa9, 0xa3, 0x75, 0x1b, 0xfd, 0xfd, 0xde,
|
||||
0xdd, 0x2b, 0xe8, 0x2d, 0x83, 0xb1, 0x77, 0x20, 0x37, 0xd2, 0x24, 0x00, 0xe9, 0x42, 0xd3, 0x0a,
|
||||
0x91, 0x71, 0xb4, 0xf3, 0xe2, 0xca, 0xb2, 0xb8, 0x46, 0xa2, 0x4f, 0x2b, 0xfb, 0x3f, 0x94, 0x83,
|
||||
0x78, 0x6c, 0xbe, 0xc7, 0xeb, 0x56, 0x45, 0x82, 0x5c, 0x0a, 0xe2, 0xf1, 0xd7, 0x78, 0x6d, 0x0c,
|
||||
0xa1, 0xa4, 0x82, 0x92, 0x32, 0x14, 0x4f, 0xce, 0x4e, 0x9b, 0x05, 0xb1, 0x78, 0x7d, 0x74, 0xda,
|
||||
0xd4, 0x48, 0x1d, 0xaa, 0xaf, 0x8f, 0x4e, 0xcd, 0x83, 0xb3, 0xc1, 0xf0, 0xb4, 0xa9, 0x93, 0x06,
|
||||
0x80, 0x10, 0xe9, 0xd1, 0xc9, 0xc1, 0x90, 0x36, 0x8b, 0x42, 0x3e, 0x39, 0xcb, 0xe4, 0x35, 0xe3,
|
||||
0x2f, 0x0d, 0xb6, 0x28, 0x7a, 0xfc, 0xbf, 0x62, 0xc0, 0x8f, 0x5a, 0xc2, 0x80, 0x33, 0x68, 0x06,
|
||||
0x02, 0x11, 0x93, 0x65, 0xe1, 0x64, 0x84, 0x5a, 0xff, 0xf9, 0xbf, 0xc7, 0x8e, 0x6e, 0xca, 0x18,
|
||||
0x33, 0x15, 0x3d, 0x82, 0x75, 0xee, 0x73, 0xe6, 0xca, 0xa4, 0x45, 0xaa, 0x04, 0xf2, 0x25, 0x6c,
|
||||
0x8a, 0x70, 0x6c, 0x82, 0xa6, 0x68, 0x04, 0xc1, 0xa0, 0xe2, 0x42, 0x06, 0xd5, 0x13, 0x37, 0x29,
|
||||
0xda, 0xc6, 0x6f, 0x3a, 0xc0, 0x89, 0x28, 0x66, 0x24, 0x8a, 0x21, 0xdf, 0xc1, 0xa3, 0x71, 0x5a,
|
||||
0xc4, 0x7c, 0xdd, 0x2f, 0xe6, 0xeb, 0x5e, 0x8a, 0x1c, 0x7d, 0x38, 0x5e, 0x00, 0xe7, 0x11, 0x80,
|
||||
0x0c, 0x61, 0x66, 0xb0, 0xd5, 0xfa, 0xcf, 0x16, 0xa0, 0x91, 0x55, 0xa4, 0x96, 0x02, 0x4f, 0x5a,
|
||||
0x0d, 0xd2, 0x25, 0x39, 0x82, 0x3a, 0x8b, 0xf9, 0x85, 0x1f, 0x3a, 0x37, 0xaa, 0xbe, 0xa2, 0x8c,
|
||||
0xb4, 0x3b, 0x1f, 0x69, 0xe4, 0x4c, 0x3c, 0xb4, 0xbf, 0xc1, 0x28, 0x62, 0x13, 0xa4, 0xb7, 0x77,
|
||||
0xb5, 0x11, 0xaa, 0x59, 0x78, 0xd2, 0x00, 0x3d, 0x69, 0xd3, 0x2a, 0xd5, 0x1d, 0x7b, 0x59, 0x17,
|
||||
0xe9, 0xcb, 0xba, 0xa8, 0x05, 0x65, 0xcb, 0xf7, 0x38, 0x7a, 0x5c, 0x21, 0x4f, 0x53, 0xd1, 0x78,
|
||||
0x07, 0x65, 0x99, 0x66, 0x68, 0xcf, 0x25, 0x99, 0x3b, 0x88, 0xfe, 0x31, 0x07, 0x31, 0xa6, 0xb0,
|
||||
0xa1, 0x20, 0x8b, 0xa7, 0x53, 0x16, 0x5e, 0xcf, 0xa5, 0xd9, 0x4e, 0x61, 0x97, 0xcf, 0x85, 0x3a,
|
||||
0x82, 0x82, 0x73, 0xd5, 0x83, 0x51, 0x5c, 0x72, 0x54, 0xe3, 0x17, 0x1d, 0x1a, 0x32, 0x1f, 0x45,
|
||||
0x1e, 0x3a, 0x78, 0xc9, 0xdc, 0x4f, 0x4e, 0x9c, 0xe1, 0x02, 0xe2, 0x3c, 0x5f, 0x42, 0x9c, 0xac,
|
||||
0xaa, 0x4f, 0x4a, 0x1e, 0xba, 0x8a, 0x3c, 0xf7, 0x00, 0xfe, 0x3f, 0x28, 0xf9, 0xe7, 0xe7, 0x11,
|
||||
0xf2, 0x04, 0xe3, 0x44, 0x32, 0xde, 0xc0, 0xa3, 0xdb, 0x27, 0x18, 0xf1, 0x10, 0xd9, 0xf4, 0x4e,
|
||||
0x38, 0xed, 0x6e, 0xb8, 0x19, 0xea, 0xe9, 0xb7, 0xa9, 0x67, 0x43, 0x4d, 0x15, 0x89, 0x2e, 0x72,
|
||||
0xbc, 0x9f, 0x7e, 0x1f, 0x05, 0x85, 0xd1, 0x03, 0x32, 0x93, 0x25, 0x25, 0x61, 0x0b, 0xca, 0x53,
|
||||
0xe5, 0x9f, 0x64, 0x4c, 0x45, 0xe3, 0x14, 0x1e, 0xe4, 0x1d, 0x7e, 0xaf, 0x3b, 0x79, 0x0a, 0x0d,
|
||||
0xf9, 0xc8, 0x99, 0x21, 0x5a, 0xe8, 0x5c, 0xa2, 0x9d, 0x00, 0x5a, 0x97, 0x5a, 0x9a, 0x28, 0x0d,
|
||||
0x80, 0xca, 0x88, 0x33, 0x1e, 0x51, 0xfc, 0xde, 0xf8, 0x49, 0x83, 0x9a, 0x10, 0xd2, 0xe0, 0xdb,
|
||||
0x00, 0x71, 0x84, 0xb6, 0x19, 0x05, 0xcc, 0xca, 0x00, 0x14, 0x9a, 0x91, 0x50, 0x90, 0xcf, 0x61,
|
||||
0x93, 0x5d, 0x32, 0xc7, 0x65, 0x63, 0x17, 0x13, 0x1f, 0x95, 0xa2, 0x91, 0xa9, 0x95, 0xe3, 0x53,
|
||||
0x68, 0xc8, 0x38, 0x19, 0x45, 0x93, 0x0b, 0xac, 0x0b, 0x6d, 0x46, 0x66, 0xb2, 0x07, 0x0f, 0xf3,
|
||||
0x78, 0xb9, 0xaf, 0x9a, 0xc0, 0x24, 0x33, 0x65, 0x1b, 0x8c, 0x77, 0x50, 0xbf, 0x85, 0x70, 0x36,
|
||||
0x59, 0xb4, 0x7c, 0xb2, 0xdc, 0x9e, 0x45, 0xfa, 0xdd, 0x59, 0x24, 0x38, 0x12, 0x8f, 0x5d, 0xc7,
|
||||
0x92, 0xe3, 0x52, 0x3d, 0x41, 0x55, 0xa5, 0x11, 0x13, 0xb3, 0x01, 0x1b, 0x03, 0x16, 0x5d, 0x8c,
|
||||
0x7d, 0x16, 0xda, 0x02, 0xa1, 0x3f, 0x35, 0x68, 0x64, 0x0a, 0x89, 0x9b, 0x98, 0xb6, 0xe9, 0xec,
|
||||
0x50, 0x37, 0x50, 0xf2, 0xe4, 0x90, 0x20, 0x5f, 0x40, 0x53, 0x1a, 0x2c, 0xdf, 0xf3, 0x50, 0x8e,
|
||||
0xdd, 0x28, 0xc1, 0x67, 0x53, 0xe8, 0xbf, 0xca, 0xd5, 0xe2, 0x16, 0x99, 0x6d, 0x87, 0x18, 0x45,
|
||||
0xb2, 0x84, 0x2a, 0x4d, 0x45, 0xf2, 0x0a, 0xd6, 0x23, 0x91, 0x46, 0xa2, 0x50, 0xeb, 0x6f, 0x2f,
|
||||
0xe0, 0x58, 0x7e, 0x61, 0x54, 0xf9, 0x92, 0x1d, 0x80, 0x3c, 0xa9, 0xfc, 0x97, 0x54, 0xe8, 0x8c,
|
||||
0x86, 0xec, 0x43, 0x29, 0x0e, 0xb8, 0x33, 0x45, 0xf9, 0x2b, 0xa9, 0xf5, 0xb7, 0x7a, 0xea, 0xbb,
|
||||
0xd7, 0x4b, 0xbf, 0x7b, 0xbd, 0x41, 0xf2, 0xdd, 0xa3, 0x89, 0x63, 0xff, 0x8f, 0x22, 0x34, 0x73,
|
||||
0xf6, 0x51, 0x99, 0x9a, 0x0c, 0x60, 0x5d, 0xea, 0xc8, 0xd6, 0x92, 0x37, 0x65, 0x68, 0xb7, 0x77,
|
||||
0x96, 0xcd, 0x29, 0x55, 0xb2, 0x51, 0x20, 0x6f, 0xa1, 0x92, 0x74, 0x2e, 0x92, 0xce, 0x7d, 0x8f,
|
||||
0x53, 0xfb, 0xd9, 0x7d, 0x1e, 0xaa, 0xf9, 0x8d, 0x42, 0x57, 0x7b, 0xa9, 0x91, 0x63, 0x58, 0x57,
|
||||
0x23, 0xfa, 0xf1, 0xaa, 0x71, 0xd9, 0x7e, 0xb2, 0xca, 0x9a, 0x55, 0xda, 0xd5, 0xc8, 0x1b, 0x28,
|
||||
0x25, 0x8f, 0xc2, 0xf6, 0x92, 0x2d, 0xca, 0xdc, 0xfe, 0x6c, 0xa5, 0x39, 0x3f, 0xfc, 0x40, 0x14,
|
||||
0x28, 0xee, 0xac, 0xbd, 0xf8, 0x66, 0x45, 0x5f, 0xb6, 0x57, 0xdf, 0xba, 0x51, 0x20, 0xdf, 0x42,
|
||||
0x35, 0x63, 0x25, 0x59, 0x80, 0xf8, 0x2c, 0x87, 0xdb, 0x9d, 0x15, 0x76, 0x99, 0xd2, 0x28, 0xbc,
|
||||
0xd4, 0x0e, 0xd7, 0xde, 0xea, 0xc1, 0x78, 0x5c, 0x92, 0x8c, 0x78, 0xf5, 0x4f, 0x00, 0x00, 0x00,
|
||||
0xff, 0xff, 0x14, 0xe3, 0x9c, 0x65, 0x4c, 0x0c, 0x00, 0x00,
|
||||
}
|
||||
|
@ -39,6 +39,11 @@ func (m *MockPieceStoreRoutesClient) EXPECT() *MockPieceStoreRoutesClientMockRec
|
||||
return m.recorder
|
||||
}
|
||||
|
||||
// Dashboard returns an object that mocks out the dashboard calls to pass tests
|
||||
func (m *MockPieceStoreRoutesClient) Dashboard(ctx context.Context, req *DashboardReq, opts ...grpc.CallOption) (PieceStoreRoutes_DashboardClient, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// Delete mocks base method
|
||||
func (m *MockPieceStoreRoutesClient) Delete(arg0 context.Context, arg1 *PieceDelete, arg2 ...grpc.CallOption) (*PieceDeleteSummary, error) {
|
||||
varargs := []interface{}{arg0, arg1}
|
||||
|
@ -6,7 +6,9 @@ option go_package = "pb";
|
||||
|
||||
package piecestoreroutes;
|
||||
|
||||
import "node.proto";
|
||||
import "gogo.proto";
|
||||
import "google/protobuf/duration.proto";
|
||||
|
||||
service PieceStoreRoutes {
|
||||
rpc Piece(PieceId) returns (PieceSummary) {}
|
||||
@ -18,6 +20,8 @@ service PieceStoreRoutes {
|
||||
rpc Delete(PieceDelete) returns (PieceDeleteSummary) {}
|
||||
|
||||
rpc Stats(StatsReq) returns (StatSummary) {}
|
||||
|
||||
rpc Dashboard(DashboardReq) returns (stream DashboardStats) {}
|
||||
}
|
||||
|
||||
message PayerBandwidthAllocation { // Payer refers to satellite
|
||||
@ -128,4 +132,15 @@ message SignedMessage {
|
||||
bytes data = 1;
|
||||
bytes signature = 2;
|
||||
bytes public_key = 3;
|
||||
}
|
||||
}
|
||||
|
||||
message DashboardReq { }
|
||||
|
||||
message DashboardStats {
|
||||
string node_id = 1;
|
||||
int64 node_connections = 2;
|
||||
string address = 3;
|
||||
StatSummary stats = 4;
|
||||
bool connection = 5;
|
||||
google.protobuf.Duration uptime = 6;
|
||||
}
|
||||
|
@ -48,7 +48,6 @@ type Client interface {
|
||||
Put(ctx context.Context, id PieceID, data io.Reader, ttl time.Time, ba *pb.PayerBandwidthAllocation, authorization *pb.SignedMessage) error
|
||||
Get(ctx context.Context, id PieceID, size int64, ba *pb.PayerBandwidthAllocation, authorization *pb.SignedMessage) (ranger.Ranger, error)
|
||||
Delete(ctx context.Context, pieceID PieceID, authorization *pb.SignedMessage) error
|
||||
Stats(ctx context.Context) (*pb.StatSummary, error)
|
||||
io.Closer
|
||||
}
|
||||
|
||||
@ -184,11 +183,6 @@ func (ps *PieceStore) Delete(ctx context.Context, id PieceID, authorization *pb.
|
||||
return nil
|
||||
}
|
||||
|
||||
// Stats will retrieve stats about a piece storage node
|
||||
func (ps *PieceStore) Stats(ctx context.Context) (*pb.StatSummary, error) {
|
||||
return ps.client.Stats(ctx, &pb.StatsReq{})
|
||||
}
|
||||
|
||||
// sign a message using the clients private key
|
||||
func (ps *PieceStore) sign(msg []byte) (signature []byte, err error) {
|
||||
if ps.prikey == nil {
|
||||
|
64
pkg/piecestore/psclient/liteclient.go
Normal file
64
pkg/piecestore/psclient/liteclient.go
Normal file
@ -0,0 +1,64 @@
|
||||
// Copyright (C) 2019 Storj Labs, Inc.
|
||||
// See LICENSE for copying information.
|
||||
|
||||
package psclient
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"storj.io/storj/pkg/pb"
|
||||
"storj.io/storj/pkg/provider"
|
||||
"storj.io/storj/pkg/transport"
|
||||
)
|
||||
|
||||
// LiteClient is the lightweight client for getting stats
|
||||
type LiteClient interface {
|
||||
Stats(ctx context.Context) (*pb.StatSummary, error)
|
||||
Dashboard(ctx context.Context) (pb.PieceStoreRoutes_DashboardClient, error)
|
||||
}
|
||||
|
||||
// PieceStoreLite is the struct that holds the client
|
||||
type PieceStoreLite struct {
|
||||
client pb.PieceStoreRoutesClient
|
||||
}
|
||||
|
||||
// Dashboard returns a simple terminal dashboard displaying info
|
||||
func (psl *PieceStoreLite) Dashboard(ctx context.Context) (pb.PieceStoreRoutes_DashboardClient, error) {
|
||||
return psl.client.Dashboard(ctx, &pb.DashboardReq{})
|
||||
}
|
||||
|
||||
// Stats will retrieve stats about a piece storage node
|
||||
func (psl *PieceStoreLite) Stats(ctx context.Context) (*pb.StatSummary, error) {
|
||||
return psl.client.Stats(ctx, &pb.StatsReq{})
|
||||
}
|
||||
|
||||
// NewLiteClient returns a new LiteClient
|
||||
func NewLiteClient(ctx context.Context, addr string) (LiteClient, error) {
|
||||
clientIdent, err := provider.NewFullIdentity(ctx, 12, 4)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// address of node to create client connection
|
||||
if addr == "" {
|
||||
addr = ":7777"
|
||||
}
|
||||
|
||||
tc := transport.NewClient(clientIdent)
|
||||
n := &pb.Node{
|
||||
Address: &pb.NodeAddress{
|
||||
Address: addr,
|
||||
Transport: 0,
|
||||
},
|
||||
Type: pb.NodeType_STORAGE,
|
||||
}
|
||||
|
||||
conn, err := tc.DialNode(ctx, n)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &PieceStoreLite{
|
||||
client: pb.NewPieceStoreRoutesClient(conn),
|
||||
}, nil
|
||||
}
|
@ -48,18 +48,19 @@ func (c Config) Run(ctx context.Context, server *provider.Provider) (err error)
|
||||
return ServerError.Wrap(err)
|
||||
}
|
||||
|
||||
s, err := NewEndpoint(zap.L(), c, storage, db, server.Identity().Key)
|
||||
//kademlia
|
||||
kad := kademlia.LoadFromContext(ctx)
|
||||
if kad == nil {
|
||||
return ServerError.New("Failed to load Kademlia from context")
|
||||
}
|
||||
|
||||
s, err := NewEndpoint(zap.L(), c, storage, db, server.Identity().Key, kad)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
pb.RegisterPieceStoreRoutesServer(server.GRPC(), s)
|
||||
|
||||
//kademlia
|
||||
k := kademlia.LoadFromContext(ctx)
|
||||
if k == nil {
|
||||
return ServerError.New("Failed to load Kademlia from context")
|
||||
}
|
||||
rt, err := k.GetRoutingTable(ctx)
|
||||
rt, err := kad.GetRoutingTable(ctx)
|
||||
if err != nil {
|
||||
return ServerError.Wrap(err)
|
||||
}
|
||||
@ -75,7 +76,7 @@ func (c Config) Run(ctx context.Context, server *provider.Provider) (err error)
|
||||
}()
|
||||
|
||||
//agreementsender
|
||||
agreementSender := agreementsender.New(zap.L(), s.DB, server.Identity(), k, c.AgreementSenderCheckInterval)
|
||||
agreementSender := agreementsender.New(zap.L(), s.DB, server.Identity(), kad, c.AgreementSenderCheckInterval)
|
||||
go agreementSender.Run(ctx)
|
||||
|
||||
defer func() { log.Fatal(s.Stop(ctx)) }()
|
||||
|
@ -16,6 +16,7 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/golang/protobuf/ptypes"
|
||||
"github.com/gtank/cryptopasta"
|
||||
"github.com/mr-tron/base58/base58"
|
||||
"github.com/shirou/gopsutil/disk"
|
||||
@ -24,6 +25,7 @@ import (
|
||||
"golang.org/x/net/context"
|
||||
|
||||
"storj.io/storj/pkg/auth"
|
||||
"storj.io/storj/pkg/kademlia"
|
||||
"storj.io/storj/pkg/pb"
|
||||
"storj.io/storj/pkg/peertls"
|
||||
pstore "storj.io/storj/pkg/piecestore"
|
||||
@ -56,6 +58,7 @@ func DirSize(path string) (int64, error) {
|
||||
|
||||
// Server -- GRPC server meta data used in route calls
|
||||
type Server struct {
|
||||
startTime time.Time
|
||||
log *zap.Logger
|
||||
storage *pstore.Storage
|
||||
DB *psdb.DB
|
||||
@ -63,10 +66,11 @@ type Server struct {
|
||||
totalAllocated int64
|
||||
totalBwAllocated int64
|
||||
verifier auth.SignedMessageVerifier
|
||||
kad *kademlia.Kademlia
|
||||
}
|
||||
|
||||
// NewEndpoint -- initializes a new endpoint for a piecestore server
|
||||
func NewEndpoint(log *zap.Logger, config Config, storage *pstore.Storage, db *psdb.DB, pkey crypto.PrivateKey) (*Server, error) {
|
||||
func NewEndpoint(log *zap.Logger, config Config, storage *pstore.Storage, db *psdb.DB, pkey crypto.PrivateKey, k *kademlia.Kademlia) (*Server, error) {
|
||||
// read the allocated disk space from the config file
|
||||
allocatedDiskSpace := config.AllocatedDiskSpace.Int64()
|
||||
allocatedBandwidth := config.AllocatedBandwidth.Int64()
|
||||
@ -120,6 +124,7 @@ func NewEndpoint(log *zap.Logger, config Config, storage *pstore.Storage, db *ps
|
||||
}
|
||||
|
||||
return &Server{
|
||||
startTime: time.Now(),
|
||||
log: log,
|
||||
storage: storage,
|
||||
DB: db,
|
||||
@ -127,6 +132,7 @@ func NewEndpoint(log *zap.Logger, config Config, storage *pstore.Storage, db *ps
|
||||
totalAllocated: allocatedDiskSpace,
|
||||
totalBwAllocated: allocatedBandwidth,
|
||||
verifier: auth.NewSignedMessageVerifier(),
|
||||
kad: k,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@ -214,6 +220,30 @@ func (s *Server) Stats(ctx context.Context, in *pb.StatsReq) (*pb.StatSummary, e
|
||||
return &pb.StatSummary{UsedSpace: totalUsed, AvailableSpace: (s.totalAllocated - totalUsed), UsedBandwidth: totalUsedBandwidth, AvailableBandwidth: (s.totalBwAllocated - totalUsedBandwidth)}, nil
|
||||
}
|
||||
|
||||
// Dashboard is a stream that sends data every `interval` seconds to the listener.
|
||||
func (s *Server) Dashboard(in *pb.DashboardReq, stream pb.PieceStoreRoutes_DashboardServer) (err error) {
|
||||
ctx := stream.Context()
|
||||
ticker := time.NewTicker(3 * time.Second)
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return ctx.Err()
|
||||
case <-ticker.C:
|
||||
data, err := s.getDashboardData(ctx)
|
||||
if err != nil {
|
||||
s.log.Warn("unable to create dashboard data proto")
|
||||
continue
|
||||
}
|
||||
|
||||
if err := stream.Send(data); err != nil {
|
||||
s.log.Error("error sending dashboard stream", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Delete -- Delete data by Id from piecestore
|
||||
func (s *Server) Delete(ctx context.Context, in *pb.PieceDelete) (*pb.PieceDeleteSummary, error) {
|
||||
s.log.Debug("Deleting", zap.String("Piece ID", fmt.Sprint(in.GetId())))
|
||||
@ -301,3 +331,29 @@ func getNamespacedPieceID(pieceID, namespace []byte) (string, error) {
|
||||
func getNamespace(signedMessage *pb.SignedMessage) []byte {
|
||||
return signedMessage.GetData()
|
||||
}
|
||||
|
||||
func (s *Server) getDashboardData(ctx context.Context) (*pb.DashboardStats, error) {
|
||||
statsSummary, err := s.Stats(ctx, &pb.StatsReq{})
|
||||
if err != nil {
|
||||
return &pb.DashboardStats{}, ServerError.Wrap(err)
|
||||
}
|
||||
|
||||
rt, err := s.kad.GetRoutingTable(ctx)
|
||||
if err != nil {
|
||||
return &pb.DashboardStats{}, ServerError.Wrap(err)
|
||||
}
|
||||
|
||||
nodes, err := s.kad.GetNodes(ctx, rt.Local().Id, 10000)
|
||||
if err != nil {
|
||||
return &pb.DashboardStats{}, ServerError.Wrap(err)
|
||||
}
|
||||
|
||||
return &pb.DashboardStats{
|
||||
NodeId: rt.Local().Id.String(),
|
||||
NodeConnections: int64(len(nodes)),
|
||||
Address: "",
|
||||
Connection: true,
|
||||
Uptime: ptypes.DurationProto(time.Since(s.startTime)),
|
||||
Stats: statsSummary,
|
||||
}, nil
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user