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.</enabletextlogger>
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.