package com.jivesoftware.os.amzabot.deployable.endpoint; import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.jivesoftware.os.amzabot.deployable.bot.AmzaBotCoalmineConfig; import com.jivesoftware.os.amzabot.deployable.bot.AmzaBotCoalmineService; import com.jivesoftware.os.mlogger.core.MetricLogger; import com.jivesoftware.os.mlogger.core.MetricLoggerFactory; import io.swagger.annotations.Api; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import javax.inject.Singleton; import javax.ws.rs.Consumes; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; @Api(value = "Amza Bot Coalmine") @Singleton @Path("/api/amzabot/v1") public class AmzaBotCoalmineEndpoints { private static final MetricLogger LOG = MetricLoggerFactory.getLogger(); private final AmzaBotCoalmineService service; AmzaBotCoalmineEndpoints(@Context AmzaBotCoalmineService service) { this.service = service; } @POST @Consumes("application/json") @Path("/newminer") public Response newCoalminer(AmzaBotCoalmineRequest request) { try { AmzaBotCoalmineConfig config = AmzaBotCoalmineRequest.genConfig(request); ExecutorService executor = Executors.newSingleThreadExecutor( new ThreadFactoryBuilder().setNameFormat("amzabot-coalmine-%d").build()); executor.submit(service.newMinerWithConfig(config)); return Response.accepted().build(); } catch (Exception e) { LOG.error("Failed to start new coalminer", e); return Response.serverError().build(); } } }