Skip to content

Commit ab49f17

Browse files
committed
add recurrence on export json (for object inherited of object) and add structure for Character
1 parent 9819cac commit ab49f17

File tree

8 files changed

+127
-80
lines changed

8 files changed

+127
-80
lines changed

deploy/docker-compose.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@ services:
66
ZOOKEEPER_CLIENT_PORT: 2181
77
ZOOKEEPER_TICK_TIME: 2000
88
ports:
9-
- 22181:2181
9+
- 22182:2181
1010

1111
kafka:
1212
image: confluentinc/cp-kafka:latest
1313
depends_on:
1414
- zookeeper
1515
ports:
16-
- 29092:29092
16+
- 29093:29092
1717
environment:
1818
KAFKA_BROKER_ID: 1
1919
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181

src/log_analyser/log_analyser.py

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,24 @@ def __init__(self, path_csv, name) -> None:
1515

1616
self.actions = {"match_start": self.process_match_start,
1717
"round_start": self.process_round_start,
18-
"hero_spawn": self.process_hero_spawn}
18+
"hero_spawn": self.process_hero_spawn,
19+
"hero_swap": self.process_hero_swap
20+
}
1921

2022
def run(self):
2123

2224
with open(self.path_csv, encoding='utf-8') as my_file:
23-
line = my_file.read()
24-
line_split = line.split(",")
25-
# print(line_split)
25+
file = my_file.read()
26+
lines = file.split("\n")
27+
for line in lines:
28+
line_split = line.split(",")
2629

27-
timestamp = line_split[0]
28-
type = line_split[1]
29-
30-
if type in self.actions:
31-
self.actions[type](line_split)
30+
if len(line_split) > 1:
31+
type = line_split[1]
32+
if type in self.actions:
33+
self.actions[type](line_split)
34+
35+
self.match.export_json()
3236

3337

3438
def name2datetime(self):
@@ -46,10 +50,10 @@ def process_kill(self):
4650
def process_ultimate_charged(self):
4751
pass
4852

49-
def process_round_start(self):
53+
def process_round_start(self, data):
5054

5155
self.match.add_round()
52-
56+
# self.match.export_json()
5357
def process_round_stop(self):
5458
pass
5559

@@ -62,11 +66,17 @@ def process_match_start(self, data):
6266
"team1_name": data[5],
6367
"team2_name": data[6]
6468
})
65-
69+
6670
def process_hero_spawn(self, data):
67-
pass
68-
69-
7071

71-
la = LogAnalyser('src/logs/Log-2023-12-22-21-12-32.txt', "Log-2023-12-22-21-12-32.txt")
72+
player_data = {"team_name": data[3], "player_name": data[4], "character_name": data[5]}
73+
self.match.add_player(player_data)
74+
75+
def process_hero_swap(self, data):
76+
77+
hero_data = {"team_name": data[3], "player_name": data[4], "character_name": data[6]}
78+
self.match.add_player(hero_data)
79+
80+
81+
la = LogAnalyser('../logs/Log-2023-12-22-21-12-32.txt', "Log-2023-12-22-21-12-32.txt")
7282
la.run()

src/log_analyser/objects/character.py

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,35 @@ class Character(Object):
55

66
def __init__(self, **kwargs):
77

8-
data_schema = {"name": str,
9-
"damage": int,
10-
"heal": int,
11-
"ultimate_use": int}
8+
data_schema = {"name": str}
129

1310
super().__init__(data_schema, **kwargs)
14-
15-
16-
# character = Character.from_json({"name": "ok", "age": 3})
17-
# character.__print__()
18-
# print(character.export_json())
11+
12+
self.stats = {}
13+
self.kills = []
14+
self.deads = []
15+
self.offensive_assists = []
16+
self.defensive_assists = []
17+
self.ultimate_charged = []
18+
self.ultimate_use = []
19+
20+
def add_kill(self, data):
21+
self.kills.append(data)
22+
23+
def add_dead(self, data):
24+
self.deads.append(data)
25+
26+
def add_offensive_assist(self, data):
27+
self.offensive_assists.append(data)
28+
29+
def add_defensive_assist(self, data):
30+
self.defensive_assists.append(data)
31+
32+
def add_ultimate_charged(self, data):
33+
self.ultimate_charged.append(data)
34+
def add_ultimate_start(self, data):
35+
self.ultimate_use.append(data)
36+
def add_ultimate_stop(self, data):
37+
self.ultimate_end[-1]["end"] = data["date"]
38+
def add_character_stats(self, data):
39+
self.stats = data

src/log_analyser/objects/match.py

Lines changed: 31 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,51 +3,49 @@
33
from objects.team import Team
44
from datetime import datetime
55

