]> granicus.if.org Git - sysstat/blob - common.h
sadf: Display timezone for all output formats
[sysstat] / common.h
1 /*
2  * sysstat: System performance tools for Linux
3  * (C) 1999-2022 by Sebastien Godard (sysstat <at> orange.fr)
4  */
5
6 #ifndef _COMMON_H
7 #define _COMMON_H
8
9 /* Maximum length of sensors device name */
10 #define MAX_SENSORS_DEV_LEN     20
11
12 #include <time.h>
13 #include <sched.h>      /* For __CPU_SETSIZE */
14 #include <limits.h>
15 #include <stdlib.h>
16 #include "systest.h"
17
18 #ifdef HAVE_SYS_SYSMACROS_H
19 /* Needed on some non-glibc environments */
20 #include <sys/sysmacros.h>
21 #endif
22
23 /*
24  ***************************************************************************
25  * Various keywords and constants
26  ***************************************************************************
27  */
28
29 #define FALSE   0
30 #define TRUE    1
31
32 #define PLAIN_OUTPUT    0
33
34 #define DISP_HDR        1
35
36 /* Index in units array (see common.c) */
37 #define NO_UNIT         -1
38 #define UNIT_SECTOR     0
39 #define UNIT_BYTE       1
40 #define UNIT_KILOBYTE   2
41
42 #define NR_UNITS        8
43
44 /* Timestamp buffer length */
45 #define TIMESTAMP_LEN   64
46
47 /* Number of seconds per day */
48 #define SEC_PER_DAY     3600 * 24
49
50 /* Maximum number of CPUs */
51 #if defined(__CPU_SETSIZE) && __CPU_SETSIZE > 8192
52 #define NR_CPUS         __CPU_SETSIZE
53 #else
54 #define NR_CPUS         8192
55 #endif
56
57 /* Maximum number of interrupts */
58 #define NR_IRQS         4096
59
60 /* Size of /proc/interrupts line, CPU data excluded */
61 #define INTERRUPTS_LINE 128
62
63 /* Keywords */
64 #define K_ISO           "ISO"
65 #define K_ALL           "ALL"
66 #define K_LOWERALL      "all"
67 #define K_LOWERSUM      "sum"
68 #define K_UTC           "UTC"
69 #define K_JSON          "JSON"
70
71 /* Files */
72 #define __DISKSTATS             "diskstats"
73 #define __BLOCK                 "block"
74 #define __DEV_BLOCK             "dev/block"
75 #define SLASH_SYS               PRE "/sys"
76 #define SLASH_DEV               PRE "/dev/"
77 #define STAT                    PRE "/proc/stat"
78 #define UPTIME                  PRE "/proc/uptime"
79 #define DISKSTATS               PRE "/proc/" __DISKSTATS
80 #define INTERRUPTS              PRE "/proc/interrupts"
81 #define MEMINFO                 PRE "/proc/meminfo"
82 #define SYSFS_BLOCK             SLASH_SYS "/" __BLOCK
83 #define SYSFS_DEV_BLOCK         SLASH_SYS "/" __DEV_BLOCK
84 #define SYSFS_DEVCPU            PRE "/sys/devices/system/cpu"
85 #define SYSFS_TIME_IN_STATE     "cpufreq/stats/time_in_state"
86 #define S_STAT                  "stat"
87 #define DEVMAP_DIR              PRE "/dev/mapper"
88 #define DEVICES                 PRE "/proc/devices"
89 #define SYSFS_USBDEV            PRE "/sys/bus/usb/devices"
90 #define DEV_DISK_BY             PRE "/dev/disk/by"
91 #define DEV_DISK_BY_ID          PRE "/dev/disk/by-id"
92 #define SYSFS_IDVENDOR          "idVendor"
93 #define SYSFS_IDPRODUCT         "idProduct"
94 #define SYSFS_BMAXPOWER         "bMaxPower"
95 #define SYSFS_MANUFACTURER      "manufacturer"
96 #define SYSFS_PRODUCT           "product"
97 #define SYSFS_FCHOST            PRE "/sys/class/fc_host"
98
99 #define MAX_FILE_LEN            512
100 #define MAX_PF_NAME             1024
101 #define MAX_NAME_LEN            128
102
103 #define IGNORE_VIRTUAL_DEVICES  FALSE
104 #define ACCEPT_VIRTUAL_DEVICES  TRUE
105
106 /* Environment variables */
107 #define ENV_TIME_FMT            "S_TIME_FORMAT"
108 #define ENV_TIME_DEFTM          "S_TIME_DEF_TIME"
109 #define ENV_COLORS              "S_COLORS"
110 #define ENV_COLORS_SGR          "S_COLORS_SGR"
111 #define ENV_REPEAT_HEADER       "S_REPEAT_HEADER"
112
113 #define C_NEVER                 "never"
114 #define C_ALWAYS                "always"
115
116 #define DIGITS                  "0123456789"
117 #define XDIGITS                 "0123456789-"
118
119 /*
120  ***************************************************************************
121  * Macro functions definitions.
122  ***************************************************************************
123  */
124
125 /*
126  * Macro used to define activity bitmap size.
127  * All those bitmaps have an additional bit used for global activity
128  * (eg. CPU "all" or total number of interrupts). That's why we do "(m) + 1".
129  */
130 #define BITMAP_SIZE(m)  ((((m) + 1) >> 3) + 1)
131
132 /* Allocate and init structure */
133 #define SREALLOC(S, TYPE, SIZE) do {                                                             \
134                                         TYPE *_p_ = S;                                           \
135                                         if ((SIZE) != 0) {                                       \
136                                                 if ((S = (TYPE *) realloc(S, (SIZE))) == NULL) { \
137                                                         perror("realloc");                       \
138                                                         exit(4);                                 \
139                                                 }                                                \
140                                                 /* If the ptr was null, then it's a malloc() */  \
141                                                 if (!_p_) {                                      \
142                                                         memset(S, 0, (SIZE));                    \
143                                                 }                                                \
144                                         }                                                        \
145                                         if (!S) {                                                \
146                                                 /* Should never happen */                        \
147                                                 fprintf(stderr, "srealloc\n");                   \
148                                                 exit(4);                                         \
149                                         }                                                        \
150                                 } while (0)
151
152 /*
153  * Macros used to display statistics values.
154  *
155  */
156 /* With S_VALUE macro, the interval of time (@p) is given in 1/100th of a second */
157 #define S_VALUE(m,n,p)          (((double) ((n) - (m))) / (p) * 100)
158 /* Define SP_VALUE() to normalize to % */
159 #define SP_VALUE(m,n,p)         (((double) ((n) - (m))) / (p) * 100)
160
161 /*
162  * Under very special circumstances, STDOUT may become unavailable.
163  * This is what we try to guess here.
164  */
165 #define TEST_STDOUT(_fd_)       do {                                    \
166                                         if (write(_fd_, "", 0) == -1) { \
167                                                 perror("stdout");       \
168                                                 exit(6);                \
169                                         }                               \
170                                 } while (0)
171
172 #define MINIMUM(a,b)    ((a) < (b) ? (a) : (b))
173
174 #define PANIC(m)        sysstat_panic(__FUNCTION__, m)
175
176 /* Number of ticks per second */
177 #define HZ              hz
178 extern unsigned long hz;
179
180 /* Number of bit shifts to convert pages to kB */
181 extern unsigned int kb_shift;
182
183 /*
184  * kB <-> number of pages.
185  * Page size depends on machine architecture (4 kB, 8 kB, 16 kB, 64 kB...)
186  */
187 #define KB_TO_PG(k)     ((k) >> kb_shift)
188 #define PG_TO_KB(k)     ((k) << kb_shift)
189
190 /* Type of persistent device names used in sar and iostat */
191 extern char persistent_name_type[MAX_FILE_LEN];
192
193 /*
194  ***************************************************************************
195  * Colors definitions
196  ***************************************************************************
197  */
198
199 #define C_LIGHT_RED     "\e[31;22m"
200 #define C_BOLD_RED      "\e[31;1m"
201 #define C_LIGHT_GREEN   "\e[32;22m"
202 #define C_LIGHT_YELLOW  "\e[33;22m"
203 #define C_BOLD_MAGENTA  "\e[35;1m"
204 #define C_BOLD_BLUE     "\e[34;1m"
205 #define C_LIGHT_BLUE    "\e[34;22m"
206 #define C_NORMAL        "\e[0m"
207
208 #define PERCENT_LIMIT_HIGH      75.0
209 #define PERCENT_LIMIT_LOW       50.0
210
211 #define MAX_SGR_LEN     16
212
213 #define IS_INT          0
214 #define IS_STR          1
215 #define IS_RESTART      2
216 #define IS_DEBUG        IS_RESTART
217 #define IS_COMMENT      3
218 #define IS_ZERO         4
219
220 /*
221  ***************************************************************************
222  * Structures definitions
223  ***************************************************************************
224  */
225
226 /* Structure used for extended disk statistics */
227 struct ext_disk_stats {
228         double util;
229         double await;
230         double arqsz;
231 };
232
233 /*
234  ***************************************************************************
235  * Functions prototypes
236  ***************************************************************************
237  */
238 void print_version
239         (void);
240 void get_HZ
241         (void);
242 void get_kb_shift
243         (void);
244 time_t get_localtime
245         (struct tm *, int);
246 time_t get_time
247         (struct tm *, int);
248 void init_nls
249         (void);
250 int is_device
251         (char *, char *, int);
252 void sysstat_panic
253         (const char *, int);
254 int extract_wwnid
255         (char *, unsigned long long *, unsigned int *);
256 int get_wwnid_from_pretty
257         (char *, unsigned long long *, unsigned int *);
258 int check_dir
259         (char *);
260
261 #ifndef SOURCE_SADC
262 int count_bits
263         (void *, int);
264 int count_csvalues
265         (int, char **);
266 void cprintf_f
267         (int, int, int, int, ...);
268 void cprintf_in
269         (int, char *, char *, int);
270 void cprintf_pc
271         (int, int, int, int, ...);
272 void cprintf_s
273         (int, char *, char *);
274 void cprintf_u64
275         (int, int, int, ...);
276 void cprintf_x
277         (int, int, ...);
278 char *device_name
279         (char *);
280 char *get_device_name
281         (unsigned int, unsigned int, unsigned long long [],
282          unsigned int, unsigned int, unsigned int, unsigned int, char *);
283 unsigned int get_devmap_major
284         (void);
285 unsigned long long get_interval
286         (unsigned long long, unsigned long long);
287 char *get_persistent_name_from_pretty
288         (char *);
289 char *get_persistent_type_dir
290         (char *);
291 char *get_pretty_name_from_persistent
292         (char *);
293 int get_sysfs_dev_nr
294         (int);
295 int get_win_height
296         (void);
297 void init_colors
298         (void);
299 double ll_sp_value
300         (unsigned long long, unsigned long long, unsigned long long);
301 int is_iso_time_fmt
302         (void);
303 int parse_range_values
304         (char *t, int, int *, int *);
305 int parse_values
306         (char *, unsigned char[], int, const char *);
307 int print_gal_header
308         (struct tm *, char *, char *, char *, char *, int, int);
309 int set_report_date
310         (struct tm *, char[], int);
311 char *strtolower
312         (char *);
313 void xprintf
314         (int, const char *, ...);
315 void xprintf0
316         (int, const char *, ...);
317
318 #endif /* SOURCE_SADC undefined */
319 #endif  /* _COMMON_H */