dashboard / erock/pico / refactor: tuns event logs #55 rss

accepted · opened on 2025-03-21T01:06:55Z by erock
Help
checkout latest patchset:
ssh pr.pico.sh print pr-55 | git am -3
checkout any patchset in a patch request:
ssh pr.pico.sh print ps-X | git am -3
add changes to patch request:
git format-patch main --stdout | ssh pr.pico.sh pr add 55
add review to patch request:
git format-patch main --stdout | ssh pr.pico.sh pr add --review 55
accept PR:
ssh pr.pico.sh pr accept 55
close PR:
ssh pr.pico.sh pr close 55

Logs

erock created pr with ps-113 on 2025-03-21T01:06:55Z
erock changed status on 2025-03-28T14:48:45Z {"status":"accepted"}

Patchsets

ps-113 by erock on 2025-03-21T01:06:55Z

refactor: tuns event logs

Makefile link
+2 -1
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
diff --git a/Makefile b/Makefile
index d452d2f..864fa34 100644
--- a/Makefile
+++ b/Makefile
@@ -127,10 +127,11 @@ migrate:
 	$(DOCKER_CMD) exec -i $(DB_CONTAINER) psql -U $(PGUSER) -d $(PGDATABASE) < ./sql/migrations/20241125_add_content_type_to_analytics.sql
 	$(DOCKER_CMD) exec -i $(DB_CONTAINER) psql -U $(PGUSER) -d $(PGDATABASE) < ./sql/migrations/20241202_add_more_idx_analytics.sql
 	$(DOCKER_CMD) exec -i $(DB_CONTAINER) psql -U $(PGUSER) -d $(PGDATABASE) < ./sql/migrations/20250319_add_tuns_event_logs_table.sql
+	$(DOCKER_CMD) exec -i $(DB_CONTAINER) psql -U $(PGUSER) -d $(PGDATABASE) < ./sql/migrations/20250320_add_connection_id_to_tuns_event_logs_table.sql
 .PHONY: migrate
 
 latest:
-	$(DOCKER_CMD) exec -i $(DB_CONTAINER) psql -U $(PGUSER) -d $(PGDATABASE) < ./sql/migrations/20250319_add_tuns_event_logs_table.sql
+	$(DOCKER_CMD) exec -i $(DB_CONTAINER) psql -U $(PGUSER) -d $(PGDATABASE) < ./sql/migrations/20250320_add_connection_id_to_tuns_event_logs_table.sql
 .PHONY: latest
 
 psql:
pkg/db/db.go link
+1 -1
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
diff --git a/pkg/db/db.go b/pkg/db/db.go
index eb5ca15..34099c8 100644
--- a/pkg/db/db.go
+++ b/pkg/db/db.go
@@ -333,8 +333,8 @@ type TunsEventLog struct {
 	EventType      string     `json:"event_type"`
 	TunnelType     string     `json:"tunnel_type"`
 	ConnectionType string     `json:"connection_type"`
-	TunnelAddrs    []string   `json:"tunnel_addrs"`
 	CreatedAt      *time.Time `json:"created_at"`
+	ConnectionID   string     `json:"connection_id"`
 }
 
 var NameValidator = regexp.MustCompile("^[a-zA-Z0-9]{1,50}$")
pkg/db/postgres/storage.go link
+8 -8
 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
diff --git a/pkg/db/postgres/storage.go b/pkg/db/postgres/storage.go
index 4b2c307..6d1fe59 100644
--- a/pkg/db/postgres/storage.go
+++ b/pkg/db/postgres/storage.go
@@ -12,7 +12,7 @@ import (
 
 	"slices"
 
-	"github.com/lib/pq"
+	_ "github.com/lib/pq"
 	"github.com/picosh/pico/pkg/db"
 	"github.com/picosh/utils"
 )
