Files
domenico edb7a69bde commit
2025-10-24 20:55:45 +02:00

126 lines
3.3 KiB
Markdown

# Candidate Assessment Project
## Overview
You will work on a **Java Spring Boot web application** with a **Thymeleaf frontend** for managing orders.
The application includes:
- REST endpoints (`/api/orders`) and web endpoints (`/web/orders`)
- Order creation with `id`, `productName`, and `quantity`
- Viewing and deleting orders via forms
- Metrics exposed via Spring Boot Actuator at `/actuator/prometheus`
- Application logging configured for INFO, ERROR, and DEBUG levels
---
## Environment
The **pre-configured environment is provided** with:
- The **Java application,** **Prometheus** and **Grafana** already set up inside `docker-compose.yml`.
- Prometheus scraping configurations for the application's `/actuator/prometheus` endpoint ready.
You can start the environment (after minimal manipulation) with:
```bash
docker-compose up
```
N.B.
Grafana is to be configured to use Prometheus as its data source.
---
## Task
### Monitoring and Dashboard Creation
Your task is to **create a Grafana dashboard** to monitor this application using **Prometheus** as the data source.
The dashboard should include:
- Total orders created
- Total orders deleted
- HTTP request latency (p95, p99)
- JVM memory and CPU usage
- Logged events count (INFO, ERROR)
- Any additional metrics you consider relevant for application stability and debugging
### Custom Metrics
As part of this assessment, you are **required to create and expose custom metrics** in the application. Examples of custom metrics you could implement:
- Number of orders per product
- Average quantity per order
- Custom application counters or timers useful for business KPIs
These custom metrics should be:
- Exposed via Prometheus in the application
- Documented in the deliverables
- Visualized in the Grafana dashboard
### Brief Observability Strategy
In addition to the dashboard:
- Describe which **alerts** you would configure, including thresholds and the rationale behind them.
---
## Optional Improvements
You are welcome to implement additional improvements, such as:
- Adding **tags to metrics** for richer filtering
- Improving **structured logging** to trace order flows
- Tools and approaches for **profiling and identifying performance bottlenecks**
---
## Deliverables
- Create a **Git repository**.
- Add the **Grafana dashboard JSON** ready to import under a `grafana/monitoring/` folder.
- Add your updated **Java application with custom metrics** exposed.
- Create a `README.md` describing:
- What you did
- How to use the dashboard
- Which panels were created and their purpose
- Proposed alerts and thresholds
- The custom metrics you created and their purpose
---
## Requirements
- Java 17
- Maven
- Docker and Docker Compose
---
## Objective
This assessment aims to evaluate your ability to:
- Configure effective **monitoring** on a Java web application
- Select and create **meaningful metrics** for observability and debugging
- Implement **custom Prometheus metrics** for business and technical insights
- Communicate clearly through documentation
- Apply **DevOps practices** for production stability
- Find and correct anti-patterns in the configuration
---
## Contact
For technical questions, please contact:
[attilio.gualandi@welld.ch]
---
Thank you for your time and effort on this assessment.