From: Sebastien GODARD Date: Mon, 2 Jan 2017 15:23:28 +0000 (+0100) Subject: sadf: Add new output format: raw (part 7) X-Git-Tag: v11.5.4~10 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=828f1170d9dff7e4ff003be327e0c4730477e98b;p=sysstat sadf: Add new output format: raw (part 7) Add raw output format for some power management activities. Signed-off-by: Sebastien GODARD --- diff --git a/activity.c b/activity.c index 3a5215f..b5f1e9c 100644 --- a/activity.c +++ b/activity.c @@ -1176,6 +1176,7 @@ struct activity pwr_cpufreq_act = { .f_xml_print = xml_print_pwr_cpufreq_stats, .f_json_print = json_print_pwr_cpufreq_stats, .f_svg_print = svg_print_pwr_cpufreq_stats, + .f_raw_print = raw_print_pwr_cpufreq_stats, .name = "A_PWR_CPUFREQ", .g_nr = 1, #endif @@ -1212,6 +1213,7 @@ struct activity pwr_fan_act = { .f_xml_print = xml_print_pwr_fan_stats, .f_json_print = json_print_pwr_fan_stats, .f_svg_print = svg_print_pwr_fan_stats, + .f_raw_print = raw_print_pwr_fan_stats, .name = "A_PWR_FAN", .g_nr = 1, #endif @@ -1248,6 +1250,7 @@ struct activity pwr_temp_act = { .f_xml_print = xml_print_pwr_temp_stats, .f_json_print = json_print_pwr_temp_stats, .f_svg_print = svg_print_pwr_temp_stats, + .f_raw_print = raw_print_pwr_temp_stats, .name = "A_PWR_TEMP", .g_nr = 2, #endif @@ -1284,6 +1287,7 @@ struct activity pwr_in_act = { .f_xml_print = xml_print_pwr_in_stats, .f_json_print = json_print_pwr_in_stats, .f_svg_print = svg_print_pwr_in_stats, + .f_raw_print = raw_print_pwr_in_stats, .name = "A_PWR_IN", .g_nr = 2, #endif diff --git a/raw_stats.c b/raw_stats.c index d5e4beb..a40202b 100644 --- a/raw_stats.c +++ b/raw_stats.c @@ -1267,3 +1267,108 @@ __print_funct_t raw_print_net_udp6_stats(struct activity *a, char *timestr, int pval((unsigned long long) snup->InErrors6, (unsigned long long) snuc->InErrors6); printf("\n"); } + +/* + *************************************************************************** + * Display CPU frequency statistics in raw format. + * + * IN: + * @a Activity structure with statistics. + * @timestr Time for current statistics sample. + * @curr Index in array for current sample statistics. + *************************************************************************** + */ +__print_funct_t raw_print_pwr_cpufreq_stats(struct activity *a, char *timestr, int curr) +{ + int i; + struct stats_pwr_cpufreq *spc; + + for (i = 0; (i < a->nr) && (i < a->bitmap->b_size + 1); i++) { + + spc = (struct stats_pwr_cpufreq *) ((char *) a->buf[curr] + i * a->msize); + + /* Should current CPU (including CPU "all") be displayed? */ + if (a->bitmap->b_array[i >> 3] & (1 << (i & 0x07))) { + /* Yes: Display it */ + printf("%s %s:%d", timestr, pfield(a->hdr_line, FIRST), i - 1); + printf(" %s:%lu\n", pfield(NULL, 0), spc->cpufreq); + } + } +} + +/* + *************************************************************************** + * Display fan statistics in raw format. + * + * IN: + * @a Activity structure with statistics. + * @timestr Time for current statistics sample. + * @curr Index in array for current sample statistics. + *************************************************************************** + */ +__print_funct_t raw_print_pwr_fan_stats(struct activity *a, char *timestr, int curr) +{ + int i; + struct stats_pwr_fan *spc; + + for (i = 0; i < a->nr; i++) { + spc = (struct stats_pwr_fan *) ((char *) a->buf[curr] + i * a->msize); + + printf("%s %s:%d", timestr, pfield(a->hdr_line, FIRST), i + 1); + printf(" %s:%s", pfield(NULL, 0), spc->device); + printf(" %s:%f", pfield(NULL, 0), spc->rpm); + printf(" rpm_min:%f\n", spc->rpm_min); + } +} + +/* + *************************************************************************** + * Display temperature statistics in raw format. + * + * IN: + * @a Activity structure with statistics. + * @timestr Time for current statistics sample. + * @curr Index in array for current sample statistics. + *************************************************************************** + */ +__print_funct_t raw_print_pwr_temp_stats(struct activity *a, char *timestr, int curr) +{ + int i; + struct stats_pwr_temp *spc; + + for (i = 0; i < a->nr; i++) { + spc = (struct stats_pwr_temp *) ((char *) a->buf[curr] + i * a->msize); + + printf("%s %s:%d", timestr, pfield(a->hdr_line, FIRST), i + 1); + printf(" %s:%s", pfield(NULL, 0), spc->device); + printf(" %s:%f", pfield(NULL, 0), spc->temp); + printf(" temp_min:%f", spc->temp_min); + printf(" temp_max:%f\n", spc->temp_max); + } +} + +/* + *************************************************************************** + * Display voltage inputs statistics in raw format. + * + * IN: + * @a Activity structure with statistics. + * @timestr Time for current statistics sample. + * @curr Index in array for current sample statistics. + *************************************************************************** + */ +__print_funct_t raw_print_pwr_in_stats(struct activity *a, char *timestr, int curr) +{ + int i; + struct stats_pwr_in *spc; + + for (i = 0; i < a->nr; i++) { + spc = (struct stats_pwr_in *) ((char *) a->buf[curr] + i * a->msize); + + printf("%s %s:%d", timestr, pfield(a->hdr_line, FIRST), i); + printf(" %s:%s", pfield(NULL, 0), spc->device); + printf(" %s:%f", pfield(NULL, 0), spc->in); + printf(" in_min:%f", spc->in_min); + printf(" in_max:%f\n", spc->in_max); + } +} diff --git a/raw_stats.h b/raw_stats.h index 9a88ebc..b798e04 100644 --- a/raw_stats.h +++ b/raw_stats.h @@ -72,5 +72,13 @@ __print_funct_t raw_print_net_eicmp6_stats (struct activity *, char *, int); __print_funct_t raw_print_net_udp6_stats (struct activity *, char *, int); +__print_funct_t raw_print_pwr_cpufreq_stats + (struct activity *, char *, int); +__print_funct_t raw_print_pwr_fan_stats + (struct activity *, char *, int); +__print_funct_t raw_print_pwr_temp_stats + (struct activity *, char *, int); +__print_funct_t raw_print_pwr_in_stats + (struct activity *, char *, int); #endif /* _RAW_STATS_H */