@@ -1799,11 +1799,11 @@ func (me *PsqlDB) findPagesStats(userID string) (*db.UserServiceStats, error) {
 func (me *PsqlDB) InsertTunsEventLog(log *db.TunsEventLog) error {
 	_, err := me.Db.Exec(
 		`INSERT INTO tuns_event_logs
-			(user_id, server_id, remote_addr, event_type, tunnel_type, connection_type, tunnel_addrs)
+			(user_id, server_id, remote_addr, event_type, tunnel_type, connection_type, connection_id)
 		VALUES
 			($1, $2, $3, $4, $5, $6, $7)`,
 		log.UserId, log.ServerID, log.RemoteAddr, log.EventType, log.TunnelType,
-		log.ConnectionType, pq.Array(log.TunnelAddrs),
+		log.ConnectionType, log.ConnectionID,
 	)
 	return err
 }
@@ -1812,8 +1812,8 @@ func (me *PsqlDB) FindTunsEventLogsByAddr(userID, addr string) ([]*db.TunsEventL
 	logs := []*db.TunsEventLog{}
 	fmt.Println(addr)
 	rs, err := me.Db.Query(
-		`SELECT id, user_id, server_id, remote_addr, event_type, tunnel_type, connection_type, tunnel_addrs, created_at
-		FROM tuns_event_logs WHERE user_id=$1 AND tunnel_addrs @> ARRAY[$2] ORDER BY created_at DESC`, userID, addr)
+		`SELECT id, user_id, server_id, remote_addr, event_type, tunnel_type, connection_type, connection_id, created_at
+		FROM tuns_event_logs WHERE user_id=$1 AND connection_id=$2 ORDER BY created_at DESC`, userID, addr)
 	if err != nil {
 		return nil, err
 	}
@@ -1823,7 +1823,7 @@ func (me *PsqlDB) FindTunsEventLogsByAddr(userID, addr string) ([]*db.TunsEventL
 		err := rs.Scan(
 			&log.ID, &log.UserId, &log.ServerID, &log.RemoteAddr,
 			&log.EventType, &log.TunnelType, &log.ConnectionType,
-			(*pq.StringArray)(&log.TunnelAddrs), &log.CreatedAt,
+			&log.ConnectionID, &log.CreatedAt,
 		)
 		if err != nil {
 			return nil, err
@@ -1841,7 +1841,7 @@ func (me *PsqlDB) FindTunsEventLogsByAddr(userID, addr string) ([]*db.TunsEventL
 func (me *PsqlDB) FindTunsEventLogs(userID string) ([]*db.TunsEventLog, error) {
 	logs := []*db.TunsEventLog{}
 	rs, err := me.Db.Query(
-		`SELECT id, user_id, server_id, remote_addr, event_type, tunnel_type, connection_type, tunnel_addrs, created_at
+		`SELECT id, user_id, server_id, remote_addr, event_type, tunnel_type, connection_type, connection_id, created_at
 		FROM tuns_event_logs WHERE user_id=$1 ORDER BY created_at DESC`, userID)
 	if err != nil {
 		return nil, err
@@ -1852,7 +1852,7 @@ func (me *PsqlDB) FindTunsEventLogs(userID string) ([]*db.TunsEventLog, error) {
 		err := rs.Scan(
 			&log.ID, &log.UserId, &log.ServerID, &log.RemoteAddr,
 			&log.EventType, &log.TunnelType, &log.ConnectionType,
-			(*pq.StringArray)(&log.TunnelAddrs), &log.CreatedAt,
+			&log.ConnectionID, &log.CreatedAt,
 		)
 		if err != nil {
 			return nil, err
pkg/shared/feed.go link
+3 -4
 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
diff --git a/pkg/shared/feed.go b/pkg/shared/feed.go
index 63e71a5..8ee35f2 100644
--- a/pkg/shared/feed.go
+++ b/pkg/shared/feed.go
@@ -3,7 +3,6 @@ package shared
 import (
 	"fmt"
 	"sort"
-	"strings"
 	"time"
 
 	"github.com/gorilla/feeds"
@@ -134,19 +133,19 @@ func UserFeed(me db.DB, user *db.User, token string) (*feeds.Feed, error) {
 	for _, eventLog := range tunsLogs {
 		content := fmt.Sprintf(`Created At: %s<br />
 Event type: %s<br />
+Connection ID: %s<br />
 Connection type: %s<br />
 Remote addr: %s<br />
 Tunnel type: %s<br />
-Tunnel addrs: %s<br />
 Server: %s`,
 			eventLog.CreatedAt.Format(time.RFC3339), eventLog.EventType, eventLog.ConnectionType,
-			eventLog.RemoteAddr, eventLog.TunnelType, eventLog.TunnelAddrs, eventLog.ServerID,
+			eventLog.RemoteAddr, eventLog.TunnelType, eventLog.ConnectionID, eventLog.ServerID,
 		)
 		logItem := &feeds.Item{
 			Id: fmt.Sprintf("%d", eventLog.CreatedAt.Unix()),
 			Title: fmt.Sprintf(
 				"%s tuns event for %s",
-				eventLog.EventType, strings.Join(eventLog.TunnelAddrs, ", "),
+				eventLog.EventType, eventLog.ConnectionID,
 			),
 			Link:        &feeds.Link{Href: "https://pico.sh"},
 			Content:     content,
sql/migrations/20250320_add_connection_id_to_tuns_event_logs_table.sql link
+3 -0
1
2
3
4
5
6
7
8
9
diff --git a/sql/migrations/20250320_add_connection_id_to_tuns_event_logs_table.sql b/sql/migrations/20250320_add_connection_id_to_tuns_event_logs_table.sql
new file mode 100644
index 0000000..12f9b17
--- /dev/null
+++ b/sql/migrations/20250320_add_connection_id_to_tuns_event_logs_table.sql
@@ -0,0 +1,3 @@
+DELETE FROM tuns_event_logs;
+ALTER TABLE tuns_event_logs ADD COLUMN connection_id text NOT NULL;
+ALTER TABLE tuns_event_logs DROP COLUMN tunnel_addrs;