index.html 48 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174
  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. CartsPageSimulation
  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-16 11:40:52 GMT</span>
  94. </span>
  95. <span class="simulation-information-item">
  96. <span class="simulation-information-label">Duration: </span>
  97. <span>1m 57s </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">i.n.h.s.SslHandshakeTimeoutException: handshake timed out after 10000ms<span class="value" style="display:none">0</span></td>
  197. <td class="value error-col-2 total ko">13278</td>
  198. <td class="value error-col-3 total ko">54.22%</td>
  199. </tr>
  200. <tr>
  201. <td class="error-col-1 total ko">j.n.SocketException: Network is unreachable: getsockopt<span class="value" style="display:none">1</span></td>
  202. <td class="value error-col-2 total ko">5889</td>
  203. <td class="value error-col-3 total ko">24.05%</td>
  204. </tr>
  205. <tr>
  206. <td class="error-col-1 total ko">j.n.SocketException: No buffer space available (maximum connections reached?): connect<span class="value" style="display:none">2</span></td>
  207. <td class="value error-col-2 total ko">4875</td>
  208. <td class="value error-col-3 total ko">19.91%</td>
  209. </tr>
  210. <tr>
  211. <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">3</span></td>
  212. <td class="value error-col-2 total ko">138</td>
  213. <td class="value error-col-3 total ko">0.56%</td>
  214. </tr>
  215. <tr>
  216. <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">4</span></td>
  217. <td class="value error-col-2 total ko">106</td>
  218. <td class="value error-col-3 total ko">0.43%</td>
  219. </tr>
  220. <tr>
  221. <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">5</span></td>
  222. <td class="value error-col-2 total ko">99</td>
  223. <td class="value error-col-3 total ko">0.4%</td>
  224. </tr>
  225. <tr>
  226. <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">6</span></td>
  227. <td class="value error-col-2 total ko">98</td>
  228. <td class="value error-col-3 total ko">0.4%</td>
  229. </tr>
  230. <tr>
  231. <td class="error-col-1 total ko">j.i.IOException: Premature close<span class="value" style="display:none">7</span></td>
  232. <td class="value error-col-2 total ko">5</td>
  233. <td class="value error-col-3 total ko">0.02%</td>
  234. </tr>
  235. </tbody>
  236. </table>
  237. </div>
  238. <div class="schema geant">
  239. <div id="active_users" class="geant"></div>
  240. </div>
  241. <div class="schema geant">
  242. <div id="responsetimeDistributionContainer" class="geant"></div>
  243. </div>
  244. <div class="schema geant">
  245. <div id="responsetimepercentilesovertimeokPercentilesContainer" class="geant"></div>
  246. </div>
  247. <div class="schema geant">
  248. <div id="requests" class="geant"></div>
  249. </div>
  250. <div class="schema geant">
  251. <div id="responses" class="geant"></div>
  252. </div>
  253. </div>
  254. </div>
  255. </div>
  256. </div>
  257. </div>
  258. </div>
  259. <script>
  260. var pageStats = stats.stats;
  261. $(document).ready(function() {
  262. $('.simulation-tooltip').popover({trigger:'hover', placement:'left'});
  263. setDetailsLinkUrl();
  264. setGlobalMenu();
  265. setActiveMenu();
  266. fillStats(pageStats);
  267. Highcharts.setOptions({
  268. global: { useUTC: false }
  269. });
  270. var rangesChart = new Highcharts.Chart({
  271. chart: {
  272. renderTo: 'ranges',
  273. marginRight: 100
  274. },
  275. credits: { enabled: false },
  276. legend: { enabled: false },
  277. title: { text: 'A title to let highcharts reserve the place for the title set later' },
  278. xAxis: {
  279. categories: [
  280. pageStats.group1.htmlName,
  281. pageStats.group2.htmlName,
  282. pageStats.group3.htmlName,
  283. pageStats.group4.htmlName
  284. ]
  285. },
  286. yAxis: {
  287. title: { text: 'Number of Requests' },
  288. reversedStacks: false
  289. },
  290. tooltip: {
  291. formatter: function() {
  292. var s;
  293. if (this.point.name) { // the pie chart
  294. s = ''+ this.point.name +': '+ this.y +'% requests';
  295. } else {
  296. s = ''+ this.y + ' requests';
  297. }
  298. return s;
  299. }
  300. },
  301. plotOptions: {
  302. series: {
  303. stacking: 'normal',
  304. shadow: true
  305. }
  306. },
  307. series: [
  308. {
  309. type: 'column',
  310. data: [{
  311. color: '#68b65c',
  312. y: pageStats.group1.count
  313. },
  314. {
  315. color: '#FFDD00',
  316. y: pageStats.group2.count
  317. },
  318. {
  319. color: '#FFA900',
  320. y: pageStats.group3.count
  321. },
  322. {
  323. color: '#f15b4f',
  324. y: pageStats.group4.count
  325. }]
  326. },
  327. {
  328. type: 'pie',
  329. name: 'Percentages',
  330. data: [
  331. {
  332. name: pageStats.group1.name,
  333. y: pageStats.group1.percentage,
  334. color: '#68b65c'
  335. },
  336. {
  337. name: pageStats.group2.name,
  338. y: pageStats.group2.percentage,
  339. color: '#FFDD00'
  340. },
  341. {
  342. name: pageStats.group3.name,
  343. y: pageStats.group3.percentage,
  344. color: '#FFA900'
  345. },
  346. {
  347. name: pageStats.group4.name,
  348. y: pageStats.group4.percentage,
  349. color: '#f15b4f'
  350. }
  351. ],
  352. center: [345, 0],
  353. size: 90,
  354. showInLegend: false,
  355. dataLabels: { enabled: false }
  356. }
  357. ]
  358. });
  359. rangesChart.setTitle({
  360. text: '<span class="chart_title">Response Time Ranges</span>',
  361. useHTML: true
  362. });
  363. function numberOfRequestsDataForGroup(group) {
  364. var data = {names: [], oks: [], kos: []};
  365. $.each(group.contents, function(contentName, content) {
  366. if (content.type == 'GROUP') {
  367. var result = numberOfRequestsDataForGroup(content);
  368. data.names = data.names.concat(result.names);
  369. data.oks = data.oks.concat(result.oks);
  370. data.kos = data.kos.concat(result.kos);
  371. }
  372. else if (content.type == 'REQUEST') {
  373. data.names.push(content.path);
  374. data.oks.push(parseInt(content.stats.numberOfRequests.ok));
  375. data.kos.push(parseInt(content.stats.numberOfRequests.ko));
  376. }
  377. });
  378. return data;
  379. }
  380. var numberOfRequestsData = numberOfRequestsDataForGroup(stats);
  381. var tickInterval = Math.ceil(numberOfRequestsData.names.length / 1000);
  382. new Highcharts.Chart({
  383. chart: {
  384. renderTo:'container_number_of_requests',
  385. polar:true,
  386. type:'column',
  387. height:330
  388. },
  389. credits:{
  390. enabled:false
  391. },
  392. title:{
  393. text:'<span class="chart_title">Number of requests</span>',
  394. useHTML: true,
  395. widthAdjust:-20
  396. },
  397. xAxis:{
  398. tickmarkPlacement:'on',
  399. tickInterval: tickInterval,
  400. categories:numberOfRequestsData.names,
  401. labels:{ enabled:false }
  402. },
  403. yAxis:{
  404. min:0,
  405. reversedStacks: false
  406. },
  407. plotOptions:{
  408. series:{
  409. stacking:'normal',
  410. groupPadding:0,
  411. pointPlacement:'on',
  412. shadow: true
  413. }
  414. },
  415. legend: {
  416. borderWidth: 0,
  417. itemStyle: { fontWeight: "normal" },
  418. symbolRadius: 0
  419. },
  420. series:[
  421. {
  422. name:'OK',
  423. data:numberOfRequestsData.oks,
  424. color:"#68b65c"
  425. },
  426. {
  427. name:'KO',
  428. data:numberOfRequestsData.kos,
  429. color:"#f15b4f"
  430. }
  431. ]
  432. });
  433. $('#container_exceptions').sortable('#container_exceptions');
  434. function generateHtmlRow(request, level, index, parent, group) {
  435. if (request.name == 'All Requests')
  436. var url = 'index.html';
  437. else
  438. var url = request.pathFormatted + '.html';
  439. if (group)
  440. var expandButtonStyle = '';
  441. else
  442. var expandButtonStyle = ' hidden';
  443. if (request.stats.numberOfRequests.total != 0)
  444. var koPercent = (request.stats.numberOfRequests.ko * 100 / request.stats.numberOfRequests.total).toFixed(2);
  445. else
  446. var koPercent = '-'
  447. return '<tr id="' + request.pathFormatted + '" data-parent=' + parent + '> \
  448. <td class="total col-1"> \
  449. <div class="expandable-container"> \
  450. <span id="' + request.pathFormatted + '" style="margin-left: ' + (level * 10) + 'px;" class="expand-button' + expandButtonStyle + '">&nbsp;</span> \
  451. <a href="' + url +'" class="withTooltip">' + ellipsedLabel({ name: request.name, parentClass: "table-cell-tooltip" }) + '</a><span class="value" style="display:none;">' + index + '</span> \
  452. </div> \
  453. </td> \
  454. <td class="value total col-2">' + request.stats.numberOfRequests.total + '</td> \
  455. <td class="value ok col-3">' + request.stats.numberOfRequests.ok + '</td> \
  456. <td class="value ko col-4">' + request.stats.numberOfRequests.ko + '</td> \
  457. <td class="value ko col-5">' + koPercent + '</td> \
  458. <td class="value total col-6">' + request.stats.meanNumberOfRequestsPerSecond.total + '</td> \
  459. <td class="value total col-7">' + request.stats.minResponseTime.total + '</td> \
  460. <td class="value total col-8">' + request.stats.percentiles1.total + '</td> \
  461. <td class="value total col-9">' + request.stats.percentiles2.total + '</td> \
  462. <td class="value total col-10">' + request.stats.percentiles3.total + '</td> \
  463. <td class="value total col-11">' + request.stats.percentiles4.total + '</td> \
  464. <td class="value total col-12">' + request.stats.maxResponseTime.total + '</td> \
  465. <td class="value total col-13">' + request.stats.meanResponseTime.total + '</td> \
  466. <td class="value total col-14">' + request.stats.standardDeviation.total + '</td> \
  467. </tr>';
  468. }
  469. function generateHtmlRowsForGroup(group, level, index, parent) {
  470. var buffer = '';
  471. if (!parent)
  472. parent = 'ROOT';
  473. else {
  474. buffer += generateHtmlRow(group, level - 1, index, parent, true);
  475. index++;
  476. parent = group.pathFormatted;
  477. }
  478. $.each(group.contents, function(contentName, content) {
  479. if (content.type == 'GROUP') {
  480. var result = generateHtmlRowsForGroup(content, level + 1, index, parent);
  481. buffer += result.html;
  482. index = result.index;
  483. }
  484. else if (content.type == 'REQUEST') {
  485. buffer += generateHtmlRow(content, level, index, parent);
  486. index++;
  487. }
  488. });
  489. return { html: buffer, index: index };
  490. }
  491. $('#container_statistics_head tbody').append(generateHtmlRow(stats, 0, 0));
  492. var lines = generateHtmlRowsForGroup(stats, 0, 0);
  493. $('#container_statistics_body tbody').append(lines.html);
  494. $('#container_statistics_head').sortable('#container_statistics_body');
  495. $('.statistics').expandable();
  496. if (lines.index < 30) {
  497. $('#statistics_title span').attr('style', 'display: none;');
  498. } else {
  499. $('#statistics_title').addClass('title_collapsed');
  500. $('#statistics_title').click(function() {
  501. $('#toggle-stats').toggleClass("off");
  502. $(this).toggleClass('title_collapsed').toggleClass('title_expanded');
  503. $('#container_statistics_body').parent().toggleClass('scrollable').toggleClass('');
  504. });
  505. }
  506. $('.table-cell-tooltip').popover({trigger:'hover'});
  507. $('#container_errors').sortable('#container_errors');
  508. allUsersData.yAxis = 0;
  509. var allUsersChart = new Highcharts.StockChart({
  510. chart: {
  511. renderTo: 'active_users',
  512. zoomType: 'x'
  513. },
  514. credits: { enabled: false },
  515. legend: {
  516. enabled: true,
  517. floating: true,
  518. align: 'right',
  519. verticalAlign: 'top',
  520. layout: 'vertical',
  521. borderWidth: 0,
  522. itemStyle: { fontWeight: "normal" },
  523. symbolRadius: 0
  524. },
  525. title: { text: 'A title to let highcharts reserve the place for the title set later' },
  526. navigator: {
  527. maskInside: false
  528. },
  529. rangeSelector: {
  530. buttonSpacing: 0,
  531. buttonTheme: {
  532. fill: '#CFC9C6',
  533. padding: 1,
  534. stroke: '#000000',
  535. 'stroke-width': 0.25,
  536. style: {
  537. color: '#000000',
  538. fontWeight: 'bold',
  539. },
  540. states: {
  541. stroke: '#000000',
  542. 'stroke-width': 0.25,
  543. hover: {
  544. fill: '#92918C',
  545. style: { color: 'black' }
  546. },
  547. select: {
  548. fill: '#FFA900',
  549. style: { color: 'white' }
  550. }
  551. }
  552. },
  553. buttons : [
  554. {
  555. type : 'minute',
  556. count : 1,
  557. text : '1m'
  558. }, {
  559. type : 'minute',
  560. count : 10,
  561. text : '10m'
  562. }, {
  563. type : 'hour',
  564. count : 1,
  565. text : '1h'
  566. }, {
  567. type : 'all',
  568. count : 1,
  569. text : 'All'
  570. }
  571. ],
  572. selected : 3,
  573. inputEnabled : false
  574. },
  575. xAxis: {
  576. type: 'datetime',
  577. ordinal: false,
  578. maxZoom: 10000 // three days
  579. },
  580. yAxis: {
  581. title: { text: 'Number of Active Users' },
  582. opposite: false,
  583. min: 0
  584. },
  585. series: [
  586. {
  587. color: '#5E7BE2',
  588. name: 'Cart Page Load Test',
  589. data: [
  590. [1744803652000,3637],[1744803653000,7386],[1744803654000,11334],[1744803655000,17139],[1744803656000,21794],[1744803657000,23067],[1744803658000,25000],[1744803659000,25000],[1744803660000,25000],[1744803661000,24755],[1744803662000,23816],[1744803663000,20983],[1744803664000,18423],[1744803665000,14234],[1744803666000,13589],[1744803667000,12545],[1744803668000,11298],[1744803669000,10910],[1744803670000,9808],[1744803671000,8793],[1744803672000,7842],[1744803673000,7108],[1744803674000,6809],[1744803675000,6426],[1744803676000,6141],[1744803677000,6141],[1744803678000,6141],[1744803679000,6141],[1744803680000,6123],[1744803681000,6099],[1744803682000,5856],[1744803683000,5569],[1744803684000,5349],[1744803685000,5229],[1744803686000,5199],[1744803687000,5189],[1744803688000,5189],[1744803689000,5189],[1744803690000,5189],[1744803691000,4541],[1744803692000,4332],[1744803693000,4191],[1744803694000,4034],[1744803695000,3737],[1744803696000,3648],[1744803697000,3628],[1744803698000,3626],[1744803699000,3614],[1744803700000,3614],[1744803701000,3576],[1744803702000,1792],[1744803703000,1683],[1744803704000,1629],[1744803705000,1594],[1744803706000,1582],[1744803707000,1494],[1744803708000,1487],[1744803709000,1461],[1744803710000,1452],[1744803711000,1446],[1744803712000,1437],[1744803713000,1292],[1744803714000,1220],[1744803715000,1169],[1744803716000,1137],[1744803717000,1121],[1744803718000,1106],[1744803719000,1092],[1744803720000,1066],[1744803721000,1038],[1744803722000,1008],[1744803723000,963],[1744803724000,937],[1744803725000,902],[1744803726000,852],[1744803727000,803],[1744803728000,743],[1744803729000,693],[1744803730000,656],[1744803731000,615],[1744803732000,557],[1744803733000,490],[1744803734000,430],[1744803735000,370],[1744803736000,329],[1744803737000,292],[1744803738000,261],[1744803739000,237],[1744803740000,211],[1744803741000,190],[1744803742000,177],[1744803743000,162],[1744803744000,149],[1744803745000,134],[1744803746000,125],[1744803747000,112],[1744803748000,103],[1744803749000,92],[1744803750000,84],[1744803751000,79],[1744803752000,64],[1744803753000,62],[1744803754000,53],[1744803755000,45],[1744803756000,33],[1744803757000,27],[1744803758000,25],[1744803759000,23],[1744803760000,16],[1744803761000,9],[1744803762000,6],[1744803763000,5],[1744803764000,4],[1744803765000,3],[1744803766000,1],[1744803767000,1],[1744803768000,1],[1744803769000,1]
  591. ],
  592. tooltip: { yDecimals: 0, ySuffix: '', valueDecimals: 0 }},
  593. allUsersData
  594. ]
  595. });
  596. allUsersChart.setTitle({
  597. text: '<span class="chart_title">Active Users along the Simulation</span>',
  598. useHTML: true
  599. });
  600. allUsersData.yAxis = 1;
  601. var responsetimeDistributionChart = new Highcharts.Chart({
  602. chart: {
  603. renderTo: 'responsetimeDistributionContainer',
  604. type: 'column',
  605. marginBottom: 60
  606. },
  607. credits: { enabled: false },
  608. legend: {
  609. enabled: true,
  610. floating: true,
  611. y: 5,
  612. borderWidth: 0,
  613. itemStyle: { fontWeight: "normal" },
  614. symbolRadius: 0
  615. },
  616. title: { text: 'A title to let highcharts reserve the place for the title set later' },
  617. navigator: {
  618. maskInside: false
  619. },
  620. xAxis: {
  621. categories: ['302', '902', '1502', '2103', '2703', '3303', '3903', '4503', '5103', '5703', '6304', '6904', '7504', '8104', '8704', '9304', '9904', '10505', '11105', '11705', '12305', '12905', '13505', '14106', '14706', '15306', '15906', '16506', '17106', '17706', '18307', '18907', '19507', '20107', '20707', '21307', '21907', '22508', '23108', '23708', '24308', '24908', '25508', '26109', '26709', '27309', '27909', '28509', '29109', '29709', '30310', '30910', '31510', '32110', '32710', '33310', '33910', '34511', '35111', '35711', '36311', '36911', '37511', '38112', '38712', '39312', '39912', '40512', '41112', '41712', '42313', '42913', '43513', '44113', '44713', '45313', '45913', '46514', '47114', '47714', '48314', '48914', '49514', '50115', '50715', '51315', '51915', '52515', '53115', '53715', '54316', '54916', '55516', '56116', '56716', '57316', '57916', '58517', '59117', '59717'],
  622. tickInterval: 20
  623. },
  624. yAxis: {
  625. min: 0,
  626. title: { text: 'Percentage of Requests' },
  627. reversedStacks: false
  628. },
  629. tooltip: {
  630. formatter: function() {
  631. return '<b>'+ this.x +' ms</b><br/>'+
  632. this.series.name +': '+ this.y +' %<br/>'+
  633. 'Total: '+ this.point.stackTotal + ' %';
  634. }
  635. },
  636. plotOptions: {
  637. series: {
  638. groupPadding: 0,
  639. stacking: 'normal',
  640. shadow: true
  641. }
  642. },
  643. series: [
  644. {
  645. type: 'column',
  646. color: '#68b65c',
  647. name: 'OK',
  648. data: [
  649. 0.11,0.16,0.21,0.19,0.35,0.28,0.22,0.18,0.19,0.22,0.17,0.2,0.22,0.22,0.18,0.13,0.16,0.17,0.12,0.12,0.13,0.11,0.09,0.13,0.08,0.12,0.14,0.14,0.1,0.11,0.11,0.13,0.13,0.12,0.16,0.12,0.12,0.15,0.12,0.14,0.14,0.15,0.11,0.22,0.13,0.17,0.18,0.18,0.15,0.21,0.19,0.14,0.2,0.14,0.18,0.1,0.11,0.13,0.13,0.11,0.09,0.11,0.12,0.16,0.23,0.22,0.27,0.26,0.23,0.2,0.27,0.21,0.23,0.21,0.21,0.23,0.19,0.2,0.14,0.17,0.15,0.09,0.11,0.12,0.1,0.08,0.09,0.06,0.09,0.04,0.04,0.06,0.04,0.03,0.01,0.02,0.06,0.04,0.01,0.04
  650. ],
  651. tooltip: { yDecimals: 0, ySuffix: 'ms' }
  652. },
  653. {
  654. type: 'column',
  655. color: '#f15b4f',
  656. name: 'KO',
  657. data: [
  658. 0.04,0.05,0.07,0.08,0.05,2.01,0.15,3.13,3.29,5.47,7.36,0.0,4.27,4.88,0.0,0.0,0.03,0.89,3.44,3.21,3.01,2.37,4.41,2.68,3.87,2.19,1.49,1.76,0.75,0.61,1.02,1.91,1.66,0.67,0.09,0.01,0.04,0.03,0.0,0.01,0.01,0.01,0.0,0.0,0.0,0.28,0.37,0.93,0.8,0.62,0.32,0.03,0.01,0.0,0.0,0.0,0.0,0.02,0.39,0.57,0.55,0.64,0.06,0.37,0.84,0.43,0.45,0.49,0.23,0.23,0.0,0.0,0.0,0.02,0.01,0.38,1.57,1.2,1.84,1.06,0.5,0.31,0.04,0.04,0.07,0.11,0.06,0.05,0.01,0.02,0.02,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.52
  659. ],
  660. tooltip: { yDecimals: 0, ySuffix: 'ms' }
  661. }
  662. ]
  663. });
  664. responsetimeDistributionChart.setTitle({
  665. text: '<span class="chart_title">Response Time Distribution</span>',
  666. useHTML: true
  667. });
  668. var responsetimepercentilesovertimeokPercentiles = unpack([[1744803652,[2358,8057,16022,38662,38998,41338,45154,48355,54513,59769]],[1744803653,[5814,40361,43356,47105,48258,50332,52532,54638,57426,58685]],[1744803654,[14080,41197,44689,47716,48808,50270,51939,56642,58816,59948]],[1744803655,[11325,40180,43033,47294,48188,49241,51107,54455,57873,59506]],[1744803656,[16174,40371,43064,46042,47623,48673,49836,52491,57920,58400]],[1744803657,null],[1744803658,[5373,5523,5554,54012,54012,54012,54012,54012,54012,54012]],[1744803659,[31592,31885,31986,35427,52886,52886,52886,52886,52886,52886]],[1744803660,[5861,21510,31033,50119,51693,53570,56239,59979,59979,59979]],[1744803661,[29835,29947,30462,47603,47603,51303,51303,57423,57423,57423]],[1744803662,[28825,28841,29095,29421,29421,29421,29430,29430,29430,29430]],[1744803663,[28386,28386,49743,50599,50599,50599,50599,50599,50599,50599]],[1744803664,[27386,27391,47470,47971,47971,52788,52788,52788,52788,52788]],[1744803665,[39306,39306,42774,42774,42774,42774,42774,42774,42774,42774]],[1744803666,[41556,41556,58731,58731,58731,58731,58731,58731,58731,58731]],[1744803667,[59989,59989,59989,59989,59989,59989,59989,59989,59989,59989]],[1744803668,[22559,22757,39530,41834,57832,57832,59133,59133,59133,59133]],[1744803669,[10049,22617,30717,38664,59044,59044,59044,59044,59044,59044]],[1744803670,[20749,20749,20749,20749,20749,20749,20749,20749,20749,20749]],[1744803671,[20447,23211,25947,36798,37394,37394,37394,37394,37394,37394]],[1744803672,[18869,35505,45281,57547,57547,58844,58844,58844,58844,58844]],[1744803673,[18635,32773,42563,45091,45091,53132,53132,53132,53132,53132]],[1744803674,[7497,26641,46102,51888,52974,54121,54121,54859,54859,54859]],[1744803675,[16174,36873,44498,50044,51751,51751,58452,58452,58452,58452]],[1744803676,[15487,19993,40683,52233,53252,55026,55026,55291,55291,55291]],[1744803677,[13981,25422,45424,53573,55320,55320,58776,58776,58776,58776]],[1744803678,[12708,32881,45580,51356,51356,52609,54449,56355,56355,56355]],[1744803679,[11794,38284,46663,51970,51970,56068,56068,59117,59117,59117]],[1744803680,[10924,11424,38177,51677,54519,56358,56358,58638,58638,58638]],[1744803681,[9786,12486,43629,57511,57532,57833,58145,59895,59895,59895]],[1744803682,[8937,20259,38039,46462,47886,47886,50095,50095,50095,50095]],[1744803683,null],[1744803684,[7631,7631,7631,7631,7631,7631,7631,7631,7631,7631]],[1744803685,[6250,6250,6633,6633,6633,6633,6633,6633,6633,6633]],[1744803686,null],[1744803687,null],[1744803688,null],[1744803689,[2886,2886,34668,34668,34668,34668,34668,34668,34668,34668]],[1744803690,null],[1744803691,[2235,7188,27818,42621,43570,44898,46529,48904,53012,58514]],[1744803692,[1508,3417,16403,36178,40264,40470,43020,46514,49498,49498]],[1744803693,[236,2550,15159,33962,34744,36610,41047,46969,52438,57675]],[1744803694,[65,3914,18412,35326,37568,40528,43886,48900,54482,55430]],[1744803695,[102,3966,17711,34629,37539,39236,42893,47488,53512,58510]],[1744803696,[281,8634,25458,33980,36450,37712,39833,43175,49879,52794]],[1744803697,[253,8272,25775,32947,34821,36631,39547,48524,54650,55982]],[1744803698,[120,6818,21121,30569,32579,35389,39806,44538,51851,53700]],[1744803699,[690,5970,20859,29947,32329,33772,36288,40045,47686,48633]],[1744803700,[1323,8641,23003,30217,31842,34242,37209,44994,55358,59672]],[1744803701,[2438,9809,24119,30802,32102,33456,34932,39405,50088,54529]],[1744803702,[1833,11701,22713,29844,31231,31963,34048,36356,45429,45582]],[1744803703,[1941,11818,19656,26985,28352,29508,30681,32691,41909,43725]],[1744803704,[1906,13945,21201,25786,27701,30024,31266,33215,56420,56420]],[1744803705,[2864,15568,25016,29404,30135,31024,32523,35924,59428,59428]],[1744803706,[2864,11199,17924,26182,26781,28187,29588,30888,51581,51581]],[1744803707,[4988,12992,16679,25167,25540,26381,27252,27594,29558,29558]],[1744803708,[4957,10799,15305,23487,24292,24577,26120,36637,41597,41597]],[1744803709,[1593,7292,12591,20401,21342,22806,26932,27892,28052,28052]],[1744803710,[1329,7203,11320,15530,17450,19154,26232,27016,41667,41667]],[1744803711,[138,5222,10809,13475,16136,19831,23663,26411,27869,27869]],[1744803712,[36,2689,8007,10822,11299,12849,15914,23139,36023,36023]],[1744803713,[903,3123,8094,11421,13923,13923,17603,18121,18121,18121]],[1744803714,[1237,5304,9936,12873,16120,17395,18738,55692,55692,55692]],[1744803715,null],[1744803716,null],[1744803717,null],[1744803718,null],[1744803719,null],[1744803720,null],[1744803721,null],[1744803722,null],[1744803723,null],[1744803724,null],[1744803725,null],[1744803726,null],[1744803727,null],[1744803728,null],[1744803729,null],[1744803730,null],[1744803731,null],[1744803732,null],[1744803733,null],[1744803734,null],[1744803735,null],[1744803736,null],[1744803737,null],[1744803738,null],[1744803739,null],[1744803740,null],[1744803741,null],[1744803742,null],[1744803743,null],[1744803744,null],[1744803745,null],[1744803746,null],[1744803747,null],[1744803748,null],[1744803749,null],[1744803750,null],[1744803751,null],[1744803752,null],[1744803753,null],[1744803754,null],[1744803755,null],[1744803756,null],[1744803757,null],[1744803758,null],[1744803759,null],[1744803760,null],[1744803761,null],[1744803762,null],[1744803763,null],[1744803764,null],[1744803765,null],[1744803766,null],[1744803767,null],[1744803768,null],[1744803769,null]]);
  669. var responsetimepercentilesovertimeokPercentilesChart = new Highcharts.StockChart({
  670. chart: {
  671. renderTo: 'responsetimepercentilesovertimeokPercentilesContainer',
  672. zoomType: 'x',
  673. marginBottom: 60
  674. },
  675. colors: ['#c4fd90', '#7ff77f', '#6ff2ad', '#61ede6', '#58c7e0', '#4ea1d4', '#487ad9', '#3f52cc', '#7335dc', '#c73905', '#FFA900'],
  676. credits: { enabled: false },
  677. legend: {
  678. enabled: true,
  679. floating: true,
  680. y: -65,
  681. borderWidth: 0,
  682. itemStyle: { fontWeight: "normal" },
  683. symbolRadius: 0
  684. },
  685. title: { text: 'A title to let highcharts reserve the place for the title set later' },
  686. navigator: {
  687. maskInside: false,
  688. baseSeries: 9
  689. },
  690. rangeSelector: {
  691. rangeSelector: { align: "left" },
  692. buttonSpacing: 0,
  693. buttonTheme: {
  694. fill: '#CFC9C6',
  695. padding: 1,
  696. stroke: '#000000',
  697. 'stroke-width': 0.25,
  698. style: {
  699. color: '#000000',
  700. fontWeight: 'bold',
  701. },
  702. states: {
  703. stroke: '#92918C',
  704. 'stroke-width': 0.25,
  705. hover: {
  706. fill: '#92918C',
  707. style: { color: 'black' }
  708. },
  709. select: {
  710. fill: '#FFA900',
  711. style: { color: 'white' }
  712. }
  713. }
  714. },
  715. buttons : [
  716. {
  717. type : 'minute',
  718. count : 1,
  719. text : '1m'
  720. }, {
  721. type : 'minute',
  722. count : 10,
  723. text : '10m'
  724. }, {
  725. type : 'hour',
  726. count : 1,
  727. text : '1h'
  728. }, {
  729. type : 'all',
  730. count : 1,
  731. text : 'All'
  732. }
  733. ],
  734. selected : 3,
  735. inputEnabled : false
  736. },
  737. xAxis: {
  738. type: 'datetime',
  739. ordinal: false,
  740. maxZoom: 10000 // three days
  741. },
  742. yAxis:[
  743. {
  744. min: 0,
  745. title: { text: 'Response Time (ms)' },
  746. opposite: false
  747. }, {
  748. min: 0,
  749. title: {
  750. text: 'Active Users',
  751. style: { color: '#FFA900' }
  752. },
  753. opposite: true
  754. }
  755. ],
  756. plotOptions: {
  757. arearange: { lineWidth: 1 },
  758. series: {
  759. dataGrouping: { enabled: false }
  760. }
  761. },
  762. series: [
  763. {
  764. pointInterval: 1000,
  765. name: 'min',
  766. data: responsetimepercentilesovertimeokPercentiles[0],
  767. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  768. type : 'area',
  769. yAxis: 0,
  770. zIndex: 10
  771. },
  772. {
  773. pointInterval: 1000,
  774. name: '25%',
  775. data: responsetimepercentilesovertimeokPercentiles[1],
  776. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  777. type : 'area',
  778. yAxis: 0,
  779. zIndex: 9
  780. },
  781. {
  782. pointInterval: 1000,
  783. name: '50%',
  784. data: responsetimepercentilesovertimeokPercentiles[2],
  785. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  786. type : 'area',
  787. yAxis: 0,
  788. zIndex: 8
  789. },
  790. {
  791. pointInterval: 1000,
  792. name: '75%',
  793. data: responsetimepercentilesovertimeokPercentiles[3],
  794. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  795. type : 'area',
  796. yAxis: 0,
  797. zIndex: 7
  798. },
  799. {
  800. pointInterval: 1000,
  801. name: '80%',
  802. data: responsetimepercentilesovertimeokPercentiles[4],
  803. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  804. type : 'area',
  805. yAxis: 0,
  806. zIndex: 6
  807. },
  808. {
  809. pointInterval: 1000,
  810. name: '85%',
  811. data: responsetimepercentilesovertimeokPercentiles[5],
  812. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  813. type : 'area',
  814. yAxis: 0,
  815. zIndex: 5
  816. },
  817. {
  818. pointInterval: 1000,
  819. name: '90%',
  820. data: responsetimepercentilesovertimeokPercentiles[6],
  821. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  822. type : 'area',
  823. yAxis: 0,
  824. zIndex: 4
  825. },
  826. {
  827. pointInterval: 1000,
  828. name: '95%',
  829. data: responsetimepercentilesovertimeokPercentiles[7],
  830. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  831. type : 'area',
  832. yAxis: 0,
  833. zIndex: 3
  834. },
  835. {
  836. pointInterval: 1000,
  837. name: '99%',
  838. data: responsetimepercentilesovertimeokPercentiles[8],
  839. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  840. type : 'area',
  841. yAxis: 0,
  842. zIndex: 2
  843. },
  844. {
  845. pointInterval: 1000,
  846. name: 'max',
  847. data: responsetimepercentilesovertimeokPercentiles[9],
  848. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  849. type : 'area',
  850. yAxis: 0,
  851. zIndex: 1
  852. },
  853. allUsersData
  854. ]
  855. });
  856. responsetimepercentilesovertimeokPercentilesChart.setTitle({
  857. text: '<span class="chart_title chart_title_">Response Time Percentiles over Time (OK)</span>',
  858. useHTML: true
  859. });
  860. var requests = unpack([[1744803652,[1204,220,984]],[1744803653,[3862,260,3602]],[1744803654,[5425,410,5015]],[1744803655,[4138,279,3859]],[1744803656,[5358,127,5231]],[1744803657,[1896,0,1896]],[1744803658,[2759,4,2755]],[1744803659,[466,5,461]],[1744803660,[81,17,64]],[1744803661,[57,11,46]],[1744803662,[51,7,44]],[1744803663,[18,3,15]],[1744803664,[27,6,21]],[1744803665,[12,2,10]],[1744803666,[9,2,7]],[1744803667,[6,1,5]],[1744803668,[25,10,15]],[1744803669,[23,5,18]],[1744803670,[3,1,2]],[1744803671,[18,5,13]],[1744803672,[15,6,9]],[1744803673,[15,6,9]],[1744803674,[24,13,11]],[1744803675,[12,10,2]],[1744803676,[18,13,5]],[1744803677,[12,9,3]],[1744803678,[18,16,2]],[1744803679,[15,12,3]],[1744803680,[18,13,5]],[1744803681,[27,19,8]],[1744803682,[12,10,2]],[1744803683,[0,0,0]],[1744803684,[2,1,1]],[1744803685,[6,2,4]],[1744803686,[0,0,0]],[1744803687,[0,0,0]],[1744803688,[0,0,0]],[1744803689,[2,2,0]],[1744803690,[0,0,0]],[1744803691,[161,117,44]],[1744803692,[24,21,3]],[1744803693,[141,126,15]],[1744803694,[291,264,27]],[1744803695,[249,214,35]],[1744803696,[324,292,32]],[1744803697,[213,193,20]],[1744803698,[237,220,17]],[1744803699,[237,219,18]],[1744803700,[276,253,23]],[1744803701,[177,148,29]],[1744803702,[162,145,17]],[1744803703,[126,111,15]],[1744803704,[117,99,18]],[1744803705,[117,97,20]],[1744803706,[72,62,10]],[1744803707,[54,44,10]],[1744803708,[57,51,6]],[1744803709,[27,27,0]],[1744803710,[30,29,1]],[1744803711,[21,21,0]],[1744803712,[48,47,1]],[1744803713,[15,15,0]],[1744803714,[18,18,0]],[1744803715,[0,0,0]],[1744803716,[0,0,0]],[1744803717,[0,0,0]],[1744803718,[0,0,0]],[1744803719,[0,0,0]],[1744803720,[0,0,0]],[1744803721,[0,0,0]],[1744803722,[0,0,0]],[1744803723,[0,0,0]],[1744803724,[0,0,0]],[1744803725,[0,0,0]],[1744803726,[0,0,0]],[1744803727,[0,0,0]],[1744803728,[0,0,0]],[1744803729,[0,0,0]],[1744803730,[0,0,0]],[1744803731,[0,0,0]],[1744803732,[0,0,0]],[1744803733,[0,0,0]],[1744803734,[0,0,0]],[1744803735,[0,0,0]],[1744803736,[0,0,0]],[1744803737,[0,0,0]],[1744803738,[0,0,0]],[1744803739,[0,0,0]],[1744803740,[0,0,0]],[1744803741,[0,0,0]],[1744803742,[0,0,0]],[1744803743,[0,0,0]],[1744803744,[0,0,0]],[1744803745,[0,0,0]],[1744803746,[0,0,0]],[1744803747,[0,0,0]],[1744803748,[0,0,0]],[1744803749,[0,0,0]],[1744803750,[0,0,0]],[1744803751,[0,0,0]],[1744803752,[0,0,0]],[1744803753,[0,0,0]],[1744803754,[0,0,0]],[1744803755,[0,0,0]],[1744803756,[0,0,0]],[1744803757,[0,0,0]],[1744803758,[0,0,0]],[1744803759,[0,0,0]],[1744803760,[0,0,0]],[1744803761,[0,0,0]],[1744803762,[0,0,0]],[1744803763,[0,0,0]],[1744803764,[0,0,0]],[1744803765,[0,0,0]],[1744803766,[0,0,0]],[1744803767,[0,0,0]],[1744803768,[0,0,0]],[1744803769,[0,0,0]]]);
  861. var requestsChart = new Highcharts.StockChart({
  862. chart: {
  863. renderTo: 'requests',
  864. zoomType: 'x',
  865. marginBottom: 60
  866. },
  867. credits: { enabled: false },
  868. legend: {
  869. enabled: true,
  870. floating: true,
  871. y: -65,
  872. borderWidth: 0,
  873. itemStyle: { fontWeight: "normal" },
  874. symbolRadius: 0
  875. },
  876. title: { text: 'A title to let highcharts reserve the place for the title set later' },
  877. navigator: {
  878. maskInside: false
  879. },
  880. rangeSelector: {
  881. buttonSpacing: 0,
  882. buttonTheme: {
  883. fill: '#CFC9C6',
  884. padding: 1,
  885. stroke: '#000000',
  886. 'stroke-width': 0.25,
  887. style: {
  888. color: '#000000',
  889. fontWeight: 'bold',
  890. },
  891. states: {
  892. stroke: '#000000',
  893. 'stroke-width': 0.25,
  894. hover: {
  895. fill: '#92918C',
  896. style: { color: 'black' }
  897. },
  898. select: {
  899. fill: '#FFA900',
  900. style: { color: 'white' }
  901. }
  902. }
  903. },
  904. buttons : [
  905. {
  906. type : 'minute',
  907. count : 1,
  908. text : '1m'
  909. }, {
  910. type : 'minute',
  911. count : 10,
  912. text : '10m'
  913. }, {
  914. type : 'hour',
  915. count : 1,
  916. text : '1h'
  917. }, {
  918. type : 'all',
  919. count : 1,
  920. text : 'All'
  921. }
  922. ],
  923. selected : 3,
  924. inputEnabled : false
  925. },
  926. plotOptions: {
  927. series: {
  928. dataGrouping: { enabled: false }
  929. },
  930. area: {
  931. stacking: 'normal'
  932. }
  933. },
  934. xAxis: {
  935. type: 'datetime',
  936. ordinal: false,
  937. maxZoom: 10000 // three days
  938. },
  939. yAxis:[
  940. {
  941. min: 0,
  942. title: { text: 'Number of requests' },
  943. opposite: false,
  944. reversedStacks: false
  945. }, {
  946. min: 0,
  947. title: {
  948. text: 'Active Users',
  949. style: { color: '#FFA900' }
  950. },
  951. opposite: true
  952. }
  953. ],
  954. series: [
  955. {
  956. color: '#5E7BE2',
  957. name: 'All',
  958. data: requests[0],
  959. tooltip: { yDecimals: 0, ySuffix: '', valueDecimals: 0 }
  960. ,type: 'area'},
  961. allUsersData
  962. ]
  963. });
  964. requestsChart.setTitle({
  965. text: '<span class="chart_title">Number of requests per second</span>',
  966. useHTML: true
  967. });
  968. var responses = unpack([[1744803652,[0,0,0]],[1744803653,[0,0,0]],[1744803654,[1,1,0]],[1744803655,[16,16,0]],[1744803656,[4,4,0]],[1744803657,[1,1,0]],[1744803658,[6,6,0]],[1744803659,[8,8,0]],[1744803660,[28,28,0]],[1744803661,[647,18,629]],[1744803662,[2190,17,2173]],[1744803663,[2355,9,2346]],[1744803664,[5229,9,5220]],[1744803665,[813,4,809]],[1744803666,[1250,7,1243]],[1744803667,[704,2,702]],[1744803668,[946,9,937]],[1744803669,[940,7,933]],[1744803670,[969,1,968]],[1744803671,[1073,6,1067]],[1744803672,[653,7,646]],[1744803673,[567,5,562]],[1744803674,[275,10,265]],[1744803675,[344,4,340]],[1744803676,[187,6,181]],[1744803677,[4,4,0]],[1744803678,[6,6,0]],[1744803679,[6,6,0]],[1744803680,[27,8,19]],[1744803681,[168,12,156]],[1744803682,[270,9,261]],[1744803683,[250,1,249]],[1744803684,[175,1,174]],[1744803685,[81,3,78]],[1744803686,[27,0,27]],[1744803687,[0,0,0]],[1744803688,[0,0,0]],[1744803689,[1,1,0]],[1744803690,[0,0,0]],[1744803691,[903,110,793]],[1744803692,[173,12,161]],[1744803693,[190,53,137]],[1744803694,[502,141,361]],[1744803695,[188,130,58]],[1744803696,[243,171,72]],[1744803697,[113,113,0]],[1744803698,[127,121,6]],[1744803699,[141,136,5]],[1744803700,[143,143,0]],[1744803701,[1811,110,1701]],[1744803702,[345,120,225]],[1744803703,[175,92,83]],[1744803704,[156,107,49]],[1744803705,[116,92,24]],[1744803706,[145,68,77]],[1744803707,[123,66,57]],[1744803708,[116,81,35]],[1744803709,[71,60,11]],[1744803710,[86,70,16]],[1744803711,[53,35,18]],[1744803712,[175,66,109]],[1744803713,[132,47,85]],[1744803714,[136,45,91]],[1744803715,[101,43,58]],[1744803716,[98,63,35]],[1744803717,[71,59,12]],[1744803718,[73,55,18]],[1744803719,[75,60,15]],[1744803720,[98,79,19]],[1744803721,[84,70,14]],[1744803722,[88,71,17]],[1744803723,[99,90,9]],[1744803724,[93,82,11]],[1744803725,[86,78,8]],[1744803726,[101,97,4]],[1744803727,[106,102,4]],[1744803728,[111,103,8]],[1744803729,[88,83,5]],[1744803730,[69,68,1]],[1744803731,[88,83,5]],[1744803732,[72,70,2]],[1744803733,[98,95,3]],[1744803734,[87,83,4]],[1744803735,[65,64,1]],[1744803736,[51,46,5]],[1744803737,[38,37,1]],[1744803738,[31,30,1]],[1744803739,[36,34,2]],[1744803740,[24,21,3]],[1744803741,[23,22,1]],[1744803742,[13,13,0]],[1744803743,[15,15,0]],[1744803744,[16,15,1]],[1744803745,[14,13,1]],[1744803746,[11,11,0]],[1744803747,[13,13,0]],[1744803748,[7,7,0]],[1744803749,[11,11,0]],[1744803750,[5,5,0]],[1744803751,[17,6,11]],[1744803752,[5,3,2]],[1744803753,[7,3,4]],[1744803754,[5,0,5]],[1744803755,[16,4,12]],[1744803756,[6,1,5]],[1744803757,[3,1,2]],[1744803758,[2,0,2]],[1744803759,[5,0,5]],[1744803760,[5,2,3]],[1744803761,[7,1,6]],[1744803762,[1,0,1]],[1744803763,[1,1,0]],[1744803764,[1,0,1]],[1744803765,[3,1,2]],[1744803766,[0,0,0]],[1744803767,[0,0,0]],[1744803768,[0,0,0]],[1744803769,[1,1,0]]]);
  969. var requestsChart = new Highcharts.StockChart({
  970. chart: {
  971. renderTo: 'responses',
  972. zoomType: 'x',
  973. marginBottom: 60
  974. },
  975. credits: { enabled: false },
  976. legend: {
  977. enabled: true,
  978. floating: true,
  979. y: -65,
  980. borderWidth: 0,
  981. itemStyle: { fontWeight: "normal" },
  982. symbolRadius: 0
  983. },
  984. title: { text: 'A title to let highcharts reserve the place for the title set later' },
  985. navigator: {
  986. maskInside: false
  987. },
  988. rangeSelector: {
  989. buttonSpacing: 0,
  990. buttonTheme: {
  991. fill: '#CFC9C6',
  992. padding: 1,
  993. stroke: '#000000',
  994. 'stroke-width': 0.25,
  995. style: {
  996. color: '#000000',
  997. fontWeight: 'bold',
  998. },
  999. states: {
  1000. stroke: '#000000',
  1001. 'stroke-width': 0.25,
  1002. hover: {
  1003. fill: '#92918C',
  1004. style: { color: 'black' }
  1005. },
  1006. select: {
  1007. fill: '#FFA900',
  1008. style: { color: 'white' }
  1009. }
  1010. }
  1011. },
  1012. buttons : [
  1013. {
  1014. type : 'minute',
  1015. count : 1,
  1016. text : '1m'
  1017. }, {
  1018. type : 'minute',
  1019. count : 10,
  1020. text : '10m'
  1021. }, {
  1022. type : 'hour',
  1023. count : 1,
  1024. text : '1h'
  1025. }, {
  1026. type : 'all',
  1027. count : 1,
  1028. text : 'All'
  1029. }
  1030. ],
  1031. selected : 3,
  1032. inputEnabled : false
  1033. },
  1034. plotOptions: {
  1035. series: {
  1036. dataGrouping: { enabled: false }
  1037. },
  1038. area: {
  1039. stacking: 'normal'
  1040. }
  1041. },
  1042. xAxis: {
  1043. type: 'datetime',
  1044. ordinal: false,
  1045. maxZoom: 10000 // three days
  1046. },
  1047. yAxis:[
  1048. {
  1049. min: 0,
  1050. title: { text: 'Number of responses' },
  1051. opposite: false,
  1052. reversedStacks: false
  1053. }, {
  1054. min: 0,
  1055. title: {
  1056. text: 'Active Users',
  1057. style: { color: '#FFA900' }
  1058. },
  1059. opposite: true
  1060. }
  1061. ],
  1062. series: [
  1063. {
  1064. color: '#5E7BE2',
  1065. name: 'All',
  1066. data: responses[0],
  1067. tooltip: { yDecimals: 0, ySuffix: '', valueDecimals: 0 }
  1068. },
  1069. {
  1070. color: '#68b65c',
  1071. name: 'OK',
  1072. data: responses[1],
  1073. tooltip: { yDecimals: 0, ySuffix: '', valueDecimals: 0 }
  1074. ,type: 'area'},
  1075. {
  1076. color: '#f15b4f',
  1077. name: 'KO',
  1078. data: responses[2],
  1079. tooltip: { yDecimals: 0, ySuffix: '', valueDecimals: 0 }
  1080. ,type: 'area'},
  1081. allUsersData,
  1082. {
  1083. type: 'pie',
  1084. name: 'Distribution',
  1085. data: [
  1086. {name: 'OK', y: 4340.0, color: '#68b65c'},{name: 'KO', y: 24488.0, color: '#f15b4f'}
  1087. ],
  1088. center: [775, -40],
  1089. size: 70,
  1090. showInLegend: false,
  1091. dataLabels: { enabled: false },
  1092. dataGrouping: { enabled: false }
  1093. }
  1094. ]
  1095. });
  1096. requestsChart.setTitle({
  1097. text: '<span class="chart_title">Number of responses per second</span>',
  1098. useHTML: true
  1099. });
  1100. });
  1101. </script>
  1102. </div>
  1103. </body>
  1104. </html>