Example #1
0
  def stats(self):
    if not self._stats:
      stats = { }

      for stat in SystemStat.objects():
        stats[ stat.system_id ] = stat
        
      self._stats = stats

    return self._stats
Example #2
0
def show_edit(request, show_id):
  show  = Show.objects.with_id(show_id)

  if request.method == 'POST':
    data = request.POST
  else:
    data = None
  
  forms   = []
  context = {
    'show': show
  }

  show_form    = ShowForm(         prefix = 'show',      data = data, initial = initial_for_instance(ShowForm, show))
  venue_form   = ShowVenueForm(    prefix = 'venue',     data = data, initial = initial_for_instance(ShowVenueForm, show.venue))
  artist_forms = []
  
  for i, artist in enumerate(show.artists):
    artist_forms.append(ArtistInfoForm(prefix = 'artist-%d' % i, data = data, instance = artist))

  forms.extend([show_form, venue_form])
  forms.extend(artist_forms)

  if all(f.is_valid() for f in forms):
    raise Exception("Save is currently unimplemented")
    context['saved'] = True
  elif data:
    context['error'] = True

  artist_map = show.related_artists()
  
  stats = { }

  for stat in SystemStat.objects():
    stats[ stat.system_id ] = stat
  
  for a in artist_map.values():
    for m in a.media:
      plays_per_day = m.stats.stats_last_30_days().number_of_plays
      system_stat   = stats.get(m.system_id)
  
      if plays_per_day != None and system_stat:
        m.stats.score = ( plays_per_day - system_stat.plays_per_day)  / system_stat.stddev
  
  for artist_info in show.artists:
    if artist_info.artist_id:
      artist_info.full = artist_map[artist_info.artist_id]

  context.update({
    'show_form':    show_form,
    'venue_form':   venue_form,
    'artist_forms': artist_forms
  })

  return render_to_response('fancy_admin/show_edit.html', context)
Example #3
0
def summary(request):
  collections = {
    'shows':   Show.objects.count(),
    'artists': Artist.objects.count()
  }
  
  associations  = { }
  profiles      = [ ]
  media_summary = [ ]
  
  for doc in Show.objects.map_reduce(query.association_map, query.association_reduce):
    associations[doc.key] = doc.value

  for doc in Artist.objects.map_reduce(query.profile_map, query.profile_reduce):
    profiles.append({'system_id': doc.key, 'number': doc.value})

  profiles.sort(key = lambda x: x['number'], reverse = True)
  
  system_stats = { }
  
  stats_scope = {
    'start_date': datetime.now().replace(hour = 0, minute = 0, second = 0) - timedelta(days = 30),
    'end_date':   datetime.now().replace(hour = 0, minute = 0, second = 0)
  }
  
  for stat in SystemStat.objects():
    system_stats[ stat.system_id ] = {
      'mean':   stat.plays_per_day,
      'stddev': stat.stddev
    }

  for doc in Artist.objects.map_reduce(query.media_map, query.media_reduce):
    summary = {'media_type': doc.key, 'stats': doc.value}
    
    summary['stats'].update(system_stats.get(doc.key, {}))

    media_summary.append(summary)
  
  media_summary.sort(key = lambda x: x['stats']['number_of_plays'], reverse = True)

  context = {
    'collections':        collections,
    'artist_association': associations,
    'profiles':           profiles,
    'media_summary':      media_summary
  }

  return render_to_response('fancy_admin/summary.html', context)