Skip to content

Commit 10e8c63

Browse files
committed
support to print timestamp in date-time format
Signed-off-by: Menglong Dong <imagedong@tencent.com>
1 parent 893d400 commit 10e8c63

6 files changed

Lines changed: 47 additions & 9 deletions

File tree

script/bash-completion.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
complete -W '-s --saddr --saddr6 -d --daddr --daddr6 --addr --addr6 -p -D --dport -S --sport -P --port --pid -t --trace -v --detail --debug --ret --basic --diag --diag-quiet --diag-keep --drop --hooks -h --help' nettrace
1+
complete -W '-s --saddr --saddr6 -d --daddr --daddr6 --addr --addr6 -p -D --dport -S --sport -P --port --pid -t --trace -v --detail --debug --ret --basic --diag --diag-quiet --diag-keep --date --drop --hooks -h --help' nettrace
22
complete -W '-h -s -d --addr -p --dport --sport --port -t -v --detail --stack --stack-tracer --timeline -c --ret --skb-mode --force-stack --tcp-flags -o --output' nettrace-legacy

shared/pkt_utils.c

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,53 @@
11
#include <linux/icmp.h>
2+
#include <time.h>
3+
#include <linux/unistd.h>
4+
#include <linux/kernel.h>
5+
#include <sys/sysinfo.h>
26
#define _LINUX_IN_H
37
#include <netinet/in.h>
48

59
#include "pkt_utils.h"
610

7-
int ts_print_packet(char *buf, packet_t *pkt, char *minfo)
11+
static time_t time_offset;
12+
static struct tm *convert_ts_to_date(u64 ts)
13+
{
14+
struct tm *p;
15+
time_t tmp;
16+
17+
if (!time_offset) {
18+
struct sysinfo s_info;
19+
sysinfo(&s_info);
20+
21+
time(&time_offset);
22+
time_offset -= s_info.uptime;
23+
}
24+
25+
tmp = time_offset + (ts / 1000000000);
26+
return localtime(&tmp);
27+
}
28+
29+
int ts_print_packet(char *buf, packet_t *pkt, char *minfo,
30+
bool date_format)
831
{
932
static char saddr[MAX_ADDR_LENGTH], daddr[MAX_ADDR_LENGTH];
33+
u64 ts = pkt->ts;
34+
struct tm *p;
1035
u8 flags, l4;
1136
int pos = 0;
12-
u64 ts;
1337

14-
ts = pkt->ts;
15-
if (ts)
38+
if (date_format) {
39+
p = convert_ts_to_date(ts);
40+
BUF_FMT("[%d-%d-%d %02d:%02d:%02d.%06d] ", 1900 + p->tm_year,
41+
1 + p->tm_mon, p->tm_mday, p->tm_hour, p->tm_min,
42+
p->tm_sec, ts % 1000000000 / 1000);
43+
} else {
1644
BUF_FMT("[%llu.%06llu] ", ts / 1000000000,
1745
ts % 1000000000 / 1000);
46+
}
47+
1848
if (minfo)
1949
BUF_FMT("%s", minfo);
50+
2051
if (!pkt->proto_l3) {
2152
BUF_FMT("unknow");
2253
goto out;
@@ -97,5 +128,5 @@ int ts_print_packet(char *buf, packet_t *pkt, char *minfo)
97128

98129
int base_print_packet(char *buf, packet_t *pkt)
99130
{
100-
return ts_print_packet(buf, pkt, NULL);
131+
return ts_print_packet(buf, pkt, NULL, false);
101132
}

shared/pkt_utils.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@
1414
pos = sprintf(buf, fmt, ##args); \
1515
} while (0)
1616

17-
#define BUF_FMT(fmt, args...) pos += sprintf(buf + pos, fmt, ##args);
17+
#define BUF_FMT(fmt, args...) pos += sprintf(buf + pos, fmt, ##args)
1818

19-
int ts_print_packet(char *buf, packet_t *pkt, char *minfo);
19+
int ts_print_packet(char *buf, packet_t *pkt, char *minfo,
20+
bool date_format);
2021
int base_print_packet(char *buf, packet_t *pkt);
2122

2223
#endif

src/analysis.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ static void analy_entry_handle(analy_entry_t *entry)
164164
sprintf(tinfo, "[%-20s] ", t->name);
165165
}
166166

167-
ts_print_packet(buf, pkt, tinfo);
167+
ts_print_packet(buf, pkt, tinfo, trace_ctx.args.date);
168168

169169
if (trace_ctx.mode == TRACE_MODE_BASIC)
170170
goto out;

src/nettrace.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ static void do_parse_args(int argc, char *argv[])
4343
.type = OPTION_BOOL,
4444
.desc = "show extern packet info, such as pid, ifname, etc",
4545
},
46+
{
47+
.lname = "date", .dest = &trace_args->date,
48+
.type = OPTION_BOOL,
49+
.desc = "print timestamp in date-time format",
50+
},
4651
{
4752
.lname = "basic", .dest = &trace_args->basic,
4853
.type = OPTION_BOOL,

src/trace.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ typedef struct trace_args {
6262
bool intel_keep;
6363
bool basic;
6464
bool drop;
65+
bool date;
6566
char *traces;
6667
} trace_args_t;
6768

0 commit comments

Comments
 (0)