index.html 48 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <link rel="shortcut icon" type="image/x-icon" href="style/favicon.ico"/>
  6. <link href="style/style.css" rel="stylesheet" type="text/css" />
  7. <link href="style/bootstrap.min.css" rel="stylesheet" type="text/css" />
  8. <script src="js/jquery-3.5.1.min.js"></script>
  9. <script src="js/bootstrap.min.js"></script>
  10. <script src="js/gatling.js"></script>
  11. <script src="js/menu.js"></script>
  12. <script src="js/ellipsis.js"></script>
  13. <script src="js/all_sessions.js"></script>
  14. <script src="js/stats.js"></script>
  15. <script src="js/highstock.js"></script>
  16. <script src="js/highcharts-more.js"></script>
  17. <script src="js/theme.js"></script>
  18. <script src="js/unpack.js"></script>
  19. <title>Gatling Stats - Global Information</title>
  20. </head>
  21. <body>
  22. <script>
  23. const storedTheme = localStorage.getItem('theme') || (window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light");
  24. if (storedTheme) document.documentElement.setAttribute('data-theme', storedTheme)
  25. function toggleTheme() {
  26. const currentTheme = document.documentElement.getAttribute("data-theme");
  27. const targetTheme = currentTheme === "light" ? "dark" : "light";
  28. document.documentElement.setAttribute('data-theme', targetTheme)
  29. localStorage.setItem('theme', targetTheme);
  30. };
  31. </script>
  32. <div class="app-container">
  33. <div class="frise"></div>
  34. <div class="head">
  35. <div class="gatling-open-source">
  36. <a class="gatling-logo gatling-logo-light" href="https://gatling.io" target="blank_" title="Gatling Home Page"><img alt="Gatling" src="style/logo-light.svg"/></a>
  37. <a class="gatling-logo gatling-logo-dark" href="https://gatling.io" target="blank_" title="Gatling Home Page"><img alt="Gatling" src="style/logo-dark.svg"/></a>
  38. <a class="gatling-documentation" href="https://gatling.io/docs/" target="_blank">Documentation</a>
  39. </div>
  40. <div class="nav spacer"></div>
  41. <a class="enterprise" href="https://gatling.io/enterprise/next-step/" target="_blank"><strong>Try</strong>
  42. <img class="logo-enterprise-light" alt="Gatling Enterprise" src="style/logo-enterprise-light.svg"/>
  43. <img class="logo-enterprise-dark" alt="Gatling Enterprise" src="style/logo-enterprise-dark.svg"/>
  44. </a>
  45. <button id="theme-toggle" class="theme-toggle" type="button" onclick="toggleTheme()" aria-label="Toggle user interface mode">
  46. <span class="toggle-dark"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-moon"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path></svg></span>
  47. <span class="toggle-light"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-sun"><circle cx="12" cy="12" r="5"></circle><line x1="12" y1="1" x2="12" y2="3"></line><line x1="12" y1="21" x2="12" y2="23"></line><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line><line x1="1" y1="12" x2="3" y2="12"></line><line x1="21" y1="12" x2="23" y2="12"></line><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line></svg></span>
  48. </button>
  49. </div>
  50. <div class="container details">
  51. <div class="nav">
  52. <ul></ul>
  53. </div>
  54. <div class="cadre">
  55. <div class="content">
  56. <div class="content-header">
  57. <div class="onglet">
  58. ProductsPageSimulation
  59. </div>
  60. <div class="sous-menu" id="sousMenu">
  61. <div class="sous-menu-spacer">
  62. <div class="item ouvert"><a href="index.html">Global</a></div>
  63. <div class="item "><a id="details_link" href="#">Details</a></div>
  64. </div>
  65. </div>
  66. </div>
  67. <div class="content-in">
  68. <div class="container-article">
  69. <div class="article">
  70. <div class="schema-container">
  71. <div id="ranges" class="schema ranges">
  72. </div>
  73. <div class="schema polar">
  74. <div id="container_number_of_requests"></div>
  75. </div>
  76. <div class="simulation-card">
  77. <div class="simulation-version-information">
  78. <span class="simulation-information-title">Gatling Version</span>
  79. <span class="simulation-information-item">
  80. <span class="simulation-information-label">Version: </span>
  81. <span>3.13.5</span>
  82. </span>
  83. <span class="simulation-information-item">
  84. <span class="simulation-information-label">Released: </span>
  85. <span>2025-03-11</span>
  86. </span>
  87. </div>
  88. <div id="simulation-information" class="simulation-version-information">
  89. <span class="simulation-information-title">Run Information</span>
  90. <div class="simulation-information-container">
  91. <span class="simulation-information-item">
  92. <span class="simulation-information-label">Date: </span>
  93. <span>2025-04-11 10:25:46 GMT</span>
  94. </span>
  95. <span class="simulation-information-item">
  96. <span class="simulation-information-label">Duration: </span>
  97. <span>1m 39s </span>
  98. </span>
  99. <span class="simulation-information-item">
  100. <span class="simulation-information-label">Description: </span>
  101. <span>&mdash;</span>
  102. </span>
  103. </div>
  104. </div>
  105. </div>
  106. </div>
  107. <div id="statistics_table_container">
  108. <div id="stats" class="statistics extensible-geant collapsed">
  109. <div class="title">
  110. <div id="statistics_title" class="title_base"><span class="title_base_stats">Stats</span><span class="expand-table">Fixed height</span><span id="toggle-stats" class="toggle-table"></span><span class="collapse-table">Full size</span></div>
  111. <div class="right">
  112. <button class="statistics-button expand-all-button">Expand all groups</button>
  113. <button class="statistics-button collapse-all-button">Collapse all groups</button>
  114. <button id="statistics_full_screen" class="statistics-button" onclick="openStatisticsTableModal()"><img alt="Fullscreen" src="style/fullscreen.svg"></button>
  115. </div>
  116. </div>
  117. <div class="scrollable">
  118. <table id="container_statistics_head" class="statistics-in extensible-geant">
  119. <thead>
  120. <tr>
  121. <th rowspan="2" id="col-1" class="header sortable sorted-up"><span>Requests</span></th>
  122. <th colspan="5" class="header"><span class="executions">Executions</span></th>
  123. <th colspan="8" class="header"><span class="response-time">Response Time (ms)</span></th>
  124. </tr>
  125. <tr>
  126. <th id="col-2" class="header sortable"><span>Total</span></th>
  127. <th id="col-3" class="header sortable"><span>OK</span></th>
  128. <th id="col-4" class="header sortable"><span>KO</span></th>
  129. <th id="col-5" class="header sortable"><span>% KO</span></th>
  130. <th id="col-6" class="header sortable"><span><abbr title="Count of events per second">Cnt/s</abbr></span></th>
  131. <th id="col-7" class="header sortable"><span>Min</span></th>
  132. <th id="col-8" class="header sortable"><span>50th pct</span></th>
  133. <th id="col-9" class="header sortable"><span>75th pct</span></th>
  134. <th id="col-10" class="header sortable"><span>95th pct</span></th>
  135. <th id="col-11" class="header sortable"><span>99th pct</span></th>
  136. <th id="col-12" class="header sortable"><span>Max</span></th>
  137. <th id="col-13" class="header sortable"><span>Mean</span></th>
  138. <th id="col-14" class="header sortable"><span><abbr title="Standard Deviation">Std Dev</abbr></span></th>
  139. </tr>
  140. </thead>
  141. <tbody></tbody>
  142. </table>
  143. <table id="container_statistics_body" class="statistics-in extensible-geant">
  144. <tbody></tbody>
  145. </table>
  146. </div>
  147. </div>
  148. </div>
  149. <dialog id="statistics_table_modal" class="statistics-table-modal">
  150. <div class="statistics-table-modal-header"><button class="button-modal" onclick="closeStatisticsTableModal()"><img alt="Close" src="style/close.svg"></button></div>
  151. <div class="statistics-table-modal-container">
  152. <div id="statistics_table_modal_content" class="statistics-table-modal-content"></div>
  153. </div>
  154. </dialog>
  155. <script>
  156. function openStatisticsTableModal () {
  157. const statsTable = document.getElementById("stats");
  158. const statsTableModal = document.getElementById("statistics_table_modal");
  159. const fullScreenButton = document.getElementById("statistics_full_screen");
  160. fullScreenButton.disabled = true;
  161. if (typeof statsTableModal.showModal === "function") {
  162. const statsTableModalContent = document.getElementById("statistics_table_modal_content");
  163. statsTableModalContent.innerHTML = "";
  164. statsTableModalContent.appendChild(statsTable);
  165. statsTableModal.showModal();
  166. statsTableModal.addEventListener("close", function () {
  167. const container = document.getElementById("statistics_table_container");
  168. container.appendChild(statsTable);
  169. fullScreenButton.disabled = false;
  170. });
  171. } else {
  172. const incompatibleBrowserVersionMessage = document.createElement("div");
  173. incompatibleBrowserVersionMessage.innerText = "Sorry, the <dialog> API is not supported by this browser.";
  174. statsTable.insertBefore(incompatibleBrowserVersionMessage, statsTable.children[0]);
  175. }
  176. }
  177. function closeStatisticsTableModal () {
  178. const statsTableModal = document.getElementById("statistics_table_modal");
  179. statsTableModal.close();
  180. }
  181. </script>
  182. <div class="statistics extensible-geant collapsed">
  183. <div class="title">
  184. Errors
  185. </div>
  186. <table id="container_errors" class="statistics-in extensible-geant">
  187. <thead>
  188. <tr>
  189. <th id="error-col-1" class="header sortable"><span>Error</span></th>
  190. <th id="error-col-2" class="header sortable"><span>Count</span></th>
  191. <th id="error-col-3" class="header sortable"><span>Percentage</span></th>
  192. </tr>
  193. </thead>
  194. <tbody>
  195. <tr>
  196. <td class="error-col-1 total ko">j.n.SocketException: No buffer space available (maximum connections reached?): connect<span class="value" style="display:none">0</span></td>
  197. <td class="value error-col-2 total ko">14681</td>
  198. <td class="value error-col-3 total ko">53.24%</td>
  199. </tr>
  200. <tr>
  201. <td class="error-col-1 total ko">i.n.c.ConnectTimeoutException: connection timed out after 10000 ms: ecomm.gatling.io/18.164.246.111:443<span class="value" style="display:none">1</span></td>
  202. <td class="value error-col-2 total ko">2664</td>
  203. <td class="value error-col-3 total ko">9.66%</td>
  204. </tr>
  205. <tr>
  206. <td class="error-col-1 total ko">i.n.c.ConnectTimeoutException: connection timed out after 10000 ms: ecomm.gatling.io/18.164.246.56:443<span class="value" style="display:none">2</span></td>
  207. <td class="value error-col-2 total ko">2658</td>
  208. <td class="value error-col-3 total ko">9.64%</td>
  209. </tr>
  210. <tr>
  211. <td class="error-col-1 total ko">i.n.c.ConnectTimeoutException: connection timed out after 10000 ms: ecomm.gatling.io/18.164.246.48:443<span class="value" style="display:none">3</span></td>
  212. <td class="value error-col-2 total ko">2613</td>
  213. <td class="value error-col-3 total ko">9.48%</td>
  214. </tr>
  215. <tr>
  216. <td class="error-col-1 total ko">i.n.c.ConnectTimeoutException: connection timed out after 10000 ms: ecomm.gatling.io/18.164.246.108:443<span class="value" style="display:none">4</span></td>
  217. <td class="value error-col-2 total ko">2605</td>
  218. <td class="value error-col-3 total ko">9.45%</td>
  219. </tr>
  220. <tr>
  221. <td class="error-col-1 total ko">j.n.BindException: Address already in use: getsockopt<span class="value" style="display:none">5</span></td>
  222. <td class="value error-col-2 total ko">1773</td>
  223. <td class="value error-col-3 total ko">6.43%</td>
  224. </tr>
  225. <tr>
  226. <td class="error-col-1 total ko">i.n.h.s.SslHandshakeTimeoutException: handshake timed out after 10000ms<span class="value" style="display:none">6</span></td>
  227. <td class="value error-col-2 total ko">196</td>
  228. <td class="value error-col-3 total ko">0.71%</td>
  229. </tr>
  230. <tr>
  231. <td class="error-col-1 total ko">Request timeout to ecomm.gatling.io/18.164.246.56:443 after 60000 ms<span class="value" style="display:none">7</span></td>
  232. <td class="value error-col-2 total ko">106</td>
  233. <td class="value error-col-3 total ko">0.38%</td>
  234. </tr>
  235. <tr>
  236. <td class="error-col-1 total ko">Request timeout to ecomm.gatling.io/18.164.246.48:443 after 60000 ms<span class="value" style="display:none">8</span></td>
  237. <td class="value error-col-2 total ko">96</td>
  238. <td class="value error-col-3 total ko">0.35%</td>
  239. </tr>
  240. <tr>
  241. <td class="error-col-1 total ko">Request timeout to ecomm.gatling.io/18.164.246.108:443 after 60000 ms<span class="value" style="display:none">9</span></td>
  242. <td class="value error-col-2 total ko">93</td>
  243. <td class="value error-col-3 total ko">0.34%</td>
  244. </tr>
  245. <tr>
  246. <td class="error-col-1 total ko">Request timeout to ecomm.gatling.io/18.164.246.111:443 after 60000 ms<span class="value" style="display:none">10</span></td>
  247. <td class="value error-col-2 total ko">91</td>
  248. <td class="value error-col-3 total ko">0.33%</td>
  249. </tr>
  250. </tbody>
  251. </table>
  252. </div>
  253. <div class="schema geant">
  254. <div id="active_users" class="geant"></div>
  255. </div>
  256. <div class="schema geant">
  257. <div id="responsetimeDistributionContainer" class="geant"></div>
  258. </div>
  259. <div class="schema geant">
  260. <div id="responsetimepercentilesovertimeokPercentilesContainer" class="geant"></div>
  261. </div>
  262. <div class="schema geant">
  263. <div id="requests" class="geant"></div>
  264. </div>
  265. <div class="schema geant">
  266. <div id="responses" class="geant"></div>
  267. </div>
  268. </div>
  269. </div>
  270. </div>
  271. </div>
  272. </div>
  273. </div>
  274. <script>
  275. var pageStats = stats.stats;
  276. $(document).ready(function() {
  277. $('.simulation-tooltip').popover({trigger:'hover', placement:'left'});
  278. setDetailsLinkUrl();
  279. setGlobalMenu();
  280. setActiveMenu();
  281. fillStats(pageStats);
  282. Highcharts.setOptions({
  283. global: { useUTC: false }
  284. });
  285. var rangesChart = new Highcharts.Chart({
  286. chart: {
  287. renderTo: 'ranges',
  288. marginRight: 100
  289. },
  290. credits: { enabled: false },
  291. legend: { enabled: false },
  292. title: { text: 'A title to let highcharts reserve the place for the title set later' },
  293. xAxis: {
  294. categories: [
  295. pageStats.group1.htmlName,
  296. pageStats.group2.htmlName,
  297. pageStats.group3.htmlName,
  298. pageStats.group4.htmlName
  299. ]
  300. },
  301. yAxis: {
  302. title: { text: 'Number of Requests' },
  303. reversedStacks: false
  304. },
  305. tooltip: {
  306. formatter: function() {
  307. var s;
  308. if (this.point.name) { // the pie chart
  309. s = ''+ this.point.name +': '+ this.y +'% requests';
  310. } else {
  311. s = ''+ this.y + ' requests';
  312. }
  313. return s;
  314. }
  315. },
  316. plotOptions: {
  317. series: {
  318. stacking: 'normal',
  319. shadow: true
  320. }
  321. },
  322. series: [
  323. {
  324. type: 'column',
  325. data: [{
  326. color: '#68b65c',
  327. y: pageStats.group1.count
  328. },
  329. {
  330. color: '#FFDD00',
  331. y: pageStats.group2.count
  332. },
  333. {
  334. color: '#FFA900',
  335. y: pageStats.group3.count
  336. },
  337. {
  338. color: '#f15b4f',
  339. y: pageStats.group4.count
  340. }]
  341. },
  342. {
  343. type: 'pie',
  344. name: 'Percentages',
  345. data: [
  346. {
  347. name: pageStats.group1.name,
  348. y: pageStats.group1.percentage,
  349. color: '#68b65c'
  350. },
  351. {
  352. name: pageStats.group2.name,
  353. y: pageStats.group2.percentage,
  354. color: '#FFDD00'
  355. },
  356. {
  357. name: pageStats.group3.name,
  358. y: pageStats.group3.percentage,
  359. color: '#FFA900'
  360. },
  361. {
  362. name: pageStats.group4.name,
  363. y: pageStats.group4.percentage,
  364. color: '#f15b4f'
  365. }
  366. ],
  367. center: [345, 0],
  368. size: 90,
  369. showInLegend: false,
  370. dataLabels: { enabled: false }
  371. }
  372. ]
  373. });
  374. rangesChart.setTitle({
  375. text: '<span class="chart_title">Response Time Ranges</span>',
  376. useHTML: true
  377. });
  378. function numberOfRequestsDataForGroup(group) {
  379. var data = {names: [], oks: [], kos: []};
  380. $.each(group.contents, function(contentName, content) {
  381. if (content.type == 'GROUP') {
  382. var result = numberOfRequestsDataForGroup(content);
  383. data.names = data.names.concat(result.names);
  384. data.oks = data.oks.concat(result.oks);
  385. data.kos = data.kos.concat(result.kos);
  386. }
  387. else if (content.type == 'REQUEST') {
  388. data.names.push(content.path);
  389. data.oks.push(parseInt(content.stats.numberOfRequests.ok));
  390. data.kos.push(parseInt(content.stats.numberOfRequests.ko));
  391. }
  392. });
  393. return data;
  394. }
  395. var numberOfRequestsData = numberOfRequestsDataForGroup(stats);
  396. var tickInterval = Math.ceil(numberOfRequestsData.names.length / 1000);
  397. new Highcharts.Chart({
  398. chart: {
  399. renderTo:'container_number_of_requests',
  400. polar:true,
  401. type:'column',
  402. height:330
  403. },
  404. credits:{
  405. enabled:false
  406. },
  407. title:{
  408. text:'<span class="chart_title">Number of requests</span>',
  409. useHTML: true,
  410. widthAdjust:-20
  411. },
  412. xAxis:{
  413. tickmarkPlacement:'on',
  414. tickInterval: tickInterval,
  415. categories:numberOfRequestsData.names,
  416. labels:{ enabled:false }
  417. },
  418. yAxis:{
  419. min:0,
  420. reversedStacks: false
  421. },
  422. plotOptions:{
  423. series:{
  424. stacking:'normal',
  425. groupPadding:0,
  426. pointPlacement:'on',
  427. shadow: true
  428. }
  429. },
  430. legend: {
  431. borderWidth: 0,
  432. itemStyle: { fontWeight: "normal" },
  433. symbolRadius: 0
  434. },
  435. series:[
  436. {
  437. name:'OK',
  438. data:numberOfRequestsData.oks,
  439. color:"#68b65c"
  440. },
  441. {
  442. name:'KO',
  443. data:numberOfRequestsData.kos,
  444. color:"#f15b4f"
  445. }
  446. ]
  447. });
  448. $('#container_exceptions').sortable('#container_exceptions');
  449. function generateHtmlRow(request, level, index, parent, group) {
  450. if (request.name == 'All Requests')
  451. var url = 'index.html';
  452. else
  453. var url = request.pathFormatted + '.html';
  454. if (group)
  455. var expandButtonStyle = '';
  456. else
  457. var expandButtonStyle = ' hidden';
  458. if (request.stats.numberOfRequests.total != 0)
  459. var koPercent = (request.stats.numberOfRequests.ko * 100 / request.stats.numberOfRequests.total).toFixed(2);
  460. else
  461. var koPercent = '-'
  462. return '<tr id="' + request.pathFormatted + '" data-parent=' + parent + '> \
  463. <td class="total col-1"> \
  464. <div class="expandable-container"> \
  465. <span id="' + request.pathFormatted + '" style="margin-left: ' + (level * 10) + 'px;" class="expand-button' + expandButtonStyle + '">&nbsp;</span> \
  466. <a href="' + url +'" class="withTooltip">' + ellipsedLabel({ name: request.name, parentClass: "table-cell-tooltip" }) + '</a><span class="value" style="display:none;">' + index + '</span> \
  467. </div> \
  468. </td> \
  469. <td class="value total col-2">' + request.stats.numberOfRequests.total + '</td> \
  470. <td class="value ok col-3">' + request.stats.numberOfRequests.ok + '</td> \
  471. <td class="value ko col-4">' + request.stats.numberOfRequests.ko + '</td> \
  472. <td class="value ko col-5">' + koPercent + '</td> \
  473. <td class="value total col-6">' + request.stats.meanNumberOfRequestsPerSecond.total + '</td> \
  474. <td class="value total col-7">' + request.stats.minResponseTime.total + '</td> \
  475. <td class="value total col-8">' + request.stats.percentiles1.total + '</td> \
  476. <td class="value total col-9">' + request.stats.percentiles2.total + '</td> \
  477. <td class="value total col-10">' + request.stats.percentiles3.total + '</td> \
  478. <td class="value total col-11">' + request.stats.percentiles4.total + '</td> \
  479. <td class="value total col-12">' + request.stats.maxResponseTime.total + '</td> \
  480. <td class="value total col-13">' + request.stats.meanResponseTime.total + '</td> \
  481. <td class="value total col-14">' + request.stats.standardDeviation.total + '</td> \
  482. </tr>';
  483. }
  484. function generateHtmlRowsForGroup(group, level, index, parent) {
  485. var buffer = '';
  486. if (!parent)
  487. parent = 'ROOT';
  488. else {
  489. buffer += generateHtmlRow(group, level - 1, index, parent, true);
  490. index++;
  491. parent = group.pathFormatted;
  492. }
  493. $.each(group.contents, function(contentName, content) {
  494. if (content.type == 'GROUP') {
  495. var result = generateHtmlRowsForGroup(content, level + 1, index, parent);
  496. buffer += result.html;
  497. index = result.index;
  498. }
  499. else if (content.type == 'REQUEST') {
  500. buffer += generateHtmlRow(content, level, index, parent);
  501. index++;
  502. }
  503. });
  504. return { html: buffer, index: index };
  505. }
  506. $('#container_statistics_head tbody').append(generateHtmlRow(stats, 0, 0));
  507. var lines = generateHtmlRowsForGroup(stats, 0, 0);
  508. $('#container_statistics_body tbody').append(lines.html);
  509. $('#container_statistics_head').sortable('#container_statistics_body');
  510. $('.statistics').expandable();
  511. if (lines.index < 30) {
  512. $('#statistics_title span').attr('style', 'display: none;');
  513. } else {
  514. $('#statistics_title').addClass('title_collapsed');
  515. $('#statistics_title').click(function() {
  516. $('#toggle-stats').toggleClass("off");
  517. $(this).toggleClass('title_collapsed').toggleClass('title_expanded');
  518. $('#container_statistics_body').parent().toggleClass('scrollable').toggleClass('');
  519. });
  520. }
  521. $('.table-cell-tooltip').popover({trigger:'hover'});
  522. $('#container_errors').sortable('#container_errors');
  523. allUsersData.yAxis = 0;
  524. var allUsersChart = new Highcharts.StockChart({
  525. chart: {
  526. renderTo: 'active_users',
  527. zoomType: 'x'
  528. },
  529. credits: { enabled: false },
  530. legend: {
  531. enabled: true,
  532. floating: true,
  533. align: 'right',
  534. verticalAlign: 'top',
  535. layout: 'vertical',
  536. borderWidth: 0,
  537. itemStyle: { fontWeight: "normal" },
  538. symbolRadius: 0
  539. },
  540. title: { text: 'A title to let highcharts reserve the place for the title set later' },
  541. navigator: {
  542. maskInside: false
  543. },
  544. rangeSelector: {
  545. buttonSpacing: 0,
  546. buttonTheme: {
  547. fill: '#CFC9C6',
  548. padding: 1,
  549. stroke: '#000000',
  550. 'stroke-width': 0.25,
  551. style: {
  552. color: '#000000',
  553. fontWeight: 'bold',
  554. },
  555. states: {
  556. stroke: '#000000',
  557. 'stroke-width': 0.25,
  558. hover: {
  559. fill: '#92918C',
  560. style: { color: 'black' }
  561. },
  562. select: {
  563. fill: '#FFA900',
  564. style: { color: 'white' }
  565. }
  566. }
  567. },
  568. buttons : [
  569. {
  570. type : 'minute',
  571. count : 1,
  572. text : '1m'
  573. }, {
  574. type : 'minute',
  575. count : 10,
  576. text : '10m'
  577. }, {
  578. type : 'hour',
  579. count : 1,
  580. text : '1h'
  581. }, {
  582. type : 'all',
  583. count : 1,
  584. text : 'All'
  585. }
  586. ],
  587. selected : 3,
  588. inputEnabled : false
  589. },
  590. xAxis: {
  591. type: 'datetime',
  592. ordinal: false,
  593. maxZoom: 10000 // three days
  594. },
  595. yAxis: {
  596. title: { text: 'Number of Active Users' },
  597. opposite: false,
  598. min: 0
  599. },
  600. series: [
  601. {
  602. color: '#5E7BE2',
  603. name: 'Product Page Load Test Scenario',
  604. data: [
  605. [1744367146000,2996],[1744367147000,5231],[1744367148000,10993],[1744367149000,15338],[1744367150000,18002],[1744367151000,21834],[1744367152000,25000],[1744367153000,25000],[1744367154000,24999],[1744367155000,22190],[1744367156000,18295],[1744367157000,15179],[1744367158000,14245],[1744367159000,13783],[1744367160000,13631],[1744367161000,13397],[1744367162000,13038],[1744367163000,12870],[1744367164000,12754],[1744367165000,12620],[1744367166000,12534],[1744367167000,11977],[1744367168000,11800],[1744367169000,11643],[1744367170000,11408],[1744367171000,11272],[1744367172000,11005],[1744367173000,10923],[1744367174000,10856],[1744367175000,10732],[1744367176000,10689],[1744367177000,10514],[1744367178000,10219],[1744367179000,9874],[1744367180000,9360],[1744367181000,9020],[1744367182000,8315],[1744367183000,8135],[1744367184000,8048],[1744367185000,7973],[1744367186000,7951],[1744367187000,7893],[1744367188000,7267],[1744367189000,5288],[1744367190000,2969],[1744367191000,2755],[1744367192000,2038],[1744367193000,1932],[1744367194000,1882],[1744367195000,1839],[1744367196000,1799],[1744367197000,1757],[1744367198000,1668],[1744367199000,1563],[1744367200000,1513],[1744367201000,1486],[1744367202000,1451],[1744367203000,1388],[1744367204000,1349],[1744367205000,1292],[1744367206000,1262],[1744367207000,1240],[1744367208000,1204],[1744367209000,1163],[1744367210000,1121],[1744367211000,1064],[1744367212000,996],[1744367213000,929],[1744367214000,875],[1744367215000,792],[1744367216000,686],[1744367217000,502],[1744367218000,313],[1744367219000,243],[1744367220000,212],[1744367221000,186],[1744367222000,156],[1744367223000,128],[1744367224000,106],[1744367225000,91],[1744367226000,75],[1744367227000,61],[1744367228000,48],[1744367229000,39],[1744367230000,36],[1744367231000,31],[1744367232000,28],[1744367233000,25],[1744367234000,21],[1744367235000,19],[1744367236000,17],[1744367237000,14],[1744367238000,10],[1744367239000,8],[1744367240000,6],[1744367241000,2],[1744367242000,1],[1744367243000,1],[1744367244000,1],[1744367245000,1]
  606. ],
  607. tooltip: { yDecimals: 0, ySuffix: '', valueDecimals: 0 }},
  608. allUsersData
  609. ]
  610. });
  611. allUsersChart.setTitle({
  612. text: '<span class="chart_title">Active Users along the Simulation</span>',
  613. useHTML: true
  614. });
  615. allUsersData.yAxis = 1;
  616. var responsetimeDistributionChart = new Highcharts.Chart({
  617. chart: {
  618. renderTo: 'responsetimeDistributionContainer',
  619. type: 'column',
  620. marginBottom: 60
  621. },
  622. credits: { enabled: false },
  623. legend: {
  624. enabled: true,
  625. floating: true,
  626. y: 5,
  627. borderWidth: 0,
  628. itemStyle: { fontWeight: "normal" },
  629. symbolRadius: 0
  630. },
  631. title: { text: 'A title to let highcharts reserve the place for the title set later' },
  632. navigator: {
  633. maskInside: false
  634. },
  635. xAxis: {
  636. categories: ['300', '900', '1500', '2101', '2701', '3301', '3901', '4501', '5101', '5702', '6302', '6902', '7502', '8102', '8702', '9302', '9903', '10503', '11103', '11703', '12303', '12903', '13504', '14104', '14704', '15304', '15904', '16504', '17105', '17705', '18305', '18905', '19505', '20105', '20706', '21306', '21906', '22506', '23106', '23706', '24306', '24907', '25507', '26107', '26707', '27307', '27907', '28508', '29108', '29708', '30308', '30908', '31508', '32109', '32709', '33309', '33909', '34509', '35109', '35710', '36310', '36910', '37510', '38110', '38710', '39310', '39911', '40511', '41111', '41711', '42311', '42911', '43512', '44112', '44712', '45312', '45912', '46512', '47113', '47713', '48313', '48913', '49513', '50113', '50714', '51314', '51914', '52514', '53114', '53714', '54314', '54915', '55515', '56115', '56715', '57315', '57915', '58516', '59116', '59716'],
  637. tickInterval: 20
  638. },
  639. yAxis: {
  640. min: 0,
  641. title: { text: 'Percentage of Requests' },
  642. reversedStacks: false
  643. },
  644. tooltip: {
  645. formatter: function() {
  646. return '<b>'+ this.x +' ms</b><br/>'+
  647. this.series.name +': '+ this.y +' %<br/>'+
  648. 'Total: '+ this.point.stackTotal + ' %';
  649. }
  650. },
  651. plotOptions: {
  652. series: {
  653. groupPadding: 0,
  654. stacking: 'normal',
  655. shadow: true
  656. }
  657. },
  658. series: [
  659. {
  660. type: 'column',
  661. color: '#68b65c',
  662. name: 'OK',
  663. data: [
  664. 1.24,1.79,1.28,1.34,1.01,0.73,1.59,1.43,1.28,1.04,0.64,0.38,0.69,0.45,0.15,1.25,1.11,2.08,2.11,0.25,0.18,0.29,0.3,0.34,0.26,0.22,0.22,0.18,0.14,0.14,0.17,0.22,0.2,0.17,0.2,0.2,0.21,0.25,0.3,0.2,0.23,0.23,0.27,0.21,0.16,0.18,0.16,0.15,0.16,0.17,0.11,0.12,0.15,0.18,0.17,0.16,0.14,0.18,0.15,0.15,0.1,0.07,0.1,0.1,0.1,0.14,0.12,0.11,0.12,0.06,0.07,0.06,0.05,0.06,0.04,0.05,0.04,0.04,0.03,0.03,0.04,0.03,0.03,0.02,0.02,0.02,0.06,0.01,0.02,0.02,0.03,0.01,0.01,0.02,0.02,0.02,0.01,0.02,0.03,0.01
  665. ],
  666. tooltip: { yDecimals: 0, ySuffix: 'ms' }
  667. },
  668. {
  669. type: 'column',
  670. color: '#f15b4f',
  671. name: 'KO',
  672. data: [
  673. 5.61,1.86,0.6,0.45,3.95,6.11,2.81,6.1,4.0,0.72,0.96,0.91,1.26,0.22,0.11,0.05,0.33,1.98,0.53,0.14,0.26,0.18,0.23,0.48,0.38,0.21,0.0,0.15,0.03,0.06,0.0,0.0,0.0,1.11,1.55,0.29,0.33,0.62,0.16,0.02,0.0,0.1,0.01,0.04,0.03,0.08,0.0,0.02,0.01,0.07,2.62,1.39,0.44,1.1,0.52,0.01,0.0,0.0,0.06,0.01,0.01,0.0,0.0,0.0,0.0,0.0,1.25,11.44,0.97,0.24,1.21,0.04,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.02,0.01,0.01,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.95
  674. ],
  675. tooltip: { yDecimals: 0, ySuffix: 'ms' }
  676. }
  677. ]
  678. });
  679. responsetimeDistributionChart.setTitle({
  680. text: '<span class="chart_title">Response Time Distribution</span>',
  681. useHTML: true
  682. });
  683. var responsetimepercentilesovertimeokPercentiles = unpack([[1744367146,[1584,5810,9122,10277,10389,10471,10904,11329,23808,43154]],[1744367147,[5597,10214,10518,11086,11128,11183,11284,13726,36944,43346]],[1744367148,[2257,15255,23131,31454,32571,34055,38842,40544,49831,52507]],[1744367149,[4089,14962,22793,31646,33152,34637,37235,40214,46723,59734]],[1744367150,[1845,10134,19201,26519,28429,32783,35415,39916,43521,51659]],[1744367151,[1452,3752,4520,15954,21255,24472,26706,32958,41730,51918]],[1744367152,[550,2592,4107,4564,4593,11079,17207,24561,33835,36259]],[1744367153,[564,4844,4863,4893,4895,4897,4918,8580,22302,24298]],[1744367154,[15,1062,1097,1526,1535,8115,20450,26434,44162,50900]],[1744367155,[56,986,1815,2618,2619,2619,2620,2620,15894,22259]],[1744367156,[78,2318,3212,6064,6767,9418,18822,26272,57611,59895]],[1744367157,[456,3894,5250,9766,13145,19008,23797,32519,50939,59355]],[1744367158,[188,2722,3831,6353,11247,18762,26238,40724,57178,59831]],[1744367159,[278,854,2240,21387,24094,32433,38857,47941,58306,59056]],[1744367160,[168,560,2051,20872,23048,24349,31510,39045,52940,52940]],[1744367161,[277,438,2242,22193,33017,34986,36473,49341,54840,54840]],[1744367162,[139,322,2407,22643,31736,32144,38566,51629,53010,53010]],[1744367163,[164,833,2158,13710,18507,24284,34571,51484,58958,59358]],[1744367164,[174,588,3912,16763,19158,24046,31987,46333,56611,59521]],[1744367165,[104,1158,4010,16224,19583,27633,38208,50848,58173,58842]],[1744367166,[415,1579,7520,19224,27479,33669,48324,50539,57249,57249]],[1744367167,[446,2174,8831,23353,27858,34215,47040,52798,57860,58438]],[1744367168,[445,3147,13761,32243,35797,40813,45656,54098,57400,58217]],[1744367169,[420,2769,21390,40086,42832,45323,47308,50647,54946,57508]],[1744367170,[291,1400,12427,34382,40760,42692,45487,50613,58329,58471]],[1744367171,[302,1609,17583,35730,39248,41821,46422,48756,54798,59234]],[1744367172,[414,1910,11982,34852,38858,40868,42820,45085,54325,55092]],[1744367173,[415,2071,11632,30991,35146,39790,41913,45173,54181,54273]],[1744367174,[437,2411,10696,33098,35651,37952,39710,45218,52027,55790]],[1744367175,[300,1899,12856,35179,35994,39167,40993,49718,53791,59320]],[1744367176,[309,2132,12851,28782,33344,35404,38859,43065,58914,59471]],[1744367177,[314,1253,11810,25606,31383,34503,37728,43681,49690,54314]],[1744367178,[315,1978,13551,31807,33491,35653,37274,38217,43509,46107]],[1744367179,[300,1933,19788,33322,34991,36410,37199,40467,48573,58124]],[1744367180,[309,971,18014,30349,31989,35345,36695,41686,51605,54139]],[1744367181,[174,969,15879,31186,32520,35252,38624,41075,47330,58343]],[1744367182,[190,941,18238,28862,30390,31861,33784,36492,41169,41473]],[1744367183,[176,921,7494,27537,29885,32113,35585,38047,43954,56035]],[1744367184,[290,1624,11852,28066,31010,31901,36172,41997,55981,58292]],[1744367185,[450,2077,11951,24972,27241,28797,30519,32216,51690,51690]],[1744367186,[315,3709,19141,28854,29415,32187,34568,38674,53448,53448]],[1744367187,[306,4230,14134,26642,27442,28352,29272,38050,53471,53471]],[1744367188,[550,3935,13074,24966,26913,27995,29801,37733,50426,50426]],[1744367189,[550,3944,18847,24812,25521,26546,27369,30289,34132,34132]],[1744367190,[428,4205,17449,23568,25572,26119,28218,32371,38249,38249]],[1744367191,[581,2039,18900,21982,22357,23267,25238,28832,35952,35952]],[1744367192,[313,2404,13892,21362,22152,23211,24829,25911,30111,30111]],[1744367193,[952,1931,20056,22838,23891,24443,26488,27474,28841,28841]],[1744367194,[865,3964,13671,16512,17081,17081,23248,23248,23248,23248]],[1744367195,[4956,5918,8232,8993,8993,26216,26216,26216,26216,26216]],[1744367196,[2123,2123,18915,18953,18953,18953,18953,18953,18953,18953]],[1744367197,[691,5343,17409,25267,27232,27232,29832,29908,29908,29908]],[1744367198,[1511,2477,11857,20184,20184,25584,25584,25584,25584,25584]],[1744367199,null],[1744367200,[2994,5757,11935,14273,14273,20059,20059,20059,20059,20059]],[1744367201,[2219,2219,14721,14757,14757,14757,14757,14757,14757,14757]],[1744367202,null],[1744367203,[7753,7753,16061,16145,16145,16145,16145,16145,16145,16145]],[1744367204,null],[1744367205,null],[1744367206,null],[1744367207,null],[1744367208,[2066,2066,3140,5274,5274,5274,5274,5274,5274,5274]],[1744367209,[3357,3357,4099,4562,4562,4562,4562,4562,4562,4562]],[1744367210,null],[1744367211,null],[1744367212,null],[1744367213,null],[1744367214,null],[1744367215,null],[1744367216,null],[1744367217,null],[1744367218,null],[1744367219,null],[1744367220,null],[1744367221,null],[1744367222,null],[1744367223,null],[1744367224,null],[1744367225,null],[1744367226,null],[1744367227,null],[1744367228,null],[1744367229,null],[1744367230,null],[1744367231,null],[1744367232,null],[1744367233,null],[1744367234,null],[1744367235,null],[1744367236,null],[1744367237,null],[1744367238,null],[1744367239,null],[1744367240,null],[1744367241,null],[1744367242,null],[1744367243,null],[1744367244,null],[1744367245,null]]);
  684. var responsetimepercentilesovertimeokPercentilesChart = new Highcharts.StockChart({
  685. chart: {
  686. renderTo: 'responsetimepercentilesovertimeokPercentilesContainer',
  687. zoomType: 'x',
  688. marginBottom: 60
  689. },
  690. colors: ['#c4fd90', '#7ff77f', '#6ff2ad', '#61ede6', '#58c7e0', '#4ea1d4', '#487ad9', '#3f52cc', '#7335dc', '#c73905', '#FFA900'],
  691. credits: { enabled: false },
  692. legend: {
  693. enabled: true,
  694. floating: true,
  695. y: -65,
  696. borderWidth: 0,
  697. itemStyle: { fontWeight: "normal" },
  698. symbolRadius: 0
  699. },
  700. title: { text: 'A title to let highcharts reserve the place for the title set later' },
  701. navigator: {
  702. maskInside: false,
  703. baseSeries: 9
  704. },
  705. rangeSelector: {
  706. rangeSelector: { align: "left" },
  707. buttonSpacing: 0,
  708. buttonTheme: {
  709. fill: '#CFC9C6',
  710. padding: 1,
  711. stroke: '#000000',
  712. 'stroke-width': 0.25,
  713. style: {
  714. color: '#000000',
  715. fontWeight: 'bold',
  716. },
  717. states: {
  718. stroke: '#92918C',
  719. 'stroke-width': 0.25,
  720. hover: {
  721. fill: '#92918C',
  722. style: { color: 'black' }
  723. },
  724. select: {
  725. fill: '#FFA900',
  726. style: { color: 'white' }
  727. }
  728. }
  729. },
  730. buttons : [
  731. {
  732. type : 'minute',
  733. count : 1,
  734. text : '1m'
  735. }, {
  736. type : 'minute',
  737. count : 10,
  738. text : '10m'
  739. }, {
  740. type : 'hour',
  741. count : 1,
  742. text : '1h'
  743. }, {
  744. type : 'all',
  745. count : 1,
  746. text : 'All'
  747. }
  748. ],
  749. selected : 3,
  750. inputEnabled : false
  751. },
  752. xAxis: {
  753. type: 'datetime',
  754. ordinal: false,
  755. maxZoom: 10000 // three days
  756. },
  757. yAxis:[
  758. {
  759. min: 0,
  760. title: { text: 'Response Time (ms)' },
  761. opposite: false
  762. }, {
  763. min: 0,
  764. title: {
  765. text: 'Active Users',
  766. style: { color: '#FFA900' }
  767. },
  768. opposite: true
  769. }
  770. ],
  771. plotOptions: {
  772. arearange: { lineWidth: 1 },
  773. series: {
  774. dataGrouping: { enabled: false }
  775. }
  776. },
  777. series: [
  778. {
  779. pointInterval: 1000,
  780. name: 'min',
  781. data: responsetimepercentilesovertimeokPercentiles[0],
  782. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  783. type : 'area',
  784. yAxis: 0,
  785. zIndex: 10
  786. },
  787. {
  788. pointInterval: 1000,
  789. name: '25%',
  790. data: responsetimepercentilesovertimeokPercentiles[1],
  791. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  792. type : 'area',
  793. yAxis: 0,
  794. zIndex: 9
  795. },
  796. {
  797. pointInterval: 1000,
  798. name: '50%',
  799. data: responsetimepercentilesovertimeokPercentiles[2],
  800. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  801. type : 'area',
  802. yAxis: 0,
  803. zIndex: 8
  804. },
  805. {
  806. pointInterval: 1000,
  807. name: '75%',
  808. data: responsetimepercentilesovertimeokPercentiles[3],
  809. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  810. type : 'area',
  811. yAxis: 0,
  812. zIndex: 7
  813. },
  814. {
  815. pointInterval: 1000,
  816. name: '80%',
  817. data: responsetimepercentilesovertimeokPercentiles[4],
  818. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  819. type : 'area',
  820. yAxis: 0,
  821. zIndex: 6
  822. },
  823. {
  824. pointInterval: 1000,
  825. name: '85%',
  826. data: responsetimepercentilesovertimeokPercentiles[5],
  827. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  828. type : 'area',
  829. yAxis: 0,
  830. zIndex: 5
  831. },
  832. {
  833. pointInterval: 1000,
  834. name: '90%',
  835. data: responsetimepercentilesovertimeokPercentiles[6],
  836. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  837. type : 'area',
  838. yAxis: 0,
  839. zIndex: 4
  840. },
  841. {
  842. pointInterval: 1000,
  843. name: '95%',
  844. data: responsetimepercentilesovertimeokPercentiles[7],
  845. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  846. type : 'area',
  847. yAxis: 0,
  848. zIndex: 3
  849. },
  850. {
  851. pointInterval: 1000,
  852. name: '99%',
  853. data: responsetimepercentilesovertimeokPercentiles[8],
  854. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  855. type : 'area',
  856. yAxis: 0,
  857. zIndex: 2
  858. },
  859. {
  860. pointInterval: 1000,
  861. name: 'max',
  862. data: responsetimepercentilesovertimeokPercentiles[9],
  863. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  864. type : 'area',
  865. yAxis: 0,
  866. zIndex: 1
  867. },
  868. allUsersData
  869. ]
  870. });
  871. responsetimepercentilesovertimeokPercentilesChart.setTitle({
  872. text: '<span class="chart_title chart_title_">Response Time Percentiles over Time (OK)</span>',
  873. useHTML: true
  874. });
  875. var requests = unpack([[1744367146,[2142,2043,99]],[1744367147,[2226,1584,642]],[1744367148,[3388,285,3103]],[1744367149,[5661,862,4799]],[1744367150,[3005,354,2651]],[1744367151,[5224,499,4725]],[1744367152,[4129,309,3820]],[1744367153,[1547,148,1399]],[1744367154,[714,282,432]],[1744367155,[339,115,224]],[1744367156,[1665,537,1128]],[1744367157,[3080,968,2112]],[1744367158,[2488,862,1626]],[1744367159,[222,108,114]],[1744367160,[72,45,27]],[1744367161,[63,49,14]],[1744367162,[51,34,17]],[1744367163,[519,359,160]],[1744367164,[258,192,66]],[1744367165,[246,171,75]],[1744367166,[114,88,26]],[1744367167,[114,101,13]],[1744367168,[171,150,21]],[1744367169,[195,170,25]],[1744367170,[207,158,49]],[1744367171,[216,186,30]],[1744367172,[243,194,49]],[1744367173,[189,168,21]],[1744367174,[168,159,9]],[1744367175,[168,140,28]],[1744367176,[156,143,13]],[1744367177,[138,134,4]],[1744367178,[111,108,3]],[1744367179,[108,104,4]],[1744367180,[108,102,6]],[1744367181,[147,139,8]],[1744367182,[114,110,4]],[1744367183,[156,147,9]],[1744367184,[108,101,7]],[1744367185,[87,85,2]],[1744367186,[66,64,2]],[1744367187,[84,80,4]],[1744367188,[96,94,2]],[1744367189,[78,78,0]],[1744367190,[75,74,1]],[1744367191,[54,54,0]],[1744367192,[36,34,2]],[1744367193,[24,23,1]],[1744367194,[9,9,0]],[1744367195,[6,6,0]],[1744367196,[3,3,0]],[1744367197,[15,15,0]],[1744367198,[6,6,0]],[1744367199,[0,0,0]],[1744367200,[6,6,0]],[1744367201,[3,3,0]],[1744367202,[0,0,0]],[1744367203,[3,3,0]],[1744367204,[0,0,0]],[1744367205,[0,0,0]],[1744367206,[0,0,0]],[1744367207,[0,0,0]],[1744367208,[3,3,0]],[1744367209,[3,3,0]],[1744367210,[0,0,0]],[1744367211,[0,0,0]],[1744367212,[0,0,0]],[1744367213,[0,0,0]],[1744367214,[0,0,0]],[1744367215,[0,0,0]],[1744367216,[0,0,0]],[1744367217,[0,0,0]],[1744367218,[0,0,0]],[1744367219,[0,0,0]],[1744367220,[0,0,0]],[1744367221,[0,0,0]],[1744367222,[0,0,0]],[1744367223,[0,0,0]],[1744367224,[0,0,0]],[1744367225,[0,0,0]],[1744367226,[0,0,0]],[1744367227,[0,0,0]],[1744367228,[0,0,0]],[1744367229,[0,0,0]],[1744367230,[0,0,0]],[1744367231,[0,0,0]],[1744367232,[0,0,0]],[1744367233,[0,0,0]],[1744367234,[0,0,0]],[1744367235,[0,0,0]],[1744367236,[0,0,0]],[1744367237,[0,0,0]],[1744367238,[0,0,0]],[1744367239,[0,0,0]],[1744367240,[0,0,0]],[1744367241,[0,0,0]],[1744367242,[0,0,0]],[1744367243,[0,0,0]],[1744367244,[0,0,0]],[1744367245,[0,0,0]]]);
  876. var requestsChart = new Highcharts.StockChart({
  877. chart: {
  878. renderTo: 'requests',
  879. zoomType: 'x',
  880. marginBottom: 60
  881. },
  882. credits: { enabled: false },
  883. legend: {
  884. enabled: true,
  885. floating: true,
  886. y: -65,
  887. borderWidth: 0,
  888. itemStyle: { fontWeight: "normal" },
  889. symbolRadius: 0
  890. },
  891. title: { text: 'A title to let highcharts reserve the place for the title set later' },
  892. navigator: {
  893. maskInside: false
  894. },
  895. rangeSelector: {
  896. buttonSpacing: 0,
  897. buttonTheme: {
  898. fill: '#CFC9C6',
  899. padding: 1,
  900. stroke: '#000000',
  901. 'stroke-width': 0.25,
  902. style: {
  903. color: '#000000',
  904. fontWeight: 'bold',
  905. },
  906. states: {
  907. stroke: '#000000',
  908. 'stroke-width': 0.25,
  909. hover: {
  910. fill: '#92918C',
  911. style: { color: 'black' }
  912. },
  913. select: {
  914. fill: '#FFA900',
  915. style: { color: 'white' }
  916. }
  917. }
  918. },
  919. buttons : [
  920. {
  921. type : 'minute',
  922. count : 1,
  923. text : '1m'
  924. }, {
  925. type : 'minute',
  926. count : 10,
  927. text : '10m'
  928. }, {
  929. type : 'hour',
  930. count : 1,
  931. text : '1h'
  932. }, {
  933. type : 'all',
  934. count : 1,
  935. text : 'All'
  936. }
  937. ],
  938. selected : 3,
  939. inputEnabled : false
  940. },
  941. plotOptions: {
  942. series: {
  943. dataGrouping: { enabled: false }
  944. },
  945. area: {
  946. stacking: 'normal'
  947. }
  948. },
  949. xAxis: {
  950. type: 'datetime',
  951. ordinal: false,
  952. maxZoom: 10000 // three days
  953. },
  954. yAxis:[
  955. {
  956. min: 0,
  957. title: { text: 'Number of requests' },
  958. opposite: false,
  959. reversedStacks: false
  960. }, {
  961. min: 0,
  962. title: {
  963. text: 'Active Users',
  964. style: { color: '#FFA900' }
  965. },
  966. opposite: true
  967. }
  968. ],
  969. series: [
  970. {
  971. color: '#5E7BE2',
  972. name: 'All',
  973. data: requests[0],
  974. tooltip: { yDecimals: 0, ySuffix: '', valueDecimals: 0 }
  975. ,type: 'area'},
  976. allUsersData
  977. ]
  978. });
  979. requestsChart.setTitle({
  980. text: '<span class="chart_title">Number of requests per second</span>',
  981. useHTML: true
  982. });
  983. var responses = unpack([[1744367146,[0,0,0]],[1744367147,[0,0,0]],[1744367148,[18,18,0]],[1744367149,[0,0,0]],[1744367150,[75,75,0]],[1744367151,[302,302,0]],[1744367152,[382,382,0]],[1744367153,[168,168,0]],[1744367154,[397,340,57]],[1744367155,[3981,469,3512]],[1744367156,[7462,861,6601]],[1744367157,[3122,1188,1934]],[1744367158,[4055,1154,2901]],[1744367159,[272,171,101]],[1744367160,[337,310,27]],[1744367161,[498,473,25]],[1744367162,[576,527,49]],[1744367163,[424,418,6]],[1744367164,[461,365,96]],[1744367165,[230,221,9]],[1744367166,[699,120,579]],[1744367167,[411,135,276]],[1744367168,[503,139,364]],[1744367169,[243,140,103]],[1744367170,[394,162,232]],[1744367171,[307,185,122]],[1744367172,[447,196,251]],[1744367173,[204,171,33]],[1744367174,[310,148,162]],[1744367175,[168,147,21]],[1744367176,[314,147,167]],[1744367177,[368,168,200]],[1744367178,[712,151,561]],[1744367179,[361,153,208]],[1744367180,[767,147,620]],[1744367181,[487,174,313]],[1744367182,[802,171,631]],[1744367183,[272,198,74]],[1744367184,[243,135,108]],[1744367185,[116,92,24]],[1744367186,[148,94,54]],[1744367187,[418,82,336]],[1744367188,[812,91,721]],[1744367189,[3707,92,3615]],[1744367190,[580,96,484]],[1744367191,[309,77,232]],[1744367192,[710,86,624]],[1744367193,[121,47,74]],[1744367194,[108,67,41]],[1744367195,[113,71,42]],[1744367196,[82,59,23]],[1744367197,[77,63,14]],[1744367198,[261,51,210]],[1744367199,[138,60,78]],[1744367200,[87,54,33]],[1744367201,[69,54,15]],[1744367202,[89,59,30]],[1744367203,[101,50,51]],[1744367204,[80,58,22]],[1744367205,[90,56,34]],[1744367206,[54,41,13]],[1744367207,[49,43,6]],[1744367208,[75,61,14]],[1744367209,[83,59,24]],[1744367210,[89,70,19]],[1744367211,[97,76,21]],[1744367212,[110,108,2]],[1744367213,[85,81,4]],[1744367214,[102,93,9]],[1744367215,[109,105,4]],[1744367216,[151,92,59]],[1744367217,[218,53,165]],[1744367218,[138,44,94]],[1744367219,[39,33,6]],[1744367220,[32,32,0]],[1744367221,[27,27,0]],[1744367222,[35,33,2]],[1744367223,[29,21,8]],[1744367224,[14,13,1]],[1744367225,[19,19,0]],[1744367226,[14,8,6]],[1744367227,[16,14,2]],[1744367228,[8,5,3]],[1744367229,[9,6,3]],[1744367230,[3,3,0]],[1744367231,[2,0,2]],[1744367232,[5,3,2]],[1744367233,[4,1,3]],[1744367234,[2,1,1]],[1744367235,[3,3,0]],[1744367236,[0,0,0]],[1744367237,[5,5,0]],[1744367238,[3,3,0]],[1744367239,[3,3,0]],[1744367240,[3,3,0]],[1744367241,[2,0,2]],[1744367242,[1,1,0]],[1744367243,[0,0,0]],[1744367244,[0,0,0]],[1744367245,[1,0,1]]]);
  984. var requestsChart = new Highcharts.StockChart({
  985. chart: {
  986. renderTo: 'responses',
  987. zoomType: 'x',
  988. marginBottom: 60
  989. },
  990. credits: { enabled: false },
  991. legend: {
  992. enabled: true,
  993. floating: true,
  994. y: -65,
  995. borderWidth: 0,
  996. itemStyle: { fontWeight: "normal" },
  997. symbolRadius: 0
  998. },
  999. title: { text: 'A title to let highcharts reserve the place for the title set later' },
  1000. navigator: {
  1001. maskInside: false
  1002. },
  1003. rangeSelector: {
  1004. buttonSpacing: 0,
  1005. buttonTheme: {
  1006. fill: '#CFC9C6',
  1007. padding: 1,
  1008. stroke: '#000000',
  1009. 'stroke-width': 0.25,
  1010. style: {
  1011. color: '#000000',
  1012. fontWeight: 'bold',
  1013. },
  1014. states: {
  1015. stroke: '#000000',
  1016. 'stroke-width': 0.25,
  1017. hover: {
  1018. fill: '#92918C',
  1019. style: { color: 'black' }
  1020. },
  1021. select: {
  1022. fill: '#FFA900',
  1023. style: { color: 'white' }
  1024. }
  1025. }
  1026. },
  1027. buttons : [
  1028. {
  1029. type : 'minute',
  1030. count : 1,
  1031. text : '1m'
  1032. }, {
  1033. type : 'minute',
  1034. count : 10,
  1035. text : '10m'
  1036. }, {
  1037. type : 'hour',
  1038. count : 1,
  1039. text : '1h'
  1040. }, {
  1041. type : 'all',
  1042. count : 1,
  1043. text : 'All'
  1044. }
  1045. ],
  1046. selected : 3,
  1047. inputEnabled : false
  1048. },
  1049. plotOptions: {
  1050. series: {
  1051. dataGrouping: { enabled: false }
  1052. },
  1053. area: {
  1054. stacking: 'normal'
  1055. }
  1056. },
  1057. xAxis: {
  1058. type: 'datetime',
  1059. ordinal: false,
  1060. maxZoom: 10000 // three days
  1061. },
  1062. yAxis:[
  1063. {
  1064. min: 0,
  1065. title: { text: 'Number of responses' },
  1066. opposite: false,
  1067. reversedStacks: false
  1068. }, {
  1069. min: 0,
  1070. title: {
  1071. text: 'Active Users',
  1072. style: { color: '#FFA900' }
  1073. },
  1074. opposite: true
  1075. }
  1076. ],
  1077. series: [
  1078. {
  1079. color: '#5E7BE2',
  1080. name: 'All',
  1081. data: responses[0],
  1082. tooltip: { yDecimals: 0, ySuffix: '', valueDecimals: 0 }
  1083. },
  1084. {
  1085. color: '#68b65c',
  1086. name: 'OK',
  1087. data: responses[1],
  1088. tooltip: { yDecimals: 0, ySuffix: '', valueDecimals: 0 }
  1089. ,type: 'area'},
  1090. {
  1091. color: '#f15b4f',
  1092. name: 'KO',
  1093. data: responses[2],
  1094. tooltip: { yDecimals: 0, ySuffix: '', valueDecimals: 0 }
  1095. ,type: 'area'},
  1096. allUsersData,
  1097. {
  1098. type: 'pie',
  1099. name: 'Distribution',
  1100. data: [
  1101. {name: 'OK', y: 13051.0, color: '#68b65c'},{name: 'KO', y: 27576.0, color: '#f15b4f'}
  1102. ],
  1103. center: [775, -40],
  1104. size: 70,
  1105. showInLegend: false,
  1106. dataLabels: { enabled: false },
  1107. dataGrouping: { enabled: false }
  1108. }
  1109. ]
  1110. });
  1111. requestsChart.setTitle({
  1112. text: '<span class="chart_title">Number of responses per second</span>',
  1113. useHTML: true
  1114. });
  1115. });
  1116. </script>
  1117. </div>
  1118. </body>
  1119. </html>