summaryrefslogtreecommitdiff
path: root/meetingtools/apps/stats/tasks.py
blob: 9e2f4375e331f3deb47fd1b17111b1730f35206e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import logging
from celery.schedules import crontab
from celery.task import periodic_task, task
from meetingtools.apps.room.models import Room
from meetingtools.ac import ac_api_client
from meetingtools.apps.cluster.models import ACCluster
from datetime import datetime,timedelta
from meetingtools.apps.stats.models import UserMeetingTransaction

__author__ = 'leifj'


def import_acc_sessions(acc,since=0,room_last_visited=False):
    with ac_api_client(acc) as api:
        p = {'sort': 'asc','sort1': 'date-created','filter-type': 'meeting'}

        begin = None
        if since > 0:
            begin = datetime.now()-timedelta(seconds=since)
            begin = begin.replace(microsecond=0)

        if begin is not None:
            p['filter-gte-date-created'] = begin.isoformat()

        r = api.request('report-bulk-consolidated-transactions',p,True)
        nr = 0
        ne = 0
        for tx in r.et.findall(".//row"):
            try:
                tx = UserMeetingTransaction.create(acc,tx)
                if room_last_visited:
                    rooms = Room.objects.filter(sco=tx.sco)
                    if len(rooms) == 1:
                        room = rooms[0]
                        if room.lastvisited is None or room.lastvisited < tx.date_closed:
                            room.lastvisited = tx.date_created
                            room.save()
                nr += 1
            except Exception,ex:
                logging.error(ex)
                ne += 1
        logging.info("%s: Imported %d transactions with %d errors" % (acc,nr,ne))

@task
def import_sessions(since,room_last_visited=False):
    for acc in ACCluster.objects.all():
        import_acc_sessions(acc,since,room_last_visited)

@periodic_task(run_every=crontab(hour="*", minute="*/5", day_of_week="*"))
def _hourly_import():
    import_sessions(600,True)