6+
67
class Match(Object):
7-
8+
89
def __init__(self, **kwargs):
9-
10-
data_schema = {"rounds": list,
10+
11+
data_schema = {"rounds": list,
1112
"date": datetime,
1213
"map_name": str,
1314
"map_type": str,
1415
"team1_name": str,
1516
"team2_name": str
1617
}
17-
18+
1819
super().__init__(data_schema, **kwargs)
19-
20+
2021
self.actual_round = -1
21-
22-
22+
2323
def add_round(self):
24-
25-
teams = []
26-
teams.append(Team.from_json({"name":self.team1_name, "players": {}}))
27-
teams.append(Team.from_json({"name":self.team2_name, "players": {}}))
24+
25+
teams = {}
26+
teams[self.team1_name] = Team.from_json({"name": self.team1_name, "players": {}})
27+
teams[self.team2_name] = Team.from_json({"name": self.team2_name, "players": {}})
2828
self.rounds.append(Round.from_json({"teams": teams}))
29-
29+
3030
self.actual_round += 1
31-
31+
3232
def add_player(self, data):
33-
34-
for name_team, team in self.rounds[self.actual_round].teams:
35-
36-
for player in team.players:
37-
38-
if player.name == data["name"]:
39-
return -1
40-
41-
self.rounds[self.actual_round].teams[data["team_number"]].add_player(data)
42-
43-
33+
34+
if data["player_name"] in self.rounds[self.actual_round].teams[data["team_name"]].players:
35+
print("player already exist")
36+
self.add_character(data)
37+
return -1
38+
else:
39+
self.rounds[self.actual_round].teams[data["team_name"]].add_player(
40+
{"name": data["player_name"], "characters": {}})
41+
self.add_character(data)
42+
return 0
43+
44+
4445
def add_character(self, data):
45-
46-
for team in self.rounds[self.actual_round].teams:
47-
for player in team.players:
48-
for character in player.characters:
49-
50-
if character.name == data["name_character"]:
51-
return -1
52-
53-
self.rounds[self.actual_round].teams[data["team_number"]].player["player_name"].add_character(data)
46+
47+
if data["character_name"] in self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].characters:
48+
print("character already exist")
49+
return -2
50+
else:
51+
self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].add_character({"name": data["character_name"]})

src/log_analyser/objects/object.py

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import json
2-
2+
from datetime import datetime
33

44
class Object:
55
def __init__(self, class_model, **kwargs):
66

77
self.from_json_ok = True
8+
self.class_name = self.__class__.__name__
89

910
for key, value in kwargs.items():
1011
if key in class_model:
11-
print(type(value), class_model[key])
1212
if type(value) == class_model[key]:
1313
setattr(self, key, value)
1414
else:
@@ -17,17 +17,37 @@ def __init__(self, class_model, **kwargs):
1717
else:
1818
print("key {} not find in dataschema".format(key))
1919
self.from_json_ok = False
20-
20+
21+
def export_json_recursive(self, data):
22+
if issubclass(type(data), Object):
23+
dict_class = data.__dict__.copy()
24+
dict_class.pop("from_json_ok")
25+
return data.export_json_recursive(dict_class)
26+
elif isinstance(data, datetime):
27+
return data.strftime("%Y-%m-%d %H:%M:%S")
28+
elif isinstance(data, list):
29+
return [self.export_json_recursive(item) for item in data]
30+
elif isinstance(data, dict):
31+
return {key: self.export_json_recursive(value) for key, value in data.items()}
32+
else:
33+
return data
34+
2135
def export_json(self):
2236

23-
dict_class = self.__dict__
37+
dict_class = self.__dict__.copy()
2438
dict_class.pop("from_json_ok")
39+
for key, value in dict_class.items():
40+
dict_class[key] = self.export_json_recursive(value)
41+
2542
return json.dumps(dict_class)
26-
43+
44+
45+
2746
@classmethod
2847
def from_json(self, data):
2948
object = self(**data)
3049
if object.from_json_ok:
3150
return object
3251
else:
33-
return None
52+
return None
53+

src/log_analyser/objects/player.py

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,15 @@
44

55

66
class Player(Object):
7-
8-
def __init__(self, name, team) -> None:
9-
10-
data_schema = {"name": str,
11-
"characters": list}
12-
7+
8+
def __init__(self, **kwargs) -> None:
9+
data_schema = {"name": str,
10+
"characters": dict}
11+
1312
super().__init__(data_schema, **kwargs)
14-
15-
13+
1614
def add_event(self, event):
1715
pass
18-
19-
def add_character(self, character):
20-
self.character.append(character)
16+
17+
def add_character(self, data):
18+
self.characters[data["name"]] = Character.from_json(data)

src/log_analyser/objects/team.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@ def __init__(self, **kwargs):
1313

1414
def add_player(self, data):
1515

16-
self.players.append(Player.from_json(data))
16+
self.players[data["name"]] = Player.from_json(data)

src/main.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ def __init__(self):
1010
self.running = True
1111

1212

13-
self.producer_thread = ProducerThread("localhost:29092")
13+
self.producer_thread = ProducerThread("localhost:29093")
1414

15-
self.consumer_thread = ConsumerThread("localhost:29092")
15+
self.consumer_thread = ConsumerThread("localhost:29093")
1616
self.consumer_thread.add_topics("test", self.on_callback_test)
1717

1818
self.consumer_thread.start()

0 commit comments

Comments
 (0)