OLD | NEW |
| (Empty) |
1 // Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | |
2 // | |
3 // Use of this source code is governed by a BSD-style license | |
4 // that can be found in the LICENSE file in the root of the source | |
5 // tree. An additional intellectual property rights grant can be found | |
6 // in the file PATENTS. All contributing project authors may | |
7 // be found in the AUTHORS file in the root of the source tree. | |
8 // | |
9 google.load("visualization", "1", {packages:["corechart"]}); | |
10 | |
11 function openFiles(event) { | |
12 var files = event.target.files; | |
13 readAndAnalyzeFiles(files) | |
14 } | |
15 | |
16 function readAndAnalyzeFiles(files) { | |
17 if(!files) { | |
18 alert("No files have been selected!"); | |
19 return; | |
20 } | |
21 | |
22 var reports = []; | |
23 var filesNames = []; | |
24 missingFiles = files.length; | |
25 | |
26 for(var i = 0; i < files.length; i++) { | |
27 var reader = new FileReader(); | |
28 reader.onload = onReaderLoad.bind(reader, files[i].name); | |
29 reader.readAsText(files[i]); | |
30 } | |
31 | |
32 function onReaderLoad(fileName) { | |
33 reports.push(JSON.parse(this.result)); | |
34 filesNames.push(fileName); | |
35 | |
36 missingFiles--; | |
37 if(missingFiles == 0) { | |
38 analyzeReports_(reports, filesNames); | |
39 } | |
40 } | |
41 } | |
42 | |
43 // TODO(houssainy) take the input stats from the select list or | |
44 // drop down menu in html. | |
45 function analyzeReports_(reports, filesNames) { | |
46 filesNames.unshift(""); // ned | |
47 | |
48 // Rtt | |
49 analyzeRttData(reports, filesNames, "bot1"); | |
50 analyzeRttData(reports, filesNames, "bot2"); | |
51 | |
52 // Send Packets Lost | |
53 analyzePacketsLostData(reports, filesNames, "bot1"); | |
54 analyzePacketsLostData(reports, filesNames, "bot2"); | |
55 | |
56 // Send bandwidth | |
57 analyzeData(reports, filesNames, "Available Send Bandwidth-bot1", "bot1", | |
58 "bweforvideo", "googAvailableSendBandwidth"); | |
59 analyzeData(reports, filesNames, "Available Send Bandwidth-bot2", "bot2", | |
60 "bweforvideo", "googAvailableSendBandwidth"); | |
61 | |
62 // Receive bandwidth | |
63 analyzeData(reports, filesNames, "Available Receive Bandwidth-bot1", "bot1", | |
64 "bweforvideo", "googAvailableReceiveBandwidth"); | |
65 analyzeData(reports, filesNames, "Available Receive Bandwidth-bot2", "bot2", | |
66 "bweforvideo", "googAvailableReceiveBandwidth"); | |
67 | |
68 drawSeparatorLine(); | |
69 } | |
70 | |
71 function analyzeRttData(reports, filesNames, botName) { | |
72 var outPut = []; | |
73 outPut.push(filesNames); | |
74 | |
75 var avergaData = ['Average Rtt x10']; | |
76 var maxData = ['Max Rtt']; | |
77 | |
78 var average; | |
79 var max; | |
80 for(var index in reports) { | |
81 average = getStateAverage(reports[index], botName, "Conn-audio-1-0", | |
82 "googRtt"); | |
83 avergaData.push(average*10); | |
84 | |
85 max = getStateMax(reports[index], botName, "Conn-audio-1-0", | |
86 "googRtt"); | |
87 maxData.push(max); | |
88 } | |
89 outPut.push(avergaData); | |
90 outPut.push(maxData); | |
91 | |
92 drawChart("Rtt-" + botName, outPut); | |
93 } | |
94 | |
95 function analyzePacketsLostData(reports, filesNames, botName) { | |
96 var outPut = []; | |
97 outPut.push(filesNames); | |
98 | |
99 var maxData = ['Max Send PacketsLost']; | |
100 var max; | |
101 for(var index in reports) { | |
102 max = getStateMax(reports[index], botName, "ssrc_[0-9]+_send", | |
103 "packetsLost"); | |
104 maxData.push(max); | |
105 } | |
106 outPut.push(maxData); | |
107 | |
108 drawChart("Send PacketsLost-" + botName, outPut); | |
109 } | |
110 | |
111 function analyzeData(reports, filesNames, chartName, botName, reportId, | |
112 statName) { | |
113 var outPut = []; | |
114 outPut.push(filesNames); | |
115 | |
116 var avergaData = ['Average ' + statName]; | |
117 var maxData = ['Max ' + statName]; | |
118 | |
119 var average; | |
120 var max; | |
121 for(var index in reports) { | |
122 average = getStateAverage(reports[index], botName, reportId, statName); | |
123 avergaData.push(average); | |
124 | |
125 max = getStateMax(reports[index], botName, reportId, statName); | |
126 maxData.push(max); | |
127 } | |
128 outPut.push(avergaData); | |
129 outPut.push(maxData); | |
130 | |
131 drawChart(chartName, outPut); | |
132 } | |
133 | |
134 function getStateAverage(reports, botName, reportId, statName) { | |
135 var sum = 0; | |
136 var count = 0; | |
137 | |
138 for (var index in reports) { | |
139 var data = reports[index].data; | |
140 if(index == 0 || !data.hasOwnProperty(botName)) | |
141 continue; | |
142 | |
143 var stats = data[botName]; | |
144 for (var key in stats) { | |
145 if(key.search(reportId) != -1) { | |
146 var value = parseInt(stats[key][statName]); | |
147 sum += value; | |
148 count++; | |
149 } | |
150 } | |
151 } | |
152 return Math.round(sum/count); | |
153 } | |
154 | |
155 function getStateMax(reports, botName, reportId, statName) { | |
156 var max = -1; | |
157 | |
158 for (var index in reports) { | |
159 var data = reports[index].data; | |
160 if(index == 0 || !data.hasOwnProperty(botName)) | |
161 continue; | |
162 | |
163 var stats = data[botName]; | |
164 for (var key in stats) { | |
165 if(key.search(reportId) != -1) { | |
166 var value = parseInt(stats[key][statName]); | |
167 max = Math.max(value, max); | |
168 } | |
169 } | |
170 } | |
171 return max; | |
172 } | |
173 | |
174 function drawChart(title, data) { | |
175 var dataTable = google.visualization.arrayToDataTable(data); | |
176 | |
177 var options = { | |
178 title: title, | |
179 }; | |
180 | |
181 var div = document.createElement('div'); | |
182 document.body.appendChild(div); | |
183 | |
184 var chart = new google.visualization.ColumnChart(div); | |
185 chart.draw(dataTable, options); | |
186 } | |
187 | |
188 function drawSeparatorLine() { | |
189 var hr = document.createElement('hr'); | |
190 document.body.appendChild(hr); | |
191 } | |
OLD | NEW |