/** * Collect byte-level metrics. * * <p>This method is only supposed to be called after the writer commits. * * @param bytesWritten number of bytes written by the writer * @param branchIndex fork branch index */ public void updateByteMetrics(long bytesWritten, int branchIndex) { TaskMetrics metrics = TaskMetrics.get(this); String forkBranchId = ForkOperatorUtils.getForkId(this.taskId, branchIndex); metrics.getCounter(MetricGroup.TASK.name(), forkBranchId, BYTES).inc(bytesWritten); metrics.getMeter(MetricGroup.TASK.name(), forkBranchId, BYTES_PER_SECOND).mark(bytesWritten); metrics.getCounter(MetricGroup.JOB.name(), this.jobId, BYTES).inc(bytesWritten); metrics.getMeter(MetricGroup.JOB.name(), this.jobId, BYTES_PER_SECOND).mark(bytesWritten); }
/** * Update record-level metrics. * * @param recordsWritten number of records written by the writer * @param branchIndex fork branch index */ public void updateRecordMetrics(long recordsWritten, int branchIndex) { TaskMetrics metrics = TaskMetrics.get(this); String forkBranchId = ForkOperatorUtils.getForkId(this.taskId, branchIndex); Counter taskRecordCounter = metrics.getCounter(gobblin.runtime.util.MetricGroup.TASK.name(), forkBranchId, RECORDS); long inc = recordsWritten - taskRecordCounter.getCount(); taskRecordCounter.inc(inc); metrics.getMeter(MetricGroup.TASK.name(), forkBranchId, RECORDS_PER_SECOND).mark(inc); metrics.getCounter(MetricGroup.JOB.name(), this.jobId, RECORDS).inc(inc); metrics.getMeter(MetricGroup.JOB.name(), this.jobId, RECORDS_PER_SECOND).mark(inc); }
/** * Adjust job-level metrics when the task gets retried. * * @param branches number of forked branches */ public void adjustJobMetricsOnRetry(int branches) { TaskMetrics metrics = TaskMetrics.get(this); for (int i = 0; i < branches; i++) { String forkBranchId = ForkOperatorUtils.getForkId(this.taskId, i); long recordsWritten = metrics.getCounter(MetricGroup.TASK.name(), forkBranchId, RECORDS).getCount(); long bytesWritten = metrics.getCounter(MetricGroup.TASK.name(), forkBranchId, BYTES).getCount(); metrics.getCounter(MetricGroup.JOB.name(), this.jobId, RECORDS).dec(recordsWritten); metrics.getCounter(MetricGroup.JOB.name(), this.jobId, BYTES).dec(bytesWritten); } }