##// END OF EJS Templates
svn-support: Add a view to trigger the (re)generation of Apache mod_dav_svn configuration file....
svn-support: Add a view to trigger the (re)generation of Apache mod_dav_svn configuration file. The configuration is automatically generated if a repository group is changed. This is problematic in a case where no repository groups are used (yet). Therfore an option is needed to start the geneartion manually.

File last commit:

r1011:0a4f6193 default
r1012:af6bf7a6 default
Show More
subscribers.py
132 lines | 4.8 KiB | text/x-python | PythonLexer
Martin Bornhold
svn: Add subscriber to generate the mod_dav_svn config on RepoGroupEvents #4082
r559 # -*- coding: utf-8 -*-
# Copyright (C) 2016-2016 RhodeCode GmbH
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License, version 3
# (only), as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# This program is dual-licensed. If you wish to learn more about the
# RhodeCode Enterprise Edition, including its added features, Support services,
# and proprietary license terms, please see https://rhodecode.com/licenses/
Martin Bornhold
svn-support: Move try/catch block up to subscriber and also DB interaction.
r831 import logging
Martin Bornhold
svn-support: Add subscriber to execute the svn.proxy.reload_cmd on config changes. #4271
r1011 import subprocess32
from threading import Thread
Martin Bornhold
svn: Add subscriber to generate the mod_dav_svn config on RepoGroupEvents #4082
r559
Martin Bornhold
svn-support: Add subscriber to execute the svn.proxy.reload_cmd on config changes. #4271
r1011
Martin Bornhold
svn: Moved code and make a small bugfix.
r563 from .utils import generate_mod_dav_svn_config
Martin Bornhold
svn: Add subscriber to generate the mod_dav_svn config on RepoGroupEvents #4082
r559
Martin Bornhold
svn-support: Move try/catch block up to subscriber and also DB interaction.
r831 log = logging.getLogger(__name__)
Martin Bornhold
svn: Moved code and make a small bugfix.
r563 def generate_config_subscriber(event):
Martin Bornhold
svn: Update and add doc strings and comments.
r560 """
Subscriber to the `rhodcode.events.RepoGroupEvent`. This triggers the
automatic generation of mod_dav_svn config file on repository group
changes.
"""
Martin Bornhold
svn-support: Move try/catch block up to subscriber and also DB interaction.
r831 try:
Martin Bornhold
svn-support: Add subscriber to execute the svn.proxy.reload_cmd on config changes. #4271
r1011 generate_mod_dav_svn_config(event.request.registry)
Martin Bornhold
svn-support: Move try/catch block up to subscriber and also DB interaction.
r831 except Exception:
log.exception(
'Exception while generating subversion mod_dav_svn configuration.')
Martin Bornhold
svn-support: Add subscriber to execute the svn.proxy.reload_cmd on config changes. #4271
r1011
class Subscriber(object):
def __call__(self, event):
self.run(event)
def run(self, event):
raise NotImplementedError('Subclass has to implement this.')
class AsyncSubscriber(Subscriber):
def __init__(self, *args, **kwargs):
self._init_args = args
self._init_kwargs = kwargs
def __call__(self, event):
kwargs = {'event': event}
kwargs.update(self._init_kwargs)
self.thread = Thread(
target=self.run, args=self._init_args, kwargs=kwargs)
self.thread.start()
class AsyncSubprocessSubscriber(AsyncSubscriber):
def run(self, event, cmd, timeout=None):
log.debug('Executing command %s.', cmd)
try:
output = subprocess32.check_output(
cmd, timeout=timeout, stderr=subprocess32.STDOUT)
log.debug('Command finished %s', cmd)
if output:
log.debug('Command output: %s', output)
except subprocess32.TimeoutExpired as e:
log.exception('Timeout while executing command.')
if e.output:
log.error('Command output: %s', e.output)
except subprocess32.CalledProcessError as e:
log.exception('Error while executing command.')
if e.output:
log.error('Command output: %s', e.output)
except:
log.exception(
'Exception while executing command %s.', cmd)
# class ReloadApacheSubscriber(object):
# """
# Subscriber to pyramids event system. It executes the Apache reload command
# if set in ini-file. The command is executed asynchronously in a separate
# task. This is done to prevent a delay of the function which triggered the
# event in case of a longer running command. If a timeout is passed to the
# constructor the command will be terminated after expiration.
# """
# def __init__(self, settings, timeout=None):
# self.thread = None
# cmd = self.get_command_from_settings(settings)
# if cmd:
# kwargs = {
# 'cmd': cmd,
# 'timeout': timeout,
# }
# self.thread = Thread(target=self.run, kwargs=kwargs)
# def __call__(self, event):
# if self.thread is not None:
# self.thread.start()
# def get_command_from_settings(self, settings):
# cmd = settings[config_keys.reload_command]
# return cmd.split(' ') if cmd else cmd
# def run(self, cmd, timeout=None):
# log.debug('Executing svn proxy reload command %s.', cmd)
# try:
# output = subprocess32.check_output(
# cmd, timeout=timeout, stderr=subprocess32.STDOUT)
# log.debug('Svn proxy reload command finished.')
# if output:
# log.debug('Command output: %s', output)
# except subprocess32.TimeoutExpired as e:
# log.exception('Timeout while executing svn proxy reload command.')
# if e.output:
# log.error('Command output: %s', e.output)
# except subprocess32.CalledProcessError as e:
# log.exception('Error while executing svn proxy reload command.')
# if e.output:
# log.error('Command output: %s', e.output)
# except:
# log.exception(
# 'Exception while executing svn proxy reload command %s.', cmd)