def piechart(self,rc): user_count = {} for (user_name,req_id) in getDistinct(Log,'user_name','req_id'): if user_name == None: continue if not user_count.has_key(user_name): user_count[user_name] = 0 user_count[user_name] += 1 kw = {} kw['data'] = [('user','number of requests')] kw['title']='Log entries by user' for(k,v) in sorted(user_count.items(),key=itemgetter(1),reverse=True): kw['data'].append((k,v)) rc.ctx['by_user'] = pieChart(rc,'by_user',**kw) view_count = {} for (vc,vn,ri) in getDistinct(Log,'view_class','view_name','req_id'): if vc == None or vn == None or ri == None: continue key = "%s:%s"%(vc,vn) if not view_count.has_key(key): view_count[key] = 0 view_count[key] += 1 kw = {} kw["data"] = [('view_name','request count')] kw['title'] = 'Log entries by view_name' for (k,v) in sorted(view_count.items(),key=itemgetter(1),reverse=True): kw['data'].append((k,v)) rc.ctx['by_view'] = pieChart(rc,'by_view',**kw) return self.render(rc)
def pieCount(rc,div_id,title,cols,modelClass,**kw): p = {} p.update(kw) p["title"] = title labels = kw.pop("labels",("x","y",)) p["data"] = [(labels[0],labels[1])] q = modelClass.objects.values(*cols) q = q.annotate(count=Count('id')) q = q.order_by('count') for counts in q: name = "" val = counts.pop("count") for col in cols[:-1]: name += "%s:"%counts[col] for col in cols[-1:]: name += "%s"%counts[col] p["data"].append((name,val)) return pieChart(rc,div_id,**p)