Skip to content

Commit 256d461

Browse files
committed
add Dockefile and add data agglomerate for dynamic graph (in front).
rectify bug when player does'nt play same hero in all rounds
1 parent eeaf71f commit 256d461

File tree

3 files changed

+64
-5
lines changed

3 files changed

+64
-5
lines changed

deploy/Dockerfile

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
FROM debian:bullseye
2+
3+
RUN apt-get update -y \
4+
&& apt-get upgrade -y \
5+
&& apt-get -y install build-essential \
6+
zlib1g-dev \
7+
libncurses5-dev \
8+
libgdbm-dev \
9+
libnss3-dev \
10+
libssl-dev \
11+
libreadline-dev \
12+
libffi-dev \
13+
libsqlite3-dev \
14+
libbz2-dev \
15+
wget \
16+
&& export DEBIAN_FRONTEND=noninteractive \
17+
&& apt-get purge -y imagemagick imagemagick-6-common
18+
19+
RUN cd /usr/src \
20+
&& wget https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz \
21+
&& tar -xzf Python-3.11.0.tgz \
22+
&& cd Python-3.11.0 \
23+
&& ./configure --enable-optimizations \
24+
&& make altinstall
25+
26+
RUN update-alternatives --install /usr/bin/python python /usr/local/bin/python3.11 1

src/log_analyser/log_analyser.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@ def run(self):
3030
if type in self.actions:
3131
self.actions[type](line_split)
3232

33-
# with open("../logs_process/{}.json".format(self.name.split(".")[0]), "w") as file:
34-
# file.write(self.map.export_json())
33+
self.map.aggregate_stats()
3534

3635

3736
def name2datetime(self):
@@ -43,6 +42,7 @@ def name2datetime(self):
4342

4443
def process_map_start(self, data):
4544

45+
print("New map : {}".format(data[3]))
4646
self.map = Map.from_json({"rounds": [],
4747
"date": self.date,
4848
"map_name": data[3],
@@ -52,7 +52,8 @@ def process_map_start(self, data):
5252
"team1_score": 0,
5353
"team2_score": 0,
5454
"team_id": self.team_id,
55-
"events": []
55+
"events": [],
56+
"stats_graph": {},
5657
})
5758

5859
self.actions = {"match_start": self.process_map_start,

src/log_analyser/objects/map.py

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ def __init__(self, **kwargs):
1818
"team2_score": int,
1919
"team_id": str,
2020
"events": list,
21+
"stats_graph": dict,
2122
}
2223

2324
super().__init__(data_schema, **kwargs)
@@ -102,7 +103,9 @@ def add_player_stat(self, data):
102103
"offensive_assists": data[19], "ultimated_earn": data[20], "ultimates_used": data[21], "solo_kills": data[24],
103104
"critical_hits_accuracy": data[29], "weapon_accuracy": data[38], "hero_time_played": data[39]}
104105

105-
if player_data["hero_time_played"] != "0" and data[6] in self.rounds[self.actual_round].teams[data[4]].players[data[5]].characters:
106+
if player_data["hero_time_played"] != "0":
107+
if not data[6] in self.rounds[self.actual_round].teams[data[4]].players[data[5]].characters:
108+
self.add_character({"time": data[2], "team_name": data[4], "player_name": data[5], "character_name": data[6]})
106109
self.rounds[self.actual_round].teams[data[4]].players[data[5]].characters[data[6]].add_character_stats(player_data)
107110

108111
def add_hero_swap(self, data):
@@ -111,6 +114,8 @@ def add_hero_swap(self, data):
111114
if data["character_swap"] in self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].characters:
112115
self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].characters[data["character_swap"]].add_played_time({"end": data["time"]})
113116

117+
self.events.append({"type": "hero_swap", "timestamp": data["time"], "player": data["player_name"],
118+
"description": "{} swap on {}".format(data["player_name"], data["character_swap"])})
114119

115120
def create_if_player_and_caracter_not_exist(self, team, player_name, character_name):
116121

@@ -189,4 +194,31 @@ def find_team_for_player(self, player_name):
189194
if player_name in self.rounds[self.actual_round].teams[team].players:
190195
return team
191196

192-
return None
197+
return None
198+
199+
def aggregate_stats(self):
200+
players_data = {}
201+
202+
for index, round_data in enumerate(self.rounds):
203+
print("### Round {} ###".format(index))
204+
for _, team in round_data.teams.items():
205+
for _, player in team.players.items():
206+
207+
aggregated_stats = {}
208+
209+
for character in player.characters.values():
210+
if character.stats:
211+
for key, value in character.stats.items():
212+
try:
213+
numeric_value = float(value)
214+
aggregated_stats[key] = aggregated_stats.get(key, 0) + numeric_value
215+
except ValueError:
216+
print("ValueError: ", value, player.name, character.name, key)
217+
aggregated_stats[key] = value
218+
219+
if any(isinstance(value, (int, float)) and value == value for value in aggregated_stats.values()):
220+
player_name = player.name
221+
players_data[player_name] = players_data.get(player_name, [])
222+
players_data[player_name].append({"round": index, "stats": aggregated_stats})
223+
224+
self.stats_graph = players_data

0 commit comments

Comments
 (0)