package org.trimou.example.ping;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.atomic.AtomicLong;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author Martin Kouba
*/
@Named("pingService")
@ApplicationScoped
public class PingService {
private static final Logger LOGGER = LoggerFactory
.getLogger(PingService.class);
private AtomicLong generator = new AtomicLong(System.currentTimeMillis());
private ConcurrentMap<Long, Ping> pings = new ConcurrentHashMap<Long, Ping>();
private Comparator<Ping> pingComparator = (o1, o2) -> o1.getTime()
.compareTo(o2.getTime());
/**
*
* @param remoteAddr
*/
public void ping(String remoteAddr) {
Ping ping = new Ping(generator.incrementAndGet(), remoteAddr,
new Date());
pings.put(ping.getId(), ping);
LOGGER.info("{}", ping);
}
/**
*
* @return
*/
public List<Ping> getPings() {
List<Ping> result = new ArrayList<Ping>();
for (Ping task : pings.values()) {
result.add(task);
}
Collections.sort(result, pingComparator);
return result;
}
/**
*
* @return
*/
public Ping getPing(Long id) {
return pings.get(id);
}
}