Pass in client for thread/group status op
[fio.git] / client.h
1 #ifndef CLIENT_H
2 #define CLIENT_H
3
4 #include <sys/socket.h>
5 #include <sys/un.h>
6 #include <netinet/in.h>
7 #include <arpa/inet.h>
8
9 #include "stat.h"
10
11 struct fio_net_cmd;
12 struct client_ops;
13
14 struct fio_client {
15         struct flist_head list;
16         struct flist_head hash_list;
17         struct flist_head arg_list;
18         union {
19                 struct sockaddr_in addr;
20                 struct sockaddr_in6 addr6;
21                 struct sockaddr_un addr_un;
22         };
23         char *hostname;
24         int port;
25         int fd;
26
27         char *name;
28
29         int state;
30
31         int skip_newline;
32         int is_sock;
33         int disk_stats_shown;
34         unsigned int jobs;
35         int error;
36         int ipv6;
37         int sent_job;
38
39         struct flist_head eta_list;
40         struct client_eta *eta_in_flight;
41
42         struct flist_head cmd_list;
43
44         uint16_t argc;
45         char **argv;
46
47         struct client_ops *ops;
48         void *client_data;
49 };
50
51 typedef void (*client_text_op_func)(struct fio_client *client, struct fio_net_cmd *cmd);
52 typedef void (*client_disk_util_op_func)(struct fio_client *client, struct fio_net_cmd *cmd);
53 typedef void (*client_thread_status_op)(struct fio_client *client, struct fio_net_cmd *cmd);
54 typedef void (*client_group_stats_op)(struct fio_client *client, struct fio_net_cmd *cmd);
55 typedef void (*client_eta_op)(struct jobs_eta *je);
56 typedef void (*client_probe_op)(struct fio_client *client, struct fio_net_cmd *cmd);
57 typedef void (*client_thread_status_display_op)(char *status_message, double perc);
58 typedef void (*client_quit_op)(struct fio_client *);
59 typedef void (*client_add_job_op)(struct fio_client *, struct fio_net_cmd *);
60 typedef void (*client_timed_out)(struct fio_client *);
61
62 struct client_ops {
63         client_text_op_func text_op;
64         client_disk_util_op_func disk_util;
65         client_thread_status_op thread_status;
66         client_group_stats_op group_stats;
67         client_eta_op eta;
68         client_probe_op probe;
69         client_quit_op quit;
70         client_add_job_op add_job;
71         client_timed_out timed_out;
72         int stay_connected;
73 };
74
75 extern struct client_ops fio_client_ops;
76
77 struct client_eta {
78         struct jobs_eta eta;
79         unsigned int pending;
80 };
81
82 extern int fio_handle_client(struct fio_client *);
83 extern void fio_client_dec_jobs_eta(struct client_eta *eta, client_eta_op fn);
84 extern void fio_client_sum_jobs_eta(struct jobs_eta *dst, struct jobs_eta *je);
85
86 enum {
87         Fio_client_ipv4 = 1,
88         Fio_client_ipv6,
89         Fio_client_socket,
90 };
91
92 extern int fio_clients_connect(void);
93 extern int fio_clients_send_ini(const char *);
94 extern int fio_handle_clients(struct client_ops *);
95 extern int fio_client_add(struct client_ops *, const char *, void **);
96 extern struct fio_client *fio_client_add_explicit(struct client_ops *, const char *, int, int);
97 extern void fio_client_add_cmd_option(void *, const char *);
98 extern void fio_clients_terminate(void);
99
100 #endif
101