-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathts.go
70 lines (60 loc) · 1.7 KB
/
ts.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package main
import (
"bufio"
"flag"
"fmt"
"os"
"regexp"
"time"
"github.com/servomac/ts/timeregex"
)
func main() {
layoutPtr := flag.String("l", "", "timestamp layout")
minutesPtr := flag.Int("m", 0, "minutes")
hoursPtr := flag.Int("h", 0, "hours")
daysPtr := flag.Int("d", 0, "days")
flag.Parse()
if flag.NFlag() > 3 || len(*layoutPtr) == 0 {
flag.Usage()
os.Exit(1)
}
layout := *layoutPtr
reStr := timeregex.GenerateRegex(layout)
fmt.Println(layout, " -> ", reStr)
re := *regexp.MustCompile(reStr)
starting_time := time.Now().AddDate(0, 0, -*daysPtr).
Add(-time.Duration(*hoursPtr)*time.Hour).
Add(-time.Duration(*minutesPtr)*time.Minute)
// format and parse again the desired starting log time,
// to easily compare with formatted timestamps
starting_time, err := time.Parse(layout, starting_time.Format(layout))
if err != nil {
panic(err)
}
fmt.Println("Filter from: ", starting_time)
var scanner *bufio.Scanner;
if flag.NArg() == 1 {
filename := flag.Arg(0)
f, err := os.Open(filename)
if err != nil {
panic(err)
}
defer f.Close()
scanner = bufio.NewScanner(f)
} else if flag.NArg() == 0 {
scanner = bufio.NewScanner(os.Stdin)
}
for scanner.Scan() {
line := scanner.Text()
timestamp := re.FindString(line)
if len(timestamp) > 0 {
t, err := time.Parse(layout, timestamp)
if err != nil {
panic(err)
}
if t.After(starting_time) || t.Equal(starting_time) {
fmt.Println(line)
}
}
}
}