add gluster mounting control
This commit is contained in:
parent
06a8a4443f
commit
903ec16bb0
|
@ -1,4 +1,5 @@
|
||||||
import logging
|
import logging, os
|
||||||
|
from subprocess import run, PIPE, CalledProcessError
|
||||||
from logging.handlers import TimedRotatingFileHandler, QueueListener, QueueHandler
|
from logging.handlers import TimedRotatingFileHandler, QueueListener, QueueHandler
|
||||||
|
|
||||||
def SlaveLogger(name, level, queue):
|
def SlaveLogger(name, level, queue):
|
||||||
|
@ -8,19 +9,44 @@ def SlaveLogger(name, level, queue):
|
||||||
logger.propagate = False
|
logger.propagate = False
|
||||||
return logger
|
return logger
|
||||||
|
|
||||||
#TODO: need to add mounting code here for gluster. since this app is the only
|
class GlusterFS():
|
||||||
# gluster user, (un)mounting should be handled here instead of by systemd
|
def __init__(self, server, volume, mountpoint):
|
||||||
|
self.server = server
|
||||||
|
self.volume = volume
|
||||||
|
|
||||||
|
if not os.path.exists(mountpoint):
|
||||||
|
raise FileNotFoundError
|
||||||
|
|
||||||
|
self.mountpoint = mountpoint
|
||||||
|
|
||||||
|
def mount(self):
|
||||||
|
self._run(['mount', '-t', 'glusterfs', self.server + ':/' + self.volume, self.mountpoint])
|
||||||
|
|
||||||
|
def unmount(self):
|
||||||
|
self._run(['umount', self.mountpoint])
|
||||||
|
|
||||||
|
def _run(self, cmd):
|
||||||
|
try:
|
||||||
|
run(cmd, check=True, stdout=PIPE, stderr=PIPE)
|
||||||
|
except CalledProcessError as e:
|
||||||
|
print(e.stderr.decode('ascii').rstrip())
|
||||||
|
|
||||||
class MasterLogger():
|
class MasterLogger():
|
||||||
def __init__(self, name, level, queue):
|
def __init__(self, name, level, queue):
|
||||||
|
mountpoint = '/mnt/glusterfs/pyledriver'
|
||||||
|
|
||||||
|
self.fs = GlusterFS('192.168.11.39', 'pyledriver', mountpoint)
|
||||||
|
self.fs.mount()
|
||||||
|
|
||||||
consoleFormat = logging.Formatter('[%(name)s] [%(levelname)s] %(message)s')
|
consoleFormat = logging.Formatter('[%(name)s] [%(levelname)s] %(message)s')
|
||||||
fileFormat = logging.Formatter('[%(asctime)s] [%(name)s] [%(levelname)s] %(message)s')
|
fileFormat = logging.Formatter('[%(asctime)s] [%(name)s] [%(levelname)s] %(message)s')
|
||||||
|
|
||||||
console = logging.StreamHandler()
|
console = logging.StreamHandler()
|
||||||
console.setFormatter(consoleFormat)
|
console.setFormatter(consoleFormat)
|
||||||
|
|
||||||
rotatingFile = TimedRotatingFileHandler('/mnt/glusterfs/pyledriver/logs/pyledriver-log', when='midnight')
|
# TODO: check that 'logs' actually exists in the mp
|
||||||
rotatingFile.setFormatter(fileFormat)
|
self.rotatingFile = TimedRotatingFileHandler(mountpoint + '/logs/pyledriver-log', when='midnight')
|
||||||
|
self.rotatingFile.setFormatter(fileFormat)
|
||||||
|
|
||||||
logging.basicConfig(level=getattr(logging, level), handlers=[QueueHandler(queue)])
|
logging.basicConfig(level=getattr(logging, level), handlers=[QueueHandler(queue)])
|
||||||
logger = logging.getLogger(name)
|
logger = logging.getLogger(name)
|
||||||
|
@ -30,8 +56,10 @@ class MasterLogger():
|
||||||
for i in ['debug', 'info', 'warning', 'error', 'critical']:
|
for i in ['debug', 'info', 'warning', 'error', 'critical']:
|
||||||
setattr(self, i, getattr(logger, i))
|
setattr(self, i, getattr(logger, i))
|
||||||
|
|
||||||
self.queListener = QueueListener(queue, console, rotatingFile)
|
self.queListener = QueueListener(queue, console, self.rotatingFile)
|
||||||
self.queListener.start()
|
self.queListener.start()
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
self.queListener.stop()
|
self.queListener.stop()
|
||||||
|
self.rotatingFile.close() # must close file stream before unmounting
|
||||||
|
self.fs.unmount()
|
||||||
|
|
Loading…
Reference in New Issue