Skip to content

Commit 3cf046c

Browse files
authored
feat(logflare): adding optional logflare integration (#183)
1 parent 06b288a commit 3cf046c

File tree

9 files changed

+371
-30
lines changed

9 files changed

+371
-30
lines changed

.env.sample

+4
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,7 @@ X_FORWARDED_HOST_REGEXP=
1818
POSTGREST_URL_SUFFIX=/rest/v1
1919
ADMIN_API_KEYS=apikey
2020
ENCRYPTION_KEY=encryptionkey
21+
22+
LOGFLARE_ENABLED=false
23+
LOGFLARE_API_KEY=api_key
24+
LOGFLARE_SOURCE_TOKEN=source_token

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ dist/
77
static/api.json
88
data/
99
bin/
10+
.idea/

package-lock.json

+301-20
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
"pg": "^8.7.3",
4343
"pg-listen": "^1.7.0",
4444
"pino": "^8.2.0",
45+
"pino-logflare": "^0.3.12",
4546
"postgres-migrations": "^5.3.0",
4647
"prom-client": "^14.0.1"
4748
},

src/monitoring/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './logger'

src/monitoring/logflare.ts

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/* eslint-disable @typescript-eslint/no-var-requires */
2+
3+
const dotenv = require('dotenv')
4+
const { createWriteStream: createLogFlareWriteStream } = require('pino-logflare')
5+
6+
export default function () {
7+
dotenv.config()
8+
9+
const logflareApiKey = process.env.LOGFLARE_API_KEY
10+
const logflareSourceToken = process.env.LOGFLARE_SOURCE_TOKEN
11+
12+
if (!logflareApiKey) {
13+
throw new Error('must provide a logflare api key')
14+
}
15+
16+
if (!logflareSourceToken) {
17+
throw new Error('must provider a logflare source token')
18+
}
19+
20+
return createLogFlareWriteStream({
21+
apiKey: logflareApiKey,
22+
sourceToken: logflareSourceToken,
23+
})
24+
}

src/monitoring/logger.ts

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import pino from 'pino'
2+
import { getConfig } from '../utils/config'
3+
4+
export const logger = pino({
5+
transport: buildTransport(),
6+
formatters: {
7+
level(label) {
8+
return { level: label }
9+
},
10+
},
11+
timestamp: pino.stdTimeFunctions.isoTime,
12+
})
13+
14+
export function buildTransport(): pino.TransportSingleOptions | undefined {
15+
const { logflareApiKey, logflareSourceToken, logflareEnabled } = getConfig()
16+
17+
if (!logflareEnabled) {
18+
return undefined
19+
}
20+
21+
if (!logflareApiKey) {
22+
throw new Error('must provide a logflare api key')
23+
}
24+
25+
if (!logflareSourceToken) {
26+
throw new Error('must provider a logflare source token')
27+
}
28+
29+
return {
30+
target: './logflare',
31+
}
32+
}

src/server.ts

+1-10
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,12 @@
11
import { FastifyInstance } from 'fastify'
22
import { IncomingMessage, Server, ServerResponse } from 'http'
3-
import pino from 'pino'
43

54
import build from './app'
65
import buildAdmin from './admin-app'
76
import { getConfig } from './utils/config'
87
import { runMultitenantMigrations, runMigrations } from './utils/migrate'
98
import { listenForTenantUpdate } from './utils/tenant'
10-
11-
const logger = pino({
12-
formatters: {
13-
level(label) {
14-
return { level: label }
15-
},
16-
},
17-
timestamp: pino.stdTimeFunctions.isoTime,
18-
})
9+
import { logger } from './monitoring'
1910

2011
const exposeDocs = true
2112

src/utils/config.ts

+6
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ type StorageConfigType = {
2222
tenantId: string
2323
urlLengthLimit: number
2424
xForwardedHostRegExp?: string
25+
logflareEnabled?: boolean
26+
logflareApiKey?: string
27+
logflareSourceToken?: string
2528
}
2629

2730
function getOptionalConfigFromEnv(key: string): string | undefined {
@@ -69,5 +72,8 @@ export function getConfig(): StorageConfigType {
6972
'',
7073
urlLengthLimit: Number(getOptionalConfigFromEnv('URL_LENGTH_LIMIT')) || 7_500,
7174
xForwardedHostRegExp: getOptionalConfigFromEnv('X_FORWARDED_HOST_REGEXP'),
75+
logflareEnabled: getOptionalConfigFromEnv('LOGFLARE_ENABLED') === 'true',
76+
logflareApiKey: getOptionalConfigFromEnv('LOGFLARE_API_KEY'),
77+
logflareSourceToken: getOptionalConfigFromEnv('LOGFLARE_SOURCE_TOKEN'),
7278
}
7379
}

0 commit comments

Comments
 (0)