mirror of
https://github.com/czlonkowski/n8n-mcp.git
synced 2026-01-29 22:12:05 +00:00
Adds zero-configuration anonymous usage statistics to track: - Number of active users with deterministic user IDs - Which MCP tools AI agents use most - What workflows are built (sanitized to protect privacy) - Common errors and issues Key features: - Zero-configuration design with hardcoded write-only credentials - Privacy-first approach with comprehensive data sanitization - Opt-out support via config file and environment variables - Docker-friendly with environment variable support - Multi-process safe with immediate flush strategy - Row Level Security (RLS) policies for write-only access Technical implementation: - Supabase backend with anon key for INSERT-only operations - Workflow sanitization removes all sensitive data - Environment variables checked for opt-out (TELEMETRY_DISABLED, etc.) - Telemetry enabled by default but respects user preferences - Cleaned up all debug logging for production readiness 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
72 lines
1.7 KiB
TypeScript
72 lines
1.7 KiB
TypeScript
#!/usr/bin/env npx tsx
|
|
/**
|
|
* Debug workflow tracking in telemetry manager
|
|
*/
|
|
|
|
import { TelemetryManager } from '../src/telemetry/telemetry-manager';
|
|
|
|
// Get the singleton instance
|
|
const telemetry = TelemetryManager.getInstance();
|
|
|
|
const testWorkflow = {
|
|
nodes: [
|
|
{
|
|
id: 'webhook1',
|
|
type: 'n8n-nodes-base.webhook',
|
|
name: 'Webhook',
|
|
position: [0, 0],
|
|
parameters: {
|
|
path: '/test-' + Date.now(),
|
|
httpMethod: 'POST'
|
|
}
|
|
},
|
|
{
|
|
id: 'http1',
|
|
type: 'n8n-nodes-base.httpRequest',
|
|
name: 'HTTP Request',
|
|
position: [250, 0],
|
|
parameters: {
|
|
url: 'https://api.example.com/data',
|
|
method: 'GET'
|
|
}
|
|
},
|
|
{
|
|
id: 'slack1',
|
|
type: 'n8n-nodes-base.slack',
|
|
name: 'Slack',
|
|
position: [500, 0],
|
|
parameters: {
|
|
channel: '#general',
|
|
text: 'Workflow complete!'
|
|
}
|
|
}
|
|
],
|
|
connections: {
|
|
'webhook1': {
|
|
main: [[{ node: 'http1', type: 'main', index: 0 }]]
|
|
},
|
|
'http1': {
|
|
main: [[{ node: 'slack1', type: 'main', index: 0 }]]
|
|
}
|
|
}
|
|
};
|
|
|
|
console.log('🧪 Testing Workflow Tracking\n');
|
|
console.log('Workflow has', testWorkflow.nodes.length, 'nodes');
|
|
|
|
// Track the workflow
|
|
console.log('Calling trackWorkflowCreation...');
|
|
telemetry.trackWorkflowCreation(testWorkflow, true);
|
|
|
|
console.log('Waiting for async processing...');
|
|
|
|
// Wait for setImmediate to process
|
|
setTimeout(async () => {
|
|
console.log('\nForcing flush...');
|
|
await telemetry.flush();
|
|
console.log('✅ Flush complete!');
|
|
|
|
console.log('\nWorkflow should now be in the telemetry_workflows table.');
|
|
console.log('Check with: SELECT * FROM telemetry_workflows ORDER BY created_at DESC LIMIT 1;');
|
|
}, 2000);
|