Skip to content

Commit 15c00ee

Browse files
authored
feat: use synapse-sdk telemetry (#154)
* feat: use synapse-sdk telemetry * fix: allow filecoin-pin consumers to append to appName * fix: cleanup telemetry * chore: fix type errors after merge
1 parent 9ab3f8c commit 15c00ee

File tree

5 files changed

+60
-4
lines changed

5 files changed

+60
-4
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@
9797
"homepage": "https://github.com/filecoin-project/filecoin-pin#readme",
9898
"dependencies": {
9999
"@clack/prompts": "^0.11.0",
100-
"@filoz/synapse-sdk": "^0.35.0",
100+
"@filoz/synapse-sdk": "^0.35.1",
101101
"@helia/unixfs": "^6.0.1",
102102
"@ipld/car": "^5.4.2",
103103
"commander": "^14.0.1",

src/core/synapse/index.ts

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@ import {
99
type StorageServiceOptions,
1010
Synapse,
1111
type SynapseOptions,
12+
type TelemetryConfig,
1213
} from '@filoz/synapse-sdk'
1314
import { type Provider as EthersProvider, JsonRpcProvider, type Signer, Wallet, WebSocketProvider } from 'ethers'
1415
import type { Logger } from 'pino'
1516
import { ADDRESS_ONLY_SIGNER_SYMBOL, AddressOnlySigner } from './address-only-signer.js'
17+
import { getTelemetryConfig } from './telemetry-config.js'
1618

1719
const WEBSOCKET_REGEX = /^ws(s)?:\/\//i
1820

@@ -62,6 +64,20 @@ interface BaseSynapseConfig {
6264
/** Optional override for WarmStorage contract address */
6365
warmStorageAddress?: string | undefined
6466
withCDN?: boolean | undefined
67+
/**
68+
* Telemetry configuration, merges fields, but appends "appName" to the existing appName
69+
* @example
70+
* {
71+
* sentryInitOptions: {
72+
* enabled: true,
73+
* },
74+
* sentrySetTags: {
75+
* appName: "${your-app-name}",
76+
* },
77+
* }
78+
* will result in your appName being "filecoin-pin@v1.0.0-${your-app-name}"
79+
*/
80+
telemetry?: TelemetryConfig
6581
}
6682

6783
/**
@@ -296,7 +312,11 @@ async function setupSessionKey(synapse: Synapse, sessionWallet: Wallet, logger:
296312
* @param logger - Logger instance for detailed operation tracking
297313
* @returns Initialized Synapse instance
298314
*/
299-
export async function initializeSynapse(config: Partial<SynapseSetupConfig>, logger: Logger): Promise<Synapse> {
315+
export async function initializeSynapse(
316+
config: Partial<SynapseSetupConfig>,
317+
logger: Logger,
318+
telemetryConfig?: TelemetryConfig
319+
): Promise<Synapse> {
300320
try {
301321
const authMode = validateAuthConfig(config)
302322

@@ -320,6 +340,9 @@ export async function initializeSynapse(config: Partial<SynapseSetupConfig>, log
320340
if (config.warmStorageAddress) {
321341
synapseOptions.warmStorageAddress = config.warmStorageAddress
322342
}
343+
if (telemetryConfig) {
344+
synapseOptions.telemetry = getTelemetryConfig(telemetryConfig)
345+
}
323346

324347
let synapse: Synapse
325348

@@ -337,7 +360,10 @@ export async function initializeSynapse(config: Partial<SynapseSetupConfig>, log
337360
const sessionWallet = new Wallet(config.sessionKey, provider)
338361

339362
// Initialize with owner signer, then activate session key
340-
synapse = await Synapse.create({ ...synapseOptions, signer: ownerSigner })
363+
synapse = await Synapse.create({
364+
...synapseOptions,
365+
signer: ownerSigner,
366+
})
341367
await setupSessionKey(synapse, sessionWallet, logger)
342368
} else if (authMode === 'signer') {
343369
// Signer mode - type guard ensures signer is defined
@@ -623,6 +649,11 @@ export async function cleanupProvider(provider: any): Promise<void> {
623649
* and allow the process to terminate
624650
*/
625651
export async function cleanupSynapseService(): Promise<void> {
652+
// Close telemetry to flush pending events and shutdown cleanly
653+
if (synapseInstance) {
654+
await synapseInstance.telemetry?.sentry?.close()
655+
}
656+
626657
if (activeProvider) {
627658
await cleanupProvider(activeProvider)
628659
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import type { TelemetryConfig } from '@filoz/synapse-sdk'
2+
// biome-ignore lint/correctness/useImportExtensions: package.json is bundled for browser and node
3+
import packageJson from '../../../package.json' with { type: 'json' }
4+
5+
export const getTelemetryConfig = (config?: TelemetryConfig | undefined): TelemetryConfig => {
6+
let appName = `${packageJson.name}@v${packageJson.version}`
7+
if (config?.sentrySetTags?.appName != null) {
8+
appName = `${appName}-${String(config.sentrySetTags.appName)}`
9+
}
10+
11+
return {
12+
...config,
13+
sentryInitOptions: {
14+
enabled: true,
15+
// allow config.enabled to override default
16+
...config?.sentryInitOptions,
17+
},
18+
sentrySetTags: {
19+
...config?.sentrySetTags,
20+
appName, // use constructed appName, always.
21+
},
22+
}
23+
}

src/payments/interactive.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {
2222
validatePaymentRequirements,
2323
} from '../core/payments/index.js'
2424
import { cleanupProvider, cleanupSynapseService } from '../core/synapse/index.js'
25+
import { getTelemetryConfig } from '../core/synapse/telemetry-config.js'
2526
import { formatUSDFC } from '../core/utils/format.js'
2627
import { createSpinner, intro, outro } from '../utils/cli-helpers.js'
2728
import { isTTY, log } from '../utils/cli-logger.js'
@@ -91,6 +92,7 @@ export async function runInteractiveSetup(options: PaymentSetupOptions): Promise
9192
const rpcUrl = options.rpcUrl || RPC_URLS.calibration.websocket
9293

9394
const synapse = await Synapse.create({
95+
telemetry: getTelemetryConfig(),
9496
privateKey,
9597
rpcURL: rpcUrl,
9698
withIpni: true, // Always filter for IPNI-enabled providers

tsconfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,6 @@
2626
"allowUnreachableCode": false,
2727
"resolveJsonModule": true
2828
},
29-
"include": ["src/**/*"],
29+
"include": ["src/**/*", "package.json"],
3030
"exclude": ["node_modules", "dist"]
3131
}

0 commit comments

Comments
 (0)