private ElasticsearchDocument document(MessageMetadata message, long createdAt, SentMessageTraceStatus status) { return build(() -> notEndedDocument(message, createdAt, status.toString()).endObject()); }
@Override public List<SentMessageTrace> getLastUndeliveredMessages(String topicName, String subscriptionName, int limit) { SearchResponse response = searchSentMessages(limit, SortOrder.DESC, boolQuery() .must(termQuery(TOPIC_NAME, topicName)) .must(termQuery(SUBSCRIPTION, subscriptionName)) .must(termQuery(STATUS, SentMessageTraceStatus.DISCARDED.name()))); return stream(response.getHits().getHits()) .map(hit -> toMessageTrace(hit, SentMessageTrace.class)) .collect(toList()); }
private SentMessageTrace convertToSentMessage(DBObject rawObject) { BasicDBObject object = (BasicDBObject) rawObject; return new SentMessageTrace( object.getString(MESSAGE_ID), object.getString(BATCH_ID), object.getLong(TIMESTAMP), object.getString(SUBSCRIPTION), object.getString(TOPIC_NAME), SentMessageTraceStatus.valueOf(object.getString(STATUS)), object.getString(REASON), null, object.getInt(PARTITION, -1), object.getLong(OFFSET, -1), object.getString(CLUSTER, "") ); }
private SentMessageTrace convert(DBObject rawObject) { BasicDBObject object = (BasicDBObject) rawObject; return new SentMessageTrace( object.getString(MESSAGE_ID), object.getString(BATCH_ID), object.getLong(TIMESTAMP), object.getString(LogSchemaAware.SUBSCRIPTION), object.getString(TOPIC_NAME), SentMessageTraceStatus.valueOf(object.getString(STATUS)), object.getString(REASON), null, object.getInt(PARTITION, -1), object.getLong(OFFSET, -1), object.getString(CLUSTER, "") ); } }
@Override public void logSuccessful(MessageMetadata message, String hostname, long timestamp) { queue.offer(build(() -> notEndedDocument(message, timestamp, SUCCESS.toString()) .field(REMOTE_HOSTNAME, hostname) .endObject())); }
@Override public void logFailed(MessageMetadata message, String hostname, long timestamp, String reason) { queue.offer(build(() -> notEndedDocument(message, timestamp, FAILED.toString()) .field(REASON, reason) .field(REMOTE_HOSTNAME, hostname) .endObject())); }
private ElasticsearchDocument document(MessageMetadata message, long timestamp, SentMessageTraceStatus status, String reason) { return build(() -> notEndedDocument(message, timestamp, status.toString()).field(REASON, reason).endObject()); }
@Override public List<SentMessageTrace> getLastUndeliveredMessages(String topicName, String subscriptionName, int limit) { try ( DBCursor cursor = database.getCollection(COLLECTION_SENT_NAME).find( new BasicDBObject(TOPIC_NAME, topicName) .append(SUBSCRIPTION, subscriptionName) .append(STATUS, SentMessageTraceStatus.DISCARDED.toString()) ).sort(new BasicDBObject(TIMESTAMP, -1)) .limit(limit) ) { return StreamSupport.stream(cursor.spliterator(), false) .map(this::convertToSentMessage) .collect(Collectors.toList()); } }
private List<SentMessageTrace> getLastUndeliveredMessages(String topicName, String subscriptionName, SentMessageTraceStatus status) { try ( DBCursor cursor = database.getCollection(COLLECTION_SENT_NAME) .find(new BasicDBObject(TOPIC_NAME, topicName) .append(LogSchemaAware.SUBSCRIPTION, subscriptionName).append(STATUS, status.toString())) .sort(new BasicDBObject(TIMESTAMP, -1)).limit(1) ) { return StreamSupport.stream(cursor.spliterator(), false) .map(this::convert) .collect(Collectors.toList()); } }
private BasicDBObject subscriptionLog(MessageMetadata message, long timestamp, SentMessageTraceStatus status) { return new BasicDBObject() .append(MESSAGE_ID, message.getMessageId()) .append(BATCH_ID, message.getBatchId()) .append(TIMESTAMP, timestamp) .append(PUBLISH_TIMESTAMP, message.getPublishingTimestamp()) .append(TOPIC_NAME, message.getTopic()) .append(SUBSCRIPTION, message.getSubscription()) .append(PARTITION, message.getPartition()) .append(OFFSET, message.getOffset()) .append(STATUS, status.toString()) .append(CLUSTER, clusterName) .append(SOURCE_HOSTNAME, hostname); } }
private BoolQueryBuilder getMessageFilter(String topic, String subscription, String id, SentMessageTraceStatus status) { return boolQuery() .must(termQuery(TOPIC_NAME, topic)) .must(termQuery(SUBSCRIPTION, subscription)) .must(termQuery(MESSAGE_ID, id)) .must(termQuery(STATUS, status.toString())) .must(termQuery(CLUSTER, CLUSTER_NAME)); }