#!/bin/bash
# Copyright (c) 2017 FH Dortmund and others
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Description:
#	Linux shell (bash) script that traces linux processes and converts
#	the trace to common tracing format (CTF).
#	perf module should be compiles with libbabeltrace in order to run
#	the tracing utility correctly.
#	Created out directory will contain Processes_List.txt (process IDs
#	are listed), perf.data (trace in perf format), ctf_trace.tar.gz
#	(trace in ctf format)
#	The ctf_format.tar.gz can be extracted in order to visualize the 
#	perf streams using Eclipse TraceCompass.
#
# Usage:
#	sudo TraceLinuxProcesses.sh <trace_name> <period> <path_to_perf>
#	e.g. sudo TraceLinuxProcesses.sh APP4MC_Trace 15 /home/pi/linux/tools/perf
#	<trace_name>:	Trace name for the output
#	<period>:	Amount of time in seconds to trace the system
#	<path_to_perf>:	Installed perf directory that contains ./perf
#
# Authors:
#	M. Ozcelikors <mozcelikors@gmail.com>, FH Dortmund
#

args=("$@")
trace_name=${args[0]}
seconds=${args[1]}
perf_directory=${args[2]}

if [ "$#" -ne 3 ]; then
	echo "Entered arguments seem to be incorrect"
	echo "Right usage: sudo TraceLinuxProcesses.sh <trace_name> <period> <path_to_perf>"
	echo "e.g. sudo TraceLinuxProcesses.sh APP4MC_Trace 15 /home/pi/linux/tools/perf"
else
	echo "### Creating directory.."
	sudo mkdir out_$trace_name/
	echo "### Writing out process names.."
	ps -aux >> out_$trace_name/Processes_List.txt
	echo "### Tracing with perf for $seconds seconds.."
	sudo $perf_directory/./perf sched record -o out_$trace_name/perf.data -- sleep $seconds
	echo "### Converting to data to CTF (Common Tracing Format).."
	sudo LD_LIBRARY_PATH=/opt/libbabeltrace/lib $perf_directory/./perf data convert -i out_$trace_name/perf.data --to-ctf=./ctf
	sudo tar -czvf out_$trace_name/trace.tar.gz ctf/
	sudo rm -rf ctf/
	
	echo "### Process IDs are written to out_$trace_name/Processes_List.txt"
	echo "### Trace in Perf format is written to out_$trace_name/perf.data"
	echo "### Trace in CTF format is written to out_$trace_name/ctf_trace.tar.gz"
	echo "### Exiting.."
fi





