diff --git a/cmd/headscale/cli/health.go b/cmd/headscale/cli/health.go index 5535897d..864724cc 100644 --- a/cmd/headscale/cli/health.go +++ b/cmd/headscale/cli/health.go @@ -1,8 +1,6 @@ package cli import ( - "fmt" - v1 "github.com/juanfont/headscale/gen/go/headscale/v1" "github.com/spf13/cobra" ) @@ -26,14 +24,6 @@ var healthCmd = &cobra.Command{ ErrorOutput(err, "Error checking health", output) } - if response.Status == v1.HealthStatus_Pass { - SuccessOutput("Headscale server is healthy", "", output) - } - - ErrorOutput( - fmt.Errorf("server health check failed: %s", response.Status), - "Headscale server is unhealthy", - output, - ) + SuccessOutput(response, "", output) }, } diff --git a/gen/go/headscale/v1/headscale.pb.go b/gen/go/headscale/v1/headscale.pb.go index a0ed29c6..ebdf0309 100644 --- a/gen/go/headscale/v1/headscale.pb.go +++ b/gen/go/headscale/v1/headscale.pb.go @@ -22,52 +22,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -type HealthStatus int32 - -const ( - HealthStatus_Fail HealthStatus = 0 - HealthStatus_Pass HealthStatus = 1 -) - -// Enum value maps for HealthStatus. -var ( - HealthStatus_name = map[int32]string{ - 0: "Fail", - 1: "Pass", - } - HealthStatus_value = map[string]int32{ - "Fail": 0, - "Pass": 1, - } -) - -func (x HealthStatus) Enum() *HealthStatus { - p := new(HealthStatus) - *p = x - return p -} - -func (x HealthStatus) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (HealthStatus) Descriptor() protoreflect.EnumDescriptor { - return file_headscale_v1_headscale_proto_enumTypes[0].Descriptor() -} - -func (HealthStatus) Type() protoreflect.EnumType { - return &file_headscale_v1_headscale_proto_enumTypes[0] -} - -func (x HealthStatus) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use HealthStatus.Descriptor instead. -func (HealthStatus) EnumDescriptor() ([]byte, []int) { - return file_headscale_v1_headscale_proto_rawDescGZIP(), []int{0} -} - type HealthRequest struct { state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields @@ -106,7 +60,7 @@ func (*HealthRequest) Descriptor() ([]byte, []int) { type HealthResponse struct { state protoimpl.MessageState `protogen:"open.v1"` - Status HealthStatus `protobuf:"varint,1,opt,name=status,proto3,enum=headscale.v1.HealthStatus" json:"status,omitempty"` + DbPing bool `protobuf:"varint,1,opt,name=db_ping,json=dbPing,proto3" json:"db_ping,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -141,11 +95,11 @@ func (*HealthResponse) Descriptor() ([]byte, []int) { return file_headscale_v1_headscale_proto_rawDescGZIP(), []int{1} } -func (x *HealthResponse) GetStatus() HealthStatus { +func (x *HealthResponse) GetDbPing() bool { if x != nil { - return x.Status + return x.DbPing } - return HealthStatus_Fail + return false } var File_headscale_v1_headscale_proto protoreflect.FileDescriptor @@ -153,12 +107,9 @@ var File_headscale_v1_headscale_proto protoreflect.FileDescriptor const file_headscale_v1_headscale_proto_rawDesc = "" + "\n" + "\x1cheadscale/v1/headscale.proto\x12\fheadscale.v1\x1a\x1cgoogle/api/annotations.proto\x1a\x17headscale/v1/user.proto\x1a\x1dheadscale/v1/preauthkey.proto\x1a\x17headscale/v1/node.proto\x1a\x19headscale/v1/apikey.proto\x1a\x19headscale/v1/policy.proto\"\x0f\n" + - "\rHealthRequest\"D\n" + - "\x0eHealthResponse\x122\n" + - "\x06status\x18\x01 \x01(\x0e2\x1a.headscale.v1.HealthStatusR\x06status*\"\n" + - "\fHealthStatus\x12\b\n" + - "\x04Fail\x10\x00\x12\b\n" + - "\x04Pass\x10\x012\x80\x17\n" + + "\rHealthRequest\")\n" + + "\x0eHealthResponse\x12\x17\n" + + "\adb_ping\x18\x01 \x01(\bR\x06dbPing2\x80\x17\n" + "\x10HeadscaleService\x12h\n" + "\n" + "CreateUser\x12\x1f.headscale.v1.CreateUserRequest\x1a .headscale.v1.CreateUserResponse\"\x17\x82\xd3\xe4\x93\x02\x11:\x01*\"\f/api/v1/user\x12\x80\x01\n" + @@ -204,118 +155,115 @@ func file_headscale_v1_headscale_proto_rawDescGZIP() []byte { return file_headscale_v1_headscale_proto_rawDescData } -var file_headscale_v1_headscale_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_headscale_v1_headscale_proto_msgTypes = make([]protoimpl.MessageInfo, 2) var file_headscale_v1_headscale_proto_goTypes = []any{ - (HealthStatus)(0), // 0: headscale.v1.HealthStatus - (*HealthRequest)(nil), // 1: headscale.v1.HealthRequest - (*HealthResponse)(nil), // 2: headscale.v1.HealthResponse - (*CreateUserRequest)(nil), // 3: headscale.v1.CreateUserRequest - (*RenameUserRequest)(nil), // 4: headscale.v1.RenameUserRequest - (*DeleteUserRequest)(nil), // 5: headscale.v1.DeleteUserRequest - (*ListUsersRequest)(nil), // 6: headscale.v1.ListUsersRequest - (*CreatePreAuthKeyRequest)(nil), // 7: headscale.v1.CreatePreAuthKeyRequest - (*ExpirePreAuthKeyRequest)(nil), // 8: headscale.v1.ExpirePreAuthKeyRequest - (*ListPreAuthKeysRequest)(nil), // 9: headscale.v1.ListPreAuthKeysRequest - (*DebugCreateNodeRequest)(nil), // 10: headscale.v1.DebugCreateNodeRequest - (*GetNodeRequest)(nil), // 11: headscale.v1.GetNodeRequest - (*SetTagsRequest)(nil), // 12: headscale.v1.SetTagsRequest - (*SetApprovedRoutesRequest)(nil), // 13: headscale.v1.SetApprovedRoutesRequest - (*RegisterNodeRequest)(nil), // 14: headscale.v1.RegisterNodeRequest - (*DeleteNodeRequest)(nil), // 15: headscale.v1.DeleteNodeRequest - (*ExpireNodeRequest)(nil), // 16: headscale.v1.ExpireNodeRequest - (*RenameNodeRequest)(nil), // 17: headscale.v1.RenameNodeRequest - (*ListNodesRequest)(nil), // 18: headscale.v1.ListNodesRequest - (*MoveNodeRequest)(nil), // 19: headscale.v1.MoveNodeRequest - (*BackfillNodeIPsRequest)(nil), // 20: headscale.v1.BackfillNodeIPsRequest - (*CreateApiKeyRequest)(nil), // 21: headscale.v1.CreateApiKeyRequest - (*ExpireApiKeyRequest)(nil), // 22: headscale.v1.ExpireApiKeyRequest - (*ListApiKeysRequest)(nil), // 23: headscale.v1.ListApiKeysRequest - (*DeleteApiKeyRequest)(nil), // 24: headscale.v1.DeleteApiKeyRequest - (*GetPolicyRequest)(nil), // 25: headscale.v1.GetPolicyRequest - (*SetPolicyRequest)(nil), // 26: headscale.v1.SetPolicyRequest - (*CreateUserResponse)(nil), // 27: headscale.v1.CreateUserResponse - (*RenameUserResponse)(nil), // 28: headscale.v1.RenameUserResponse - (*DeleteUserResponse)(nil), // 29: headscale.v1.DeleteUserResponse - (*ListUsersResponse)(nil), // 30: headscale.v1.ListUsersResponse - (*CreatePreAuthKeyResponse)(nil), // 31: headscale.v1.CreatePreAuthKeyResponse - (*ExpirePreAuthKeyResponse)(nil), // 32: headscale.v1.ExpirePreAuthKeyResponse - (*ListPreAuthKeysResponse)(nil), // 33: headscale.v1.ListPreAuthKeysResponse - (*DebugCreateNodeResponse)(nil), // 34: headscale.v1.DebugCreateNodeResponse - (*GetNodeResponse)(nil), // 35: headscale.v1.GetNodeResponse - (*SetTagsResponse)(nil), // 36: headscale.v1.SetTagsResponse - (*SetApprovedRoutesResponse)(nil), // 37: headscale.v1.SetApprovedRoutesResponse - (*RegisterNodeResponse)(nil), // 38: headscale.v1.RegisterNodeResponse - (*DeleteNodeResponse)(nil), // 39: headscale.v1.DeleteNodeResponse - (*ExpireNodeResponse)(nil), // 40: headscale.v1.ExpireNodeResponse - (*RenameNodeResponse)(nil), // 41: headscale.v1.RenameNodeResponse - (*ListNodesResponse)(nil), // 42: headscale.v1.ListNodesResponse - (*MoveNodeResponse)(nil), // 43: headscale.v1.MoveNodeResponse - (*BackfillNodeIPsResponse)(nil), // 44: headscale.v1.BackfillNodeIPsResponse - (*CreateApiKeyResponse)(nil), // 45: headscale.v1.CreateApiKeyResponse - (*ExpireApiKeyResponse)(nil), // 46: headscale.v1.ExpireApiKeyResponse - (*ListApiKeysResponse)(nil), // 47: headscale.v1.ListApiKeysResponse - (*DeleteApiKeyResponse)(nil), // 48: headscale.v1.DeleteApiKeyResponse - (*GetPolicyResponse)(nil), // 49: headscale.v1.GetPolicyResponse - (*SetPolicyResponse)(nil), // 50: headscale.v1.SetPolicyResponse + (*HealthRequest)(nil), // 0: headscale.v1.HealthRequest + (*HealthResponse)(nil), // 1: headscale.v1.HealthResponse + (*CreateUserRequest)(nil), // 2: headscale.v1.CreateUserRequest + (*RenameUserRequest)(nil), // 3: headscale.v1.RenameUserRequest + (*DeleteUserRequest)(nil), // 4: headscale.v1.DeleteUserRequest + (*ListUsersRequest)(nil), // 5: headscale.v1.ListUsersRequest + (*CreatePreAuthKeyRequest)(nil), // 6: headscale.v1.CreatePreAuthKeyRequest + (*ExpirePreAuthKeyRequest)(nil), // 7: headscale.v1.ExpirePreAuthKeyRequest + (*ListPreAuthKeysRequest)(nil), // 8: headscale.v1.ListPreAuthKeysRequest + (*DebugCreateNodeRequest)(nil), // 9: headscale.v1.DebugCreateNodeRequest + (*GetNodeRequest)(nil), // 10: headscale.v1.GetNodeRequest + (*SetTagsRequest)(nil), // 11: headscale.v1.SetTagsRequest + (*SetApprovedRoutesRequest)(nil), // 12: headscale.v1.SetApprovedRoutesRequest + (*RegisterNodeRequest)(nil), // 13: headscale.v1.RegisterNodeRequest + (*DeleteNodeRequest)(nil), // 14: headscale.v1.DeleteNodeRequest + (*ExpireNodeRequest)(nil), // 15: headscale.v1.ExpireNodeRequest + (*RenameNodeRequest)(nil), // 16: headscale.v1.RenameNodeRequest + (*ListNodesRequest)(nil), // 17: headscale.v1.ListNodesRequest + (*MoveNodeRequest)(nil), // 18: headscale.v1.MoveNodeRequest + (*BackfillNodeIPsRequest)(nil), // 19: headscale.v1.BackfillNodeIPsRequest + (*CreateApiKeyRequest)(nil), // 20: headscale.v1.CreateApiKeyRequest + (*ExpireApiKeyRequest)(nil), // 21: headscale.v1.ExpireApiKeyRequest + (*ListApiKeysRequest)(nil), // 22: headscale.v1.ListApiKeysRequest + (*DeleteApiKeyRequest)(nil), // 23: headscale.v1.DeleteApiKeyRequest + (*GetPolicyRequest)(nil), // 24: headscale.v1.GetPolicyRequest + (*SetPolicyRequest)(nil), // 25: headscale.v1.SetPolicyRequest + (*CreateUserResponse)(nil), // 26: headscale.v1.CreateUserResponse + (*RenameUserResponse)(nil), // 27: headscale.v1.RenameUserResponse + (*DeleteUserResponse)(nil), // 28: headscale.v1.DeleteUserResponse + (*ListUsersResponse)(nil), // 29: headscale.v1.ListUsersResponse + (*CreatePreAuthKeyResponse)(nil), // 30: headscale.v1.CreatePreAuthKeyResponse + (*ExpirePreAuthKeyResponse)(nil), // 31: headscale.v1.ExpirePreAuthKeyResponse + (*ListPreAuthKeysResponse)(nil), // 32: headscale.v1.ListPreAuthKeysResponse + (*DebugCreateNodeResponse)(nil), // 33: headscale.v1.DebugCreateNodeResponse + (*GetNodeResponse)(nil), // 34: headscale.v1.GetNodeResponse + (*SetTagsResponse)(nil), // 35: headscale.v1.SetTagsResponse + (*SetApprovedRoutesResponse)(nil), // 36: headscale.v1.SetApprovedRoutesResponse + (*RegisterNodeResponse)(nil), // 37: headscale.v1.RegisterNodeResponse + (*DeleteNodeResponse)(nil), // 38: headscale.v1.DeleteNodeResponse + (*ExpireNodeResponse)(nil), // 39: headscale.v1.ExpireNodeResponse + (*RenameNodeResponse)(nil), // 40: headscale.v1.RenameNodeResponse + (*ListNodesResponse)(nil), // 41: headscale.v1.ListNodesResponse + (*MoveNodeResponse)(nil), // 42: headscale.v1.MoveNodeResponse + (*BackfillNodeIPsResponse)(nil), // 43: headscale.v1.BackfillNodeIPsResponse + (*CreateApiKeyResponse)(nil), // 44: headscale.v1.CreateApiKeyResponse + (*ExpireApiKeyResponse)(nil), // 45: headscale.v1.ExpireApiKeyResponse + (*ListApiKeysResponse)(nil), // 46: headscale.v1.ListApiKeysResponse + (*DeleteApiKeyResponse)(nil), // 47: headscale.v1.DeleteApiKeyResponse + (*GetPolicyResponse)(nil), // 48: headscale.v1.GetPolicyResponse + (*SetPolicyResponse)(nil), // 49: headscale.v1.SetPolicyResponse } var file_headscale_v1_headscale_proto_depIdxs = []int32{ - 0, // 0: headscale.v1.HealthResponse.status:type_name -> headscale.v1.HealthStatus - 3, // 1: headscale.v1.HeadscaleService.CreateUser:input_type -> headscale.v1.CreateUserRequest - 4, // 2: headscale.v1.HeadscaleService.RenameUser:input_type -> headscale.v1.RenameUserRequest - 5, // 3: headscale.v1.HeadscaleService.DeleteUser:input_type -> headscale.v1.DeleteUserRequest - 6, // 4: headscale.v1.HeadscaleService.ListUsers:input_type -> headscale.v1.ListUsersRequest - 7, // 5: headscale.v1.HeadscaleService.CreatePreAuthKey:input_type -> headscale.v1.CreatePreAuthKeyRequest - 8, // 6: headscale.v1.HeadscaleService.ExpirePreAuthKey:input_type -> headscale.v1.ExpirePreAuthKeyRequest - 9, // 7: headscale.v1.HeadscaleService.ListPreAuthKeys:input_type -> headscale.v1.ListPreAuthKeysRequest - 10, // 8: headscale.v1.HeadscaleService.DebugCreateNode:input_type -> headscale.v1.DebugCreateNodeRequest - 11, // 9: headscale.v1.HeadscaleService.GetNode:input_type -> headscale.v1.GetNodeRequest - 12, // 10: headscale.v1.HeadscaleService.SetTags:input_type -> headscale.v1.SetTagsRequest - 13, // 11: headscale.v1.HeadscaleService.SetApprovedRoutes:input_type -> headscale.v1.SetApprovedRoutesRequest - 14, // 12: headscale.v1.HeadscaleService.RegisterNode:input_type -> headscale.v1.RegisterNodeRequest - 15, // 13: headscale.v1.HeadscaleService.DeleteNode:input_type -> headscale.v1.DeleteNodeRequest - 16, // 14: headscale.v1.HeadscaleService.ExpireNode:input_type -> headscale.v1.ExpireNodeRequest - 17, // 15: headscale.v1.HeadscaleService.RenameNode:input_type -> headscale.v1.RenameNodeRequest - 18, // 16: headscale.v1.HeadscaleService.ListNodes:input_type -> headscale.v1.ListNodesRequest - 19, // 17: headscale.v1.HeadscaleService.MoveNode:input_type -> headscale.v1.MoveNodeRequest - 20, // 18: headscale.v1.HeadscaleService.BackfillNodeIPs:input_type -> headscale.v1.BackfillNodeIPsRequest - 21, // 19: headscale.v1.HeadscaleService.CreateApiKey:input_type -> headscale.v1.CreateApiKeyRequest - 22, // 20: headscale.v1.HeadscaleService.ExpireApiKey:input_type -> headscale.v1.ExpireApiKeyRequest - 23, // 21: headscale.v1.HeadscaleService.ListApiKeys:input_type -> headscale.v1.ListApiKeysRequest - 24, // 22: headscale.v1.HeadscaleService.DeleteApiKey:input_type -> headscale.v1.DeleteApiKeyRequest - 25, // 23: headscale.v1.HeadscaleService.GetPolicy:input_type -> headscale.v1.GetPolicyRequest - 26, // 24: headscale.v1.HeadscaleService.SetPolicy:input_type -> headscale.v1.SetPolicyRequest - 1, // 25: headscale.v1.HeadscaleService.Health:input_type -> headscale.v1.HealthRequest - 27, // 26: headscale.v1.HeadscaleService.CreateUser:output_type -> headscale.v1.CreateUserResponse - 28, // 27: headscale.v1.HeadscaleService.RenameUser:output_type -> headscale.v1.RenameUserResponse - 29, // 28: headscale.v1.HeadscaleService.DeleteUser:output_type -> headscale.v1.DeleteUserResponse - 30, // 29: headscale.v1.HeadscaleService.ListUsers:output_type -> headscale.v1.ListUsersResponse - 31, // 30: headscale.v1.HeadscaleService.CreatePreAuthKey:output_type -> headscale.v1.CreatePreAuthKeyResponse - 32, // 31: headscale.v1.HeadscaleService.ExpirePreAuthKey:output_type -> headscale.v1.ExpirePreAuthKeyResponse - 33, // 32: headscale.v1.HeadscaleService.ListPreAuthKeys:output_type -> headscale.v1.ListPreAuthKeysResponse - 34, // 33: headscale.v1.HeadscaleService.DebugCreateNode:output_type -> headscale.v1.DebugCreateNodeResponse - 35, // 34: headscale.v1.HeadscaleService.GetNode:output_type -> headscale.v1.GetNodeResponse - 36, // 35: headscale.v1.HeadscaleService.SetTags:output_type -> headscale.v1.SetTagsResponse - 37, // 36: headscale.v1.HeadscaleService.SetApprovedRoutes:output_type -> headscale.v1.SetApprovedRoutesResponse - 38, // 37: headscale.v1.HeadscaleService.RegisterNode:output_type -> headscale.v1.RegisterNodeResponse - 39, // 38: headscale.v1.HeadscaleService.DeleteNode:output_type -> headscale.v1.DeleteNodeResponse - 40, // 39: headscale.v1.HeadscaleService.ExpireNode:output_type -> headscale.v1.ExpireNodeResponse - 41, // 40: headscale.v1.HeadscaleService.RenameNode:output_type -> headscale.v1.RenameNodeResponse - 42, // 41: headscale.v1.HeadscaleService.ListNodes:output_type -> headscale.v1.ListNodesResponse - 43, // 42: headscale.v1.HeadscaleService.MoveNode:output_type -> headscale.v1.MoveNodeResponse - 44, // 43: headscale.v1.HeadscaleService.BackfillNodeIPs:output_type -> headscale.v1.BackfillNodeIPsResponse - 45, // 44: headscale.v1.HeadscaleService.CreateApiKey:output_type -> headscale.v1.CreateApiKeyResponse - 46, // 45: headscale.v1.HeadscaleService.ExpireApiKey:output_type -> headscale.v1.ExpireApiKeyResponse - 47, // 46: headscale.v1.HeadscaleService.ListApiKeys:output_type -> headscale.v1.ListApiKeysResponse - 48, // 47: headscale.v1.HeadscaleService.DeleteApiKey:output_type -> headscale.v1.DeleteApiKeyResponse - 49, // 48: headscale.v1.HeadscaleService.GetPolicy:output_type -> headscale.v1.GetPolicyResponse - 50, // 49: headscale.v1.HeadscaleService.SetPolicy:output_type -> headscale.v1.SetPolicyResponse - 2, // 50: headscale.v1.HeadscaleService.Health:output_type -> headscale.v1.HealthResponse - 26, // [26:51] is the sub-list for method output_type - 1, // [1:26] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name + 2, // 0: headscale.v1.HeadscaleService.CreateUser:input_type -> headscale.v1.CreateUserRequest + 3, // 1: headscale.v1.HeadscaleService.RenameUser:input_type -> headscale.v1.RenameUserRequest + 4, // 2: headscale.v1.HeadscaleService.DeleteUser:input_type -> headscale.v1.DeleteUserRequest + 5, // 3: headscale.v1.HeadscaleService.ListUsers:input_type -> headscale.v1.ListUsersRequest + 6, // 4: headscale.v1.HeadscaleService.CreatePreAuthKey:input_type -> headscale.v1.CreatePreAuthKeyRequest + 7, // 5: headscale.v1.HeadscaleService.ExpirePreAuthKey:input_type -> headscale.v1.ExpirePreAuthKeyRequest + 8, // 6: headscale.v1.HeadscaleService.ListPreAuthKeys:input_type -> headscale.v1.ListPreAuthKeysRequest + 9, // 7: headscale.v1.HeadscaleService.DebugCreateNode:input_type -> headscale.v1.DebugCreateNodeRequest + 10, // 8: headscale.v1.HeadscaleService.GetNode:input_type -> headscale.v1.GetNodeRequest + 11, // 9: headscale.v1.HeadscaleService.SetTags:input_type -> headscale.v1.SetTagsRequest + 12, // 10: headscale.v1.HeadscaleService.SetApprovedRoutes:input_type -> headscale.v1.SetApprovedRoutesRequest + 13, // 11: headscale.v1.HeadscaleService.RegisterNode:input_type -> headscale.v1.RegisterNodeRequest + 14, // 12: headscale.v1.HeadscaleService.DeleteNode:input_type -> headscale.v1.DeleteNodeRequest + 15, // 13: headscale.v1.HeadscaleService.ExpireNode:input_type -> headscale.v1.ExpireNodeRequest + 16, // 14: headscale.v1.HeadscaleService.RenameNode:input_type -> headscale.v1.RenameNodeRequest + 17, // 15: headscale.v1.HeadscaleService.ListNodes:input_type -> headscale.v1.ListNodesRequest + 18, // 16: headscale.v1.HeadscaleService.MoveNode:input_type -> headscale.v1.MoveNodeRequest + 19, // 17: headscale.v1.HeadscaleService.BackfillNodeIPs:input_type -> headscale.v1.BackfillNodeIPsRequest + 20, // 18: headscale.v1.HeadscaleService.CreateApiKey:input_type -> headscale.v1.CreateApiKeyRequest + 21, // 19: headscale.v1.HeadscaleService.ExpireApiKey:input_type -> headscale.v1.ExpireApiKeyRequest + 22, // 20: headscale.v1.HeadscaleService.ListApiKeys:input_type -> headscale.v1.ListApiKeysRequest + 23, // 21: headscale.v1.HeadscaleService.DeleteApiKey:input_type -> headscale.v1.DeleteApiKeyRequest + 24, // 22: headscale.v1.HeadscaleService.GetPolicy:input_type -> headscale.v1.GetPolicyRequest + 25, // 23: headscale.v1.HeadscaleService.SetPolicy:input_type -> headscale.v1.SetPolicyRequest + 0, // 24: headscale.v1.HeadscaleService.Health:input_type -> headscale.v1.HealthRequest + 26, // 25: headscale.v1.HeadscaleService.CreateUser:output_type -> headscale.v1.CreateUserResponse + 27, // 26: headscale.v1.HeadscaleService.RenameUser:output_type -> headscale.v1.RenameUserResponse + 28, // 27: headscale.v1.HeadscaleService.DeleteUser:output_type -> headscale.v1.DeleteUserResponse + 29, // 28: headscale.v1.HeadscaleService.ListUsers:output_type -> headscale.v1.ListUsersResponse + 30, // 29: headscale.v1.HeadscaleService.CreatePreAuthKey:output_type -> headscale.v1.CreatePreAuthKeyResponse + 31, // 30: headscale.v1.HeadscaleService.ExpirePreAuthKey:output_type -> headscale.v1.ExpirePreAuthKeyResponse + 32, // 31: headscale.v1.HeadscaleService.ListPreAuthKeys:output_type -> headscale.v1.ListPreAuthKeysResponse + 33, // 32: headscale.v1.HeadscaleService.DebugCreateNode:output_type -> headscale.v1.DebugCreateNodeResponse + 34, // 33: headscale.v1.HeadscaleService.GetNode:output_type -> headscale.v1.GetNodeResponse + 35, // 34: headscale.v1.HeadscaleService.SetTags:output_type -> headscale.v1.SetTagsResponse + 36, // 35: headscale.v1.HeadscaleService.SetApprovedRoutes:output_type -> headscale.v1.SetApprovedRoutesResponse + 37, // 36: headscale.v1.HeadscaleService.RegisterNode:output_type -> headscale.v1.RegisterNodeResponse + 38, // 37: headscale.v1.HeadscaleService.DeleteNode:output_type -> headscale.v1.DeleteNodeResponse + 39, // 38: headscale.v1.HeadscaleService.ExpireNode:output_type -> headscale.v1.ExpireNodeResponse + 40, // 39: headscale.v1.HeadscaleService.RenameNode:output_type -> headscale.v1.RenameNodeResponse + 41, // 40: headscale.v1.HeadscaleService.ListNodes:output_type -> headscale.v1.ListNodesResponse + 42, // 41: headscale.v1.HeadscaleService.MoveNode:output_type -> headscale.v1.MoveNodeResponse + 43, // 42: headscale.v1.HeadscaleService.BackfillNodeIPs:output_type -> headscale.v1.BackfillNodeIPsResponse + 44, // 43: headscale.v1.HeadscaleService.CreateApiKey:output_type -> headscale.v1.CreateApiKeyResponse + 45, // 44: headscale.v1.HeadscaleService.ExpireApiKey:output_type -> headscale.v1.ExpireApiKeyResponse + 46, // 45: headscale.v1.HeadscaleService.ListApiKeys:output_type -> headscale.v1.ListApiKeysResponse + 47, // 46: headscale.v1.HeadscaleService.DeleteApiKey:output_type -> headscale.v1.DeleteApiKeyResponse + 48, // 47: headscale.v1.HeadscaleService.GetPolicy:output_type -> headscale.v1.GetPolicyResponse + 49, // 48: headscale.v1.HeadscaleService.SetPolicy:output_type -> headscale.v1.SetPolicyResponse + 1, // 49: headscale.v1.HeadscaleService.Health:output_type -> headscale.v1.HealthResponse + 25, // [25:50] is the sub-list for method output_type + 0, // [0:25] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name } func init() { file_headscale_v1_headscale_proto_init() } @@ -333,14 +281,13 @@ func file_headscale_v1_headscale_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_headscale_v1_headscale_proto_rawDesc), len(file_headscale_v1_headscale_proto_rawDesc)), - NumEnums: 1, + NumEnums: 0, NumMessages: 2, NumExtensions: 0, NumServices: 1, }, GoTypes: file_headscale_v1_headscale_proto_goTypes, DependencyIndexes: file_headscale_v1_headscale_proto_depIdxs, - EnumInfos: file_headscale_v1_headscale_proto_enumTypes, MessageInfos: file_headscale_v1_headscale_proto_msgTypes, }.Build() File_headscale_v1_headscale_proto = out.File diff --git a/gen/openapiv2/headscale/v1/headscale.swagger.json b/gen/openapiv2/headscale/v1/headscale.swagger.json index 66fb4850..69c8a2d7 100644 --- a/gen/openapiv2/headscale/v1/headscale.swagger.json +++ b/gen/openapiv2/headscale/v1/headscale.swagger.json @@ -1082,19 +1082,11 @@ "v1HealthResponse": { "type": "object", "properties": { - "status": { - "$ref": "#/definitions/v1HealthStatus" + "dbPing": { + "type": "boolean" } } }, - "v1HealthStatus": { - "type": "string", - "enum": [ - "Fail", - "Pass" - ], - "default": "Fail" - }, "v1ListApiKeysResponse": { "type": "object", "properties": { diff --git a/hscontrol/grpcv1.go b/hscontrol/grpcv1.go index e874942c..f1e7531c 100644 --- a/hscontrol/grpcv1.go +++ b/hscontrol/grpcv1.go @@ -823,14 +823,20 @@ func (api headscaleV1APIServer) Health( ctx context.Context, request *v1.HealthRequest, ) (*v1.HealthResponse, error) { + var healthErr error + response := &v1.HealthResponse{} + if err := api.h.state.PingDB(ctx); err != nil { - log.Error(). - Err(err). - Msg("Health check failed: database ping failed") - return &v1.HealthResponse{Status: v1.HealthStatus_Fail}, nil + healthErr = fmt.Errorf("database ping failed: %w", err) + } else { + response.DbPing = true } - return &v1.HealthResponse{Status: v1.HealthStatus_Pass}, nil + if healthErr != nil { + log.Error().Err(healthErr).Msg("Health check failed") + } + + return response, healthErr } func (api headscaleV1APIServer) mustEmbedUnimplementedHeadscaleServiceServer() {} diff --git a/proto/headscale/v1/headscale.proto b/proto/headscale/v1/headscale.proto index d25dc045..449b0d52 100644 --- a/proto/headscale/v1/headscale.proto +++ b/proto/headscale/v1/headscale.proto @@ -218,13 +218,8 @@ service HeadscaleService { // } } -enum HealthStatus { - Fail = 0; - Pass = 1; -} - message HealthRequest {} message HealthResponse { - HealthStatus status = 1; + bool db_ping = 1; }