WIP: Billing service #1198

Closed
dstepanov-yadro wants to merge 3 commits from dstepanov-yadro/frostfs-node:feat/billing_api into master
4 changed files with 1461 additions and 0 deletions
Showing only changes of commit bb6bef9072 - Show all commits

905
pkg/services/billing/service.pb.go generated Normal file
View file

@ -0,0 +1,905 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.33.0
// protoc v4.25.0
// source: pkg/services/billing/service.proto
package billing
import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
type ListContainersResponse_Body_ContainerInfo_Status int32
const (
// Undefined status, default value.
ListContainersResponse_Body_ContainerInfo_UNDEFINED ListContainersResponse_Body_ContainerInfo_Status = 0
// Container is available.
ListContainersResponse_Body_ContainerInfo_AVAILABLE ListContainersResponse_Body_ContainerInfo_Status = 1
// Container is deleted.
ListContainersResponse_Body_ContainerInfo_DELETED ListContainersResponse_Body_ContainerInfo_Status = 2
)
// Enum value maps for ListContainersResponse_Body_ContainerInfo_Status.
var (
ListContainersResponse_Body_ContainerInfo_Status_name = map[int32]string{
0: "UNDEFINED",
1: "AVAILABLE",
2: "DELETED",
}
ListContainersResponse_Body_ContainerInfo_Status_value = map[string]int32{
"UNDEFINED": 0,
"AVAILABLE": 1,
"DELETED": 2,
}
)
func (x ListContainersResponse_Body_ContainerInfo_Status) Enum() *ListContainersResponse_Body_ContainerInfo_Status {
p := new(ListContainersResponse_Body_ContainerInfo_Status)
*p = x
return p
}
func (x ListContainersResponse_Body_ContainerInfo_Status) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (ListContainersResponse_Body_ContainerInfo_Status) Descriptor() protoreflect.EnumDescriptor {
return file_pkg_services_billing_service_proto_enumTypes[0].Descriptor()
}
func (ListContainersResponse_Body_ContainerInfo_Status) Type() protoreflect.EnumType {
return &file_pkg_services_billing_service_proto_enumTypes[0]
}
func (x ListContainersResponse_Body_ContainerInfo_Status) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use ListContainersResponse_Body_ContainerInfo_Status.Descriptor instead.
func (ListContainersResponse_Body_ContainerInfo_Status) EnumDescriptor() ([]byte, []int) {
return file_pkg_services_billing_service_proto_rawDescGZIP(), []int{2, 0, 0, 0}
}
// Signature of some message.
type Signature struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Public key used for signing.
Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
// Binary signature.
Signature []byte `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"`
}
func (x *Signature) Reset() {
*x = Signature{}
if protoimpl.UnsafeEnabled {
mi := &file_pkg_services_billing_service_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Signature) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Signature) ProtoMessage() {}
func (x *Signature) ProtoReflect() protoreflect.Message {
mi := &file_pkg_services_billing_service_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Signature.ProtoReflect.Descriptor instead.
func (*Signature) Descriptor() ([]byte, []int) {
return file_pkg_services_billing_service_proto_rawDescGZIP(), []int{0}
}
func (x *Signature) GetKey() []byte {
if x != nil {
return x.Key
}
return nil
}
func (x *Signature) GetSignature() []byte {
if x != nil {
return x.Signature
}
return nil
}
type ListContainersRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Body *ListContainersRequest_Body `protobuf:"bytes,1,opt,name=body,proto3" json:"body,omitempty"`
Signature *Signature `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"`
}
func (x *ListContainersRequest) Reset() {
*x = ListContainersRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_pkg_services_billing_service_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ListContainersRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListContainersRequest) ProtoMessage() {}
func (x *ListContainersRequest) ProtoReflect() protoreflect.Message {
mi := &file_pkg_services_billing_service_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ListContainersRequest.ProtoReflect.Descriptor instead.
func (*ListContainersRequest) Descriptor() ([]byte, []int) {
return file_pkg_services_billing_service_proto_rawDescGZIP(), []int{1}
}
func (x *ListContainersRequest) GetBody() *ListContainersRequest_Body {
if x != nil {
return x.Body
}
return nil
}
func (x *ListContainersRequest) GetSignature() *Signature {
if x != nil {
return x.Signature
}
return nil
}
type ListContainersResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Body *ListContainersResponse_Body `protobuf:"bytes,1,opt,name=body,proto3" json:"body,omitempty"`
Signature *Signature `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"`
}
func (x *ListContainersResponse) Reset() {
*x = ListContainersResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_pkg_services_billing_service_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ListContainersResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListContainersResponse) ProtoMessage() {}
func (x *ListContainersResponse) ProtoReflect() protoreflect.Message {
mi := &file_pkg_services_billing_service_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ListContainersResponse.ProtoReflect.Descriptor instead.
func (*ListContainersResponse) Descriptor() ([]byte, []int) {
return file_pkg_services_billing_service_proto_rawDescGZIP(), []int{2}
}
func (x *ListContainersResponse) GetBody() *ListContainersResponse_Body {
if x != nil {
return x.Body
}
return nil
}
func (x *ListContainersResponse) GetSignature() *Signature {
if x != nil {
return x.Signature
}
return nil
}
type ListContainersRequest_Body struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Container IDs to get container metrics. Not required. Maximum count is
// 10000 items.
ContainerId [][]byte `protobuf:"bytes,1,rep,name=container_id,json=containerId,proto3" json:"container_id,omitempty"`
// Max items count in the response. Not required. Default value is 1000. Not
// applicable if container_id is specified. Maximum value is 10000.
Limit uint32 `protobuf:"varint,2,opt,name=limit,proto3" json:"limit,omitempty"`
// Next page token used to continue listing. Not required. If null or empty,
// listing starts from the beginning.
NextPageToken []byte `protobuf:"bytes,3,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
}
func (x *ListContainersRequest_Body) Reset() {
*x = ListContainersRequest_Body{}
if protoimpl.UnsafeEnabled {
mi := &file_pkg_services_billing_service_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ListContainersRequest_Body) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListContainersRequest_Body) ProtoMessage() {}
func (x *ListContainersRequest_Body) ProtoReflect() protoreflect.Message {
mi := &file_pkg_services_billing_service_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ListContainersRequest_Body.ProtoReflect.Descriptor instead.
func (*ListContainersRequest_Body) Descriptor() ([]byte, []int) {
return file_pkg_services_billing_service_proto_rawDescGZIP(), []int{1, 0}
}
func (x *ListContainersRequest_Body) GetContainerId() [][]byte {
if x != nil {
return x.ContainerId
}
return nil
}
func (x *ListContainersRequest_Body) GetLimit() uint32 {
if x != nil {
return x.Limit
}
return 0
}
func (x *ListContainersRequest_Body) GetNextPageToken() []byte {
if x != nil {
return x.NextPageToken
}
return nil
}
type ListContainersResponse_Body struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Result []*ListContainersResponse_Body_ContainerInfo `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"`
// Next page token used to get next batch. If returned value is null or
// empty, then listing completed.
NextPageToken []byte `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
// Returned result is partial. This could happend if some shards are in
// degraded mode or returned an error.
Partial bool `protobuf:"varint,3,opt,name=partial,proto3" json:"partial,omitempty"`
}
func (x *ListContainersResponse_Body) Reset() {
*x = ListContainersResponse_Body{}
if protoimpl.UnsafeEnabled {
mi := &file_pkg_services_billing_service_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ListContainersResponse_Body) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListContainersResponse_Body) ProtoMessage() {}
func (x *ListContainersResponse_Body) ProtoReflect() protoreflect.Message {
mi := &file_pkg_services_billing_service_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ListContainersResponse_Body.ProtoReflect.Descriptor instead.
func (*ListContainersResponse_Body) Descriptor() ([]byte, []int) {
return file_pkg_services_billing_service_proto_rawDescGZIP(), []int{2, 0}
}
func (x *ListContainersResponse_Body) GetResult() []*ListContainersResponse_Body_ContainerInfo {
if x != nil {
return x.Result
}
return nil
}
func (x *ListContainersResponse_Body) GetNextPageToken() []byte {
if x != nil {
return x.NextPageToken
}
return nil
}
func (x *ListContainersResponse_Body) GetPartial() bool {
if x != nil {
return x.Partial
}
return false
}
type ListContainersResponse_Body_ContainerInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Container ID.
ContainerId []byte `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"`
// Container status.
ContainerStatus ListContainersResponse_Body_ContainerInfo_Status `protobuf:"varint,2,opt,name=container_status,json=containerStatus,proto3,enum=billing.ListContainersResponse_Body_ContainerInfo_Status" json:"container_status,omitempty"`
// Container attributes. May be null if container attributes are
// unavailable for current moment or container already deleted.
Attributes *ListContainersResponse_Body_ContainerInfo_Attributes `protobuf:"bytes,3,opt,name=attributes,proto3" json:"attributes,omitempty"`
// Count of the objects in container.
Count *ListContainersResponse_Body_ContainerInfo_Count `protobuf:"bytes,4,opt,name=count,proto3" json:"count,omitempty"`
// Size of the objects in container.
Size *ListContainersResponse_Body_ContainerInfo_Size `protobuf:"bytes,5,opt,name=size,proto3" json:"size,omitempty"`
}
func (x *ListContainersResponse_Body_ContainerInfo) Reset() {
*x = ListContainersResponse_Body_ContainerInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_pkg_services_billing_service_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ListContainersResponse_Body_ContainerInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListContainersResponse_Body_ContainerInfo) ProtoMessage() {}
func (x *ListContainersResponse_Body_ContainerInfo) ProtoReflect() protoreflect.Message {
mi := &file_pkg_services_billing_service_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ListContainersResponse_Body_ContainerInfo.ProtoReflect.Descriptor instead.
func (*ListContainersResponse_Body_ContainerInfo) Descriptor() ([]byte, []int) {
return file_pkg_services_billing_service_proto_rawDescGZIP(), []int{2, 0, 0}
}
func (x *ListContainersResponse_Body_ContainerInfo) GetContainerId() []byte {
if x != nil {
return x.ContainerId
}
return nil
}
func (x *ListContainersResponse_Body_ContainerInfo) GetContainerStatus() ListContainersResponse_Body_ContainerInfo_Status {
if x != nil {
return x.ContainerStatus
}
return ListContainersResponse_Body_ContainerInfo_UNDEFINED
}
func (x *ListContainersResponse_Body_ContainerInfo) GetAttributes() *ListContainersResponse_Body_ContainerInfo_Attributes {
if x != nil {
return x.Attributes
}
return nil
}
func (x *ListContainersResponse_Body_ContainerInfo) GetCount() *ListContainersResponse_Body_ContainerInfo_Count {
if x != nil {
return x.Count
}
return nil
}
func (x *ListContainersResponse_Body_ContainerInfo) GetSize() *ListContainersResponse_Body_ContainerInfo_Size {
if x != nil {
return x.Size
}
return nil
}
type ListContainersResponse_Body_ContainerInfo_Count struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Phy uint64 `protobuf:"varint,1,opt,name=phy,proto3" json:"phy,omitempty"`
Logic uint64 `protobuf:"varint,2,opt,name=logic,proto3" json:"logic,omitempty"`
User uint64 `protobuf:"varint,3,opt,name=user,proto3" json:"user,omitempty"`
}
func (x *ListContainersResponse_Body_ContainerInfo_Count) Reset() {
*x = ListContainersResponse_Body_ContainerInfo_Count{}
if protoimpl.UnsafeEnabled {
mi := &file_pkg_services_billing_service_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ListContainersResponse_Body_ContainerInfo_Count) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListContainersResponse_Body_ContainerInfo_Count) ProtoMessage() {}
func (x *ListContainersResponse_Body_ContainerInfo_Count) ProtoReflect() protoreflect.Message {
mi := &file_pkg_services_billing_service_proto_msgTypes[6]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ListContainersResponse_Body_ContainerInfo_Count.ProtoReflect.Descriptor instead.
func (*ListContainersResponse_Body_ContainerInfo_Count) Descriptor() ([]byte, []int) {
return file_pkg_services_billing_service_proto_rawDescGZIP(), []int{2, 0, 0, 0}
}
func (x *ListContainersResponse_Body_ContainerInfo_Count) GetPhy() uint64 {
if x != nil {
return x.Phy
}
return 0
}
func (x *ListContainersResponse_Body_ContainerInfo_Count) GetLogic() uint64 {
if x != nil {
return x.Logic
}
return 0
}
func (x *ListContainersResponse_Body_ContainerInfo_Count) GetUser() uint64 {
if x != nil {
return x.User
}
return 0
}
type ListContainersResponse_Body_ContainerInfo_Size struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Logic uint64 `protobuf:"varint,1,opt,name=logic,proto3" json:"logic,omitempty"`
}
func (x *ListContainersResponse_Body_ContainerInfo_Size) Reset() {
*x = ListContainersResponse_Body_ContainerInfo_Size{}
if protoimpl.UnsafeEnabled {
mi := &file_pkg_services_billing_service_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ListContainersResponse_Body_ContainerInfo_Size) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListContainersResponse_Body_ContainerInfo_Size) ProtoMessage() {}
func (x *ListContainersResponse_Body_ContainerInfo_Size) ProtoReflect() protoreflect.Message {
mi := &file_pkg_services_billing_service_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ListContainersResponse_Body_ContainerInfo_Size.ProtoReflect.Descriptor instead.
func (*ListContainersResponse_Body_ContainerInfo_Size) Descriptor() ([]byte, []int) {
return file_pkg_services_billing_service_proto_rawDescGZIP(), []int{2, 0, 0, 1}
}
func (x *ListContainersResponse_Body_ContainerInfo_Size) GetLogic() uint64 {
if x != nil {
return x.Logic
}
return 0
}
type ListContainersResponse_Body_ContainerInfo_Attributes struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Container owner's wallet bytes.
OwnerWallet []byte `protobuf:"bytes,1,opt,name=owner_wallet,json=ownerWallet,proto3" json:"owner_wallet,omitempty"`
// Container zone.
Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"`
}
func (x *ListContainersResponse_Body_ContainerInfo_Attributes) Reset() {
*x = ListContainersResponse_Body_ContainerInfo_Attributes{}
if protoimpl.UnsafeEnabled {
mi := &file_pkg_services_billing_service_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ListContainersResponse_Body_ContainerInfo_Attributes) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListContainersResponse_Body_ContainerInfo_Attributes) ProtoMessage() {}
func (x *ListContainersResponse_Body_ContainerInfo_Attributes) ProtoReflect() protoreflect.Message {
mi := &file_pkg_services_billing_service_proto_msgTypes[8]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ListContainersResponse_Body_ContainerInfo_Attributes.ProtoReflect.Descriptor instead.
func (*ListContainersResponse_Body_ContainerInfo_Attributes) Descriptor() ([]byte, []int) {
return file_pkg_services_billing_service_proto_rawDescGZIP(), []int{2, 0, 0, 2}
}
func (x *ListContainersResponse_Body_ContainerInfo_Attributes) GetOwnerWallet() []byte {
if x != nil {
return x.OwnerWallet
}
return nil
}
func (x *ListContainersResponse_Body_ContainerInfo_Attributes) GetZone() string {
if x != nil {
return x.Zone
}
return ""
}
var File_pkg_services_billing_service_proto protoreflect.FileDescriptor
var file_pkg_services_billing_service_proto_rawDesc = []byte{
0x0a, 0x22, 0x70, 0x6b, 0x67, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62,
0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x22, 0x3b, 0x0a,
0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x09,
0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52,
0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xeb, 0x01, 0x0a, 0x15, 0x4c,
0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x23, 0x2e, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x4c, 0x69, 0x73,
0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x30, 0x0a,
0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x12, 0x2e, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61,
0x74, 0x75, 0x72, 0x65, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x1a,
0x67, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61,
0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0b, 0x63,
0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69,
0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74,
0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f,
0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50,
0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x8f, 0x07, 0x0a, 0x16, 0x4c, 0x69, 0x73,
0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x24, 0x2e, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x4c, 0x69, 0x73, 0x74,
0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x73, 0x65, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x30, 0x0a,
0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x12, 0x2e, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61,
0x74, 0x75, 0x72, 0x65, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x1a,
0x88, 0x06, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x4a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75,
0x6c, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x62, 0x69, 0x6c, 0x6c, 0x69,
0x6e, 0x67, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72,
0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x2e, 0x43,
0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x72, 0x65,
0x73, 0x75, 0x6c, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67,
0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x6e,
0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x18, 0x0a, 0x07,
0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x70,
0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x1a, 0xf1, 0x04, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x74, 0x61,
0x69, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74,
0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b,
0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x64, 0x0a, 0x10, 0x63,
0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18,
0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x39, 0x2e, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x2e,
0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x74,
0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75,
0x73, 0x12, 0x5d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18,
0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x2e,
0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x74,
0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
0x75, 0x74, 0x65, 0x73, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73,
0x12, 0x4e, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x38, 0x2e, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f,
0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x2e, 0x42, 0x6f, 0x64, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49,
0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74,
0x12, 0x4b, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37,
0x2e, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e,
0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e,
0x42, 0x6f, 0x64, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x6e,
0x66, 0x6f, 0x2e, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x1a, 0x43, 0x0a,
0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x68, 0x79, 0x18, 0x01, 0x20,
0x01, 0x28, 0x04, 0x52, 0x03, 0x70, 0x68, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x6f, 0x67, 0x69,
0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x12, 0x12,
0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x75, 0x73,
0x65, 0x72, 0x1a, 0x1c, 0x0a, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x6f,
0x67, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x6f, 0x67, 0x69, 0x63,
0x1a, 0x43, 0x0a, 0x0a, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x21,
0x0a, 0x0c, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x57, 0x61, 0x6c, 0x6c, 0x65,
0x74, 0x12, 0x12, 0x0a, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x22, 0x33, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12,
0x0d, 0x0a, 0x09, 0x55, 0x4e, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d,
0x0a, 0x09, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a,
0x07, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x02, 0x32, 0x63, 0x0a, 0x0e, 0x42, 0x69,
0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x0e,
0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x1e,
0x2e, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e,
0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f,
0x2e, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e,
0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42,
0x41, 0x5a, 0x3f, 0x67, 0x69, 0x74, 0x2e, 0x66, 0x72, 0x6f, 0x73, 0x74, 0x66, 0x73, 0x2e, 0x69,
0x6e, 0x66, 0x6f, 0x2f, 0x54, 0x72, 0x75, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4c, 0x61, 0x62,
0x2f, 0x66, 0x72, 0x6f, 0x73, 0x74, 0x66, 0x73, 0x2d, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70, 0x6b,
0x67, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x69, 0x6c, 0x6c, 0x69,
0x6e, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_pkg_services_billing_service_proto_rawDescOnce sync.Once
file_pkg_services_billing_service_proto_rawDescData = file_pkg_services_billing_service_proto_rawDesc
)
func file_pkg_services_billing_service_proto_rawDescGZIP() []byte {
file_pkg_services_billing_service_proto_rawDescOnce.Do(func() {
file_pkg_services_billing_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_pkg_services_billing_service_proto_rawDescData)
})
return file_pkg_services_billing_service_proto_rawDescData
}
var file_pkg_services_billing_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_pkg_services_billing_service_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
var file_pkg_services_billing_service_proto_goTypes = []interface{}{
(ListContainersResponse_Body_ContainerInfo_Status)(0), // 0: billing.ListContainersResponse.Body.ContainerInfo.Status
(*Signature)(nil), // 1: billing.Signature
(*ListContainersRequest)(nil), // 2: billing.ListContainersRequest
(*ListContainersResponse)(nil), // 3: billing.ListContainersResponse
(*ListContainersRequest_Body)(nil), // 4: billing.ListContainersRequest.Body
(*ListContainersResponse_Body)(nil), // 5: billing.ListContainersResponse.Body
(*ListContainersResponse_Body_ContainerInfo)(nil), // 6: billing.ListContainersResponse.Body.ContainerInfo
(*ListContainersResponse_Body_ContainerInfo_Count)(nil), // 7: billing.ListContainersResponse.Body.ContainerInfo.Count
(*ListContainersResponse_Body_ContainerInfo_Size)(nil), // 8: billing.ListContainersResponse.Body.ContainerInfo.Size
(*ListContainersResponse_Body_ContainerInfo_Attributes)(nil), // 9: billing.ListContainersResponse.Body.ContainerInfo.Attributes
}
var file_pkg_services_billing_service_proto_depIdxs = []int32{
4, // 0: billing.ListContainersRequest.body:type_name -> billing.ListContainersRequest.Body
1, // 1: billing.ListContainersRequest.signature:type_name -> billing.Signature
5, // 2: billing.ListContainersResponse.body:type_name -> billing.ListContainersResponse.Body
1, // 3: billing.ListContainersResponse.signature:type_name -> billing.Signature
6, // 4: billing.ListContainersResponse.Body.result:type_name -> billing.ListContainersResponse.Body.ContainerInfo
0, // 5: billing.ListContainersResponse.Body.ContainerInfo.container_status:type_name -> billing.ListContainersResponse.Body.ContainerInfo.Status
9, // 6: billing.ListContainersResponse.Body.ContainerInfo.attributes:type_name -> billing.ListContainersResponse.Body.ContainerInfo.Attributes
7, // 7: billing.ListContainersResponse.Body.ContainerInfo.count:type_name -> billing.ListContainersResponse.Body.ContainerInfo.Count
8, // 8: billing.ListContainersResponse.Body.ContainerInfo.size:type_name -> billing.ListContainersResponse.Body.ContainerInfo.Size
2, // 9: billing.BillingService.ListContainers:input_type -> billing.ListContainersRequest
3, // 10: billing.BillingService.ListContainers:output_type -> billing.ListContainersResponse
10, // [10:11] is the sub-list for method output_type
9, // [9:10] is the sub-list for method input_type
9, // [9:9] is the sub-list for extension type_name
9, // [9:9] is the sub-list for extension extendee
0, // [0:9] is the sub-list for field type_name
}
func init() { file_pkg_services_billing_service_proto_init() }
func file_pkg_services_billing_service_proto_init() {
if File_pkg_services_billing_service_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_pkg_services_billing_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Signature); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_pkg_services_billing_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListContainersRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_pkg_services_billing_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListContainersResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_pkg_services_billing_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListContainersRequest_Body); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_pkg_services_billing_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListContainersResponse_Body); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_pkg_services_billing_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListContainersResponse_Body_ContainerInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_pkg_services_billing_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListContainersResponse_Body_ContainerInfo_Count); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_pkg_services_billing_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListContainersResponse_Body_ContainerInfo_Size); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_pkg_services_billing_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListContainersResponse_Body_ContainerInfo_Attributes); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_pkg_services_billing_service_proto_rawDesc,
NumEnums: 1,
NumMessages: 9,
NumExtensions: 0,
NumServices: 1,
},
GoTypes: file_pkg_services_billing_service_proto_goTypes,
DependencyIndexes: file_pkg_services_billing_service_proto_depIdxs,
EnumInfos: file_pkg_services_billing_service_proto_enumTypes,
MessageInfos: file_pkg_services_billing_service_proto_msgTypes,
}.Build()
File_pkg_services_billing_service_proto = out.File
file_pkg_services_billing_service_proto_rawDesc = nil
file_pkg_services_billing_service_proto_goTypes = nil
file_pkg_services_billing_service_proto_depIdxs = nil
}

