github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/internal/grpcwrapper/rawtopic/describe_consumer.go (about)

     1  package rawtopic
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/ydb-platform/ydb-go-genproto/protos/Ydb_Topic"
     7  
     8  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/clone"
     9  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/grpcwrapper/rawoptional"
    10  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/grpcwrapper/rawscheme"
    11  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/grpcwrapper/rawtopic/rawtopiccommon"
    12  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/grpcwrapper/rawydb"
    13  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/operation"
    14  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/xerrors"
    15  )
    16  
    17  type DescribeConsumerRequest struct {
    18  	OperationParams rawydb.OperationParams
    19  	Path            string
    20  	Consumer        string
    21  	IncludeStats    bool
    22  }
    23  
    24  func (req *DescribeConsumerRequest) ToProto() *Ydb_Topic.DescribeConsumerRequest {
    25  	return &Ydb_Topic.DescribeConsumerRequest{
    26  		OperationParams: req.OperationParams.ToProto(),
    27  		Path:            req.Path,
    28  		Consumer:        req.Consumer,
    29  		IncludeStats:    req.IncludeStats,
    30  	}
    31  }
    32  
    33  type DescribeConsumerResult struct {
    34  	Operation  rawydb.Operation
    35  	Self       rawscheme.Entry
    36  	Consumer   Consumer
    37  	Partitions []DescribeConsumerResultPartitionInfo
    38  }
    39  
    40  func (res *DescribeConsumerResult) FromProto(response operation.Response) error {
    41  	if err := res.Operation.FromProtoWithStatusCheck(response.GetOperation()); err != nil {
    42  		return err
    43  	}
    44  	protoResult := &Ydb_Topic.DescribeConsumerResult{}
    45  	if err := response.GetOperation().GetResult().UnmarshalTo(protoResult); err != nil {
    46  		return xerrors.WithStackTrace(
    47  			fmt.Errorf(
    48  				"ydb: describe consumer result failed on unmarshal grpc result: %w", err,
    49  			),
    50  		)
    51  	}
    52  
    53  	if err := res.Self.FromProto(protoResult.GetSelf()); err != nil {
    54  		return err
    55  	}
    56  
    57  	res.Consumer.MustFromProto(protoResult.GetConsumer())
    58  
    59  	protoPartitions := protoResult.GetPartitions()
    60  	res.Partitions = make([]DescribeConsumerResultPartitionInfo, len(protoPartitions))
    61  	for i, protoPartition := range protoPartitions {
    62  		if err := res.Partitions[i].FromProto(protoPartition); err != nil {
    63  			return err
    64  		}
    65  	}
    66  
    67  	return nil
    68  }
    69  
    70  type MultipleWindowsStat struct {
    71  	PerMinute int64
    72  	PerHour   int64
    73  	PerDay    int64
    74  }
    75  
    76  func (stat *MultipleWindowsStat) MustFromProto(proto *Ydb_Topic.MultipleWindowsStat) {
    77  	stat.PerMinute = proto.GetPerMinute()
    78  	stat.PerHour = proto.GetPerHour()
    79  	stat.PerDay = proto.GetPerDay()
    80  }
    81  
    82  type PartitionStats struct {
    83  	PartitionsOffset rawtopiccommon.OffsetRange
    84  	StoreSizeBytes   int64
    85  	LastWriteTime    rawoptional.Time
    86  	MaxWriteTimeLag  rawoptional.Duration
    87  	BytesWritten     MultipleWindowsStat
    88  }
    89  
    90  func (ps *PartitionStats) FromProto(proto *Ydb_Topic.PartitionStats) error {
    91  	if proto == nil {
    92  		return nil
    93  	}
    94  	if err := ps.PartitionsOffset.FromProto(proto.GetPartitionOffsets()); err != nil {
    95  		return err
    96  	}
    97  	ps.StoreSizeBytes = proto.GetStoreSizeBytes()
    98  	ps.LastWriteTime.MustFromProto(proto.GetLastWriteTime())
    99  	ps.MaxWriteTimeLag.ToProto()
   100  	ps.BytesWritten.MustFromProto(proto.GetBytesWritten())
   101  
   102  	return nil
   103  }
   104  
   105  type PartitionConsumerStats struct {
   106  	LastReadOffset                 int64
   107  	CommittedOffset                int64
   108  	ReadSessionID                  string
   109  	PartitionReadSessionCreateTime rawoptional.Time
   110  	LastReadTime                   rawoptional.Time
   111  	MaxReadTimeLag                 rawoptional.Duration
   112  	MaxWriteTimeLag                rawoptional.Duration
   113  	BytesRead                      MultipleWindowsStat
   114  	ReaderName                     string
   115  }
   116  
   117  func (stats *PartitionConsumerStats) FromProto(proto *Ydb_Topic.DescribeConsumerResult_PartitionConsumerStats) error {
   118  	if proto == nil {
   119  		return nil
   120  	}
   121  	stats.LastReadOffset = proto.GetLastReadOffset()
   122  	stats.CommittedOffset = proto.GetCommittedOffset()
   123  	stats.ReadSessionID = proto.GetReadSessionId()
   124  	stats.PartitionReadSessionCreateTime.MustFromProto(proto.GetPartitionReadSessionCreateTime())
   125  	stats.LastReadTime.MustFromProto(proto.GetLastReadTime())
   126  	stats.MaxReadTimeLag.MustFromProto(proto.GetMaxReadTimeLag())
   127  	stats.MaxWriteTimeLag.MustFromProto(proto.GetMaxWriteTimeLag())
   128  	stats.BytesRead.MustFromProto(proto.GetBytesRead())
   129  	stats.ReaderName = proto.GetReaderName()
   130  
   131  	return nil
   132  }
   133  
   134  type DescribeConsumerResultPartitionInfo struct {
   135  	PartitionID            int64
   136  	Active                 bool
   137  	ChildPartitionIDs      []int64
   138  	ParentPartitionIDs     []int64
   139  	PartitionStats         PartitionStats
   140  	PartitionConsumerStats PartitionConsumerStats
   141  }
   142  
   143  func (pi *DescribeConsumerResultPartitionInfo) FromProto(proto *Ydb_Topic.DescribeConsumerResult_PartitionInfo) error {
   144  	pi.PartitionID = proto.GetPartitionId()
   145  	pi.Active = proto.GetActive()
   146  
   147  	pi.ChildPartitionIDs = clone.Int64Slice(proto.GetChildPartitionIds())
   148  	pi.ParentPartitionIDs = clone.Int64Slice(proto.GetParentPartitionIds())
   149  
   150  	return pi.PartitionStats.FromProto(proto.GetPartitionStats())
   151  }