/*******************************************************************************
* Copyright (c) 2014, 2015 IBM Corporation and others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.orion.server.cf.loggregator;
import java.util.Comparator;
import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;
import org.json.JSONArray;
public class LoggregatorListener {
private SortedSet<LoggregatorMessage.Message> messages;
private long lastAccess;
public void add(LoggregatorMessage.Message msg) {
if (messages == null) {
Comparator<LoggregatorMessage.Message> comparator = new Comparator<LoggregatorMessage.Message>() {
public int compare(LoggregatorMessage.Message o1, LoggregatorMessage.Message o2) {
if (o1.getTimestamp() < o2.getTimestamp())
return -1;
else if (o1.getTimestamp() > o2.getTimestamp())
return 1;
else
return 0;
}
};
messages = new TreeSet<LoggregatorMessage.Message>(comparator);
}
messages.add(msg);
lastAccess = System.currentTimeMillis();
}
/**
* @return the lastTimestamp
*/
public long getLastTimestamp() {
if (messages != null)
return messages.last().getTimestamp();
return -1;
}
public long getLastAccess() {
return lastAccess;
}
public JSONArray getMessagesJSON(Long timestamp) {
JSONArray messagesJSON = new JSONArray();
if (messages != null) {
for (Iterator<LoggregatorMessage.Message> iterator = messages.iterator(); iterator.hasNext();) {
LoggregatorMessage.Message loggregatorMessage = iterator.next();
if (timestamp == -1 || loggregatorMessage.getTimestamp() > timestamp) {
String message = loggregatorMessage.getMessage().toStringUtf8();
messagesJSON.put(message);
}
}
}
lastAccess = System.currentTimeMillis();
return messagesJSON;
}
public String getString(Long timestamp) {
StringBuffer buff = new StringBuffer();
if (messages != null) {
for (Iterator<LoggregatorMessage.Message> iterator = messages.iterator(); iterator.hasNext();) {
LoggregatorMessage.Message loggregatorMessage = iterator.next();
if (timestamp == -1 || loggregatorMessage.getTimestamp() > timestamp) {
String message = loggregatorMessage.getMessage().toStringUtf8();
buff.append(message).append("\n");
}
}
}
lastAccess = System.currentTimeMillis();
return buff.toString();
}
}