View file

@ -0,0 +1,87 @@
syntax = "proto3";
package billing;
option go_package = "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/billing";
// `BillingService` provides an interface to get usage statistics.
service BillingService {
// Returns list that contains container usage statistic.
rpc ListContainers(ListContainersRequest) returns (ListContainersResponse);
}
// Signature of some message.
message Signature {
// Public key used for signing.
bytes key = 1;
// Binary signature.
bytes signature = 2;
}
message ListContainersRequest {
message Body {
// Container IDs to get container metrics. Not required. Maximum count is
// 10000 items.
repeated bytes container_id = 1;
// Max items count in the response. Not required. Default value is 1000. Not
// applicable if container_id is specified. Maximum value is 10000.
uint32 limit = 2;
// Next page token used to continue listing. Not required. If null or empty,
// listing starts from the beginning.
bytes next_page_token = 3;
}
Body body = 1;
Signature signature = 2;
}
message ListContainersResponse {
message Body {
message ContainerInfo {
message Count {
uint64 phy = 1;
uint64 logic = 2;
uint64 user = 3;
}
message Size { uint64 logic = 1; }
message Attributes {
// Container owner's wallet bytes.
bytes owner_wallet = 1;
// Container zone.
string zone = 2;
}
enum Status {
// Undefined status, default value.
UNDEFINED = 0;
// Container is available.
AVAILABLE = 1;
// Container is deleted.
DELETED = 2;
}
// Container ID.
bytes container_id = 1;
// Container status.
Status container_status = 2;
// Container attributes. May be null if container attributes are
// unavailable for current moment or container already deleted.
Attributes attributes = 3;
// Count of the objects in container.
Count count = 4;
// Size of the objects in container.
Size size = 5;
}
repeated ContainerInfo result = 1;
// Next page token used to get next batch. If returned value is null or
// empty, then listing completed.
bytes next_page_token = 2;
// Returned result is partial. This could happend if some shards are in
// degraded mode or returned an error.
bool partial = 3;
}
Body body = 1;
Signature signature = 2;
}

