package rfx.server.util;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import rfx.server.configs.HttpServerConfigs;
import kafka.producer.KeyedMessage;
public class PersistentLogQueue {
static final String TAG = PersistentLogQueue.class.getSimpleName();
static final int POOL_MAX = HttpServerConfigs.load().getKafkaProducerList().size();
static Map<String, PersistentQueue> persistentQueuePool = new HashMap<String, PersistentQueue>(POOL_MAX);
final public static int MAX_QUEUE_SIZE = 500000;
final static String NAME = "analytics-log-queue";
static {
File d = new File(NAME);
if( ! d.isDirectory() ){
if( ! d.mkdir() ){
System.err.println("Can not create dir:"+NAME);
Utils.exit(200);
}
}
}
static File createTempSubdir(String name,boolean cleanExistedFiles){
File d = new File(name);
if( ! d.isDirectory() ){
d.mkdir();
} else {
if(cleanExistedFiles){
File[] files = d.listFiles();
for (File file : files) {
file.delete();
}
}
}
return d;
}
public static String poll(String topic){
try {
PersistentQueue persistentQueue = persistentQueuePool.get(topic);
if(persistentQueue != null){
return persistentQueue.poll();
}
} catch (Exception e) {
e.printStackTrace();
LogUtil.error(TAG, e.toString());
}
return null;
}
public static long size(String topic){
PersistentQueue persistentQueue = persistentQueuePool.get(topic);
if(persistentQueue != null){
return persistentQueue.size();
}
return 0;
}
public static String peek(String topic){
try {
PersistentQueue persistentQueue = persistentQueuePool.get(topic);
if(persistentQueue != null){
return persistentQueue.peek();
}
} catch (Exception e) {
e.printStackTrace();
LogUtil.error(TAG, e.toString());
}
return null;
}
public static boolean push(String topic, String log){
try {
PersistentQueue persistentQueue = persistentQueuePool.get(topic);
if(persistentQueue != null){
persistentQueue.push(log);
LogUtil.info("logFileQueue.size: "+persistentQueue.size());
}
return true;
} catch (Exception e) {
e.printStackTrace();
LogUtil.error(TAG, e.toString());
}
return false;
}
public static boolean push(List<KeyedMessage<String, String>> list){
try {
for (KeyedMessage<String, String> keyedMessage : list) {
push(keyedMessage.topic(), keyedMessage.message());
}
return true;
} catch (Exception e) {
e.printStackTrace();
LogUtil.error(TAG, e.toString());
}
return false;
}
}