1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
from concurrent import futures
import sys
import time
import grpc
import kv_pb2
import kv_pb2_grpc
from grpc_health.v1.health import HealthServicer
from grpc_health.v1 import health_pb2, health_pb2_grpc
class KVServicer(kv_pb2_grpc.KVServicer):
"""Implementation of KV service."""
def Get(self, request, context):
filename = "kv_"+request.key
with open(filename, 'r') as f:
result = kv_pb2.GetResponse()
result.value = f.read()
return result
def Put(self, request, context):
filename = "kv_"+request.key
value = "{0}\n\nWritten from plugin-python".format(request.value)
with open(filename, 'w') as f:
f.write(value)
return kv_pb2.Empty()
def serve():
# We need to build a health service to work with go-plugin
health = HealthServicer()
health.set("plugin", health_pb2.HealthCheckResponse.ServingStatus.Value('SERVING'))
# Start the server.
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
kv_pb2_grpc.add_KVServicer_to_server(KVServicer(), server)
health_pb2_grpc.add_HealthServicer_to_server(health, server)
server.add_insecure_port(':1234')
server.start()
# Output information
print("1|1|tcp|127.0.0.1:1234|grpc")
sys.stdout.flush()
try:
while True:
time.sleep(60 * 60 * 24)
except KeyboardInterrupt:
server.stop(0)
if __name__ == '__main__':
serve()
|