google/resource-snippets/compute-v1/healthz_server.py (56 lines of code) (raw):

# Copyright 2018 Google Inc. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Healthz server invoked from startup script invoked on GCE instance.""" import BaseHTTPServer import getopt import logging import ssl import sys import urlparse class HealthzHandler(BaseHTTPServer.BaseHTTPRequestHandler): """Handler for HTTP requests.""" health_status = 'HEALTHY' def do_GET(self): # pylint: disable=C0103 """Handler for GET requests.""" parsed_path = urlparse.urlparse(self.path) response_code = 400 if parsed_path.path == '/change_status': HealthzHandler.health_status = parsed_path.query print 'changed health status to ' + HealthzHandler.health_status response_code = 200 elif parsed_path.path == '/healthz': if HealthzHandler.health_status == 'HEALTHY': response_code = 200 elif HealthzHandler.health_status == 'UNHEALTHY': response_code = 500 self.send_response(response_code) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write(HealthzHandler.health_status) def main(): # Process flags port = 12345 cert_file = '' key_file = '' try: opts, _ = getopt.getopt( sys.argv[1:], '', ['port=', 'cert_file=', 'key_file=']) except getopt.GetoptError: logging.error( 'healthz_server.py ' '--port <port> --cert_file <cert_file> --key_file <key_file>') sys.exit(2) for opt, arg in opts: if opt == '--port': port = int(arg) elif opt == '--cert_file': cert_file = arg elif opt == '--key_file': key_file = arg # Start server healthz_server = BaseHTTPServer.HTTPServer(('', port), HealthzHandler) print 'Started healthz_server on port', port if cert_file and key_file: healthz_server.socket = ssl.wrap_socket( healthz_server.socket, certfile=cert_file, keyfile=key_file, server_side=True) healthz_server.serve_forever() if __name__ == '__main__': main()