Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Oneshot mode #1

Closed
wants to merge 10 commits into from
14 changes: 14 additions & 0 deletions onionperf/measurement.py
Expand Up @@ -166,6 +166,7 @@ def __init__(self, tor_bin_path, tgen_bin_path, datadir_path, nickname):
self.tor_bin_path = tor_bin_path
self.tgen_bin_path = tgen_bin_path
self.datadir_path = datadir_path
self.oneshot = oneshot
self.nickname = nickname
self.threads = None
self.done_event = None
Expand Down Expand Up @@ -234,9 +235,20 @@ def run(self, do_onion=True, do_inet=True, client_tgen_listen_port=58888, client

logging.info("Bootstrapping finished, entering heartbeat loop")
time.sleep(1)
logging.info("Onionperf is running in Oneshot mode. It will download a 5M file and shut down gracefully...")
while True:
# TODO add status update of some kind? maybe the number of files in the www directory?
# logging.info("Heartbeat: {0} downloads have completed successfully".format(self.__get_download_count(tgen_client_writable.filename)))
if self.oneshot:
downloads = 0
while True:
downloads = self.__get_download_count(tgen_client_writable.filename)
if downloads == 1:
logging.info("Onionperf has downloaded a 5M file in oneshot mode, and will now shut down.")
break
else:
continue
break

if self.__is_alive():
logging.info("All helper processes seem to be alive :)")
Expand Down Expand Up @@ -300,6 +312,8 @@ def __start_tgen(self, name, tgen_port, socks_port=None, server_urls=None):
if socks_port is None:
model.ListenModel(tgen_port="{0}".format(tgen_port)).dump_to_file(tgen_confpath)
logging.info("TGen server running at 0.0.0.0:{0}".format(tgen_port))
elif self.oneshot:
model.OneshotModel(tgen_port="{0}".format(tgen_port), tgen_servers=server_urls, socksproxy="127.0.0.1:{0}".format(socks_port)).dump_to_file(tgen_confpath)
ana-cc marked this conversation as resolved.
Show resolved Hide resolved
else:
model.TorperfModel(tgen_port="{0}".format(tgen_port), tgen_servers=server_urls, socksproxy="127.0.0.1:{0}".format(socks_port)).dump_to_file(tgen_confpath)

Expand Down
24 changes: 24 additions & 0 deletions onionperf/model.py
Expand Up @@ -94,6 +94,30 @@ def generate(self):

return g

class OneshotModel(GeneratableTGenModel):

def __init__(self, tgen_port="8889", tgen_servers=["127.0.0.1:8888"], socksproxy=None):
self.tgen_port = tgen_port
self.tgen_servers = tgen_servers
self.socksproxy = socksproxy
self.graph = self.generate()

def generate(self):
server_str = ','.join(self.tgen_servers)
g = DiGraph()

g.add_node("start", serverport=self.tgen_port, peers=server_str, loglevel="info", heartbeat="1 minute")
if self.socksproxy is not None:
g.node["start"]["socksproxy"] = self.socksproxy
g.add_node("transfer5m", type="get", protocol="tcp", size="5 MiB", timeout="15 seconds", stallout="10 seconds")

g.add_edge("start", "transfer5m")
g.add_edge("transfer5m", "start")

return g



def dump_example_tgen_torperf_model(domain_name, onion_name):
# the server listens on 8888, the client uses Tor to come back directly, and using a hidden serv
server = ListenModel(tgen_port="8888")
Expand Down
4 changes: 2 additions & 2 deletions onionperf/onionperf
Expand Up @@ -163,12 +163,12 @@ def main():
action="store", dest="tgenconnectport",
default=8080)

measure_parser.add_argument('-i', '--no-inet',
measure_parser.add_argument('-i', '--onion-only',
ana-cc marked this conversation as resolved.
Show resolved Hide resolved
help="""disable measuring download times over Tor back to {0}""".format(hostname),
action="store_false", dest="do_inet",
default=True)

measure_parser.add_argument('-o', '--no-onion',
measure_parser.add_argument('-o', '--inet-only',
ana-cc marked this conversation as resolved.
Show resolved Hide resolved
help="""disable measuring download times over Tor to an ephemeral onion service""",
action="store_false", dest="do_onion",
default=True)
Expand Down