mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +01:00 
			
		
		
		
	update health check implementation to allow for more checks to added over time
This commit is contained in:
		
							parent
							
								
									569459209a
								
							
						
					
					
						commit
						3f066c12bb
					
				| @ -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) | ||||
| 	}, | ||||
| } | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -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": { | ||||
|  | ||||
| @ -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() {} | ||||
|  | ||||
| @ -218,13 +218,8 @@ service HeadscaleService { | ||||
|   // } | ||||
| } | ||||
| 
 | ||||
| enum HealthStatus { | ||||
|   Fail = 0; | ||||
|   Pass = 1; | ||||
| } | ||||
| 
 | ||||
| message HealthRequest {} | ||||
| 
 | ||||
| message HealthResponse { | ||||
|   HealthStatus status = 1; | ||||
|   bool db_ping = 1; | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user