Skip to content

Commit 4275285

Browse files
committed
feat: create table
1 parent 3ed6ad0 commit 4275285

File tree

3 files changed

+78
-9
lines changed

3 files changed

+78
-9
lines changed

go.mod

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
module nginx-logs
2+
3+
go 1.15
4+
5+
require (
6+
github.com/hpcloud/tail v1.0.0
7+
github.com/jackc/pgx/v4 v4.10.1
8+
github.com/joho/godotenv v1.3.0
9+
gopkg.in/fsnotify.v1 v1.4.7 // indirect
10+
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
11+
)

nginx-logs.go

Lines changed: 46 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
package main
22

33
import (
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

1520
var 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

4673
func 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
}()

nginx-table.sql

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
create table if not exists "{{.Schema}}"."{{.Table}}"
2+
(
3+
id serial
4+
constraint nginx_pk
5+
primary key,
6+
time_local varchar(256) not null,
7+
path text,
8+
ip varchar(256),
9+
remote_user varchar(256),
10+
remote_port varchar(256),
11+
user_agent text,
12+
user_id_got text,
13+
user_id_set text,
14+
request text,
15+
status int,
16+
body_bytes_sent int,
17+
request_time float,
18+
request_method varchar(128),
19+
geoip_country_code varchar(256),
20+
http_referrer text
21+
);

0 commit comments

Comments
 (0)