feat: implement scenario caching and hot-reloading
Signed-off-by: Abhinav Sinha <[email protected]>
This commit is contained in:
@@ -150,6 +150,22 @@ Each scenario is a single JSON file in `scenarios/data` directory; each bundle i
|
||||
- `correct_option` must match one of the `options[].id` values
|
||||
- Always include an `explanation`
|
||||
|
||||
### In-Memory Cache & Hot Reloading
|
||||
|
||||
To ensure high performance and zero disk-I/O bottlenecking, scenarios and bundles are cached in memory on backend startup. When developing or updating scenarios, you can hot-reload the definitions without rebuilding the image or restarting the container:
|
||||
|
||||
1. **Mount Scenarios Directory:** Run the container with the local `scenarios/` directory mounted to `/app/scenarios`:
|
||||
```bash
|
||||
docker run --rm -itd --privileged -p 7554:80 --name kubekosh -v <path_to_scenarios_directory>:/app/scenarios zeborg/kubekosh:latest
|
||||
```
|
||||
2. **Reload Cache:** Click the **Reload Scenario Cache** (↻) button in the top right corner of the header in the web user interface, or send an API request:
|
||||
```bash
|
||||
curl -X POST http://localhost:7554/api/cache/reload
|
||||
```
|
||||
|
||||
> **NOTE:**
|
||||
> The content in `<path_to_scenarios_directory>` should be the path to the local `scenarios/` directory of the cloned repository with your updates, i.e., it should contain the updated `scenarios/data` and `scenarios/bundles` directories.
|
||||
|
||||
### Workflow
|
||||
|
||||
```bash
|
||||
@@ -168,7 +184,10 @@ vim scenarios/data/my-new-scenario.json # edit the new scenario as per [SCHEMA.m
|
||||
vim scenarios/bundles/k8s-basics.json # edit the bundle to include the new scenario ID
|
||||
|
||||
# 5. Build and test locally
|
||||
docker build -t kubekosh . && docker run --rm -itd --privileged -p 7554:80 kubekosh
|
||||
# Run the built container directly:
|
||||
docker build -t kubekosh . && docker run --rm -itd --privileged -p 7554:80 --name kubekosh kubekosh
|
||||
# Or mount the scenarios folder for hot-reloading:
|
||||
docker run --rm -itd --privileged -p 7554:80 -v $PWD/scenarios:/app/scenarios --name kubekosh zeborg/kubekosh:dev
|
||||
|
||||
# 6. Commit and push to your fork (example for adding `my-new-scenario` to `k8s-basics` bundle)
|
||||
git add scenarios/data/my-new-scenario.json scenarios/bundles/k8s-basics.json
|
||||
|
||||
Reference in New Issue
Block a user