package com.aol.micro.server.application.registry;
import java.util.Arrays;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.container.AsyncResponse;
import javax.ws.rs.container.Suspended;
import cyclops.stream.ReactiveSeq;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import com.aol.micro.server.WorkerThreads;
import com.aol.micro.server.auto.discovery.Rest;
import com.aol.micro.server.utility.HashMapBuilder;
@Rest
@Path("/service-registry")
public class ServiceRegistryResource{
private final Logger logger = LoggerFactory.getLogger(getClass());
private final Cleaner cleaner;
private final Finder finder;
private final Register register;
private final Job job;
@Autowired
public ServiceRegistryResource(Cleaner cleaner, Finder finder, Register register, Job job) {
this.cleaner = cleaner;
this.finder = finder;
this.register = register;
this.job = job;
}
@GET
@Path("/list")
@Produces("application/json")
public void list(@Suspended AsyncResponse response) {
ReactiveSeq.of(this)
.futureOperations(WorkerThreads.ioExecutor.get())
.forEachX(Long.MAX_VALUE,next -> {
try{
cleaner.clean();
response.resume(finder.find());
}catch(Exception e){
logger.error(e.getMessage(),e);
response.resume(Arrays.asList("failed due to error"));
}
});
}
@POST
@Path("/schedule")
@Consumes("application/json")
@Produces("application/json")
public void schedule(@Suspended AsyncResponse response) {
ReactiveSeq.of(this)
.futureOperations(WorkerThreads.ioExecutor.get())
.forEachX(Long.MAX_VALUE,next -> {
try{
job.schedule();
response.resume(HashMapBuilder.of("status", "success"));
}catch(Exception e){
logger.error(e.getMessage(),e);
response.resume(HashMapBuilder.of("status", "failure"));
}
});
}
@POST
@Path("/register")
@Consumes("application/json")
@Produces("application/json")
public void register(@Suspended AsyncResponse response,RegisterEntry entry) {
ReactiveSeq.of(this)
.futureOperations(WorkerThreads.ioExecutor.get())
.forEachX(Long.MAX_VALUE,next -> {
try{
register.register(entry);
response.resume(HashMapBuilder.of("status", "complete"));
}catch(Exception e){
logger.error(e.getMessage(),e);
response.resume(HashMapBuilder.of("status", "failure"));
}
});
}
}