[
https://issues.apache.org/jira/browse/KNOX-940?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16035670#comment-16035670
]
Mohammad Kamrul Islam commented on KNOX-940:
--------------------------------------------
Thanks [~moresandeep] for detailed review comments. I accepted most of your
comment and plan to include in the next revision. Also I added few comments.
Can you please review those? After getting your feedback, I will upload the
patch accordingly.
* pom issue: as you found, I was testing against 0.12. It should be 0.13.0
instead. Updating the patch accordingly.
>>> Can you also briefly describe the overall architecture and the url pattern
>>> that can be used to access the metrics, it will be helpful for the review
>>> and for future reference.
Once the patch is cleared, I will write a doc explaining the details. I used
the following two commands for testing, planning to add more such health end
points:
* curl -iv
'https://hadooppoc03-sjc1.prod.uber.internal:8443/gateway/health/v0/metrics?pretty=true'
* curl –iv
'https://hadooppoc03-sjc1.prod.uber.internal:8443/gateway/health/v0/ping'
>>> In class DefaultMetricsService, any specific reason to make 'MetricRegistry
>>> metrics' static.
Listener classes needs to access this statically. There could be better way but
I followed the pattern defined in dropwizard tutorial
(http://metrics.dropwizard.io/3.1.0/manual/servlets/#adminservlet)
>>> HealthServiceMessages class, the messages are too generic like "Exception
>>> occurred" it would be good to have messages which indicate the cause of
>>> failure.Method "basicInfo(String original)" boes not appear to be used.
Will be addressed in the new patch.
>>>MetricsResource class:
>>> Path has hard coded version (/v0/metrics), if the version is hard coded do
>>> we really need it?
I don’t have any strong opinion here. I came from a perspective that if we want
to support backward compatibility in future for REST end-points, we can use
version in the API. For each version, we will have a separate Resource file.
Each resource could be associated with one version.
However, if you think it is not needed for Knox, I can take that out. Or you
can suggest alternative approach that I can follow.
>>> Using instanceof is probably a bad idea as pointed by Larry McCay recently,
>>> it breaks the Open Close Principle and Liskov's Substitution Principle
Good point. I believe most of the doc was primarily talking about class
hierarchy and how instanceOf could be a bad choice. In this instance, I need to
cast and I want to verify if cast exception would occur. If you still think, it
will be an issue, I’m open for any alternative option.
>>> Why do we have a doPost method when it does not handle POST (or may be I
>>> read it wrong)
>>>doGet() method produces JSON as well as XML, as per the method annotations
>>>but the response content type is only JSON
I borrowed both patterns that was used for similar Knox services (i.e.
knoxtoken service code – TokenResource.java). I don’t need those explicitly but
followed the same styles.
>>>in the method getMetrics(), on error the response is
>>>Response.ok().entity(String.format("Failed to reply correctly due to : %s ",
>>>ioe)).build(), shouldn't it be something like a Response.serverError()..
will be addressed in new patch.
>>>PingResource class
>>>Can you explain the purpose of this class
The intention is to provide hearbeat type of query quickly. Again following the
pattern mentioned in dropwizard tutorial
(http://metrics.dropwizard.io/3.1.0/manual/servlets/#pingservlet).
>>>Path has hard-coded version (/v0/ping), if the version is hard coded do we
>>>really need it ?
>>> Why do we have a doPost method when it does not handle POST (or may be I
>>> read it wrong)
>>> in the method getPingResponse(), on error the response is
>>> Response.ok().entity(String.format("Failed to reply correctly due to : %s
>>> ", ioe)).build(), shouldn't it be something like a Response.serverError().
Replied before.
> Support REST access exposing metrics
> ------------------------------------
>
> Key: KNOX-940
> URL: https://issues.apache.org/jira/browse/KNOX-940
> Project: Apache Knox
> Issue Type: Task
> Affects Versions: 0.11.0
> Reporter: Mohammad Kamrul Islam
> Assignee: Mohammad Kamrul Islam
> Fix For: 0.13.0
>
> Attachments: KNOX-940.patch
>
>
> KNOX-643 added the support to publish metrics. However, the metrics are not
> accessible through REST. This JIRA is to add REST support.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)