Firelog consists of different modules: (1) an instrumented headless browser, (2) a network packet analyzer and (3) an active measurements monitor.
Such components independently capture events and metrics and store them in a local data store. An additional orchestration process accepts as input one or more ``seed URLs'' to inspect, uses the above modules to collect data, and finally proceed with their mapping to a unique identifier space, to build a database of correlated events and metrics that can be used as a training set for an application-specific data analysis.
Firelog is based on the PhantomJs headless browser for two reasons: (1) our interest is not Web usability but rather page downloading speed, and (2) for not imposing an overhead in the browser's activity.
We instrumented the browser for injecting in each HTTP GET message a random identifier for each object in the requested Web page, which is used to establish a link between measurements taken at different layers of the stack.
Similarly, the packet analyzer collects the transport-level measurements and associates each requested Web object with the corresponding TCP flow, by exploiting the injected identifier.
Finally, the active measurements monitor takes care of performing network-level measurements against selected destinations, corresponding to servers involved in building up the Web page under examination.
All the data are processed to diagnose the current web browsing session, providing details on the root cause for a (possible) high page load time.
The workflow of the probe is composed by three distinct phases, as follows.
Phase 1. In the first phase, the probe browses a given URL. Each fetched object is associated with a unique identifier, exploited by the packet analyzer to associate the corresponding TCP flow to the object. All the browser level measurements and the passive measurements are taken in this phase.
Core metrics for Phase 1 are:
Phase 2. In the second phase, the active measurements take place. All the collected IP addresses are processed, sending ICMP messages towards all the destinations and performing a Traceroute against the primary IP address (i.e., the IP resolved by the DNS). By doing this, we collect path information for all the resources contained in the browsed Web page.
Core metrics for Phase 2 are:
Phase 3. All the data relative to the same Web browsing session are packed together and stored in a CSV file and sent to the DISC repository for further analysis. A preliminary analysis of the data collected so far is returned on termination.
Core metrics (among all the others, derived from previous phases) for Phase 3 are:
Firelog offer the capability to run a local diagnosis algorithm towards a specific web site.
Firelog is written in Python3, and it is coupled with a Javascript script for exploiting the headless browser toolkint and two C scripts for managing the embedded Tstat version.
It has been compiled and tested under Unix/Linux environments, specifically under:
The Python3 environment is needed also to run the proxy derived from the reference implementation RI/SDK.
We recommend the user to refer to the lastest version available on GitHub:
git clone https://github.com/marcomilanesio/qoe-headless-probe.git
Usage of standalone probe
Requirements: All the additional software can be retrieved from http://firelog.eurecom.fr/mplane/software:
First, configure and compile Tstat on your machine, following the instruction at http://tstat.tlc.polito.it/index.shtml
You need to compile with sudo privileges the C programs in the script/ folder:
$ cd script
$ sudo gcc -o start.out start.c
$ sudo gcc -o stop.out stop.c
$ sudo chmod 4755 *.out
You need a set up a configuration file for Tstat, specifying the interface to sniff (see http://tstat.tlc.polito.it/index.shtml for details).
Then, you have to modify accordingly the parameters in the file conf/firelog.conf.
Once all the steps are done, you run it by typing:
$ ./phantomprobe.py -h
Firelog is able to communicate with other mPlane components, thanks to the interface that makes it mPlane compliant. Please refer to the following GitHub repository for the latest version of the interface:
git clone https://github.com/fp7mplane/components.git COMPONENTS_DIR
Once Firelog is properly installed, get the latest version of the mPlane protocol RI at the following GitHub repository:
git clone https://github.com/fp7mplane/protocol-ri PROTOCOL_RI_DIR
and add the Firelog components to protocol RI.
The following instructions assume you are in the [COMPONENTS_DIR] folder.
Finally, set the environment variable MPLANE_RI to point to [PROTOCOL_RI_DIR]:
$ export MPLANE_RI=[PROTOCOL_RI_DIR]
Firelog has been completely developed within the mPlane project, and it's still under constant development by Eurecom.
Official version(s)