Skip to content

Instantly share code, notes, and snippets.

@hirokazumiyaji
Created June 5, 2015 03:13
Show Gist options
  • Save hirokazumiyaji/4084d2c36b9a13f86306 to your computer and use it in GitHub Desktop.
Save hirokazumiyaji/4084d2c36b9a13f86306 to your computer and use it in GitHub Desktop.
Serf Handler
#!/usr/bin/env python
# coding: utf-8
"""
Serf class is serf event handler class.
Switch the execution method under the handlers module in the event
* tree
event-handler-root
|- handler.py
|- handlers
|- member_join.py
|- member_failed.py
|- member_update.py
|- member_leap.py
|- user_deploy.py
|- query_xxx.py
|- ...
"""
from importlib import import_module
import os
import sys
class SerfHandler(object):
def __init__(self):
self._event = os.environ.get('SERF_EVENT', '')
self._self_name = os.environ.get('SERF_SELF_NAME', '')
self._user_event = os.environ.get('SERF_USER_EVENT', '')
self._query_name = os.environ.get('SERF_QUERY_NAME', '')
self._args = sys.stdin.readlines()
def init_handler(self):
if self._event == 'user':
# user event
self._handler_name = '{}_{}'.format(
self._event, self._user_event)
elif self._event == 'query':
# query event
self._handler_name = '{}_{}'.format(
self._event, self._query_name)
else:
# memeber-join, member-failed, etc...
self._handler_name = self._event.replace('-', '_')
try:
self._handler = import_module(
'handlers.{}'.format(self._handler_name))
except ImportError:
self._handler = None
def exec(self):
if self._handler:
main = getattr(self._handler, 'main')
if main:
return main(self._self_name, *self._args)
return 0
if __name__ == '__main__':
os.exit(Serf().exec())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment