package org.opentripplanner.analyst.cluster;

import com.amazonaws.handlers.AsyncHandler;
import com.amazonaws.services.sqs.AmazonSQSAsync;
import com.amazonaws.services.sqs.AmazonSQSAsyncClient;
import com.amazonaws.services.sqs.buffered.AmazonSQSBufferedAsyncClient;
import com.amazonaws.services.sqs.model.SendMessageRequest;
import com.amazonaws.services.sqs.model.SendMessageResult;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * A Task Statistics Store that throws things into SQS.
 */
public class SQSTaskStatisticsStore implements TaskStatisticsStore {
    private static final Logger LOG = LoggerFactory.getLogger(SQSTaskStatisticsStore.class);

    private String queueUrl;

    private ObjectMapper objectMapper = new ObjectMapper();

    private AmazonSQSAsync sqs = new AmazonSQSBufferedAsyncClient(new AmazonSQSAsyncClient());

    /** create a task statistics store for the given queue name */
    public SQSTaskStatisticsStore(String queueName) {
        try {
            queueUrl = sqs.getQueueUrl(queueName).getQueueUrl();
        } catch (Exception e) {
            LOG.error("Unable to initialize statistics store", e);
        }
        LOG.info("Sending statistics to SQS queue {}", queueName);
    }

    public void store (TaskStatistics ts) {
        try {
            String json = objectMapper.writeValueAsString(ts);

            SendMessageRequest req = new SendMessageRequest();
            req.setMessageBody(json);
            req.setQueueUrl(queueUrl);

            sqs.sendMessageAsync(req, new AsyncHandler<SendMessageRequest, SendMessageResult>() {
                @Override public void onError(Exception e) {
                    LOG.error("Error saving stats to SQS", e);
                }

                @Override public void onSuccess(SendMessageRequest request,
                        SendMessageResult sendMessageResult) {
                    /* do nothing */
                }
            });
        } catch (Exception e) {
            LOG.error("Error saving stats to SQS", e);
        }
    }
}

package org.opentripplanner.analyst.cluster;

import com.amazonaws.handlers.AsyncHandler;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.sqs.AmazonSQSAsync;
import com.amazonaws.services.sqs.AmazonSQSAsyncClient;
import com.amazonaws.services.sqs.buffered.AmazonSQSBufferedAsyncClient;
import com.amazonaws.services.sqs.model.SendMessageRequest;
import com.amazonaws.services.sqs.model.SendMessageResult;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * A Task Statistics Store that throws things into SQS.
 */
public class SQSTaskStatisticsStore implements TaskStatisticsStore {
    private static final Logger LOG = LoggerFactory.getLogger(SQSTaskStatisticsStore.class);

    private String queueUrl;

    private ObjectMapper objectMapper = new ObjectMapper();

    private AmazonSQSAsync sqs = new AmazonSQSBufferedAsyncClient(new AmazonSQSAsyncClient());

    /** create a task statistics store for the given queue name */
    public SQSTaskStatisticsStore(String queueName) {
        Region current = Regions.getCurrentRegion();

        if (current != null)
            sqs.setRegion(current);

        try {
            queueUrl = sqs.getQueueUrl(queueName).getQueueUrl();
        } catch (Exception e) {
            LOG.error("Unable to initialize statistics store", e);
        }
        LOG.info("Sending statistics to SQS queue {}", queueName);
    }

    public void store (TaskStatistics ts) {
        try {
            String json = objectMapper.writeValueAsString(ts);

            SendMessageRequest req = new SendMessageRequest();
            req.setMessageBody(json);
            req.setQueueUrl(queueUrl);

            sqs.sendMessageAsync(req, new AsyncHandler<SendMessageRequest, SendMessageResult>() {
                @Override public void onError(Exception e) {
                    LOG.error("Error saving stats to SQS", e);
                }

                @Override public void onSuccess(SendMessageRequest request,
                        SendMessageResult sendMessageResult) {
                    /* do nothing */
                }
            });
        } catch (Exception e) {
            LOG.error("Error saving stats to SQS", e);
        }
    }
}

set region appropriately on SQS stats store, fixes #2094.