[#1223] lens/tui: Add schema handlers for all bucket types
Signed-off-by: Aleksey Savchuk <a.savchuk@yadro.com>
This commit is contained in:
parent
18c372198a
commit
1e07775161
6 changed files with 174 additions and 53 deletions
|
@ -173,7 +173,10 @@ var SmallHandler = NewHandler(
|
||||||
parse.EOF,
|
parse.EOF,
|
||||||
NewHandler(
|
NewHandler(
|
||||||
parse.Chain(parse.OID, parse.EOF),
|
parse.Chain(parse.OID, parse.EOF),
|
||||||
parse.StorageID,
|
parse.Any(
|
||||||
|
parse.StorageID,
|
||||||
|
parse.EOF,
|
||||||
|
),
|
||||||
nil,
|
nil,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
@ -192,6 +195,34 @@ var EcInfoHandler = NewHandler(
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var ParentHandler = NewHandler(
|
||||||
|
parse.Chain(
|
||||||
|
parse.Prefix(types.Parent),
|
||||||
|
parse.CID,
|
||||||
|
parse.EOF,
|
||||||
|
),
|
||||||
|
parse.EOF,
|
||||||
|
NewHandler(
|
||||||
|
parse.Chain(parse.OID, parse.EOF),
|
||||||
|
parse.Chain(parse.OIDsList, parse.EOF),
|
||||||
|
nil,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
var SplitHandler = NewHandler(
|
||||||
|
parse.Chain(
|
||||||
|
parse.Prefix(types.Split),
|
||||||
|
parse.CID,
|
||||||
|
parse.EOF,
|
||||||
|
),
|
||||||
|
parse.EOF,
|
||||||
|
NewHandler(
|
||||||
|
parse.Chain(parse.UUID, parse.EOF),
|
||||||
|
parse.Chain(parse.OIDsList, parse.EOF),
|
||||||
|
nil,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
var ContainerCountersHandler = NewHandler(
|
var ContainerCountersHandler = NewHandler(
|
||||||
parse.Chain(parse.Prefix(types.ContainerCounters), parse.EOF),
|
parse.Chain(parse.Prefix(types.ContainerCounters), parse.EOF),
|
||||||
parse.EOF,
|
parse.EOF,
|
||||||
|
@ -202,6 +233,68 @@ var ContainerCountersHandler = NewHandler(
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var InhumeHandler = NewHandler(
|
||||||
|
parse.Chain(
|
||||||
|
parse.Any(
|
||||||
|
parse.Prefix(types.Graveyard),
|
||||||
|
parse.Prefix(types.Garbage),
|
||||||
|
),
|
||||||
|
parse.EOF,
|
||||||
|
),
|
||||||
|
parse.EOF,
|
||||||
|
NewHandler(
|
||||||
|
parse.Chain(parse.CID, parse.OID, parse.EOF),
|
||||||
|
parse.Any(
|
||||||
|
parse.Chain(parse.CID, parse.OID, parse.EOF),
|
||||||
|
parse.Skip,
|
||||||
|
),
|
||||||
|
nil,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
var ShardInfoHandler = NewHandler(
|
||||||
|
parse.Chain(parse.Prefix(types.ShardInfo), parse.EOF),
|
||||||
|
parse.EOF,
|
||||||
|
NewHandler(
|
||||||
|
parse.Chain(
|
||||||
|
parse.Any(
|
||||||
|
parse.ExactString("logic_counter"),
|
||||||
|
parse.ExactString("phy_counter"),
|
||||||
|
parse.ExactString("user_counter"),
|
||||||
|
parse.ExactString("version"),
|
||||||
|
parse.ExactString("id"),
|
||||||
|
),
|
||||||
|
parse.EOF,
|
||||||
|
),
|
||||||
|
parse.Volume,
|
||||||
|
nil,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
var LockedHandler = NewHandler(
|
||||||
|
parse.Chain(parse.Prefix(types.Locked), parse.EOF),
|
||||||
|
parse.EOF,
|
||||||
|
NewHandler(
|
||||||
|
parse.Chain(parse.CID, parse.EOF),
|
||||||
|
parse.EOF,
|
||||||
|
NewHandler(
|
||||||
|
parse.Chain(parse.OID, parse.EOF),
|
||||||
|
parse.Chain(parse.OIDsList, parse.EOF),
|
||||||
|
nil,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
var ContainerVolumeHandler = NewHandler(
|
||||||
|
parse.Chain(parse.Prefix(types.ContainerVolume), parse.EOF),
|
||||||
|
parse.EOF,
|
||||||
|
NewHandler(
|
||||||
|
parse.Chain(parse.CID, parse.EOF),
|
||||||
|
parse.Chain(parse.Volume, parse.EOF),
|
||||||
|
nil,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
var StartHandler = WithFallbackRecursively(
|
var StartHandler = WithFallbackRecursively(
|
||||||
Any(
|
Any(
|
||||||
ObjectBucketHandler,
|
ObjectBucketHandler,
|
||||||
|
@ -212,6 +305,12 @@ var StartHandler = WithFallbackRecursively(
|
||||||
RootHandler,
|
RootHandler,
|
||||||
EcInfoHandler,
|
EcInfoHandler,
|
||||||
ContainerCountersHandler,
|
ContainerCountersHandler,
|
||||||
|
ParentHandler,
|
||||||
|
SplitHandler,
|
||||||
|
ContainerVolumeHandler,
|
||||||
|
InhumeHandler,
|
||||||
|
ShardInfoHandler,
|
||||||
|
LockedHandler,
|
||||||
),
|
),
|
||||||
RawHandler,
|
RawHandler,
|
||||||
)
|
)
|
||||||
|
|
|
@ -2,6 +2,7 @@ package parse
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"encoding/binary"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
@ -10,6 +11,7 @@ import (
|
||||||
objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
|
objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
|
||||||
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
|
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user"
|
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user"
|
||||||
|
"github.com/google/uuid"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/io"
|
"github.com/nspcc-dev/neo-go/pkg/io"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -120,6 +122,36 @@ func ObjectCounters(init []byte) (result Result, next []byte, err error) {
|
||||||
return counters, next, nil
|
return counters, next, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func UUID(init []byte) (result Result, next []byte, err error) {
|
||||||
|
if len(init) < 16 {
|
||||||
|
return nil, init, errors.New("can't parse UUID, not enough data")
|
||||||
|
}
|
||||||
|
|
||||||
|
id := uuid.UUID{}
|
||||||
|
if err := id.UnmarshalBinary(init[:16]); err != nil {
|
||||||
|
return nil, init, fmt.Errorf("can't parsse UUID: %w", err)
|
||||||
|
}
|
||||||
|
return id, init[16:], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func Volume(init []byte) (result Result, next []byte, err error) {
|
||||||
|
if len(init) < 8 {
|
||||||
|
return nil, init, errors.New("can't parse volume, not enough data")
|
||||||
|
}
|
||||||
|
volume := binary.LittleEndian.Uint64(init[:8])
|
||||||
|
return &types.Volume{Volume: volume}, init[8:], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func ExactString(s string) Parser {
|
||||||
|
return func(init []byte) (result Result, next []byte, err error) {
|
||||||
|
next, found := bytes.CutPrefix(init, []byte(s))
|
||||||
|
if !found {
|
||||||
|
return nil, init, errors.New("can't parse string")
|
||||||
|
}
|
||||||
|
return &resultFromString{str: s}, next, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func Skip(_ []byte) (result Result, next []byte, err error) {
|
func Skip(_ []byte) (result Result, next []byte, err error) {
|
||||||
return &resultFromString{}, nil, nil
|
return &resultFromString{}, nil, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ObjectCounters struct {
|
type ObjectCounters struct {
|
||||||
|
@ -28,3 +29,11 @@ func (c *ObjectCounters) Decode(b []byte) (rest []byte, err error) {
|
||||||
c.User = binary.LittleEndian.Uint64(b[16:])
|
c.User = binary.LittleEndian.Uint64(b[16:])
|
||||||
return b[24:], nil
|
return b[24:], nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Volume struct {
|
||||||
|
Volume uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *Volume) String() string {
|
||||||
|
return strconv.FormatUint(v.Volume, 10)
|
||||||
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ type (
|
||||||
)
|
)
|
||||||
|
|
||||||
func (id CID) String() string {
|
func (id CID) String() string {
|
||||||
return fmt.Sprintf(`CID(%s)`, id.ID)
|
return fmt.Sprintf(`CID [red]%s[white]`, id.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (id OID) String() string {
|
func (id OID) String() string {
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
package types
|
package types
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
type Prefix byte
|
type Prefix byte
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -25,3 +27,33 @@ const (
|
||||||
ContainerCounters
|
ContainerCounters
|
||||||
EcInfo
|
EcInfo
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var x = map[Prefix]string{
|
||||||
|
Graveyard: "Graveyard",
|
||||||
|
Garbage: "Garbage",
|
||||||
|
ToMoveIt: "To Move It",
|
||||||
|
ContainerVolume: "Container Volume",
|
||||||
|
Locked: "Locked",
|
||||||
|
ShardInfo: "Shard Info",
|
||||||
|
Primary: "Primary",
|
||||||
|
Lockers: "Lockers",
|
||||||
|
Tombstone: "Tombstone",
|
||||||
|
Small: "Small",
|
||||||
|
Root: "Root",
|
||||||
|
Owner: "Owner",
|
||||||
|
UserAttribute: "User Attribute",
|
||||||
|
PayloadHash: "Payload Hash",
|
||||||
|
Parent: "Parent",
|
||||||
|
Split: "Split",
|
||||||
|
ContainerCounters: "Container Counters",
|
||||||
|
EcInfo: "EC Info",
|
||||||
|
}
|
||||||
|
|
||||||
|
const format = "[green](%2d %-18s)[white]"
|
||||||
|
|
||||||
|
func (p Prefix) String() string {
|
||||||
|
if s, ok := x[p]; ok {
|
||||||
|
return fmt.Sprintf(format, p, s)
|
||||||
|
}
|
||||||
|
return fmt.Sprintf(format, p, "--Unknown--")
|
||||||
|
}
|
||||||
|
|
|
@ -1,51 +0,0 @@
|
||||||
// Code generated by "stringer -type=Prefix"; DO NOT EDIT.
|
|
||||||
|
|
||||||
package types
|
|
||||||
|
|
||||||
import "strconv"
|
|
||||||
|
|
||||||
func _() {
|
|
||||||
// An "invalid array index" compiler error signifies that the constant values have changed.
|
|
||||||
// Re-run the stringer command to generate them again.
|
|
||||||
var x [1]struct{}
|
|
||||||
_ = x[Graveyard-0]
|
|
||||||
_ = x[Garbage-1]
|
|
||||||
_ = x[ToMoveIt-2]
|
|
||||||
_ = x[ContainerVolume-3]
|
|
||||||
_ = x[Locked-4]
|
|
||||||
_ = x[ShardInfo-5]
|
|
||||||
_ = x[Primary-6]
|
|
||||||
_ = x[Lockers-7]
|
|
||||||
_ = x[Tombstone-9]
|
|
||||||
_ = x[Small-10]
|
|
||||||
_ = x[Root-11]
|
|
||||||
_ = x[Owner-12]
|
|
||||||
_ = x[UserAttribute-13]
|
|
||||||
_ = x[PayloadHash-14]
|
|
||||||
_ = x[Parent-15]
|
|
||||||
_ = x[Split-16]
|
|
||||||
_ = x[ContainerCounters-17]
|
|
||||||
_ = x[EcInfo-18]
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
|
||||||
_Prefix_name_0 = "GraveyardGarbageToMoveItContainerVolumeLockedShardInfoPrimaryLockers"
|
|
||||||
_Prefix_name_1 = "TombstoneSmallRootOwnerUserAttributePayloadHashParentSplitContainerCountersEcInfo"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
_Prefix_index_0 = [...]uint8{0, 9, 16, 24, 39, 45, 54, 61, 68}
|
|
||||||
_Prefix_index_1 = [...]uint8{0, 9, 14, 18, 23, 36, 47, 53, 58, 75, 81}
|
|
||||||
)
|
|
||||||
|
|
||||||
func (i Prefix) String() string {
|
|
||||||
switch {
|
|
||||||
case i <= 7:
|
|
||||||
return _Prefix_name_0[_Prefix_index_0[i]:_Prefix_index_0[i+1]]
|
|
||||||
case 9 <= i && i <= 18:
|
|
||||||
i -= 9
|
|
||||||
return _Prefix_name_1[_Prefix_index_1[i]:_Prefix_index_1[i+1]]
|
|
||||||
default:
|
|
||||||
return "Prefix(" + strconv.FormatInt(int64(i), 10) + ")"
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue