Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
I
im-microservice
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Li Feifei
im-microservice
Commits
1db452e8
Commit
1db452e8
authored
Jul 02, 2020
by
Li Feifei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
IM健康检测
parent
91228c9a
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
454 additions
and
34 deletions
+454
-34
main.go
main.go
+74
-34
health.pb.go
pb/health.pb.go
+359
-0
health.proto
u-proto/health.proto
+21
-0
No files found.
main.go
View file @
1db452e8
...
...
@@ -5,6 +5,7 @@ import (
"encoding/hex"
"errors"
"fmt"
"sync"
"log"
"net"
...
...
@@ -23,11 +24,45 @@ import (
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/metadata"
"google.golang.org/grpc/reflection"
"google.golang.org/grpc/status"
)
type
Health
interface
{
// Check returns if server is healthy or not
Check
(
c
context
.
Context
)
(
bool
,
error
)
}
// 健康检测
type
Server
struct
{
mu
sync
.
Mutex
statusMap
map
[
string
]
pb
.
HealthCheckResponse_ServingStatus
}
func
NewServer
()
*
Server
{
return
&
Server
{
statusMap
:
make
(
map
[
string
]
pb
.
HealthCheckResponse_ServingStatus
),
}
}
func
(
s
*
Server
)
Check
(
ctx
context
.
Context
,
in
*
pb
.
HealthCheckRequest
)
(
*
pb
.
HealthCheckResponse
,
error
)
{
s
.
mu
.
Lock
()
defer
s
.
mu
.
Unlock
()
if
in
.
Service
==
""
{
return
&
pb
.
HealthCheckResponse
{
Status
:
pb
.
HealthCheckResponse_SERVING
,},
nil
}
if
status
,
ok
:=
s
.
statusMap
[
in
.
Service
];
ok
{
return
&
pb
.
HealthCheckResponse
{
Status
:
status
,},
nil
}
return
nil
,
status
.
Error
(
codes
.
NotFound
,
"unkonw service"
)
}
const
(
port
=
":50051"
health_path
=
"/pb.Health/Check"
)
func
checksum
(
req
map
[
string
]
string
)
error
{
...
...
@@ -60,40 +95,40 @@ func auth(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, hand
if
!
ok
{
return
nil
,
grpc
.
Errorf
(
codes
.
Unauthenticated
,
"无Token认证信息"
)
}
request_map
:=
make
(
map
[
string
]
string
)
s
:=
fmt
.
Sprintf
(
"%v"
,
req
)
key_r
,
_
:=
regexp
.
Compile
(
`Appkey:"(.*?)"`
)
nonce_r
,
_
:=
regexp
.
Compile
(
`Nonce:"(.*?)"`
)
c_r
,
_
:=
regexp
.
Compile
(
`Curtime:"(.*?)"`
)
cs_r
,
_
:=
regexp
.
Compile
(
`Checksum:"(.*?)"`
)
appkey
:=
key_r
.
FindAllStringSubmatch
(
s
,
-
1
)
nonce
:=
nonce_r
.
FindAllStringSubmatch
(
s
,
-
1
)
curtime
:=
c_r
.
FindAllStringSubmatch
(
s
,
-
1
)
check_sum
:=
cs_r
.
FindAllStringSubmatch
(
s
,
-
1
)
if
len
(
appkey
)
<
1
{
return
nil
,
errors
.
New
(
"缺少appkey"
)
}
if
len
(
nonce
)
<
1
{
return
nil
,
errors
.
New
(
"缺少nonce"
)
}
if
len
(
curtime
)
<
1
{
return
nil
,
errors
.
New
(
"缺少curtime"
)
}
if
len
(
check_sum
)
<
1
{
return
nil
,
errors
.
New
(
"缺少checksum"
)
}
request_map
[
"Appkey"
]
=
appkey
[
0
][
1
]
request_map
[
"Nonce"
]
=
nonc
e
[
0
][
1
]
request_map
[
"Curtime"
]
=
curtime
[
0
][
1
]
request_map
[
"Checksum"
]
=
check_sum
[
0
][
1
]
if
err
:=
checksum
(
request_map
);
err
!=
nil
{
return
nil
,
err
if
info
.
FullMethod
!=
health_path
{
request_map
:=
make
(
map
[
string
]
string
)
s
:=
fmt
.
Sprintf
(
"%v"
,
req
)
key_r
,
_
:=
regexp
.
Compile
(
`Appkey:"(.*?)"`
)
nonce_r
,
_
:=
regexp
.
Compile
(
`Nonce:"(.*?)"`
)
c_r
,
_
:=
regexp
.
Compile
(
`Curtime:"(.*?)"`
)
cs_r
,
_
:=
regexp
.
Compile
(
`Checksum:"(.*?)"`
)
appkey
:=
key_r
.
FindAllStringSubmatch
(
s
,
-
1
)
nonce
:=
nonce_r
.
FindAllStringSubmatch
(
s
,
-
1
)
curtime
:=
c_r
.
FindAllStringSubmatch
(
s
,
-
1
)
check_sum
:=
cs_r
.
FindAllStringSubmatch
(
s
,
-
1
)
if
len
(
appkey
)
<
1
{
return
nil
,
errors
.
New
(
"缺少appkey"
)
}
if
len
(
nonce
)
<
1
{
return
nil
,
errors
.
New
(
"缺少nonce"
)
}
if
len
(
curtime
)
<
1
{
return
nil
,
errors
.
New
(
"缺少curtime"
)
}
if
len
(
check_sum
)
<
1
{
return
nil
,
errors
.
New
(
"缺少checksum"
)
}
request_map
[
"Appkey"
]
=
appkey
[
0
][
1
]
request_map
[
"Nonce"
]
=
nonce
[
0
][
1
]
request_map
[
"Curtime"
]
=
curtim
e
[
0
][
1
]
request_map
[
"Checksum"
]
=
check_sum
[
0
][
1
]
if
err
:=
checksum
(
request_map
);
err
!=
nil
{
return
nil
,
err
}
}
return
handler
(
ctx
,
req
)
...
...
@@ -110,10 +145,15 @@ func main() {
opts
=
append
(
opts
,
grpc
.
UnaryInterceptor
(
auth
))
s
:=
grpc
.
NewServer
(
opts
...
)
// s := grpc.NewServer()
srv
:=
NewServer
()
pb
.
RegisterHealthServer
(
s
,
srv
)
pb
.
RegisterConfigureSeviceServer
(
s
,
&
ic
.
ConfigureSevice
{})
pb
.
RegisterChatRoomServiceServer
(
s
,
&
im_chat_room
.
ImChatRoomService
{})
pb
.
RegisterImUserServer
(
s
,
&
im_user
.
ImUserServer
{})
pb
.
RegisterUserRelationshipServiceServer
(
s
,
&
iur
.
UserRelationshipService
{})
reflection
.
Register
(
s
)
log
.
Println
(
"gRPC server is running on "
+
port
+
" port."
)
if
err
:=
s
.
Serve
(
lis
);
err
!=
nil
{
log
.
Fatalf
(
"failed to serve: %v"
,
err
)
}
...
...
pb/health.pb.go
0 → 100644
View file @
1db452e8
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.24.0
// protoc v3.12.3
// source: u-proto/health.proto
package
pb
import
(
context
"context"
proto
"github.com/golang/protobuf/proto"
grpc
"google.golang.org/grpc"
codes
"google.golang.org/grpc/codes"
status
"google.golang.org/grpc/status"
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
)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const
_
=
proto
.
ProtoPackageIsVersion4
type
HealthCheckResponse_ServingStatus
int32
const
(
HealthCheckResponse_UNKNOWN
HealthCheckResponse_ServingStatus
=
0
HealthCheckResponse_SERVING
HealthCheckResponse_ServingStatus
=
1
HealthCheckResponse_NOT_SERVING
HealthCheckResponse_ServingStatus
=
2
)
// Enum value maps for HealthCheckResponse_ServingStatus.
var
(
HealthCheckResponse_ServingStatus_name
=
map
[
int32
]
string
{
0
:
"UNKNOWN"
,
1
:
"SERVING"
,
2
:
"NOT_SERVING"
,
}
HealthCheckResponse_ServingStatus_value
=
map
[
string
]
int32
{
"UNKNOWN"
:
0
,
"SERVING"
:
1
,
"NOT_SERVING"
:
2
,
}
)
func
(
x
HealthCheckResponse_ServingStatus
)
Enum
()
*
HealthCheckResponse_ServingStatus
{
p
:=
new
(
HealthCheckResponse_ServingStatus
)
*
p
=
x
return
p
}
func
(
x
HealthCheckResponse_ServingStatus
)
String
()
string
{
return
protoimpl
.
X
.
EnumStringOf
(
x
.
Descriptor
(),
protoreflect
.
EnumNumber
(
x
))
}
func
(
HealthCheckResponse_ServingStatus
)
Descriptor
()
protoreflect
.
EnumDescriptor
{
return
file_u_proto_health_proto_enumTypes
[
0
]
.
Descriptor
()
}
func
(
HealthCheckResponse_ServingStatus
)
Type
()
protoreflect
.
EnumType
{
return
&
file_u_proto_health_proto_enumTypes
[
0
]
}
func
(
x
HealthCheckResponse_ServingStatus
)
Number
()
protoreflect
.
EnumNumber
{
return
protoreflect
.
EnumNumber
(
x
)
}
// Deprecated: Use HealthCheckResponse_ServingStatus.Descriptor instead.
func
(
HealthCheckResponse_ServingStatus
)
EnumDescriptor
()
([]
byte
,
[]
int
)
{
return
file_u_proto_health_proto_rawDescGZIP
(),
[]
int
{
1
,
0
}
}
type
HealthCheckRequest
struct
{
state
protoimpl
.
MessageState
sizeCache
protoimpl
.
SizeCache
unknownFields
protoimpl
.
UnknownFields
Service
string
`protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"`
}
func
(
x
*
HealthCheckRequest
)
Reset
()
{
*
x
=
HealthCheckRequest
{}
if
protoimpl
.
UnsafeEnabled
{
mi
:=
&
file_u_proto_health_proto_msgTypes
[
0
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
}
func
(
x
*
HealthCheckRequest
)
String
()
string
{
return
protoimpl
.
X
.
MessageStringOf
(
x
)
}
func
(
*
HealthCheckRequest
)
ProtoMessage
()
{}
func
(
x
*
HealthCheckRequest
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_u_proto_health_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 HealthCheckRequest.ProtoReflect.Descriptor instead.
func
(
*
HealthCheckRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_u_proto_health_proto_rawDescGZIP
(),
[]
int
{
0
}
}
func
(
x
*
HealthCheckRequest
)
GetService
()
string
{
if
x
!=
nil
{
return
x
.
Service
}
return
""
}
type
HealthCheckResponse
struct
{
state
protoimpl
.
MessageState
sizeCache
protoimpl
.
SizeCache
unknownFields
protoimpl
.
UnknownFields
Status
HealthCheckResponse_ServingStatus
`protobuf:"varint,1,opt,name=status,proto3,enum=pb.HealthCheckResponse_ServingStatus" json:"status,omitempty"`
}
func
(
x
*
HealthCheckResponse
)
Reset
()
{
*
x
=
HealthCheckResponse
{}
if
protoimpl
.
UnsafeEnabled
{
mi
:=
&
file_u_proto_health_proto_msgTypes
[
1
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
}
func
(
x
*
HealthCheckResponse
)
String
()
string
{
return
protoimpl
.
X
.
MessageStringOf
(
x
)
}
func
(
*
HealthCheckResponse
)
ProtoMessage
()
{}
func
(
x
*
HealthCheckResponse
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_u_proto_health_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 HealthCheckResponse.ProtoReflect.Descriptor instead.
func
(
*
HealthCheckResponse
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_u_proto_health_proto_rawDescGZIP
(),
[]
int
{
1
}
}
func
(
x
*
HealthCheckResponse
)
GetStatus
()
HealthCheckResponse_ServingStatus
{
if
x
!=
nil
{
return
x
.
Status
}
return
HealthCheckResponse_UNKNOWN
}
var
File_u_proto_health_proto
protoreflect
.
FileDescriptor
var
file_u_proto_health_proto_rawDesc
=
[]
byte
{
0x0a
,
0x14
,
0x75
,
0x2d
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x2f
,
0x68
,
0x65
,
0x61
,
0x6c
,
0x74
,
0x68
,
0x2e
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x12
,
0x02
,
0x70
,
0x62
,
0x22
,
0x2e
,
0x0a
,
0x12
,
0x48
,
0x65
,
0x61
,
0x6c
,
0x74
,
0x68
,
0x43
,
0x68
,
0x65
,
0x63
,
0x6b
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x18
,
0x0a
,
0x07
,
0x73
,
0x65
,
0x72
,
0x76
,
0x69
,
0x63
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x07
,
0x73
,
0x65
,
0x72
,
0x76
,
0x69
,
0x63
,
0x65
,
0x22
,
0x90
,
0x01
,
0x0a
,
0x13
,
0x48
,
0x65
,
0x61
,
0x6c
,
0x74
,
0x68
,
0x43
,
0x68
,
0x65
,
0x63
,
0x6b
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x12
,
0x3d
,
0x0a
,
0x06
,
0x73
,
0x74
,
0x61
,
0x74
,
0x75
,
0x73
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x0e
,
0x32
,
0x25
,
0x2e
,
0x70
,
0x62
,
0x2e
,
0x48
,
0x65
,
0x61
,
0x6c
,
0x74
,
0x68
,
0x43
,
0x68
,
0x65
,
0x63
,
0x6b
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x2e
,
0x53
,
0x65
,
0x72
,
0x76
,
0x69
,
0x6e
,
0x67
,
0x53
,
0x74
,
0x61
,
0x74
,
0x75
,
0x73
,
0x52
,
0x06
,
0x73
,
0x74
,
0x61
,
0x74
,
0x75
,
0x73
,
0x22
,
0x3a
,
0x0a
,
0x0d
,
0x53
,
0x65
,
0x72
,
0x76
,
0x69
,
0x6e
,
0x67
,
0x53
,
0x74
,
0x61
,
0x74
,
0x75
,
0x73
,
0x12
,
0x0b
,
0x0a
,
0x07
,
0x55
,
0x4e
,
0x4b
,
0x4e
,
0x4f
,
0x57
,
0x4e
,
0x10
,
0x00
,
0x12
,
0x0b
,
0x0a
,
0x07
,
0x53
,
0x45
,
0x52
,
0x56
,
0x49
,
0x4e
,
0x47
,
0x10
,
0x01
,
0x12
,
0x0f
,
0x0a
,
0x0b
,
0x4e
,
0x4f
,
0x54
,
0x5f
,
0x53
,
0x45
,
0x52
,
0x56
,
0x49
,
0x4e
,
0x47
,
0x10
,
0x02
,
0x32
,
0x42
,
0x0a
,
0x06
,
0x48
,
0x65
,
0x61
,
0x6c
,
0x74
,
0x68
,
0x12
,
0x38
,
0x0a
,
0x05
,
0x43
,
0x68
,
0x65
,
0x63
,
0x6b
,
0x12
,
0x16
,
0x2e
,
0x70
,
0x62
,
0x2e
,
0x48
,
0x65
,
0x61
,
0x6c
,
0x74
,
0x68
,
0x43
,
0x68
,
0x65
,
0x63
,
0x6b
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x17
,
0x2e
,
0x70
,
0x62
,
0x2e
,
0x48
,
0x65
,
0x61
,
0x6c
,
0x74
,
0x68
,
0x43
,
0x68
,
0x65
,
0x63
,
0x6b
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x62
,
0x06
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x33
,
}
var
(
file_u_proto_health_proto_rawDescOnce
sync
.
Once
file_u_proto_health_proto_rawDescData
=
file_u_proto_health_proto_rawDesc
)
func
file_u_proto_health_proto_rawDescGZIP
()
[]
byte
{
file_u_proto_health_proto_rawDescOnce
.
Do
(
func
()
{
file_u_proto_health_proto_rawDescData
=
protoimpl
.
X
.
CompressGZIP
(
file_u_proto_health_proto_rawDescData
)
})
return
file_u_proto_health_proto_rawDescData
}
var
file_u_proto_health_proto_enumTypes
=
make
([]
protoimpl
.
EnumInfo
,
1
)
var
file_u_proto_health_proto_msgTypes
=
make
([]
protoimpl
.
MessageInfo
,
2
)
var
file_u_proto_health_proto_goTypes
=
[]
interface
{}{
(
HealthCheckResponse_ServingStatus
)(
0
),
// 0: pb.HealthCheckResponse.ServingStatus
(
*
HealthCheckRequest
)(
nil
),
// 1: pb.HealthCheckRequest
(
*
HealthCheckResponse
)(
nil
),
// 2: pb.HealthCheckResponse
}
var
file_u_proto_health_proto_depIdxs
=
[]
int32
{
0
,
// 0: pb.HealthCheckResponse.status:type_name -> pb.HealthCheckResponse.ServingStatus
1
,
// 1: pb.Health.Check:input_type -> pb.HealthCheckRequest
2
,
// 2: pb.Health.Check:output_type -> pb.HealthCheckResponse
2
,
// [2:3] is the sub-list for method output_type
1
,
// [1:2] 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
}
func
init
()
{
file_u_proto_health_proto_init
()
}
func
file_u_proto_health_proto_init
()
{
if
File_u_proto_health_proto
!=
nil
{
return
}
if
!
protoimpl
.
UnsafeEnabled
{
file_u_proto_health_proto_msgTypes
[
0
]
.
Exporter
=
func
(
v
interface
{},
i
int
)
interface
{}
{
switch
v
:=
v
.
(
*
HealthCheckRequest
);
i
{
case
0
:
return
&
v
.
state
case
1
:
return
&
v
.
sizeCache
case
2
:
return
&
v
.
unknownFields
default
:
return
nil
}
}
file_u_proto_health_proto_msgTypes
[
1
]
.
Exporter
=
func
(
v
interface
{},
i
int
)
interface
{}
{
switch
v
:=
v
.
(
*
HealthCheckResponse
);
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_u_proto_health_proto_rawDesc
,
NumEnums
:
1
,
NumMessages
:
2
,
NumExtensions
:
0
,
NumServices
:
1
,
},
GoTypes
:
file_u_proto_health_proto_goTypes
,
DependencyIndexes
:
file_u_proto_health_proto_depIdxs
,
EnumInfos
:
file_u_proto_health_proto_enumTypes
,
MessageInfos
:
file_u_proto_health_proto_msgTypes
,
}
.
Build
()
File_u_proto_health_proto
=
out
.
File
file_u_proto_health_proto_rawDesc
=
nil
file_u_proto_health_proto_goTypes
=
nil
file_u_proto_health_proto_depIdxs
=
nil
}
// Reference imports to suppress errors if they are not otherwise used.
var
_
context
.
Context
var
_
grpc
.
ClientConnInterface
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const
_
=
grpc
.
SupportPackageIsVersion6
// HealthClient is the client API for Health service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type
HealthClient
interface
{
Check
(
ctx
context
.
Context
,
in
*
HealthCheckRequest
,
opts
...
grpc
.
CallOption
)
(
*
HealthCheckResponse
,
error
)
}
type
healthClient
struct
{
cc
grpc
.
ClientConnInterface
}
func
NewHealthClient
(
cc
grpc
.
ClientConnInterface
)
HealthClient
{
return
&
healthClient
{
cc
}
}
func
(
c
*
healthClient
)
Check
(
ctx
context
.
Context
,
in
*
HealthCheckRequest
,
opts
...
grpc
.
CallOption
)
(
*
HealthCheckResponse
,
error
)
{
out
:=
new
(
HealthCheckResponse
)
err
:=
c
.
cc
.
Invoke
(
ctx
,
"/pb.Health/Check"
,
in
,
out
,
opts
...
)
if
err
!=
nil
{
return
nil
,
err
}
return
out
,
nil
}
// HealthServer is the server API for Health service.
type
HealthServer
interface
{
Check
(
context
.
Context
,
*
HealthCheckRequest
)
(
*
HealthCheckResponse
,
error
)
}
// UnimplementedHealthServer can be embedded to have forward compatible implementations.
type
UnimplementedHealthServer
struct
{
}
func
(
*
UnimplementedHealthServer
)
Check
(
context
.
Context
,
*
HealthCheckRequest
)
(
*
HealthCheckResponse
,
error
)
{
return
nil
,
status
.
Errorf
(
codes
.
Unimplemented
,
"method Check not implemented"
)
}
func
RegisterHealthServer
(
s
*
grpc
.
Server
,
srv
HealthServer
)
{
s
.
RegisterService
(
&
_Health_serviceDesc
,
srv
)
}
func
_Health_Check_Handler
(
srv
interface
{},
ctx
context
.
Context
,
dec
func
(
interface
{})
error
,
interceptor
grpc
.
UnaryServerInterceptor
)
(
interface
{},
error
)
{
in
:=
new
(
HealthCheckRequest
)
if
err
:=
dec
(
in
);
err
!=
nil
{
return
nil
,
err
}
if
interceptor
==
nil
{
return
srv
.
(
HealthServer
)
.
Check
(
ctx
,
in
)
}
info
:=
&
grpc
.
UnaryServerInfo
{
Server
:
srv
,
FullMethod
:
"/pb.Health/Check"
,
}
handler
:=
func
(
ctx
context
.
Context
,
req
interface
{})
(
interface
{},
error
)
{
return
srv
.
(
HealthServer
)
.
Check
(
ctx
,
req
.
(
*
HealthCheckRequest
))
}
return
interceptor
(
ctx
,
in
,
info
,
handler
)
}
var
_Health_serviceDesc
=
grpc
.
ServiceDesc
{
ServiceName
:
"pb.Health"
,
HandlerType
:
(
*
HealthServer
)(
nil
),
Methods
:
[]
grpc
.
MethodDesc
{
{
MethodName
:
"Check"
,
Handler
:
_Health_Check_Handler
,
},
},
Streams
:
[]
grpc
.
StreamDesc
{},
Metadata
:
"u-proto/health.proto"
,
}
u-proto/health.proto
0 → 100644
View file @
1db452e8
syntax
=
"proto3"
;
package
pb
;
message
HealthCheckRequest
{
string
service
=
1
;
}
message
HealthCheckResponse
{
enum
ServingStatus
{
UNKNOWN
=
0
;
SERVING
=
1
;
NOT_SERVING
=
2
;
}
ServingStatus
status
=
1
;
}
service
Health
{
rpc
Check
(
HealthCheckRequest
)
returns
(
HealthCheckResponse
);
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment