3f4ef10d819fb131640c050fa918990c6e9a2f34
[cs-p2p-next.git] / ppf / new / top.py
1 """
2 Top level functions for parsing and storing information.
3
4 2011, Razvan Deaconescu, razvan.deaconescu@cs.pub.ro
5 """
6
7 import storage
8 import parsing
9 import config
10
11 def parse_store_session(writer, parser, session_id):
12     """
13     Parse and store information for a BitTorrent session.
14
15     writer is an instance of the storage.SwarmWriter class.
16     parser is an instance of the parsing.LogParser class (may be
17         LibtorrentLogParser, TriblerLogParser or some other).
18     session_id is the client session id.
19     """
20
21     while True:
22         msg = parser.get_next_message()
23         # In case of no more messages, exit loop.
24         if msg == None:
25             break
26
27         msg.set_client_session_id(session_id)
28         writer.add_message(msg)
29
30 def parse_store_session_archive(archive_file, session_config_file,
31         access_config_file):
32     """
33     Parse configuration files and call parse_store_session.
34     """
35
36     sc = config.SessionConfig.load(swarm_config_file)
37     ac = config.AccessConfig.load(access_config_file)
38
39     # Get SwarmWriter instance from AccessConfig instance (ac).
40     swarm_writer = ac.get_swarm_writer()
41
42     session_id = sc.get_session_id(archive_file)
43
44     # TODO: This needs rethinking. Client type is designed to be stored in
45     # the database (referenced by the btclient_id).
46     client_type = swarm_writer.first_access_instance().get_client_type_for_session(session_id)
47     parser = parsing.LogParser.get_parser(client_type, archive_file)
48
49     parse_store_session(swarm_writer, parser, session_id)
50
51 def parse_swarm(swarm_config_file, access_config_file):
52     """
53     Parse configuration files and iterate and parse client sessions.
54     """
55
56     sc = config.SwarmConfig.load(swarm_config_file)
57     ac = config.AccessConfig.load(access_config_file)
58
59     # Get SwarmWriter instance from AccessConfig instance (ac).
60     swarm_writer = ac.get_swarm_writer()
61
62     # TODO: Add proper SwarmWriter methods for adding swarms and sessions.
63     swarm_writer.add_swarm(sc.get_swarm())
64
65     for session in sc.get_session_list():
66         id = swarm_writer.add_client_session(session)
67         sc.update_session_id(session, id)
68
69     session_config = sc.get_session_config()
70
71     # TODO: Output session configuration file to disk.
72     # session_config.store(session_config_file)
73
74     for archive_file in sc.get_file_archives():
75         parse_store_session_config(archive_file, session_config_file, access_config_file)