source: tools/tracereport/misc_report.c @ 755855a

4.0.1-hotfixescachetimestampsdevelopdpdk-ndagetsilivegetfragoffhelplibtrace4ndag_formatpfringrc-4.0.1rc-4.0.2rc-4.0.3rc-4.0.4ringdecrementfixringperformanceringtimestampfixes
Last change on this file since 755855a was 755855a, checked in by Shane Alcock <salcock@…>, 7 years ago

Replaced some strcats with strncats

  • Property mode set to 100644
File size: 2.2 KB
RevLine 
[7be3cc4]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"
[466aed6]8#include "report.h"
[7be3cc4]9
10static double starttime;
11static double endtime;
12static bool has_starttime = false;
13static bool has_endtime = false;
14static uint64_t packets = 0;
15
[954a329]16static uint64_t capture_bytes = 0;
17
[7be3cc4]18void misc_per_packet(struct libtrace_packet_t *packet)
19{
20        double ts = trace_get_seconds(packet);
21        if (!has_starttime || starttime > ts)
22                starttime = ts;
23        if (!has_endtime || endtime < ts)
24                endtime = ts;
25        has_starttime = has_endtime = true;
26        ++packets;
[954a329]27        capture_bytes += trace_get_capture_length(packet) + trace_get_framing_length(packet);
[7be3cc4]28}
29
30static char *ts_to_date(double ts)
31{
32        time_t sec = (time_t)ts;
33        static char ret[1024];
34        strcpy(ret,ctime(&sec));
35        ret[strlen(ret)-1]='\0'; /* Get rid of the annoying \n */
36        return ret;
37}
38
39static char *duration(double ts)
40{
41        static char ret[1024];
42        char tmp[1024];
43        ret[0]='\0';
44        if (ts == 0) 
45                return "0 seconds";
46        if (ts>=24*60*60) {
47                snprintf(ret,sizeof(ret),"%i days",(int)(ts/(24*60*60)));
48                ts-=(int)(ts/(24*60*60))*24*60*60;
49        }
50        if (ts>=60*60) {
51                snprintf(tmp,sizeof(tmp),"%s%i hours",
52                                ret[0]?", ":"",
53                                (int)ts/(60*60));
[755855a]54                strncat(ret,tmp, 1024 - strlen(ret) - 1);
[7be3cc4]55                ts-=(int)(ts/(60*60))*60*60;
56        }
57        if (ts>=60) {
58                snprintf(tmp,sizeof(tmp),"%s%i minutes",
59                                ret[0]?", ":"",
60                                (int)ts/60);
[755855a]61                strncat(ret,tmp, 1024 - strlen(ret) - 1);
[7be3cc4]62                ts-=(int)(ts/60)*60;
63        }
64        if (ts>0) {
65                snprintf(tmp,sizeof(tmp),"%s%.04f seconds",
66                                ret[0]?", ":"",
67                                ts);
[755855a]68                strncat(ret,tmp, 1024 - strlen(ret) - 1);
[7be3cc4]69                strcat(ret,tmp);
70        }
71        return ret;
72}
73
74void misc_report(void)
75{
[f3576f5]76        FILE *out = fopen("misc.rpt", "w");
77        if (!out) {
78                perror("fopen");
79                return;
80        }
81        fprintf(out, "Start time: %.04f (%s)\n",starttime,ts_to_date(starttime));
82        fprintf(out, "End time: %.04f (%s)\n",endtime,ts_to_date(endtime));
83        fprintf(out, "Duration: %.04f (%s)\n",endtime-starttime,
[7be3cc4]84                        duration(endtime-starttime));
[f3576f5]85        fprintf(out, "Total Packets: %" PRIu64 "\n",packets);
86        fprintf(out, "Average packet rate: %.02f packets/sec\n",
[7be3cc4]87                        packets/(endtime-starttime));
[954a329]88        fprintf(out, "Uncompressed trace size: %" PRIu64 "\n", capture_bytes);
[7be3cc4]89}
Note: See TracBrowser for help on using the repository browser.