blob: f9dcc9533214fb6ccbe54c9dc55de59d044f43ea [file] [log] [blame]
/**
******************************************************************************
* Copyright © 2018 PTA GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
*
* http://www.eclipse.org/legal/epl-v10.html
*
******************************************************************************
*/
package org.eclipse.openk.mics.home.rest;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.eclipse.openk.mics.home.common.JsonGeneratorBase;
import org.eclipse.openk.mics.home.communication.RestServiceWrapper;
import org.eclipse.openk.mics.home.controller.BackendController;
import org.eclipse.openk.mics.home.controller.CentralProxy;
import org.eclipse.openk.mics.home.controller.ResponseBuilderWrapper;
import org.apache.http.HttpStatus;
import org.apache.log4j.Logger;
import org.eclipse.openk.mics.home.common.BackendConfig;
import org.eclipse.openk.mics.home.common.HttpStatusException;
import org.eclipse.openk.mics.home.viewmodel.VersionInfo;
import javax.ws.rs.*;
import javax.ws.rs.core.Response;
@Api(value = "/mics/home")
@ApiResponses( value ={
@ApiResponse(code = 200, message = "OK"),
@ApiResponse(code = 400, message = "Bad Request"),
@ApiResponse(code = 401, message = "Unauthorized"),
@ApiResponse(code = 404, message = "Not found"),
@ApiResponse(code = 423, message = "Locked"),
@ApiResponse(code = 500, message = "Internal Server Error") } )
@Path("/mics/home")
public class BackendRestService {
private static final Logger logger = Logger.getLogger(BackendRestService.class.getName());
@ApiOperation(value = "Version Information", notes = "This services displays the version infos of this backend and the connected database.")
@ApiResponses( value ={ @ApiResponse(code = 200, message = "OK", response = VersionInfo.class,reference = "#/definitions/VersionInfo") } )
@GET
@Path("/versionInfo/")
@Produces("application/json")
public Response getVersionInfo() {
String vstring = JsonGeneratorBase.getGson().toJson(
new BackendController().getVersionInfo() );
try {
return ResponseBuilderWrapper.INSTANCE.buildOKResponse(vstring);
} catch (HttpStatusException e) {
return responseFromException(e);
}
}
@ApiOperation(value = "Server Distribution", notes = "This services returns the available distributions for a the clusters.")
@ApiResponses( value ={ @ApiResponse(code = 200, message = "OK") } )
@GET
@Path("/myServerDistribution/")
@Produces("application/json")
public Response getMyServerDistribution() {
logger.debug("myServerDistribution called!");
try {
BackendConfig bc = BackendConfig.getInstance();
CentralProxy central = new CentralProxy(bc.getMicsCentralURL());
logger.debug("Forwarding to central on:"+bc.getMicsCentralURL());
return ResponseBuilderWrapper.INSTANCE.buildOKResponse(
central.getServerDistribution(bc.getMicsDistributionCluster()));
}
catch (Exception e) {
logger.error("Error in myServerDistribution", e);
return responseFromException(e);
}
}
@ApiOperation(value = "Health state check", notes = "This service checks if the components of a service are healthy")
@ApiResponses( value ={ @ApiResponse(code = 200, message = "OK") } )
@GET
@Path("/healthState/{protocol}/{host}/{port}")
@Produces("application/json")
public Response getHealthState(@ApiParam(name = "protocol", value = "The name of the protocol is used(http/https)")
@PathParam("protocol") String protocol,
@ApiParam(name = "host", value = "The name of the host")
@PathParam("host") String host ,
@ApiParam(name = "port", value = "The number of the port")
@PathParam("port") String port ) {
logger.debug("healthState called!");
try {
BackendConfig bc = BackendConfig.getInstance();
CentralProxy central = new CentralProxy(bc.getMicsCentralURL());
return ResponseBuilderWrapper.INSTANCE.buildOKResponse(
central.getHealthState(bc.getMicsHealthStateExtraPath(), protocol, host, port));
}
catch (Exception e) {
logger.error("Exception in healthState!", e);
return responseFromException(e);
}
}
@ApiOperation(value = "Dispatcher", notes = "")
@ApiResponses( value ={ @ApiResponse(code = 200, message = "OK") } )
@POST
@Path("/dispatch/")
public Response dispatch( String envelope ) {
logger.debug("dispatch called!");
try {
BackendConfig bc = BackendConfig.getInstance();
RestServiceWrapper restServiceWrapper = new RestServiceWrapper(bc.getMicsCentralURL(), bc.isMicsCentralIsHttps());
return restServiceWrapper.performPostRequestWithResponse(createDispatchURL(), envelope);
}
catch( Exception e) {
logger.error("Exception in dispatch!", e);
return responseFromException(e);
}
}
private String createDispatchURL() {
BackendConfig bc = BackendConfig.getInstance();
return "dispatch/"+bc.getMicsDistributionCluster();
}
private Response responseFromException(Exception e) {
int errcode;
if (e instanceof HttpStatusException) {
logger.error("Caught BackendException", e);
errcode = ((HttpStatusException) e).getHttpStatus();
return Response.status(errcode).build();
} else {
logger.error("Unexpected exception", e);
return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR).build();
}
}
}