grpc: add health checks to python services (#28)
also converted line endings for recommendationservice/requirements.txt from dos to unix.
This commit is contained in:
parent
fc6df2daea
commit
880ee16be2
10 changed files with 331 additions and 259 deletions
|
@ -1,6 +1,13 @@
|
|||
|
||||
|
||||
# Use the grpc.io provided Python image as the base image
|
||||
FROM grpc/python:1.0
|
||||
|
||||
# download the grpc health probe
|
||||
RUN GRPC_HEALTH_PROBE_VERSION=v0.1.0-alpha.1 && \
|
||||
wget -qO/bin/grpc_health_probe https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/${GRPC_HEALTH_PROBE_VERSION}/grpc_health_probe-linux-amd64 && \
|
||||
chmod +x /bin/grpc_health_probe
|
||||
|
||||
# show python logs as they occur
|
||||
ENV PYTHONUNBUFFERED=0
|
||||
|
||||
|
|
|
@ -19,13 +19,14 @@ import argparse
|
|||
import os
|
||||
import sys
|
||||
import time
|
||||
|
||||
import grpc
|
||||
from jinja2 import Environment, FileSystemLoader, select_autoescape, TemplateError
|
||||
from google.api_core.exceptions import GoogleAPICallError
|
||||
import grpc
|
||||
|
||||
import demo_pb2
|
||||
import demo_pb2_grpc
|
||||
from grpc_health.v1 import health_pb2
|
||||
from grpc_health.v1 import health_pb2_grpc
|
||||
|
||||
# from opencensus.trace.ext.grpc import server_interceptor
|
||||
# from opencensus.trace.samplers import always_on
|
||||
|
@ -56,7 +57,12 @@ env = Environment(
|
|||
)
|
||||
template = env.get_template('confirmation.html')
|
||||
|
||||
class EmailService(demo_pb2_grpc.EmailServiceServicer):
|
||||
class BaseEmailService(demo_pb2_grpc.EmailServiceServicer):
|
||||
def Check(self, request, context):
|
||||
return health_pb2.HealthCheckResponse(
|
||||
status=health_pb2.HealthCheckResponse.SERVING)
|
||||
|
||||
class EmailService(BaseEmailService):
|
||||
def __init__(self):
|
||||
raise Exception('cloud mail client not implemented')
|
||||
super().__init__()
|
||||
|
@ -79,7 +85,6 @@ class EmailService(demo_pb2_grpc.EmailServiceServicer):
|
|||
"html_body": content
|
||||
}
|
||||
)
|
||||
|
||||
print("Message sent: {}".format(response.rfc822_message_id))
|
||||
|
||||
def SendOrderConfirmation(self, request, context):
|
||||
|
@ -104,18 +109,30 @@ class EmailService(demo_pb2_grpc.EmailServiceServicer):
|
|||
|
||||
return demo_pb2.Empty()
|
||||
|
||||
class DummyEmailService(demo_pb2_grpc.EmailServiceServicer):
|
||||
class DummyEmailService(BaseEmailService):
|
||||
def SendOrderConfirmation(self, request, context):
|
||||
print('A request to send order confirmation email to {} has been received.'.format(request.email))
|
||||
return demo_pb2.Empty()
|
||||
|
||||
class HealthCheck():
|
||||
def Check(self, request, context):
|
||||
return health_pb2.HealthCheckResponse(
|
||||
status=health_pb2.HealthCheckResponse.SERVING)
|
||||
|
||||
def start(dummy_mode):
|
||||
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))#, interceptors=(tracer_interceptor,))
|
||||
service = None
|
||||
if dummy_mode:
|
||||
demo_pb2_grpc.add_EmailServiceServicer_to_server(DummyEmailService(), server)
|
||||
service = DummyEmailService()
|
||||
else:
|
||||
raise Exception('non-dummy mode not implemented')
|
||||
server.add_insecure_port('[::]:8080')
|
||||
raise Exception('non-dummy mode not implemented yet')
|
||||
|
||||
demo_pb2_grpc.add_EmailServiceServicer_to_server(service, server)
|
||||
health_pb2_grpc.add_HealthServicer_to_server(service, server)
|
||||
|
||||
port = os.environ.get('PORT', "8080")
|
||||
print("listening on port: "+port)
|
||||
server.add_insecure_port('[::]:'+port)
|
||||
server.start()
|
||||
try:
|
||||
while True:
|
||||
|
@ -125,5 +142,5 @@ def start(dummy_mode):
|
|||
|
||||
|
||||
if __name__ == '__main__':
|
||||
print('Starting the email service in dummy mode.')
|
||||
print('starting the email service in dummy mode.')
|
||||
start(dummy_mode = True)
|
||||
|
|
|
@ -9,6 +9,7 @@ google-cloud-trace==0.19.0
|
|||
googleapis-common-protos==1.5.3
|
||||
grpc-google-iam-v1==0.11.4
|
||||
grpcio==1.12.1
|
||||
grpcio-health-checking==1.14.1
|
||||
grpcio-tools==1.12.1
|
||||
idna==2.7
|
||||
Jinja2==2.10
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue