You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by GitBox <gi...@apache.org> on 2022/11/09 12:59:17 UTC
[GitHub] [druid] kfaraz commented on a diff in pull request #13333: Add taskActionType dimension to task/action/run/time.
kfaraz commented on code in PR #13333:
URL: https://github.com/apache/druid/pull/13333#discussion_r1017896652
##########
indexing-service/src/main/java/org/apache/druid/indexing/common/actions/LocalTaskActionClient.java:
##########
@@ -72,14 +77,35 @@ public <RetType> RetType submit(TaskAction<RetType> taskAction)
final long performStartTime = System.currentTimeMillis();
final RetType result = taskAction.perform(task, toolbox);
- emitTimerMetric("task/action/run/time", System.currentTimeMillis() - performStartTime);
+ emitTimerMetric("task/action/run/time", taskAction, System.currentTimeMillis() - performStartTime);
return result;
}
- private void emitTimerMetric(final String metric, final long time)
+ private void emitTimerMetric(final String metric, final TaskAction<?> action, final long time)
{
final ServiceMetricEvent.Builder metricBuilder = ServiceMetricEvent.builder();
IndexTaskUtils.setTaskDimensions(metricBuilder, task);
+ final String actionType = getActionType(toolbox.getJsonMapper(), action);
+ if (actionType != null) {
+ metricBuilder.setDimension("taskActionType", actionType);
Review Comment:
Side question: Is there a difference between emitting a `null` value for a dimension and just not emitting it? If not, maybe event builder itself should have this null check.
##########
indexing-service/src/main/java/org/apache/druid/indexing/common/actions/LocalTaskActionClient.java:
##########
@@ -72,14 +77,35 @@ public <RetType> RetType submit(TaskAction<RetType> taskAction)
final long performStartTime = System.currentTimeMillis();
final RetType result = taskAction.perform(task, toolbox);
- emitTimerMetric("task/action/run/time", System.currentTimeMillis() - performStartTime);
+ emitTimerMetric("task/action/run/time", taskAction, System.currentTimeMillis() - performStartTime);
return result;
}
- private void emitTimerMetric(final String metric, final long time)
+ private void emitTimerMetric(final String metric, final TaskAction<?> action, final long time)
{
final ServiceMetricEvent.Builder metricBuilder = ServiceMetricEvent.builder();
IndexTaskUtils.setTaskDimensions(metricBuilder, task);
+ final String actionType = getActionType(toolbox.getJsonMapper(), action);
+ if (actionType != null) {
+ metricBuilder.setDimension("taskActionType", actionType);
+ }
toolbox.getEmitter().emit(metricBuilder.build(metric, Math.max(0, time)));
}
+
+ @Nullable
+ static String getActionType(final ObjectMapper jsonMapper, final TaskAction<?> action)
+ {
+ try {
+ final Map<String, Object> m = jsonMapper.convertValue(action, JacksonUtils.TYPE_REFERENCE_MAP_STRING_OBJECT);
Review Comment:
This seems a bit overkill and would add an extra serde step on completion of every task action.
Should we expose a `getType()` method on the TaskAction instead or maybe emit the class name as the type (similar to coordinator duty dimension in `coordinator/run/time`)?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org