fr.mmarie.resources.HookResource Maven / Gradle / Ivy
The newest version!
package fr.mmarie.resources;
import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.annotation.Timed;
import com.google.inject.Inject;
import fr.mmarie.api.gitlab.Event;
import fr.mmarie.core.IntegrationService;
import io.dropwizard.auth.Auth;
import io.dropwizard.setup.Environment;
import lombok.extern.slf4j.Slf4j;
import javax.validation.Valid;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.security.Principal;
import java.util.Date;
@Path("/hook")
@Slf4j
public class HookResource {
public static final String GITLAB_HEADER = "X-Gitlab-Event";
private final IntegrationService service;
private final MetricRegistry metricRegistry;
@Inject
public HookResource(IntegrationService service,
Environment environment) {
this.service = service;
this.metricRegistry = environment.metrics();
}
@POST
@Produces(MediaType.APPLICATION_JSON)
@Timed
public void hook(@Auth Principal principal,
@HeaderParam(GITLAB_HEADER) String gitLabHeader,
@Valid Event event) {
new Thread(() -> {
setThreadName(principal);
metricRegistry.counter(principal.getName()).inc();
log.info("Hook received > {}", event);
switch (event.getType()) {
case PUSH:
case TAG_PUSH:
service.performPushEvent(event);
break;
}
}).start();
}
private void setThreadName(Principal principal) {
final String requestId = String.format("%s-%d",
principal.getName(),
new Date().getTime());
Thread.currentThread().setName(requestId);
log.info("setThreadName(): initialized new requestId <{}>", requestId);
}
}