2014-11-26 1 views
4

/healthcheck 대신 healthchecks와 같은 /health{“status”: 200}과 같은 일부 출력이되도록 Dropwizrd의 healthcheck 출력을 사용자 정의 할 수 있습니까?Dropwizard : 상태 확인 주소 및 형식 사용자 정의

필자는 필자가 필요로하는 것을 수행하는 새로운 리소스를 간단하게 작성할 수 있음을 알고 있습니다.이 작업을 수행하는 표준 방법이 있는지 궁금합니다.

답변

4

0.7.1 소스 코드에서 읽은 것부터 유감스럽게도 건강 검진을위한 리소스 URI를 변경할 수 없기 때문에 건강 검진 형식을 변경할 수 있을지 의심 스럽습니다. 또한 관리자 페이지에 REST 리소스를 추가 할 수 없다는 불평을하는 사람들, 서블릿 만 기억합니다. 0.8.0일까요?

다음은 소스 코드에서 지금까지 추적 한 내용입니다. 어쩌면 내가 잘못 읽거나 잘못 이해 한 것일 수도있어 누군가가 고칠 수 있습니다.

메트릭은 healtcheck 서블릿을 추가하여 서블릿 구성에서 URI가 정의되어 있는지 여부를 확인하는 방식으로 실제로 작성되었습니다 (AdminServlet).

this.healthcheckUri = getParam(config.getInitParameter(HEALTHCHECK_URI_PARAM_KEY), DEFAULT_HEALTHCHECK_URI); 

는 그러나 AbstractServerFactory에 어떤 식 으로든이 구성을 주입하는 방법을 dropwizard 제공하지 않습니다.

handler.addServlet(new NonblockingServletHolder(new AdminServlet()), "/*"); 

NonblockingServletHolder

AdminServlet에 설정을 제공하고 있지만 빈 생성자를 AbstractServerFactory에 의해 생성되고 설정을 변경할 수있는 방법을 제공하지 않는 것입니다.

Environment 메서드에서 Application.run 메서드의 ServletHolder에 액세스하려고 시도했지만 run 메서드가 실행될 때까지 관리 서블릿이 만들어지지 않습니다. 당신의 run() 기능이 같은

environment.getAdminContext().getServletHandler().getServlets()[0].setInitParameter("healthcheck-uri", "/health"); 
1

뭔가 당신이 당신의 healthchecks의 URI를 제어하는 ​​데 도움이됩니다 당신이 실제로 자신의 리소스 파일을 작성해야 반환 무엇을 제어하려면

environment.servlets().addServlet(
     "HealthCheckServlet", 
     new HealthCheckServlet(environment.healthChecks()) 
).addMapping("/health"); 

. 등록에서 모든 healthcheck을 가져 와서 실행하고 결과에 따라 원하는 집계 값을 반환하십시오.

+0

나는 이것을 시도했다, 그것은 완벽하게 작동한다. 간단한 서버 유형의 경우 매핑은 applicationContextPath를 기준으로합니다. – romacafe