locust 2.26.1.dev72__py3-none-any.whl → 2.27.1.dev7__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. locust/_version.py +2 -2
  2. locust/argument_parser.py +1 -1
  3. locust/env.py +0 -2
  4. locust/html.py +37 -83
  5. locust/main.py +10 -14
  6. locust/stats.py +3 -10
  7. locust/test/test_fasthttp.py +6 -4
  8. locust/test/test_main.py +6 -15
  9. locust/test/test_web.py +53 -199
  10. locust/web.py +18 -56
  11. {locust-2.26.1.dev72.dist-info → locust-2.27.1.dev7.dist-info}/METADATA +1 -1
  12. {locust-2.26.1.dev72.dist-info → locust-2.27.1.dev7.dist-info}/RECORD +16 -41
  13. locust/static/chart.js +0 -133
  14. locust/static/css/application.css +0 -491
  15. locust/static/css/application.css.map +0 -1
  16. locust/static/css/tables.css +0 -74
  17. locust/static/css/tables.css.map +0 -1
  18. locust/static/echarts.common.min.js +0 -22
  19. locust/static/img/favicon.ico +0 -0
  20. locust/static/img/logo.png +0 -0
  21. locust/static/img/ui-screenshot-charts.png +0 -0
  22. locust/static/img/ui-screenshot-start-test.png +0 -0
  23. locust/static/img/ui-screenshot-stats.png +0 -0
  24. locust/static/img/ui-screenshot-workers.png +0 -0
  25. locust/static/jquery-1.11.3.min.js +0 -5
  26. locust/static/jquery.jqote2.min.js +0 -14
  27. locust/static/jquery.tools.min.js +0 -17
  28. locust/static/locust.js +0 -324
  29. locust/static/sass/_base.sass +0 -27
  30. locust/static/sass/_mixins.sass +0 -3
  31. locust/static/sass/application.sass +0 -320
  32. locust/static/sass/tables.sass +0 -61
  33. locust/static/tasks.js +0 -48
  34. locust/static/vintage.js +0 -35
  35. locust/templates/index.html +0 -370
  36. locust/templates/report.html +0 -265
  37. locust/templates/stats_data.html +0 -10
  38. {locust-2.26.1.dev72.dist-info → locust-2.27.1.dev7.dist-info}/LICENSE +0 -0
  39. {locust-2.26.1.dev72.dist-info → locust-2.27.1.dev7.dist-info}/WHEEL +0 -0
  40. {locust-2.26.1.dev72.dist-info → locust-2.27.1.dev7.dist-info}/entry_points.txt +0 -0
  41. {locust-2.26.1.dev72.dist-info → locust-2.27.1.dev7.dist-info}/top_level.txt +0 -0
