19
19
import os
20
20
import sys
21
21
import time
22
-
22
+ import grpc
23
23
from jinja2 import Environment , FileSystemLoader , select_autoescape , TemplateError
24
24
from google .api_core .exceptions import GoogleAPICallError
25
- import grpc
26
25
27
26
import demo_pb2
28
27
import demo_pb2_grpc
28
+ from grpc_health .v1 import health_pb2
29
+ from grpc_health .v1 import health_pb2_grpc
29
30
30
31
# from opencensus.trace.ext.grpc import server_interceptor
31
32
# from opencensus.trace.samplers import always_on
56
57
)
57
58
template = env .get_template ('confirmation.html' )
58
59
59
- class EmailService (demo_pb2_grpc .EmailServiceServicer ):
60
+ class BaseEmailService (demo_pb2_grpc .EmailServiceServicer ):
61
+ def Check (self , request , context ):
62
+ return health_pb2 .HealthCheckResponse (
63
+ status = health_pb2 .HealthCheckResponse .SERVING )
64
+
65
+ class EmailService (BaseEmailService ):
60
66
def __init__ (self ):
61
67
raise Exception ('cloud mail client not implemented' )
62
68
super ().__init__ ()
@@ -79,7 +85,6 @@ def send_email(client, email_address, content):
79
85
"html_body" : content
80
86
}
81
87
)
82
-
83
88
print ("Message sent: {}" .format (response .rfc822_message_id ))
84
89
85
90
def SendOrderConfirmation (self , request , context ):
@@ -104,18 +109,30 @@ def SendOrderConfirmation(self, request, context):
104
109
105
110
return demo_pb2 .Empty ()
106
111
107
- class DummyEmailService (demo_pb2_grpc . EmailServiceServicer ):
112
+ class DummyEmailService (BaseEmailService ):
108
113
def SendOrderConfirmation (self , request , context ):
109
114
print ('A request to send order confirmation email to {} has been received.' .format (request .email ))
110
115
return demo_pb2 .Empty ()
111
116
117
+ class HealthCheck ():
118
+ def Check (self , request , context ):
119
+ return health_pb2 .HealthCheckResponse (
120
+ status = health_pb2 .HealthCheckResponse .SERVING )
121
+
112
122
def start (dummy_mode ):
113
123
server = grpc .server (futures .ThreadPoolExecutor (max_workers = 10 ))#, interceptors=(tracer_interceptor,))
124
+ service = None
114
125
if dummy_mode :
115
- demo_pb2_grpc . add_EmailServiceServicer_to_server ( DummyEmailService (), server )
126
+ service = DummyEmailService ()
116
127
else :
117
- raise Exception ('non-dummy mode not implemented' )
118
- server .add_insecure_port ('[::]:8080' )
128
+ raise Exception ('non-dummy mode not implemented yet' )
129
+
130
+ demo_pb2_grpc .add_EmailServiceServicer_to_server (service , server )
131
+ health_pb2_grpc .add_HealthServicer_to_server (service , server )
132
+
133
+ port = os .environ .get ('PORT' , "8080" )
134
+ print ("listening on port: " + port )
135
+ server .add_insecure_port ('[::]:' + port )
119
136
server .start ()
120
137
try :
121
138
while True :
@@ -125,5 +142,5 @@ def start(dummy_mode):
125
142
126
143
127
144
if __name__ == '__main__' :
128
- print ('Starting the email service in dummy mode.' )
145
+ print ('starting the email service in dummy mode.' )
129
146
start (dummy_mode = True )
0 commit comments