mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
1.7 KiB
75 lines
1.7 KiB
#ifndef WRK_H
|
|
#define WRK_H
|
|
|
|
#include "config.h"
|
|
#include <pthread.h>
|
|
#include <inttypes.h>
|
|
#include <sys/types.h>
|
|
|
|
#include "stats.h"
|
|
#include "ae.h"
|
|
#include "http_parser.h"
|
|
#include "tinymt64.h"
|
|
|
|
#define VERSION "1.0.0"
|
|
#define RECVBUF 8192
|
|
#define SAMPLES 100000
|
|
|
|
#define SOCKET_TIMEOUT_MS 2000
|
|
#define SAMPLE_INTERVAL_MS 100
|
|
#define TIMEOUT_INTERVAL_MS 2000
|
|
|
|
typedef struct {
|
|
uint32_t connect;
|
|
uint32_t read;
|
|
uint32_t write;
|
|
uint32_t status;
|
|
uint32_t timeout;
|
|
} errors;
|
|
|
|
typedef struct {
|
|
pthread_t thread;
|
|
aeEventLoop *loop;
|
|
uint64_t connections;
|
|
uint64_t requests;
|
|
uint64_t complete;
|
|
uint64_t bytes;
|
|
uint64_t start;
|
|
tinymt64_t rand;
|
|
errors errors;
|
|
struct connection *cs;
|
|
} thread;
|
|
|
|
typedef struct connection {
|
|
thread *thread;
|
|
http_parser parser;
|
|
int fd;
|
|
uint64_t start;
|
|
uint64_t latency;
|
|
char buf[RECVBUF];
|
|
} connection;
|
|
|
|
struct config;
|
|
|
|
static void *thread_main(void *);
|
|
static int connect_socket(thread *, connection *);
|
|
static int reconnect_socket(thread *, connection *);
|
|
|
|
static int sample_rate(aeEventLoop *, long long, void *);
|
|
static int check_timeouts(aeEventLoop *, long long, void *);
|
|
|
|
static void socket_writeable(aeEventLoop *, int, void *, int);
|
|
static void socket_readable(aeEventLoop *, int, void *, int);
|
|
static int request_complete(http_parser *);
|
|
|
|
static uint64_t time_us();
|
|
static uint64_t rand64(tinymt64_t *, uint64_t);
|
|
|
|
static char *extract_url_part(char *, struct http_parser_url *, enum http_parser_url_fields);
|
|
static char *format_request(char *, char *, char *, char **);
|
|
|
|
static int parse_args(struct config *, char **, char **, int, char **);
|
|
static void print_stats_header();
|
|
static void print_stats(char *, stats *, char *(*)(long double));
|
|
|
|
#endif /* WRK_H */
|
|
|