summaryrefslogtreecommitdiff
path: root/ns3-simulations/simulate.org
blob: 87730ec0e49449974fc86811450e3359c235d39e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93



* Run simulations
** Experiments
*** Number of sensors
    #+BEGIN_SRC bash :noweb yes :results output
      <<singleRun>>
      for sensorsNumber in $(seq 0 20)
      do
          run
      done
      
    #+END_SRC

    #+RESULTS:

** Single Run
   #+NAME: singleRun
   #+BEGIN_SRC bash :noweb yes
     simulator="ns3-simulator/simulator"
     parseEnergyScript="./parseEnergy.awk"
     parseDelayScript="./parseDelay.awk"
     logFolder="logs/"
     export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${NS3_PATH}/build/lib
     run () {
         [ -z ${sensorsSendInterval+x} ] && sensorsSendInterval=1
         [ -z ${sensorsPktSize+x} ] && sensorsPktSize=10
         [ -z ${sensorsNumber+x} ] && sensorsNumber=2
         [ -z ${nbHop+x} ] && nbHop=2
         [ -z ${linksBandwidth+x} ] && linksBandwidth=10
         [ -z ${linksLatency+x} ] && linksLatency=10
         logFile="${logFolder}/ns-3_${sensorsSendInterval}SSI_${sensorsPktSize}SPS_${sensorsNumber}SN_${nbHop}NH_${linksBandwidth}LB_${linksLatency}LL.org"
         simCMD="$simulator --sensorsSendInterval=${sensorsSendInterval} --sensorsPktSize=${sensorsPktSize} --sensorsNumber=${sensorsNumber} --nbHop=${nbHop} --linksBandwidth=${linksBandwidth} --linksLatency=${linksLatency} 2>&1"
         log=$(bash -c "$simCMD")

         # Compute some metrics
         energyLog=$(echo "$log" | $parseEnergyScript)
         avgDelay=$(echo "$log" | $parseDelayScript)
         totalEnergy=$(echo "$energyLog"| awk 'BEGIN{power=0;FS=","}NR!=1{power+=$2}END{print(power)}')
         nbPacketCloud=$(echo "$log"|grep -c "CloudSwitch receive")
         nbNodes=$(echo "$log"|awk '/Simulation used/{print($3)}')
         ns3Version=$(echo "$log"|awk '/NS-3 Version/{print($3)}')

         # Save logs
         echo -e "#+TITLE: $(date) ns-3 (version ${ns3Version}) simulation\n" > $logFile
         echo "* Environment Variables" >> $logFile
         env >> $logFile
         echo "* Full Command" >> $logFile
         echo "$simCMD" >> $logFile
         echo "* Output" >> $logFile
         echo "$log" >> $logFile
         echo "* Energy CSV (negative nodeId = WIFI, 0 = AP (Wireless+Wired), positive nodeId = ECOFEN" >> $logFile
         echo "$energyLog" >> $logFile
         echo "* Metrics" >> $logFile
         echo "-METRICSLINE- sensorsSendInterval:${sensorsSendInterval} sensorsPktSize:${sensorsPktSize} sensorsNumber:${sensorsNumber} nbHop:${nbHop} linksBandwidth:${linksBandwidth} linksLatency:${linksLatency} totalEnergy:$totalEnergy nbPacketCloud:$nbPacketCloud nbNodes:$nbNodes avgDelay:${avgDelay} ns3Version:${ns3Version}" >> $logFile

     }
   #+END_SRC

   #+RESULTS:
   : Processing logs/logs/log.txt
   : Processing logs/logs/log.txt.csv-energy.csv
   : Processing logs/logs/log.txt.csv
   : Processing logs/logs/log.txt-energy.csv

* Logs Analysis 
** Log -> CSV  
   #+NAME: logToCSV
   #+BEGIN_SRC bash :results none
     csvOutput="logs/data.csv"

     # First save csv header line
     aLog=$(find logs/ -type f -name "*.org"|head -n 1)
     metrics=$(cat $aLog|grep "\-METRICSLINE\-"|sed "s/-METRICSLINE-//g")
     echo $metrics | awk '{for(i=1;i<=NF;i++){split($i,elem,":");printf(elem[1]);if(i<NF)printf(",");else{print("")}}}' > $csvOutput

     # Second save all values
     for logFile in $(find logs/ -type f -name "*.org")
     do
         metrics=$(cat $logFile|grep "\-METRICSLINE\-"|sed "s/-METRICSLINE-//g")
         echo $metrics | awk '{for(i=1;i<=NF;i++){split($i,elem,":");printf(elem[2]);if(i<NF)printf(",");else{print("")}}}' >> $csvOutput
     done
   #+END_SRC
** R Scripts
*** Load Data
    #+BEGIN_SRC R
    print("lkj")
    #+END_SRC