Menu

Logging and Output

Alex Libov

Logging

MOLStream systems supports two types of logs:

TextLogger

The TextLogger logs all messages sent and received by nodes. Moreover, additional logs can be written using the function TextLogger.log

If the <enableTextLogger/> element is present in the configuration file, all logs will be added to a single log file.
To log only the messages and logs relevant to a single node, the name of the node can be added as an argument when invoking MOLStream.

ObjectLogger

Object loggers are used to store statistics and metrics for every run. Each object logger stores a list of object of some class. When a run is finished, the ObjectLogger stores its state to a file.
For example:

static ObjectLogger<DegreeLog> degreeLogger = new ObjectLogger<DegreeLog>("degreeLog");

degreeLogger will be used to log objects of type - DegreeLog.

These object logs are all stored in files - a file per log per run.

Output

LogAnalyzer

The LogAnalyzer class reads the stored log files and calculates different measurements and statistics based on the data:

chunkIDinfo.csv/tsv

chunkIDinfo file stores data per chunk - it stores that total amount of nodes that have played each chunk.

dataUsage.csv/tsv

dataUsage stores all data related statistics per protocol and per message type:

  • overhead messages - amount of messages sent that are not the streaming content
  • overall messages - amount of messages sent overall
  • overhead bits - amount of bits sent that are not the streaming content
  • overall bits - amount of bits sent overall
  • averageAverageDegree - average node degree throughout the whole run, averaged by all nodes.
  • averageNodeDegreeVariance - the variance of the average node degree.
  • degreeVariance - the average variance of the node degree.
  • serverAverageDegree - the average degree of the source node throughout the run
  • serverDegreeVariance - the variance of the source node degree throughout the run
hopCount.tsv/csv

hopCount stores data that is calculated for a specific distance from the source node:

  • average latency
  • number of chunks received
secondInfo.csv/tsv

secondInfo stores data per second:

  • server Upload Utilization - amount of bits sent by the server during that second
  • server Bits In Queue - amount of bits sent by the server during that second exceeding the server's upload bandwidth
  • all Upload Utilization - average amount of bits sent by the rest of the nodes during that second
  • all Bits In Queue - average amount of bits sent by the rest of the nodes during that second exceeding the node's upload bandwidth
  • chunks played - numebr of chunks played during the second
  • available nodes - number of available nodes during the second
upTimeInfo.csv/tsv

secondInfo stores data per node up time:
protocol degree - an average degree is stored for each active overlay protocol
count - the number of neighbors that are up

overall.csv/tsv

overall data for the run:

  • averageLag - the difference in time between the latency of the first chunk and the latency of the last chunk. Averaged on all nodes.
  • averageStartupDelay the average time after the node joins and until the node first plays a chunk.
  • averageHopcount - the average distance (in hops) of nodes from the server
  • averageLatency - the average time between generation of content and consumption.
  • averageLatencySD - standard deviation of the latency.
  • averageLastDelay - the average time between the playback of the last chunk and the leaving time of the node (or end of the playback)
  • averageQuality - the average quality of the playback - average number of descriptors played out of the number of available descriptors.
  • continuityIndex - the average amount of chunk played out of chunk that could have been played.
  • overheadBitsSent - the average amount of overhead bit sent by nodes.
  • vitalBitsSent the average amount of vital bits sent by nodes.

Related

Wiki: Home