Skip to content

Commit ebff0b9

Browse files
committed
basic telemetry
1 parent d7e59db commit ebff0b9

File tree

3 files changed

+63
-0
lines changed

3 files changed

+63
-0
lines changed

apps/browser-proxy/.env.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ AWS_ENDPOINT_URL_S3="<aws-endpoint-url-s3>"
33
AWS_S3_BUCKET=storage
44
AWS_SECRET_ACCESS_KEY="<aws-secret-access-key>"
55
AWS_REGION=us-east-1
6+
LOGFLARE_SOURCE_URL="<logflare-source-url>"
67
# enable PROXY protocol support
78
#PROXIED=true
89
WILDCARD_DOMAIN=browser.staging.db.build

apps/browser-proxy/src/index.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,13 @@ import { extractDatabaseId, isValidServername } from './servername.ts'
88
import { getTls, setSecureContext } from './tls.ts'
99
import { createStartupMessage } from './create-message.ts'
1010
import { extractIP } from './extract-ip.ts'
11+
import {
12+
DatabaseShared,
13+
DatabaseUnshared,
14+
logEvent,
15+
UserConnected,
16+
UserDisconnected,
17+
} from './telemetry.ts'
1118

1219
const debug = makeDebug('browser-proxy')
1320

@@ -59,6 +66,8 @@ websocketServer.on('connection', (socket, request) => {
5966

6067
websocketConnections.set(databaseId, socket)
6168

69+
logEvent(new DatabaseShared({ databaseId }))
70+
6271
socket.on('message', (data: Buffer) => {
6372
debug('websocket message', data.toString('hex'))
6473
const tcpConnection = tcpConnections.get(databaseId)
@@ -67,6 +76,7 @@ websocketServer.on('connection', (socket, request) => {
6776

6877
socket.on('close', () => {
6978
websocketConnections.delete(databaseId)
79+
logEvent(new DatabaseUnshared({ databaseId }))
7080
})
7181
})
7282

@@ -112,6 +122,7 @@ tcpServer.on('connection', async (socket) => {
112122
// only set the databaseId after we've verified the connection
113123
databaseId = _databaseId
114124
tcpConnections.set(databaseId!, connection)
125+
logEvent(new UserConnected({ databaseId }))
115126
},
116127
serverVersion() {
117128
return '16.3'
@@ -158,6 +169,7 @@ tcpServer.on('connection', async (socket) => {
158169
socket.on('close', () => {
159170
if (databaseId) {
160171
tcpConnections.delete(databaseId)
172+
logEvent(new UserDisconnected({ databaseId }))
161173
const websocket = websocketConnections.get(databaseId)
162174
websocket?.send(createStartupMessage('postgres', 'postgres', { client_ip: '' }))
163175
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
class BaseEvent {
2+
event_message: string
3+
metadata: Record<string, unknown>
4+
constructor(event_message: string, metadata: Record<string, unknown>) {
5+
this.event_message = event_message
6+
this.metadata = metadata
7+
}
8+
}
9+
10+
export class DatabaseShared extends BaseEvent {
11+
constructor(metadata: { databaseId: string }) {
12+
super('database-shared', metadata)
13+
}
14+
}
15+
16+
export class DatabaseUnshared extends BaseEvent {
17+
constructor(metadata: { databaseId: string }) {
18+
super('database-unshared', metadata)
19+
}
20+
}
21+
22+
export class UserConnected extends BaseEvent {
23+
constructor(metadata: { databaseId: string }) {
24+
super('user-connected', metadata)
25+
}
26+
}
27+
28+
export class UserDisconnected extends BaseEvent {
29+
constructor(metadata: { databaseId: string }) {
30+
super('user-disconnected', metadata)
31+
}
32+
}
33+
34+
type Event = DatabaseShared | DatabaseUnshared | UserConnected | UserDisconnected
35+
36+
export async function logEvent(event: Event) {
37+
if (process.env.LOGFLARE_SOURCE_URL) {
38+
fetch(process.env.LOGFLARE_SOURCE_URL, {
39+
method: 'POST',
40+
headers: {
41+
'Content-Type': 'application/json',
42+
},
43+
body: JSON.stringify(event),
44+
}).catch((err) => {
45+
console.error(err)
46+
})
47+
} else if (process.env.DEBUG) {
48+
console.log(event)
49+
}
50+
}

0 commit comments

Comments
 (0)