#!/bin/sh

cmd_id=$1
flow_sandbox=$2

# Arquivo onde será gravado de forma consolidada os dados coletados de todos os nós do fluxo.
flow_collect_file="$flow_sandbox/flow_collect_execution_data.log"

# Obtém o nome do diretório da sandbox do fluxo.
flow_sandbox_name=`basename $flow_sandbox`

# Obtém o caminho para as sandboxes dos nós do fluxo. São diretórios irmãos da
# sandbox do fluxo, com nome: "<flow_sandbox_name>_<identificador do nó>"
# Exemplo: Se nome da sandbox do fluxo é "dir-abc", sandbox do nó são 
# "dir-abc_1", "dir-abc_2", etc; sendo que os identificadores dos nós não são 
# necessariamente sequenciais.
sandboxes=`find ${flow_sandbox} -type d -name "${flow_sandbox_name}_*"`

# Garante que o arquivo seja "zerado" antes de cada coleta.
rm -f "$flow_collect_file"
touch "$flow_collect_file"

# Coleta os dados em cada uma das sandboxes dos nós.
for sandbox in $sandboxes; do
    
    sandbox_name=`basename $sandbox`
    
	# Extrai o identificador do nó através do nome da sua sandbox.
    node_id=`echo "$sandbox" | sed "s/^.*_\([0-9]*\)\$/\1/g" | grep -v "$sandbox"`
    
    if [ "x" = "x$node_id" ]; then
    	# Caso o identificador não seja obtido corretamente, sinaliza o erro.
        echo "${sandbox_name}=could not find id" >> ${flow_collect_file}
    else
      	# Tenta ler o arquivo que o nó deveria ter gravado para a coleta.
        node_collect_file="$sandbox/collect_execution_data.log"
        if [ -f $node_collect_file ]; then
        	# Lê pares de chave=valor de cada linha do arquivo. 
			# Define o "=" como separador para leitura dentro do while.
            while IFS='=' read key value
            do
            	# Escreve o par <chave>=<valor> no arquivo consolidado do fluxo
				# no formato "<chave>.<id_do_no>=<valor>".
				trimmedKey=`echo "$key" | sed -e 's/^ *//' -e 's/ *$//'`
                echo "$trimmedKey.$node_id=$value" >> ${flow_collect_file}
            done < ${node_collect_file}
        else
    		# Caso o arquivo do nó não seja encontrado, sinaliza o erro.
			# Pode ser que o comando ainda não tenha escrito os dados a serem coletados.
            echo "${sandbox_name}=collect file not found" >> ${flow_collect_file}
        fi 
    fi
done

# Escreve na saída padrão o conteúdo do arquivo com os dados consolidados coletados dos nós.
cat ${flow_collect_file}