All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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);
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy