Mocktail/src/main/java/de/hsos/swa/ma/api/al/ProperBarkeeper.java

188 lines
9.1 KiB
Java

package de.hsos.swa.ma.api.al;
import java.util.ArrayList;
import org.jboss.logging.Logger;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.DELETE;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.Consumes;
import javax.ws.rs.core.MediaType;
import org.eclipse.microprofile.metrics.MetricUnits;
import org.eclipse.microprofile.metrics.annotation.Counted;
import org.eclipse.microprofile.metrics.annotation.Timed;
import org.eclipse.microprofile.faulttolerance.Retry;
import org.eclipse.microprofile.faulttolerance.Timeout;
import org.eclipse.microprofile.faulttolerance.Fallback;
//import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
import org.eclipse.microprofile.rest.client.inject.RestClient;
import org.jboss.resteasy.annotations.jaxrs.PathParam;
public class ProperBarkeeper implements CocktailInterface, MocktailInterface{
private static final Logger logger = Logger.getLogger(Barkeeper.class);
@Inject
StorageTransport st;
@Inject
@RestClient
CocktailGatewayInterface cocktailGatewayInterface;
//Metrics
@Counted(name = "performedAllCocktailSearches", description = "How many searches for all cocktails have been performed.")
@Timed(name = "searchAllCocktailsTimer", description = "A measure of how long it takes to perform the search.", unit = MetricUnits.MILLISECONDS)
//Fault-Tolerance
@Retry(maxRetries = 3)
@Timeout(250)
//@Fallback(fallbackMethod = "getAllMocktails")
public Drinks getAllCocktails(){
logger.debug(System.currentTimeMillis() + ": Barkeeper->getAllCocktails: started");
Drinks drinks = cocktailGatewayInterface.getAllCocktails();
logger.trace(System.currentTimeMillis() + ": Barkeeper->getAllCocktails: get all cocktails by REST-CLIENT");
logger.debug(System.currentTimeMillis() + ": Barkeeper->getAllCocktails: ended");
return drinks;
}
//Metrics
@Counted(name = "performedNameCocktailSearches", description = "How many searches for cocktails by name have been performed.")
@Timed(name = "searchCocktailsNameTimer", description = "A measure of how long it takes to perform the search.", unit = MetricUnits.MILLISECONDS)
//Fault-Tolerance
@Retry(maxRetries = 3)
@Timeout(250)
public Drinks getCocktailByName(String name) {
logger.debug(System.currentTimeMillis() + ": Barkeeper->getCocktailByName: started");
Drinks drinks = cocktailGatewayInterface.getCocktailByName(name);
logger.trace(System.currentTimeMillis() + ": Barkeeper->getCocktailByName: get all cocktails by name REST-CLIENT");
logger.debug(System.currentTimeMillis() + ": Barkeeper->getCocktailByName: ended");
return drinks;
}
//Metrics
@Counted(name = "performedIngredientCocktailSearches", description = "How many searches for cocktails by ingredient have been performed.")
@Timed(name = "searchCocktailsIngredientTimer", description = "A measure of how long it takes to perform the search.", unit = MetricUnits.MILLISECONDS)
//Fault-Tolerance
@Retry(maxRetries = 3)
@Timeout(250)
public Drinks getCocktailByIngredient(String ingredient){
logger.debug(System.currentTimeMillis() + ": Barkeeper->getCocktailByIngredient: started");
Drinks drinks = cocktailGatewayInterface.getCocktailByIngredient(ingredient);
logger.trace(System.currentTimeMillis() + ": Barkeeper->getCocktailByIngredient: get all cocktails by ingredient REST-CLIENT");
logger.debug(System.currentTimeMillis() + ": Barkeeper->getCocktailByIngredient: ended");
return drinks;
}
/*public void createCocktail(Mocktail m){
}
public void deleteCocktail(@PathParam long number){
}
public void updateCocktail(Mocktail m,@PathParam long number){
}*/
//Metrics
@Counted(name = "performedAllMocktailSearches", description = "How many searches for all cocktails have been performed.")
@Timed(name = "searchAllMocktailsTimer", description = "A measure of how long it takes to perform the search.", unit = MetricUnits.MILLISECONDS)
//Fault-Tolerance
@Retry(maxRetries = 3)
@Timeout(250)
public ArrayList<Mocktail> getAllMocktails(){
logger.debug(System.currentTimeMillis() + ": Barkeeper->getAllMocktails: started");
ArrayList<Mocktail> mocks = st.getAllMocktails();
logger.trace(System.currentTimeMillis() + ": Barkeeper->getAllMocktails: get all mocktails by REST-CLIENT");
logger.debug(System.currentTimeMillis() + ": Barkeeper->getAllMocktails: ended");
return mocks;
}
//Metrics
@Counted(name = "performedSearchesByName", description = "How many searches by name have been performed.")
@Timed(name = "searchMocktailsNameTimer", description = "A measure of how long it takes to perform the search.", unit = MetricUnits.MILLISECONDS)
//@Gauge(name = "highestPrimeNumberSoFar", unit = MetricUnits.NONE, description = "Highest prime number so far.")
//Fault-Tolerance
@Retry(maxRetries = 3)
@Timeout(250)
@Fallback(fallbackMethod = "fallbackGetMocktailByName")
public ArrayList<Mocktail> getMocktailByName(String name) {
logger.debug(System.currentTimeMillis() + ": Barkeeper->getMocktailByName: started");
ArrayList<Mocktail> mts = st.getMocktailByName(name);
logger.trace(System.currentTimeMillis() + ": Barkeeper->getMocktailByName: get mocktail by name by REST-CLIENT");
logger.debug(System.currentTimeMillis() + ": Barkeeper->getMocktailByName: ended");
return mts;
}
//Metrics
@Counted(name = "performedSearchesByIngredient", description = "How many searches by ingredient have been performed.")
@Timed(name = "searchMocktailsIngredientTimer", description = "A measure of how long it takes to perform the search.", unit = MetricUnits.MILLISECONDS)
//@Gauge(name = "highestPrimeNumberSoFar", unit = MetricUnits.NONE, description = "Highest prime number so far.")
//Fault-Tolerance
@Retry(maxRetries = 3)
@Timeout(250)
//@Fallback(fallbackMethod = "fallbackGetMocktailByName")
public ArrayList<Mocktail> getMocktailByIngredient(String ingredient) {
logger.debug(System.currentTimeMillis() + ": Barkeeper->getMocktailByIngredient: started");
ArrayList<Mocktail> mts = st.getMocktailByIngredient(ingredient);
logger.trace(System.currentTimeMillis() + ": Barkeeper->getMocktailByIngredient: get mocktail by ingredient by REST-CLIENT");
logger.debug(System.currentTimeMillis() + ": Barkeeper->getMocktailByIngredient: ended");
return mts;
}
public ArrayList<Mocktail> fallbackGetMocktailByName(String name) {
logger.debug(System.currentTimeMillis() + ": Barkeeper->getMocktailByName: started");
ArrayList<Mocktail> mts = st.getAllMocktails();
logger.trace(System.currentTimeMillis() + ": Barkeeper->getMocktailByName: get mocktail by name by REST-CLIENT");
logger.debug(System.currentTimeMillis() + ": Barkeeper->getMocktailByName: ended");
return mts;
}
//Metrics
@Counted(name = "performedCreates", description = "How many creates have been performed.")
@Timed(name = "createTimer", description = "A measure of how long it takes to perform the mocktail creation.", unit = MetricUnits.MILLISECONDS)
//Fault-Tolerance
@Retry(maxRetries = 3)
public void createMocktail(Mocktail m) {
logger.debug(System.currentTimeMillis() + ": Barkeeper->createMocktail: started");
this.st.addMocktail(m);
logger.trace(System.currentTimeMillis() + ": Barkeeper->createMocktail: create mocktail by REST-CLIENT");
logger.debug(System.currentTimeMillis() + ": Barkeeper->createMocktail: ended");
}
//Metrics
@Counted(name = "performedUpdates", description = "How many updates have been performed.")
@Timed(name = "updateTimer", description = "A measure of how long it takes to perform the update of a mocktail.", unit = MetricUnits.MILLISECONDS)
//Fault-Tolerance
@Retry(maxRetries = 3)
public void updateMocktail(Mocktail m, long number) {
logger.debug(System.currentTimeMillis() + ": Barkeeper->updateMocktail: started");
this.st.updateMocktail(m, number);
logger.trace(System.currentTimeMillis() + ": Barkeeper->updateMocktail: update mocktail by REST-CLIENT");
logger.debug(System.currentTimeMillis() + ": Barkeeper->updateMocktail: ended");
}
//Metrics
@Counted(name = "performedDeletions", description = "How many deletes have been performed.")
@Timed(name = "deleteTimer", description = "A measure of how long it takes to delete a mocktail.", unit = MetricUnits.MILLISECONDS)
//Fault-Tolerance
@Retry(maxRetries = 3)
public void deleteMocktail(long id) {
logger.debug(System.currentTimeMillis() + ": Barkeeper->deleteMocktail: started");
this.st.deleteMocktail(id);
logger.trace(System.currentTimeMillis() + ": Barkeeper->deleteMocktail: delete mocktail by REST-CLIENT");
logger.debug(System.currentTimeMillis() + ": Barkeeper->deleteMocktail: ended");
}
}