#!/bin/bash

#
# g4cJobsExecTimesCollection.sh
#
#   fonde in un unico file i dati relativi alla durata di ognuna
#   delle simulazioni eseguite dai singoli job
#

#
# Parametri
#
# <verbose>
#   i valori ammessi per il parametro sono 0 o 1.
#   Se 1 attiva la modalita' verbose di esecuzione dello script
# <workingDirectoryRelativePath>
#   path relativo alla directory g4cParallelSimulation di quella
#   di lavoro che contiene le subdirectory assegnate ai job che
#   realizzano la simulazione, il file con le informazioni relative
#   ai loro istanti di sottomissione e di completamento e il file di
#   output per la modalita' verbose
# <jobRuntimeFileName>
#   nome del file, nella directory assegnata ad ogni job, nel
#   quale vengono memorizzati i suoi istanti di sottomissione e di
#   completamento
# <jobsRuntimeFileName>
#   nome del file, nella working directory, nel
#   quale vengono memorizzati gli sitanti di sottomissione e
#   completamento di tutti i job che realizzano la simulazione
# <verbRelativePath>
#   path relativo alla directory g4cParallelSimulation 
#   di quella che contiene gli script di gestione 
#   della modalita' verbose
# <verbOutputFileRelativePath>
#   path relativo alla directory g4cParallelSimulation del file
#   di output per la modalita' verbose

#
# Estrae i parametri dello script dalla sua chiamata
verbose=$1
workingDirectoryRelativePath=$2
jobRuntimeFileName=$3
jobsRuntimeFileName=$4
verbRelativePath=$5
verbOutputFileRelativePath=$6

# Accede al nome dello script correntemente in esecuzione
currentScript=$(basename $0)

# Verbose
#   Memorizza nel file di output per la modalita' verbose, se attiva, 
#   l'inizio della esecuzione dello script
$verbRelativePath/verbScriptStarting.sh $verbose \
                                        $currentScript \
                                        $verbOutputFileRelativePath

# Verbose									
#   memorizza nel file di output per la modalita' verbose, se attiva,
#   il valore dei parametri specificati per l'esecuzione parallela dei
#   job che realizzano la simulazione
$verbRelativePath/verbJobsExecTimesCollectionParam.sh $verbose \
                                                      $currentScript \
                                                      "$workingDirectoryRelativePath" \
													  $jobRuntimeFileName \
                                                      $jobsRuntimeFileName \
                                                      $verbOutputFileRelativePath

# Ottiene l'elenco delle directory assegnate ai singoli job, una per riga
directorySet=$(ls -d -1 "$workingDirectoryRelativePath"/*/)

# debug
# echo "<directorySet>: " $directorySet

# Fonde in un unico file i dati relativi all'istante di sottomissione
# e di completamento delle simulazioni eseguite dai singoli job

# Per ogni job 
for folder in $directorySet
do
   # debug - visualizza il nome dal file che contiene le informazioni relative alla
   #         esecuzione del job
   # echo "<jobRuntimeFileName>: $folder$jobRuntimeFileName"
  
   # estrae il nome del job dal file che contiene le informazioni relative alla
   # sua esecuzione   
   jobName=$(sed "1q;d" "$folder$jobRuntimeFileName")
   
   # debug - visualizza il nome del job estratto dal file che contiene le
   #         informazioni relative alla sua esecuzione
   # echo "<jobName>: " $jobName
   
   # estrae l'istante di sottomissione del job dal file che contiene le
   # informazioni relative alla sua esecuzione
   startTime=$(sed "3q;d" "$folder$jobRuntimeFileName")
   
   # debug - visualizza l'istante di sottomissione del job estratto dal
   #         file che contiene le informazioni relative alla sua esecuzione
   # echo "<startTime>: " $startTime
   
   # estrae l'istante di completamento del job dal file che contiene le
   # informazioni relative alla sua esecuzione
   stopTime=$(sed "5q;d" "$folder$jobRuntimeFileName")
   
   # debug - visualizza l'istante di sottomissione del job estratto dal
   #         file che contiene le informazioni relative alla sua esecuzione
   # echo "<stopTime>: " $stopTime

   # calcola la durata del job
   elapsedTime=$(expr $stopTime - $startTime)
   
   # debug - visualizza la durata del job
   # echo "<elapsedTime>: " $elapsedTime

   # Aggiunge al file dedicato allo scopo la durata del job
   echo "$jobName;$elapsedTime" >> "$workingDirectoryRelativePath"/$jobsRuntimeFileName
done

#  Verbose
#    Memorizza nel file di output per la modalità verbose, se attiva, 
#    l'uscita dallo script
$verbRelativePath/verbScriptCompletion.sh $verbose \
                                          $currentScript \
                                          $verbOutputFileRelativePath
                                          
exit 0
