summaryrefslogtreecommitdiffstats
path: root/gitautodeploy/gitautodeploy.py
diff options
context:
space:
mode:
authorOliver Poignant <oliver@poignant.se>2017-01-01 13:21:08 +0100
committerOliver Poignant <oliver@poignant.se>2017-01-01 13:21:08 +0100
commitbebe5fb16550ee46d165eb46de2e7aaa9cfd5406 (patch)
tree842d55dc48a069d103bcce8f8d7b5476367297e7 /gitautodeploy/gitautodeploy.py
parent01995b6b301763c92f40d6453d19eeb81c85e15c (diff)
downloadGit-Auto-Deploy-bebe5fb16550ee46d165eb46de2e7aaa9cfd5406.zip
Git-Auto-Deploy-bebe5fb16550ee46d165eb46de2e7aaa9cfd5406.tar.gz
Git-Auto-Deploy-bebe5fb16550ee46d165eb46de2e7aaa9cfd5406.tar.bz2
API for event status (disabled by default). Enhanced event logging.
Diffstat (limited to 'gitautodeploy/gitautodeploy.py')
-rw-r--r--gitautodeploy/gitautodeploy.py59
1 files changed, 43 insertions, 16 deletions
diff --git a/gitautodeploy/gitautodeploy.py b/gitautodeploy/gitautodeploy.py
index 167fae8..c0d5b21 100644
--- a/gitautodeploy/gitautodeploy.py
+++ b/gitautodeploy/gitautodeploy.py
@@ -18,6 +18,9 @@ class GitAutoDeploy(object):
_config = {}
_port = None
_pid = None
+ _event_store = None
+ _default_stdout = None
+ _default_stderr = None
def __new__(cls, *args, **kwargs):
"""Overload constructor to enable singleton access"""
@@ -227,11 +230,8 @@ class GitAutoDeploy(object):
return 0
- def update(self, action, message=None):
+ def update(self, *args, **kwargs):
pass
- #print "%s was updated" % action,
-# if message:
-# print "Message: %s" % message
def setup(self, config):
"""Setup an instance of GAD based on the provided config object."""
@@ -242,7 +242,7 @@ class GitAutoDeploy(object):
import logging
from lock import Lock
from httpserver import WebhookRequestHandlerFactory
- from events import EventStore
+ from events import EventStore, StartupEvent
# This solves https://github.com/olipo186/Git-Auto-Deploy/issues/118
try:
@@ -257,6 +257,12 @@ class GitAutoDeploy(object):
# Attatch config values to this instance
self._config = config
+ self._event_store = EventStore()
+ self._event_store.register_observer(self)
+
+ startup_event = StartupEvent()
+ self._event_store.register_action(startup_event)
+
# Set up logging
logger = logging.getLogger()
logFormatter = logging.Formatter("%(asctime)s [%(levelname)-5.5s] %(message)s")
@@ -290,11 +296,11 @@ class GitAutoDeploy(object):
logger.addHandler(fileHandler)
if 'ssh-keyscan' in self._config and self._config['ssh-keyscan']:
- logger.info('Scanning repository hosts for ssh keys...')
+ startup_event.log_info('Scanning repository hosts for ssh keys...')
self.ssh_key_scan()
if 'force' in self._config and self._config['force']:
- logger.info('Attempting to kill any other process currently occupying port %s' % self._config['port'])
+ startup_event.log_info('Attempting to kill any other process currently occupying port %s' % self._config['port'])
self.kill_conflicting_processes()
# Clone all repos once initially
@@ -309,10 +315,10 @@ class GitAutoDeploy(object):
sys.stderr = LogInterface(logger.error)
if 'daemon-mode' in self._config and self._config['daemon-mode']:
- logger.info('Starting Git Auto Deploy in daemon mode')
+ startup_event.log_info('Starting Git Auto Deploy in daemon mode')
GitAutoDeploy.create_daemon()
else:
- logger.info('Git Auto Deploy started')
+ startup_event.log_info('Git Auto Deploy started')
self._pid = os.getpid()
self.create_pid_file()
@@ -327,11 +333,8 @@ class GitAutoDeploy(object):
try:
- event_store = EventStore()
- event_store.register_observer(self)
-
# Create web hook request handler class
- WebhookRequestHandler = WebhookRequestHandlerFactory(self._config, event_store)
+ WebhookRequestHandler = WebhookRequestHandlerFactory(self._config, self._event_store)
self._server = HTTPServer((self._config['host'],
self._config['port']),
@@ -344,14 +347,16 @@ class GitAutoDeploy(object):
certfile=os.path.expanduser(self._config['ssl-pem']),
server_side=True)
sa = self._server.socket.getsockname()
- logger.info("Listening on %s port %s", sa[0], sa[1])
+ startup_event.log_info("Listening on %s port %s" % (sa[0], sa[1]))
+ startup_event.address = sa[0]
+ startup_event.port = sa[1]
+ startup_event.notify()
# Actual port bound to (nessecary when OS picks randomly free port)
self._port = sa[1]
except socket.error, e:
-
- logger.critical("Error on socket: %s" % e)
+ startup_event.log_critical("Error on socket: %s" % e)
GitAutoDeploy.debug_diagnosis(self._config['port'])
sys.exit(1)
@@ -361,6 +366,15 @@ class GitAutoDeploy(object):
import sys
import socket
import logging
+ import os
+ from events import SystemEvent
+
+ # Add script dir to sys path, allowing us to import sub modules even after changing cwd
+ sys.path.insert(1, os.path.dirname(os.path.realpath(__file__)))
+
+ # Set CWD to public www folder. This makes the http server serve files from the wwwroot directory.
+ wwwroot = os.path.join(os.path.dirname(os.path.realpath(__file__)), "wwwroot")
+ os.chdir(wwwroot)
# Set up logging
logger = logging.getLogger()
@@ -370,10 +384,16 @@ class GitAutoDeploy(object):
except socket.error, e:
logger.critical("Error on socket: %s" % e)
+ event = SystemEvent()
+ self._event_store.register_action(event)
+ event.log_critical("Error on socket: %s" % e)
sys.exit(1)
except KeyboardInterrupt, e:
logger.info('Requested close by keyboard interrupt signal')
+ event = SystemEvent()
+ self._event_store.register_action(event)
+ event.log_info('Requested close by keyboard interrupt signal')
self.stop()
self.exit()
@@ -404,6 +424,7 @@ class GitAutoDeploy(object):
self._server.socket.close()
def signal_handler(self, signum, frame):
+ from events import SystemEvent
import logging
logger = logging.getLogger()
self.stop()
@@ -415,9 +436,15 @@ class GitAutoDeploy(object):
elif signum == 2:
logger.info('Requested close by keyboard interrupt signal')
+ event = SystemEvent()
+ self._event_store.register_action(event)
+ event.log_info('Requested close by keyboard interrupt signal')
elif signum == 6:
logger.info('Requested close by SIGABRT (process abort signal). Code 6.')
+ event = SystemEvent()
+ self._event_store.register_action(event)
+ event.log_info('Requested close by SIGABRT (process abort signal). Code 6.')
self.exit()