Add documentation for diagram POST caching feature
This commit is contained in:
105
Documentation/DIAGRAM_CACHING.md
Normal file
105
Documentation/DIAGRAM_CACHING.md
Normal file
@@ -0,0 +1,105 @@
|
||||
# Diagram POST Caching Implementation
|
||||
|
||||
This feature replaces the URL-encoded GET approach for diagram generation with POST requests and local filesystem caching.
|
||||
|
||||
## Changes Overview
|
||||
|
||||
### New Files
|
||||
- `diagramm_proxy/__init__.py` - Module initialization
|
||||
- `diagramm_proxy/diagram_cache.py` - Caching logic and POST request handling
|
||||
- `abschnitte/management/commands/clear_diagram_cache.py` - Management command for cache clearing
|
||||
|
||||
### Modified Files
|
||||
- `abschnitte/utils.py` - Updated `render_textabschnitte()` to use caching
|
||||
- `.gitignore` - Added cache directory exclusion
|
||||
|
||||
## Configuration Required
|
||||
|
||||
Add to your Django settings file (e.g., `VorgabenUI/settings.py`):
|
||||
|
||||
```python
|
||||
# Diagram cache settings
|
||||
DIAGRAM_CACHE_DIR = 'diagram_cache' # relative to MEDIA_ROOT
|
||||
|
||||
# Ensure MEDIA_ROOT and MEDIA_URL are configured
|
||||
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
|
||||
MEDIA_URL = '/media/'
|
||||
```
|
||||
|
||||
### URL Configuration
|
||||
|
||||
Ensure media files are served in development. In your main `urls.py`:
|
||||
|
||||
```python
|
||||
from django.conf import settings
|
||||
from django.conf.urls.static import static
|
||||
|
||||
# ... existing urlpatterns ...
|
||||
|
||||
# Serve media files in development
|
||||
if settings.DEBUG:
|
||||
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
||||
```
|
||||
|
||||
## How It Works
|
||||
|
||||
1. When a diagram is rendered, the system computes a SHA256 hash of the diagram content
|
||||
2. It checks if a cached SVG exists for that hash
|
||||
3. If cached: serves the existing file
|
||||
4. If not cached: POSTs content to Kroki server, saves the response, and serves it
|
||||
5. Diagrams are served from `MEDIA_URL/diagram_cache/{type}/{hash}.svg`
|
||||
|
||||
## Benefits
|
||||
|
||||
- **No URL length limitations** - Content is POSTed instead of URL-encoded
|
||||
- **Improved performance** - Cached diagrams are served directly from filesystem
|
||||
- **Reduced server load** - Kroki server is only called once per unique diagram
|
||||
- **Persistent cache** - Survives application restarts
|
||||
- **Better error handling** - Graceful fallback on generation failures
|
||||
|
||||
## Usage
|
||||
|
||||
### Viewing Diagrams
|
||||
No changes required - diagrams will be automatically cached on first render.
|
||||
|
||||
### Clearing Cache
|
||||
|
||||
Clear all cached diagrams:
|
||||
```bash
|
||||
python manage.py clear_diagram_cache
|
||||
```
|
||||
|
||||
Clear diagrams of a specific type:
|
||||
```bash
|
||||
python manage.py clear_diagram_cache --type plantuml
|
||||
python manage.py clear_diagram_cache --type mermaid
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
1. Create or view a page with diagrams
|
||||
2. Verify diagrams render correctly
|
||||
3. Check that `media/diagram_cache/` directory is created with cached SVGs
|
||||
4. Refresh the page - second load should be faster (cache hit)
|
||||
5. Check logs for cache hit/miss messages
|
||||
6. Test cache clearing command
|
||||
|
||||
## Migration Notes
|
||||
|
||||
- Existing diagrams will be regenerated on first view after deployment
|
||||
- The old URL-based approach is completely replaced
|
||||
- No database migrations needed
|
||||
- Ensure `requests` library is installed (already in requirements.txt)
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Diagrams not rendering
|
||||
- Check that MEDIA_ROOT and MEDIA_URL are configured correctly
|
||||
- Verify Kroki server is accessible at `http://svckroki:8000`
|
||||
- Check application logs for error messages
|
||||
- Ensure media directory is writable
|
||||
|
||||
### Cache not working
|
||||
- Verify Django storage configuration
|
||||
- Check file permissions on media/diagram_cache directory
|
||||
- Review logs for cache-related errors
|
||||
Reference in New Issue
Block a user