Using PATHspider
================

Quickstart
----------

Dependencies
~~~~~~~~~~~~

PATHspider is a command line tool. If you have installed PATHspider from a
package manager (e.g. apt or pip), you will already have all the dependencies
you need installed.

If you are working from the source distribution (e.g. cloned git repository)
then you will need to install some dependencies. On Debian GNU/Linux:

.. code-block:: shell

 # sudo apt install python3-libtrace python3-twisted python3-zope.interface

In order to build the documentation from source, you will also need the
following dependencies:

.. code-block:: shell 
 
 # sudo apt install python3-sphinx python3-repoze.sphinx.autointerface

Usage
~~~~~

You can run PATHspider from the command line. In order for the Observer to
work, you will need permissions to capture raw packets from the network
interface. If you've installed from apt then either the executable in /usr/bin
will have been setuid or will have filesystem permissions set.

.. note::

 If you're running from the source distribution, you will need to execute
 pathspider as:

 .. code-block:: shell 
 
  # sudo /usr/bin/env PYTHONPATH=. python3 pathspider/run.py [...]

.. code-block:: shell

 # pathspider -h
 usage: run.py [-h] [-s] [-l] [-p PLUGIN] [-i INTERFACE] [-w WORKER_COUNT]
               INPUTFILE OUTPUTFILE
 
 Pathspider will spider the paths.
 
 positional arguments:
   INPUTFILE             a file containing a list of remote hosts to test, with
                         any accompanying metadata expected by the pathspider
                         test. this file should be formatted as a comma-
                         seperated values file.
   OUTPUTFILE            the file to output results data to
 
 optional arguments:
   -h, --help            show this help message and exit
   -s, --standalone      run in standalone mode. this is the default mode (and
                         currently the only supported mode). in the future,
                         mplane will be supported as a mode of operation.
   -l, --list-plugins    print the list of installed plugins
   -p PLUGIN, --plugin PLUGIN
                         use named plugin
   -i INTERFACE, --interface INTERFACE
                         the interface to use for the observer
   -w WORKER_COUNT, --worker-count WORKER_COUNT
                         number of workers to use

Example
~~~~~~~

You can run a small study using ECNSpider and the included `webinput.csv` file
to measure path transparency to ECN for a small selection of web servers:

.. code-block:: shell

 # pathspider -i eth0 -w 10 examples/webinput.csv /tmp/results.txt

.. note::

 The location of the example input file may be different if you've installed
 pathspider from a package manager. On Debian systems it is installed as
 `/usr/share/doc/pathspider/examples/webinput.csv`.
 
