chore(cleanup): remove legacy artifacts and add tooling configs
Some checks failed
Documentation / build-and-publish (push) Has been cancelled
Checkout test / test (push) Has been cancelled

- Remove .github/ directory (migrated to .forgejo/)
- Remove .local-artifacts/ benchmark results
- Add AGENTS.md for coding assistants
- Add .windsurf/rules/ for development guidelines
- Update .gitignore
This commit is contained in:
Jeremie Fraeys 2026-02-12 12:06:09 -05:00
parent 1dcc1e11d5
commit 2854d3df95
No known key found for this signature in database
52 changed files with 468 additions and 2948 deletions

View file

@ -1,49 +0,0 @@
---
name: Bug Report
about: Create a report to help us improve
title: "[BUG] "
labels: bug
assignees: ''
---
## Describe the Bug
A clear and concise description of what the bug is.
## To Reproduce
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
## Expected Behavior
A clear and concise description of what you expected to happen.
## Actual Behavior
A clear and concise description of what actually happened.
## Environment
- OS: [e.g. macOS 13.0, Ubuntu 22.04]
- Go version: [e.g. 1.21.0]
- Fetch ML version: [e.g. v1.0.0]
- Configuration: [e.g. file-based auth, database auth]
## Configuration
```yaml
# Paste relevant configuration here
auth:
enabled: true
# ...
```
## Logs
```
# Paste relevant logs here
2024-01-01 12:00:00 ERROR: ...
```
## Additional Context
Add any other context about the problem here.
## Possible Solution
If you have ideas on how to fix this, please describe them here.

View file

@ -1,34 +0,0 @@
---
name: Feature Request
about: Suggest an idea for this project
title: "[FEATURE] "
labels: enhancement
assignees: ''
---
## Feature Description
A clear and concise description of what the feature is.
## Problem Statement
What problem does this feature solve? What pain point does it address?
## Proposed Solution
Describe the solution you'd like to see implemented.
## Alternative Solutions
Describe any alternative solutions or features you've considered.
## Use Cases
Describe specific use cases where this feature would be valuable.
## Implementation Details
If you have technical ideas on how this should be implemented, describe them here.
## Mockups/UI (if applicable)
If this involves UI changes, include mockups or screenshots.
## Additional Context
Add any other context, screenshots, or examples about the feature request here.
## Questions
Do you have any questions about how this feature might work?

View file

@ -1,35 +0,0 @@
## Description
Brief description of what this PR changes.
## Type of Change
- [ ] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] Documentation update
## Testing
- [ ] Unit tests pass
- [ ] Integration tests pass (if applicable)
- [ ] Manual testing completed
- [ ] Security audit passed
## Checklist
- [ ] Code follows the project's style guidelines
- [ ] Self-review of the code completed
- [ ] Documentation updated if necessary
- [ ] Tests added for new functionality
- [ ] No hardcoded secrets or credentials
- [ ] Error handling implemented appropriately
## Security Considerations
- [ ] No sensitive data in logs
- [ ] Proper input validation
- [ ] Authentication/authorization properly implemented
- [ ] No SQL injection vulnerabilities
- [ ] No XSS vulnerabilities (if applicable)
## Screenshots (if applicable)
Add screenshots to help explain your changes.
## Additional Context
Add any other context about the pull request here.

82
.github/labeler.yml vendored
View file

@ -1,82 +0,0 @@
# Labeler configuration for automatic PR labeling
# Bug reports
bug:
- "[BUG]"
- "bug:"
- "fixes #"
- "closes #"
# Feature requests
enhancement:
- "[FEATURE]"
- "feat:"
- "feature:"
- "add "
# Documentation
documentation:
- "[DOCS]"
- "docs:"
- "README"
- "documentation"
# Security
security:
- "[SECURITY]"
- "security:"
- "auth"
- "authentication"
- "RBAC"
- "permissions"
# Testing
testing:
- "[TEST]"
- "test:"
- "tests"
- "unit test"
- "integration test"
# CI/CD
ci:
- "[CI]"
- "workflow"
- "github actions"
- "build"
- "deploy"
# Configuration
configuration:
- "[CONFIG]"
- "config"
- "yaml"
- "settings"
# Dependencies
dependencies:
- "[DEPS]"
- "go.mod"
- "dependency"
- "update"
# Performance
performance:
- "[PERF]"
- "performance"
- "optimize"
- "speed"
# Breaking changes
breaking-change:
- "[BREAKING]"
- "breaking"
- "deprecated"
- "remove"
# TUI
tui:
- "[TUI]"
- "cmd/tui"
- "terminal ui"
- "interface"

View file

@ -1,21 +0,0 @@
{
"version": "v3.2.7",
"base_url": "https://github.com/JMarvi3/rsync-static/releases/download",
"platforms": {
"linux-x86_64": {
"target": "x86_64-linux-musl",
"asset": "rsync-linux-x86_64",
"sha256": "0019dfc4b32d63c1392aa264aed2253c1e0c2fb09216f8e2cc269bbfb8bb49b5"
},
"macos-x86_64": {
"target": "x86_64-macos",
"asset": "rsync-macos-x86_64",
"sha256": "0019dfc4b32d63c1392aa264aed2253c1e0c2fb09216f8e2cc269bbfb8bb49b5"
},
"macos-arm64": {
"target": "aarch64-macos",
"asset": "rsync-macos-arm64",
"sha256": "0019dfc4b32d63c1392aa264aed2253c1e0c2fb09216f8e2cc269bbfb8bb49b5"
}
}
}

View file

@ -1,87 +0,0 @@
name: Benchmark Metrics
on:
workflow_dispatch:
jobs:
benchmark:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v4
with:
go-version: '1.21'
- name: Cache Go modules
uses: actions/cache@v3
with:
path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
- name: Run benchmarks
run: |
echo "Running performance benchmarks..."
go test -bench=. -benchmem ./tests/benchmarks/... > benchmark_results.txt 2>&1
# Extract benchmark results
grep "Benchmark.*-[0-9].*" benchmark_results.txt > clean_benchmarks.txt || true
- name: Convert to Prometheus metrics
run: |
# Create Prometheus metrics file
echo "# HELP benchmark_time_per_op Time per operation in nanoseconds" > prometheus_metrics.txt
echo "# TYPE benchmark_time_per_op gauge" >> prometheus_metrics.txt
echo "# HELP benchmark_memory_per_op Memory per operation in bytes" >> prometheus_metrics.txt
echo "# TYPE benchmark_memory_per_op gauge" >> prometheus_metrics.txt
echo "# HELP benchmark_allocs_per_op Allocations per operation" >> prometheus_metrics.txt
echo "# TYPE benchmark_allocs_per_op gauge" >> prometheus_metrics.txt
# Parse benchmark results and convert to Prometheus format
while IFS= read -r line; do
if [[ -n "$line" ]]; then
BENCHMARK_NAME=$(echo "$line" | awk '{print $1}' | sed 's/-[0-9]*$//')
ITERATIONS=$(echo "$line" | awk '{print $2}')
TIME_PER_OP=$(echo "$line" | awk '{print $3}')
MEMORY_PER_OP=$(echo "$line" | awk '{print $4}')
ALLOCS_PER_OP=$(echo "$line" | awk '{print $5}')
# Clean benchmark name for Prometheus
CLEAN_NAME=$(echo "$BENCHMARK_NAME" | sed 's/[^a-zA-Z0-9_]/_/g')
echo "benchmark_time_per_op{benchmark=\"$CLEAN_NAME\"} ${TIME_PER_OP/ns/}" >> prometheus_metrics.txt
echo "benchmark_memory_per_op{benchmark=\"$CLEAN_NAME\"} ${MEMORY_PER_OP/B\/op/}" >> prometheus_metrics.txt
echo "benchmark_allocs_per_op{benchmark=\"$CLEAN_NAME\"} ${ALLOCS_PER_OP/allocs\/op/}" >> prometheus_metrics.txt
fi
done < clean_benchmarks.txt
- name: Push to Prometheus Pushgateway
env:
PROMETHEUS_PUSHGATEWAY_URL: ${{ secrets['PROMETHEUS_PUSHGATEWAY_URL'] }}
run: |
# Push metrics to Prometheus Pushgateway (if configured)
if [ -n "$PROMETHEUS_PUSHGATEWAY_URL" ]; then
echo "Pushing metrics to Prometheus..."
curl --data-binary @prometheus_metrics.txt \
"$PROMETHEUS_PUSHGATEWAY_URL/metrics/job/benchmark/instance/${{ github.run_id }}"
else
echo "PROMETHEUS_PUSHGATEWAY_URL not configured, skipping push"
fi
- name: Upload benchmark results
uses: actions/upload-artifact@v3
with:
name: benchmark-results-${{ github.run_id }}
path: |
benchmark_results.txt
clean_benchmarks.txt
prometheus_metrics.txt
retention-days: 30
- name: Display results summary
run: |
echo "=== Benchmark Results Summary ==="
cat prometheus_metrics.txt | grep "benchmark_time_per_op" | head -10

View file

