-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathncurses_utils.c
70 lines (60 loc) · 3.16 KB
/
ncurses_utils.c
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
#include <ncurses.h>
#include "ncurses_utils.h"
void construct_window_layout(WINDOW *input_window) {
/* layout constants */
char *os_metrics_banner = "OS Metrics";
char *os_loadavg_layout = "Load Average(1min / 5min / 15min): File Descriptor Usage: Context Switch: / second";
char *os_processes_layout = "Processes: total | running | blocked | zombie";
char *os_users_layout = "Users:";
char *memory_metrics_banner = "Memory Metrics";
char *memory_usage_layout = "Memory Usage(MB): total | avail | free | buffer | cache | page tables";
char *swap_usage_layout = "Swap Usage(MB): total | free";
char *page_faults_layout = "Page Faults Count: major faults / second | minor page faults / second";
char *network_metrics_banner = "Network Metrics";
char *arp_cache_entries_layout = "ARP Cache entries: ";
char *interface_io_banner_layout = "[Network Interface I/O (per second)]";
char *interface_layout = "Interface Name | RX Packet | RX KB | RX Error | RX Dropped | TX Packet | TX KB | TX Error | TX Dropped | Collision";
/* move curser and print layout
* banner should have A_STANDOUT attribute; metric names should have A_BOLD attribute
*/
wattron(input_window, A_STANDOUT);
mvwprintw(input_window, 1, 1, os_metrics_banner);
wattroff(input_window, A_STANDOUT);
wattron(input_window, A_BOLD);
mvwprintw(input_window, 3, 1, os_loadavg_layout);
mvwprintw(input_window, 4, 1, os_processes_layout);
mvwprintw(input_window, 5, 1, os_users_layout);
wattroff(input_window, A_BOLD);
mvwhline(input_window, 7, 1, ACS_HLINE, COLS - 2);
wattron(input_window, A_STANDOUT);
mvwprintw(input_window, 8, 1, memory_metrics_banner);
wattroff(input_window, A_STANDOUT);
wattron(input_window, A_BOLD);
mvwprintw(input_window, 10, 1, memory_usage_layout);
mvwprintw(input_window, 11, 1, swap_usage_layout);
mvwprintw(input_window, 12, 1, page_faults_layout);
wattroff(input_window, A_BOLD);
mvwhline(input_window, 14, 1, ACS_HLINE, COLS - 2);
wattron(input_window, A_STANDOUT);
mvwprintw(input_window, 15, 1, network_metrics_banner);
wattroff(input_window, A_STANDOUT);
wattron(input_window, A_BOLD);
mvwprintw(input_window, 17, 1, arp_cache_entries_layout);
mvwprintw(input_window, 19, 1, interface_io_banner_layout);
mvwprintw(input_window, 20, 1, interface_layout);
wattroff(input_window, A_BOLD);
/* print footer */
mvwprintw(input_window, LINES - 1, 10, "press 'Q' to exit");
/* refresh window */
wrefresh(input_window);
}
void print_network_interface_delimiter(WINDOW *input_window, int row_number) {
char *delimiter = "|";
int column_positions[] = {19, 33, 45, 58, 73, 87, 99, 112, 127};
int column_count = 9;
wattron(input_window, A_BOLD);
for (int i = 0; i < column_count; ++i) {
mvwprintw(input_window, row_number, column_positions[i], delimiter);
}
wattroff(input_window, A_BOLD);
}