360
pkg/services/billing/service_frostfs.pb.go generated Normal file
View file

@ -0,0 +1,360 @@
// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
package billing
import "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/util/proto"
// StableSize returns the size of x in protobuf format.
//
// Structures with the same field values have the same binary size.
func (x *Signature) StableSize() (size int) {
if x == nil {
return 0
}
size += proto.BytesSize(1, x.Key)
size += proto.BytesSize(2, x.Signature)
return size
}
// StableMarshal marshals x in protobuf binary format with stable field order.
//
// If buffer length is less than x.StableSize(), new buffer is allocated.
//
// Returns any error encountered which did not allow writing the data completely.
// Otherwise, returns the buffer in which the data is written.
//
// Structures with the same field values have the same binary format.
func (x *Signature) StableMarshal(buf []byte) []byte {
if x == nil {
return []byte{}
}
if buf == nil {
buf = make([]byte, x.StableSize())
}
var offset int
offset += proto.BytesMarshal(1, buf[offset:], x.Key)
offset += proto.BytesMarshal(2, buf[offset:], x.Signature)
return buf
}
// StableSize returns the size of x in protobuf format.
//
// Structures with the same field values have the same binary size.
func (x *ListContainersRequest_Body) StableSize() (size int) {
if x == nil {
return 0
}
size += proto.RepeatedBytesSize(1, x.ContainerId)
size += proto.UInt32Size(2, x.Limit)
size += proto.BytesSize(3, x.NextPageToken)
return size
}
// StableMarshal marshals x in protobuf binary format with stable field order.
//
// If buffer length is less than x.StableSize(), new buffer is allocated.
//
// Returns any error encountered which did not allow writing the data completely.
// Otherwise, returns the buffer in which the data is written.
//
// Structures with the same field values have the same binary format.
func (x *ListContainersRequest_Body) StableMarshal(buf []byte) []byte {
if x == nil {
return []byte{}
}
if buf == nil {
buf = make([]byte, x.StableSize())
}
var offset int
offset += proto.RepeatedBytesMarshal(1, buf[offset:], x.ContainerId)
offset += proto.UInt32Marshal(2, buf[offset:], x.Limit)
offset += proto.BytesMarshal(3, buf[offset:], x.NextPageToken)
return buf
}
// StableSize returns the size of x in protobuf format.
//
// Structures with the same field values have the same binary size.
func (x *ListContainersRequest) StableSize() (size int) {
if x == nil {
return 0
}
size += proto.NestedStructureSize(1, x.Body)
size += proto.NestedStructureSize(2, x.Signature)
return size
}
// StableMarshal marshals x in protobuf binary format with stable field order.
//
// If buffer length is less than x.StableSize(), new buffer is allocated.
//
// Returns any error encountered which did not allow writing the data completely.
// Otherwise, returns the buffer in which the data is written.
//
// Structures with the same field values have the same binary format.
func (x *ListContainersRequest) StableMarshal(buf []byte) []byte {
if x == nil {
return []byte{}
}
if buf == nil {
buf = make([]byte, x.StableSize())
}
var offset int
offset += proto.NestedStructureMarshal(1, buf[offset:], x.Body)
offset += proto.NestedStructureMarshal(2, buf[offset:], x.Signature)
return buf
}
// ReadSignedData fills buf with signed data of x.
// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
//
// Returns any error encountered which did not allow writing the data completely.
// Otherwise, returns the buffer in which the data is written.
//
// Structures with the same field values have the same signed data.
func (x *ListContainersRequest) SignedDataSize() int {
return x.GetBody().StableSize()
}
// SignedDataSize returns size of the request signed data in bytes.
//
// Structures with the same field values have the same signed data size.
func (x *ListContainersRequest) ReadSignedData(buf []byte) ([]byte, error) {
return x.GetBody().StableMarshal(buf), nil
}
func (x *ListContainersRequest) SetSignature(sig *Signature) {
x.Signature = sig
}
// StableSize returns the size of x in protobuf format.
//
// Structures with the same field values have the same binary size.
func (x *ListContainersResponse_Body_ContainerInfo_Count) StableSize() (size int) {
if x == nil {
return 0
}
size += proto.UInt64Size(1, x.Phy)
size += proto.UInt64Size(2, x.Logic)
size += proto.UInt64Size(3, x.User)
return size
}
// StableMarshal marshals x in protobuf binary format with stable field order.
//
// If buffer length is less than x.StableSize(), new buffer is allocated.
//
// Returns any error encountered which did not allow writing the data completely.
// Otherwise, returns the buffer in which the data is written.
//
// Structures with the same field values have the same binary format.
func (x *ListContainersResponse_Body_ContainerInfo_Count) StableMarshal(buf []byte) []byte {
if x == nil {
return []byte{}
}
if buf == nil {
buf = make([]byte, x.StableSize())
}
var offset int
offset += proto.UInt64Marshal(1, buf[offset:], x.Phy)
offset += proto.UInt64Marshal(2, buf[offset:], x.Logic)
offset += proto.UInt64Marshal(3, buf[offset:], x.User)
return buf
}
// StableSize returns the size of x in protobuf format.
//
// Structures with the same field values have the same binary size.
func (x *ListContainersResponse_Body_ContainerInfo_Size) StableSize() (size int) {
if x == nil {
return 0
}
size += proto.UInt64Size(1, x.Logic)
return size
}
// StableMarshal marshals x in protobuf binary format with stable field order.
//
// If buffer length is less than x.StableSize(), new buffer is allocated.
//
// Returns any error encountered which did not allow writing the data completely.
// Otherwise, returns the buffer in which the data is written.
//
// Structures with the same field values have the same binary format.
func (x *ListContainersResponse_Body_ContainerInfo_Size) StableMarshal(buf []byte) []byte {
if x == nil {
return []byte{}
}
if buf == nil {
buf = make([]byte, x.StableSize())
}
var offset int
offset += proto.UInt64Marshal(1, buf[offset:], x.Logic)
return buf
}
// StableSize returns the size of x in protobuf format.
//
// Structures with the same field values have the same binary size.
func (x *ListContainersResponse_Body_ContainerInfo_Attributes) StableSize() (size int) {
if x == nil {
return 0
}
size += proto.BytesSize(1, x.OwnerWallet)
size += proto.StringSize(2, x.Zone)
return size
}
// StableMarshal marshals x in protobuf binary format with stable field order.
//
// If buffer length is less than x.StableSize(), new buffer is allocated.
//
// Returns any error encountered which did not allow writing the data completely.
// Otherwise, returns the buffer in which the data is written.
//
// Structures with the same field values have the same binary format.
func (x *ListContainersResponse_Body_ContainerInfo_Attributes) StableMarshal(buf []byte) []byte {
if x == nil {
return []byte{}
}
if buf == nil {
buf = make([]byte, x.StableSize())
}
var offset int
offset += proto.BytesMarshal(1, buf[offset:], x.OwnerWallet)
offset += proto.StringMarshal(2, buf[offset:], x.Zone)
return buf
}
// StableSize returns the size of x in protobuf format.
//
// Structures with the same field values have the same binary size.
func (x *ListContainersResponse_Body_ContainerInfo) StableSize() (size int) {
if x == nil {
return 0
}
size += proto.BytesSize(1, x.ContainerId)
size += proto.EnumSize(2, int32(x.ContainerStatus))
size += proto.NestedStructureSize(3, x.Attributes)
size += proto.NestedStructureSize(4, x.Count)
size += proto.NestedStructureSize(5, x.Size)
return size
}
// StableMarshal marshals x in protobuf binary format with stable field order.
//
// If buffer length is less than x.StableSize(), new buffer is allocated.
//
// Returns any error encountered which did not allow writing the data completely.
// Otherwise, returns the buffer in which the data is written.
//
// Structures with the same field values have the same binary format.
func (x *ListContainersResponse_Body_ContainerInfo) StableMarshal(buf []byte) []byte {
if x == nil {
return []byte{}
}
if buf == nil {
buf = make([]byte, x.StableSize())
}
var offset int
offset += proto.BytesMarshal(1, buf[offset:], x.ContainerId)
offset += proto.EnumMarshal(2, buf[offset:], int32(x.ContainerStatus))
offset += proto.NestedStructureMarshal(3, buf[offset:], x.Attributes)
offset += proto.NestedStructureMarshal(4, buf[offset:], x.Count)
offset += proto.NestedStructureMarshal(5, buf[offset:], x.Size)
return buf
}
// StableSize returns the size of x in protobuf format.
//
// Structures with the same field values have the same binary size.
func (x *ListContainersResponse_Body) StableSize() (size int) {
if x == nil {
return 0
}
for i := range x.Result {
size += proto.NestedStructureSize(1, x.Result[i])
}
size += proto.BytesSize(2, x.NextPageToken)
size += proto.BoolSize(3, x.Partial)
return size
}
// StableMarshal marshals x in protobuf binary format with stable field order.
//
// If buffer length is less than x.StableSize(), new buffer is allocated.
//
// Returns any error encountered which did not allow writing the data completely.
// Otherwise, returns the buffer in which the data is written.
//
// Structures with the same field values have the same binary format.
func (x *ListContainersResponse_Body) StableMarshal(buf []byte) []byte {
if x == nil {
return []byte{}
}
if buf == nil {
buf = make([]byte, x.StableSize())
}
var offset int
for i := range x.Result {
offset += proto.NestedStructureMarshal(1, buf[offset:], x.Result[i])
}
offset += proto.BytesMarshal(2, buf[offset:], x.NextPageToken)
offset += proto.BoolMarshal(3, buf[offset:], x.Partial)
return buf
}
// StableSize returns the size of x in protobuf format.
//
// Structures with the same field values have the same binary size.
func (x *ListContainersResponse) StableSize() (size int) {
if x == nil {
return 0
}
size += proto.NestedStructureSize(1, x.Body)
size += proto.NestedStructureSize(2, x.Signature)
return size
}
// StableMarshal marshals x in protobuf binary format with stable field order.
//
// If buffer length is less than x.StableSize(), new buffer is allocated.
//
// Returns any error encountered which did not allow writing the data completely.
// Otherwise, returns the buffer in which the data is written.
//
// Structures with the same field values have the same binary format.
func (x *ListContainersResponse) StableMarshal(buf []byte) []byte {
if x == nil {
return []byte{}
}
if buf == nil {
buf = make([]byte, x.StableSize())
}
var offset int
offset += proto.NestedStructureMarshal(1, buf[offset:], x.Body)
offset += proto.NestedStructureMarshal(2, buf[offset:], x.Signature)
return buf
}
// ReadSignedData fills buf with signed data of x.
// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
//
// Returns any error encountered which did not allow writing the data completely.
// Otherwise, returns the buffer in which the data is written.
//
// Structures with the same field values have the same signed data.
func (x *ListContainersResponse) SignedDataSize() int {
return x.GetBody().StableSize()
}
// SignedDataSize returns size of the request signed data in bytes.
//
// Structures with the same field values have the same signed data size.
func (x *ListContainersResponse) ReadSignedData(buf []byte) ([]byte, error) {
return x.GetBody().StableMarshal(buf), nil
}
func (x *ListContainersResponse) SetSignature(sig *Signature) {
x.Signature = sig
}

