forked from allinurl/goaccess
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ui.h
256 lines (230 loc) · 7.67 KB
/
ui.h
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
/**
* ______ ___
* / ____/___ / | _____________ __________
* / / __/ __ \/ /| |/ ___/ ___/ _ \/ ___/ ___/
* / /_/ / /_/ / ___ / /__/ /__/ __(__ |__ )
* \____/\____/_/ |_\___/\___/\___/____/____/
*
* The MIT License (MIT)
* Copyright (c) 2009-2020 Gerardo Orellana <hello @ goaccess.io>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#ifndef UI_H_INCLUDED
#define UI_H_INCLUDED
#ifdef HAVE_NCURSESW_NCURSES_H
#include <ncursesw/ncurses.h>
#elif HAVE_NCURSES_NCURSES_H
#include <ncurses/ncurses.h>
#elif HAVE_NCURSES_H
#include <ncurses.h>
#elif HAVE_CURSES_H
#include <curses.h>
#endif
#ifdef HAVE_LIBPTHREAD
#include <pthread.h>
#endif
/* string literals and translations */
#include "labels.h"
#include "commons.h"
/* Global UI defaults */
#define MIN_HEIGHT 8 /* minimum window height */
#define MIN_WIDTH 0 /* minimum window width */
#define MAX_HEIGHT_FOOTER 1 /* height of the footer window */
#define MAX_HEIGHT_HEADER 7 /* height of the header window */
#define OVERALL_NUM_COLS 4 /* number of columns on the overall stats win */
/* Spinner Label Format */
#define SPIN_FMT "%s"
#define SPIN_FMTM "[%s %s] {%'"PRIu64"} @ {%'lld/s}"
#define SPIN_LBL 256 /* max length of the progress spinner */
#define SPIN_UPDATE_INTERVAL 100000000 /* in nanoseconds */
/* Module JSON keys */
#define VISITORS_ID "visitors"
#define REQUESTS_ID "requests"
#define REQUESTS_STATIC_ID "static_requests"
#define VISIT_TIMES_ID "visit_time"
#define VIRTUAL_HOSTS_ID "vhosts"
#define REMOTE_USER_ID "remote_user"
#define CACHE_STATUS_ID "cache_status"
#define NOT_FOUND_ID "not_found"
#define HOSTS_ID "hosts"
#define OS_ID "os"
#define BROWSERS_ID "browsers"
#define REFERRERS_ID "referrers"
#define REFERRING_SITES_ID "referring_sites"
#define KEYPHRASES_ID "keyphrases"
#define GEO_LOCATION_ID "geolocation"
#define STATUS_CODES_ID "status_codes"
#define GENER_ID "general"
#define MIME_TYPE_ID "mime_type"
#define TLS_TYPE_ID "tls_type"
/* Overall Statistics CSV/JSON Keys */
#define OVERALL_STARTDATE "start_date"
#define OVERALL_ENDDATE "end_date"
#define OVERALL_DATETIME "date_time"
#define OVERALL_REQ "total_requests"
#define OVERALL_VALID "valid_requests"
#define OVERALL_GENTIME "generation_time"
#define OVERALL_FAILED "failed_requests"
#define OVERALL_VISITORS "unique_visitors"
#define OVERALL_FILES "unique_files"
#define OVERALL_EXCL_HITS "excluded_hits"
#define OVERALL_REF "unique_referrers"
#define OVERALL_NOTFOUND "unique_not_found"
#define OVERALL_STATIC "unique_static_files"
#define OVERALL_LOGSIZE "log_size"
#define OVERALL_BANDWIDTH "bandwidth"
#define OVERALL_LOG "log_path"
/* CONFIG DIALOG */
#define CONF_MENU_H 6
#define CONF_MENU_W 67
#define CONF_MENU_X 2
#define CONF_MENU_Y 4
#define CONF_WIN_H 20
#define CONF_WIN_W 71
/* FIND DIALOG */
#define FIND_DLG_HEIGHT 8
#define FIND_DLG_WIDTH 50
#define FIND_MAX_MATCHES 1
/* COLOR SCHEME DIALOG */
#define SCHEME_MENU_H 4
#define SCHEME_MENU_W 38
#define SCHEME_MENU_X 2
#define SCHEME_MENU_Y 4
#define SCHEME_WIN_H 10
#define SCHEME_WIN_W 42
/* SORT DIALOG */
#define SORT_MENU_H 6
#define SORT_MENU_W 38
#define SORT_MENU_X 2
#define SORT_MENU_Y 4
#define SORT_WIN_H 13
#define SORT_WIN_W 42
/* AGENTS DIALOG */
#define AGENTS_MENU_X 2
#define AGENTS_MENU_Y 4
/* HELP DIALOG */
#define HELP_MENU_HEIGHT 12
#define HELP_MENU_WIDTH 60
#define HELP_MENU_X 2
#define HELP_MENU_Y 4
#define HELP_WIN_HEIGHT 17
#define HELP_WIN_WIDTH 64
/* CONF ERROR DIALOG */
#define ERR_MENU_HEIGHT 10
#define ERR_MENU_WIDTH 67
#define ERR_MENU_X 2
#define ERR_MENU_Y 4
#define ERR_WIN_HEIGHT 15
#define ERR_WIN_WIDTH 71
#include "color.h"
#include "commons.h"
#include "sort.h"
/* Curses dashboard find */
typedef struct GFind_ {
GModule module;
char *pattern;
int next_idx;
int next_parent_idx;
int next_sub_idx;
int look_in_sub;
int done;
int icase;
} GFind;
/* Each panel contains its own scrolling and offset */
typedef struct GScrollModule_ {
int scroll;
int offset;
} GScrollModule;
/* Curses Scrolling */
typedef struct GScroll_ {
GScrollModule module[TOTAL_MODULES];
GModule current;
int dash;
int expanded;
} GScroll;
/* Spinner or Progress Indicator */
typedef struct GSpinner_ {
const char *label;
GColors *(*color) (void);
int curses;
int spin_x;
int w;
int x;
int y;
pthread_mutex_t mutex;
pthread_t thread;
uint64_t **processed;
char **filename;
WINDOW *win;
enum {
SPN_RUN,
SPN_END
} state;
} GSpinner;
/* Controls metric output.
* i.e., which metrics it should display */
typedef struct GOutput_ {
GModule module;
int8_t visitors;
int8_t hits;
int8_t percent;
int8_t bw;
int8_t avgts;
int8_t cumts;
int8_t maxts;
int8_t protocol;
int8_t method;
int8_t data;
int8_t graph; /* display bars when collapsed */
int8_t sub_graph; /* display bars upon expanding it */
} GOutput;
/* *INDENT-OFF* */
GOutput *output_lookup (GModule module);
GSpinner *new_gspinner (void);
char *get_browser_type (char *line);
char *get_overall_header (GHolder *h);
char *input_string (WINDOW * win, int pos_y, int pos_x, size_t max_width, const char *str, int enable_case, int *toggle_case);
const char *module_to_desc (GModule module);
const char *module_to_head (GModule module);
const char *module_to_id (GModule module);
const char *module_to_label (GModule module);
int get_start_end_parsing_dates (char **start, char **end, const char *f);
int render_confdlg (Logs * logs, GSpinner * spinner);
void close_win (WINDOW * w);
GAgents *load_host_agents (const char *addr);
void display_general (WINDOW * win, GHolder *h);
void draw_header (WINDOW * win, const char *s, const char *fmt, int y, int x, int w, GColors * (*func) (void));
void end_spinner (void);
void generate_time (void);
void init_colors (int force);
void init_windows (WINDOW ** header_win, WINDOW ** main_win);
void load_agent_list (WINDOW * main_win, char *addr);
void load_help_popup (WINDOW * main_win);
void load_schemes_win (WINDOW * main_win);
void load_sort_win (WINDOW * main_win, GModule module, GSort * sort);
void set_curses_spinner (GSpinner *spinner);
void set_input_opts (void);
void set_wbkgd (WINDOW *main_win, WINDOW *header_win);
void term_size (WINDOW * main_win, int *main_win_height);
void ui_spinner_create (GSpinner * spinner);
void update_active_module (WINDOW * header_win, GModule current);
void update_header (WINDOW * header_win, int current);
/* *INDENT-ON* */
#endif