@@ -1,61 +0,0 @@
1
- @import "mixins"
2
-
3
- table.stats
4
- width: 100%
5
- border-radius: 3px
6
- border: 2px solid #11251c
7
- border-spacing: 0
8
- margin-bottom: 30px
9
-
10
- thead
11
-
12
- padding: 0
13
- margin: 0
14
- color: #a9c5ba
15
-
16
- tr
17
- background: #11251c
18
- &:nth-child(even)
19
- background: #11251c
20
- &:hover
21
- background: #11251c
22
- th
23
- font-weight: bold
24
- cursor: default
25
- &.nowrap
26
- white-space: nowrap
27
- &[data-sortkey]
28
- cursor: pointer
29
- tr
30
- &:hover
31
- background: #1d4434
32
-
33
- td, th
34
- padding: 10px
35
- margin: 0
36
- text-align: left
37
-
38
- &:first-child
39
- padding-left: 16px
40
- &:last-child
41
- padding-right: 16px
42
-
43
- &.numeric
44
- text-align: right
45
- td
46
- max-width: 450px
47
- overflow: hidden
48
- word-wrap: break-word
49
- white-space: no-wrap
50
- text-overflow: ellipsis
51
- +max-width(1100px)
52
- max-width: 350px
53
-
54
- &:nth-child(even)
55
- background: #153126
56
- &:hover
57
- background: #1d4434
58
- &.total
59
- background: #11251c
60
- td
61
- font-weight: bold
locust/static/tasks.js DELETED
@@ -1,48 +0,0 @@
1
- function getRatioPercent(ratio) {
2
- return (ratio * 100).toFixed(1) + "%";
3
- }
4
-
5
- function _initTasks_sub(li, tasks) {
6
- if (tasks) {
7
- var ul = $('<ul></ul>');
8
- for (const [key, task] of Object.entries(tasks)) {
9
- var liTask = $('<li></li>').text(getRatioPercent(task.ratio) + " " + key);
10
- _initTasks_sub(liTask, task.tasks);
11
- ul.append(liTask);
12
- }
13
- li.append(ul);
14
- }
15
- }
16
-
17
- function _getTasks_div(root, title) {
18
- var taskDiv = $('<div></div>');
19
- var taskDivHeading = $('<h3></h3>').text(title);
20
- taskDiv.append(taskDivHeading);
21
- var ulClasses = $('<ul></ul>');
22
- for (const [key, clazz] of Object.entries(root)) {
23
- var liClass = $('<li></li>').text(getRatioPercent(clazz.ratio) + " " + key);
24
- _initTasks_sub(liClass, clazz.tasks)
25
- ulClasses.append(liClass);
26
- }
27
- taskDiv.append(ulClasses);
28
- return taskDiv
29
- }
30
-
31
- function _renderTasks(data) {
32
- var tasks = $('#tasks .tasks');
33
- tasks.empty();
34
- tasks.append(_getTasks_div(data.per_class, 'Ratio per User class'));
35
- tasks.append(_getTasks_div(data.total, 'Total ratio'));
36
- }
37
-
38
- function fillTasksFromObj() {
39
- var tasks = $('#tasks .tasks')
40
- var data = tasks.data('tasks');
41
- _renderTasks(data)
42
- }
43
-
44
- function fillTasksFromRequest() {
45
- $.get('./tasks', function (data) {
46
- _renderTasks(data)
47
- });
48
- }
locust/static/vintage.js DELETED
@@ -1,35 +0,0 @@
1
- (function (root, factory) {
2
- if (typeof define === 'function' && define.amd) {
3
- // AMD. Register as an anonymous module.
4
- define(['exports', 'echarts'], factory);
5
- } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
6
- // CommonJS
7
- factory(exports, require('echarts'));
8
- } else {
9
- // Browser globals
10
- factory({}, root.echarts);
11
- }
12
- }(this, function (exports, echarts) {
13
- var log = function (msg) {
14
- if (typeof console !== 'undefined') {
15
- console && console.error && console.error(msg);
16
- }
17
- };
18
- if (!echarts) {
19
- log('ECharts is not Loaded');
20
- return;
21
- }
22
- var colorPalette = ['#00ca5a','#ffca5a', '#d7ab82', '#6e7074','#61a0a8','#efa18d', '#787464', '#cc7e63', '#724e58', '#4b565b'];
23
- echarts.registerTheme('vintage', {
24
- color: colorPalette,
25
- backgroundColor: '#132b21',
26
- xAxis: {lineColor: "#f00"},
27
- graph: {
28
- color: colorPalette,
29
- },
30
- textStyle: {color:"#b3c3bc"},
31
- title: {
32
- textStyle:{color:"#b3c3bc"}
33
- },
34
- });
35
- }));
@@ -1,370 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>Locust for {{ locustfile }}</title>
5
- <link rel="stylesheet" type="text/css" href="./static/css/application.css?v={{ version }}" media="screen">
6
- <link rel="shortcut icon" href="./static/img/favicon.ico" type="image/x-icon"/>
7
- {% block extended_head %}
8
- {% endblock extended_head %}
9
- </head>
10
- <body class="{{state}}">
11
- <div class="top">
12
- <div class="top-content container">
13
- <img src="./static/img/logo.png?v={{ version }}" class="logo" />
14
- <div class="boxes">
15
- <div class="top_box box_url">
16
- <div class="label">HOST</div>
17
- <div class="value" id="host_url">
18
- <a id="host_url_link" href="" target="_blank"><span id="host_url_link_value">{{host}}</span></a>
19
- </div>
20
- </div>
21
- <div class="top_box box_status">
22
- <div class="label">STATUS</div>
23
- <div class="value" id="status_text">
24
- {{state}}
25
- </div>
26
- <div class="user_count">
27
- <span id="userCount">{{user_count}}</span> users
28
- </div>
29
- <a href="#" class="new-test" id="new-test">New test</a>
30
- <a href="#" class="edit-test" id="edit-test">Edit</a>
31
- </div>
32
- {% if is_distributed %}
33
- <div class="top_box box_workers" id="box_workers">
34
- <div class="label">WORKERS</div>
35
- <div class="value" id="workerCount">{{worker_count}}</div>
36
- </div>
37
- {% endif %}
38
- <div class="top_box box_rps box_running" id="box_rps">
39
- <div class="label">RPS</div>
40
- <div class="value" id="total_rps">0</div>
41
- </div>
42
- <div class="top_box box_fail box_running" id="box_fail">
43
- <div class="label">FAILURES</div>
44
- <div class="value"><span id="fail_ratio"></span>%</div>
45
- </div>
46
- <div class="top_box box_stop box_running" id="box_stop">
47
- <a href="./stop" class="stop-button"><i></i>STOP</a>
48
- <a href="./stats/reset" class="reset-button">Reset<br>Stats</a>
49
- </div>
50
- </div>
51
- <div style="clear:both;"></div>
52
- </div>
53
- </div>
54
- <div class="dialogs">
55
- <div class="dialog start" id="start">
56
- <div style="position:relative;">
57
- <a href="#" class="close_link">Close</a>
58
- </div>
59
- <div class="padder">
60
- <h2>Start new load test</h2>
61
- <form action="./swarm" method="POST" id="swarm_form">
62
- {% if show_userclass_picker %}
63
- <label for="available_user_classes">UserClasses </label>
64
- <select multiple name="user_classes" id="user-classes" class="userClass">
65
- {% for user in available_user_classes %}
66
- <option value="{{user}}" selected>{{user}}</option>
67
- {% endfor %}
68
- </select><br>
69
- <label for="available_shape_classes">ShapeClass </label>
70
- <select name="shape_class" id="shape-classes" class="shapeClass">
71
- {% for shape_class in available_shape_classes %}
72
- <option value="{{shape_class}}">{{shape_class}}</option>
73
- {% endfor %}
74
- </select><br>
75
- {% endif %}
76
- {% if hide_common_options %}
77
- <label for="user_count">Number of users <span style="color:#8a8a8a;">(peak concurrency)</span></label>
78
- <input type="text" name="user_count" id="user_count" class="val_disabled" value="-" disabled="disabled" title="Disabled for tests using LoadTestShape class"/><br>
79
- <input type="hidden" name="user_count" id="user_count" value="0"/><br>
80
- <label for="spawn_rate">Spawn rate <span style="color:#8a8a8a;">(users started/second)</span></label>
81
- <input type="text" name="spawn_rate" id="spawn_rate" class="val_disabled" value="-" disabled="disabled" title="Disabled for tests using LoadTestShape class"/><br>
82
- <input type="hidden" name="spawn_rate" id="spawn_rate" value="0"/><br>
83
- {% else %}
84
- <label for="user_count">Number of users <span style="color:#8a8a8a;">(peak concurrency)</span></label>
85
- <input type="text" name="user_count" id="user_count" class="val" value="{{ num_users or "1" }}" onfocus="this.select()"/><br>
86
- <label for="spawn_rate">Spawn rate <span style="color:#8a8a8a;">(users started/second)</span></label>
87
- <input type="text" name="spawn_rate" id="spawn_rate" class="val" value="{{ spawn_rate or "1" }}" onfocus="this.select()"/><br>
88
- {% endif %}
89
- <label for="host">
90
- Host <span style="color:#8a8a8a;">(e.g. http://www.example.com)</span>
91
- {% if override_host_warning %}
92
- <span style="color:#8a8a8a; font-size:12px;">(setting this will override the host on all User classes)</span>
93
- {% endif %}
94
- </label>
95
- <input type="text" name="host" id="host" class="val" autocapitalize="off" autocorrect="off" value="{{ host or "" }}" onfocus="this.select()"/><br>
96
- <a href="#" onclick="$('.advancedOptions').toggle();">Advanced options</a>
97
- <div class="advancedOptions" style="display:none">
98
- <label for="run_time">
99
- Run time
100
- <span style="color:#8a8a8a;">(e.g. 20, 20s, 3m, 2h, 1h20m, 3h30m10s, etc.)</span>
101
- </label>
102
- <input type="text" name="run_time" id="run_time" class="val" value="{{ run_time or "" }}" onfocus="this.select()"/><br>
103
- </div>
104
- {% if extra_options %}<label>Custom parameters:</label>{% endif %}
105
- {% for key, value in extra_options.items() %}
106
- {% if not ((value.default_value is none) or (value.default_value is boolean)) %}
107
- <label for="{{key}}">
108
- {{key.replace('_', ' ').capitalize()}}
109
- {% if value.help_text %}
110
- <span style="color:#8a8a8a;">({{value.help_text}})</span>
111
- {% endif %}
112
- </label>
113
- {% if value.choices %}
114
- <select name="{{key}}" id="{{key}}" class="val">
115
- {% for choice in value.choices %}
116
- <option value="{{choice}}" {% if choice == value.default_value %}selected{% endif %}>{{choice}}</option>
117
- {% endfor %}
118
- </select><br>
119
- {% else %}
120
- <input type="{{'password' if value.is_secret else 'text'}}" name="{{key}}" id="{{key}}" class="val" value="{{value.default_value}}" /><br>
121
- {% endif %}
122
- {% endif %}
123
- {% endfor %}
124
- {% set glob={'header_printed': False} %}
125
- {% for key, value in extra_options.items() %}
126
- {% if (value.default_value is none) or (value.default_value is boolean) %}
127
- {% if not glob.header_printed %}
128
- The following custom parameters can't be set in the Web UI, because it is a boolean or None type:<br>
129
- {% set _ = glob.update({'header_printed':True}) %}
130
- {% endif %}
131
- {{key}}<br>
132
- {% endif %}
133
- {% endfor %}
134
- <button type="submit">Start</button>
135
- </form>
136
- <div style="clear:right;margin-bottom: 60px;"></div>
137
- </div>
138
- </div>
139
-
140
- <div class="dialog edit" id="edit">
141
- <div style="position:relative;">
142
- <a href="#" class="close_link">Close</a>
143
- </div>
144
- <div class="padder">
145
- <h2>Edit running load test</h2>
146
- <form action="./swarm" method="POST" id="edit_form">
147
- {% if hide_common_options %}
148
- <label for="new_user_count">Number of users (peak concurrency)</label>
149
- <input type="text" name="user_count" id="new_user_count" class="val_disabled" value="-" disabled="disabled" title="Disabled for tests using LoadTestShape class"/><br>
150
- <label for="spawn_rate">Spawn rate <span style="color:#8a8a8a;">(users added/stopped per second)</span></label>
151
- <input type="text" name="spawn_rate" id="new_spawn_rate" class="val_disabled" value="-" disabled="disabled" title="Disabled for tests using LoadTestShape class"/><br>
152
- {% else %}
153
- <label for="new_user_count">Number of users (peak concurrency)</label>
154
- <input type="text" name="user_count" id="new_user_count" class="val" value="{{ num_users or "1" }}" onfocus="this.select()"/><br>
155
- <label for="spawn_rate">Spawn rate <span style="color:#8a8a8a;">(users added/stopped per second)</span></label>
156
- <input type="text" name="spawn_rate" id="new_spawn_rate" class="val" value="{{ spawn_rate or "1" }}" onfocus="this.select()"/><br>
157
- {% endif %}
158
- {% if hide_common_options %}
159
- <button type="submit" disabled>Start</button>
160
- {% else %}
161
- <button type="submit">Start</button>
162
- {% endif %}
163
- </form>
164
- <div style="clear:right;"></div>
165
- </div>
166
- </div>
167
- </div>
168
-
169
- <div class="main" id="main">
170
- <nav class="menu">
171
- <ul class="tabs container">
172
- <li><a href="#">Statistics</a></li>
173
- <li><a href="#" class="chart-tab-link">Charts</a></li>
174
- <li><a href="#">Failures</a></li>
175
- <li><a href="#">Exceptions</a></li>
176
- <li><a href="#">Current ratio</a></li>
177
- <li><a href="#">Download Data</a></li>
178
- {% if is_distributed %}
179
- <li><a href="#">Workers</a></li>
180
- {% endif %}
181
- {% block extended_tabs %}{% endblock extended_tabs %}
182
- </ul>
183
- </nav>
184
- <div class="panes container">
185
- <div style="display:none;">
186
- <table id="stats" class="stats">
187
- <thead>
188
- <tr>
189
- <th class="stats_label" href="#" data-sortkey="method">Type</th>
190
- <th class="stats_label" href="#" data-sortkey="name">Name</th>
191
- <th class="stats_label numeric nowrap" href="#" data-sortkey="num_requests" title="Number of requests"># Requests</th>
192
- <th class="stats_label numeric nowrap" href="#" data-sortkey="num_failures" title="Number of failures"># Fails</th>
193
- <th class="stats_label numeric" href="#" data-sortkey="median_response_time" title="Median response time">Median (ms)</th>
194
- <th class="stats_label numeric" href="#" data-sortkey="ninetieth_response_time" title="Ninetieth percentile response time, because the response time greater than 100ms is rounded, you may see it greater than the max response time">90%ile (ms)</th>
195
- <th class="stats_label numeric" href="#" data-sortkey="ninety_ninth_response_time"
196
- title="Ninety-ninth percentile response time, because the response time greater than 100ms is rounded, you may see it greater than the max response time">
197
- 99%ile (ms)</th>
198
- <th class="stats_label numeric" href="#" data-sortkey="avg_response_time" title="Average response time">Average (ms)</th>
199
- <th class="stats_label numeric" href="#" data-sortkey="min_response_time" title="Min response time">Min (ms)</th>
200
- <th class="stats_label numeric" href="#" data-sortkey="max_response_time" title="Max response time">Max (ms)</th>
201
- <th class="stats_label numeric" href="#" data-sortkey="avg_content_length" title="Average response size">Average size (bytes)</th>
202
- <th class="stats_label numeric" href="#" data-sortkey="current_rps" title="Current number of requests per second">Current RPS</th>
203
- <th class="stats_label numeric" href="#" data-sortkey="current_fail_per_sec" title="Current number of failures per second">Current Failures/s</th>
204
- </tr>
205
- </thead>
206
- <tbody>
207
- </tbody>
208
- </table>
209
- </div>
210
- <div id="charts" style="display:none;">
211
- <div class="charts-container"></div>
212
- </div>
213
- <div style="display:none;">
214
- <table id="errors" class="stats">
215
- <thead>
216
- <th class="error_count stats_label" data-sortkey="occurrences"># fails</th>
217
- <th class="stats_label" href="#" data-sortkey="method">Method</th>
218
- <th class="stats_label" href="#" data-sortkey="name">Name</th>
219
- <th class="error_type stats_label" data-sortkey="error">Type</th>
220
- </thead>
221
- <tbody>
222
- </tbody>
223
- </table>
224
- </div>
225
- <div style="display:none;">
226
- <table id="exceptions" class="stats">
227
- <thead>
228
- <th class="exception_occurrences stats_label"># occurrences</th>
229
- <th class="exception_traceback stats_label">Traceback</th>
230
- </thead>
231
- <tbody>
232
- </tbody>
233
- </table>
234
- </div>
235
- <div id="tasks" style="display:none;">
236
- <p>Script: <span>{{ locustfile }}</span></p>
237
- <div class="tasks" data-tasks="{{tasks}}"></div>
238
- </div>
239
- <div style="display:none;">
240
- <div style="margin-top:20px;">
241
- <a href="./stats/requests/csv">Download request statistics CSV</a><br>
242
- {% if stats_history_enabled %}
243
- <a href="./stats/requests_full_history/csv">Download full request statistics history CSV</a><br>
244
- {% endif %}
245
- <a href="./stats/failures/csv">Download failures CSV</a><br>
246
- <a href="./exceptions/csv">Download exceptions CSV</a><br>
247
- <a href="./stats/report" target="_blank">Download Report</a><br>
248
- </div>
249
- </div>
250
- {% if is_distributed %}
251
- <div style="display:none;">
252
- <table class="stats" id="workers">
253
- <thead>
254
- <tr>
255
- <th class="stats_label" href="#" data-sortkey="id">Worker</th>
256
- <th class="stats_label" href="#" data-sortkey="state">State</th>
257
- <th class="stats_label numeric" href="#" data-sortkey="user_count" title="Number of users on this worker"># users</th>
258
- <th class="stats_label numeric" href="#" data-sortkey="cpu_usage" title="CPU usage of process">CPU usage</th>
259
- <th class="stats_label numeric" href="#" data-sortkey="memory_usage" title="Memory usage of process">Memory usage</th>
260
- </tr>
261
- </thead>
262
- <tbody>
263
- </tbody>
264
- </table>
265
- </div>
266
- {% endif %}
267
- {% block extended_panes %}{% endblock extended_panes %}
268
- </div>
269
- </div>
270
- <div class="about" style="display:none;">
271
- <div style="position:relative;">
272
- <a href="#" class="close_link">Close</a>
273
- </div>
274
- <div class="padder">
275
- <h1>About</h1>
276
- <h2>Authors and Copyright</h2>
277
- <a href="https://github.com/heyman">Jonatan Heyman</a><br>
278
- <a href="https://github.com/cyberw">Lars Holmberg</a><br>
279
- <a href="https://github.com/andrewbaldwin44">Andrew Baldwin</a><br>
280
- Carl Byström, Joakim Hamrén & Hugo Heyman<br>
281
- Many thanks to our other great <a href="https://github.com/locustio/locust/graphs/contributors">contributors</a>!
282
- <h2>Version <a href="https://github.com/locustio/locust/releases/tag/{{version}}">{{version}}</a></h2>
283
- <h1>License</h1>
284
- <a href="https://github.com/locustio/locust/blob/master/LICENSE">MIT license</a>
285
- </div>
286
- </div>
287
- <nav class="footer">
288
- <div class="container">
289
- <a href="#" onclick="$('.about').fadeIn();">About</a>
290
- </div>
291
- </nav>
292
- <script type="text/javascript" src="./static/jquery-1.11.3.min.js"></script>
293
- <script type="text/javascript" src="./static/jquery.jqote2.min.js"></script>
294
- <script type="text/javascript" src="./static/jquery.tools.min.js"></script>
295
- <!-- echarts from https://github.com/ecomfe/echarts -->
296
- <script type="text/javascript" src="./static/echarts.common.min.js"></script>
297
- <!-- vintage theme of echarts -->
298
- <script type="text/javascript" src="./static/vintage.js"></script>
299
- <script type="text/x-jqote-template" id="stats-template">
300
- <![CDATA[
301
- <tr class="<%=(this.is_aggregated ? "total" : "")%>">
302
- <td><%= (this.method ? this.method : "") %></td>
303
- <td class="name" title="<%= this.name %>"><%= this.safe_name %></td>
304
- <td class="numeric"><%= this.num_requests %></td>
305
- <td class="numeric"><%= this.num_failures %></td>
306
- <td class="numeric"><%= Math.round(this.median_response_time) %></td>
307
- <td class="numeric"><%= Math.round(this.ninetieth_response_time) %></td>
308
- <td class="numeric"><%= Math.round(this.ninety_ninth_response_time) %></td>
309
- <td class="numeric"><%= Math.round(this.avg_response_time) %></td>
310
- <td class="numeric"><%= this.min_response_time %></td>
311
- <td class="numeric"><%= this.max_response_time %></td>
312
- <td class="numeric"><%= Math.round(this.avg_content_length) %></td>
313
- <td class="numeric"><%= Math.round(this.current_rps*100)/100 %></td>
314
- <td class="numeric"><%= Math.round(this.current_fail_per_sec*100)/100 %></td>
315
- </tr>
316
- <% alternate = !alternate; %>
317
- ]]>
318
- </script>
319
- <script type="text/x-jqote-template" id="errors-template">
320
- <![CDATA[
321
- <tr>
322
- <td><%= this.occurrences %></td>
323
- <td><%= this.method %></td>
324
- <td><%= this.name %></td>
325
- <td><%= function(e) { return e.replace("<", "&lt;"); }(this.error) %></td>
326
- </tr>
327
- <% alternate = !alternate; %>
328
- ]]>
329
- </script>
330
- <script type="text/x-jqote-template" id="exceptions-template">
331
- <![CDATA[
332
- <tr>
333
- <td class="occurrences"><%= this.count %></td>
334
- <td class="traceback" title="Occurred on: <%= this.nodes %>"><%= function(e) { return e.replace("<", "&lt;"); }(this.traceback) %>
335
- <%= function(e) { return e.replace("<", "&lt;"); }(this.msg) %></td>
336
- </tr>
337
- <% alternate = !alternate; %>
338
- ]]>
339
- </script>
340
- <script type="text/x-jqote-template" id="worker-template">
341
- <![CDATA[
342
- <tr class="<%=(this.name == "Total" ? "total" : "")%>">
343
- <td><%= this.id %></td>
344
- <td><%= this.state %></td>
345
- <td class="numeric"><%= this.user_count %></td>
346
- <td class="numeric"><%= this.cpu_usage %>%</td>
347
- <td class="numeric"><%= formatBytes(this.memory_usage) %></td>
348
- </tr>
349
- <% alternate = !alternate; %>
350
- ]]>
351
- </script>
352
- <script type="text/javascript">
353
- var percentile1 = {{ percentile1|tojson }};
354
- var percentile2 = {{ percentile2|tojson }};
355
- {% include 'stats_data.html' %}
356
- </script>
357
- <script type="text/javascript" src="./static/chart.js?v={{ version }}"></script>
358
- <script type="text/javascript" src="./static/locust.js?v={{ version }}"></script>
359
- <script type="text/javascript" src="./static/tasks.js?v={{ version }}"></script>
360
- <script type="text/javascript">
361
- function updateTasksWithTimeout() {
362
- fillTasksFromRequest()
363
- setTimeout(updateTasksWithTimeout, 1000);
364
- }
365
- updateTasksWithTimeout()
366
- </script>
367
- {% block extended_script %}
368
- {% endblock extended_script %}
369
- </body>
370
- </html>