103 lines
2.9 KiB
Java
103 lines
2.9 KiB
Java
package com.auction;
|
|
|
|
import jakarta.enterprise.context.ApplicationScoped;
|
|
import jakarta.inject.Inject;
|
|
import org.eclipse.microprofile.health.HealthCheck;
|
|
import org.eclipse.microprofile.health.HealthCheckResponse;
|
|
import org.eclipse.microprofile.health.Liveness;
|
|
import org.eclipse.microprofile.health.Readiness;
|
|
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Paths;
|
|
|
|
/**
|
|
* Health checks for Auction Monitor.
|
|
* Provides liveness and readiness probes for Kubernetes/Docker deployment.
|
|
*/
|
|
@ApplicationScoped
|
|
public class AuctionMonitorHealthCheck {
|
|
|
|
@Inject
|
|
DatabaseService db;
|
|
|
|
/**
|
|
* Liveness probe - checks if application is alive
|
|
* GET /health/live
|
|
*/
|
|
@Liveness
|
|
public static class LivenessCheck implements HealthCheck {
|
|
@Override
|
|
public HealthCheckResponse call() {
|
|
return HealthCheckResponse.up("Auction Monitor is alive");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Readiness probe - checks if application is ready to serve requests
|
|
* GET /health/ready
|
|
*/
|
|
@Readiness
|
|
@ApplicationScoped
|
|
public static class ReadinessCheck implements HealthCheck {
|
|
|
|
@Inject
|
|
DatabaseService db;
|
|
|
|
@Override
|
|
public HealthCheckResponse call() {
|
|
try {
|
|
// Check database connection
|
|
var auctions = db.getAllAuctions();
|
|
|
|
// Check database path exists
|
|
var dbPath = Paths.get("C:\\mnt\\okcomputer\\output\\cache.db");
|
|
if (!Files.exists(dbPath.getParent())) {
|
|
return HealthCheckResponse.down("Database directory does not exist");
|
|
}
|
|
|
|
return HealthCheckResponse.named("database")
|
|
.up()
|
|
.withData("auctions", auctions.size())
|
|
.build();
|
|
|
|
} catch (Exception e) {
|
|
return HealthCheckResponse.named("database")
|
|
.down()
|
|
.withData("error", e.getMessage())
|
|
.build();
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Startup probe - checks if application has started correctly
|
|
* GET /health/started
|
|
*/
|
|
@org.eclipse.microprofile.health.Startup
|
|
@ApplicationScoped
|
|
public static class StartupCheck implements HealthCheck {
|
|
|
|
@Inject
|
|
DatabaseService db;
|
|
|
|
@Override
|
|
public HealthCheckResponse call() {
|
|
try {
|
|
// Verify database schema
|
|
db.ensureSchema();
|
|
|
|
return HealthCheckResponse.named("startup")
|
|
.up()
|
|
.withData("message", "Database schema initialized")
|
|
.build();
|
|
|
|
} catch (Exception e) {
|
|
return HealthCheckResponse.named("startup")
|
|
.down()
|
|
.withData("error", e.getMessage())
|
|
.build();
|
|
}
|
|
}
|
|
}
|
|
}
|