2 * sadf: System activity data formatter
3 * (C) 1999-2019 by Sebastien Godard (sysstat <at> orange.fr)
11 /* DTD version for XML output */
12 #define XML_DTD_VERSION "3.7"
14 /* Various constants */
18 #define IGNORE_NOTHING 0
19 #define IGNORE_RESTART 1
20 #define DONT_READ_CPU_NR 2
21 #define IGNORE_COMMENT 4
22 #define SET_TIMESTAMPS 8
25 ***************************************************************************
26 * Output format identification values.
27 ***************************************************************************
30 /* Number of output formats */
35 #define F_HEADER_OUTPUT 2
36 #define F_PPC_OUTPUT 3
37 #define F_XML_OUTPUT 4
38 #define F_JSON_OUTPUT 5
39 #define F_CONV_OUTPUT 6
40 #define F_SVG_OUTPUT 7
41 #define F_RAW_OUTPUT 8
42 #define F_PCP_OUTPUT 9
47 * Indicate that a decimal point should be used to make output
50 #define FO_LC_NUMERIC_C 0x01
53 * Indicate that output should stop after the header is displayed.
55 #define FO_HEADER_ONLY 0x02
58 * Indicate that a true sysstat activity file but with a bad
59 * format should not yield an error message.
61 #define FO_BAD_FILE_FORMAT 0x04
64 * Indicate that timestamp can be displayed in local time instead of UTC
65 * if option -T or -t has been used.
67 #define FO_LOCAL_TIME 0x08
70 * Indicate that all activities will be displayed horizontally
71 * if option -h is used.
73 #define FO_HORIZONTALLY 0x10
76 * Indicate that the timestamp can be displayed in seconds since the epoch
77 * if option -U has been used.
79 #define FO_SEC_EPOCH 0x20
82 * Indicate that the list of fields should be displayed before the first
85 #define FO_FIELD_LIST 0x40
88 * Indicate that flag AO_CLOSE_MARKUP (set for activities that need it)
89 * should be taken into account for this output format.
91 #define FO_TEST_MARKUP 0x80
94 * Indicate that timestamp cannot be displayed in the original local time
95 * of the data file creator.
97 #define FO_NO_TRUE_TIME 0x100
100 * Indicate that the number of different items should be counted and
101 * a list created (see @item_list and @item_list_sz in struct activity).
103 #define FO_ITEM_LIST 0x200
106 * Indicate that all the records, including RESTART and COMMENT ones,
107 * should be displayed in order of time.
109 #define FO_FULL_ORDER 0x400
111 #define SET_LC_NUMERIC_C(m) (((m) & FO_LC_NUMERIC_C) == FO_LC_NUMERIC_C)
112 #define ACCEPT_HEADER_ONLY(m) (((m) & FO_HEADER_ONLY) == FO_HEADER_ONLY)
113 #define ACCEPT_BAD_FILE_FORMAT(m) (((m) & FO_BAD_FILE_FORMAT) == FO_BAD_FILE_FORMAT)
114 #define ACCEPT_LOCAL_TIME(m) (((m) & FO_LOCAL_TIME) == FO_LOCAL_TIME)
115 #define ACCEPT_HORIZONTALLY(m) (((m) & FO_HORIZONTALLY) == FO_HORIZONTALLY)
116 #define ACCEPT_SEC_EPOCH(m) (((m) & FO_SEC_EPOCH) == FO_SEC_EPOCH)
117 #define DISPLAY_FIELD_LIST(m) (((m) & FO_FIELD_LIST) == FO_FIELD_LIST)
118 #define TEST_MARKUP(m) (((m) & FO_TEST_MARKUP) == FO_TEST_MARKUP)
119 #define REJECT_TRUE_TIME(m) (((m) & FO_NO_TRUE_TIME) == FO_NO_TRUE_TIME)
120 #define CREATE_ITEM_LIST(m) (((m) & FO_ITEM_LIST) == FO_ITEM_LIST)
121 #define ORDER_ALL_RECORDS(m) (((m) & FO_FULL_ORDER) == FO_FULL_ORDER)
125 ***************************************************************************
126 * Various function prototypes
127 ***************************************************************************
131 (char [], struct activity *[]);
134 * Prototypes used to display restart messages
136 __printf_funct_t print_db_restart
137 (int *, int, char *, char *, int, struct file_header *, struct record_header *);
138 __printf_funct_t print_ppc_restart
139 (int *, int, char *, char *, int, struct file_header *, struct record_header *);
140 __printf_funct_t print_xml_restart
141 (int *, int, char *, char *, int, struct file_header *, struct record_header *);
142 __printf_funct_t print_json_restart
143 (int *, int, char *, char *, int, struct file_header *, struct record_header *);
144 __printf_funct_t print_raw_restart
145 (int *, int, char *, char *, int, struct file_header *, struct record_header *);
146 __printf_funct_t print_pcp_restart
147 (int *, int, char *, char *, int, struct file_header *, struct record_header *);
150 * Prototypes used to display comments
152 __printf_funct_t print_db_comment
153 (int *, int, char *, char *, int, char *, struct file_header *, struct record_header *);
154 __printf_funct_t print_ppc_comment
155 (int *, int, char *, char *, int, char *, struct file_header *, struct record_header *);
156 __printf_funct_t print_xml_comment
157 (int *, int, char *, char *, int, char *, struct file_header *, struct record_header *);
158 __printf_funct_t print_json_comment
159 (int *, int, char *, char *, int, char *, struct file_header *, struct record_header *);
160 __printf_funct_t print_sar_comment
161 (int *, int, char *, char *, int, char *, struct file_header *, struct record_header *);
162 __printf_funct_t print_raw_comment
163 (int *, int, char *, char *, int, char *, struct file_header *, struct record_header *);
164 __printf_funct_t print_pcp_comment
165 (int *, int, char *, char *, int, char *, struct file_header *, struct record_header *);
168 * Prototypes used to display the statistics part of the report
170 __printf_funct_t print_xml_statistics
171 (int *, int, struct activity * [], unsigned int []);
172 __printf_funct_t print_json_statistics
173 (int *, int, struct activity * [], unsigned int []);
174 __printf_funct_t print_pcp_statistics
175 (int *, int, struct activity * [], unsigned int []);
178 * Prototypes used to display the timestamp part of the report
180 __tm_funct_t print_db_timestamp
181 (void *, int, char *, char *, unsigned long long,
182 struct record_header *, struct file_header *, unsigned int);
183 __tm_funct_t print_ppc_timestamp
184 (void *, int, char *, char *, unsigned long long,
185 struct record_header *, struct file_header *, unsigned int);
186 __tm_funct_t print_xml_timestamp
187 (void *, int, char *, char *, unsigned long long,
188 struct record_header *, struct file_header *, unsigned int);
189 __tm_funct_t print_json_timestamp
190 (void *, int, char *, char *, unsigned long long,
191 struct record_header *, struct file_header *, unsigned int);
192 __tm_funct_t print_raw_timestamp
193 (void *, int, char *, char *, unsigned long long,
194 struct record_header *, struct file_header *, unsigned int);
195 __tm_funct_t print_pcp_timestamp
196 (void *, int, char *, char *, unsigned long long,
197 struct record_header *, struct file_header *, unsigned int);
200 * Prototypes used to display the report header
202 __printf_funct_t print_xml_header
203 (void *, int, char *, struct file_magic *, struct file_header *,
204 struct activity * [], unsigned int [], struct file_activity *);
205 __printf_funct_t print_json_header
206 (void *, int, char *, struct file_magic *, struct file_header *,
207 struct activity * [], unsigned int [], struct file_activity *);
208 __printf_funct_t print_hdr_header
209 (void *, int, char *, struct file_magic *, struct file_header *,
210 struct activity * [], unsigned int [], struct file_activity *);
211 __printf_funct_t print_svg_header
212 (void *, int, char *, struct file_magic *, struct file_header *,
213 struct activity * [], unsigned int [], struct file_activity *);
214 __printf_funct_t print_pcp_header
215 (void *, int, char *, struct file_magic *, struct file_header *,
216 struct activity * [], unsigned int [], struct file_activity *);
219 * Main display functions
221 void logic1_display_loop
222 (int, char *, struct file_activity *, struct file_magic *,
223 struct tm *, void *);
224 void logic2_display_loop
225 (int, char *, struct file_activity *, struct file_magic *,
226 struct tm *, void *);
227 void svg_display_loop
228 (int, char *, struct file_activity *, struct file_magic *,
229 struct tm *, void *);