/**
* Copyright (c) <2013> <Radware Ltd.> and others. 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
* @author Gera Goft
* @version 0.1
*/
package org.opendaylight.defense4all.framework.restservice;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.UriInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.opendaylight.defense4all.framework.core.FMHolder;
import org.opendaylight.defense4all.framework.core.FrameworkMain.ResetLevel;
@Path("/")
public class FrameworkRestService {
private static Logger log = LoggerFactory.getLogger("org.opendaylight.defense4all.restservice");
@Context
UriInfo uriInfo;
@Context
Request request;
@GET
@Path("hostaddress")
@Produces(MediaType.APPLICATION_JSON)
public String getHostAddress(@Context HttpServletResponse servletResponse) {
log.debug("getHostaddress: invoked");
if ( ! FMHolder.get().isOpenForBusiness() ) {
try {
servletResponse.sendError(503, "Service is unavailable" );
} catch (Throwable e) {
log.error("Error in response "+e);
}
return null;
}
String hostaddress = FMHolder.get().getHostAddr();
return hostaddress;
}
@POST
@Path("hostaddress")
@Consumes(MediaType.APPLICATION_JSON)
// @Produces(MediaType.APPLICATION_JSON)
public void setHostAddress(String hostaddress, @Context HttpServletResponse servletResponse) throws Exception {
log.debug("setHostAddress: invoked");
if ( ! FMHolder.get().isOpenForBusiness() ) {
servletResponse.sendError(503, "Service is unavailable" );
return ;
}
if (hostaddress == null || hostaddress.isEmpty()) {
log.debug("setHostaddress: hostaddress is null or empty.");
servletResponse.sendError(400);
}
try {
FMHolder.get().getFrameworkMgmtPoint().setHostAddr(hostaddress);
} catch ( Throwable e) {
log.error("Failed to set hostaddress - " + e.getLocalizedMessage());
servletResponse.sendError(400);
}
}
@POST
@Path("terminate")
@Consumes(MediaType.APPLICATION_JSON)
// @Produces(MediaType.APPLICATION_JSON)
public void terminate(String scope, @Context HttpServletResponse servletResponse) throws Exception {
log.debug("terminate: invoked");
if (scope == null || scope.isEmpty())
scope = "this";
try {
FMHolder.get().getFrameworkMgmtPoint().requestTerminate(scope);
} catch ( Throwable e) {
log.error("Failed to initiate termination - " + e.getLocalizedMessage());
servletResponse.sendError(400);
}
}
@POST
@Path("reset")
@Consumes(MediaType.APPLICATION_JSON)
// @Produces(MediaType.APPLICATION_JSON)
public void reset(String levelStr, @Context HttpServletResponse servletResponse) throws Exception {
log.debug("reset: invoked");
ResetLevel level = ResetLevel.valueOf(levelStr, ResetLevel.soft); // If invalid or none - 'soft' assumed
try {
FMHolder.get().getFrameworkMgmtPoint().requestReset(level);
} catch ( Throwable e) {
log.error("Failed to initiate reset - " + e.getLocalizedMessage());
servletResponse.sendError(400);
}
}
}