/* * sadf: System activity data formatter * (C) 1999-2013 by Sebastien Godard (sysstat orange.fr) */ #ifndef _SADF_H #define _SADF_H #include "sa.h" /* DTD version for XML output */ #define XML_DTD_VERSION "2.17" /* Possible actions for functions used to display reports */ #define F_BEGIN 0x01 #define F_MAIN 0x02 #define F_END 0x04 /* *************************************************************************** * Output format identification values. *************************************************************************** */ /* Number of output formats */ #define NR_FMT 5 /* Output formats */ #define F_DB_OUTPUT 1 #define F_HEADER_OUTPUT 2 #define F_PPC_OUTPUT 3 #define F_XML_OUTPUT 4 #define F_JSON_OUTPUT 5 /* *************************************************************************** * Generic description of an output format. *************************************************************************** */ /* Format options */ /* * Indicate that all statistics data for one activity should be displayed before * displaying stats for next activity. This is what sar does in its report. * Example: If stats for activities A and B at time t and t' have been collected, * setting AO_GROUPED_STATS for a format will result in the following output: * stats for activity A at t * stats for activity A at t' * stats for activity B at t * stats for activity B at t' * Without this option, output would be: * stats for activity A at t * stats for activity B at t * stats for activity A at t' * stats for activity B at t' */ #define FO_GROUPED_STATS 0x01 /* * Indicate that output should stop after the header is displayed. */ #define FO_HEADER_ONLY 0x02 /* * Indicate that a true sysstat activity file but with a bad * format should not yield an error message. */ #define FO_BAD_FILE_FORMAT 0x04 /* * Indicate that timestamp can be displayed in local time instead of UTC * if option -T or -t has been used. */ #define FO_LOCAL_TIME 0x08 /* * Indicate that all activities will be displayed horizontally * if option -h is used. */ #define FO_HORIZONTALLY 0x10 /* * Indicate that the timestamp can be displayed in seconds since the epoch * if option -U has been used. */ #define FO_SEC_EPOCH 0x20 /* * Indicate that the list of fields should be displayed before the first * line of statistics. */ #define FO_FIELD_LIST 0x40 #define DISPLAY_GROUPED_STATS(m) (((m) & FO_GROUPED_STATS) == FO_GROUPED_STATS) #define ACCEPT_HEADER_ONLY(m) (((m) & FO_HEADER_ONLY) == FO_HEADER_ONLY) #define ACCEPT_BAD_FILE_FORMAT(m) (((m) & FO_BAD_FILE_FORMAT) == FO_BAD_FILE_FORMAT) #define ACCEPT_LOCAL_TIME(m) (((m) & FO_LOCAL_TIME) == FO_LOCAL_TIME) #define ACCEPT_HORIZONTALLY(m) (((m) & FO_HORIZONTALLY) == FO_HORIZONTALLY) #define ACCEPT_SEC_EPOCH(m) (((m) & FO_SEC_EPOCH) == FO_SEC_EPOCH) #define DISPLAY_FIELD_LIST(m) (((m) & FO_FIELD_LIST) == FO_FIELD_LIST) /* Type for all functions used by sadf to display stats in various formats */ #define __printf_funct_t void /* * Structure used to define a report. * A XML-like report has the following format: * __ * | * | Header block * | __ * | | * | | Statistics block * | | __ * | | | * | | | Timestamp block * | | | __ * | | | | * | | | | Activity #1 * | | | |__ * | | | | * | | | | ... * | | | |__ * | | | | * | | | | Activity #n * | | | |__ * | | |__ * | |__ * | | * | | Restart messages block * | |__ * | | * | | Comments block * | |__ * |__ */ struct report_format { /* * This variable contains the identification value (F_...) for this report format. */ unsigned int id; /* * Format options (FO_...). */ unsigned int options; /* * This function displays the report header * (data displayed once at the beginning of the report). */ __printf_funct_t (*f_header) (int *, int, char *, struct file_magic *, struct file_header *, __nr_t, struct activity * [], unsigned int []); /* * This function defines the statistics part of the report. * Used only with textual (XML-like) reports. */ __printf_funct_t (*f_statistics) (int *, int); /* * This function defines the timestamp part of the report. * Used only with textual (XML-like) reports. */ __printf_funct_t (*f_timestamp) (int *, int, char *, char *, int, unsigned long long); /* * This function displays the restart messages. */ __printf_funct_t (*f_restart) (int *, int, char *, char *, int, struct file_header *); /* * This function displays the comments. */ __printf_funct_t (*f_comment) (int *, int, char *, char *, int, char *, struct file_header *); }; /* *************************************************************************** * Various function prototypes *************************************************************************** */ extern void xprintf(int, const char *, ...); extern void xprintf0(int, const char *, ...); /* * Prototypes used to display restart messages */ __printf_funct_t print_db_restart(int *, int, char *, char *, int, struct file_header *); __printf_funct_t print_ppc_restart(int *, int, char *, char *, int, struct file_header *); __printf_funct_t print_xml_restart(int *, int, char *, char *, int, struct file_header *); __printf_funct_t print_json_restart(int *, int, char *, char *, int, struct file_header *); /* * Prototypes used to display comments */ __printf_funct_t print_db_comment(int *, int, char *, char *, int, char *, struct file_header *); __printf_funct_t print_ppc_comment(int *, int, char *, char *, int, char *, struct file_header *); __printf_funct_t print_xml_comment(int *, int, char *, char *, int, char *, struct file_header *); __printf_funct_t print_json_comment(int *, int, char *, char *, int, char *, struct file_header *); /* * Prototypes used to display the statistics part of the report */ __printf_funct_t print_xml_statistics(int *, int); __printf_funct_t print_json_statistics(int *, int); /* * Prototypes used to display the timestamp part of the report */ __printf_funct_t print_xml_timestamp(int *, int, char *, char *, int, unsigned long long); __printf_funct_t print_json_timestamp(int *, int, char *, char *, int, unsigned long long); /* * Prototypes used to display the report header */ __printf_funct_t print_xml_header(int *, int, char *, struct file_magic *, struct file_header *, __nr_t, struct activity * [], unsigned int []); __printf_funct_t print_json_header(int *, int, char *, struct file_magic *, struct file_header *, __nr_t, struct activity * [], unsigned int []); __printf_funct_t print_hdr_header(int *, int, char *, struct file_magic *, struct file_header *, __nr_t, struct activity * [], unsigned int []); #endif /* _SADF_H */