109
pkg/services/billing/service_grpc.pb.go generated Normal file
View file

@ -0,0 +1,109 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
// - protoc-gen-go-grpc v1.3.0
// - protoc v4.25.0
// source: pkg/services/billing/service.proto
package billing
import (
context "context"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
)
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
// Requires gRPC-Go v1.32.0 or later.
const _ = grpc.SupportPackageIsVersion7
const (
BillingService_ListContainers_FullMethodName = "/billing.BillingService/ListContainers"
)
// BillingServiceClient is the client API for BillingService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
type BillingServiceClient interface {
// Returns list that contains container usage statistic.
ListContainers(ctx context.Context, in *ListContainersRequest, opts ...grpc.CallOption) (*ListContainersResponse, error)
}
type billingServiceClient struct {
cc grpc.ClientConnInterface
}
func NewBillingServiceClient(cc grpc.ClientConnInterface) BillingServiceClient {
return &billingServiceClient{cc}
}
func (c *billingServiceClient) ListContainers(ctx context.Context, in *ListContainersRequest, opts ...grpc.CallOption) (*ListContainersResponse, error) {
out := new(ListContainersResponse)
err := c.cc.Invoke(ctx, BillingService_ListContainers_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// BillingServiceServer is the server API for BillingService service.
// All implementations should embed UnimplementedBillingServiceServer
// for forward compatibility
type BillingServiceServer interface {
// Returns list that contains container usage statistic.
ListContainers(context.Context, *ListContainersRequest) (*ListContainersResponse, error)
}
// UnimplementedBillingServiceServer should be embedded to have forward compatible implementations.
type UnimplementedBillingServiceServer struct {
}
func (UnimplementedBillingServiceServer) ListContainers(context.Context, *ListContainersRequest) (*ListContainersResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListContainers not implemented")
}
// UnsafeBillingServiceServer may be embedded to opt out of forward compatibility for this service.
// Use of this interface is not recommended, as added methods to BillingServiceServer will
// result in compilation errors.
type UnsafeBillingServiceServer interface {
mustEmbedUnimplementedBillingServiceServer()
}
func RegisterBillingServiceServer(s grpc.ServiceRegistrar, srv BillingServiceServer) {
s.RegisterService(&BillingService_ServiceDesc, srv)
}
func _BillingService_ListContainers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ListContainersRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(BillingServiceServer).ListContainers(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: BillingService_ListContainers_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(BillingServiceServer).ListContainers(ctx, req.(*ListContainersRequest))
}
return interceptor(ctx, in, info, handler)
}
// BillingService_ServiceDesc is the grpc.ServiceDesc for BillingService service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
var BillingService_ServiceDesc = grpc.ServiceDesc{
ServiceName: "billing.BillingService",
HandlerType: (*BillingServiceServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "ListContainers",
Handler: _BillingService_ListContainers_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "pkg/services/billing/service.proto",
}