Dropwizard:自定义健康检查地址和格式

时间:2014-11-26 09:10:22

标签: dropwizard

是否可以自定义Dropwizrd的健康检查输出,例如:/health用于健康检查而不是/healthcheck,有些输出如{“status”: 200}

我意识到我可以简单地编写一个可以满足我所需要的新资源,我只是想知道是否有更标准的方法来实现这一点。

2 个答案:

答案 0 :(得分:4)

根据我在0.7.1源代码中所读到的内容,不幸的是,不可能更改healthchecks的资源URI,我非常怀疑你是否可以更改healthcheck格式。我还记得人们抱怨无法将REST资源添加到管理页面,只有servlet。也许在0.8.0?

以下是我到目前为止在源代码中跟踪的详细信息。也许我误解或误解了某些东西,所以有人可以解决它。

Metrics实际编写了AdminServlet来添加healtcheck servlet,以便检查servlet配置是否定义了URI。

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

但是dropwizard没有提供在AbstractServerFactory上以任何方式注入此配置的方法。

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

NonblockingServletHolder是为AdminServlet提供配置但由AbstractServerFactory创建的空构造函数,并且无法更改配置。

我已经想到并试图从Environment方法上的Application.run对象访问ServletHolder,但是在运行run方法之后才会创建admin servlet。

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

答案 1 :(得分:1)

run()函数中的此类内容将帮助您控制健康检查的URI:

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

如果您想要实际控制返回的内容,则需要编写自己的资源文件。从注册表中获取所有健康检查,运行它们并根据结果返回您想要的任何聚合值。