Examples of CQSHttpServletRequest


Examples of com.comcast.cqs.controller.CQSHttpServletRequest

     * @param asyncContext
     */
  @Override
  public boolean doAction(User user, AsyncContext asyncContext) throws Exception {
   
        CQSHttpServletRequest request = (CQSHttpServletRequest)asyncContext.getRequest();
        HttpServletResponse response = (HttpServletResponse)asyncContext.getResponse();
   
    if (cnsInternalUser == null) {

      IUserPersistence userHandler = PersistenceFactory.getUserPersistence();
          cnsInternalUser = userHandler.getUserByName(CMBProperties.getInstance().getCNSUserName());

          if (cnsInternalUser == null) {           
            cnsInternalUser =  userHandler.createDefaultUser();
          }
    }
   
    if (awsCredentials == null) {
          awsCredentials = new BasicAWSCredentials(cnsInternalUser.getAccessKey(), cnsInternalUser.getAccessSecret());
    }
   
    if (sqs == null) {
            sqs = new AmazonSQSClient(awsCredentials);
            sqs.setEndpoint(CMBProperties.getInstance().getCQSServiceUrl());
    }
   
      String userId = user.getUserId();
      String message = request.getParameter("Message");
      String topicArn = request.getParameter("TopicArn");

      String messageStructure = null;
      String subject = null;
     
      CNSMessage cnsMessage = new CNSMessage();
      cnsMessage.generateMessageId();
      cnsMessage.setTimestamp(new Date());
      cnsMessage.setMessage(message);
     
      //TODO: optional shortcut
     
      if (request.getParameter("MessageStructure") != null) {
       
        messageStructure = request.getParameter("MessageStructure");    
       
        if (!messageStructure.equals("json")) {
          logger.error("event=cns_publish error_code=InvalidParameters message=" + message + " message_structure=" + messageStructure + " topic_arn=" + topicArn + " user_id=" + userId);
          throw new CMBException(CNSErrorCodes.CNS_InvalidParameter,"Invalid parameter: Invalid Message Structure parameter: " + messageStructure);
        }
       
        cnsMessage.setMessageStructure(CNSMessage.CNSMessageStructure.valueOf(messageStructure));
    }
     
      if (request.getParameter("Subject") != null) {
        subject = request.getParameter("Subject");
        cnsMessage.setSubject(subject);
    }
     
      if ((userId == null) || (message == null)) {
        logger.error("event=cns_publish error_code=InvalidParameters message=" + message + " topic_arn=" + topicArn + " user_id=" + userId);
      throw new CMBException(CNSErrorCodes.CNS_ValidationError,"1 validation error detected: Value null at 'message' failed to satisfy constraint: Member must not be null");
      }
     
    if ((topicArn == null) || !Util.isValidTopicArn(topicArn)) {
      logger.error("event=cns_publish error_code=InvalidParameters message=" + message + " topic_arn=" + topicArn + " user_id=" + userId);
      throw new CMBException(CNSErrorCodes.CNS_InvalidParameter,"TopicArn");
      }
   
    CNSTopic topic = CNSCache.getTopic(topicArn);
   
      if (topic == null) {
        logger.error("event=cns_publish error_code=NotFound message=" + message + " topic_arn=" + topicArn + " user_id=" + userId);
      throw new CMBException(CNSErrorCodes.CNS_NotFound,"Resource not found.");
      }
   
      cnsMessage.setUserId(topic.getUserId());
      cnsMessage.setTopicArn(topicArn);
      cnsMessage.setMessageType(CNSMessageType.Notification);
     
      cnsMessage.checkIsValid();
     
      CNSTopicAttributes topicAttributes = CNSCache.getTopicAttributes(topicArn);
      List<String> receiptHandles = new ArrayList<String>();
     
      boolean success = true;
     
      if (topicAttributes != null && topicAttributes.getSubscriptionsConfirmed() == 0) {
       
        // optimization: don't do anything if there are no confirmed subscribers
       
        logger.warn("event=no_confirmed_subscribers action=publish topic_arn=" + topicArn);
     
      } else if (CMBProperties.getInstance().isCNSBypassPublishJobQueueForSmallTopics() && topicAttributes != null && topicAttributes.getSubscriptionsConfirmed() <= CMBProperties.getInstance().getCNSMaxSubscriptionsPerEndpointPublishJob()) {
       
        // optimization: if there's only one chunk due to few subscribers, write directly into endpoint publish queue bypassing the publish job queue
       
        logger.debug("event=using_job_queue_overpass");
       
        List<CNSEndpointPublishJob.CNSEndpointSubscriptionInfo> subscriptions = CNSEndpointPublisherJobProducer.getSubscriptionsForTopic(topicArn);
       
            if (subscriptions != null && subscriptions.size() > 0) {
             
                List<CNSEndpointPublishJob> epPublishJobs = CNSEndpointPublisherJobProducer.createEndpointPublishJobs(cnsMessage, subscriptions);
               
                if (epPublishJobs.size() != 1) {
                  logger.warn("event=unexpected_number_of_endpoint_publish_jobs count=" + epPublishJobs.size());
                }
               
                for (CNSEndpointPublishJob epPublishJob: epPublishJobs) {
                String handle = sendMessageOnRandomShardAndCreateQueueIfAbsent(CNS_ENDPOINT_QUEUE_NAME_PREFIX, CMBProperties.getInstance().getCNSNumEndpointPublishJobQueues(), epPublishJob.serialize(), cnsInternalUser.getUserId());
                if (handle != null && !handle.equals("")) {
                  receiptHandles.add(handle);
                } else {
                  success = false;
                }
                }
            }
       
      } else {
     
        // otherwise pick publish job queue

        logger.debug("event=going_through_job_queue_town_center");
       
        String handle = sendMessageOnRandomShardAndCreateQueueIfAbsent(CNS_PUBLISH_QUEUE_NAME_PREFIX, CMBProperties.getInstance().getCNSNumPublishJobQueues(), cnsMessage.serialize(), cnsInternalUser.getUserId());
        if (handle != null && !handle.equals("")) {
          receiptHandles.add(handle);
        } else {
          success = false;
        }
      } 
     
      if (!success) {
        throw new CMBException(CMBErrorCodes.InternalError, "Failed to place message on internal cns queue");
      }
     
      request.setReceiptHandles(receiptHandles);
     
      String out = CNSSubscriptionPopulator.getPublishResponse(receiptHandles);
        writeResponse(out, response);
     
      return true;
View Full Code Here

Examples of com.comcast.cqs.controller.CQSHttpServletRequest

     *
     * @return Null if no parameters were present, otherwise the encoded query
     *         string for the parameters present in the specified request.
     */
    public static String encodeParameters(HttpServletRequest request) {
      CQSHttpServletRequest wrappedRequest=(CQSHttpServletRequest)request;
        List<NameValuePair> nameValuePairs = null;
        String parameterName=null;
        if (wrappedRequest.getPostParameterNames().hasMoreElements()) {
            nameValuePairs = new ArrayList<NameValuePair>();
            while (wrappedRequest.getPostParameterNames().hasMoreElements()) {
              parameterName=wrappedRequest.getPostParameterNames().nextElement();
                nameValuePairs.add(new BasicNameValuePair(parameterName,
                    wrappedRequest.getPostParameter(parameterName)));
            }
        }

        String encodedParams = "";
        if (nameValuePairs != null) {
View Full Code Here

Examples of com.comcast.cqs.controller.CQSHttpServletRequest

    return "event=raw_request url="  + request.getRequestURL() + "/" + this.getUrlQueryString(asyncContext);
  }

  private void handleRequest(AsyncContext asyncContext) throws ServletException, IOException

    CQSHttpServletRequest request = (CQSHttpServletRequest)asyncContext.getRequest();
    HttpServletResponse response = (HttpServletResponse)asyncContext.getResponse();

    User user = null;
    String action = request.getParameter("Action");
    long ts1 = System.currentTimeMillis();

    try {

      valueAccumulator.initializeAllCounters();
     
      valueAccumulator.addToCounter(AccumulatorName.AsyncQueueTime, System.currentTimeMillis()-request.getRequestReceivedTimestamp());

      initRequest();
      response.setContentType("text/xml");

      if (!isValidAction(action)) {
        logger.warn("event=invalid_action action=" + action + " url=" + request.getRequestURL());
        String errXml = createErrorResponse(CMBErrorCodes.InvalidAction.getCMBCode(), action + " is not a valid action");
        response.setStatus(CMBErrorCodes.InvalidAction.getHttpCode());
        response.getWriter().println(errXml);
        return;
      }

      if (isAuthenticationRequired(action)) {
        user = authModule.authenticateByRequest(request);
      } else {
        user = null;
      }

      long ts3 = System.currentTimeMillis();

      valueAccumulator.addToCounter(AccumulatorName.CMBControllerPreHandleAction, (ts3 - ts1));
      handleAction(action, user, asyncContext);
      response.setStatus(200);
      long ts2 = System.currentTimeMillis();
      //if it is waiting for long poll receive, do not log now. Wait till asyn request finished.
      if(request.getAttribute("lp")==null){
        String logLine = getLogLine(asyncContext, request, user, ts2-ts1, "ok");
        logger.info(logLine);
      }
      //String rawRequest = this.getFullRequestUrl(asyncContext);
      //logger.info(rawRequest);
View Full Code Here

Examples of com.comcast.cqs.controller.CQSHttpServletRequest

    if (!request.isAsyncSupported()) {
      throw new ServletException("Servlet container does not support asynchronous calls");
    }
   
    HttpServletRequest wrappedRequest = new CQSHttpServletRequest(request);
    final AsyncContext asyncContext = request.startAsync(wrappedRequest, response);

    // jetty appears to require calling setTimeout on http handler thread so we are setting
    // wait time seconds for long polling receive message here
    String actionParam = wrappedRequest.getParameter("Action");
    String waitTimeSecondsParam = wrappedRequest.getParameter(CQSConstants.WAIT_TIME_SECONDS);

    if (actionParam != null && actionParam.equals("ReceiveMessage") && waitTimeSecondsParam != null) {

      try {

        int waitTimeSeconds = Integer.parseInt(waitTimeSecondsParam);

        if (waitTimeSeconds >= 1 && waitTimeSeconds <= CMBProperties.getInstance().getCMBRequestTimeoutSec()) {
          asyncContext.setTimeout(waitTimeSeconds*1000);
          ((CQSHttpServletRequest)asyncContext.getRequest()).setWaitTime(waitTimeSeconds*1000);
          logger.debug("event=set_message_timeout secs=" + waitTimeSeconds);
        }

      } catch (Exception ex) {
        logger.warn("event=ignoring_suspicious_wait_time_parameter value=" + waitTimeSecondsParam);
      }

    } else if (actionParam != null && actionParam.equals("ReceiveMessage")) {

      String queueUrl = com.comcast.cqs.util.Util.getRelativeForAbsoluteQueueUrl(request.getRequestURL().toString());
      CQSQueue queue;
      int waitTimeSeconds = 0;

      try {

        queue = CQSCache.getCachedQueue(queueUrl);

        if (queue != null && queue.getReceiveMessageWaitTimeSeconds() > 0) {
          waitTimeSeconds = queue.getReceiveMessageWaitTimeSeconds();
        }

      } catch (Exception ex) {
        logger.warn("event=lookup_queue queue_url=" + queueUrl, ex);
      }

      if (waitTimeSeconds > 0) {
        asyncContext.setTimeout(waitTimeSeconds*1000);
        ((CQSHttpServletRequest)asyncContext.getRequest()).setWaitTime(waitTimeSeconds*1000);
        logger.debug("event=set_queue_timeout secs=" + waitTimeSeconds + " queue_url=" + queueUrl);
      } else {
        asyncContext.setTimeout(HARD_TIMEOUT_SEC*1000);
        logger.debug("event=set_default_timeout secs="+CMBProperties.getInstance().getCMBRequestTimeoutSec());
      }

    } else {
      asyncContext.setTimeout(HARD_TIMEOUT_SEC*1000);
      logger.debug("event=set_default_timeout secs=" + CMBProperties.getInstance().getCMBRequestTimeoutSec());
    }

    asyncContext.addListener(new AsyncListener() {

      @Override
      public void onComplete(AsyncEvent asyncEvent) throws IOException {

        AsyncContext asyncContext = asyncEvent.getAsyncContext();
        CQSHttpServletRequest request = (CQSHttpServletRequest)asyncContext.getRequest();
        String action = request.getParameter("Action");
        if(action.equals("ReceiveMessage")){
          String lpValue = (String)request.getAttribute("lp");

          if(lpValue!=null){

            User user = authModule.getUserByRequest(request);

            Object lp_ms = request.getAttribute("lp_ms");
            String logLine = null;
            if(lp_ms!=null){
              logLine = getLogLine(asyncContext, request, user, (Long)request.getAttribute("lp_ms"), "ok");
            }else{
              logLine = getLogLine(asyncContext, request, user, 0, "ok");
            }
            logger.info(logLine);
          }
        }
       
      }

      @Override
      public void onError(AsyncEvent asyncEvent) throws IOException {

        int httpCode = CMBErrorCodes.InternalError.getHttpCode();
        String code = CMBErrorCodes.InternalError.getCMBCode();
        String message = "There is an internal problem with CMB";

        if (asyncEvent.getThrowable() instanceof CMBException) {
          httpCode = ((CMBException)asyncEvent.getThrowable()).getHttpCode();
          code = ((CMBException)asyncEvent.getThrowable()).getCMBCode();
          message = asyncEvent.getThrowable().getMessage();
        }

        String errXml = CMBControllerServlet.createErrorResponse(code, message);
        HttpServletResponse response = ((HttpServletResponse)asyncEvent.getSuppliedResponse());
        response.setStatus(httpCode);
        Action.writeResponse(errXml, response);

        if (!(asyncEvent.getSuppliedRequest() instanceof CQSHttpServletRequest)) {
          logger.error("event=invalid_request stage=on_error");
          return;
        }         

        CQSQueue queue = ((CQSHttpServletRequest)asyncEvent.getSuppliedRequest()).getQueue();
        AsyncContext asyncContext = asyncEvent.getAsyncContext();

        if (queue != null) {

          logger.info("event=on_error queue_url=" + queue.getAbsoluteUrl());

          ConcurrentLinkedQueue<AsyncContext> queueContextsList = CQSLongPollReceiver.contextQueues.get(queue.getArn());

          if (queueContextsList != null && asyncContext != null) {
            queueContextsList.remove(asyncContext);
          }

        } else {
          logger.info("event=on_error");
        }

        asyncContext.complete();
      }

      @Override
      public void onTimeout(AsyncEvent asyncEvent) throws IOException {
       
        if (!(asyncEvent.getSuppliedRequest() instanceof CQSHttpServletRequest)) {
          logger.error("event=invalid_request stage=on_timeout");
          return;
        }
       
        //first check if it is long poll receive, if so, complete and return.
        AsyncContext asyncContext = asyncEvent.getAsyncContext();
        CQSHttpServletRequest request = (CQSHttpServletRequest)asyncContext.getRequest();
        String action = request.getParameter("Action");
        if(action.equals("ReceiveMessage")){
          String lpValue = (String)request.getAttribute("lp");
          if(lpValue!=null){
            String out = CQSMessagePopulator.getReceiveMessageResponseAfterSerializing(new ArrayList<CQSMessage>(), new ArrayList<String>());
            asyncEvent.getSuppliedResponse().getWriter().println(out);
           
            CQSQueue queue = ((CQSHttpServletRequest)asyncEvent.getSuppliedRequest()).getQueue();
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.