Skip to content

Commit

Permalink
Add logging config and some logging.
Browse files Browse the repository at this point in the history
* includes admin emailing and sentry collecting.
  • Loading branch information
pmac committed Aug 24, 2012
1 parent 809a388 commit dc953cd
Show file tree
Hide file tree
Showing 6 changed files with 86 additions and 10 deletions.
21 changes: 11 additions & 10 deletions scrum/cron.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from __future__ import absolute_import

import logging
import sys
from datetime import datetime, timedelta

from django.conf import settings
Expand All @@ -14,7 +13,7 @@


CACHE_BUGS_FOR = timedelta(hours=getattr(settings, 'CACHE_BUGS_FOR', 4))
logger = logging.getLogger('scrum.cron')
log = logging.getLogger(__name__)


@register
Expand All @@ -25,6 +24,7 @@ def sync_bugmail():
counter = 0
bugids = get_bugmails()
for slug, ids in bugids.items():
log.debug('Got %d bugs for project %s', len(ids), slug)
counter += len(ids)
url = BugzillaURL(url=get_bz_url_for_bug_ids(ids))
proj = None
Expand All @@ -35,11 +35,12 @@ def sync_bugmail():
pass
if proj:
url.project = proj
url.get_bugs()
sys.stdout.write('.')
sys.stdout.flush()
try:
url.get_bugs()
except BZError:
continue
if counter:
print "\nSynced {0} bugs".format(counter)
log.info('Synced %d bug(s) from email', counter)


@register
Expand All @@ -56,19 +57,19 @@ def sync_backlogs():
# need to do this here instead of setting the DB column unique b/c
# it is possible for 2 projects to use the same search url.
if url.url in synced_urls:
log.debug('Found dupe url: %s', url.url)
if url.one_time:
url.delete()
continue
synced_urls.append(url.url)
try:
url.get_bugs()
except BZError:
logger.error('Problem fetching bugs from %s', url.url)
continue
if url.one_time:
log.debug('Deleted url: %s', url.url)
url.delete()
sys.stdout.write('.')
sys.stdout.flush()
log.debug('Synced url: %s', url.url)
counter += 1
if counter:
print "\nSynced {0} urls".format(counter)
log.info('Synced %d url(s)', counter)
2 changes: 2 additions & 0 deletions scrum/email.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from __future__ import absolute_import

import logging
import poplib
import re
from collections import defaultdict
Expand All @@ -15,6 +16,7 @@
'new',
'changed',
)
log = logging.getLogger(__name__)


def get_messages(delete=True):
Expand Down
5 changes: 5 additions & 0 deletions scrum/models.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from __future__ import absolute_import

import hashlib
import logging
import re
import zlib
from base64 import b64decode, b64encode
Expand Down Expand Up @@ -29,6 +30,9 @@
parse_whiteboard)


log = logging.getLogger(__name__)


class CompressedJSONField(JSONField):
"""
Django model field that stores JSON data compressed with zlib.
Expand Down Expand Up @@ -478,6 +482,7 @@ def get_bugs(self):
data = BZAPI.bug.get(**args)
data['date_received'] = datetime.utcnow()
except Exception:
log.error('Problem fetching bugs from %s', self.url, exc_info=True)
raise BZError("Couldn't retrieve bugs from Bugzilla")
if not self.one_time:
self.date_synced = datetime.utcnow()
Expand Down
5 changes: 5 additions & 0 deletions scrum/views.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import logging
from datetime import date

from django.conf import settings
from django.contrib import messages
from django.contrib.auth.decorators import permission_required
Expand All @@ -18,6 +20,9 @@
from scrum.utils import get_blocked_bugs


log = logging.getLogger(__name__)


class ProtectedCreateView(CreateView):
def dispatch(self, request, *args, **kwargs):
@permission_required('%s.add_%s' % (self.model._meta.app_label,
Expand Down
62 changes: 62 additions & 0 deletions settings/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,65 @@
from .local import *
except ImportError:
from .base import *

DEFAULT_LOG_LEVEL = 'DEBUG' if DEBUG else 'INFO'
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse',
},
},
'formatters': {
'verbose': {
'format': ('%(levelname)s %(asctime)s %(module)s %(process)d '
'%(thread)d %(message)s'),
},
'simple': {
'format': '%(levelname)s %(asctime)s %(module)s %(message)s',
},
},
'handlers': {
'null': {
'level': 'DEBUG',
'class': 'django.utils.log.NullHandler',
},
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'filters': ['require_debug_false'],
},
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'simple',
'stream': sys.stdout,
},
},
'loggers': {
'django': {
'handlers': ['null'],
'propagate': False,
'level': 'INFO',
},
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': False,
},
'': {
'handlers': ['console'],
'level': os.environ.get('SCRUM_LOG_LEVEL', DEFAULT_LOG_LEVEL),
'propagate': True,
},
}
}

if 'SENTRY_DSN' in locals():
LOGGING['handlers']['sentry'] = {
'level': 'ERROR',
'class': 'raven.handlers.logging.SentryHandler',
'dsn': SENTRY_DSN,
}
LOGGING['loggers']['']['handlers'].append('sentry')
1 change: 1 addition & 0 deletions settings/heroku.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
SENTRY_DSN = os.environ.get('SENTRY_DSN')
if SENTRY_DSN:
MORE_APPS.append('raven.contrib.django',)
SENTRY_AUTO_LOG_STACKS = True

INSTALLED_APPS += tuple(MORE_APPS)

Expand Down

0 comments on commit dc953cd

Please sign in to comment.