Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Branch: master
165 lines (147 sloc) 4.375 kB
import logging
import re
import string
import time
from django.core.handlers.wsgi import WSGIRequest
from django.conf import settings
from utils.user_functions import extract_user_agent
from apps.statistics.rstats import RStats
class NullHandler(logging.Handler): #exists in python 3.1
def emit(self, record):
pass
def getlogger():
logger = logging.getLogger('newsblur')
return logger
def user(u, msg, request=None, warn_color=True):
if not u:
return debug(msg)
platform = '------'
time_elapsed = ""
if isinstance(u, WSGIRequest) or request:
if not request:
request = u
u = request.user
platform = extract_user_agent(request)
if hasattr(request, 'start_time'):
seconds = time.time() - request.start_time
color = '~FB'
if warn_color:
if seconds >= 1:
color = '~FR'
elif seconds > .2:
color = '~SB~FK'
time_elapsed = "[%s%.4ss~SB] " % (
color,
seconds,
)
is_premium = u.is_authenticated() and u.profile.is_premium
premium = '*' if is_premium else ''
username = cipher(unicode(u)) if settings.CIPHER_USERNAMES else unicode(u)
info(' ---> [~FB~SN%-6s~SB] %s[%s%s] %s' % (platform, time_elapsed, username, premium, msg))
page_load_paths = [
"/reader/feed/",
"/social/stories/",
"/reader/river_stories/",
"/social/river_stories/"
]
if request:
path = RStats.clean_path(request.path)
if path in page_load_paths:
RStats.add('page_load', duration=seconds)
def cipher(msg):
shift = len(msg)
in_alphabet = unicode(string.ascii_lowercase)
out_alphabet = in_alphabet[shift:] + in_alphabet[:shift]
translation_table = dict((ord(ic), oc) for ic, oc in zip(in_alphabet, out_alphabet))
return msg.translate(translation_table)
def debug(msg):
logger = getlogger()
logger.debug(colorize(msg))
def info(msg):
logger = getlogger()
logger.info(colorize(msg))
def error(msg):
logger = getlogger()
logger.error(msg)
def colorize(msg):
params = {
r'\-\-\->' : '~FB~SB--->~FW',
r'\*\*\*>' : '~FB~SB~BB--->~BT~FW',
r'\[' : '~SB~FB[~SN~FM',
r'AnonymousUser' : '~FBAnonymousUser',
r'\*(\s*)~FB~SB\]' : r'~SN~FR*\1~FB~SB]',
r'\]' : '~FB~SB]~FW~SN',
}
colors = {
'~SB' : Style.BRIGHT,
'~SN' : Style.NORMAL,
'~SK' : Style.BLINK,
'~SU' : Style.UNDERLINE,
'~ST' : Style.RESET_ALL,
'~FK': Fore.BLACK,
'~FR': Fore.RED,
'~FG': Fore.GREEN,
'~FY': Fore.YELLOW,
'~FB': Fore.BLUE,
'~FM': Fore.MAGENTA,
'~FC': Fore.CYAN,
'~FW': Fore.WHITE,
'~FT': Fore.RESET,
'~BK': Back.BLACK,
'~BR': Back.RED,
'~BG': Back.GREEN,
'~BY': Back.YELLOW,
'~BB': Back.BLUE,
'~BM': Back.MAGENTA,
'~BC': Back.CYAN,
'~BW': Back.WHITE,
'~BT': Back.RESET,
}
for k, v in params.items():
msg = re.sub(k, v, msg)
msg = msg + '~ST~FW~BT'
# msg = re.sub(r'(~[A-Z]{2})', r'%(\1)s', msg)
for k, v in colors.items():
msg = msg.replace(k, v)
return msg
'''
This module generates ANSI character codes to printing colors to terminals.
See: http://en.wikipedia.org/wiki/ANSI_escape_code
'''
COLOR_ESC = '\033['
class AnsiCodes(object):
def __init__(self, codes):
for name in dir(codes):
if not name.startswith('_'):
value = getattr(codes, name)
setattr(self, name, COLOR_ESC + str(value) + 'm')
class AnsiFore:
BLACK = 30
RED = 31
GREEN = 32
YELLOW = 33
BLUE = 34
MAGENTA = 35
CYAN = 36
WHITE = 37
RESET = 39
class AnsiBack:
BLACK = 40
RED = 41
GREEN = 42
YELLOW = 43
BLUE = 44
MAGENTA = 45
CYAN = 46
WHITE = 47
RESET = 49
class AnsiStyle:
BRIGHT = 1
DIM = 2
UNDERLINE = 4
BLINK = 5
NORMAL = 22
RESET_ALL = 0
Fore = AnsiCodes(AnsiFore)
Back = AnsiCodes(AnsiBack)
Style = AnsiCodes(AnsiStyle)
Jump to Line
Something went wrong with that request. Please try again.