summaryrefslogtreecommitdiff
path: root/meetingtools/apps/stats/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'meetingtools/apps/stats/models.py')
-rw-r--r--meetingtools/apps/stats/models.py66
1 files changed, 66 insertions, 0 deletions
diff --git a/meetingtools/apps/stats/models.py b/meetingtools/apps/stats/models.py
new file mode 100644
index 0000000..495bd65
--- /dev/null
+++ b/meetingtools/apps/stats/models.py
@@ -0,0 +1,66 @@
+import logging
+from django.contrib.auth.models import User
+from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
+from iso8601 import iso8601
+import tagging
+from tagging.models import Tag
+from meetingtools.apps.sco.models import ACObject, get_sco
+
+__author__ = 'leifj'
+
+from django.db import models
+from django.db.models import fields, ForeignKey, DateTimeField, IntegerField
+import lxml.etree as etree
+
+class UserMeetingTransaction(models.Model):
+ sco = ForeignKey(ACObject)
+ user = ForeignKey(User)
+ txid = IntegerField()
+ date_created = DateTimeField()
+ date_closed = DateTimeField()
+
+ def seconds(self):
+ delta = self.date_closed - self.date_created
+ return delta.total_seconds()
+
+ def __unicode__(self):
+ return "(%d) %d seconds in %s" % (self.txid,self.seconds(),self.sco)
+
+ @staticmethod
+ def create(acc,row):
+ txid = int(row.get('transaction-id'))
+ sco_id = int(row.get('sco-id'))
+
+ status = row.findtext("status")
+ if not status or status != "completed":
+ logging.debug("Ignoring transaction %s" % etree.tostring(row))
+ return
+
+ txo = None
+ try:
+ txo = UserMeetingTransaction.objects.get(sco__acc=acc,txid=txid)
+ except MultipleObjectsReturned,ex:
+ logging.error(ex)
+ except ObjectDoesNotExist:
+ login = row.findtext("login")
+ if not login:
+ raise ValueError("No user for transaction %d" % txid)
+ user,created = User.objects.get_or_create(username=login)
+ date_created=iso8601.parse_date(row.findtext("date-created"))
+ #date_created = date_created.replace(tzinfo=None)
+ date_closed=iso8601.parse_date(row.findtext("date-closed"))
+ #date_close = date_closed.replace(tzinfo=None)
+ txo = UserMeetingTransaction.objects.create(sco=get_sco(acc,sco_id),
+ txid=txid,
+ user=user,
+ date_created=date_created,
+ date_closed=date_closed)
+ tags = []
+ for group in txo.user.groups.all():
+ tags.append("group:%s" % group.name)
+
+ (local,domain) = txo.user.username.split("@")
+ tags.append("domain:%s" % domain)
+ Tag.objects.update_tags(txo, ' '.join(tags))
+
+tagging.register(UserMeetingTransaction) \ No newline at end of file