

Also from Kynth Studios


Also from Kynth Studios


Also from Kynth Studios
1# CLAUDE.md - DotCMS JMeter Performance Testing23This file provides AI-specific guidance for Claude Code when working with the DotCMS performance testing infrastructure in the `test-jmeter` module.45**📖 Primary Documentation**: See [README.md](README.md) for comprehensive user documentation, command reference, and configuration details.67## AI Assistant Quick Reference89### Module Purpose10Dual-purpose performance testing infrastructure:111. **Traditional JMeter Tests**: Maven-based tests for core dotCMS functionality122. **Analytics Performance Testing**: Advanced Kubernetes/Helm-based analytics testing1314### Key Architecture Points15- **Unified Entry Point**: `./dotcms-analytics-test.sh` (1,394 lines)16- **Helm-based Deployment**: Production-ready Kubernetes infrastructure17- **Built-in Analysis**: Comprehensive performance reporting and bottleneck detection18- **No Infrastructure Knowledge Required**: Abstracts Kubernetes/Helm complexity1920## Key Components2122### Primary Script23- **`dotcms-analytics-test.sh`** - Main entry point (1162+ lines)24 - Replaces multiple legacy scripts25 - Handles setup, testing, analysis, and cleanup26 - No Kubernetes/Helm knowledge required for developers2728### Infrastructure29- **`helm-chart/jmeter-performance/`** - Kubernetes deployment configuration30- **`jmx-tests/`** - JMeter test plans for different endpoints3132### Test Plans (JMX Files)33**Analytics Tests:**34- **`analytics-direct-cluster-test.jmx`** - Tests analytics platform directly35- **`analytics-api-cluster-test.jmx`** - Tests DotCMS API analytics endpoints36- **`analytics-events.jmx`** - General analytics events testing3738**Traditional dotCMS Tests:**39- **`core-sessions.jmx`** - Core dotCMS functionality and session testing4041## Essential Commands Reference4243**📖 Complete Command Reference**: See [README.md](README.md#all-available-commands) for full command documentation.4445### Quick Command Examples46```bash47# Analytics Testing (NEW)48./dotcms-analytics-test.sh setup # One-time setup49./dotcms-analytics-test.sh quick-test # Baseline test50./dotcms-analytics-test.sh compare-endpoints # KEY: Find bottlenecks5152# Traditional dotCMS Testing53./mvnw install -Djmeter.test.skip=false -pl :dotcms-test-jmeter54just run-jmeter-tests55```5657## Performance Concepts Summary5859**📊 Detailed Testing Strategy**: See [README.md](README.md#performance-testing-strategy) for comprehensive performance concepts.6061### Key Performance Finding62**Critical Discovery**: DotCMS API layer adds ~30x response time overhead vs direct analytics63- Direct Analytics: ~3ms response time, ~300 EPS64- DotCMS API: ~85ms response time, ~270 EPS65- **Recommendation**: Use direct analytics for high-volume scenarios6667### Load Testing Levels68- **Baseline**: 100-200 EPS → **Standard**: 200-400 EPS → **High**: 400-800 EPS → **Stress**: 800+ EPS6970## File Structure and Organization7172### Scripts (Consolidated)73- ✅ **`dotcms-analytics-test.sh`** - Main unified script74- ❌ **`analyze-results.py`** - REMOVED (functionality moved to main script)75- ❌ **Legacy scaling scripts** - REMOVED (consolidated into main script)7677### Configuration Files78- **`helm-chart/jmeter-performance/values.yaml`** - Default Helm values7980### Test Results81- **`test-results/`** - Directory for JMeter output files (.jtl, .csv)82- **Generated reports** - Markdown files with analysis and recommendations8384## AI Assistant Guidelines8586### When Working with Performance Tests871. **Always use the unified script** - Don't suggest individual JMeter commands882. **Start with simple tests** - `quick-test` before complex scenarios893. **Focus on bottleneck identification** - This is the primary use case904. **Include analysis step** - Always run `analyze` after tests9192### Authentication Quick Reference9394**DotCMS API Token (JWT)**:95- **Purpose**: Authenticates requests to DotCMS API endpoints96- **Format**: `eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...`97- **Source**: DotCMS Admin → User Tools → API Tokens OR /api/v1/authentication98- **Environment**: `DOTCMS_JWT_TOKEN`99100**Analytics Key**:101- **Purpose**: Identifies analytics tracking in analytics platform102- **Format**: `js.cluster1.customer1.vgwy3nli4co84u531c`103- **Source**: DotCMS → Apps → Analytics → Configuration → Analytics Key104- **Environment**: `DOTCMS_ANALYTICS_KEY`105106### Common Developer Questions107108**Authentication:**109- **"Where do I get the JWT token?"** → DotCMS Admin → User Tools → API Tokens110- **"Where do I find the Analytics Key?"** → DotCMS → Apps → Analytics → Configuration111- **"Token expired?"** → Run `./dotcms-analytics-test.sh refresh-tokens`112113**Analytics Performance:**114- **"How do I test analytics performance?"** → Start with `./dotcms-analytics-test.sh quick-test`115- **"Why is the API slow?"** → Run `./dotcms-analytics-test.sh compare-endpoints`116- **"What's our maximum capacity?"** → Use `./dotcms-analytics-test.sh find-maximum-rate`117- **"How do I interpret results?"** → Use `./dotcms-analytics-test.sh analyze`118119**Traditional dotCMS Performance:**120- **"How do I test general dotCMS performance?"** → Use `./mvnw install -Djmeter.test.skip=false -pl :dotcms-test-jmeter`121- **"How do I modify test scenarios?"** → Open with `../mvnw jmeter:configure jmeter:gui -DguiTestFile=jmx-tests/core-sessions.jmx`122- **"How do I test against my instance?"** → Use `-Djmeter.host=myhost -Djmeter.port=443`123- **"Where are the test results?"** → Check `target/jmeter/reports/` and `target/jmeter/results/`124125### Troubleshooting Common Issues1261. **Pod not starting**: Check Kubernetes resources and namespace permissions1272. **Authentication failures**: Verify analytics key and JWT token validity1283. **High response times**: Likely infrastructure or code bottlenecks1294. **Connection errors**: Network connectivity or firewall issues130131### Code Modification Guidelines132- **JMX files**: Apache JMeter XML format for test plans133- **Helm templates**: Kubernetes YAML with Go templating134- **Shell scripts**: Bash with set -e (fail on error)135- **Configuration**: Helm values.yaml structure136137## Performance Expectations138139### Baseline Performance (from testing)140- **Direct Analytics**: ~300 EPS at 3ms average response time141- **DotCMS API**: ~270 EPS at 85ms average response time142- **Error Rate**: <1% for normal loads143- **Maximum Tested**: Up to 2000 EPS (endpoint dependent)144145### Production Recommendations146- **Use direct analytics** for high-volume scenarios147- **Monitor DotCMS API** for >100ms response times148- **Set capacity planning** at 70-80% of tested maximum149- **Implement caching** for DotCMS API layer optimization150151## Related Documentation152153- **Main README**: Developer-focused quick start guide154- **Helm Chart README**: Detailed Kubernetes deployment guide155156This module provides **dual testing approaches**:1571. **Traditional Maven-based tests** for core dotCMS functionality with simple execution1582. **Advanced analytics testing** with minimal infrastructure knowledge required but comprehensive performance insights159160Both approaches are designed to be **developer-friendly** while providing different levels of performance analysis for various dotCMS scenarios.
One repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| dotCMS/core.cursor/rules/e2e-rules.mdc · 949 | Cursor rules | setupteststylearch+5 | 89/100 | 14 days ago | |
| dotCMS/core.github/instructions/frontend.instructions.md · 949 | Copilot instructions | testlint-formatstylearch+3 | 61/100 | today | |
| dotCMS/coreCLAUDE.md · 949 | CLAUDE.md | setupbuildteststyle+7 | 99/100 | today | |
| dotCMS/corecore-web/AGENTS.md · 949 | AGENTS.md | style | 63/100 | 14 days ago | |
| dotCMS/corecore-web/CLAUDE.md · 949 | CLAUDE.md | teststylearchtesting-strategy+3 | 100/100 | 14 days ago | |
| dotCMS/corecore-web/apps/dotcms-ui-e2e/AGENTS.md · 949 | AGENTS.md | setupstylearchtesting-strategy+2 | 78/100 | 14 days ago | |
| dotCMS/corecore-web/apps/dotcms-ui/AGENTS.md · 949 | AGENTS.md | buildteststyledependencies+3 | 94/100 | 14 days ago | |
| dotCMS/corecore-web/apps/mcp-server/CLAUDE.md · 949 | CLAUDE.md | setupbuildtestlint-format+5 | 89/100 | 14 days ago | |
| dotCMS/corecore-web/libs/block-editor/CLAUDE.md · 949 | CLAUDE.md | archdo-not | 69/100 | 14 days ago | |
| dotCMS/corecore-web/libs/new-block-editor/CLAUDE.md · 949 | CLAUDE.md | lint-formatstyledo-notagent-behaviour | 61/100 | 14 days ago | |
| dotCMS/corecore-web/libs/portlets/CLAUDE.md · 949 | CLAUDE.md | setupteststyleui+1 | 77/100 | 14 days ago | |
| dotCMS/corecore-web/libs/portlets/edit-ema/portlet/src/lib/store/CLAUDE.md · 949 | CLAUDE.md | teststylearchtypes+2 | 65/100 | 7 days ago | |
| dotCMS/corecore-web/libs/sdk/client/CLAUDE.md · 949 | CLAUDE.md | setupbuildtestlint-format+9 | 97/100 | 14 days ago | |
| dotCMS/corecore-web/libs/sdk/react/CLAUDE.md · 949 | CLAUDE.md | setupbuildtestlint-format+9 | 97/100 | 14 days ago | |
| dotCMS/coredotCMS/src/main/java/com/dotcms/rest/CLAUDE.md · 949 | CLAUDE.md | typesdatabaseapido-not+1 | 57/100 | 14 days ago | |
| dotCMS/core.cursor/rules/frontend-context.mdc · 949 | Cursor rules | teststyledocs | 78/100 | today | |
| dotCMS/core.cursor/rules/java-context.mdc · 949 | Cursor rules | buildstyle | 44/100 | 14 days ago | |
| dotCMS/core.cursor/rules/test-context.mdc · 949 | Cursor rules | testtesting-strategy | 54/100 | today | |
| dotCMS/core.github/copilot-instructions.md · 949 | Copilot instructions | setupbuildtestlint-format+11 | 84/100 | 11 days ago | |
| dotCMS/core.cursor/rules/doc-updates.mdc · 949 | Cursor rules | docs | 30/100 | 14 days ago |
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| dotCMS/corecore-web/CLAUDE.md · 949 | CLAUDE.md | teststylearchtesting-strategy+3 | 100/100 | 14 days ago | |
| tphakala/birdnet-goCLAUDE.md · 1.6k | CLAUDE.md | buildtestlint-formatstyle+8 | 100/100 | today | |
| tyrchen/geektime-bootcamp-aiw7/genslides/backend/CLAUDE.md · 230 | CLAUDE.md | testlint-formatstylearch+6 | 100/100 | 9 days ago | |
| nimbalyst/nimbalystpackages/android/CLAUDE.md · 1.5k | CLAUDE.md | setupbuildstylearch+2 | 100/100 | 14 days ago | |
| microsoft/playwrightCLAUDE.md · 95k | CLAUDE.md | buildtestlint-formatstyle+7 | 100/100 | 7 days ago | |
| Adit-Jain-srm/NightmareNetCLAUDE.md · 46 | CLAUDE.md | buildtestlint-formatstyle+6 | 100/100 | 14 days ago | |
| bagisto/bagistoCLAUDE.md · 28k | CLAUDE.md | setupbuildteststyle+5 | 100/100 | 7 days ago | |
| dotCMS/coreCLAUDE.md · 949 | CLAUDE.md | setupbuildteststyle+7 | 99/100 | today |
A badge carrying the measured quality of the strongest agent config file in this repository, out of 100. It reads from this index every time somebody loads your page, so it changes when the measurement changes and there is nothing to keep up to date. Free, no account, and the value is not something you or we can set by hand.
[](https://rulestack.kynth.studio/configs/dotcms-core-test-jmeter-claude)Would rather not hotlink us? Every badge is also served in shields.io’s endpoint schema, so shields renders the image and your readers never talk to our domain:
Published by Toolproof, the masthead over this index and eight others. The method behind the number is at toolproof.kynth.studio/methodology, and the whole thing is readable as JSON with no key at /api.