#!groovy
fileRelated = evaluate readTrusted( 'TestON/JenkinsFile/JenkinsPathAndFiles.groovy' )

fileRelated.init()
branches = params.ONOSbranch
branchList = branches.tokenize( "\n;, " )
script_file = fileRelated.trendCHO
saving_directory = fileRelated.jenkinsWorkspace + "postjob-Fabric5/"
scriptDir = fileRelated.CHOScriptDir

graphScript = generateGraphScript( branchList )

stage( 'Generating-Graph' ){
    node( "TestStation-Fabric5s" ){
        runScript( graphScript )
    }
}
stage( 'posting-result' ){
    postJob()
}

def generateGraphScript( branchList ){
    graphScript = ''''''
    for( branch in branchList ){
        branchDir = scriptDir + branch + "/"
        graphScript += '''export BRANCH=''' + branchDir + '''
                          mkdir ''' + branchDir + ''';
                          if [ ! -f ''' + branchDir + '''existing.txt ]; then
                             cp *.csv ''' + branchDir + ''';
                             echo "1" > ''' + branchDir + '''existing.txt;
                          fi;
                          bash log-summary;''' + '''
                          Rscript ''' +  script_file + ' ' + branchDir + 'event.csv ' +
                                branchDir + 'failure.csv ' + branchDir + 'error.csv ' +
                                branch + ' 60 ' +  saving_directory + ''';
        '''
        print( graphScript )
    }
    return graphScript
}
def runScript( graphScript ){
    sh '''#!/bin/bash -l
          set -i
          set +e
          export PYTHONPATH=/home/sdn/TestON:/home/sdn/sts
          cd ''' + scriptDir + ''';
          ''' + graphScript
}
def postJob(){
        jobToRun = "postjob-Fabric5"
        build job: jobToRun, propagate: false
}
