req_send-message--1218031761.html 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925
  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 - Send Message</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. WebSocketEchoSimulation
  59. </div>
  60. <div class="sous-menu" id="sousMenu">
  61. <div class="sous-menu-spacer">
  62. <div class="item "><a href="index.html">Global</a></div>
  63. <div class="item ouvert"><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-large">
  72. </div>
  73. <div class="infos">
  74. <div class="infos-in">
  75. <div class="infos-title">Stats</div>
  76. <div class="info">
  77. <h2 class="first">Executions</h2>
  78. <table>
  79. <thead>
  80. <tr><th></th><th>Total</th><th>OK</th><th>KO</th></tr>
  81. </thead>
  82. <tbody>
  83. <tr>
  84. <td class="title">Total count</td>
  85. <td id="numberOfRequests" class="total"></td>
  86. <td id="numberOfRequestsOK" class="ok"></td>
  87. <td id="numberOfRequestsKO" class="ko"></td>
  88. </tr>
  89. <tr>
  90. <td class="title">Mean count/s</abbr></td>
  91. <td id="meanNumberOfRequestsPerSecond" class="total"></td>
  92. <td id="meanNumberOfRequestsPerSecondOK" class="ok"></td>
  93. <td id="meanNumberOfRequestsPerSecondKO" class="ko"></td>
  94. </tr>
  95. </tbody>
  96. </table>
  97. <h2 class="second">Response Time (ms)</h2>
  98. <table>
  99. <thead>
  100. <tr>
  101. <th></th>
  102. <th>Total</th>
  103. <th>OK</th>
  104. <th>KO</th>
  105. </tr>
  106. </thead>
  107. <tbody>
  108. <tr>
  109. <td class="title">Min</td>
  110. <td id="minResponseTime" class="total"></td>
  111. <td id="minResponseTimeOK" class="ok"></td>
  112. <td id="minResponseTimeKO" class="ko"></td>
  113. </tr>
  114. <tr>
  115. <td class="title">50th percentile</td>
  116. <td id="percentiles1" class="total"></td>
  117. <td id="percentiles1OK" class="ok"></td>
  118. <td id="percentiles1KO" class="ko"></td>
  119. </tr>
  120. <tr>
  121. <td class="title">75th percentile</td>
  122. <td id="percentiles2" class="total"></td>
  123. <td id="percentiles2OK" class="ok"></td>
  124. <td id="percentiles2KO" class="ko"></td>
  125. </tr>
  126. <tr>
  127. <td class="title">95th percentile</td>
  128. <td id="percentiles3" class="total"></td>
  129. <td id="percentiles3OK" class="ok"></td>
  130. <td id="percentiles3KO" class="ko"></td>
  131. </tr>
  132. <tr>
  133. <td class="title">99th percentile</td>
  134. <td id="percentiles4" class="total"></td>
  135. <td id="percentiles4OK" class="ok"></td>
  136. <td id="percentiles4KO" class="ko"></td>
  137. </tr>
  138. <tr>
  139. <td class="title">Max</td>
  140. <td id="maxResponseTime" class="total"></td>
  141. <td id="maxResponseTimeOK" class="ok"></td>
  142. <td id="maxResponseTimeKO" class="ko"></td>
  143. </tr>
  144. <tr>
  145. <td class="title">Mean</td>
  146. <td id="meanResponseTime" class="total"></td>
  147. <td id="meanResponseTimeOK" class="ok"></td>
  148. <td id="meanResponseTimeKO" class="ko"></td>
  149. </tr>
  150. <tr>
  151. <td class="title">Standard Deviation</td>
  152. <td id="standardDeviation" class="total"></td>
  153. <td id="standardDeviationOK" class="ok"></td>
  154. <td id="standardDeviationKO" class="ko"></td>
  155. </tr>
  156. </tbody>
  157. </table>
  158. </div>
  159. </div>
  160. </div>
  161. </div>
  162. <div class="statistics extensible-geant collapsed">
  163. <div class="title">
  164. Errors
  165. </div>
  166. <table id="container_errors" class="statistics-in extensible-geant">
  167. <thead>
  168. <tr>
  169. <th id="error-col-1" class="header sortable"><span>Error</span></th>
  170. <th id="error-col-2" class="header sortable"><span>Count</span></th>
  171. <th id="error-col-3" class="header sortable"><span>Percentage</span></th>
  172. </tr>
  173. </thead>
  174. <tbody>
  175. <tr>
  176. <td class="error-col-1 total ko">Client issued text frame but server has closed the WebSocket and max reconnects is reached<span class="value" style="display:none">0</span></td>
  177. <td class="value error-col-2 total ko">1</td>
  178. <td class="value error-col-3 total ko">100 %</td>
  179. </tr>
  180. </tbody>
  181. </table>
  182. </div>
  183. <div class="schema geant">
  184. <div id="responsetimeDistributionContainer" class="geant"></div>
  185. </div>
  186. <div class="schema geant">
  187. <div id="responsetimepercentilesovertimeokPercentilesContainer" class="geant"></div>
  188. </div>
  189. <div class="schema geant">
  190. <div id="requests" class="geant"></div>
  191. </div>
  192. <div class="schema geant">
  193. <div id="responses" class="geant"></div>
  194. </div>
  195. <div class="schema geant">
  196. <div id="container_response_time_dispersion" class="geant"></div>
  197. </div>
  198. </div>
  199. </div>
  200. </div>
  201. </div>
  202. </div>
  203. </div>
  204. <script>
  205. var pageStats = stats.contents['req_send-message--1218031761'].stats;
  206. $(document).ready(function() {
  207. $('.simulation-tooltip').popover({trigger:'hover', placement:'left'});
  208. setDetailsLinkUrl();
  209. setDetailsMenu();
  210. setActiveMenu();
  211. fillStats(pageStats);
  212. Highcharts.setOptions({
  213. global: { useUTC: false }
  214. });
  215. var rangesChart = new Highcharts.Chart({
  216. chart: {
  217. renderTo: 'ranges',
  218. marginRight: 100
  219. },
  220. credits: { enabled: false },
  221. legend: { enabled: false },
  222. title: { text: 'A title to let highcharts reserve the place for the title set later' },
  223. xAxis: {
  224. categories: [
  225. pageStats.group1.htmlName,
  226. pageStats.group2.htmlName,
  227. pageStats.group3.htmlName,
  228. pageStats.group4.htmlName
  229. ]
  230. },
  231. yAxis: {
  232. title: { text: 'Number of Requests' },
  233. reversedStacks: false
  234. },
  235. tooltip: {
  236. formatter: function() {
  237. var s;
  238. if (this.point.name) { // the pie chart
  239. s = ''+ this.point.name +': '+ this.y +'% requests';
  240. } else {
  241. s = ''+ this.y + ' requests';
  242. }
  243. return s;
  244. }
  245. },
  246. plotOptions: {
  247. series: {
  248. stacking: 'normal',
  249. shadow: true
  250. }
  251. },
  252. series: [
  253. {
  254. type: 'column',
  255. data: [{
  256. color: '#68b65c',
  257. y: pageStats.group1.count
  258. },
  259. {
  260. color: '#FFDD00',
  261. y: pageStats.group2.count
  262. },
  263. {
  264. color: '#FFA900',
  265. y: pageStats.group3.count
  266. },
  267. {
  268. color: '#f15b4f',
  269. y: pageStats.group4.count
  270. }]
  271. },
  272. {
  273. type: 'pie',
  274. name: 'Percentages',
  275. data: [
  276. {
  277. name: pageStats.group1.name,
  278. y: pageStats.group1.percentage,
  279. color: '#68b65c'
  280. },
  281. {
  282. name: pageStats.group2.name,
  283. y: pageStats.group2.percentage,
  284. color: '#FFDD00'
  285. },
  286. {
  287. name: pageStats.group3.name,
  288. y: pageStats.group3.percentage,
  289. color: '#FFA900'
  290. },
  291. {
  292. name: pageStats.group4.name,
  293. y: pageStats.group4.percentage,
  294. color: '#f15b4f'
  295. }
  296. ],
  297. center: [368, 0],
  298. size: 90,
  299. showInLegend: false,
  300. dataLabels: { enabled: false }
  301. }
  302. ]
  303. });
  304. rangesChart.setTitle({
  305. text: '<span class="chart_title">Response Time Ranges</span>',
  306. useHTML: true
  307. });
  308. $('#container_errors').sortable('#container_errors');
  309. var responsetimeDistributionChart = new Highcharts.Chart({
  310. chart: {
  311. renderTo: 'responsetimeDistributionContainer',
  312. type: 'column',
  313. marginBottom: 60
  314. },
  315. credits: { enabled: false },
  316. legend: {
  317. enabled: true,
  318. floating: true,
  319. y: 5,
  320. borderWidth: 0,
  321. itemStyle: { fontWeight: "normal" },
  322. symbolRadius: 0
  323. },
  324. title: { text: 'A title to let highcharts reserve the place for the title set later' },
  325. navigator: {
  326. maskInside: false
  327. },
  328. xAxis: {
  329. categories: ['0'],
  330. tickInterval: 20
  331. },
  332. yAxis: {
  333. min: 0,
  334. title: { text: 'Percentage of Requests' },
  335. reversedStacks: false
  336. },
  337. tooltip: {
  338. formatter: function() {
  339. return '<b>'+ this.x +' ms</b><br/>'+
  340. this.series.name +': '+ this.y +' %<br/>'+
  341. 'Total: '+ this.point.stackTotal + ' %';
  342. }
  343. },
  344. plotOptions: {
  345. series: {
  346. groupPadding: 0,
  347. stacking: 'normal',
  348. shadow: true
  349. }
  350. },
  351. series: [
  352. {
  353. type: 'column',
  354. color: '#68b65c',
  355. name: 'OK',
  356. data: [
  357. ],
  358. tooltip: { yDecimals: 0, ySuffix: 'ms' }
  359. },
  360. {
  361. type: 'column',
  362. color: '#f15b4f',
  363. name: 'KO',
  364. data: [
  365. 100.0
  366. ],
  367. tooltip: { yDecimals: 0, ySuffix: 'ms' }
  368. }
  369. ]
  370. });
  371. responsetimeDistributionChart.setTitle({
  372. text: '<span class="chart_title">Response Time Distribution</span>',
  373. useHTML: true
  374. });
  375. var responsetimepercentilesovertimeokPercentiles = unpack([[1748962025,null],[1748962026,null],[1748962027,null]]);
  376. var responsetimepercentilesovertimeokPercentilesChart = new Highcharts.StockChart({
  377. chart: {
  378. renderTo: 'responsetimepercentilesovertimeokPercentilesContainer',
  379. zoomType: 'x',
  380. marginBottom: 60
  381. },
  382. colors: ['#c4fd90', '#7ff77f', '#6ff2ad', '#61ede6', '#58c7e0', '#4ea1d4', '#487ad9', '#3f52cc', '#7335dc', '#c73905', '#FFA900'],
  383. credits: { enabled: false },
  384. legend: {
  385. enabled: true,
  386. floating: true,
  387. y: -65,
  388. borderWidth: 0,
  389. itemStyle: { fontWeight: "normal" },
  390. symbolRadius: 0
  391. },
  392. title: { text: 'A title to let highcharts reserve the place for the title set later' },
  393. navigator: {
  394. maskInside: false,
  395. baseSeries: 9
  396. },
  397. rangeSelector: {
  398. rangeSelector: { align: "left" },
  399. buttonSpacing: 0,
  400. buttonTheme: {
  401. fill: '#CFC9C6',
  402. padding: 1,
  403. stroke: '#000000',
  404. 'stroke-width': 0.25,
  405. style: {
  406. color: '#000000',
  407. fontWeight: 'bold',
  408. },
  409. states: {
  410. stroke: '#92918C',
  411. 'stroke-width': 0.25,
  412. hover: {
  413. fill: '#92918C',
  414. style: { color: 'black' }
  415. },
  416. select: {
  417. fill: '#FFA900',
  418. style: { color: 'white' }
  419. }
  420. }
  421. },
  422. buttons : [
  423. {
  424. type : 'minute',
  425. count : 1,
  426. text : '1m'
  427. }, {
  428. type : 'minute',
  429. count : 10,
  430. text : '10m'
  431. }, {
  432. type : 'hour',
  433. count : 1,
  434. text : '1h'
  435. }, {
  436. type : 'all',
  437. count : 1,
  438. text : 'All'
  439. }
  440. ],
  441. selected : 3,
  442. inputEnabled : false
  443. },
  444. xAxis: {
  445. type: 'datetime',
  446. ordinal: false,
  447. maxZoom: 10000 // three days
  448. },
  449. yAxis:[
  450. {
  451. min: 0,
  452. title: { text: 'Response Time (ms)' },
  453. opposite: false
  454. }, {
  455. min: 0,
  456. title: {
  457. text: 'Active Users',
  458. style: { color: '#FFA900' }
  459. },
  460. opposite: true
  461. }
  462. ],
  463. plotOptions: {
  464. arearange: { lineWidth: 1 },
  465. series: {
  466. dataGrouping: { enabled: false }
  467. }
  468. },
  469. series: [
  470. {
  471. pointInterval: 1000,
  472. name: 'min',
  473. data: responsetimepercentilesovertimeokPercentiles[0],
  474. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  475. type : 'area',
  476. yAxis: 0,
  477. zIndex: 10
  478. },
  479. {
  480. pointInterval: 1000,
  481. name: '25%',
  482. data: responsetimepercentilesovertimeokPercentiles[1],
  483. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  484. type : 'area',
  485. yAxis: 0,
  486. zIndex: 9
  487. },
  488. {
  489. pointInterval: 1000,
  490. name: '50%',
  491. data: responsetimepercentilesovertimeokPercentiles[2],
  492. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  493. type : 'area',
  494. yAxis: 0,
  495. zIndex: 8
  496. },
  497. {
  498. pointInterval: 1000,
  499. name: '75%',
  500. data: responsetimepercentilesovertimeokPercentiles[3],
  501. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  502. type : 'area',
  503. yAxis: 0,
  504. zIndex: 7
  505. },
  506. {
  507. pointInterval: 1000,
  508. name: '80%',
  509. data: responsetimepercentilesovertimeokPercentiles[4],
  510. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  511. type : 'area',
  512. yAxis: 0,
  513. zIndex: 6
  514. },
  515. {
  516. pointInterval: 1000,
  517. name: '85%',
  518. data: responsetimepercentilesovertimeokPercentiles[5],
  519. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  520. type : 'area',
  521. yAxis: 0,
  522. zIndex: 5
  523. },
  524. {
  525. pointInterval: 1000,
  526. name: '90%',
  527. data: responsetimepercentilesovertimeokPercentiles[6],
  528. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  529. type : 'area',
  530. yAxis: 0,
  531. zIndex: 4
  532. },
  533. {
  534. pointInterval: 1000,
  535. name: '95%',
  536. data: responsetimepercentilesovertimeokPercentiles[7],
  537. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  538. type : 'area',
  539. yAxis: 0,
  540. zIndex: 3
  541. },
  542. {
  543. pointInterval: 1000,
  544. name: '99%',
  545. data: responsetimepercentilesovertimeokPercentiles[8],
  546. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  547. type : 'area',
  548. yAxis: 0,
  549. zIndex: 2
  550. },
  551. {
  552. pointInterval: 1000,
  553. name: 'max',
  554. data: responsetimepercentilesovertimeokPercentiles[9],
  555. tooltip: { yDecimals: 0, ySuffix: 'ms' },
  556. type : 'area',
  557. yAxis: 0,
  558. zIndex: 1
  559. },
  560. allUsersData
  561. ]
  562. });
  563. responsetimepercentilesovertimeokPercentilesChart.setTitle({
  564. text: '<span class="chart_title chart_title_">Response Time Percentiles over Time (OK)</span>',
  565. useHTML: true
  566. });
  567. var requests = unpack([[1748962025,[0,0,0]],[1748962026,[0,0,0]],[1748962027,[1,0,1]]]);
  568. var requestsChart = new Highcharts.StockChart({
  569. chart: {
  570. renderTo: 'requests',
  571. zoomType: 'x',
  572. marginBottom: 60
  573. },
  574. credits: { enabled: false },
  575. legend: {
  576. enabled: true,
  577. floating: true,
  578. y: -65,
  579. borderWidth: 0,
  580. itemStyle: { fontWeight: "normal" },
  581. symbolRadius: 0
  582. },
  583. title: { text: 'A title to let highcharts reserve the place for the title set later' },
  584. navigator: {
  585. maskInside: false
  586. },
  587. rangeSelector: {
  588. buttonSpacing: 0,
  589. buttonTheme: {
  590. fill: '#CFC9C6',
  591. padding: 1,
  592. stroke: '#000000',
  593. 'stroke-width': 0.25,
  594. style: {
  595. color: '#000000',
  596. fontWeight: 'bold',
  597. },
  598. states: {
  599. stroke: '#000000',
  600. 'stroke-width': 0.25,
  601. hover: {
  602. fill: '#92918C',
  603. style: { color: 'black' }
  604. },
  605. select: {
  606. fill: '#FFA900',
  607. style: { color: 'white' }
  608. }
  609. }
  610. },
  611. buttons : [
  612. {
  613. type : 'minute',
  614. count : 1,
  615. text : '1m'
  616. }, {
  617. type : 'minute',
  618. count : 10,
  619. text : '10m'
  620. }, {
  621. type : 'hour',
  622. count : 1,
  623. text : '1h'
  624. }, {
  625. type : 'all',
  626. count : 1,
  627. text : 'All'
  628. }
  629. ],
  630. selected : 3,
  631. inputEnabled : false
  632. },
  633. plotOptions: {
  634. series: {
  635. dataGrouping: { enabled: false }
  636. },
  637. area: {
  638. stacking: 'normal'
  639. }
  640. },
  641. xAxis: {
  642. type: 'datetime',
  643. ordinal: false,
  644. maxZoom: 10000 // three days
  645. },
  646. yAxis:[
  647. {
  648. min: 0,
  649. title: { text: 'Number of requests' },
  650. opposite: false,
  651. reversedStacks: false
  652. }, {
  653. min: 0,
  654. title: {
  655. text: 'Active Users',
  656. style: { color: '#FFA900' }
  657. },
  658. opposite: true
  659. }
  660. ],
  661. series: [
  662. {
  663. color: '#5E7BE2',
  664. name: 'All',
  665. data: requests[0],
  666. tooltip: { yDecimals: 0, ySuffix: '', valueDecimals: 0 }
  667. ,type: 'area'},
  668. allUsersData
  669. ]
  670. });
  671. requestsChart.setTitle({
  672. text: '<span class="chart_title">Number of requests per second</span>',
  673. useHTML: true
  674. });
  675. var responses = unpack([[1748962025,[0,0,0]],[1748962026,[0,0,0]],[1748962027,[1,0,1]]]);
  676. var requestsChart = new Highcharts.StockChart({
  677. chart: {
  678. renderTo: 'responses',
  679. zoomType: 'x',
  680. marginBottom: 60
  681. },
  682. credits: { enabled: false },
  683. legend: {
  684. enabled: true,
  685. floating: true,
  686. y: -65,
  687. borderWidth: 0,
  688. itemStyle: { fontWeight: "normal" },
  689. symbolRadius: 0
  690. },
  691. title: { text: 'A title to let highcharts reserve the place for the title set later' },
  692. navigator: {
  693. maskInside: false
  694. },
  695. rangeSelector: {
  696. buttonSpacing: 0,
  697. buttonTheme: {
  698. fill: '#CFC9C6',
  699. padding: 1,
  700. stroke: '#000000',
  701. 'stroke-width': 0.25,
  702. style: {
  703. color: '#000000',
  704. fontWeight: 'bold',
  705. },
  706. states: {
  707. stroke: '#000000',
  708. 'stroke-width': 0.25,
  709. hover: {
  710. fill: '#92918C',
  711. style: { color: 'black' }
  712. },
  713. select: {
  714. fill: '#FFA900',
  715. style: { color: 'white' }
  716. }
  717. }
  718. },
  719. buttons : [
  720. {
  721. type : 'minute',
  722. count : 1,
  723. text : '1m'
  724. }, {
  725. type : 'minute',
  726. count : 10,
  727. text : '10m'
  728. }, {
  729. type : 'hour',
  730. count : 1,
  731. text : '1h'
  732. }, {
  733. type : 'all',
  734. count : 1,
  735. text : 'All'
  736. }
  737. ],
  738. selected : 3,
  739. inputEnabled : false
  740. },
  741. plotOptions: {
  742. series: {
  743. dataGrouping: { enabled: false }
  744. },
  745. area: {
  746. stacking: 'normal'
  747. }
  748. },
  749. xAxis: {
  750. type: 'datetime',
  751. ordinal: false,
  752. maxZoom: 10000 // three days
  753. },
  754. yAxis:[
  755. {
  756. min: 0,
  757. title: { text: 'Number of responses' },
  758. opposite: false,
  759. reversedStacks: false
  760. }, {
  761. min: 0,
  762. title: {
  763. text: 'Active Users',
  764. style: { color: '#FFA900' }
  765. },
  766. opposite: true
  767. }
  768. ],
  769. series: [
  770. {
  771. color: '#5E7BE2',
  772. name: 'All',
  773. data: responses[0],
  774. tooltip: { yDecimals: 0, ySuffix: '', valueDecimals: 0 }
  775. },
  776. {
  777. color: '#68b65c',
  778. name: 'OK',
  779. data: responses[1],
  780. tooltip: { yDecimals: 0, ySuffix: '', valueDecimals: 0 }
  781. ,type: 'area'},
  782. {
  783. color: '#f15b4f',
  784. name: 'KO',
  785. data: responses[2],
  786. tooltip: { yDecimals: 0, ySuffix: '', valueDecimals: 0 }
  787. ,type: 'area'},
  788. allUsersData,
  789. {
  790. type: 'pie',
  791. name: 'Distribution',
  792. data: [
  793. {name: 'OK', y: 0.0, color: '#68b65c'},{name: 'KO', y: 1.0, color: '#f15b4f'}
  794. ],
  795. center: [775, -40],
  796. size: 70,
  797. showInLegend: false,
  798. dataLabels: { enabled: false },
  799. dataGrouping: { enabled: false }
  800. }
  801. ]
  802. });
  803. requestsChart.setTitle({
  804. text: '<span class="chart_title">Number of responses per second</span>',
  805. useHTML: true
  806. });
  807. var scatterChart = new Highcharts.Chart({
  808. chart: {
  809. renderTo: 'container_response_time_dispersion',
  810. defaultSeriesType: 'scatter',
  811. zoomType: 'xy',
  812. marginBottom: 90
  813. },
  814. credits: { enabled: false },
  815. xAxis: {
  816. title: {
  817. enabled: true,
  818. text: 'Global number of requests per second',
  819. style: { fontWeight: 'bold' }
  820. },
  821. startOnTick: true,
  822. endOnTick: true,
  823. showLastLabel: true,
  824. min: 0
  825. },
  826. title: { text: 'A title to let highcharts reserve the place for the title set later' },
  827. yAxis: {
  828. min: 0,
  829. title: { text: 'Response Time (ms)' }
  830. },
  831. tooltip: {
  832. formatter: function() {
  833. return ''+ this.y +' ms at ' + this.x + ' allreq/s';
  834. }
  835. },
  836. legend: {
  837. enabled: true,
  838. floating: true,
  839. y: 0,
  840. borderWidth: 0,
  841. itemStyle: { fontWeight: "normal" },
  842. },
  843. plotOptions: {
  844. scatter: {
  845. marker: {
  846. radius: 3,
  847. states: {
  848. hover: {
  849. enabled: true,
  850. lineColor: 'rgb(100,100,100)'
  851. }
  852. }
  853. },
  854. states: {
  855. hover: {
  856. marker: { enabled: false }
  857. }
  858. }
  859. }
  860. },
  861. series: [
  862. {
  863. type: 'scatter',
  864. color: '#68b65c',
  865. name: 'OK',
  866. data: [
  867. []
  868. ]},
  869. {
  870. type: 'scatter',
  871. color: '#f15b4f',
  872. name: 'KO',
  873. data: [
  874. [1,0]
  875. ]}
  876. ]
  877. });
  878. scatterChart.setTitle({
  879. text: '<span class="chart_title">Response Time against Global Throughput</span>',
  880. useHTML: true
  881. });
  882. });
  883. </script>
  884. </div>
  885. </body>
  886. </html>