django-orchestra-test/orchestra/apps/lists/backends.py

52 lines
1.7 KiB
Python
Raw Normal View History

2014-07-25 15:17:50 +00:00
import textwrap
2014-07-11 14:48:46 +00:00
from django.utils import timezone
2014-05-08 16:59:35 +00:00
2014-07-09 16:17:43 +00:00
from orchestra.apps.orchestration import ServiceController
from orchestra.apps.resources import ServiceMonitor
2014-05-08 16:59:35 +00:00
2014-07-11 14:48:46 +00:00
from . import settings
2014-05-08 16:59:35 +00:00
2014-07-09 16:17:43 +00:00
class MailmanBackend(ServiceController):
2014-05-08 16:59:35 +00:00
verbose_name = "Mailman"
model = 'lists.List'
2014-07-09 16:17:43 +00:00
class MailmanTraffic(ServiceMonitor):
model = 'lists.List'
resource = ServiceMonitor.TRAFFIC
2014-07-25 15:17:50 +00:00
def prepare(self):
current_date = timezone.localtime(self.current_date)
current_date = current_date.strftime("%b %d %H:%M:%S")
self.append(textwrap.dedent("""
function monitor () {
OBJECT_ID=$1
LAST_DATE=$2
LIST_NAME="$3"
MAILMAN_LOG="$4"
SUBSCRIBERS=$(list_members ${LIST_NAME} | wc -l)
SIZE=$(grep ' post to ${LIST_NAME} ' "${MAILMAN_LOG}" \\
| awk '"$LAST_DATE"<=$0 && $0<="%s"' \\
| sed 's/.*size=\([0-9]*\).*/\\1/' \\
| tr '\\n' '+' \\
2014-07-25 15:17:50 +00:00
| xargs -i echo {} )
echo ${OBJECT_ID} $(( ${SIZE}*${SUBSCRIBERS} ))
}""" % current_date))
2014-07-11 14:48:46 +00:00
def monitor(self, mail_list):
context = self.get_context(mail_list)
2014-07-09 16:17:43 +00:00
self.append(
2014-07-25 15:17:50 +00:00
'monitor %(object_id)i %(last_date)s "%(list_name)s" "%(log_file)s"' % context)
2014-07-11 14:48:46 +00:00
def get_context(self, mail_list):
2014-07-14 14:56:48 +00:00
last_date = timezone.localtime(self.get_last_date(mail_list.pk))
2014-07-11 14:48:46 +00:00
return {
'mailman_log': settings.LISTS_MAILMAN_POST_LOG_PATH,
'list_name': mail_list.name,
'object_id': mail_list.pk,
2014-07-14 14:56:48 +00:00
'last_date': last_date.strftime("%b %d %H:%M:%S"),
2014-07-11 14:48:46 +00:00
}