"Fossies" - the Fresh Open Source Software Archive 
Member "wrk-4.2.0/SCRIPTING" (7 Feb 2021, 4158 Bytes) of package /linux/www/wrk-4.2.0.tar.gz:
As a special service "Fossies" has tried to format the requested text file into HTML format (style:
standard) with prefixed line numbers.
Alternatively you can here
view or
download the uninterpreted source code file.
1 Overview
2
3 wrk supports executing a LuaJIT script during three distinct phases: setup,
4 running, and done. Each wrk thread has an independent scripting environment
5 and the setup & done phases execute in a separate environment which does
6 not participate in the running phase.
7
8 The public Lua API consists of a global table and a number of global
9 functions:
10
11 wrk = {
12 scheme = "http",
13 host = "localhost",
14 port = nil,
15 method = "GET",
16 path = "/",
17 headers = {},
18 body = nil,
19 thread = <userdata>,
20 }
21
22 function wrk.format(method, path, headers, body)
23
24 wrk.format returns a HTTP request string containing the passed parameters
25 merged with values from the wrk table.
26
27 function wrk.lookup(host, service)
28
29 wrk.lookup returns a table containing all known addresses for the host
30 and service pair. This corresponds to the POSIX getaddrinfo() function.
31
32 function wrk.connect(addr)
33
34 wrk.connect returns true if the address can be connected to, otherwise
35 it returns false. The address must be one returned from wrk.lookup().
36
37 The following globals are optional, and if defined must be functions:
38
39 global setup -- called during thread setup
40 global init -- called when the thread is starting
41 global delay -- called to get the request delay
42 global request -- called to generate the HTTP request
43 global response -- called with HTTP response data
44 global done -- called with results of run
45
46 Setup
47
48 function setup(thread)
49
50 The setup phase begins after the target IP address has been resolved and all
51 threads have been initialized but not yet started.
52
53 setup() is called once for each thread and receives a userdata object
54 representing the thread.
55
56 thread.addr - get or set the thread's server address
57 thread:get(name) - get the value of a global in the thread's env
58 thread:set(name, value) - set the value of a global in the thread's env
59 thread:stop() - stop the thread
60
61 Only boolean, nil, number, and string values or tables of the same may be
62 transfered via get()/set() and thread:stop() can only be called while the
63 thread is running.
64
65 Running
66
67 function init(args)
68 function delay()
69 function request()
70 function response(status, headers, body)
71
72 The running phase begins with a single call to init(), followed by
73 a call to request() and response() for each request cycle.
74
75 The init() function receives any extra command line arguments for the
76 script which must be separated from wrk arguments with "--".
77
78 delay() returns the number of milliseconds to delay sending the next
79 request.
80
81 request() returns a string containing the HTTP request. Building a new
82 request each time is expensive, when testing a high performance server
83 one solution is to pre-generate all requests in init() and do a quick
84 lookup in request().
85
86 response() is called with the HTTP response status, headers, and body.
87 Parsing the headers and body is expensive, so if the response global is
88 nil after the call to init() wrk will ignore the headers and body.
89
90 Done
91
92 function done(summary, latency, requests)
93
94 The done() function receives a table containing result data, and two
95 statistics objects representing the per-request latency and per-thread
96 request rate. Duration and latency are microsecond values and rate is
97 measured in requests per second.
98
99 latency.min -- minimum value seen
100 latency.max -- maximum value seen
101 latency.mean -- average value seen
102 latency.stdev -- standard deviation
103 latency:percentile(99.0) -- 99th percentile value
104 latency(i) -- raw value and count
105
106 summary = {
107 duration = N, -- run duration in microseconds
108 requests = N, -- total completed requests
109 bytes = N, -- total bytes received
110 errors = {
111 connect = N, -- total socket connection errors
112 read = N, -- total socket read errors
113 write = N, -- total socket write errors
114 status = N, -- total HTTP status codes > 399
115 timeout = N -- total request timeouts
116 }
117 }