Skip to content

Commit

Permalink
과거 로그를 일정량 가져오는 downdate 도입
Browse files Browse the repository at this point in the history
  • Loading branch information
sim0629 committed Apr 29, 2012
1 parent 106ff00 commit 9cb62fe
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 23 deletions.
3 changes: 2 additions & 1 deletion public_html/channel.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,10 @@
<link rel="stylesheet" href="/css/sirc.css" />
</head>
<body>
<a id="dummy" name=""></a>
<div id="wrapper" data-role="page">
<div data-role="header" data-position="fixed" data-theme="d">
<a id="update" data-role="button" data-icon="refresh" data-iconpos="notext">update</a>
<a id="update" data-role="button" data-icon="forward" data-iconpos="notext">update</a>
<h1 id="channel">How to use SIRC</h1>
<a id="setting" data-role="button" data-icon="gear" data-iconpos="notext">setting</a>
<div id="menu" style="display:none;">
Expand Down
63 changes: 47 additions & 16 deletions public_html/js/sirc.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,30 +4,42 @@

var channel = '';
var last_update = '';
var last_downdate = '';

// Utility

var add_process = function(xml) {
var add_process = function(xml, flag) {
$('log', xml).each(function(i) {
var flag = $(this).find('flag').text();
var datetime = $(this).find('datetime').text();
var source = $(this).find('source').text();
var message = $(this).find('message').text();
append_log(flag, datetime, source, message);
});
scroll(SCROLL_END);
$('ul#log').listview('refresh');
if(flag != 'downdate')
scroll(SCROLL_END, 1000);
};

var append_log = function(flag, datetime, source, message) {
$('<li><div class="datetime">' + datetime_format(datetime) + '</div><div class="source">&lt;<span class="nick">' + html_encode(source) + '</span>&gt;</div><div class="message">' + html_encode(message) + '</div></li>').appendTo($('ul#log')).attr('flag', flag);
if(flag != 'send') last_update = datetime;
var element = $('<li><div class="datetime">' + datetime_format(datetime) + '</div><div class="source">&lt;<span class="nick">' + html_encode(source) + '</span>&gt;</div><div class="message">' + html_encode(message) + '</div></li>');
if(flag == 'downdate') {
element.prependTo($('ul#log'));
last_downdate = datetime;
}else {
element.appendTo($('ul#log')).attr('flag', flag);
if(flag != 'send') last_update = datetime;
}
};

var datetime_format = function(datetime) {
return datetime.substr(0, 19).replace(' ', '<br />');
};

var datetime_now = function() {
var d = new Date();
return d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate() + ' ' + d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds();
};

var html_encode = function(s) {
var e = document.createElement('div');
e.innerText = e.textContent = s;
Expand All @@ -37,38 +49,55 @@ var html_encode = function(s) {
};

var SCROLL_END = -1;
var scroll = function(pos) {
var scroll = function(pos, duration) {
if($('#scrolling').val() == 'off') return;
if(pos == SCROLL_END) pos = $('ul#log').height();
$('body,html,document').animate({scrollTop: pos}, 1000);
$('body,html,document').animate({scrollTop: pos}, duration);
};

// Ajax Calls

var sirc_update = function() {
$.mobile.showPageLoadingMsg();
if(channel == '') return false;
$.ajax({
type: 'GET',
url: '/sgm/update/',
data: 'channel=' + encodeURIComponent(channel) + '&last_update=' + encodeURIComponent(last_update),
dataType: 'xml',
success: function(xml) {
add_process(xml);
$('a#update').removeAttr('disabled');
add_process(xml, 'update');
$('ul#log > li[flag="send"]').remove();
},
error: function(xhr) {
alert('update: ' + xhr.responseText);
}
});
return false;
};

var sirc_downdate = function() {
if(channel == '') return false;
$.mobile.showPageLoadingMsg();
$.ajax({
type: 'GET',
url: '/sgm/downdate/',
data: 'channel=' + encodeURIComponent(channel) + '&last_downdate=' + encodeURIComponent(last_downdate),
dataType: 'xml',
success: function(xml) {
add_process(xml, 'downdate');
$('<li>more</li>').click(function() { $(this).remove(); return sirc_downdate(); }).prependTo($('ul#log'));
$.mobile.hidePageLoadingMsg();
},
error: function(xhr) {
alert(xhr.responseText);
$('a#update').removeAttr('disabled');
alert('downdate: ' + xhr.responseText);
$.mobile.hidePageLoadingMsg();
}
});
$('a#update').attr('disabled', 'disabled');
return false;
};

var sirc_send = function() {
if(channel == '') return false;
var message = $('input#message').val();
if(message == '') return false;
$.ajax({
Expand All @@ -77,12 +106,12 @@ var sirc_send = function() {
data: 'channel=' + encodeURIComponent(channel) + '&message=' + encodeURIComponent($('input#message').val()),
dataType: 'xml',
success: function(xml) {
add_process(xml);
add_process(xml, 'send');
$('input#message').val('');
$('form#send').removeAttr('disabled');
},
error: function(xhr) {
alert(xhr.responseText);
alert('send: ' + xhr.responseText);
$('form#send').removeAttr('disabled');
}
});
Expand All @@ -93,10 +122,12 @@ var sirc_send = function() {
var sirc_join = function() {
if(!window.location.hash) return;
channel = window.location.hash;
$('a#dummy').attr('name', channel.substr(1))
$('title').html(channel + ' - SIRC');
$('h1#channel').html(channel);
$('ul#log').empty();
last_update = '';
last_update = last_downdate = datetime_now();
sirc_downdate();
sirc_update();
return false;
};
Expand Down
1 change: 0 additions & 1 deletion public_html/result.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
<result>
{% for log in logs %}
<log>
<flag><![CDATA[{{ log.flag }}]]></flag>
<datetime><![CDATA[{{ log.datetime }}]]></datetime>
<source><![CDATA[{{ log.source }}]]></source>
<message><![CDATA[{{ log.message }}]]></message>
Expand Down
40 changes: 35 additions & 5 deletions wsgi.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# coding: utf-8

import datetime
import gevent
import gevent # not used yet
import os
import re
import sys
Expand Down Expand Up @@ -48,6 +48,8 @@ def application(environ, start_response):

if path.startswith('/update/'):
return update(environ, start_response, session, parameters)
elif path.startswith('/downdate/'):
return downdate(environ, start_response, session, parameters)
elif path.startswith('/send/'):
return send(environ, start_response, session, parameters)
else:
Expand Down Expand Up @@ -101,13 +103,36 @@ def update(environ, start_response, session, parameters):
context = {}
if 'channel' not in parameters:
return error(start_response, message = 'no channel')
last_update = datetime.datetime.now() - datetime.timedelta(1)
last_update = datetime.datetime.now()
if 'last_update' in parameters:
last_update = datetime.datetime.strptime(parameters['last_update'][0].decode('utf-8'), '%Y-%m-%d %H:%M:%S.%f')
last_update = parse_datetime(parameters['last_update'][0].decode('utf-8'))
channel = parameters['channel'][0].decode('utf-8').lower()
logs = db[channel].find({
'datetime': {"$gt": last_update},
}).sort('datetime')
}, sort = [
('datetime', pymongo.ASCENDING)
])
logs = list(logs)
for log in logs:
log['source'] = remove_invalid_utf8_char(log['source'])
log['message'] = remove_invalid_utf8_char(log['message'])
context['logs'] = logs
start_response('200 OK', [('Content-Type', 'text/xml; charset=utf-8')])
return [render('result.xml', context)]

def downdate(environ, start_response, session, parameters):
context = {}
if 'channel' not in parameters:
return error(start_response, message = 'no channel')
last_downdate = datetime.datetime.now()
if 'last_downdate' in parameters:
last_downdate = parse_datetime(parameters['last_downdate'][0].decode('utf-8'))
channel = parameters['channel'][0].decode('utf-8').lower()
logs = db[channel].find({
'datetime': {"$lt": last_downdate},
}, limit = config.N_LINES, sort = [
('datetime', pymongo.DESCENDING)
])
logs = list(logs)
for log in logs:
log['source'] = remove_invalid_utf8_char(log['source'])
Expand All @@ -133,7 +158,6 @@ def send(environ, start_response, session, parameters):
'datetime': {'$lt': datetime.datetime.now() - datetime.timedelta(1)}
})
context['logs'] = [{
'flag': 'send',
'source': config.BOT_NAME,
'message': '<%s> %s' % (remove_invalid_utf8_char(session['account']), remove_invalid_utf8_char(message)),
'datetime': datetime.datetime.now()
Expand Down Expand Up @@ -162,6 +186,12 @@ def create_session_id(): # TODO: 중복 체크
bag = string.ascii_uppercase + string.ascii_lowercase + string.digits
return ''.join(random.sample(bag * 24, 24))

def parse_datetime(s):
if '.' in s:
return datetime.datetime.strptime(s, '%Y-%m-%d %H:%M:%S.%f')
else:
return datetime.datetime.strptime(s, '%Y-%m-%d %H:%M:%S')

def request_request_token():
import oauth2
import httplib2
Expand Down

0 comments on commit 9cb62fe

Please sign in to comment.