source: tools/tracereport/misc_report.c @ 4df814d

4.0.1-hotfixescachetimestampsdevelopdpdk-ndagetsilivegetfragoffhelplibtrace4ndag_formatpfringrc-4.0.1rc-4.0.2rc-4.0.3rc-4.0.4ringdecrementfixringperformanceringtimestampfixes
Last change on this file since 4df814d was 7be3cc4, checked in by Perry Lorier <perry@…>, 14 years ago

Add start time, end time, duration, packets and packets per second reports.
Fixes #236
Make the default "all reports" instead of "no reports" for less surprise
value.

  • Property mode set to 100644
File size: 1.8 KB
Line 
1#include <inttypes.h>
2#include <stdio.h>
3#include <stdbool.h>
4#include <time.h>
5#include <string.h>
6#include "libtrace.h"
7#include "tracereport.h"
8
9static double starttime;
10static double endtime;
11static bool has_starttime = false;
12static bool has_endtime = false;
13static uint64_t packets = 0;
14
15void misc_per_packet(struct libtrace_packet_t *packet)
16{
17        double ts = trace_get_seconds(packet);
18        if (!has_starttime || starttime > ts)
19                starttime = ts;
20        if (!has_endtime || endtime < ts)
21                endtime = ts;
22        has_starttime = has_endtime = true;
23        ++packets;
24}
25
26static char *ts_to_date(double ts)
27{
28        time_t sec = (time_t)ts;
29        static char ret[1024];
30        strcpy(ret,ctime(&sec));
31        ret[strlen(ret)-1]='\0'; /* Get rid of the annoying \n */
32        return ret;
33}
34
35static char *duration(double ts)
36{
37        static char ret[1024];
38        char tmp[1024];
39        ret[0]='\0';
40        if (ts == 0) 
41                return "0 seconds";
42        if (ts>=24*60*60) {
43                snprintf(ret,sizeof(ret),"%i days",(int)(ts/(24*60*60)));
44                ts-=(int)(ts/(24*60*60))*24*60*60;
45        }
46        if (ts>=60*60) {
47                snprintf(tmp,sizeof(tmp),"%s%i hours",
48                                ret[0]?", ":"",
49                                (int)ts/(60*60));
50                strcat(ret,tmp);
51                ts-=(int)(ts/(60*60))*60*60;
52        }
53        if (ts>=60) {
54                snprintf(tmp,sizeof(tmp),"%s%i minutes",
55                                ret[0]?", ":"",
56                                (int)ts/60);
57                strcat(ret,tmp);
58                ts-=(int)(ts/60)*60;
59        }
60        if (ts>0) {
61                snprintf(tmp,sizeof(tmp),"%s%.04f seconds",
62                                ret[0]?", ":"",
63                                ts);
64                strcat(ret,tmp);
65        }
66        return ret;
67}
68
69void misc_report(void)
70{
71        printf("# Misc\n");
72        printf("Start time: %.04f (%s)\n",starttime,ts_to_date(starttime));
73        printf("End time: %.04f (%s)\n",endtime,ts_to_date(endtime));
74        printf("Duration: %.04f (%s)\n",endtime-starttime,
75                        duration(endtime-starttime));
76        printf("Total Packets: %" PRIu64 "\n",packets);
77        printf("Average packet rate: %.02f packets/sec\n",
78                        packets/(endtime-starttime));
79}
Note: See TracBrowser for help on using the repository browser.