[
https://issues.apache.org/jira/browse/STORM-200?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13911690#comment-13911690
]
ASF GitHub Bot commented on STORM-200:
--------------------------------------
Github user revans2 commented on a diff in the pull request:
https://github.com/apache/incubator-storm/pull/38#discussion_r10042235
--- Diff: storm-core/src/jvm/backtype/storm/task/ShellBolt.java ---
@@ -238,6 +256,46 @@ private void handleEmit(Map action) throws
InterruptedException {
_collector.emitDirect((int)task.longValue(), stream, anchors,
tuple);
}
}
+
+ private void handleMetrics(Map action) {
+ //get metrics
+ Object nameObj = action.get("name");
+ if ( !(nameObj instanceof String) ) {
+ throw new RuntimeException("Receive Metrics name is not
String");
+ }
+ String name = (String) nameObj;
+ if (name == null || name.isEmpty()) {
+ throw new RuntimeException("Receive Metrics name is
NULL");
+ }
+ if ( !_registeredShellMetrics.containsKey(name)) {
+ throw new RuntimeException("Receive Metrics name:" +
name + " does not reigster.");
+ }
+ IMetric iMetric = _registeredShellMetrics.get(name);
+
+ //get paramList
+ Object paramsObj = action.get("params");
+ if ( !(paramsObj instanceof List) ) {
+ throw new RuntimeException("Receive Metrics name:" +
name + " params is not list.");
+ }
+ List<Object> params = (List) paramsObj;
+ for (Object o : params) {
--- End diff --
Is this check really needed? Metrics can be any object why not allow that
here too?
> Proposal for Multilang's Metrics feature
> ----------------------------------------
>
> Key: STORM-200
> URL: https://issues.apache.org/jira/browse/STORM-200
> Project: Apache Storm (Incubating)
> Issue Type: New Feature
> Reporter: DashengJu
> Priority: Minor
>
> Storm 0.9.0.1 exposes a metrics interface to report summary statistics across
> the full topology. We can build our own metric, and build metrics consumer to
> use those statistics.
> But when we use Multilang(ie. Python), we can not use this feature. So we
> want to summit a proposal for multilang's metrics.
> The specifics of the proposal:
> 1. The main idea is: when user want to add a metric statistics in
> multilang(python) bolt,
> a) he need first create a metric object and register in ShellBolt's
> sub-class,
> b) then update the metric in Python bolt process through RPC call.
> 2. In Metrics API:
> a) extend IMetric interface add a method for RPC call:public void
> updateMetricFromRPC(List<Object> params);
> b) modify IMetric implements, to support updateMetricFromRPC;
> 3. In ShellBolt,
> a) we have a Map<String, IMetric> to hold user's registered metrics
> object;
> b) we have a method registerMetric(String name, T metric) for user to
> register their metris object;
> c) we have a method handleMetrics(Map action) to handle RPC call from
> Python process;
> 4) In Multilang protocol: add a command "metrics" for shell process to make
> RPC call. The protocol is: {"command":"metrics",
> "name":"metric-registerd-name", "params":["param-1", param-2]}
> 5) In storm.py:add rpcMetrics(name, params), user can update remote metric
> through this RPC call.
> any suggestions?
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)