11package main
22
33import (
4+ "bytes"
5+ "context"
46 "fmt"
5- "github.com/hpcloud/tail"
6- "github.com/joho/godotenv"
77 "log"
8- "time"
98 "os"
10- "strconv"
119 "os/signal"
10+ "strconv"
1211 "syscall"
12+ "text/template"
13+ "time"
14+
15+ "github.com/hpcloud/tail"
16+ "github.com/jackc/pgx/v4"
17+ "github.com/joho/godotenv"
1318)
1419
1520var logString = make (chan string , 10 )
@@ -28,19 +33,41 @@ func processLogs() {
2833 var s string
2934 flushTime , _ := strconv .ParseInt (os .Getenv ("FLUSH_MS" ), 10 , 64 )
3035 for {
31- s = <- logString
36+ s = <- logString
3237 now = time .Now ()
3338 buffer = append (buffer , s )
34- if ( lastSync .Equal (now ) || now .Sub (lastSync ).Milliseconds () >= flushTime ) {
39+ if lastSync .Equal (now ) || now .Sub (lastSync ).Milliseconds () >= flushTime {
3540 storeLogs (buffer )
3641 buffer = buffer [:0 ]
3742 lastSync = now
3843 }
3944 }
4045}
4146
42- func onExit () {
43- fmt .Print ("goodbye" )
47+ func initDb (conn * pgx.Conn ) {
48+ tmpl , err := template .ParseFiles ("nginx-table.sql" )
49+ if err != nil {
50+ panic (err )
51+ }
52+ _ , err = conn .Exec (context .Background (), fmt .Sprintf ("create schema if not exists \" %s\" " , os .Getenv ("TABLE_SCHEMA" )))
53+
54+ if err != nil {
55+ panic (err )
56+ }
57+ buf := & bytes.Buffer {}
58+ type InitParams struct {
59+ Schema string
60+ Table string
61+ }
62+ err = tmpl .ExecuteTemplate (buf , "nginx-table.sql" , InitParams {Schema : os .Getenv ("TABLE_SCHEMA" ), Table : os .Getenv ("TABLE_NAME" )})
63+ if err != nil {
64+ panic (err )
65+ }
66+ _ , err = conn .Exec (context .Background (), buf .String ())
67+ if (err != nil ) {
68+ panic (err )
69+ }
70+ log .Println ("Database initialized" )
4471}
4572
4673func main () {
@@ -49,10 +76,20 @@ func main() {
4976 log .Fatal ("Error loading .env file" )
5077 }
5178
79+ conn , err := pgx .Connect (context .Background (), os .Getenv ("DATABASE_URL" ))
80+ if err != nil {
81+ log .Fatalf ("Unable to connect to database: %v\n " , err )
82+ }
83+ initDb (conn )
84+
5285 s := make (chan os.Signal )
5386 signal .Notify (s , os .Interrupt , syscall .SIGTERM )
5487 go func () {
55- <- s
88+ <- s
89+ err := conn .Close (context .Background ())
90+ if err != nil {
91+ log .Fatalf ("Unable to connect disconnect from database: %v\n " , err )
92+ }
5693 log .Println ("Exiting" )
5794 os .Exit (0 )
5895 }()
0 commit comments