-
Notifications
You must be signed in to change notification settings - Fork 35
/
govec.go
73 lines (62 loc) · 1.55 KB
/
govec.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
71
72
73
package main
import (
"flag"
"fmt"
"io/ioutil"
"os"
"path"
"strings"
)
// Command Line arguments
var (
logType = flag.String("log_type", "", "Type of the log that needs to be generated (Shiviz or TSViz)")
logDirectory = flag.String("log_dir", "", "Input directory which has individual node logs")
outputFile = flag.String("outfile", "", "The file in which the log will be written")
)
func parse_args() {
flag.Parse()
if *logType == "" || *logDirectory == "" || *outputFile == "" {
fmt.Println("Usage: GoVector --log_type [Shiviz | TSViz] --log_dir [directory] --outfile [output_file] ")
os.Exit(1)
}
}
func get_regex(logType string) string {
t := strings.ToLower(logType)
if t == "shiviz" {
return "(?<host>\\S*) (?<clock>{.*})\\n(?<event>.*)"
} else if t == "tsviz" {
return "(?<timestamp>\\d+) (?<host>\\S*) (?<clock>{.*})\\n(?<event>.*)"
}
return ""
}
func write_log(logDirectory string, outputFile string, logType string) {
files, err := ioutil.ReadDir(logDirectory)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
outf, err := os.Create(outputFile)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
defer outf.Close()
regex := get_regex(logType)
outf.Write([]byte(regex + "\n\n"))
for _, f := range files {
fname := f.Name()
if strings.HasSuffix(fname, "Log.txt") {
filepath := path.Join(logDirectory, fname)
content, err := ioutil.ReadFile(filepath)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
outf.Write(content)
}
}
}
func main() {
parse_args()
write_log(*logDirectory, *outputFile, *logType)
}