SLA Report
SLA Report
Project: Bilko
Version: 0.1
Date: 2026-02-23
Author: Ops Architect
Status: Draft (Template — fill in monthly)
Reviewers: Tech Lead, Alem Bašić
Document History
| Version |
Date |
Author |
Changes |
| 0.1 |
2026-02-23 |
Ops Architect |
Initial draft |
INSTRUCTIONS
Generate monthly SLA reports by the 5th business day of the following month.
File location: docs/operations/sla-reports/SLA-YYYY-MM.md
SLA Report: [Month YYYY]
Reporting Period: YYYY-MM-01 to YYYY-MM-[last day]
Report Date: YYYY-MM-DD
Prepared by: Ops Architect
1. SLA Summary
Service Level Objectives (SLOs)
| SLO |
Target |
Actual |
Status |
| API availability |
≥ 99.5% / month |
X.XX% |
✅ / ❌ |
| API P95 response time |
< 500ms |
XXXms |
✅ / ❌ |
| API error rate (5xx) |
< 0.5% |
X.XX% |
✅ / ❌ |
| Frontend availability |
≥ 99.9% / month |
X.XX% |
✅ / ❌ |
| Uptime (combined) |
≥ 99.5% / month |
X.XX% |
✅ / ❌ |
SLO Calculation
API Availability = (Total minutes in month - Downtime minutes) / Total minutes × 100
Total minutes in month (28 days) = 40,320
Total minutes in month (31 days) = 44,640
Allowed downtime at 99.5%:
- 28-day month: 201.6 minutes = ~3h 22min
- 31-day month: 223.2 minutes = ~3h 43min
2. Uptime Metrics
API (api.bilko.io)
| Metric |
Value |
| Measured uptime |
X.XX% |
| Total downtime |
X minutes |
| Number of incidents |
X |
| Longest outage |
X minutes |
Frontend (bilko.io)
| Metric |
Value |
| Measured uptime |
X.XX% |
| Total downtime |
X minutes |
| Number of incidents |
X |
Source: BetterStack uptime monitoring (1-min check interval)
API Response Times
| Metric |
Target |
Week 1 |
Week 2 |
Week 3 |
Week 4 |
Month Avg |
| P50 |
< 100ms |
|
|
|
|
|
| P95 |
< 500ms |
|
|
|
|
|
| P99 |
< 1000ms |
|
|
|
|
|
Critical Endpoint Performance
| Endpoint |
P95 Target |
P95 Actual |
Status |
| POST /api/v1/invoices |
< 500ms |
XXXms |
✅ / ❌ |
| GET /api/v1/invoices |
< 200ms |
XXXms |
✅ / ❌ |
| GET /api/v1/reports/vat |
< 3000ms |
XXXms |
✅ / ❌ |
| POST /api/v1/auth/login |
< 300ms |
XXXms |
✅ / ❌ |
Source: Railway metrics + Sentry performance monitoring
4. Error Metrics
Error Rate by Week
| Week |
Total Requests |
5xx Errors |
Error Rate |
Status |
| Week 1 |
|
|
X.XX% |
|
| Week 2 |
|
|
X.XX% |
|
| Week 3 |
|
|
X.XX% |
|
| Week 4 |
|
|
X.XX% |
|
| Month |
|
|
X.XX% |
|
Top Errors (Sentry)
| # |
Error |
Count |
Affected Users |
Status |
| 1 |
[Error message] |
X |
X |
Fixed / Investigating |
| 2 |
|
|
|
|
| 3 |
|
|
|
|
5. Incidents This Month
| Incident ID |
Date |
Duration |
Severity |
Root Cause |
Resolved |
| INC-YYYY-MM-DD-001 |
YYYY-MM-DD |
X min |
P0/P1/P2 |
[Short description] |
Yes |
Total downtime from incidents: X minutes
P0 incidents: X (target: 0)
P1 incidents: X (target: < 2/month)
6. Financial Data Integrity (Monthly Verification)
Required: Verify no financial data corruption occurred this month.
| Check |
Method |
Result |
| Double-entry balance |
SQL: SUM(debits) = SUM(credits) per org |
✅ Balanced / ❌ Issues found |
| Invoice total accuracy |
SQL: total = subtotal + tax - discount |
✅ Accurate / ❌ Issues found |
| VAT calculation accuracy |
Spot-check 10 random invoices |
✅ Accurate / ❌ Issues found |
| No orphaned transactions |
SQL: all transactions have debit+credit |
✅ Clean / ❌ Issues found |
Verification queries run on: YYYY-MM-DD
Verified by: [Name]
-- Monthly double-entry balance verification
SELECT
o.name as organization_name,
SUM(CASE WHEN te.type = 'debit' THEN te.amount ELSE 0 END) as total_debits,
SUM(CASE WHEN te.type = 'credit' THEN te.amount ELSE 0 END) as total_credits,
ABS(SUM(CASE WHEN te.type = 'debit' THEN te.amount ELSE -te.amount END)) as imbalance
FROM transaction_entries te
JOIN transactions t ON t.id = te."transactionId"
JOIN organizations o ON o.id = t."organizationId"
WHERE t.created_at >= DATE_TRUNC('month', CURRENT_DATE)
AND t.created_at < DATE_TRUNC('month', CURRENT_DATE) + INTERVAL '1 month'
GROUP BY o.id, o.name
HAVING ABS(SUM(CASE WHEN te.type = 'debit' THEN te.amount ELSE -te.amount END)) > 0.0001
ORDER BY imbalance DESC;
-- Expected: 0 rows (all organizations balanced)
7. Infrastructure Metrics
Railway (Backend + Database)
| Resource |
Average |
Peak |
Trend |
| API CPU |
X% |
X% |
Stable / Growing / Decreasing |
| API Memory |
XMB |
XMB |
Stable / Growing / Decreasing |
| DB Connections |
X avg |
X peak |
Stable / Growing |
| DB Storage |
XGB |
— |
+X GB this month |
Vercel (Frontend)
| Metric |
Value |
| Total page views |
X |
| Unique visitors |
X |
| Average LCP |
Xms |
| Average CLS |
X |
8. Cost Report
| Service |
Budget |
Actual |
Variance |
| Railway (API + DB) |
€20 |
€XX |
+/-€XX |
| Vercel |
€0 |
€XX |
+/-€XX |
| Cloudflare R2 |
€1 |
€XX |
+/-€XX |
| SendGrid |
€0 |
€XX |
+/-€XX |
| Total |
€21 |
€XX |
+/-€XX |
9. SLA Trending
| Month |
API Uptime |
P95 Latency |
Error Rate |
Incidents |
| [Previous -2] |
— |
— |
— |
— |
| [Previous -1] |
— |
— |
— |
— |
| [This month] |
X.XX% |
XXXms |
X.XX% |
X |
10. Action Items from This Report
| # |
Issue |
Action |
Owner |
Due |
| 1 |
[Issue] |
[Action] |
[Owner] |
YYYY-MM-DD |
Approval
| Role |
Name |
Date |
Signature |
| Author |
Ops Architect |
|
|
| Reviewer |
Alem Bašić |
|
|
No comments to display
No comments to display