Skip to content

Commit 3ed6ad0

Browse files
committed
Initial commit
0 parents  commit 3ed6ad0

File tree

2 files changed

+79
-0
lines changed

2 files changed

+79
-0
lines changed

.env

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
DB_HOST=localhost
2+
DB_NAME=logs
3+
DB_USER=postgres
4+
DB_PASS=localdbpass
5+
6+
LOG_FILE=./nginx-logs/test.log
7+
8+
FLUSH_MS=6000

nginx-logs.go

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"github.com/hpcloud/tail"
6+
"github.com/joho/godotenv"
7+
"log"
8+
"time"
9+
"os"
10+
"strconv"
11+
"os/signal"
12+
"syscall"
13+
)
14+
15+
var logString = make(chan string, 10)
16+
17+
func storeLogs(logs []string) {
18+
log.Printf("Storing %d entries\n", len(logs))
19+
for _, line := range logs {
20+
fmt.Println(line)
21+
}
22+
}
23+
24+
func processLogs() {
25+
lastSync := time.Now()
26+
now := time.Now()
27+
buffer := make([]string, 0, 100)
28+
var s string
29+
flushTime, _ := strconv.ParseInt(os.Getenv("FLUSH_MS"), 10, 64)
30+
for {
31+
s = <- logString
32+
now = time.Now()
33+
buffer = append(buffer, s)
34+
if (lastSync.Equal(now) || now.Sub(lastSync).Milliseconds() >= flushTime) {
35+
storeLogs(buffer)
36+
buffer = buffer[:0]
37+
lastSync = now
38+
}
39+
}
40+
}
41+
42+
func onExit() {
43+
fmt.Print("goodbye")
44+
}
45+
46+
func main() {
47+
err := godotenv.Load()
48+
if err != nil {
49+
log.Fatal("Error loading .env file")
50+
}
51+
52+
s := make(chan os.Signal)
53+
signal.Notify(s, os.Interrupt, syscall.SIGTERM)
54+
go func() {
55+
<- s
56+
log.Println("Exiting")
57+
os.Exit(0)
58+
}()
59+
60+
go processLogs()
61+
t, err := tail.TailFile(os.Getenv("LOG_FILE"), tail.Config{
62+
Follow: true,
63+
ReOpen: true,
64+
})
65+
if err != nil {
66+
panic(err)
67+
}
68+
for line := range t.Lines {
69+
logString <- line.Text
70+
}
71+
}

0 commit comments

Comments
 (0)