Revision 09d8c48b poller/views.py

b/poller/views.py
19 19
from gevent import monkey
20 20
monkey.patch_all()
21 21
from gevent.pool import Pool
22
import gevent
22 23
import json
23 24

  
24 25
import uuid
......
31 32
#from django.views.decorators.csrf import csrf_exempt
32 33
from django.http import HttpResponseRedirect
33 34
from django.core.urlresolvers import reverse
34

  
35
from django.conf import settings
35 36

  
36 37
import beanstalkc
37 38

  
38 39
import logging
40
import os
39 41

  
40
FORMAT = '%(asctime)s %(levelname)s: %(message)s'
41
logging.basicConfig(format=FORMAT)
42
LOG_FILENAME = os.path.join(settings.LOG_FILE_LOCATION, 'poller.log')
43
formatter = logging.Formatter('%(asctime)s %(levelname)s: %(message)s')
42 44
logger = logging.getLogger(__name__)
43 45
logger.setLevel(logging.DEBUG)
44

  
46
handler = logging.FileHandler(LOG_FILENAME)
47
handler.setFormatter(formatter)
48
logger.addHandler(handler)
45 49

  
46 50
def create_message(message, user, time):
47 51
    data = {'id': str(uuid.uuid4()), 'body': message, 'user':user, 'time':time}
......
55 59

  
56 60
class Msgs(object):
57 61
    cache_size = 500
62
    
63
    _instance = None
64
    def __new__(cls, *args, **kwargs):
65
        if not cls._instance:
66
            cls._instance = super(Msgs, cls).__new__(cls, *args, **kwargs)
67
        return cls._instance
58 68

  
59 69
    def __init__(self):
60 70
        logger.info("initializing")
......
73 83
    def message_existing(self, request):
74 84
        if request.is_ajax():
75 85
            try:
76
                user = request.user.get_profile().peer.domain_name
86
                user = request.user.get_profile().peer.peer_tag
77 87
            except:
78 88
                user = None
79 89
                return False
......
94 104
        if mesg:
95 105
            message = mesg['message']
96 106
            user = mesg['username']
107
            logger.info("from %s" %user)
97 108
            now = datetime.datetime.now()
98 109
            msg = create_message(message, user, now.strftime("%Y-%m-%d %H:%M:%S"))
99 110
        try:
......
119 130
        if request.is_ajax():
120 131
            cursor = {}
121 132
            try:
122
                user = request.user.get_profile().peer.domain_name
133
                user = request.user.get_profile().peer.peer_tag
123 134
            except:
124 135
                user = None
125 136
                return False
......
145 156
                    self.user_cursor[user] = self.user_cache[user][-1]['id']
146 157
        return HttpResponseRedirect(reverse('group-routes'))
147 158

  
148
    def monitor_polls(self, polls=None):
159
    def monitor_polls(self):
149 160
        b = beanstalkc.Connection()
150 161
        b.watch(settings.POLLS_TUBE)
151 162
        while True:
152 163
            job = b.reserve()
153 164
            msg = json.loads(job.body)
154 165
            job.bury()
166
            logger.info("Got New message")
155 167
            self.message_new(msg)
156 168
            
157 169
    
158 170
    def start_polling(self):
159 171
        logger.info("Start Polling")
160
        p = Pool(10)
161
        while True:
162
            p.spawn(self.monitor_polls)
172
        gevent.spawn(self.monitor_polls)
173

  
163 174
            
164 175
msgs = Msgs()
165 176
main = msgs.main
166 177

  
167
message_new = msgs.message_new
168 178
message_updates = msgs.message_updates
169 179
message_existing = msgs.message_existing
170 180

  
181

  
171 182
poll = msgs.start_polling
172 183
poll()
173

  

Also available in: Unified diff