-
Notifications
You must be signed in to change notification settings - Fork 18
/
restapi.yaml
459 lines (374 loc) · 13 KB
/
restapi.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
swagger: "2.0"
info:
version: 0.0.2
title: typhoon rest interface
license:
name: "Apache License, Version 2.0"
description: |
Typhoon is distributed system stress and load testing tool. The tool simulates a traffic
from test cluster towards system-under-test (SUT). The purposes of tool is validation of
system performance and scalability, while spawning huge number of concurrent sessions.
The tool provides out-of-box cross-platform solution to investigate protocol and application
latencies. It approximates Network delay, Round Trip Time, TLS Handshake,
Time-to-First-Byte and Time-to-Meaningful-Response; evaluates protocol overhead by
approximating packet metrics and estimates application performance.
The tool provides REST interface to build, define and spawn workload scenarios; collect
the telemetry and visualize results.
The typhoon is operable as standalone application and scalable up to dozens of individual
nodes hosted in cloud environment. The incremental scalability and decentralization are key
principles used to define the architecture. The peer-to-peer clustering based on consistent
hashing is a key technology to assembles and orchestrates load toward SUT. It helps the
system to deal with possible network failures and provide hight availability for
synthetic load and telemetry collections (the optimistic technique to replicate data has
been employed by the design). As drawback the conflict resolution is lifted to clients.
The rest interface define primitive to deal with consistency for scenario management
use-cases. Conflicts of harvested telemetry are resolved automatically by the tool.
##
##
schemes:
## out-of-box application container configuration supports only http.
## https is either enabled using load-balancer or customizing application configuration.
- http
host: undefined
basePath: /
consumes:
- application/json
produces:
- application/json
##
##
paths:
##
## scenario dashboard
/{id} :
get:
summary: |
the dashboard is single page application that uses rest interface to visualize
telemetry. The dashboard is available only to workload scenarios published
earlier (using curl command-line)
parameters:
- $ref: '#/parameters/id'
produces:
- text/html
responses:
200:
description: |
return dashboard application
404:
description: |
the workload scenario is not exists
##
## scenario management
/lint/{id} :
post:
summary: |
Validates scenario syntax, compiles it and execute against SUT.
parameters:
- $ref: '#/parameters/id'
responses:
200:
description: |
The workload scenario is correct and it is successfully executed.
400:
description: |
The workload scenario has syntaxt errors or it fails execution.
/scenario/{id} :
##
## /scenario/{id}
put:
summary: |
Simple write operation of workload scenario that is uniquely identified by a key.
The json object is written and asynchronoysly replicated to N nodes in the cluster.
Use w parameters to define the quorum requirements of write request.
parameters:
- $ref: '#/parameters/id'
- $ref: '#/parameters/w'
- name: scenario
in: body
schema:
$ref: '#/definitions/scenario'
responses:
201:
description: |
The workload scenario is uploaded to the cluster.
schema:
$ref: '#/definitions/status'
303:
description: |
The quorum requirements of request is not achievable, replicas are not agreeing
on the resource status. The resource redirects user-agent using Location header
to another resource, which facilitates validation and conflict resolution
(e.g. wait for eventual consistency or revoke the resource).
412:
description: |
Requested operation cannot be completed, the runtime environment is not capable
to meet client requirements.
##
## /scenario/{id}
get:
summary: |
Simple read operation of workload scenario that is uniquely identified by a key.
The json object is returned. Use r parameters to define the quorum requirements
of read request.
parameters:
- $ref: '#/parameters/id'
- $ref: '#/parameters/r'
responses:
200:
description: |
The scenario definition (see doc/scenario.md)
schema:
$ref: '#/definitions/scenario'
303:
description: |
The quorum requirements of request is not achievable, replicas are not agreeing
on the resource status. The resource redirects user-agent using Location header
to another resource, which facilitates validation and conflict resolution
(e.g. wait for eventual consistency or revoke the resource).
404:
description: |
The scenario object is not found.
412:
description: |
Requested operation cannot be completed, the runtime environment is not capable
to meet client requirements.
##
## /scenario/{id}
delete:
summary: |
Simple evict operation to workload scenario that is uniquely identified by a key.
The json object is removed from N cluster replicas. The remove operation is
asynchronoysly replicated to N nodes in the cluster. Use w parameters to define
the quorum requirements of write request.
parameters:
- $ref: '#/parameters/id'
- $ref: '#/parameters/w'
responses:
200:
description: |
The workload scenario is removed from the cluster.
schema:
$ref: '#/definitions/status'
303:
description: |
The quorum requirements of request is not achievable, replicas are not agreeing
on the resource status. The resource redirects user-agent using Location header
to another resource, which facilitates validation and conflict resolution
(e.g. wait for eventual consistency or revoke the resource).
404:
description: |
The scenario object is not found.
412:
description: |
Requested operation cannot be completed, the runtime environment is not capable
to meet client requirements.
##
## scenario attributes
/scenario/{id}/attributes :
get:
summary: |
The operation returns scenario attributes
parameters:
- $ref: '#/parameters/id'
- $ref: '#/parameters/r'
responses:
200:
description: |
The scenario definition (see doc/scenario.md)
schema:
$ref: '#/definitions/scenario'
303:
description: |
The quorum requirements of request is not achievable, replicas are not agreeing
on the resource status. The resource redirects user-agent using Location header
to another resource, which facilitates validation and conflict resolution
(e.g. wait for eventual consistency or revoke the resource).
404:
description: |
The scenario object is not found.
412:
description: |
Requested operation cannot be completed, the runtime environment is not capable
to meet client requirements.
##
## scenario actions -
/scenario/{id}/spawn :
get:
summary: |
The operation spawns N concurrent stress test sessions. The behaviour of session and number
of sessions is defined by workload scenarion. The operation can be repeated multiple times.
Each request spawns a new batch of concurrent sessions.
parameters:
- $ref: '#/parameters/id'
responses:
202:
description: |
The spawn request is successfully accepted for asynchronous processing.
##
## scenario actions -
/scenario/{id}/ping :
get:
summary: |
The operation checks the status of workload scenario and return live KPI.
parameters:
- $ref: '#/parameters/id'
responses:
200:
description: |
The operation is completed successfully.
schema:
$ref: '#/definitions/kpi'
##
## scenario read telemetry - time series measurement
/scenario/{id}/series/{urn}/{from}/{to} :
get:
summary: |
Read telemetry of key-performance-indicator (kpi) for given request within
defined scenarion. The telemetry is returned as time-series data on the time
interval.
parameters:
- $ref: '#/parameters/id'
- $ref: '#/parameters/urn'
- $ref: '#/parameters/from'
- $ref: '#/parameters/to'
- $ref: '#/parameters/chronon'
responses:
200:
description: |
return time-series data
schema:
type: array
items:
$ref: '#/definitions/tuple'
##
##
/health/peer :
get:
summary: |
check the status of the cluster peers.
responses:
200:
description: |
return list of online peers
schema:
type: array
items:
$ref: '#/definitions/peer'
500:
description: |
cluster or node is not available
##
##
definitions:
##
##
scenario:
type: object
description: |
The document defines the workload scenario (see docs/scenario.md)
##
##
status:
type: object
description: |
The status of scenario operation
properties:
primary:
type: integer
description: number of primary nodes accepted the request
handoff:
type: integer
description: number of handoff nodes accepted the request
##
##
kpi:
type: object
description: |
key performance indicators of the scenario
properties:
processes:
type: integer
description: number of requester processes spawned in the cluster
rps:
type: number
description: instant load produced by scenario
##
##
peer:
type: string
description: |
name of the cluster peer
##
##
tuple:
type: array
items:
type: integer
description: |
The telemetry tuple contains Unix timestamps in seconds and value `[1455729247,0]`
##
##
parameters:
##
##
id:
name: id
in: path
type: string
required: true
description: |
identity of workload scenario, defined by developer of stress test.
##
##
urn:
name: urn
in: path
type: string
required: true
description: |
the identity of telemetry produced by request(s) of workload scenario.
##
##
from:
name: from
in: path
type: integer
required: true
description: |
start of report time interval (Unix timestamps)
##
##
to:
name: to
in: path
type: integer
required: true
description: |
end of report time interval (Unix timestamps)
##
##
w:
name: w
in: query
type: integer
required: false
description: |
consistency parameter, number of replica agreed on write operation (default 1).
##
##
r:
name: r
in: query
type: integer
required: false
description: |
consistency parameter, number of replica agreed on read operation (default 1).
##
##
chronon:
name: chronon
in: query
type: integer
required: false
description: |
duration of aggregation interval in seconds (default 1).