@ -1,276 +0,0 @@
name: CI/CD Pipeline
on:
workflow_dispatch:
# Concurrency control to prevent multiple runs of the same workflow
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
# Workflow permissions
permissions:
contents: read
security-events: write
actions: read
packages: write
env:
GO_VERSION: '1.25.0'
ZIG_VERSION: '0.15.2'
jobs:
test:
name: Test
runs-on: ubuntu-latest
timeout-minutes: 30
services:
redis:
image: redis:7
ports:
- 6379:6379
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
- name: Cache Go modules
uses: actions/cache@v4
with:
path: |
~/.cache/go-build
~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum', '**/go.mod') }}
restore-keys: |
${{ runner.os }}-go-
- name: Set up Zig
uses: goto-bus-stop/setup-zig@v2
with:
version: ${{ env.ZIG_VERSION }}
- name: Cache Zig build
uses: actions/cache@v4
with:
path: |
~/.cache/zig
cli/zig-cache
cli/zig-out
key: ${{ runner.os }}-zig-${{ hashFiles('cli/**') }}
restore-keys: |
${{ runner.os }}-zig-
- name: Install dependencies
run: |
go mod download
sudo apt-get update
sudo apt-get install -y podman redis-tools
- name: Verify dependencies
run: go mod verify
- name: Run tests
run: make test
- name: Test internal/queue package
run: go test -v -race -coverprofile=queue-coverage.out ./internal/queue/...
- name: Run comprehensive tests
run: make test-all
- name: Run linters
run: make lint
- name: Generate coverage report
run: make coverage
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
file: ./coverage.out
flags: unittests
name: codecov-umbrella
dev-smoke:
name: Dev Compose Smoke Test
runs-on: ubuntu-latest
needs: test
timeout-minutes: 20
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Run dev smoke test
run: make dev-smoke
build:
name: Build
runs-on: ubuntu-latest
needs: test
timeout-minutes: 15
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
- name: Set up Zig
uses: goto-bus-stop/setup-zig@v2
with:
version: ${{ env.ZIG_VERSION }}
- name: Cache Go modules
uses: actions/cache@v4
with:
path: |
~/.cache/go-build
~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum', '**/go.mod') }}
restore-keys: |
${{ runner.os }}-go-
- name: Install build dependencies
run: |
sudo apt-get update
sudo apt-get install -y podman
- name: Build binaries
run: |
make build
make cli-build
# Build Zig CLI (dev and prod)
cd cli && zig build dev && zig build prod && cd ..
# Note: prod builds use rsync_placeholder wrapper
# For true embedded rsync, add static binary to cli/src/assets/rsync_release.bin
- name: Test binaries
run: |
./bin/user_manager --help
./bin/worker --help
./bin/tui --help
./bin/data_manager --help
# Test Zig CLI
./cli/zig-out/prod/ml --help
# Verify binary size (should be small with placeholder rsync)
ls -lh ./cli/zig-out/prod/ml
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: fetch_ml_binaries
path: |
bin/
cli/zig-out/
dist/
retention-days: 30
test-scripts:
name: Test Scripts
runs-on: ubuntu-latest
needs: test
timeout-minutes: 15
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y podman redis-tools bats
- name: Test scripts
run: |
# Test script functionality
chmod +x scripts/*.sh
# Test quick start script (dry run)
./scripts/quick_start.sh --help || true
# Test security monitor
./scripts/security-monitor.sh help
# Test auto setup
./scripts/auto_setup.sh help
# Test deployment scripts
./scripts/deploy-secure.sh --help || true
./scripts/deploy-prod.sh --help || true
security-scan:
name: Security Scan
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@master
with:
scan-type: 'fs'
scan-ref: '.'
format: 'sarif'
output: 'trivy-results.sarif'
- name: Upload Trivy scan results to GitHub Security tab
uses: github/codeql-action/upload-sarif@v2
if: always()
with:
sarif_file: 'trivy-results.sarif'
- name: Gosec Security Scanner
run: |
go install github.com/securecodewarrior/gosec/v2/cmd/gosec@latest
gosec ./...
docker-build:
name: Docker Build
runs-on: ubuntu-latest
needs: [test, build, test-scripts]
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
timeout-minutes: 30
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push Docker image
uses: docker/build-push-action@v6
with:
context: .
platforms: linux/amd64,linux/arm64
push: true
tags: |
ghcr.io/${{ github.repository }}:latest
ghcr.io/${{ github.repository }}:${{ github.sha }}
cache-from: type=gha
cache-to: type=gha,mode=max

View file

@ -1,58 +0,0 @@
name: Documentation
on:
workflow_dispatch:
push:
branches: [ main ]
pull_request:
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: "pages"
cancel-in-progress: false
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Pages
id: pages
uses: actions/configure-pages@v3
- name: Set up Go (for Hugo Modules)
uses: actions/setup-go@v5
with:
go-version: '1.21'
- name: Setup Hugo
uses: peaceiris/actions-hugo@v3
with:
hugo-version: '0.125.7'
extended: true
- name: Build with Hugo
run: hugo --source docs --minify --baseURL "${{ steps.pages.outputs.base_url }}/"
- name: Upload artifact
uses: actions/upload-pages-artifact@v2
with:
path: docs/_site
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
if: github.ref == 'refs/heads/main'
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v2

View file

@ -1,21 +0,0 @@
name: Label Pull Request
on:
workflow_dispatch:
jobs:
label:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Label PR
uses: actions/labeler@v4
with:
configuration-path: .github/labeler.yml
sync-labels: true

View file

@ -1,45 +0,0 @@
name: License Check
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
license-check:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Check license headers
run: |
# Check if LICENSE file exists
if [ ! -f "LICENSE" ]; then
echo "LICENSE file is missing"
exit 1
fi
echo "License file OK"
- name: Check Go files for license headers
run: |
# Check for license headers in Go files (optional but good practice)
missing_headers=0
for file in $(find . -name "*.go" -not -path "./vendor/*" -not -path "./.git/*"); do
if ! head -10 "$file" | grep -q "Copyright"; then
echo "Missing license header in: $file"
missing_headers=$((missing_headers + 1))
fi
done
if [ $missing_headers -gt 0 ]; then
echo "Found $missing_headers Go files without license headers"
echo "Consider adding license headers to Go files"
# Don't fail the build, just warn
else
echo "All Go files have license headers"
fi

View file

@ -1,208 +0,0 @@
name: Release
on:
workflow_dispatch:
permissions:
contents: write
packages: write
id-token: write
env:
GO_VERSION: '1.25.0'
ZIG_VERSION: '0.15.2'
jobs:
prepare_rsync:
name: Prepare rsync metadata
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.manifest.outputs.matrix }}
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Load rsync manifest
id: manifest
run: |
MANIFEST=.github/rsync_manifest.json
MATRIX=$(jq -c '
. as $cfg
| $cfg.platforms
| to_entries
| map({
platform: .key,
target: .value.target,
"rsync-url": ($cfg.base_url + "/" + $cfg.version + "/" + .value.asset),
"rsync-sha256": .value.sha256
})
' "$MANIFEST")
printf 'matrix={"include":%s}\n' "$MATRIX" >> "$GITHUB_OUTPUT"
build-cli:
name: Build CLI - ${{ matrix.platform }}
needs: prepare_rsync
runs-on: ubuntu-latest
strategy:
matrix: ${{ fromJson(needs.prepare_rsync.outputs.matrix) }}
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Set up Zig
uses: goto-bus-stop/setup-zig@v2
with:
version: ${{ env.ZIG_VERSION }}
- name: Download static rsync
run: |
mkdir -p cli/src/assets
wget -O cli/src/assets/rsync_release.bin ${{ matrix.rsync-url }} || \
curl -L -o cli/src/assets/rsync_release.bin ${{ matrix.rsync-url }}
echo "${{ matrix.rsync-sha256 }} cli/src/assets/rsync_release.bin" | sha256sum -c
chmod +x cli/src/assets/rsync_release.bin
ls -lh cli/src/assets/rsync_release.bin
- name: Build CLI
working-directory: cli
run: |
zig build-exe -OReleaseSmall -fstrip -target ${{ matrix.target }} \
-femit-bin=zig-out/bin/ml src/main.zig
ls -lh zig-out/bin/ml
- name: Strip binary (Linux only)
if: matrix.platform == 'linux-x86_64'
working-directory: cli
run: strip zig-out/bin/ml
- name: Package binary
run: |
mkdir -p dist
cp cli/zig-out/bin/ml dist/ml-${{ matrix.platform }}
cd dist
tar -czf ml-${{ matrix.platform }}.tar.gz ml-${{ matrix.platform }}
sha256sum ml-${{ matrix.platform }}.tar.gz > ml-${{ matrix.platform }}.tar.gz.sha256
- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: ml-${{ matrix.platform }}
path: |
dist/ml-${{ matrix.platform }}.tar.gz
dist/ml-${{ matrix.platform }}.tar.gz.sha256
build-go-backends:
name: Build Go Backends
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
- name: Build binaries
run: |
make cross-platform
ls -lh dist/
- name: Package binaries
run: |
cd dist
for binary in fetch_ml_*; do
if [[ -f "${binary}" ]]; then
tar -czf "${binary}.tar.gz" "${binary}"
sha256sum "${binary}.tar.gz" > "${binary}.tar.gz.sha256"
fi
done
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: go-backends
path: |
dist/*.tar.gz
dist/*.sha256
create-release:
name: Create GitHub Release
needs: [build-cli, build-go-backends]
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Prepare release assets
run: |
mkdir -p release
# Copy CLI binaries
cp artifacts/ml-*/ml-*.tar.gz* release/
# Copy Go binaries
cp artifacts/go-backends/*.tar.gz* release/
# Generate combined checksums
cd release
sha256sum *.tar.gz > checksums.txt
ls -lh
- name: Install cosign
uses: sigstore/cosign-installer@v3
- name: Sign checksums.txt (keyless)
working-directory: release
env:
COSIGN_YES: "true"
run: |
cosign sign-blob \
--output-signature checksums.txt.sig \
--output-certificate checksums.txt.cert \
checksums.txt
ls -lh checksums.txt checksums.txt.sig checksums.txt.cert
- name: Create Release
uses: softprops/action-gh-release@v2
with:
files: release/*
body: |
## 🚀 Release ${{ github.ref_name }}
### CLI Binaries (Zero Dependencies)
All CLI binaries include embedded static rsync for complete independence.
- **`ml-linux-x86_64.tar.gz`** - Linux x86_64 (fully static, musl)
- **`ml-macos-x86_64.tar.gz`** - macOS Intel
- **`ml-macos-arm64.tar.gz`** - macOS Apple Silicon
### Go Backend Binaries
Included as per-platform tarballs named:
- `fetch_ml_<component>_<os>_<arch>[.exe].tar.gz`
### Installation
```bash
# Download and extract (example: CLI)
tar -xzf ml-<platform>.tar.gz
# Make executable and move to PATH
chmod +x ml-<platform>
sudo mv ml-<platform> /usr/local/bin/ml
# Verify installation
ml --help
```
### Checksums
SHA256 checksums are provided in `checksums.txt` and individual `.sha256` files.
generate_release_notes: true
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View file

@ -1,33 +0,0 @@
name: Mark Stale Issues and PRs
on:
schedule:
- cron: "0 0 * * 1" # Every Monday at midnight
workflow_dispatch:
permissions:
issues: write
pull-requests: write
jobs:
stale:
runs-on: ubuntu-latest
steps:
- name: Mark stale issues and PRs
uses: actions/stale@v8
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-stale: 30
days-before-close: 14
stale-issue-label: "stale"
stale-pr-label: "stale"
stale-issue-message: |
This issue has been automatically marked as stale because it has not had recent activity.
It will be closed if no further activity occurs within 14 days.
Thank you for your contributions!
stale-pr-message: |
This pull request has been automatically marked as stale because it has not had recent activity.
It will be closed if no further activity occurs within 14 days.
Thank you for your contributions!
exempt-issue-labels: "pinned,security,help wanted,good first issue"
exempt-pr-labels: "pinned,security,help wanted,good first issue"

12
.gitignore vendored
View file

@ -24,6 +24,10 @@ go.work
*.swo
*~
# Allow committing VS Code settings
!.vscode/settings.json
!cli/.vscode/settings.json
# OS generated files
.DS_Store
.DS_Store?
@ -80,7 +84,7 @@ share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# MANIFEST
# PyInstaller
*.manifest
@ -212,6 +216,8 @@ coverage.html
queue-coverage.out
coverage/
test_results/
# documents
docs/_site/**
@ -232,6 +238,7 @@ db/*.db
*.pem
secrets/
cli/src/assets/rsync_release.bin
cli/src/assets/rsync_release_*.bin
# Local artifacts (e.g. test run outputs)
.local-artifacts/
@ -265,6 +272,3 @@ db/*.db
ssl/
*.pem
*.key
# Windsurf AI
.windsurf/

View file

@ -1,21 +0,0 @@
goos: darwin
goarch: arm64
pkg: github.com/jfraeys/fetch_ml/tests/benchmarks
cpu: Apple M2 Ultra
BenchmarkAPIServerCreateJobSimple-24 25867 44784 ns/op 13520 B/op 98 allocs/op
BenchmarkMetricsCollection-24 58569440 19.87 ns/op 0 B/op 0 allocs/op
BenchmarkConcurrentRequests/Concurrency-1-24 10000 104650 ns/op 26708 B/op 162 allocs/op
BenchmarkConcurrentRequests/Concurrency-5-24 8703 553714 ns/op 18123 B/op 131 allocs/op
BenchmarkConcurrentRequests/Concurrency-10-24 918 1357144 ns/op 6088 B/op 71 allocs/op
BenchmarkConcurrentRequests/Concurrency-25-24 908 1351232 ns/op 6466 B/op 73 allocs/op
BenchmarkConcurrentRequests/Concurrency-50-24 909 1338756 ns/op 6719 B/op 74 allocs/op
BenchmarkMLExperimentExecution/SmallExperiment-24 42 26589647 ns/op 657022 B/op 12350 allocs/op
BenchmarkMLExperimentExecution/MediumExperiment-24 94 12482363 ns/op 794538 B/op 6254 allocs/op
BenchmarkMLExperimentExecution/LargeExperiment-24 358 3631202 ns/op 1129266 B/op 1376 allocs/op
BenchmarkMLExperimentExecution/ConcurrentExperiments-24 34 35603358 ns/op 1111297 B/op 12625 allocs/op
BenchmarkMLExperimentExecution/ExperimentMetrics-24 55 27881781 ns/op 615782 B/op 17884 allocs/op
BenchmarkDatasetOperations/DatasetCreation-24 12116 98516 ns/op 2933 B/op 75 allocs/op
BenchmarkDatasetOperations/DatasetRetrieval-24 23803464 49.69 ns/op 16 B/op 1 allocs/op
BenchmarkDatasetOperations/DatasetUpdate-24 18534 65030 ns/op 1285 B/op 36 allocs/op
PASS
ok github.com/jfraeys/fetch_ml/tests/benchmarks 28.082s

View file

@ -1,15 +0,0 @@
BenchmarkAPIServerCreateJobSimple-24 25867 44784 ns/op 13520 B/op 98 allocs/op
BenchmarkMetricsCollection-24 58569440 19.87 ns/op 0 B/op 0 allocs/op
BenchmarkConcurrentRequests/Concurrency-1-24 10000 104650 ns/op 26708 B/op 162 allocs/op
BenchmarkConcurrentRequests/Concurrency-5-24 8703 553714 ns/op 18123 B/op 131 allocs/op
BenchmarkConcurrentRequests/Concurrency-10-24 918 1357144 ns/op 6088 B/op 71 allocs/op
BenchmarkConcurrentRequests/Concurrency-25-24 908 1351232 ns/op 6466 B/op 73 allocs/op
BenchmarkConcurrentRequests/Concurrency-50-24 909 1338756 ns/op 6719 B/op 74 allocs/op
BenchmarkMLExperimentExecution/SmallExperiment-24 42 26589647 ns/op 657022 B/op 12350 allocs/op
BenchmarkMLExperimentExecution/MediumExperiment-24 94 12482363 ns/op 794538 B/op 6254 allocs/op
BenchmarkMLExperimentExecution/LargeExperiment-24 358 3631202 ns/op 1129266 B/op 1376 allocs/op
BenchmarkMLExperimentExecution/ConcurrentExperiments-24 34 35603358 ns/op 1111297 B/op 12625 allocs/op
BenchmarkMLExperimentExecution/ExperimentMetrics-24 55 27881781 ns/op 615782 B/op 17884 allocs/op
BenchmarkDatasetOperations/DatasetCreation-24 12116 98516 ns/op 2933 B/op 75 allocs/op
BenchmarkDatasetOperations/DatasetRetrieval-24 23803464 49.69 ns/op 16 B/op 1 allocs/op
BenchmarkDatasetOperations/DatasetUpdate-24 18534 65030 ns/op 1285 B/op 36 allocs/op

View file

@ -1,51 +0,0 @@
# HELP benchmark_time_per_op Time per operation in nanoseconds
# TYPE benchmark_time_per_op gauge
# HELP benchmark_memory_per_op Memory per operation in bytes
# TYPE benchmark_memory_per_op gauge
# HELP benchmark_allocs_per_op Allocations per operation
# TYPE benchmark_allocs_per_op gauge
benchmark_time_per_op{benchmark="BenchmarkAPIServerCreateJobSimple"} 44784
benchmark_memory_per_op{benchmark="BenchmarkAPIServerCreateJobSimple"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkAPIServerCreateJobSimple"} 13520
benchmark_time_per_op{benchmark="BenchmarkMetricsCollection"} 19.87
benchmark_memory_per_op{benchmark="BenchmarkMetricsCollection"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMetricsCollection"} 0
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_1"} 104650
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_1"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_1"} 26708
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_5"} 553714
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_5"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_5"} 18123
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_10"} 1357144
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_10"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_10"} 6088
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_25"} 1351232
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_25"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_25"} 6466
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_50"} 1338756
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_50"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_50"} 6719
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_SmallExperiment"} 26589647
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_SmallExperiment"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_SmallExperiment"} 657022
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_MediumExperiment"} 12482363
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_MediumExperiment"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_MediumExperiment"} 794538
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_LargeExperiment"} 3631202
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_LargeExperiment"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_LargeExperiment"} 1129266
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_ConcurrentExperiments"} 35603358
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_ConcurrentExperiments"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_ConcurrentExperiments"} 1111297
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_ExperimentMetrics"} 27881781
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_ExperimentMetrics"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_ExperimentMetrics"} 615782
benchmark_time_per_op{benchmark="BenchmarkDatasetOperations_DatasetCreation"} 98516
benchmark_memory_per_op{benchmark="BenchmarkDatasetOperations_DatasetCreation"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkDatasetOperations_DatasetCreation"} 2933
benchmark_time_per_op{benchmark="BenchmarkDatasetOperations_DatasetRetrieval"} 49.69
benchmark_memory_per_op{benchmark="BenchmarkDatasetOperations_DatasetRetrieval"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkDatasetOperations_DatasetRetrieval"} 16
benchmark_time_per_op{benchmark="BenchmarkDatasetOperations_DatasetUpdate"} 65030
benchmark_memory_per_op{benchmark="BenchmarkDatasetOperations_DatasetUpdate"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkDatasetOperations_DatasetUpdate"} 1285

View file

@ -1,141 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Benchmark Report - 20251204_230712</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
.metric { font-family: monospace; }
</style>
</head>
<body>
<h1>Benchmark Report</h1>
<p><strong>Run ID:</strong> 20251204_230712</p>
<p><strong>Date:</strong> Thu Dec 4 18:07:41 EST 2025</p>
<h2>Results</h2>
<table>
<tr>
<th>Benchmark</th>
<th>Time (ns/op)</th>
<th>Memory (B/op)</th>
<th>Allocs (allocs/op)</th>
</tr>
<tr>
<td class="metric">BenchmarkAPIServerCreateJobSimple-24</td>
<td>44784</td>
<td>ns/op</td>
<td>13520</td>
</tr>
<tr>
<td class="metric">BenchmarkMetricsCollection-24</td>
<td>19.87</td>
<td>ns/op</td>
<td>0</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-1-24</td>
<td>104650</td>
<td>ns/op</td>
<td>26708</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-5-24</td>
<td>553714</td>
<td>ns/op</td>
<td>18123</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-10-24</td>
<td>1357144</td>
<td>ns/op</td>
<td>6088</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-25-24</td>
<td>1351232</td>
<td>ns/op</td>
<td>6466</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-50-24</td>
<td>1338756</td>
<td>ns/op</td>
<td>6719</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/SmallExperiment-24</td>
<td>26589647</td>
<td>ns/op</td>
<td>657022</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/MediumExperiment-24</td>
<td>12482363</td>
<td>ns/op</td>
<td>794538</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/LargeExperiment-24</td>
<td>3631202</td>
<td>ns/op</td>
<td>1129266</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/ConcurrentExperiments-24</td>
<td>35603358</td>
<td>ns/op</td>
<td>1111297</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/ExperimentMetrics-24</td>
<td>27881781</td>
<td>ns/op</td>
<td>615782</td>
</tr>
<tr>
<td class="metric">BenchmarkDatasetOperations/DatasetCreation-24</td>
<td>98516</td>
<td>ns/op</td>
<td>2933</td>
</tr>
<tr>
<td class="metric">BenchmarkDatasetOperations/DatasetRetrieval-24</td>
<td>49.69</td>
<td>ns/op</td>
<td>16</td>
</tr>
<tr>
<td class="metric">BenchmarkDatasetOperations/DatasetUpdate-24</td>
<td>65030</td>
<td>ns/op</td>
<td>1285</td>
</tr>
</table>
<h2>Raw Output</h2>
<pre>goos: darwin
goarch: arm64
pkg: github.com/jfraeys/fetch_ml/tests/benchmarks
cpu: Apple M2 Ultra
BenchmarkAPIServerCreateJobSimple-24 25867 44784 ns/op 13520 B/op 98 allocs/op
BenchmarkMetricsCollection-24 58569440 19.87 ns/op 0 B/op 0 allocs/op
BenchmarkConcurrentRequests/Concurrency-1-24 10000 104650 ns/op 26708 B/op 162 allocs/op
BenchmarkConcurrentRequests/Concurrency-5-24 8703 553714 ns/op 18123 B/op 131 allocs/op
BenchmarkConcurrentRequests/Concurrency-10-24 918 1357144 ns/op 6088 B/op 71 allocs/op
BenchmarkConcurrentRequests/Concurrency-25-24 908 1351232 ns/op 6466 B/op 73 allocs/op
BenchmarkConcurrentRequests/Concurrency-50-24 909 1338756 ns/op 6719 B/op 74 allocs/op
BenchmarkMLExperimentExecution/SmallExperiment-24 42 26589647 ns/op 657022 B/op 12350 allocs/op
BenchmarkMLExperimentExecution/MediumExperiment-24 94 12482363 ns/op 794538 B/op 6254 allocs/op
BenchmarkMLExperimentExecution/LargeExperiment-24 358 3631202 ns/op 1129266 B/op 1376 allocs/op
BenchmarkMLExperimentExecution/ConcurrentExperiments-24 34 35603358 ns/op 1111297 B/op 12625 allocs/op
BenchmarkMLExperimentExecution/ExperimentMetrics-24 55 27881781 ns/op 615782 B/op 17884 allocs/op
BenchmarkDatasetOperations/DatasetCreation-24 12116 98516 ns/op 2933 B/op 75 allocs/op
BenchmarkDatasetOperations/DatasetRetrieval-24 23803464 49.69 ns/op 16 B/op 1 allocs/op
BenchmarkDatasetOperations/DatasetUpdate-24 18534 65030 ns/op 1285 B/op 36 allocs/op
PASS
ok github.com/jfraeys/fetch_ml/tests/benchmarks 28.082s</pre>
</body>
</html>

View file

@ -1,21 +0,0 @@
goos: darwin
goarch: arm64
pkg: github.com/jfraeys/fetch_ml/tests/benchmarks
cpu: Apple M2 Ultra
BenchmarkAPIServerCreateJobSimple-24 28656 43062 ns/op 13518 B/op 98 allocs/op
BenchmarkMetricsCollection-24 59213934 19.29 ns/op 0 B/op 0 allocs/op
BenchmarkConcurrentRequests/Concurrency-1-24 10000 108510 ns/op 26825 B/op 162 allocs/op
BenchmarkConcurrentRequests/Concurrency-5-24 9895 657334 ns/op 16807 B/op 124 allocs/op
BenchmarkConcurrentRequests/Concurrency-10-24 914 1346314 ns/op 6032 B/op 71 allocs/op
BenchmarkConcurrentRequests/Concurrency-25-24 885 1350853 ns/op 6289 B/op 73 allocs/op
BenchmarkConcurrentRequests/Concurrency-50-24 853 1346826 ns/op 6431 B/op 75 allocs/op
BenchmarkMLExperimentExecution/SmallExperiment-24 43 26357159 ns/op 657854 B/op 12354 allocs/op
BenchmarkMLExperimentExecution/MediumExperiment-24 92 12494936 ns/op 794812 B/op 6254 allocs/op
BenchmarkMLExperimentExecution/LargeExperiment-24 348 3659886 ns/op 1129733 B/op 1376 allocs/op
BenchmarkMLExperimentExecution/ConcurrentExperiments-24 40 32637755 ns/op 1114183 B/op 12636 allocs/op
BenchmarkMLExperimentExecution/ExperimentMetrics-24 56 27153394 ns/op 615897 B/op 17885 allocs/op
BenchmarkDatasetOperations/DatasetCreation-24 10000 102638 ns/op 2921 B/op 75 allocs/op
BenchmarkDatasetOperations/DatasetRetrieval-24 20641564 50.73 ns/op 16 B/op 1 allocs/op
BenchmarkDatasetOperations/DatasetUpdate-24 20919 65724 ns/op 1285 B/op 36 allocs/op
PASS
ok github.com/jfraeys/fetch_ml/tests/benchmarks 26.755s

View file

@ -1,15 +0,0 @@
BenchmarkAPIServerCreateJobSimple-24 28656 43062 ns/op 13518 B/op 98 allocs/op
BenchmarkMetricsCollection-24 59213934 19.29 ns/op 0 B/op 0 allocs/op
BenchmarkConcurrentRequests/Concurrency-1-24 10000 108510 ns/op 26825 B/op 162 allocs/op
BenchmarkConcurrentRequests/Concurrency-5-24 9895 657334 ns/op 16807 B/op 124 allocs/op
BenchmarkConcurrentRequests/Concurrency-10-24 914 1346314 ns/op 6032 B/op 71 allocs/op
BenchmarkConcurrentRequests/Concurrency-25-24 885 1350853 ns/op 6289 B/op 73 allocs/op
BenchmarkConcurrentRequests/Concurrency-50-24 853 1346826 ns/op 6431 B/op 75 allocs/op
BenchmarkMLExperimentExecution/SmallExperiment-24 43 26357159 ns/op 657854 B/op 12354 allocs/op
BenchmarkMLExperimentExecution/MediumExperiment-24 92 12494936 ns/op 794812 B/op 6254 allocs/op
BenchmarkMLExperimentExecution/LargeExperiment-24 348 3659886 ns/op 1129733 B/op 1376 allocs/op
BenchmarkMLExperimentExecution/ConcurrentExperiments-24 40 32637755 ns/op 1114183 B/op 12636 allocs/op
BenchmarkMLExperimentExecution/ExperimentMetrics-24 56 27153394 ns/op 615897 B/op 17885 allocs/op
BenchmarkDatasetOperations/DatasetCreation-24 10000 102638 ns/op 2921 B/op 75 allocs/op
BenchmarkDatasetOperations/DatasetRetrieval-24 20641564 50.73 ns/op 16 B/op 1 allocs/op
BenchmarkDatasetOperations/DatasetUpdate-24 20919 65724 ns/op 1285 B/op 36 allocs/op

View file

@ -1,51 +0,0 @@
# HELP benchmark_time_per_op Time per operation in nanoseconds
# TYPE benchmark_time_per_op gauge
# HELP benchmark_memory_per_op Memory per operation in bytes
# TYPE benchmark_memory_per_op gauge
# HELP benchmark_allocs_per_op Allocations per operation
# TYPE benchmark_allocs_per_op gauge
benchmark_time_per_op{benchmark="BenchmarkAPIServerCreateJobSimple"} 43062
benchmark_memory_per_op{benchmark="BenchmarkAPIServerCreateJobSimple"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkAPIServerCreateJobSimple"} 13518
benchmark_time_per_op{benchmark="BenchmarkMetricsCollection"} 19.29
benchmark_memory_per_op{benchmark="BenchmarkMetricsCollection"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMetricsCollection"} 0
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_1"} 108510
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_1"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_1"} 26825
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_5"} 657334
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_5"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_5"} 16807
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_10"} 1346314
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_10"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_10"} 6032
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_25"} 1350853
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_25"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_25"} 6289
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_50"} 1346826
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_50"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_50"} 6431
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_SmallExperiment"} 26357159
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_SmallExperiment"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_SmallExperiment"} 657854
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_MediumExperiment"} 12494936
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_MediumExperiment"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_MediumExperiment"} 794812
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_LargeExperiment"} 3659886
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_LargeExperiment"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_LargeExperiment"} 1129733
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_ConcurrentExperiments"} 32637755
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_ConcurrentExperiments"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_ConcurrentExperiments"} 1114183
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_ExperimentMetrics"} 27153394
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_ExperimentMetrics"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_ExperimentMetrics"} 615897
benchmark_time_per_op{benchmark="BenchmarkDatasetOperations_DatasetCreation"} 102638
benchmark_memory_per_op{benchmark="BenchmarkDatasetOperations_DatasetCreation"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkDatasetOperations_DatasetCreation"} 2921
benchmark_time_per_op{benchmark="BenchmarkDatasetOperations_DatasetRetrieval"} 50.73
benchmark_memory_per_op{benchmark="BenchmarkDatasetOperations_DatasetRetrieval"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkDatasetOperations_DatasetRetrieval"} 16
benchmark_time_per_op{benchmark="BenchmarkDatasetOperations_DatasetUpdate"} 65724
benchmark_memory_per_op{benchmark="BenchmarkDatasetOperations_DatasetUpdate"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkDatasetOperations_DatasetUpdate"} 1285

View file

@ -1,141 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Benchmark Report - 20251204_231218</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
.metric { font-family: monospace; }
</style>
</head>
<body>
<h1>Benchmark Report</h1>
<p><strong>Run ID:</strong> 20251204_231218</p>
<p><strong>Date:</strong> Thu Dec 4 18:12:46 EST 2025</p>
<h2>Results</h2>
<table>
<tr>
<th>Benchmark</th>
<th>Time (ns/op)</th>
<th>Memory (B/op)</th>
<th>Allocs (allocs/op)</th>
</tr>
<tr>
<td class="metric">BenchmarkAPIServerCreateJobSimple-24</td>
<td>43062</td>
<td>ns/op</td>
<td>13518</td>
</tr>
<tr>
<td class="metric">BenchmarkMetricsCollection-24</td>
<td>19.29</td>
<td>ns/op</td>
<td>0</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-1-24</td>
<td>108510</td>
<td>ns/op</td>
<td>26825</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-5-24</td>
<td>657334</td>
<td>ns/op</td>
<td>16807</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-10-24</td>
<td>1346314</td>
<td>ns/op</td>
<td>6032</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-25-24</td>
<td>1350853</td>
<td>ns/op</td>
<td>6289</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-50-24</td>
<td>1346826</td>
<td>ns/op</td>
<td>6431</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/SmallExperiment-24</td>
<td>26357159</td>
<td>ns/op</td>
<td>657854</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/MediumExperiment-24</td>
<td>12494936</td>
<td>ns/op</td>
<td>794812</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/LargeExperiment-24</td>
<td>3659886</td>
<td>ns/op</td>
<td>1129733</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/ConcurrentExperiments-24</td>
<td>32637755</td>
<td>ns/op</td>
<td>1114183</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/ExperimentMetrics-24</td>
<td>27153394</td>
<td>ns/op</td>
<td>615897</td>
</tr>
<tr>
<td class="metric">BenchmarkDatasetOperations/DatasetCreation-24</td>
<td>102638</td>
<td>ns/op</td>
<td>2921</td>
</tr>
<tr>
<td class="metric">BenchmarkDatasetOperations/DatasetRetrieval-24</td>
<td>50.73</td>
<td>ns/op</td>
<td>16</td>
</tr>
<tr>
<td class="metric">BenchmarkDatasetOperations/DatasetUpdate-24</td>
<td>65724</td>
<td>ns/op</td>
<td>1285</td>
</tr>
</table>
<h2>Raw Output</h2>
<pre>goos: darwin
goarch: arm64
pkg: github.com/jfraeys/fetch_ml/tests/benchmarks
cpu: Apple M2 Ultra
BenchmarkAPIServerCreateJobSimple-24 28656 43062 ns/op 13518 B/op 98 allocs/op
BenchmarkMetricsCollection-24 59213934 19.29 ns/op 0 B/op 0 allocs/op
BenchmarkConcurrentRequests/Concurrency-1-24 10000 108510 ns/op 26825 B/op 162 allocs/op
BenchmarkConcurrentRequests/Concurrency-5-24 9895 657334 ns/op 16807 B/op 124 allocs/op
BenchmarkConcurrentRequests/Concurrency-10-24 914 1346314 ns/op 6032 B/op 71 allocs/op
BenchmarkConcurrentRequests/Concurrency-25-24 885 1350853 ns/op 6289 B/op 73 allocs/op
BenchmarkConcurrentRequests/Concurrency-50-24 853 1346826 ns/op 6431 B/op 75 allocs/op
BenchmarkMLExperimentExecution/SmallExperiment-24 43 26357159 ns/op 657854 B/op 12354 allocs/op
BenchmarkMLExperimentExecution/MediumExperiment-24 92 12494936 ns/op 794812 B/op 6254 allocs/op
BenchmarkMLExperimentExecution/LargeExperiment-24 348 3659886 ns/op 1129733 B/op 1376 allocs/op
BenchmarkMLExperimentExecution/ConcurrentExperiments-24 40 32637755 ns/op 1114183 B/op 12636 allocs/op
BenchmarkMLExperimentExecution/ExperimentMetrics-24 56 27153394 ns/op 615897 B/op 17885 allocs/op
BenchmarkDatasetOperations/DatasetCreation-24 10000 102638 ns/op 2921 B/op 75 allocs/op
BenchmarkDatasetOperations/DatasetRetrieval-24 20641564 50.73 ns/op 16 B/op 1 allocs/op
BenchmarkDatasetOperations/DatasetUpdate-24 20919 65724 ns/op 1285 B/op 36 allocs/op
PASS
ok github.com/jfraeys/fetch_ml/tests/benchmarks 26.755s</pre>
</body>
</html>

View file

@ -1,21 +0,0 @@
goos: darwin
goarch: arm64
pkg: github.com/jfraeys/fetch_ml/tests/benchmarks
cpu: Apple M2 Ultra
BenchmarkAPIServerCreateJobSimple-24 28408 45304 ns/op 13517 B/op 98 allocs/op
BenchmarkMetricsCollection-24 60437035 19.88 ns/op 0 B/op 0 allocs/op
BenchmarkConcurrentRequests/Concurrency-1-24 10000 106089 ns/op 26846 B/op 162 allocs/op
BenchmarkConcurrentRequests/Concurrency-5-24 9220 579691 ns/op 17615 B/op 128 allocs/op
BenchmarkConcurrentRequests/Concurrency-10-24 925 1348616 ns/op 6050 B/op 71 allocs/op
BenchmarkConcurrentRequests/Concurrency-25-24 927 1340898 ns/op 6529 B/op 73 allocs/op
BenchmarkConcurrentRequests/Concurrency-50-24 916 1333626 ns/op 6694 B/op 74 allocs/op
BenchmarkMLExperimentExecution/SmallExperiment-24 43 26542657 ns/op 656983 B/op 12350 allocs/op
BenchmarkMLExperimentExecution/MediumExperiment-24 100 12121203 ns/op 794420 B/op 6253 allocs/op
BenchmarkMLExperimentExecution/LargeExperiment-24 358 3704013 ns/op 1128981 B/op 1374 allocs/op
BenchmarkMLExperimentExecution/ConcurrentExperiments-24 34 32337061 ns/op 1113039 B/op 12630 allocs/op
BenchmarkMLExperimentExecution/ExperimentMetrics-24 52 26482224 ns/op 615734 B/op 17883 allocs/op
BenchmarkDatasetOperations/DatasetCreation-24 12356 101514 ns/op 2934 B/op 75 allocs/op
BenchmarkDatasetOperations/DatasetRetrieval-24 24143787 49.80 ns/op 16 B/op 1 allocs/op
BenchmarkDatasetOperations/DatasetUpdate-24 18423 65515 ns/op 1285 B/op 36 allocs/op
PASS
ok github.com/jfraeys/fetch_ml/tests/benchmarks 28.641s

View file

@ -1,15 +0,0 @@
BenchmarkAPIServerCreateJobSimple-24 28408 45304 ns/op 13517 B/op 98 allocs/op
BenchmarkMetricsCollection-24 60437035 19.88 ns/op 0 B/op 0 allocs/op
BenchmarkConcurrentRequests/Concurrency-1-24 10000 106089 ns/op 26846 B/op 162 allocs/op
BenchmarkConcurrentRequests/Concurrency-5-24 9220 579691 ns/op 17615 B/op 128 allocs/op
BenchmarkConcurrentRequests/Concurrency-10-24 925 1348616 ns/op 6050 B/op 71 allocs/op
BenchmarkConcurrentRequests/Concurrency-25-24 927 1340898 ns/op 6529 B/op 73 allocs/op
BenchmarkConcurrentRequests/Concurrency-50-24 916 1333626 ns/op 6694 B/op 74 allocs/op
BenchmarkMLExperimentExecution/SmallExperiment-24 43 26542657 ns/op 656983 B/op 12350 allocs/op
BenchmarkMLExperimentExecution/MediumExperiment-24 100 12121203 ns/op 794420 B/op 6253 allocs/op
BenchmarkMLExperimentExecution/LargeExperiment-24 358 3704013 ns/op 1128981 B/op 1374 allocs/op
BenchmarkMLExperimentExecution/ConcurrentExperiments-24 34 32337061 ns/op 1113039 B/op 12630 allocs/op
BenchmarkMLExperimentExecution/ExperimentMetrics-24 52 26482224 ns/op 615734 B/op 17883 allocs/op
BenchmarkDatasetOperations/DatasetCreation-24 12356 101514 ns/op 2934 B/op 75 allocs/op
BenchmarkDatasetOperations/DatasetRetrieval-24 24143787 49.80 ns/op 16 B/op 1 allocs/op
BenchmarkDatasetOperations/DatasetUpdate-24 18423 65515 ns/op 1285 B/op 36 allocs/op

View file

@ -1,51 +0,0 @@
# HELP benchmark_time_per_op Time per operation in nanoseconds
# TYPE benchmark_time_per_op gauge
# HELP benchmark_memory_per_op Memory per operation in bytes
# TYPE benchmark_memory_per_op gauge
# HELP benchmark_allocs_per_op Allocations per operation
# TYPE benchmark_allocs_per_op gauge
benchmark_time_per_op{benchmark="BenchmarkAPIServerCreateJobSimple"} 45304
benchmark_memory_per_op{benchmark="BenchmarkAPIServerCreateJobSimple"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkAPIServerCreateJobSimple"} 13517
benchmark_time_per_op{benchmark="BenchmarkMetricsCollection"} 19.88
benchmark_memory_per_op{benchmark="BenchmarkMetricsCollection"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMetricsCollection"} 0
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_1"} 106089
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_1"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_1"} 26846
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_5"} 579691
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_5"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_5"} 17615
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_10"} 1348616
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_10"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_10"} 6050
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_25"} 1340898
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_25"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_25"} 6529
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_50"} 1333626
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_50"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_50"} 6694
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_SmallExperiment"} 26542657
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_SmallExperiment"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_SmallExperiment"} 656983
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_MediumExperiment"} 12121203
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_MediumExperiment"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_MediumExperiment"} 794420
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_LargeExperiment"} 3704013
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_LargeExperiment"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_LargeExperiment"} 1128981
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_ConcurrentExperiments"} 32337061
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_ConcurrentExperiments"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_ConcurrentExperiments"} 1113039
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_ExperimentMetrics"} 26482224
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_ExperimentMetrics"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_ExperimentMetrics"} 615734
benchmark_time_per_op{benchmark="BenchmarkDatasetOperations_DatasetCreation"} 101514
benchmark_memory_per_op{benchmark="BenchmarkDatasetOperations_DatasetCreation"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkDatasetOperations_DatasetCreation"} 2934
benchmark_time_per_op{benchmark="BenchmarkDatasetOperations_DatasetRetrieval"} 49.80
benchmark_memory_per_op{benchmark="BenchmarkDatasetOperations_DatasetRetrieval"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkDatasetOperations_DatasetRetrieval"} 16
benchmark_time_per_op{benchmark="BenchmarkDatasetOperations_DatasetUpdate"} 65515
benchmark_memory_per_op{benchmark="BenchmarkDatasetOperations_DatasetUpdate"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkDatasetOperations_DatasetUpdate"} 1285

View file

@ -1,141 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Benchmark Report - 20251204_231255</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
.metric { font-family: monospace; }
</style>
</head>
<body>
<h1>Benchmark Report</h1>
<p><strong>Run ID:</strong> 20251204_231255</p>
<p><strong>Date:</strong> Thu Dec 4 18:13:24 EST 2025</p>
<h2>Results</h2>
<table>
<tr>
<th>Benchmark</th>
<th>Time (ns/op)</th>
<th>Memory (B/op)</th>
<th>Allocs (allocs/op)</th>
</tr>
<tr>
<td class="metric">BenchmarkAPIServerCreateJobSimple-24</td>
<td>45304</td>
<td>ns/op</td>
<td>13517</td>
</tr>
<tr>
<td class="metric">BenchmarkMetricsCollection-24</td>
<td>19.88</td>
<td>ns/op</td>
<td>0</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-1-24</td>
<td>106089</td>
<td>ns/op</td>
<td>26846</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-5-24</td>
<td>579691</td>
<td>ns/op</td>
<td>17615</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-10-24</td>
<td>1348616</td>
<td>ns/op</td>
<td>6050</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-25-24</td>
<td>1340898</td>
<td>ns/op</td>
<td>6529</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-50-24</td>
<td>1333626</td>
<td>ns/op</td>
<td>6694</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/SmallExperiment-24</td>
<td>26542657</td>
<td>ns/op</td>
<td>656983</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/MediumExperiment-24</td>
<td>12121203</td>
<td>ns/op</td>
<td>794420</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/LargeExperiment-24</td>
<td>3704013</td>
<td>ns/op</td>
<td>1128981</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/ConcurrentExperiments-24</td>
<td>32337061</td>
<td>ns/op</td>
<td>1113039</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/ExperimentMetrics-24</td>
<td>26482224</td>
<td>ns/op</td>
<td>615734</td>
</tr>
<tr>
<td class="metric">BenchmarkDatasetOperations/DatasetCreation-24</td>
<td>101514</td>
<td>ns/op</td>
<td>2934</td>
</tr>
<tr>
<td class="metric">BenchmarkDatasetOperations/DatasetRetrieval-24</td>
<td>49.80</td>
<td>ns/op</td>
<td>16</td>
</tr>
<tr>
<td class="metric">BenchmarkDatasetOperations/DatasetUpdate-24</td>
<td>65515</td>
<td>ns/op</td>
<td>1285</td>
</tr>
</table>
<h2>Raw Output</h2>
<pre>goos: darwin
goarch: arm64
pkg: github.com/jfraeys/fetch_ml/tests/benchmarks
cpu: Apple M2 Ultra
BenchmarkAPIServerCreateJobSimple-24 28408 45304 ns/op 13517 B/op 98 allocs/op
BenchmarkMetricsCollection-24 60437035 19.88 ns/op 0 B/op 0 allocs/op
BenchmarkConcurrentRequests/Concurrency-1-24 10000 106089 ns/op 26846 B/op 162 allocs/op
BenchmarkConcurrentRequests/Concurrency-5-24 9220 579691 ns/op 17615 B/op 128 allocs/op
BenchmarkConcurrentRequests/Concurrency-10-24 925 1348616 ns/op 6050 B/op 71 allocs/op
BenchmarkConcurrentRequests/Concurrency-25-24 927 1340898 ns/op 6529 B/op 73 allocs/op
BenchmarkConcurrentRequests/Concurrency-50-24 916 1333626 ns/op 6694 B/op 74 allocs/op
BenchmarkMLExperimentExecution/SmallExperiment-24 43 26542657 ns/op 656983 B/op 12350 allocs/op
BenchmarkMLExperimentExecution/MediumExperiment-24 100 12121203 ns/op 794420 B/op 6253 allocs/op
BenchmarkMLExperimentExecution/LargeExperiment-24 358 3704013 ns/op 1128981 B/op 1374 allocs/op
BenchmarkMLExperimentExecution/ConcurrentExperiments-24 34 32337061 ns/op 1113039 B/op 12630 allocs/op
BenchmarkMLExperimentExecution/ExperimentMetrics-24 52 26482224 ns/op 615734 B/op 17883 allocs/op
BenchmarkDatasetOperations/DatasetCreation-24 12356 101514 ns/op 2934 B/op 75 allocs/op
BenchmarkDatasetOperations/DatasetRetrieval-24 24143787 49.80 ns/op 16 B/op 1 allocs/op
BenchmarkDatasetOperations/DatasetUpdate-24 18423 65515 ns/op 1285 B/op 36 allocs/op
PASS
ok github.com/jfraeys/fetch_ml/tests/benchmarks 28.641s</pre>
</body>
</html>

View file

@ -1,21 +0,0 @@
goos: darwin
goarch: arm64
pkg: github.com/jfraeys/fetch_ml/tests/benchmarks
cpu: Apple M2 Ultra
BenchmarkAPIServerCreateJobSimple-24 28129 45677 ns/op 13532 B/op 98 allocs/op
BenchmarkMetricsCollection-24 59903404 19.48 ns/op 0 B/op 0 allocs/op
BenchmarkConcurrentRequests/Concurrency-1-24 10000 105817 ns/op 26610 B/op 162 allocs/op
BenchmarkConcurrentRequests/Concurrency-5-24 8654 545199 ns/op 18285 B/op 132 allocs/op
BenchmarkConcurrentRequests/Concurrency-10-24 904 1350040 ns/op 6043 B/op 71 allocs/op
BenchmarkConcurrentRequests/Concurrency-25-24 924 1332526 ns/op 6228 B/op 72 allocs/op
BenchmarkConcurrentRequests/Concurrency-50-24 952 1339113 ns/op 6724 B/op 75 allocs/op
BenchmarkMLExperimentExecution/SmallExperiment-24 45 26355390 ns/op 657327 B/op 12351 allocs/op
BenchmarkMLExperimentExecution/MediumExperiment-24 92 12034762 ns/op 794688 B/op 6254 allocs/op
BenchmarkMLExperimentExecution/LargeExperiment-24 351 3763459 ns/op 1129490 B/op 1375 allocs/op
BenchmarkMLExperimentExecution/ConcurrentExperiments-24 37 30668937 ns/op 1112708 B/op 12626 allocs/op
BenchmarkMLExperimentExecution/ExperimentMetrics-24 56 26930825 ns/op 615839 B/op 17885 allocs/op
BenchmarkDatasetOperations/DatasetCreation-24 12364 102242 ns/op 2935 B/op 75 allocs/op
BenchmarkDatasetOperations/DatasetRetrieval-24 23809105 50.50 ns/op 16 B/op 1 allocs/op
BenchmarkDatasetOperations/DatasetUpdate-24 18494 65564 ns/op 1285 B/op 36 allocs/op
PASS
ok github.com/jfraeys/fetch_ml/tests/benchmarks 27.143s

View file

@ -1,15 +0,0 @@
BenchmarkAPIServerCreateJobSimple-24 28129 45677 ns/op 13532 B/op 98 allocs/op
BenchmarkMetricsCollection-24 59903404 19.48 ns/op 0 B/op 0 allocs/op
BenchmarkConcurrentRequests/Concurrency-1-24 10000 105817 ns/op 26610 B/op 162 allocs/op
BenchmarkConcurrentRequests/Concurrency-5-24 8654 545199 ns/op 18285 B/op 132 allocs/op
BenchmarkConcurrentRequests/Concurrency-10-24 904 1350040 ns/op 6043 B/op 71 allocs/op
BenchmarkConcurrentRequests/Concurrency-25-24 924 1332526 ns/op 6228 B/op 72 allocs/op
BenchmarkConcurrentRequests/Concurrency-50-24 952 1339113 ns/op 6724 B/op 75 allocs/op
BenchmarkMLExperimentExecution/SmallExperiment-24 45 26355390 ns/op 657327 B/op 12351 allocs/op
BenchmarkMLExperimentExecution/MediumExperiment-24 92 12034762 ns/op 794688 B/op 6254 allocs/op
BenchmarkMLExperimentExecution/LargeExperiment-24 351 3763459 ns/op 1129490 B/op 1375 allocs/op
BenchmarkMLExperimentExecution/ConcurrentExperiments-24 37 30668937 ns/op 1112708 B/op 12626 allocs/op
BenchmarkMLExperimentExecution/ExperimentMetrics-24 56 26930825 ns/op 615839 B/op 17885 allocs/op
BenchmarkDatasetOperations/DatasetCreation-24 12364 102242 ns/op 2935 B/op 75 allocs/op
BenchmarkDatasetOperations/DatasetRetrieval-24 23809105 50.50 ns/op 16 B/op 1 allocs/op
BenchmarkDatasetOperations/DatasetUpdate-24 18494 65564 ns/op 1285 B/op 36 allocs/op

View file

@ -1,51 +0,0 @@
# HELP benchmark_time_per_op Time per operation in nanoseconds
# TYPE benchmark_time_per_op gauge
# HELP benchmark_memory_per_op Memory per operation in bytes
# TYPE benchmark_memory_per_op gauge
# HELP benchmark_allocs_per_op Allocations per operation
# TYPE benchmark_allocs_per_op gauge
benchmark_time_per_op{benchmark="BenchmarkAPIServerCreateJobSimple"} 45677
benchmark_memory_per_op{benchmark="BenchmarkAPIServerCreateJobSimple"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkAPIServerCreateJobSimple"} 13532
benchmark_time_per_op{benchmark="BenchmarkMetricsCollection"} 19.48
benchmark_memory_per_op{benchmark="BenchmarkMetricsCollection"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMetricsCollection"} 0
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_1"} 105817
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_1"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_1"} 26610
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_5"} 545199
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_5"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_5"} 18285
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_10"} 1350040
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_10"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_10"} 6043
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_25"} 1332526
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_25"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_25"} 6228
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_50"} 1339113
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_50"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_50"} 6724
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_SmallExperiment"} 26355390
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_SmallExperiment"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_SmallExperiment"} 657327
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_MediumExperiment"} 12034762
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_MediumExperiment"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_MediumExperiment"} 794688
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_LargeExperiment"} 3763459
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_LargeExperiment"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_LargeExperiment"} 1129490
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_ConcurrentExperiments"} 30668937
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_ConcurrentExperiments"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_ConcurrentExperiments"} 1112708
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_ExperimentMetrics"} 26930825
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_ExperimentMetrics"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_ExperimentMetrics"} 615839
benchmark_time_per_op{benchmark="BenchmarkDatasetOperations_DatasetCreation"} 102242
benchmark_memory_per_op{benchmark="BenchmarkDatasetOperations_DatasetCreation"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkDatasetOperations_DatasetCreation"} 2935
benchmark_time_per_op{benchmark="BenchmarkDatasetOperations_DatasetRetrieval"} 50.50
benchmark_memory_per_op{benchmark="BenchmarkDatasetOperations_DatasetRetrieval"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkDatasetOperations_DatasetRetrieval"} 16
benchmark_time_per_op{benchmark="BenchmarkDatasetOperations_DatasetUpdate"} 65564
benchmark_memory_per_op{benchmark="BenchmarkDatasetOperations_DatasetUpdate"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkDatasetOperations_DatasetUpdate"} 1285

View file

@ -1,141 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Benchmark Report - 20251204_231459</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
.metric { font-family: monospace; }
</style>
</head>
<body>
<h1>Benchmark Report</h1>
<p><strong>Run ID:</strong> 20251204_231459</p>
<p><strong>Date:</strong> Thu Dec 4 18:15:28 EST 2025</p>
<h2>Results</h2>
<table>
<tr>
<th>Benchmark</th>
<th>Time (ns/op)</th>
<th>Memory (B/op)</th>
<th>Allocs (allocs/op)</th>
</tr>
<tr>
<td class="metric">BenchmarkAPIServerCreateJobSimple-24</td>
<td>45677</td>
<td>ns/op</td>
<td>13532</td>
</tr>
<tr>
<td class="metric">BenchmarkMetricsCollection-24</td>
<td>19.48</td>
<td>ns/op</td>
<td>0</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-1-24</td>
<td>105817</td>
<td>ns/op</td>
<td>26610</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-5-24</td>
<td>545199</td>
<td>ns/op</td>
<td>18285</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-10-24</td>
<td>1350040</td>
<td>ns/op</td>
<td>6043</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-25-24</td>
<td>1332526</td>
<td>ns/op</td>
<td>6228</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-50-24</td>
<td>1339113</td>
<td>ns/op</td>
<td>6724</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/SmallExperiment-24</td>
<td>26355390</td>
<td>ns/op</td>
<td>657327</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/MediumExperiment-24</td>
<td>12034762</td>
<td>ns/op</td>
<td>794688</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/LargeExperiment-24</td>
<td>3763459</td>
<td>ns/op</td>
<td>1129490</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/ConcurrentExperiments-24</td>
<td>30668937</td>
<td>ns/op</td>
<td>1112708</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/ExperimentMetrics-24</td>
<td>26930825</td>
<td>ns/op</td>
<td>615839</td>
</tr>
<tr>
<td class="metric">BenchmarkDatasetOperations/DatasetCreation-24</td>
<td>102242</td>
<td>ns/op</td>
<td>2935</td>
</tr>
<tr>
<td class="metric">BenchmarkDatasetOperations/DatasetRetrieval-24</td>
<td>50.50</td>
<td>ns/op</td>
<td>16</td>
</tr>
<tr>
<td class="metric">BenchmarkDatasetOperations/DatasetUpdate-24</td>
<td>65564</td>
<td>ns/op</td>
<td>1285</td>
</tr>
</table>
<h2>Raw Output</h2>
<pre>goos: darwin
goarch: arm64
pkg: github.com/jfraeys/fetch_ml/tests/benchmarks
cpu: Apple M2 Ultra
BenchmarkAPIServerCreateJobSimple-24 28129 45677 ns/op 13532 B/op 98 allocs/op
BenchmarkMetricsCollection-24 59903404 19.48 ns/op 0 B/op 0 allocs/op
BenchmarkConcurrentRequests/Concurrency-1-24 10000 105817 ns/op 26610 B/op 162 allocs/op
BenchmarkConcurrentRequests/Concurrency-5-24 8654 545199 ns/op 18285 B/op 132 allocs/op
BenchmarkConcurrentRequests/Concurrency-10-24 904 1350040 ns/op 6043 B/op 71 allocs/op
BenchmarkConcurrentRequests/Concurrency-25-24 924 1332526 ns/op 6228 B/op 72 allocs/op
BenchmarkConcurrentRequests/Concurrency-50-24 952 1339113 ns/op 6724 B/op 75 allocs/op
BenchmarkMLExperimentExecution/SmallExperiment-24 45 26355390 ns/op 657327 B/op 12351 allocs/op
BenchmarkMLExperimentExecution/MediumExperiment-24 92 12034762 ns/op 794688 B/op 6254 allocs/op
BenchmarkMLExperimentExecution/LargeExperiment-24 351 3763459 ns/op 1129490 B/op 1375 allocs/op
BenchmarkMLExperimentExecution/ConcurrentExperiments-24 37 30668937 ns/op 1112708 B/op 12626 allocs/op
BenchmarkMLExperimentExecution/ExperimentMetrics-24 56 26930825 ns/op 615839 B/op 17885 allocs/op
BenchmarkDatasetOperations/DatasetCreation-24 12364 102242 ns/op 2935 B/op 75 allocs/op
BenchmarkDatasetOperations/DatasetRetrieval-24 23809105 50.50 ns/op 16 B/op 1 allocs/op
BenchmarkDatasetOperations/DatasetUpdate-24 18494 65564 ns/op 1285 B/op 36 allocs/op
PASS
ok github.com/jfraeys/fetch_ml/tests/benchmarks 27.143s</pre>
</body>
</html>

View file

@ -1,21 +0,0 @@
goos: darwin
goarch: arm64
pkg: github.com/jfraeys/fetch_ml/tests/benchmarks
cpu: Apple M2 Ultra
BenchmarkAPIServerCreateJobSimple-24 26200 44608 ns/op 13514 B/op 98 allocs/op
BenchmarkMetricsCollection-24 58956229 19.88 ns/op 0 B/op 0 allocs/op
BenchmarkConcurrentRequests/Concurrency-1-24 10000 108040 ns/op 26965 B/op 163 allocs/op
BenchmarkConcurrentRequests/Concurrency-5-24 10000 657977 ns/op 16658 B/op 123 allocs/op
BenchmarkConcurrentRequests/Concurrency-10-24 843 1342869 ns/op 6078 B/op 71 allocs/op
BenchmarkConcurrentRequests/Concurrency-25-24 902 1356405 ns/op 6555 B/op 73 allocs/op
BenchmarkConcurrentRequests/Concurrency-50-24 907 1341416 ns/op 6429 B/op 74 allocs/op
BenchmarkMLExperimentExecution/SmallExperiment-24 39 26197300 ns/op 657330 B/op 12352 allocs/op
BenchmarkMLExperimentExecution/MediumExperiment-24 100 12172133 ns/op 794610 B/op 6253 allocs/op
BenchmarkMLExperimentExecution/LargeExperiment-24 348 3686597 ns/op 1129573 B/op 1375 allocs/op
BenchmarkMLExperimentExecution/ConcurrentExperiments-24 33 33467878 ns/op 1111544 B/op 12626 allocs/op
BenchmarkMLExperimentExecution/ExperimentMetrics-24 57 27330560 ns/op 615815 B/op 17885 allocs/op
BenchmarkDatasetOperations/DatasetCreation-24 12249 97669 ns/op 2934 B/op 75 allocs/op
BenchmarkDatasetOperations/DatasetRetrieval-24 24545986 50.01 ns/op 16 B/op 1 allocs/op
BenchmarkDatasetOperations/DatasetUpdate-24 18687 65891 ns/op 1285 B/op 36 allocs/op
PASS
ok github.com/jfraeys/fetch_ml/tests/benchmarks 28.732s

View file

@ -1,15 +0,0 @@
BenchmarkAPIServerCreateJobSimple-24 26200 44608 ns/op 13514 B/op 98 allocs/op
BenchmarkMetricsCollection-24 58956229 19.88 ns/op 0 B/op 0 allocs/op
BenchmarkConcurrentRequests/Concurrency-1-24 10000 108040 ns/op 26965 B/op 163 allocs/op
BenchmarkConcurrentRequests/Concurrency-5-24 10000 657977 ns/op 16658 B/op 123 allocs/op
BenchmarkConcurrentRequests/Concurrency-10-24 843 1342869 ns/op 6078 B/op 71 allocs/op
BenchmarkConcurrentRequests/Concurrency-25-24 902 1356405 ns/op 6555 B/op 73 allocs/op
BenchmarkConcurrentRequests/Concurrency-50-24 907 1341416 ns/op 6429 B/op 74 allocs/op
BenchmarkMLExperimentExecution/SmallExperiment-24 39 26197300 ns/op 657330 B/op 12352 allocs/op
BenchmarkMLExperimentExecution/MediumExperiment-24 100 12172133 ns/op 794610 B/op 6253 allocs/op
BenchmarkMLExperimentExecution/LargeExperiment-24 348 3686597 ns/op 1129573 B/op 1375 allocs/op
BenchmarkMLExperimentExecution/ConcurrentExperiments-24 33 33467878 ns/op 1111544 B/op 12626 allocs/op
BenchmarkMLExperimentExecution/ExperimentMetrics-24 57 27330560 ns/op 615815 B/op 17885 allocs/op
BenchmarkDatasetOperations/DatasetCreation-24 12249 97669 ns/op 2934 B/op 75 allocs/op
BenchmarkDatasetOperations/DatasetRetrieval-24 24545986 50.01 ns/op 16 B/op 1 allocs/op
BenchmarkDatasetOperations/DatasetUpdate-24 18687 65891 ns/op 1285 B/op 36 allocs/op

View file

@ -1,51 +0,0 @@
# HELP benchmark_time_per_op Time per operation in nanoseconds
# TYPE benchmark_time_per_op gauge
# HELP benchmark_memory_per_op Memory per operation in bytes
# TYPE benchmark_memory_per_op gauge
# HELP benchmark_allocs_per_op Allocations per operation
# TYPE benchmark_allocs_per_op gauge
benchmark_time_per_op{benchmark="BenchmarkAPIServerCreateJobSimple"} 44608
benchmark_memory_per_op{benchmark="BenchmarkAPIServerCreateJobSimple"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkAPIServerCreateJobSimple"} 13514
benchmark_time_per_op{benchmark="BenchmarkMetricsCollection"} 19.88
benchmark_memory_per_op{benchmark="BenchmarkMetricsCollection"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMetricsCollection"} 0
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_1"} 108040
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_1"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_1"} 26965
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_5"} 657977
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_5"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_5"} 16658
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_10"} 1342869
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_10"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_10"} 6078
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_25"} 1356405
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_25"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_25"} 6555
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_50"} 1341416
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_50"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_50"} 6429
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_SmallExperiment"} 26197300
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_SmallExperiment"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_SmallExperiment"} 657330
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_MediumExperiment"} 12172133
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_MediumExperiment"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_MediumExperiment"} 794610
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_LargeExperiment"} 3686597
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_LargeExperiment"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_LargeExperiment"} 1129573
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_ConcurrentExperiments"} 33467878
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_ConcurrentExperiments"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_ConcurrentExperiments"} 1111544
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_ExperimentMetrics"} 27330560
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_ExperimentMetrics"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_ExperimentMetrics"} 615815
benchmark_time_per_op{benchmark="BenchmarkDatasetOperations_DatasetCreation"} 97669
benchmark_memory_per_op{benchmark="BenchmarkDatasetOperations_DatasetCreation"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkDatasetOperations_DatasetCreation"} 2934
benchmark_time_per_op{benchmark="BenchmarkDatasetOperations_DatasetRetrieval"} 50.01
benchmark_memory_per_op{benchmark="BenchmarkDatasetOperations_DatasetRetrieval"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkDatasetOperations_DatasetRetrieval"} 16
benchmark_time_per_op{benchmark="BenchmarkDatasetOperations_DatasetUpdate"} 65891
benchmark_memory_per_op{benchmark="BenchmarkDatasetOperations_DatasetUpdate"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkDatasetOperations_DatasetUpdate"} 1285

View file

@ -1,21 +0,0 @@
goos: darwin
goarch: arm64
pkg: github.com/jfraeys/fetch_ml/tests/benchmarks
cpu: Apple M2 Ultra
BenchmarkAPIServerCreateJobSimple-24 27906 45877 ns/op 13520 B/op 98 allocs/op
BenchmarkMetricsCollection-24 59125434 19.91 ns/op 0 B/op 0 allocs/op
BenchmarkConcurrentRequests/Concurrency-1-24 10000 106563 ns/op 26651 B/op 162 allocs/op
BenchmarkConcurrentRequests/Concurrency-5-24 9916 580762 ns/op 16774 B/op 124 allocs/op
BenchmarkConcurrentRequests/Concurrency-10-24 902 1361628 ns/op 6050 B/op 71 allocs/op
BenchmarkConcurrentRequests/Concurrency-25-24 913 1341660 ns/op 6645 B/op 73 allocs/op
BenchmarkConcurrentRequests/Concurrency-50-24 902 1339436 ns/op 6130 B/op 73 allocs/op
BenchmarkMLExperimentExecution/SmallExperiment-24 42 26144707 ns/op 657412 B/op 12352 allocs/op
BenchmarkMLExperimentExecution/MediumExperiment-24 99 12045172 ns/op 794945 B/op 6255 allocs/op
BenchmarkMLExperimentExecution/LargeExperiment-24 350 3655986 ns/op 1129633 B/op 1375 allocs/op
BenchmarkMLExperimentExecution/ConcurrentExperiments-24 30 37392029 ns/op 1111096 B/op 12623 allocs/op
BenchmarkMLExperimentExecution/ExperimentMetrics-24 52 26943573 ns/op 615802 B/op 17883 allocs/op
BenchmarkDatasetOperations/DatasetCreation-24 12285 101658 ns/op 2934 B/op 75 allocs/op
BenchmarkDatasetOperations/DatasetRetrieval-24 24175867 50.53 ns/op 16 B/op 1 allocs/op
BenchmarkDatasetOperations/DatasetUpdate-24 18481 65640 ns/op 1285 B/op 36 allocs/op
PASS
ok github.com/jfraeys/fetch_ml/tests/benchmarks 29.026s

View file

@ -1,15 +0,0 @@
BenchmarkAPIServerCreateJobSimple-24 27906 45877 ns/op 13520 B/op 98 allocs/op
BenchmarkMetricsCollection-24 59125434 19.91 ns/op 0 B/op 0 allocs/op
BenchmarkConcurrentRequests/Concurrency-1-24 10000 106563 ns/op 26651 B/op 162 allocs/op
BenchmarkConcurrentRequests/Concurrency-5-24 9916 580762 ns/op 16774 B/op 124 allocs/op
BenchmarkConcurrentRequests/Concurrency-10-24 902 1361628 ns/op 6050 B/op 71 allocs/op
BenchmarkConcurrentRequests/Concurrency-25-24 913 1341660 ns/op 6645 B/op 73 allocs/op
BenchmarkConcurrentRequests/Concurrency-50-24 902 1339436 ns/op 6130 B/op 73 allocs/op
BenchmarkMLExperimentExecution/SmallExperiment-24 42 26144707 ns/op 657412 B/op 12352 allocs/op
BenchmarkMLExperimentExecution/MediumExperiment-24 99 12045172 ns/op 794945 B/op 6255 allocs/op
BenchmarkMLExperimentExecution/LargeExperiment-24 350 3655986 ns/op 1129633 B/op 1375 allocs/op
BenchmarkMLExperimentExecution/ConcurrentExperiments-24 30 37392029 ns/op 1111096 B/op 12623 allocs/op
BenchmarkMLExperimentExecution/ExperimentMetrics-24 52 26943573 ns/op 615802 B/op 17883 allocs/op
BenchmarkDatasetOperations/DatasetCreation-24 12285 101658 ns/op 2934 B/op 75 allocs/op
BenchmarkDatasetOperations/DatasetRetrieval-24 24175867 50.53 ns/op 16 B/op 1 allocs/op
BenchmarkDatasetOperations/DatasetUpdate-24 18481 65640 ns/op 1285 B/op 36 allocs/op

View file

@ -1,51 +0,0 @@
# HELP benchmark_time_per_op Time per operation in nanoseconds
# TYPE benchmark_time_per_op gauge
# HELP benchmark_memory_per_op Memory per operation in bytes
# TYPE benchmark_memory_per_op gauge
# HELP benchmark_allocs_per_op Allocations per operation
# TYPE benchmark_allocs_per_op gauge
benchmark_time_per_op{benchmark="BenchmarkAPIServerCreateJobSimple"} 45877
benchmark_memory_per_op{benchmark="BenchmarkAPIServerCreateJobSimple"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkAPIServerCreateJobSimple"} 13520
benchmark_time_per_op{benchmark="BenchmarkMetricsCollection"} 19.91
benchmark_memory_per_op{benchmark="BenchmarkMetricsCollection"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMetricsCollection"} 0
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_1"} 106563
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_1"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_1"} 26651
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_5"} 580762
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_5"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_5"} 16774
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_10"} 1361628
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_10"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_10"} 6050
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_25"} 1341660
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_25"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_25"} 6645
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_50"} 1339436
benchmark_memory_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_50"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_50"} 6130
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_SmallExperiment"} 26144707
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_SmallExperiment"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_SmallExperiment"} 657412
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_MediumExperiment"} 12045172
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_MediumExperiment"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_MediumExperiment"} 794945
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_LargeExperiment"} 3655986
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_LargeExperiment"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_LargeExperiment"} 1129633
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_ConcurrentExperiments"} 37392029
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_ConcurrentExperiments"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_ConcurrentExperiments"} 1111096
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_ExperimentMetrics"} 26943573
benchmark_memory_per_op{benchmark="BenchmarkMLExperimentExecution_ExperimentMetrics"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_ExperimentMetrics"} 615802
benchmark_time_per_op{benchmark="BenchmarkDatasetOperations_DatasetCreation"} 101658
benchmark_memory_per_op{benchmark="BenchmarkDatasetOperations_DatasetCreation"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkDatasetOperations_DatasetCreation"} 2934
benchmark_time_per_op{benchmark="BenchmarkDatasetOperations_DatasetRetrieval"} 50.53
benchmark_memory_per_op{benchmark="BenchmarkDatasetOperations_DatasetRetrieval"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkDatasetOperations_DatasetRetrieval"} 16
benchmark_time_per_op{benchmark="BenchmarkDatasetOperations_DatasetUpdate"} 65640
benchmark_memory_per_op{benchmark="BenchmarkDatasetOperations_DatasetUpdate"} ns/op
benchmark_allocs_per_op{benchmark="BenchmarkDatasetOperations_DatasetUpdate"} 1285

View file

@ -1,141 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Benchmark Report - 20251204_231712</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
.metric { font-family: monospace; }
</style>
</head>
<body>
<h1>Benchmark Report</h1>
<p><strong>Run ID:</strong> 20251204_231712</p>
<p><strong>Date:</strong> Thu Dec 4 18:17:42 EST 2025</p>
<h2>Results</h2>
<table>
<tr>
<th>Benchmark</th>
<th>Time (ns/op)</th>
<th>Memory (B/op)</th>
<th>Allocs (allocs/op)</th>
</tr>
<tr>
<td class="metric">BenchmarkAPIServerCreateJobSimple-24</td>
<td>45877</td>
<td>ns/op</td>
<td>13520</td>
</tr>
<tr>
<td class="metric">BenchmarkMetricsCollection-24</td>
<td>19.91</td>
<td>ns/op</td>
<td>0</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-1-24</td>
<td>106563</td>
<td>ns/op</td>
<td>26651</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-5-24</td>
<td>580762</td>
<td>ns/op</td>
<td>16774</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-10-24</td>
<td>1361628</td>
<td>ns/op</td>
<td>6050</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-25-24</td>
<td>1341660</td>
<td>ns/op</td>
<td>6645</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-50-24</td>
<td>1339436</td>
<td>ns/op</td>
<td>6130</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/SmallExperiment-24</td>
<td>26144707</td>
<td>ns/op</td>
<td>657412</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/MediumExperiment-24</td>
<td>12045172</td>
<td>ns/op</td>
<td>794945</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/LargeExperiment-24</td>
<td>3655986</td>
<td>ns/op</td>
<td>1129633</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/ConcurrentExperiments-24</td>
<td>37392029</td>
<td>ns/op</td>
<td>1111096</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/ExperimentMetrics-24</td>
<td>26943573</td>
<td>ns/op</td>
<td>615802</td>
</tr>
<tr>
<td class="metric">BenchmarkDatasetOperations/DatasetCreation-24</td>
<td>101658</td>
<td>ns/op</td>
<td>2934</td>
</tr>
<tr>
<td class="metric">BenchmarkDatasetOperations/DatasetRetrieval-24</td>
<td>50.53</td>
<td>ns/op</td>
<td>16</td>
</tr>
<tr>
<td class="metric">BenchmarkDatasetOperations/DatasetUpdate-24</td>
<td>65640</td>
<td>ns/op</td>
<td>1285</td>
</tr>
</table>
<h2>Raw Output</h2>
<pre>goos: darwin
goarch: arm64
pkg: github.com/jfraeys/fetch_ml/tests/benchmarks
cpu: Apple M2 Ultra
BenchmarkAPIServerCreateJobSimple-24 27906 45877 ns/op 13520 B/op 98 allocs/op
BenchmarkMetricsCollection-24 59125434 19.91 ns/op 0 B/op 0 allocs/op
BenchmarkConcurrentRequests/Concurrency-1-24 10000 106563 ns/op 26651 B/op 162 allocs/op
BenchmarkConcurrentRequests/Concurrency-5-24 9916 580762 ns/op 16774 B/op 124 allocs/op
BenchmarkConcurrentRequests/Concurrency-10-24 902 1361628 ns/op 6050 B/op 71 allocs/op
BenchmarkConcurrentRequests/Concurrency-25-24 913 1341660 ns/op 6645 B/op 73 allocs/op
BenchmarkConcurrentRequests/Concurrency-50-24 902 1339436 ns/op 6130 B/op 73 allocs/op
BenchmarkMLExperimentExecution/SmallExperiment-24 42 26144707 ns/op 657412 B/op 12352 allocs/op
BenchmarkMLExperimentExecution/MediumExperiment-24 99 12045172 ns/op 794945 B/op 6255 allocs/op
BenchmarkMLExperimentExecution/LargeExperiment-24 350 3655986 ns/op 1129633 B/op 1375 allocs/op
BenchmarkMLExperimentExecution/ConcurrentExperiments-24 30 37392029 ns/op 1111096 B/op 12623 allocs/op
BenchmarkMLExperimentExecution/ExperimentMetrics-24 52 26943573 ns/op 615802 B/op 17883 allocs/op
BenchmarkDatasetOperations/DatasetCreation-24 12285 101658 ns/op 2934 B/op 75 allocs/op
BenchmarkDatasetOperations/DatasetRetrieval-24 24175867 50.53 ns/op 16 B/op 1 allocs/op
BenchmarkDatasetOperations/DatasetUpdate-24 18481 65640 ns/op 1285 B/op 36 allocs/op
PASS
ok github.com/jfraeys/fetch_ml/tests/benchmarks 29.026s</pre>
</body>
</html>

View file

@ -1,21 +0,0 @@
goos: darwin
goarch: arm64
pkg: github.com/jfraeys/fetch_ml/tests/benchmarks
cpu: Apple M2 Ultra
BenchmarkAPIServerCreateJobSimple-24 27950 44615 ns/op 13510 B/op 98 allocs/op
BenchmarkMetricsCollection-24 61569640 19.81 ns/op 0 B/op 0 allocs/op
BenchmarkConcurrentRequests/Concurrency-1-24 10000 104975 ns/op 26775 B/op 162 allocs/op
BenchmarkConcurrentRequests/Concurrency-5-24 9744 616978 ns/op 16959 B/op 125 allocs/op
BenchmarkConcurrentRequests/Concurrency-10-24 921 1342897 ns/op 6123 B/op 71 allocs/op
BenchmarkConcurrentRequests/Concurrency-25-24 916 1355236 ns/op 6286 B/op 73 allocs/op
BenchmarkConcurrentRequests/Concurrency-50-24 930 1326230 ns/op 6997 B/op 76 allocs/op
BenchmarkMLExperimentExecution/SmallExperiment-24 44 26734717 ns/op 657047 B/op 12351 allocs/op
BenchmarkMLExperimentExecution/MediumExperiment-24 93 12165317 ns/op 794462 B/op 6254 allocs/op
BenchmarkMLExperimentExecution/LargeExperiment-24 364 3637957 ns/op 1128897 B/op 1374 allocs/op
BenchmarkMLExperimentExecution/ConcurrentExperiments-24 33 31061085 ns/op 1114816 B/op 12631 allocs/op
BenchmarkMLExperimentExecution/ExperimentMetrics-24 54 26862161 ns/op 615718 B/op 17884 allocs/op
BenchmarkDatasetOperations/DatasetCreation-24 12193 102081 ns/op 2933 B/op 75 allocs/op
BenchmarkDatasetOperations/DatasetRetrieval-24 19180039 52.64 ns/op 16 B/op 1 allocs/op
BenchmarkDatasetOperations/DatasetUpdate-24 18472 65401 ns/op 1285 B/op 36 allocs/op
PASS
ok github.com/jfraeys/fetch_ml/tests/benchmarks 27.261s

View file

@ -1,15 +0,0 @@
BenchmarkAPIServerCreateJobSimple-24 27950 44615 ns/op 13510 B/op 98 allocs/op
BenchmarkMetricsCollection-24 61569640 19.81 ns/op 0 B/op 0 allocs/op
BenchmarkConcurrentRequests/Concurrency-1-24 10000 104975 ns/op 26775 B/op 162 allocs/op
BenchmarkConcurrentRequests/Concurrency-5-24 9744 616978 ns/op 16959 B/op 125 allocs/op
BenchmarkConcurrentRequests/Concurrency-10-24 921 1342897 ns/op 6123 B/op 71 allocs/op
BenchmarkConcurrentRequests/Concurrency-25-24 916 1355236 ns/op 6286 B/op 73 allocs/op
BenchmarkConcurrentRequests/Concurrency-50-24 930 1326230 ns/op 6997 B/op 76 allocs/op
BenchmarkMLExperimentExecution/SmallExperiment-24 44 26734717 ns/op 657047 B/op 12351 allocs/op
BenchmarkMLExperimentExecution/MediumExperiment-24 93 12165317 ns/op 794462 B/op 6254 allocs/op
BenchmarkMLExperimentExecution/LargeExperiment-24 364 3637957 ns/op 1128897 B/op 1374 allocs/op
BenchmarkMLExperimentExecution/ConcurrentExperiments-24 33 31061085 ns/op 1114816 B/op 12631 allocs/op
BenchmarkMLExperimentExecution/ExperimentMetrics-24 54 26862161 ns/op 615718 B/op 17884 allocs/op
BenchmarkDatasetOperations/DatasetCreation-24 12193 102081 ns/op 2933 B/op 75 allocs/op
BenchmarkDatasetOperations/DatasetRetrieval-24 19180039 52.64 ns/op 16 B/op 1 allocs/op
BenchmarkDatasetOperations/DatasetUpdate-24 18472 65401 ns/op 1285 B/op 36 allocs/op

View file

@ -1,36 +0,0 @@
# HELP benchmark_time_per_op Time per operation in nanoseconds
# TYPE benchmark_time_per_op gauge
# HELP benchmark_memory_per_op Memory per operation in bytes
# TYPE benchmark_memory_per_op gauge
# HELP benchmark_allocs_per_op Allocations per operation
# TYPE benchmark_allocs_per_op gauge
benchmark_time_per_op{benchmark="BenchmarkAPIServerCreateJobSimple"} 44615
benchmark_allocs_per_op{benchmark="BenchmarkAPIServerCreateJobSimple"} 13510
benchmark_time_per_op{benchmark="BenchmarkMetricsCollection"} 19.81
benchmark_allocs_per_op{benchmark="BenchmarkMetricsCollection"} 0
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_1"} 104975
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_1"} 26775
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_5"} 616978
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_5"} 16959
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_10"} 1342897
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_10"} 6123
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_25"} 1355236
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_25"} 6286
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_50"} 1326230
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_50"} 6997
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_SmallExperiment"} 26734717
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_SmallExperiment"} 657047
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_MediumExperiment"} 12165317
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_MediumExperiment"} 794462
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_LargeExperiment"} 3637957
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_LargeExperiment"} 1128897
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_ConcurrentExperiments"} 31061085
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_ConcurrentExperiments"} 1114816
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_ExperimentMetrics"} 26862161
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_ExperimentMetrics"} 615718
benchmark_time_per_op{benchmark="BenchmarkDatasetOperations_DatasetCreation"} 102081
benchmark_allocs_per_op{benchmark="BenchmarkDatasetOperations_DatasetCreation"} 2933
benchmark_time_per_op{benchmark="BenchmarkDatasetOperations_DatasetRetrieval"} 52.64
benchmark_allocs_per_op{benchmark="BenchmarkDatasetOperations_DatasetRetrieval"} 16
benchmark_time_per_op{benchmark="BenchmarkDatasetOperations_DatasetUpdate"} 65401
benchmark_allocs_per_op{benchmark="BenchmarkDatasetOperations_DatasetUpdate"} 1285

View file

@ -1,141 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Benchmark Report - 20251204_231833</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
.metric { font-family: monospace; }
</style>
</head>
<body>
<h1>Benchmark Report</h1>
<p><strong>Run ID:</strong> 20251204_231833</p>
<p><strong>Date:</strong> Thu Dec 4 18:19:01 EST 2025</p>
<h2>Results</h2>
<table>
<tr>
<th>Benchmark</th>
<th>Time (ns/op)</th>
<th>Memory (B/op)</th>
<th>Allocs (allocs/op)</th>
</tr>
<tr>
<td class="metric">BenchmarkAPIServerCreateJobSimple-24</td>
<td>44615</td>
<td>ns/op</td>
<td>13510</td>
</tr>
<tr>
<td class="metric">BenchmarkMetricsCollection-24</td>
<td>19.81</td>
<td>ns/op</td>
<td>0</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-1-24</td>
<td>104975</td>
<td>ns/op</td>
<td>26775</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-5-24</td>
<td>616978</td>
<td>ns/op</td>
<td>16959</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-10-24</td>
<td>1342897</td>
<td>ns/op</td>
<td>6123</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-25-24</td>
<td>1355236</td>
<td>ns/op</td>
<td>6286</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-50-24</td>
<td>1326230</td>
<td>ns/op</td>
<td>6997</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/SmallExperiment-24</td>
<td>26734717</td>
<td>ns/op</td>
<td>657047</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/MediumExperiment-24</td>
<td>12165317</td>
<td>ns/op</td>
<td>794462</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/LargeExperiment-24</td>
<td>3637957</td>
<td>ns/op</td>
<td>1128897</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/ConcurrentExperiments-24</td>
<td>31061085</td>
<td>ns/op</td>
<td>1114816</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/ExperimentMetrics-24</td>
<td>26862161</td>
<td>ns/op</td>
<td>615718</td>
</tr>
<tr>
<td class="metric">BenchmarkDatasetOperations/DatasetCreation-24</td>
<td>102081</td>
<td>ns/op</td>
<td>2933</td>
</tr>
<tr>
<td class="metric">BenchmarkDatasetOperations/DatasetRetrieval-24</td>
<td>52.64</td>
<td>ns/op</td>
<td>16</td>
</tr>
<tr>
<td class="metric">BenchmarkDatasetOperations/DatasetUpdate-24</td>
<td>65401</td>
<td>ns/op</td>
<td>1285</td>
</tr>
</table>
<h2>Raw Output</h2>
<pre>goos: darwin
goarch: arm64
pkg: github.com/jfraeys/fetch_ml/tests/benchmarks
cpu: Apple M2 Ultra
BenchmarkAPIServerCreateJobSimple-24 27950 44615 ns/op 13510 B/op 98 allocs/op
BenchmarkMetricsCollection-24 61569640 19.81 ns/op 0 B/op 0 allocs/op
BenchmarkConcurrentRequests/Concurrency-1-24 10000 104975 ns/op 26775 B/op 162 allocs/op
BenchmarkConcurrentRequests/Concurrency-5-24 9744 616978 ns/op 16959 B/op 125 allocs/op
BenchmarkConcurrentRequests/Concurrency-10-24 921 1342897 ns/op 6123 B/op 71 allocs/op
BenchmarkConcurrentRequests/Concurrency-25-24 916 1355236 ns/op 6286 B/op 73 allocs/op
BenchmarkConcurrentRequests/Concurrency-50-24 930 1326230 ns/op 6997 B/op 76 allocs/op
BenchmarkMLExperimentExecution/SmallExperiment-24 44 26734717 ns/op 657047 B/op 12351 allocs/op
BenchmarkMLExperimentExecution/MediumExperiment-24 93 12165317 ns/op 794462 B/op 6254 allocs/op
BenchmarkMLExperimentExecution/LargeExperiment-24 364 3637957 ns/op 1128897 B/op 1374 allocs/op
BenchmarkMLExperimentExecution/ConcurrentExperiments-24 33 31061085 ns/op 1114816 B/op 12631 allocs/op
BenchmarkMLExperimentExecution/ExperimentMetrics-24 54 26862161 ns/op 615718 B/op 17884 allocs/op
BenchmarkDatasetOperations/DatasetCreation-24 12193 102081 ns/op 2933 B/op 75 allocs/op
BenchmarkDatasetOperations/DatasetRetrieval-24 19180039 52.64 ns/op 16 B/op 1 allocs/op
BenchmarkDatasetOperations/DatasetUpdate-24 18472 65401 ns/op 1285 B/op 36 allocs/op
PASS
ok github.com/jfraeys/fetch_ml/tests/benchmarks 27.261s</pre>
</body>
</html>

View file

@ -1,21 +0,0 @@
goos: darwin
goarch: arm64
pkg: github.com/jfraeys/fetch_ml/tests/benchmarks
cpu: Apple M2 Ultra
BenchmarkAPIServerCreateJobSimple-24 27296 43913 ns/op 13526 B/op 98 allocs/op
BenchmarkMetricsCollection-24 61271120 19.34 ns/op 0 B/op 0 allocs/op
BenchmarkConcurrentRequests/Concurrency-1-24 10000 105096 ns/op 26660 B/op 162 allocs/op
BenchmarkConcurrentRequests/Concurrency-5-24 10000 646391 ns/op 16738 B/op 124 allocs/op
BenchmarkConcurrentRequests/Concurrency-10-24 872 1369525 ns/op 6036 B/op 71 allocs/op
BenchmarkConcurrentRequests/Concurrency-25-24 904 1394439 ns/op 6546 B/op 73 allocs/op
BenchmarkConcurrentRequests/Concurrency-50-24 889 1373567 ns/op 6347 B/op 74 allocs/op
BenchmarkMLExperimentExecution/SmallExperiment-24 40 26726470 ns/op 657367 B/op 12352 allocs/op
BenchmarkMLExperimentExecution/MediumExperiment-24 97 12430890 ns/op 794823 B/op 6254 allocs/op
BenchmarkMLExperimentExecution/LargeExperiment-24 346 3863256 ns/op 1129599 B/op 1375 allocs/op
BenchmarkMLExperimentExecution/ConcurrentExperiments-24 36 32534372 ns/op 1115220 B/op 12637 allocs/op
BenchmarkMLExperimentExecution/ExperimentMetrics-24 52 26962389 ns/op 615818 B/op 17884 allocs/op
BenchmarkDatasetOperations/DatasetCreation-24 12075 100813 ns/op 2933 B/op 75 allocs/op
BenchmarkDatasetOperations/DatasetRetrieval-24 23898721 50.28 ns/op 16 B/op 1 allocs/op
BenchmarkDatasetOperations/DatasetUpdate-24 18692 63463 ns/op 1285 B/op 36 allocs/op
PASS
ok github.com/jfraeys/fetch_ml/tests/benchmarks 28.692s

View file

@ -1,15 +0,0 @@
BenchmarkAPIServerCreateJobSimple-24 27296 43913 ns/op 13526 B/op 98 allocs/op
BenchmarkMetricsCollection-24 61271120 19.34 ns/op 0 B/op 0 allocs/op
BenchmarkConcurrentRequests/Concurrency-1-24 10000 105096 ns/op 26660 B/op 162 allocs/op
BenchmarkConcurrentRequests/Concurrency-5-24 10000 646391 ns/op 16738 B/op 124 allocs/op
BenchmarkConcurrentRequests/Concurrency-10-24 872 1369525 ns/op 6036 B/op 71 allocs/op
BenchmarkConcurrentRequests/Concurrency-25-24 904 1394439 ns/op 6546 B/op 73 allocs/op
BenchmarkConcurrentRequests/Concurrency-50-24 889 1373567 ns/op 6347 B/op 74 allocs/op
BenchmarkMLExperimentExecution/SmallExperiment-24 40 26726470 ns/op 657367 B/op 12352 allocs/op
BenchmarkMLExperimentExecution/MediumExperiment-24 97 12430890 ns/op 794823 B/op 6254 allocs/op
BenchmarkMLExperimentExecution/LargeExperiment-24 346 3863256 ns/op 1129599 B/op 1375 allocs/op
BenchmarkMLExperimentExecution/ConcurrentExperiments-24 36 32534372 ns/op 1115220 B/op 12637 allocs/op
BenchmarkMLExperimentExecution/ExperimentMetrics-24 52 26962389 ns/op 615818 B/op 17884 allocs/op
BenchmarkDatasetOperations/DatasetCreation-24 12075 100813 ns/op 2933 B/op 75 allocs/op
BenchmarkDatasetOperations/DatasetRetrieval-24 23898721 50.28 ns/op 16 B/op 1 allocs/op
BenchmarkDatasetOperations/DatasetUpdate-24 18692 63463 ns/op 1285 B/op 36 allocs/op

View file

@ -1,36 +0,0 @@
# HELP benchmark_time_per_op Time per operation in nanoseconds
# TYPE benchmark_time_per_op gauge
# HELP benchmark_memory_per_op Memory per operation in bytes
# TYPE benchmark_memory_per_op gauge
# HELP benchmark_allocs_per_op Allocations per operation
# TYPE benchmark_allocs_per_op gauge
benchmark_time_per_op{benchmark="BenchmarkAPIServerCreateJobSimple"} 43913
benchmark_allocs_per_op{benchmark="BenchmarkAPIServerCreateJobSimple"} 13526
benchmark_time_per_op{benchmark="BenchmarkMetricsCollection"} 19.34
benchmark_allocs_per_op{benchmark="BenchmarkMetricsCollection"} 0
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_1"} 105096
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_1"} 26660
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_5"} 646391
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_5"} 16738
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_10"} 1369525
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_10"} 6036
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_25"} 1394439
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_25"} 6546
benchmark_time_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_50"} 1373567
benchmark_allocs_per_op{benchmark="BenchmarkConcurrentRequests_Concurrency_50"} 6347
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_SmallExperiment"} 26726470
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_SmallExperiment"} 657367
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_MediumExperiment"} 12430890
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_MediumExperiment"} 794823
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_LargeExperiment"} 3863256
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_LargeExperiment"} 1129599
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_ConcurrentExperiments"} 32534372
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_ConcurrentExperiments"} 1115220
benchmark_time_per_op{benchmark="BenchmarkMLExperimentExecution_ExperimentMetrics"} 26962389
benchmark_allocs_per_op{benchmark="BenchmarkMLExperimentExecution_ExperimentMetrics"} 615818
benchmark_time_per_op{benchmark="BenchmarkDatasetOperations_DatasetCreation"} 100813
benchmark_allocs_per_op{benchmark="BenchmarkDatasetOperations_DatasetCreation"} 2933
benchmark_time_per_op{benchmark="BenchmarkDatasetOperations_DatasetRetrieval"} 50.28
benchmark_allocs_per_op{benchmark="BenchmarkDatasetOperations_DatasetRetrieval"} 16
benchmark_time_per_op{benchmark="BenchmarkDatasetOperations_DatasetUpdate"} 63463
benchmark_allocs_per_op{benchmark="BenchmarkDatasetOperations_DatasetUpdate"} 1285

View file

@ -1,141 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Benchmark Report - 20251204_232656</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
.metric { font-family: monospace; }
</style>
</head>
<body>
<h1>Benchmark Report</h1>
<p><strong>Run ID:</strong> 20251204_232656</p>
<p><strong>Date:</strong> Thu Dec 4 18:27:25 EST 2025</p>
<h2>Results</h2>
<table>
<tr>
<th>Benchmark</th>
<th>Time (ns/op)</th>
<th>Memory (B/op)</th>
<th>Allocs (allocs/op)</th>
</tr>
<tr>
<td class="metric">BenchmarkAPIServerCreateJobSimple-24</td>
<td>43913</td>
<td>ns/op</td>
<td>13526</td>
</tr>
<tr>
<td class="metric">BenchmarkMetricsCollection-24</td>
<td>19.34</td>
<td>ns/op</td>
<td>0</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-1-24</td>
<td>105096</td>
<td>ns/op</td>
<td>26660</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-5-24</td>
<td>646391</td>
<td>ns/op</td>
<td>16738</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-10-24</td>
<td>1369525</td>
<td>ns/op</td>
<td>6036</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-25-24</td>
<td>1394439</td>
<td>ns/op</td>
<td>6546</td>
</tr>
<tr>
<td class="metric">BenchmarkConcurrentRequests/Concurrency-50-24</td>
<td>1373567</td>
<td>ns/op</td>
<td>6347</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/SmallExperiment-24</td>
<td>26726470</td>
<td>ns/op</td>
<td>657367</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/MediumExperiment-24</td>
<td>12430890</td>
<td>ns/op</td>
<td>794823</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/LargeExperiment-24</td>
<td>3863256</td>
<td>ns/op</td>
<td>1129599</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/ConcurrentExperiments-24</td>
<td>32534372</td>
<td>ns/op</td>
<td>1115220</td>
</tr>
<tr>
<td class="metric">BenchmarkMLExperimentExecution/ExperimentMetrics-24</td>
<td>26962389</td>
<td>ns/op</td>
<td>615818</td>
</tr>
<tr>
<td class="metric">BenchmarkDatasetOperations/DatasetCreation-24</td>
<td>100813</td>
<td>ns/op</td>
<td>2933</td>
</tr>
<tr>
<td class="metric">BenchmarkDatasetOperations/DatasetRetrieval-24</td>
<td>50.28</td>
<td>ns/op</td>
<td>16</td>
</tr>
<tr>
<td class="metric">BenchmarkDatasetOperations/DatasetUpdate-24</td>
<td>63463</td>
<td>ns/op</td>
<td>1285</td>
</tr>
</table>
<h2>Raw Output</h2>
<pre>goos: darwin
goarch: arm64
pkg: github.com/jfraeys/fetch_ml/tests/benchmarks
cpu: Apple M2 Ultra
BenchmarkAPIServerCreateJobSimple-24 27296 43913 ns/op 13526 B/op 98 allocs/op
BenchmarkMetricsCollection-24 61271120 19.34 ns/op 0 B/op 0 allocs/op
BenchmarkConcurrentRequests/Concurrency-1-24 10000 105096 ns/op 26660 B/op 162 allocs/op
BenchmarkConcurrentRequests/Concurrency-5-24 10000 646391 ns/op 16738 B/op 124 allocs/op
BenchmarkConcurrentRequests/Concurrency-10-24 872 1369525 ns/op 6036 B/op 71 allocs/op
BenchmarkConcurrentRequests/Concurrency-25-24 904 1394439 ns/op 6546 B/op 73 allocs/op
BenchmarkConcurrentRequests/Concurrency-50-24 889 1373567 ns/op 6347 B/op 74 allocs/op
BenchmarkMLExperimentExecution/SmallExperiment-24 40 26726470 ns/op 657367 B/op 12352 allocs/op
BenchmarkMLExperimentExecution/MediumExperiment-24 97 12430890 ns/op 794823 B/op 6254 allocs/op
BenchmarkMLExperimentExecution/LargeExperiment-24 346 3863256 ns/op 1129599 B/op 1375 allocs/op
BenchmarkMLExperimentExecution/ConcurrentExperiments-24 36 32534372 ns/op 1115220 B/op 12637 allocs/op
BenchmarkMLExperimentExecution/ExperimentMetrics-24 52 26962389 ns/op 615818 B/op 17884 allocs/op
BenchmarkDatasetOperations/DatasetCreation-24 12075 100813 ns/op 2933 B/op 75 allocs/op
BenchmarkDatasetOperations/DatasetRetrieval-24 23898721 50.28 ns/op 16 B/op 1 allocs/op
BenchmarkDatasetOperations/DatasetUpdate-24 18692 63463 ns/op 1285 B/op 36 allocs/op
PASS
ok github.com/jfraeys/fetch_ml/tests/benchmarks 28.692s</pre>
</body>
</html>

307
.pylintrc
View file

@ -1,307 +0,0 @@
[MASTER]
# Google Python Style Guide Configuration
# Based on https://google.github.io/styleguide/pyguide.html
# Files or directories to be skipped over when performing analysis.
ignore=
.git,
__pycache__,
*.pyc,
.pytest_cache,
.mypy_cache,
.venv,
venv,
# ML experiment code - exclude from style checks
podman/workspace,
workspace,
tests/fixtures/examples,
tests/fixtures/podman,
results,
data,
logs,
secrets,
.agent
# Regular expression matching files that should be skipped entirely.
ignore-patterns=
^\.#,
^setup\.py$,
^conftest\.py$
# Add files or directories matching the regex patterns to the ignore list.
ignore-paths=
# Files or directories to be added to the list of ignored regular expressions.
ignore-paths=
# Pickle collected data for later comparisons.
persistent=yes
# Use multiple processes to speed up Pylint.
jobs=1
# List of plugins (as comma separated values of python module names) to load,
# usually to register additional checkers.
load-plugins=
# Load all enabled extensions.
load-all-plugins=no
# Control the amount of potential astroid warnings (0, 1 or 2).
unsafe-load-any-extension=no
# A comma-separated list of package or module names from where C extensions may
# be loaded. Extensions are loading into the active Python interpreter and may
# run arbitrary code.
extension-pkg-whitelist=
[MESSAGES CONTROL]
# Only show warnings with the listed confidence levels.
confidence=
# Disable the message, report, category or checker with the given id(s).
disable=
# Google Style Guide allows some of these
missing-module-docstring,
missing-function-docstring,
too-many-locals,
too-many-arguments,
too-many-instance-attributes,
too-many-public-methods,
too-few-public-methods,
too-many-lines,
too-many-statements,
too-many-branches,
too-many-nested-blocks,
# Not relevant for ML projects
invalid-name,
C0114, # missing-module-docstring
C0115, # missing-class-docstring
C0116, # missing-function-docstring
R0903, # too-few-public-methods
R0902, # too-many-instance-attributes
R0913, # too-many-arguments
R0914, # too-many-locals
R0915, # too-many-statements
R0912, # too-many-branches
R0911, # too-many-return-statements
W0613, # unused-argument (common in callbacks)
# Enable the message, report, category or checker with the given id(s).
enable=
[REPORTS]
# Set the output format.
output-format=text
# Tells whether to display a full report or only the messages.
reports=no
# Python expression which determines if a message should not be displayed.
evaluation=
# Template used to display messages.
msg-template=
[BASIC]
# Good variable names which should always be accepted, separated by a comma.
good-names=
i,j,k,ex,Run,_
# Bad variable names which should always be refused.
bad-names=
foo,bar,baz,toto,tutu,tata
# List of builtins function names that should not be used.
bad-functions=
# Regular expression for correct variable names.
variable-rgx=^[a-z_][a-z0-9_]{2,30}$
# Regular expression for correct constant names.
const-rgx=^(_?[A-Z][A-Z0-9_]{2,30}|__.*__)$
# Regular expression for correct function names.
function-rgx=^(?:(?P<camel_case>_?[A-Z][a-zA-Z0-9]{2,30})|(?P<snake_case>_?[a-z][a-z0-9_]{2,30}))$
# Regular expression for correct class names.
class-rgx=^_?[A-Z][a-zA-Z0-9]{2,30}$
# Regular expression for correct attribute names.
attr-rgx=^_{0,2}[a-z][a-z0-9_]{2,30}$
# Regular expression for correct argument names.
argument-rgx=^[a-z][a-z0-9_]{2,30}$
# Regular expression for correct method resolution order names.
method-rgx=^_{0,2}[a-z][a-z0-9_]{2,30}$
# Regular expression which should only match function or class names that do
# not require a docstring.
no-docstring-rgx=^_
# Minimum line length for functions/classes that require docstrings.
docstring-min-length=-1
[TYPECHECK]
# List of decorators that produce context managers.
contextmanager-decorators=contextlib.contextmanager
# List of member names which should be excluded from the access member check.
exclude-members=
# List of qualified names (objects) which require a disable protection.
generated-members=
[MISCELLANEOUS]
# List of note tags to take in consideration.
notes=
[VARIABLES]
# Tells whether we should check for unused imports.
init-import=no
# A regular expression matching the name of dummy variables.
dummy-variable-rgx=^_|dummy
# List of variable names that should not be used.
additional-builtins=
# List of variables which are ignored for the undefined-variable check.
ignored-classes=
# List of members which are skipped from the member access check.
ignored-modules=
# List of deprecated symbols which should not be used.
deprecated-modules=
# List of symbols that can be safely accessed.
allowed-redefined-builtins=
[FORMAT]
# Maximum number of characters on a single line.
max-line-length=80
# Regexp for a line that is allowed to be longer than the limit.
long-line-regexp=^[\t ]*(# )?<?https?://\S+>?$
# Allow the body of an if to be on the same line as the test.
single-line-if-stmt=no
# List of optional parameters for which we don't want to call a linting
# function.
single-line-class-stmt=no
# Maximum number of characters on a single line, when there are no multiline
# strings.
max-line-length-sigil-fallback=80
[SIMILARITIES]
# Minimum lines number of a similarity.
min-similarity-lines=4
# Ignore comments when computing similarities.
ignore-comments=yes
# Ignore docstrings when computing similarities.
ignore-docstrings=yes
# Ignore imports when computing similarities.
ignore-imports=no
[LOGGING]
# Logging modules to check that the string formatting arguments are in
# logging function parameter format.
logging-modules=logging
[DESIGN]
# Maximum number of arguments for function / method.
max-args=5
# Argument names that match this regular expression are ignored.
ignored-argument-names=
# Maximum number of locals for function / method body.
max-locals=15
# Maximum number of return statements for function / method body.
max-returns=6
# Maximum number of branch for function / method body.
max-branches=12
# Maximum number of statements in function / method body.
max-statements=50
# Maximum number of parents for a class.
max-parents=7
# Maximum number of attributes for a class.
max-attributes=7
# Minimum number of public methods for a class.
min-public-methods=2
# Maximum number of public methods for a class.
max-public-methods=20
# Maximum number of boolean expressions in a if statement.
max-bool-expr=5
[CLASSES]
# List of method names used to declare (i.e. assign) instance attributes.
defining-attr-methods=__init__,__new__,setUp
# List of valid names for the first argument in a class method.
valid-classmethod-first-arg=cls
# List of valid names for the first argument in a metaclass class method.
valid-metaclass-classmethod-first-arg=mcls
# List of member names which should be excluded from the access member check.
exclude-protected=_asdict,_fields,_replace,_source,_make
[IMPORTS]
# Deprecated modules which should not be used.
deprecated-modules=
# Create a graph of every module's dependencies.
import-graph=
# Create a graph of every (i.e. internal and external) dependencies in the
# current file.
ext-import-graph=
# Create a graph of external dependencies in the current file.
int-import-graph=
# Force import order to match a specific order.
import-order-style=google
# Add files or directories to the blacklist.
ignore-on-import-order=no
# List of modules that can be imported at any level from the specified
# application modules.
known-third-party=
# Analyse import fallback blocks.
analyse-fallback-blocks=no
[EXCEPTIONS]
# Exceptions that will emit a warning when being caught.
overgeneral-exceptions=Exception,BaseException
# Exceptions that will emit a warning when being returned.
return-exceptions=no
# Exceptions that will emit a warning when being instantiated.
nonstandard-exceptions=no
[REFACTORING]
# Maximum number of nested blocks.
max-nested-blocks=5
# Complete name of the function that returns the YAPF version.
yapf-version=

View file

@ -0,0 +1,90 @@
---
trigger: model_decision
description: When a new feature is added, this prompt needs to be run
---
# Development Guidelines
## Code Quality Standards
### Testing Requirements
- MANDATORY: Every new feature MUST include corresponding tests
- Write tests BEFORE implementing complex features (TDD approach)
- Test coverage for new code should be >80%
- Include both unit tests and integration tests where applicable
- Test edge cases, error paths, and boundary conditions
### Documentation Standards
- Update relevant documentation IN THE SAME COMMIT as code changes
- Documentation locations:
- README.md: User-facing features, installation, quick start
- CHANGELOG.md: All changes, following Keep a Changelog format
- Code comments: Complex logic, non-obvious decisions, API contracts
- Function/struct docs: Public APIs must have doc comments
- Use concrete examples in documentation
- Keep docs concise but complete
### Code Organization
- CRITICAL: Clean up as you go - no orphaned files or dead code
- Remove commented-out code blocks (use git history instead)
- Delete unused imports, functions, and variables immediately
- Consolidate duplicate code into reusable functions
- Move TODO items from loose files into:
- Code comments with `// TODO(context):` for implementation tasks
- GitHub Issues for larger features
- NEVER create standalone .md files for tracking
### When Making Changes
For EVERY significant change, complete ALL of these:
1. Write/update tests
2. Update documentation (README, CHANGELOG, code comments)
3. Update build scripts if dependencies/build process changed
4. Remove any temporary/debug code added during development
5. Delete unused files created during exploration
6. Verify no dead code remains (unused functions, imports, variables)
### Cleanup Checklist (Run BEFORE committing)
- [ ] Removed all debug print statements
- [ ] Deleted temporary test files
- [ ] Removed commented-out code
- [ ] Cleaned up unused imports
- [ ] Deleted exploratory/spike code
- [ ] Consolidated duplicate logic
- [ ] Removed obsolete scripts/configs
### Communication Style
- Report what you've done: "Added feature X with tests in test/x_test.go"
- Highlight what needs attention: "WARNING: Manual testing needed for edge case Y"
- Ask questions directly: "Should we support Z? Trade-offs are..."
- NEVER say "I'll track this in a markdown file" - use code comments or tell me directly
### Script/Build System Updates
- Update Makefile/build.zig when adding new targets or commands
- Modify CI/CD configs (.github/workflows) if build/test process changes
- Update package.json/Cargo.toml/go.mod when dependencies change
- Document new scripts in README under "Development" section
## Anti-Patterns to AVOID
- Creating notes.md, todo.md, tasks.md, ideas.md files
- Leaving commented-out code "for reference"
- Keeping old implementation files with .old or .backup suffixes
- Adding features without tests
- Updating code without updating docs
- Leaving TODO comments without context or assignee
## Preferred Patterns
- Inline TODO comments: `// TODO(user): Add caching layer for better performance`
- Self-documenting code with clear names
- Tests that serve as usage examples
- Incremental, complete commits (code + tests + docs)
- Direct communication about tasks and priorities
## Definition of Done
A task is complete ONLY when:
1. Code is written and working
2. Tests are written and passing
3. Documentation is updated
4. All temporary/dead code is removed
5. Build scripts are updated if needed
6. Changes are committed with clear message

238
AGENTS.md Normal file
View file

@ -0,0 +1,238 @@
# AGENTS.md - Coding Agent Guidelines
This document provides essential information for agentic coding assistants working with the FetchML codebase.
## Build Commands
### Go Components
```bash
# Build all Go components
make build
# Build for development (faster compilation)
make dev
# Build for production (optimized)
make prod
# Cross-platform build for Linux/macOS/Windows
make cross-platform
```
### Zig CLI
```bash
# Build CLI with release-small optimization
cd cli && make all
# Build for development
cd cli && make dev
# Build for production
cd cli && make prod
# Alternative using zig build system
cd cli && zig build
```
## Test Commands
### Running Tests
```bash
# Run all tests
make test
# Run unit tests only
make test-unit
# Run integration tests only
make test-integration
# Run end-to-end tests only
make test-e2e
# Run with coverage report
make test-coverage
# Run a single test
go test -v ./path/to/package -run TestName
# Run tests with race detector
go test -race ./path/to/package/...
```
### Performance Testing
```bash
# Run performance benchmarks
make benchmark
# Run load testing suite
make load-test
# Run chaos engineering tests
make chaos-test
# Run complete technical excellence suite
make tech-excellence
```
## Lint Commands
```bash
# Run all linters and formatters
make lint
# Run Go linters
golangci-lint run
# Run Go formatters
gofmt -w ./cmd ./internal ./tests
# Run Go vet
go vet ./...
# Format Zig code
cd cli && zig fmt .
# Validate YAML configs against schema
make configlint
make worker-configlint
```
## Code Style Guidelines
### Go Code Style
1. **Formatting**:
- Use `gofmt` for formatting
- Line length: 100 characters (configured in .golangci.yml)
- Use `goimports` for import organization
2. **Naming Conventions**:
- Use camelCase for variables and functions
- Use PascalCase for exported identifiers
- Use clear, descriptive names
- Acronyms should be all caps (e.g., HTTP, URL)
3. **Imports**:
- Group imports in order: standard library, third-party, internal
- Use meaningful import aliases when needed
- Remove unused imports
4. **Error Handling**:
- Always handle errors explicitly
- Use `errors.Is` and `errors.As` for error checking
- Wrap errors with context using `fmt.Errorf("context: %w", err)`
5. **Documentation**:
- All exported functions, types, and variables must have doc comments
- Comments should explain "why" not just "what"
- Use godoc formatting conventions
### Zig Code Style
1. **Formatting**:
- Use built-in Zig formatter (`zig fmt`)
- Consistent indentation with 4 spaces
2. **Naming Conventions**:
- Use camelCase for variables and functions
- Use PascalCase for types
- Use snake_case for file names
3. **Error Handling**:
- Use Zig's error union types (`!T`)
- Handle errors with `try`, `catch`, or `if` expressions
- Return errors early when appropriate
### Python Code Style
1. **Formatting**:
- Use Black formatter with 80 character line limit
- Use isort for import organization (Google style)
2. **Type Checking**:
- Use mypy with strict settings
- All functions should have type annotations
3. **Testing**:
- Use pytest framework
- Follow naming conventions: `test_*` for functions, `*_test.py` for files
### YAML/Configuration Style
1. **Formatting**:
- Use yamllint for validation
- Consistent indentation with 2 spaces
- No trailing whitespace
2. **Validation**:
- All configs must pass schema validation
- Use `make configlint` and `make worker-configlint`
## Development Guidelines
### Testing Requirements (from .windsurf/rules/test-new-features.md)
- Every new feature MUST include corresponding tests
- Test coverage for new code should be >80%
- Include both unit tests and integration tests where applicable
- Test edge cases, error paths, and boundary conditions
### Code Organization
- Clean up as you go - no orphaned files or dead code
- Remove commented-out code blocks
- Delete unused imports, functions, and variables immediately
- Consolidate duplicate code into reusable functions
### Documentation Standards
- Update relevant documentation IN THE SAME COMMIT as code changes
- Documentation locations:
- README.md: User-facing features, installation, quick start
- CHANGELOG.md: All changes, following Keep a Changelog format
- Code comments: Complex logic, non-obvious decisions, API contracts
- Function/struct docs: Public APIs must have doc comments
### Commit Message Convention
Use conventional commits:
- `feat:` for new features
- `fix:` for bug fixes
- `docs:` for documentation changes
- `style:` for formatting changes
- `refactor:` for code refactoring
- `test:` for adding/updating tests
- `chore:` for maintenance tasks
## Project Structure
- `cmd/` - Main applications
- `internal/` - Internal packages
- `cli/` - Zig command-line interface
- `tests/` - Test files organized by type
- `configs/` - Configuration files and schemas
- `docs/` - Documentation
- `scripts/` - Utility scripts
## Dependencies
- Go 1.25+
- Zig 0.15+
- Python 3.11+ (for some tools)
- Redis (for integration tests)
- Docker/Podman (for container-based tests)
## Useful Make Targets
```bash
# Development workflow
make dev-start # Start development environment
make test # Run all tests
make lint # Run linters
make ci-local # Run local CI dry-run
# Documentation
make docs # Start documentation server
make docs-build # Build static documentation
# Cleanup
make clean # Remove build artifacts
make clean-docs # Remove documentation artifacts
```

BIN
cpu.prof Normal file

Binary file not shown.

BIN
mem.prof Normal file

Binary file not shown.

View file

@ -5,6 +5,8 @@ import (
"context"
"encoding/json"
"fmt"
"io"
"net"
"net/http"
"net/http/httptest"
"strings"
@ -15,11 +17,32 @@ import (
"github.com/prometheus/client_golang/prometheus"
)
func newBenchmarkHTTPClient() *http.Client {
transport := &http.Transport{
Proxy: http.ProxyFromEnvironment,
DialContext: (&net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
}).DialContext,
ForceAttemptHTTP2: true,
MaxIdleConns: 256,
MaxIdleConnsPerHost: 256,
IdleConnTimeout: 90 * time.Second,
TLSHandshakeTimeout: 10 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
}
return &http.Client{
Timeout: 30 * time.Second,
Transport: transport,
}
}
// BenchmarkAPIServerCreateJob tests job creation performance
func BenchmarkAPIServerCreateJob(b *testing.B) {
server := setupTestAPIServer(b)
defer server.Close()
client := &http.Client{Timeout: 30 * time.Second}
client := newBenchmarkHTTPClient()
b.ResetTimer()
b.ReportAllocs()
benchmarkCreateJob(b, server.URL, client)
@ -80,6 +103,7 @@ func BenchmarkAPIServerCreateJobSimple(b *testing.B) {
// Skip this iteration if server isn't ready
continue
}
_, _ = io.Copy(io.Discard, resp.Body)
_ = resp.Body.Close()
}
@ -126,7 +150,7 @@ func BenchmarkConcurrentRequests(b *testing.B) {
server := setupTestAPIServer(b)
defer server.Close()
client := &http.Client{Timeout: 30 * time.Second}
client := newBenchmarkHTTPClient()
b.ResetTimer()
@ -148,6 +172,7 @@ func benchmarkConcurrentRequests(b *testing.B, baseURL string, client *http.Clie
resp, err := client.Do(req)
if err == nil && resp != nil {
_, _ = io.Copy(io.Discard, resp.Body)
_ = resp.Body.Close()
}
i++
@ -212,6 +237,7 @@ func benchmarkCreateJob(b *testing.B, baseURL string, client *http.Client) {
if err != nil {
b.Fatalf("Request failed: %v", err)
}
_, _ = io.Copy(io.Discard, resp.Body)
_ = resp.Body.Close()
}
}
@ -229,6 +255,7 @@ func benchmarkListJobs(b *testing.B, baseURL string, client *http.Client) {
if err != nil {
b.Fatalf("Request failed: %v", err)
}
_, _ = io.Copy(io.Discard, resp.Body)
_ = resp.Body.Close()
}
}
@ -237,7 +264,7 @@ func benchmarkListJobs(b *testing.B, baseURL string, client *http.Client) {
func BenchmarkAPIServerListJobs(b *testing.B) {
server := setupTestAPIServer(b)
defer server.Close()
client := &http.Client{Timeout: 30 * time.Second}
client := newBenchmarkHTTPClient()
b.ResetTimer()
b.ReportAllocs()
benchmarkListJobs(b, server.URL, client)

View file

@ -332,6 +332,22 @@ func runLoadTestScenario(t *testing.T, baseURL, scenarioName string, config Load
runner := NewLoadTestRunner(baseURL, config)
results := runner.Run()
if minThroughput, maxErrorRate, maxP99Latency, ok := loadTestCriteria(scenarioName); ok {
t.Logf("Load test criteria for %s:", scenarioName)
t.Logf(" Min throughput: %.2f RPS", minThroughput)
t.Logf(" Max error rate: %.2f%%", maxErrorRate)
t.Logf(" Max P99 latency: %.0fms", maxP99Latency)
}
t.Logf("Load test config for %s:", scenarioName)
t.Logf(" Concurrency: %d", config.Concurrency)
t.Logf(" Duration: %v", config.Duration)
t.Logf(" Ramp up: %v", config.RampUpTime)
t.Logf(" Target RPS: %d", config.RequestsPerSec)
t.Logf(" Payload size: %d", config.PayloadSize)
t.Logf(" Method: %s", config.Method)
t.Logf(" Endpoint: %s", config.Endpoint)
t.Logf("Load test results for %s:", scenarioName)
t.Logf(" Total requests: %d", results.TotalRequests)
t.Logf(" Successful: %d", results.SuccessfulReqs)
@ -348,6 +364,19 @@ func runLoadTestScenario(t *testing.T, baseURL, scenarioName string, config Load
validateLoadTestResults(t, scenarioName, results)
}
func loadTestCriteria(scenarioName string) (minThroughput, maxErrorRate, maxP99Latency float64, ok bool) {
switch scenarioName {
case "LightLoad":
return 40.0, 1.0, 100.0, true
case "MediumLoad":
return 180.0, 2.0, 200.0, true
case "HeavyLoad":
return 450.0, 5.0, 500.0, true
default:
return 0, 0, 0, false
}
}
// Run executes the load test
func (ltr *LoadTestRunner) Run() *LoadTestResults {
start := time.Now()
@ -684,24 +713,8 @@ func runStressTest(t *testing.T, baseURL string) {
// validateLoadTestResults checks if results meet performance criteria
func validateLoadTestResults(t *testing.T, scenarioName string, results *LoadTestResults) {
// Define performance thresholds based on scenario type
var maxErrorRate, maxP99Latency float64
var minThroughput float64
switch scenarioName {
case "LightLoad":
maxErrorRate = 1.0
maxP99Latency = 100.0 // 100ms
minThroughput = 40.0
case "MediumLoad":
maxErrorRate = 2.0
maxP99Latency = 200.0 // 200ms
minThroughput = 180.0
case "HeavyLoad":
maxErrorRate = 5.0
maxP99Latency = 500.0 // 500ms
minThroughput = 450.0
default:
minThroughput, maxErrorRate, maxP99Latency, ok := loadTestCriteria(scenarioName)
if !ok {
return
}

View file

@ -12,11 +12,12 @@ import (
)
type fakeJupyterManager struct {
startFn func(ctx context.Context, req *jupyter.StartRequest) (*jupyter.JupyterService, error)
stopFn func(ctx context.Context, serviceID string) error
removeFn func(ctx context.Context, serviceID string, purge bool) error
restoreFn func(ctx context.Context, name string) (string, error)
listFn func() []*jupyter.JupyterService
startFn func(ctx context.Context, req *jupyter.StartRequest) (*jupyter.JupyterService, error)
stopFn func(ctx context.Context, serviceID string) error
removeFn func(ctx context.Context, serviceID string, purge bool) error
restoreFn func(ctx context.Context, name string) (string, error)
listFn func() []*jupyter.JupyterService
listPkgsFn func(ctx context.Context, serviceName string) ([]jupyter.InstalledPackage, error)
}
func (f *fakeJupyterManager) StartService(ctx context.Context, req *jupyter.StartRequest) (*jupyter.JupyterService, error) {
@ -39,6 +40,13 @@ func (f *fakeJupyterManager) ListServices() []*jupyter.JupyterService {
return f.listFn()
}
func (f *fakeJupyterManager) ListInstalledPackages(ctx context.Context, serviceName string) ([]jupyter.InstalledPackage, error) {
if f.listPkgsFn == nil {
return nil, nil
}
return f.listPkgsFn(ctx, serviceName)
}
type jupyterOutput struct {
Type string `json:"type"`
Service *struct {
@ -47,6 +55,15 @@ type jupyterOutput struct {
} `json:"service"`
}
type jupyterPackagesOutput struct {
Type string `json:"type"`
Packages []struct {
Name string `json:"name"`
Version string `json:"version"`
Source string `json:"source"`
} `json:"packages"`
}
func TestRunJupyterTaskStartSuccess(t *testing.T) {
w := worker.NewTestWorkerWithJupyter(&worker.Config{}, nil, &fakeJupyterManager{
startFn: func(_ context.Context, req *jupyter.StartRequest) (*jupyter.JupyterService, error) {
@ -55,10 +72,11 @@ func TestRunJupyterTaskStartSuccess(t *testing.T) {
}
return &jupyter.JupyterService{Name: req.Name, URL: "http://127.0.0.1:8888"}, nil
},
stopFn: func(context.Context, string) error { return nil },
removeFn: func(context.Context, string, bool) error { return nil },
restoreFn: func(context.Context, string) (string, error) { return "", nil },
listFn: func() []*jupyter.JupyterService { return nil },
stopFn: func(context.Context, string) error { return nil },
removeFn: func(context.Context, string, bool) error { return nil },
restoreFn: func(context.Context, string) (string, error) { return "", nil },
listFn: func() []*jupyter.JupyterService { return nil },
listPkgsFn: func(context.Context, string) ([]jupyter.InstalledPackage, error) { return nil, nil },
})
task := &queue.Task{JobName: "jupyter-my-workspace", Metadata: map[string]string{
@ -85,11 +103,12 @@ func TestRunJupyterTaskStartSuccess(t *testing.T) {
func TestRunJupyterTaskStopFailure(t *testing.T) {
w := worker.NewTestWorkerWithJupyter(&worker.Config{}, nil, &fakeJupyterManager{
startFn: func(context.Context, *jupyter.StartRequest) (*jupyter.JupyterService, error) { return nil, nil },
stopFn: func(context.Context, string) error { return errors.New("stop failed") },
removeFn: func(context.Context, string, bool) error { return nil },
restoreFn: func(context.Context, string) (string, error) { return "", nil },
listFn: func() []*jupyter.JupyterService { return nil },
startFn: func(context.Context, *jupyter.StartRequest) (*jupyter.JupyterService, error) { return nil, nil },
stopFn: func(context.Context, string) error { return errors.New("stop failed") },
removeFn: func(context.Context, string, bool) error { return nil },
restoreFn: func(context.Context, string) (string, error) { return "", nil },
listFn: func() []*jupyter.JupyterService { return nil },
listPkgsFn: func(context.Context, string) ([]jupyter.InstalledPackage, error) { return nil, nil },
})
task := &queue.Task{JobName: "jupyter-my-workspace", Metadata: map[string]string{
@ -102,3 +121,41 @@ func TestRunJupyterTaskStopFailure(t *testing.T) {
t.Fatalf("expected error")
}
}
func TestRunJupyterTaskListPackagesSuccess(t *testing.T) {
w := worker.NewTestWorkerWithJupyter(&worker.Config{}, nil, &fakeJupyterManager{
startFn: func(context.Context, *jupyter.StartRequest) (*jupyter.JupyterService, error) { return nil, nil },
stopFn: func(context.Context, string) error { return nil },
removeFn: func(context.Context, string, bool) error { return nil },
restoreFn: func(context.Context, string) (string, error) { return "", nil },
listFn: func() []*jupyter.JupyterService { return nil },
listPkgsFn: func(_ context.Context, serviceName string) ([]jupyter.InstalledPackage, error) {
if serviceName != "my-workspace" {
return nil, errors.New("bad service")
}
return []jupyter.InstalledPackage{
{Name: "numpy", Version: "1.26.0", Source: "pip"},
{Name: "pandas", Version: "2.1.0", Source: "conda"},
}, nil
},
})
task := &queue.Task{JobName: "jupyter-packages-my-workspace", Metadata: map[string]string{
"task_type": "jupyter",
"jupyter_action": "list_packages",
"jupyter_name": "my-workspace",
}}
out, err := w.RunJupyterTask(context.Background(), task)
if err != nil {
t.Fatalf("expected nil error, got %v", err)
}
var decoded jupyterPackagesOutput
if err := json.Unmarshal(out, &decoded); err != nil {
t.Fatalf("expected valid JSON, got %v", err)
}
if len(decoded.Packages) != 2 {
t.Fatalf("expected 2 packages, got %d", len(decoded.Packages))
}
}