feat: add comprehensive performance benchmark tracking system
- Create benchmark test suites for critical operations: - Node loading performance - Database query performance - Search operations performance - Validation performance - MCP tool execution performance - Add GitHub Actions workflow for benchmark tracking: - Runs on push to main and PRs - Uses github-action-benchmark for historical tracking - Comments on PRs with performance results - Alerts on >10% performance regressions - Stores results in GitHub Pages - Create benchmark infrastructure: - Custom Vitest benchmark configuration - JSON reporter for CI results - Result formatter for github-action-benchmark - Performance threshold documentation - Add supporting utilities: - SQLiteStorageService for benchmark database setup - MCPEngine wrapper for testing MCP tools - Test factories for generating benchmark data - Enhanced NodeRepository with benchmark methods - Document benchmark system: - Comprehensive benchmark guide in docs/BENCHMARKS.md - Performance thresholds in .github/BENCHMARK_THRESHOLDS.md - README for benchmarks directory - Integration with existing test suite The benchmark system will help monitor performance over time and catch regressions before they reach production. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
160
tests/fixtures/database/test-nodes.json
vendored
Normal file
160
tests/fixtures/database/test-nodes.json
vendored
Normal file
@@ -0,0 +1,160 @@
|
||||
{
|
||||
"nodes": [
|
||||
{
|
||||
"style": "programmatic",
|
||||
"nodeType": "nodes-base.httpRequest",
|
||||
"displayName": "HTTP Request",
|
||||
"description": "Makes HTTP requests and returns the response",
|
||||
"category": "Core Nodes",
|
||||
"properties": [
|
||||
{
|
||||
"name": "url",
|
||||
"displayName": "URL",
|
||||
"type": "string",
|
||||
"required": true,
|
||||
"default": ""
|
||||
},
|
||||
{
|
||||
"name": "method",
|
||||
"displayName": "Method",
|
||||
"type": "options",
|
||||
"options": [
|
||||
{ "name": "GET", "value": "GET" },
|
||||
{ "name": "POST", "value": "POST" },
|
||||
{ "name": "PUT", "value": "PUT" },
|
||||
{ "name": "DELETE", "value": "DELETE" }
|
||||
],
|
||||
"default": "GET"
|
||||
}
|
||||
],
|
||||
"credentials": [],
|
||||
"isAITool": true,
|
||||
"isTrigger": false,
|
||||
"isWebhook": false,
|
||||
"operations": [],
|
||||
"version": "1",
|
||||
"isVersioned": false,
|
||||
"packageName": "n8n-nodes-base",
|
||||
"documentation": "The HTTP Request node makes HTTP requests and returns the response data."
|
||||
},
|
||||
{
|
||||
"style": "programmatic",
|
||||
"nodeType": "nodes-base.webhook",
|
||||
"displayName": "Webhook",
|
||||
"description": "Receives data from external services via webhooks",
|
||||
"category": "Core Nodes",
|
||||
"properties": [
|
||||
{
|
||||
"name": "httpMethod",
|
||||
"displayName": "HTTP Method",
|
||||
"type": "options",
|
||||
"options": [
|
||||
{ "name": "GET", "value": "GET" },
|
||||
{ "name": "POST", "value": "POST" }
|
||||
],
|
||||
"default": "POST"
|
||||
},
|
||||
{
|
||||
"name": "path",
|
||||
"displayName": "Path",
|
||||
"type": "string",
|
||||
"default": "webhook"
|
||||
}
|
||||
],
|
||||
"credentials": [],
|
||||
"isAITool": false,
|
||||
"isTrigger": true,
|
||||
"isWebhook": true,
|
||||
"operations": [],
|
||||
"version": "1",
|
||||
"isVersioned": false,
|
||||
"packageName": "n8n-nodes-base",
|
||||
"documentation": "The Webhook node creates an endpoint to receive data from external services."
|
||||
},
|
||||
{
|
||||
"style": "declarative",
|
||||
"nodeType": "nodes-base.slack",
|
||||
"displayName": "Slack",
|
||||
"description": "Send messages and interact with Slack",
|
||||
"category": "Communication",
|
||||
"properties": [],
|
||||
"credentials": [
|
||||
{
|
||||
"name": "slackApi",
|
||||
"required": true
|
||||
}
|
||||
],
|
||||
"isAITool": true,
|
||||
"isTrigger": false,
|
||||
"isWebhook": false,
|
||||
"operations": [
|
||||
{
|
||||
"name": "Message",
|
||||
"value": "message",
|
||||
"operations": [
|
||||
{
|
||||
"name": "Send",
|
||||
"value": "send",
|
||||
"description": "Send a message to a channel or user"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"version": "2.1",
|
||||
"isVersioned": true,
|
||||
"packageName": "n8n-nodes-base",
|
||||
"documentation": "The Slack node allows you to send messages and interact with Slack workspaces."
|
||||
}
|
||||
],
|
||||
"templates": [
|
||||
{
|
||||
"id": 1001,
|
||||
"name": "HTTP to Webhook",
|
||||
"description": "Fetch data from HTTP and send to webhook",
|
||||
"workflow": {
|
||||
"nodes": [
|
||||
{
|
||||
"id": "1",
|
||||
"name": "HTTP Request",
|
||||
"type": "n8n-nodes-base.httpRequest",
|
||||
"position": [250, 300],
|
||||
"parameters": {
|
||||
"url": "https://api.example.com/data",
|
||||
"method": "GET"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"name": "Webhook",
|
||||
"type": "n8n-nodes-base.webhook",
|
||||
"position": [450, 300],
|
||||
"parameters": {
|
||||
"path": "data-webhook",
|
||||
"httpMethod": "POST"
|
||||
}
|
||||
}
|
||||
],
|
||||
"connections": {
|
||||
"HTTP Request": {
|
||||
"main": [[{ "node": "Webhook", "type": "main", "index": 0 }]]
|
||||
}
|
||||
}
|
||||
},
|
||||
"nodes": [
|
||||
{ "id": 1, "name": "HTTP Request", "icon": "http" },
|
||||
{ "id": 2, "name": "Webhook", "icon": "webhook" }
|
||||
],
|
||||
"categories": ["Data Processing"],
|
||||
"user": {
|
||||
"id": 1,
|
||||
"name": "Test User",
|
||||
"username": "testuser",
|
||||
"verified": false
|
||||
},
|
||||
"views": 150,
|
||||
"createdAt": "2024-01-15T10:00:00Z",
|
||||
"updatedAt": "2024-01-20T15:30:00Z",
|
||||
"totalViews": 150
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user