From 4c6e2d3f50c5e2e6e57e3288b2efc6e020ab172a Mon Sep 17 00:00:00 2001 From: kox13 Date: Tue, 3 Feb 2026 21:04:21 +0100 Subject: [PATCH 01/24] chore(server): initial structure and grpc dependencies --- libs/proto/volta.proto | 2 + source/server/cmd/server/main.go | 1 + source/server/generated/volta/volta.pb.go | 212 ++++++++++++++++++ .../server/generated/volta/volta_grpc.pb.go | 115 ++++++++++ source/server/go.mod | 15 ++ source/server/go.sum | 36 +++ source/server/internal/app/app.go | 1 + source/server/internal/config/config.go | 1 + source/server/internal/grpc/server.go | 1 + source/server/internal/grpc/volta.go | 1 + source/server/main.go | 7 + source/server/server | Bin 0 -> 2262952 bytes 12 files changed, 392 insertions(+) create mode 100644 source/server/cmd/server/main.go create mode 100644 source/server/generated/volta/volta.pb.go create mode 100644 source/server/generated/volta/volta_grpc.pb.go create mode 100644 source/server/go.mod create mode 100644 source/server/go.sum create mode 100644 source/server/internal/app/app.go create mode 100644 source/server/internal/config/config.go create mode 100644 source/server/internal/grpc/server.go create mode 100644 source/server/internal/grpc/volta.go create mode 100644 source/server/main.go create mode 100755 source/server/server diff --git a/libs/proto/volta.proto b/libs/proto/volta.proto index 1eee8fb..2e10551 100644 --- a/libs/proto/volta.proto +++ b/libs/proto/volta.proto @@ -4,6 +4,8 @@ import "google/protobuf/timestamp.proto"; package volta.v1; +option go_package = "server/generated/volta;volta"; + service VoltaCollector { rpc CollectMetrics(stream MetricBatch) returns (CollectResponse); } diff --git a/source/server/cmd/server/main.go b/source/server/cmd/server/main.go new file mode 100644 index 0000000..abb4e43 --- /dev/null +++ b/source/server/cmd/server/main.go @@ -0,0 +1 @@ +package server diff --git a/source/server/generated/volta/volta.pb.go b/source/server/generated/volta/volta.pb.go new file mode 100644 index 0000000..6bd577b --- /dev/null +++ b/source/server/generated/volta/volta.pb.go @@ -0,0 +1,212 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc v6.33.1 +// source: volta.proto + +package volta + +import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" +) + +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 MetricBatch struct { + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Hostname string `protobuf:"bytes,2,opt,name=hostname,proto3" json:"hostname,omitempty"` + Metrics map[string]float64 `protobuf:"bytes,3,rep,name=metrics,proto3" json:"metrics,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MetricBatch) Reset() { + *x = MetricBatch{} + mi := &file_volta_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MetricBatch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MetricBatch) ProtoMessage() {} + +func (x *MetricBatch) ProtoReflect() protoreflect.Message { + mi := &file_volta_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MetricBatch.ProtoReflect.Descriptor instead. +func (*MetricBatch) Descriptor() ([]byte, []int) { + return file_volta_proto_rawDescGZIP(), []int{0} +} + +func (x *MetricBatch) GetTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.Timestamp + } + return nil +} + +func (x *MetricBatch) GetHostname() string { + if x != nil { + return x.Hostname + } + return "" +} + +func (x *MetricBatch) GetMetrics() map[string]float64 { + if x != nil { + return x.Metrics + } + return nil +} + +type CollectResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CollectResponse) Reset() { + *x = CollectResponse{} + mi := &file_volta_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CollectResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CollectResponse) ProtoMessage() {} + +func (x *CollectResponse) ProtoReflect() protoreflect.Message { + mi := &file_volta_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CollectResponse.ProtoReflect.Descriptor instead. +func (*CollectResponse) Descriptor() ([]byte, []int) { + return file_volta_proto_rawDescGZIP(), []int{1} +} + +func (x *CollectResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *CollectResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +var File_volta_proto protoreflect.FileDescriptor + +const file_volta_proto_rawDesc = "" + + "\n" + + "\vvolta.proto\x12\bvolta.v1\x1a\x1fgoogle/protobuf/timestamp.proto\"\xdd\x01\n" + + "\vMetricBatch\x128\n" + + "\ttimestamp\x18\x01 \x01(\v2\x1a.google.protobuf.TimestampR\ttimestamp\x12\x1a\n" + + "\bhostname\x18\x02 \x01(\tR\bhostname\x12<\n" + + "\ametrics\x18\x03 \x03(\v2\".volta.v1.MetricBatch.MetricsEntryR\ametrics\x1a:\n" + + "\fMetricsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\x01R\x05value:\x028\x01\"E\n" + + "\x0fCollectResponse\x12\x18\n" + + "\asuccess\x18\x01 \x01(\bR\asuccess\x12\x18\n" + + "\amessage\x18\x02 \x01(\tR\amessage2V\n" + + "\x0eVoltaCollector\x12D\n" + + "\x0eCollectMetrics\x12\x15.volta.v1.MetricBatch\x1a\x19.volta.v1.CollectResponse(\x01B\x1eZ\x1cserver/generated/volta;voltab\x06proto3" + +var ( + file_volta_proto_rawDescOnce sync.Once + file_volta_proto_rawDescData []byte +) + +func file_volta_proto_rawDescGZIP() []byte { + file_volta_proto_rawDescOnce.Do(func() { + file_volta_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_volta_proto_rawDesc), len(file_volta_proto_rawDesc))) + }) + return file_volta_proto_rawDescData +} + +var ( + file_volta_proto_msgTypes = make([]protoimpl.MessageInfo, 3) + file_volta_proto_goTypes = []any{ + (*MetricBatch)(nil), // 0: volta.v1.MetricBatch + (*CollectResponse)(nil), // 1: volta.v1.CollectResponse + nil, // 2: volta.v1.MetricBatch.MetricsEntry + (*timestamppb.Timestamp)(nil), // 3: google.protobuf.Timestamp + } +) + +var file_volta_proto_depIdxs = []int32{ + 3, // 0: volta.v1.MetricBatch.timestamp:type_name -> google.protobuf.Timestamp + 2, // 1: volta.v1.MetricBatch.metrics:type_name -> volta.v1.MetricBatch.MetricsEntry + 0, // 2: volta.v1.VoltaCollector.CollectMetrics:input_type -> volta.v1.MetricBatch + 1, // 3: volta.v1.VoltaCollector.CollectMetrics:output_type -> volta.v1.CollectResponse + 3, // [3:4] is the sub-list for method output_type + 2, // [2:3] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_volta_proto_init() } +func file_volta_proto_init() { + if File_volta_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_volta_proto_rawDesc), len(file_volta_proto_rawDesc)), + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_volta_proto_goTypes, + DependencyIndexes: file_volta_proto_depIdxs, + MessageInfos: file_volta_proto_msgTypes, + }.Build() + File_volta_proto = out.File + file_volta_proto_goTypes = nil + file_volta_proto_depIdxs = nil +} diff --git a/source/server/generated/volta/volta_grpc.pb.go b/source/server/generated/volta/volta_grpc.pb.go new file mode 100644 index 0000000..cb7ba7d --- /dev/null +++ b/source/server/generated/volta/volta_grpc.pb.go @@ -0,0 +1,115 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.6.0 +// - protoc v6.33.1 +// source: volta.proto + +package volta + +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.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + VoltaCollector_CollectMetrics_FullMethodName = "/volta.v1.VoltaCollector/CollectMetrics" +) + +// VoltaCollectorClient is the client API for VoltaCollector 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 VoltaCollectorClient interface { + CollectMetrics(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[MetricBatch, CollectResponse], error) +} + +type voltaCollectorClient struct { + cc grpc.ClientConnInterface +} + +func NewVoltaCollectorClient(cc grpc.ClientConnInterface) VoltaCollectorClient { + return &voltaCollectorClient{cc} +} + +func (c *voltaCollectorClient) CollectMetrics(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[MetricBatch, CollectResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &VoltaCollector_ServiceDesc.Streams[0], VoltaCollector_CollectMetrics_FullMethodName, cOpts...) + if err != nil { + return nil, err + } + x := &grpc.GenericClientStream[MetricBatch, CollectResponse]{ClientStream: stream} + return x, nil +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type VoltaCollector_CollectMetricsClient = grpc.ClientStreamingClient[MetricBatch, CollectResponse] + +// VoltaCollectorServer is the server API for VoltaCollector service. +// All implementations must embed UnimplementedVoltaCollectorServer +// for forward compatibility. +type VoltaCollectorServer interface { + CollectMetrics(grpc.ClientStreamingServer[MetricBatch, CollectResponse]) error + mustEmbedUnimplementedVoltaCollectorServer() +} + +// UnimplementedVoltaCollectorServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedVoltaCollectorServer struct{} + +func (UnimplementedVoltaCollectorServer) CollectMetrics(grpc.ClientStreamingServer[MetricBatch, CollectResponse]) error { + return status.Error(codes.Unimplemented, "method CollectMetrics not implemented") +} +func (UnimplementedVoltaCollectorServer) mustEmbedUnimplementedVoltaCollectorServer() {} +func (UnimplementedVoltaCollectorServer) testEmbeddedByValue() {} + +// UnsafeVoltaCollectorServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to VoltaCollectorServer will +// result in compilation errors. +type UnsafeVoltaCollectorServer interface { + mustEmbedUnimplementedVoltaCollectorServer() +} + +func RegisterVoltaCollectorServer(s grpc.ServiceRegistrar, srv VoltaCollectorServer) { + // If the following call panics, it indicates UnimplementedVoltaCollectorServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&VoltaCollector_ServiceDesc, srv) +} + +func _VoltaCollector_CollectMetrics_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(VoltaCollectorServer).CollectMetrics(&grpc.GenericServerStream[MetricBatch, CollectResponse]{ServerStream: stream}) +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type VoltaCollector_CollectMetricsServer = grpc.ClientStreamingServer[MetricBatch, CollectResponse] + +// VoltaCollector_ServiceDesc is the grpc.ServiceDesc for VoltaCollector service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var VoltaCollector_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "volta.v1.VoltaCollector", + HandlerType: (*VoltaCollectorServer)(nil), + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "CollectMetrics", + Handler: _VoltaCollector_CollectMetrics_Handler, + ClientStreams: true, + }, + }, + Metadata: "volta.proto", +} diff --git a/source/server/go.mod b/source/server/go.mod new file mode 100644 index 0000000..1e67eba --- /dev/null +++ b/source/server/go.mod @@ -0,0 +1,15 @@ +module server + +go 1.25.6 + +require ( + google.golang.org/grpc v1.78.0 + google.golang.org/protobuf v1.36.11 +) + +require ( + golang.org/x/net v0.47.0 // indirect + golang.org/x/sys v0.38.0 // indirect + golang.org/x/text v0.31.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251029180050-ab9386a59fda // indirect +) diff --git a/source/server/go.sum b/source/server/go.sum new file mode 100644 index 0000000..f165e8b --- /dev/null +++ b/source/server/go.sum @@ -0,0 +1,36 @@ +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= +go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= +go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= +go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= +go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= +go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= +go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg= +go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM= +go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= +go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= +go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= +golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= +golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= +golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= +golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= +golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= +gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= +gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251029180050-ab9386a59fda h1:i/Q+bfisr7gq6feoJnS/DlpdwEL4ihp41fvRiM3Ork0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251029180050-ab9386a59fda/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= +google.golang.org/grpc v1.78.0 h1:K1XZG/yGDJnzMdd/uZHAkVqJE+xIDOcmdSFZkBUicNc= +google.golang.org/grpc v1.78.0/go.mod h1:I47qjTo4OKbMkjA/aOOwxDIiPSBofUtQUI5EfpWvW7U= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= diff --git a/source/server/internal/app/app.go b/source/server/internal/app/app.go new file mode 100644 index 0000000..4879f7a --- /dev/null +++ b/source/server/internal/app/app.go @@ -0,0 +1 @@ +package app diff --git a/source/server/internal/config/config.go b/source/server/internal/config/config.go new file mode 100644 index 0000000..d13b9c0 --- /dev/null +++ b/source/server/internal/config/config.go @@ -0,0 +1 @@ +package conifg diff --git a/source/server/internal/grpc/server.go b/source/server/internal/grpc/server.go new file mode 100644 index 0000000..21e034e --- /dev/null +++ b/source/server/internal/grpc/server.go @@ -0,0 +1 @@ +package grpc diff --git a/source/server/internal/grpc/volta.go b/source/server/internal/grpc/volta.go new file mode 100644 index 0000000..21e034e --- /dev/null +++ b/source/server/internal/grpc/volta.go @@ -0,0 +1 @@ +package grpc diff --git a/source/server/main.go b/source/server/main.go new file mode 100644 index 0000000..b8ec910 --- /dev/null +++ b/source/server/main.go @@ -0,0 +1,7 @@ +package main + +import "fmt" + +func main() { + fmt.Print("aaa") +} diff --git a/source/server/server b/source/server/server new file mode 100755 index 0000000000000000000000000000000000000000..636e6592a28a9a21cc2cbd0f6939ea206099a6e0 GIT binary patch literal 2262952 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