4 from datetime import datetime
5 import sqlalchemy as sa
6 import sqlalchemy.sql.functions as func
7 from sqlalchemy import distinct
8 from pyramid.paster import bootstrap
9 from xonstat.models import *
11 from render import Skin
14 # maximal number of query results (for testing, set to 0 to get all)
17 # we look for players who have activity within the past DELTA hours
26 bg = "background_archer-v1",
32 bgcolor = (0.04, 0.04, 0.04, 1.0),
33 overlay = "overlay_minimal",
37 gametype_pos = (25,30),
38 gametype_text = "%s :",
40 gametype_fontsize = 10,
42 elo_text = "Elo %.0f",
43 elo_color = (1.0, 1.0, 0.6),
45 nostats_pos = (80,30),
46 nostats_fontsize = 10,
48 nostats_text = "no stats!",
56 ptime_color = (0.8, 0.8, 0.9),
59 # parse cmdline parameters (for testing)
62 arg = sys.argv[1].lower()
65 elif arg == "minimal":
72 env = bootstrap('../../../development.ini')
74 req.matchdict = {'id':3}
76 print "Requesting player data from db ..."
77 cutoff_dt = datetime.utcnow() - timedelta(hours=DELTA)
78 start = datetime.now()
80 if locals().has_key('NUM_PLAYERS'):
81 players = DBSession.query(distinct(Player.player_id)).\
82 filter(Player.player_id == PlayerElo.player_id).\
83 filter(Player.player_id == PlayerGameStat.player_id).\
84 filter(PlayerGameStat.create_dt > cutoff_dt).\
85 filter(Player.nick != None).\
86 filter(Player.player_id > 2).\
87 filter(Player.active_ind == True).\
88 limit(NUM_PLAYERS).all()
90 players = DBSession.query(distinct(Player.player_id)).\
91 filter(Player.player_id == PlayerElo.player_id).\
92 filter(Player.player_id == PlayerGameStat.player_id).\
93 filter(PlayerGameStat.create_dt > cutoff_dt).\
94 filter(Player.nick != None).\
95 filter(Player.player_id > 2).\
96 filter(Player.active_ind == True).\
100 stop = datetime.now()
102 total_seconds = (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
103 print "Query took %.2f seconds" % (total_seconds)
105 print "Creating badges for %d players ..." % len(players)
106 start = datetime.now()
107 data_time, render_time = 0,0
108 for player_id in players:
109 req.matchdict['id'] = player_id
111 sstart = datetime.now()
112 skin.get_data(player_id)
113 sstop = datetime.now()
115 total_seconds = (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
116 data_time += total_seconds
118 sstart = datetime.now()
119 skin.render_image("output/%d.png" % player_id)
120 sstop = datetime.now()
122 total_seconds = (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
123 render_time += total_seconds
125 stop = datetime.now()
127 total_seconds = (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
128 print "Creating the badges took %.1f seconds (%.3f s per player)" % (total_seconds, total_seconds/float(len(players)))
129 print "Total time for redering images: %.3f s" % render_time
130 print "Total time for getting data: %.3f s" % data_time
133 print "No active players found!"