/**
* Copyright 2012 Comcast Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.comcast.cqs.controller;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import com.amazonaws.services.sqs.model.GetQueueAttributesRequest;
import com.amazonaws.services.sqs.model.GetQueueAttributesResult;
import com.amazonaws.services.sqs.model.SetQueueAttributesRequest;
import com.comcast.cmb.common.controller.AdminServletBase;
import com.comcast.cmb.common.controller.CMBControllerServlet;
import com.comcast.cmb.common.util.CMBProperties;
import com.comcast.cqs.util.Util;
public class CQSEditQueueAttributePage extends AdminServletBase {
private static final long serialVersionUID = 1L;
private static Logger logger = Logger.getLogger(CQSEditQueueAttributePage.class);
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if (redirectUnauthenticatedUser(request, response)) {
return;
}
CMBControllerServlet.valueAccumulator.initializeAllCounters();
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String userId = request.getParameter("userId");
Map<?, ?> params = request.getParameterMap();
String queueName = request.getParameter("queueName");
String queueUrl = Util.getAbsoluteQueueUrlForName(queueName, userId);
connect(request);
out.println("<html>");
simpleHeader(request, out, "View/Edit Queue Attributes");
if (params.containsKey("Update")) {
String visibilityTimeout = request.getParameter("visibilityTimeout");
String maximumMessageSize = request.getParameter("maximumMessageSize");
String messageRetentionPeriod = request.getParameter("messageRetentionPeriod");
String delaySeconds = request.getParameter("delaySeconds");
String receiveMessageWaitTimeSeconds = request.getParameter("receiveMessageWaitTimeSeconds");
String numberOfPartitions = request.getParameter("numberOfPartitions");
String numberOfShards = request.getParameter("numberOfShards");
String isCompressed = request.getParameter("isCompressed");
try {
Map<String, String> attributes = new HashMap<String, String>();
if (visibilityTimeout != null && !visibilityTimeout.equals("")) {
attributes.put("VisibilityTimeout", visibilityTimeout);
}
if (maximumMessageSize != null && !maximumMessageSize.equals("")) {
attributes.put("MaximumMessageSize", maximumMessageSize);
}
if (messageRetentionPeriod != null && !messageRetentionPeriod.equals("")) {
attributes.put("MessageRetentionPeriod", messageRetentionPeriod);
}
if (delaySeconds != null && !delaySeconds.equals("")) {
attributes.put("DelaySeconds", delaySeconds);
}
if (receiveMessageWaitTimeSeconds != null && !receiveMessageWaitTimeSeconds.equals("")) {
attributes.put("ReceiveMessageWaitTimeSeconds", receiveMessageWaitTimeSeconds);
}
if (numberOfPartitions != null && !numberOfPartitions.equals("")) {
attributes.put("NumberOfPartitions", numberOfPartitions);
}
if (numberOfPartitions != null && !numberOfPartitions.equals("")) {
attributes.put("NumberOfShards", numberOfShards);
}
if (isCompressed != null && !isCompressed.equals("")) {
attributes.put("IsCompressed", isCompressed);
}
SetQueueAttributesRequest setQueueAttributesRequest = new SetQueueAttributesRequest(queueUrl, attributes);
sqs.setQueueAttributes(setQueueAttributesRequest);
logger.debug("event=set_queue_attributes queue_ulr=" + queueUrl + " user_id= " + userId);
} catch (Exception ex) {
logger.error("event=set_queue_attributes queue_ulr=" + queueUrl + " user_id= " + userId, ex);
throw new ServletException(ex);
}
out.println("<body onload='javascript:window.opener.location.reload();window.close();'>");
} else {
String visibilityTimeout = "";
String maximumMessageSize = "";
String messageRetentionPeriod = "";
String delaySeconds = "";
String receiveMessageWaitTimeSeconds = "";
String numberOfPartitions = "";
String numberOfShards = "";
String isCompressed = "";
if (queueUrl != null) {
Map<String, String> attributes = null;
try {
GetQueueAttributesRequest getQueueAttributesRequest = new GetQueueAttributesRequest(queueUrl);
getQueueAttributesRequest.setAttributeNames(Arrays.asList("VisibilityTimeout", "MaximumMessageSize", "MessageRetentionPeriod", "DelaySeconds", "ReceiveMessageWaitTimeSeconds", "NumberOfPartitions", "NumberOfShards", "IsCompressed"));
GetQueueAttributesResult getQueueAttributesResult = sqs.getQueueAttributes(getQueueAttributesRequest);
attributes = getQueueAttributesResult.getAttributes();
visibilityTimeout = attributes.get("VisibilityTimeout");
maximumMessageSize = attributes.get("MaximumMessageSize");
messageRetentionPeriod = attributes.get("MessageRetentionPeriod");
delaySeconds = attributes.get("DelaySeconds");
receiveMessageWaitTimeSeconds = attributes.get("ReceiveMessageWaitTimeSeconds");
numberOfPartitions = attributes.get("NumberOfPartitions");
numberOfShards = attributes.get("NumberOfShards");
isCompressed = attributes.get("IsCompressed");
} catch (Exception ex) {
logger.error("event=failed_to_get_attributes queue_url=" + queueUrl, ex);
throw new ServletException(ex);
}
}
out.println("<body>");
out.println("<h1>View/Edit Queue Attributes</h1>");
out.println("<h3>"+queueUrl+"</h3>");
out.println("<form action=\"/webui/cqsuser/editqueueattributes?queueName="+queueName+"\" method=POST>");
out.println("<input type='hidden' name='userId' value='"+ userId +"'>");
out.println("<table>");
out.println("<tr><td colspan=2><b><font color='orange'>Queue Attributes</font></b></td></tr>");
out.println("<tr><td colspan=2><b>Apply these attributes to the queue:</b></td></tr>");
out.println("<tr><td>Visibility Timeout:</td><td><input type='text' name='visibilityTimeout' size='50' value='" + visibilityTimeout + "'></td></tr>");
out.println("<tr><td> </td><td><I><font color='grey'>Default "+CMBProperties.getInstance().getCQSVisibilityTimeOut()+" sec</font></I></td></tr>");
out.println("<tr><td>Maximum Message Size:</td><td><input type='text' name='maximumMessageSize' size='50' value='" + maximumMessageSize + "'></td></tr>");
out.println("<tr><td> </td><td><I><font color='grey'>Default "+CMBProperties.getInstance().getCQSMaxMessageSize()+" bytes</font></I></td></tr>");
out.println("<tr><td>Message Retention Period:</td><td><input type='text' name='messageRetentionPeriod' size='50' value='" + messageRetentionPeriod + "'></td></tr>");
out.println("<tr><td> </td><td><I><font color='grey'>Default "+CMBProperties.getInstance().getCQSMessageRetentionPeriod()+" sec</font></I></td></tr>");
out.println("<tr><td>Delay Seconds:</td><td><input type='text' name='delaySeconds' size='50' value='" + delaySeconds + "'></td></tr>");
out.println("<tr><td> </td><td><I><font color='grey'>Default "+CMBProperties.getInstance().getCQSMessageDelaySeconds()+" sec</font></I></td></tr>");
out.println("<tr><td>Receive Message Wait Time Seconds:</td><td><input type='text' name='receiveMessageWaitTimeSeconds' size='50' value='" + receiveMessageWaitTimeSeconds + "'></td></tr>");
out.println("<tr><td> </td><td><I><font color='grey'>Default 0 sec, max 20 sec</font></I></td></tr>");
out.println("<tr><td>Number Of Partitions:</td><td><input type='text' name='numberOfPartitions' size='50' value='" + numberOfPartitions + "'></td></tr>");
out.println("<tr><td> </td><td><I><font color='grey'>Default 100, minimum 1 partition(s)</font></I></td></tr>");
out.println("<tr><td>Number Of Shards:</td><td><input type='text' name='numberOfShards' size='50' value='" + numberOfShards + "'></td></tr>");
out.println("<tr><td> </td><td><I><font color='grey'>Default 1, maximum 100 shards</font></I></td></tr>");
out.println("<tr><td>Compressed:</td><td><input type='text' name='isCompressed' size='50' value='" + isCompressed + "'></td></tr>");
out.println("<tr><td> </td><td><I><font color='grey'>Valid values: true or false</font></I></td></tr>");
out.println("<tr><td> </td><td> </td></tr>");
out.println("<tr><td colspan=2><hr/></td></tr>");
out.println("<tr><td colspan=2 align=right><input type='button' onclick='window.close()' value='Cancel'><input type='submit' name='Update' value='Update'></td></tr></table></form>");
}
out.println("</body></html>");
CMBControllerServlet.valueAccumulator.deleteAllCounters();
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}