From 6ab272936c26329c699d706363d5bd83e2e22216 Mon Sep 17 00:00:00 2001 From: Jeff Haynie Date: Sun, 19 Apr 2026 18:51:44 -0500 Subject: [PATCH] feat: add restart_count to HostInfo proto Add restart_count field (uint32, field 14) to the HostInfo protobuf message. This allows hadron to report its systemd restart counter to ion during the session hello, enabling crash-loop detection in the debug machines endpoint. - gravity_session.proto: added restart_count = 14 - gravity_session.pb.go: regenerated - grpc_client.go: populate RestartCount from GravityConfig - types.go: added RestartCount to GravityConfig --- gravity/grpc_client.go | 1 + gravity/proto/gravity_session.pb.go | 13 +++++++++++-- gravity/proto/gravity_session.proto | 1 + gravity/types.go | 1 + 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/gravity/grpc_client.go b/gravity/grpc_client.go index 0eca924..8a8ba9e 100644 --- a/gravity/grpc_client.go +++ b/gravity/grpc_client.go @@ -5982,6 +5982,7 @@ func getHostInfo(config GravityConfig) (*pb.HostInfo, error) { Provider: config.CloudProvider, InstanceType: config.InstanceType, InstanceTags: config.InstanceTags, + RestartCount: config.RestartCount, }, nil } diff --git a/gravity/proto/gravity_session.pb.go b/gravity/proto/gravity_session.pb.go index 385553d..4b0a4d1 100644 --- a/gravity/proto/gravity_session.pb.go +++ b/gravity/proto/gravity_session.pb.go @@ -1820,6 +1820,7 @@ type HostInfo struct { InstanceType string `protobuf:"bytes,11,opt,name=instance_type,json=instanceType,proto3" json:"instance_type,omitempty"` // instance type of the client (n1-standard-32, m6i.8xlarge) InstanceTags []string `protobuf:"bytes,12,rep,name=instance_tags,json=instanceTags,proto3" json:"instance_tags,omitempty"` // tags on the instance AvailabilityZone string `protobuf:"bytes,13,opt,name=availability_zone,json=availabilityZone,proto3" json:"availability_zone,omitempty"` // the availability zone for the client + RestartCount uint32 `protobuf:"varint,14,opt,name=restart_count,json=restartCount,proto3" json:"restart_count,omitempty"` // systemd restart counter (0 = first start, >0 = crash-loop indicator) unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1945,6 +1946,13 @@ func (x *HostInfo) GetAvailabilityZone() string { return "" } +func (x *HostInfo) GetRestartCount() uint32 { + if x != nil { + return x.RestartCount + } + return 0 +} + type ExistingDeployment struct { state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Unique identifier for the deployment @@ -3576,7 +3584,7 @@ const file_gravity_session_proto_rawDesc = "" + "\x1bConfigurationUpdateResponse\x12\x0e\n" + "\x02id\x18\x01 \x01(\tR\x02id\x12\x18\n" + "\asuccess\x18\x02 \x01(\bR\asuccess\x12\x14\n" + - "\x05error\x18\x03 \x01(\tR\x05error\"\x90\x03\n" + + "\x05error\x18\x03 \x01(\tR\x05error\"\xb5\x03\n" + "\bHostInfo\x12\x18\n" + "\astarted\x18\x01 \x01(\x04R\astarted\x12\x10\n" + "\x03cpu\x18\x02 \x01(\rR\x03cpu\x12\x16\n" + @@ -3592,7 +3600,8 @@ const file_gravity_session_proto_rawDesc = "" + " \x01(\tR\x06region\x12#\n" + "\rinstance_type\x18\v \x01(\tR\finstanceType\x12#\n" + "\rinstance_tags\x18\f \x03(\tR\finstanceTags\x12+\n" + - "\x11availability_zone\x18\r \x01(\tR\x10availabilityZone\"\xa5\x04\n" + + "\x11availability_zone\x18\r \x01(\tR\x10availabilityZone\x12#\n" + + "\rrestart_count\x18\x0e \x01(\rR\frestartCount\"\xa5\x04\n" + "\x12ExistingDeployment\x12\x0e\n" + "\x02id\x18\x01 \x01(\tR\x02id\x124\n" + "\astarted\x18\x03 \x01(\v2\x1a.google.protobuf.TimestampR\astarted\x12!\n" + diff --git a/gravity/proto/gravity_session.proto b/gravity/proto/gravity_session.proto index 28f8ede..4eed9d1 100644 --- a/gravity/proto/gravity_session.proto +++ b/gravity/proto/gravity_session.proto @@ -240,6 +240,7 @@ message HostInfo { string instance_type = 11; // instance type of the client (n1-standard-32, m6i.8xlarge) repeated string instance_tags = 12; // tags on the instance string availability_zone = 13; // the availability zone for the client + uint32 restart_count = 14; // systemd restart counter (0 = first start, >0 = crash-loop indicator) } message ExistingDeployment { diff --git a/gravity/types.go b/gravity/types.go index bd36d65..c0d6ec4 100644 --- a/gravity/types.go +++ b/gravity/types.go @@ -52,6 +52,7 @@ type GravityConfig struct { SkipAutoReconnect bool InstanceTags []string // Tags for display only InstanceType string // Type of instance (e.g., t2.micro) + RestartCount uint32 // Systemd restart counter (0 = first start) DefaultServerName string // Fallback TLS ServerName when connecting via IP address (default: "gravity.agentuity.com") UseMultiConnect bool // Use multiple connections to gravity