Skip to content
This repository has been archived by the owner on Apr 23, 2018. It is now read-only.

Commit

Permalink
Start working with async queries
Browse files Browse the repository at this point in the history
  • Loading branch information
paradoxxxzero committed May 24, 2013
1 parent 0863c26 commit e8ec3da
Show file tree
Hide file tree
Showing 11 changed files with 270 additions and 47 deletions.
22 changes: 1 addition & 21 deletions pystil/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,29 +87,9 @@ def get(self, offset, criterion, value):
if criterion not in available_criteria:
raise HTTPError(404)

if criterion == 'date':
try:
value = datetime.strptime(
value.replace('+', ' '), '%Y-%m-%d %H:%M:%S')
except ValueError:
try:
value = datetime.strptime('%Y-%m-%d')
except ValueError:
value = datetime.now()
filter_ = func.date_trunc('DAY', Visit.date) == value.date()
elif criterion in (
'referrer', 'asn', 'browser_name', 'site',
'browser_version', 'browser_name_version', 'query'):
filter_ = getattr(Visit, criterion).ilike('%%%s%%' % value)
else:
filter_ = func.lower(getattr(Visit, criterion)) == value.lower()
self.render(
'criterion.html',
visits=(
self.db
.query(Visit)
.filter(filter_)
.order_by(desc(Visit.date)))[offset:offset + 20],
visits=[],
criterion=criterion, value=value,
available_criteria=available_criteria)

Expand Down
45 changes: 45 additions & 0 deletions pystil/static/coffee/criterion.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
commands = (
INFO: (m) ->
console.log(m)
VISIT: (m) ->
$line = $ m
$line.addClass 'recent'
$('table.last tbody').append($line)
setTimeout (->
$line.removeClass 'recent'
), 500

$('header h1 a').addClass 'pulse'
setTimeout (->
$('header h1 a').removeClass 'pulse'
), 75
)

$ ->
if not $('.criterion').size() or not _query_criterion or not _query_value
return

criterion = _query_criterion
value = _query_value

host = location.host
if host.indexOf(':')
host = host.split(':')[0]
window.query_ws = query_ws = new WebSocket("ws://#{host}:#{window._pystil_port}/query")

query_ws.onopen = ->
console.log('Websocket opened', arguments)
query_ws.send("criterion|#{criterion}|#{value}")

query_ws.onerror = ->
console.log('Websocket errored', arguments)

query_ws.onmessage = (evt) ->
console.log(evt.data)
# message = evt.data
# pipe = message.indexOf('|')
# if pipe > -1
# cmd = message.substr(0, pipe)
# data = message.substr(pipe + 1)
# commands[cmd] data

12 changes: 6 additions & 6 deletions pystil/static/coffee/websocket.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,15 @@ $ ->
host = location.host
if host.indexOf(':')
host = host.split(':')[0]
window.ws = ws = new WebSocket("ws://#{host}:#{window._pystil_port}/ws")
window.last_visit_ws = last_visit_ws = new WebSocket("ws://#{host}:#{window._pystil_port}/last_visits")

ws.onopen = ->
console.log('Websocket opened', arguments)
last_visit_ws.onopen = ->
console.log('Last visits websocket opened', arguments)

ws.onerror = ->
console.log('Websocket errored', arguments)
last_visit_ws.onerror = ->
console.log('Last visits websocket errored', arguments)

