aboutsummaryrefslogtreecommitdiffstats
path: root/ncomp-sirius-manager-server/src/main/java/org/openecomp/ncomp/sirius/manager/Jetty8Server.java
diff options
context:
space:
mode:
Diffstat (limited to 'ncomp-sirius-manager-server/src/main/java/org/openecomp/ncomp/sirius/manager/Jetty8Server.java')
-rw-r--r--ncomp-sirius-manager-server/src/main/java/org/openecomp/ncomp/sirius/manager/Jetty8Server.java101
1 files changed, 69 insertions, 32 deletions
diff --git a/ncomp-sirius-manager-server/src/main/java/org/openecomp/ncomp/sirius/manager/Jetty8Server.java b/ncomp-sirius-manager-server/src/main/java/org/openecomp/ncomp/sirius/manager/Jetty8Server.java
index e9774ee..5566162 100644
--- a/ncomp-sirius-manager-server/src/main/java/org/openecomp/ncomp/sirius/manager/Jetty8Server.java
+++ b/ncomp-sirius-manager-server/src/main/java/org/openecomp/ncomp/sirius/manager/Jetty8Server.java
@@ -42,15 +42,22 @@ import org.eclipse.jetty.server.nio.SelectChannelConnector;
import org.eclipse.jetty.server.ssl.SslSelectChannelConnector;
import org.eclipse.jetty.util.B64Code;
import org.eclipse.jetty.util.StringUtil;
+import org.json.JSONArray;
import org.json.JSONObject;
-import org.openecomp.logger.EcompLogger;
+import org.openecomp.entity.EcompSubComponentInstance;
+import org.openecomp.logger.EcompException;
+import org.openecomp.logger.EcompMessageEnum;
+import org.openecomp.logger.StatusCodeEnum;
+import com.att.eelf.i18n.EELFResourceManager;
+import org.openecomp.ncomp.sirius.manager.logging.ManagementServerMessageEnum;
+import org.openecomp.ncomp.sirius.manager.logging.NcompLogger;
import org.openecomp.ncomp.utils.PropertyUtil;
import org.openecomp.ncomp.webservice.utils.JsonUtils;
public class Jetty8Server {
public static final Logger logger = Logger.getLogger(Jetty8Server.class);
- static final EcompLogger ecomplogger = EcompLogger.getEcompLogger();
+ static final NcompLogger ecomplogger = NcompLogger.getNcompLogger();
Server server;
private SelectChannelConnector conn1;
private int actualport;
@@ -87,13 +94,20 @@ public class Jetty8Server {
logger.info("Authorization not valid");
return;
}
+ if (request.getRemoteHost() != null) ecomplogger.setRemoteHost(request.getRemoteHost());
+ if (userName != null) ecomplogger.setPartnerName(userName);
+ ecomplogger.startUnknownAuditEvent(contextPath);
String requestId = request.getHeader("X-ECOMP-RequestID");
if (requestId == null) {
ecomplogger.newRequestId();
+ ecomplogger.missingRequestId(request);
}
else {
- ecomplogger.setRequestId(requestId);;
+ ecomplogger.setRequestId(requestId);
}
+ String clientVersion = request.getHeader("X-ECOMP-Client-Version");
+ if (clientVersion == null) clientVersion = "UNKNOWN";
+ ecomplogger.setInstanceId(EcompSubComponentInstance.getServerName() + ":" + props.getProperty("server.port") + contextPath);
String action = request.getHeader("action");
if (action == null) {
String method = request.getMethod();
@@ -104,13 +118,14 @@ public class Jetty8Server {
String contextPath1 = null;
IRequestHandler handler = null;
for (String prefix : handlerMap.keySet()) {
- if (contextPath.startsWith(prefix)) {
+ if (contextPath.equals(prefix) || contextPath.startsWith(prefix + "/")) {
contextPath1 = contextPath.substring(prefix.length());
handler = handlerMap.get(prefix);
}
}
if (handler == null) {
logger.warn("request with no handler: " + contextPath);
+ handleError(jRequest,response,ManagementServerMessageEnum.MANAGEMENT_SERVER_WEB_REQUEST_WITHOUT_HANDLER,contextPath);
return;
}
try {
@@ -120,18 +135,16 @@ public class Jetty8Server {
// System.err.println(s);
// JSONObject json = new JSONObject(new String(s.toByteArray()));
JSONObject json = JsonUtils.stream2json(request.getInputStream());
- res = handler.handleJson(userName, action, contextPath1, json, req2context(contextPath, jRequest, userName));
- } else
- throw new ManagerException(HttpServletResponse.SC_BAD_REQUEST, "Cannot use content type: "
- + jRequest.getContentType());
- } catch (ManagerException e) {
- setResponseHeaders(response);
- response.sendError(e.code, e.getMessage());
- ManagementServerUtils.printStackTrace(e);
+ res = handler.handleJson(userName, action, contextPath1, json, req2context(contextPath, jRequest, userName), clientVersion);
+ } else {
+ handleError(jRequest,response,ManagementServerMessageEnum.MANAGEMENT_SERVER_WEB_REQUEST_UNSUPPORTED_CONTENT_TYPE,jRequest.getContentType());
+ return;
+ }
+ } catch (EcompException e) {
+ handleError(jRequest, response, e.msgEnum, e.args);
return;
} catch (Exception e) {
- ManagementServerUtils.printStackTrace(e);
- response.sendError(HttpServletResponse.SC_BAD_REQUEST, e.getMessage());
+ handleError(jRequest,response,ManagementServerMessageEnum.MANAGEMENT_SERVER_WEB_REQUEST_UNKNOWN_EXCEPTION,e.getMessage());
return;
}
if (res != null) {
@@ -141,15 +154,19 @@ public class Jetty8Server {
PrintWriter w = response.getWriter();
w.append(json1.toString(2));
w.close();
- response.setStatus(200);
- jRequest.setHandled(true);
- } else
- response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Unable to handle output object: "
- + res.getClass().getName());
- return;
+ } else if (res instanceof JSONArray) {
+ JSONArray json1 = (JSONArray) res;
+ PrintWriter w = response.getWriter();
+ w.append(json1.toString(2));
+ w.close();
+ } else {
+ handleError(jRequest,response,ManagementServerMessageEnum.MANAGEMENT_SERVER_WEB_REQUEST_UNKNOWN_RETURN_CLASS,res.getClass().getName());
+ return;
+ }
}
response.setStatus(HttpServletResponse.SC_OK);
- jRequest.setHandled(true);
+ jRequest.setHandled(true);
+ ecomplogger.recordAuditEventEnd();
}
private void setResponseHeaders(HttpServletResponse response) {
@@ -161,6 +178,26 @@ public class Jetty8Server {
}
}
}
+
+ private void handleError(Request jRequest, HttpServletResponse response, EcompMessageEnum msg, String... args) throws IOException {
+ try {
+ ecomplogger.warn(msg, args);
+ ecomplogger.recordAuditEventEnd(StatusCodeEnum.ERROR, msg, args);
+ String s = EELFResourceManager.getIdentifier(msg);
+ // Assume s ends in something like 4015W
+ int httpErrorCode = 501;
+ try {
+ String error = s.substring(s.length()-5,s.length()-2);
+ httpErrorCode = Integer.parseInt(error);
+ } catch (Exception e) {
+ }
+ response.sendError(httpErrorCode, EELFResourceManager.format(msg,args));
+ } catch (Exception e) {
+ ManagementServerUtils.printStackTrace(e);
+ response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,e.getMessage());
+ }
+ jRequest.setHandled(true);
+ }
private JSONObject req2context(String contextPath, Request jRequest, String user) {
JSONObject c = new JSONObject();
@@ -195,10 +232,10 @@ public class Jetty8Server {
f.setTrustStore(props.getProperty("server.trustStore"));
f.setTrustStorePassword(props.getProperty("server.trustStorePassword"));
logger.info("HTTPS excluded protocols: " + Arrays.asList(f.getExcludeProtocols()));
- f.addExcludeProtocols("SSLv1","SSLv2","SSLv3");
+ f.addExcludeProtocols("SSLv1", "SSLv2", "SSLv3");
logger.info("HTTPS excluded protocols after fix: " + Arrays.asList(f.getExcludeProtocols()));
SslSelectChannelConnector c = new SslSelectChannelConnector(f);
- c.setPort(port);
+ c.setPort(port);
c.setMaxIdleTime(30000);
server.addConnector(c);
conn1 = c;
@@ -221,19 +258,21 @@ public class Jetty8Server {
logger.info("Adding HTTP on secondary port: " + port);
}
} catch (Exception e) {
- // TODO Auto-generated catch block
ManagementServerUtils.printStackTrace(e);
}
}
-
+
/**
- * In unit testing, we want to start on an operating system selected port number, so we configure a port number of 0, and then use this to find out the real port number
+ * In unit testing, we want to start on an operating system selected port
+ * number, so we configure a port number of 0, and then use this to find out
+ * the real port number
*/
public int getPort() {
- return(actualport);
+ return (actualport);
}
+
/**
- * In unit testing, we want to shut down the server
+ * In unit testing, we want to shut down the server
*/
public void stop() {
try {
@@ -256,7 +295,6 @@ public class Jetty8Server {
actualport = conn1.getLocalPort();
server.join();
} catch (Exception e) {
- // TODO Auto-generated catch block
ManagementServerUtils.printStackTrace(e);
}
}
@@ -273,7 +311,7 @@ public class Jetty8Server {
class DummyRequestHandler implements IRequestHandler {
@Override
public Object handleJson(String userName, String action, String resourcePath, JSONObject json,
- JSONObject context) {
+ JSONObject context, String clientVersion) {
logger.debug("handleJson: user=" + userName + " action=" + action + " path=" + resourcePath + " json="
+ json);
return null;
@@ -300,7 +338,6 @@ public class Jetty8Server {
actualport = conn1.getLocalPort();
server.join();
} catch (Exception e) {
- // TODO Auto-generated catch block
ManagementServerUtils.printStackTrace(e);
}
}
@@ -334,7 +371,7 @@ public class Jetty8Server {
String pw2 = props.getProperty("server.user." + user);
boolean valid = pw.equals(JavaHttpClient.decryptPassword(pw2));
if (!valid)
- logger.warn("Authorization: bad PW: " + user +"@" + r.getRemoteAddr() + " " + pw.substring(0, 2));
+ logger.warn("Authorization: bad PW: " + user + "@" + r.getRemoteAddr() + " " + pw.substring(0, 2));
return valid ? user : null;
}