ws.onmessage = (evt) ->
last_visit_ws.onmessage = (evt) ->
message = evt.data
pipe = message.indexOf('|')
if pipe > -1
Expand Down
54 changes: 54 additions & 0 deletions pystil/static/js/criterion.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions pystil/static/js/criterion.map
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"version": 3,
"file": "criterion.js",
"sourceRoot": "..",
"sources": [
"coffee/criterion.coffee"
],
"names": [],
"mappings": ";AAAA;CAAA,KAAA,EAAA;;CAAA,CAAA,CACI,KADJ;CACI,CAAM,CAAA,CAAN,KAAO;CACK,EAAR,IAAO,MAAP;CADJ,IAAM;CAAN,CAEO,CAAA,CAAP,CAAA,IAAQ;CACJ,IAAA,KAAA;;CAAA,EAAQ,EAAR,CAAA;CAAA,IACK,CAAL,EAAA;CADA,IAEA,CAAA,YAAA;CAFA,EAGY,GAAZ,GAAY,CAAZ;CACU,IAAD,GAAL,GAAA,IAAA;CADO,CAER,CAFH,IAAY;CAHZ,KAOA,CAAA,CAAA,KAAA;CACW,EAAC,MAAA,CAAZ,GAAA;CACI,MAAA,IAAA,EAAA,EAAA;CADO,CAER,KAFS;CAXhB,IAEO;CAHX,GAAA;;CAAA,CAiBA,CAAE,MAAA;CACE,OAAA,wBAAA;;AAAO,CAAP,GAAA,QAAO,IAAJ;CACC,WAAA;MADJ;CAAA,EAGY,CAAZ,KAAA,OAHA;CAAA,EAIQ,CAAR,CAAA,OAJA;CAAA,EAMO,CAAP,IAAe;CACf,EAAG,CAAH,GAAG;CACC,EAAO,CAAP,CAAO,CAAP;MARJ;CAAA,EASkB,CAAlB,EAAM,CAAsC,CAA5C,CAAiC,GAAW;CAT5C,EAWkB,CAAlB,EAAA,EAAQ,CAAU;CACd,CAAgC,CAAhC,GAAA,CAAO,EAAP,SAAA;CACS,EAAiB,CAA1B,CAAA,GAAQ,CAAO,GAAA,CAAf;CAbJ,IAWkB;CAXlB,EAemB,CAAnB,GAAA,CAAQ,CAAW;CACP,CAAyB,CAAjC,IAAO,EAAP,IAAA,MAAA;CAhBJ,IAemB;CAGV,EAAY,KAAb,CAAR,EAAA;CACY,EAAR,CAAA,GAAO,MAAP;CApBN,IAmBuB;CAnBzB,EAAE;CAjBF"
}
14 changes: 7 additions & 7 deletions pystil/static/js/websocket.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion pystil/static/js/websocket.map
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@
"coffee/websocket.coffee"
],
"names": [],
"mappings": ";AAAA;CAAA,KAAA,EAAA;;CAAA,CAAA,CACI,KADJ;CACI,CAAM,CAAA,CAAN,KAAO;CACK,EAAR,IAAO,MAAP;CADJ,IAAM;CAAN,CAEO,CAAA,CAAP,CAAA,IAAQ;CACJ,SAAA,0BAAA;;CAAA,GAAG,EAAH,MAAG;CACC,EAAO,CAAP,GAAO,CAAP;CAAA,CACmB,CAAZ,CAAP,EAAO,EAAP;CADA,EAEO,CAAP,EAAO,EAAP;CAFA,EAGQ,CAAA,CAAR,GAAA;CAHA,EAKc,CAAA,IAAd,GAAA,CAAc;AAC0C,CAAxD,EAAuD,CAApD,CAAe,EAAS,CAA3B,GAAG;CACC,IAAK,GAAL,EAAA;CAAA,IACK,GAAL,EAAA;CADA,IAEA,EAAA,GAAA,QAAA;CAFA,EAGY,MAAA,CAAZ;CACU,IAAD,GAAL,GAAA,QAAA;CADO,CAER,CAFH,QAAY;UAXpB;QAAA;CAAA,KAeA,CAAA,CAAA,KAAA;CACW,EAAC,MAAA,CAAZ,GAAA;CACI,MAAA,IAAA,EAAA,EAAA;CADO,CAER,KAFS;CAnBhB,IAEO;CAFP,CAsBM,CAAA,CAAN,KAAO;CACH,EAAkC,CAA/B,IAAH,GAAA,EAAA,mBAAG;CAvBP,IAsBM;CAvBV,GAAA;;CAAA,CA2BA,CAAE,MAAA;CACE,OAAA;;CAAA,EAAO,CAAP,IAAe;CACf,EAAG,CAAH,GAAG;CACC,EAAO,CAAP,CAAO,CAAP;MAFJ;CAAA,CAGA,CAAY,CAAZ,CAAqB,CAAf,CAA0B,EAAX,GAAW;CAHhC,CAKE,CAAU,CAAZ,EAAA,GAAY;CACA,CAAwB,CAAhC,IAAO,EAAP,IAAA,KAAA;CANJ,IAKY;CALZ,CAQE,CAAW,CAAb,GAAA,EAAa;CACD,CAAyB,CAAjC,IAAO,EAAP,IAAA,MAAA;CATJ,IAQa;CAGV,CAAD,CAAa,MAAf,EAAA;CACI,SAAA,cAAA;;CAAA,EAAU,CAAV,EAAA,CAAA;CAAA,EACO,CAAP,EAAA,CAAc;AACH,CAAX,EAAU,CAAP,EAAH;CACI,CAAwB,CAAxB,CAAM,EAAA,CAAO,CAAb;CAAA,EACO,CAAP,EAAO,CAAO,CAAd;CACS,EAAA,CAAT,IAAS,OAAT;QANO;CAZjB,IAYiB;CAZnB,EAAE;CA3BF"
"mappings": ";AAAA;CAAA,KAAA,EAAA;;CAAA,CAAA,CACI,KADJ;CACI,CAAM,CAAA,CAAN,KAAO;CACK,EAAR,IAAO,MAAP;CADJ,IAAM;CAAN,CAEO,CAAA,CAAP,CAAA,IAAQ;CACJ,SAAA,0BAAA;;CAAA,GAAG,EAAH,MAAG;CACC,EAAO,CAAP,GAAO,CAAP;CAAA,CACmB,CAAZ,CAAP,EAAO,EAAP;CADA,EAEO,CAAP,EAAO,EAAP;CAFA,EAGQ,CAAA,CAAR,GAAA;CAHA,EAKc,CAAA,IAAd,GAAA,CAAc;AAC0C,CAAxD,EAAuD,CAApD,CAAe,EAAS,CAA3B,GAAG;CACC,IAAK,GAAL,EAAA;CAAA,IACK,GAAL,EAAA;CADA,IAEA,EAAA,GAAA,QAAA;CAFA,EAGY,MAAA,CAAZ;CACU,IAAD,GAAL,GAAA,QAAA;CADO,CAER,CAFH,QAAY;UAXpB;QAAA;CAAA,KAeA,CAAA,CAAA,KAAA;CACW,EAAC,MAAA,CAAZ,GAAA;CACI,MAAA,IAAA,EAAA,EAAA;CADO,CAER,KAFS;CAnBhB,IAEO;CAFP,CAsBM,CAAA,CAAN,KAAO;CACH,EAAkC,CAA/B,IAAH,GAAA,EAAA,mBAAG;CAvBP,IAsBM;CAvBV,GAAA;;CAAA,CA2BA,CAAE,MAAA;CACE,OAAA,WAAA;;CAAA,EAAO,CAAP,IAAe;CACf,EAAG,CAAH,GAAG;CACC,EAAO,CAAP,CAAO,CAAP;MAFJ;CAAA,EAGuB,CAAvB,EAAM,CAAgD,EAAX,GAAW,CAAtD,CAA2C;CAH3C,EAKuB,CAAvB,EAAA,GAAuB,IAAV;CACD,CAAoC,CAA5C,IAAO,EAAP,IAAA,iBAAA;CANJ,IAKuB;CALvB,EAQwB,CAAxB,GAAA,EAAwB,IAAX;CACD,CAAqC,CAA7C,IAAO,EAAP,IAAA,kBAAA;CATJ,IAQwB;CAGV,EAAY,MAA1B,EAAA,EAAa;CACT,SAAA,cAAA;;CAAA,EAAU,CAAV,EAAA,CAAA;CAAA,EACO,CAAP,EAAA,CAAc;AACH,CAAX,EAAU,CAAP,EAAH;CACI,CAAwB,CAAxB,CAAM,EAAA,CAAO,CAAb;CAAA,EACO,CAAP,EAAO,CAAO,CAAd;CACS,EAAA,CAAT,IAAS,OAAT;QANkB;CAZ5B,IAY4B;CAZ9B,EAAE;CA3BF"
}
3 changes: 3 additions & 0 deletions pystil/templates/_layout.html
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@
<script src="{{ static_url('js/main.js') }}"></script>
<script src="{{ static_url('js/charts.js') }}"></script>
<script src="{{ static_url('js/websocket.js') }}"></script>
<script src="{{ static_url('js/criterion.js') }}"></script>
{% block endscript %}
{% end %}
{% end %}

{% block style %}
Expand Down
7 changes: 7 additions & 0 deletions pystil/templates/criterion.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
{% extends "_layout.html" %}

{% block endscript %}
<script>
window._query_criterion = "{{ criterion }}";
window._query_value = "{{ value }}";
</script>
{% end %}

{% block article %}
{% from pystil.i18n import criteria %}
<article class="criterion">
Expand Down
4 changes: 3 additions & 1 deletion pystil/templates/site/last.html
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
{% from pystil.utils import visit_to_table_line %}
<section id="visits" class="tab">
<figure>
<figcaption>Real time last visits</figcaption>
{% if site %}
<figcaption>Real time last visits</figcaption>
{% end %}
<table class="last"{% if site %} data-site="{{ site }}"{% end %}>
<thead>
<tr>
Expand Down
Loading

0 comments on commit e8ec3da

Please sign in to comment.