class AbstractTimeoutTimerTask implements TimerTask {

    protected final ExecutorWrapper executorWrapper;

    protected final Runnable runnable;

    protected AbstractTimeoutTimerTask(ExecutorWrapper executorWrapper, Runnable runnable) {
        this.executorWrapper = executorWrapper;
        this.runnable = runnable;
    }

    @Override
    public void run(Timeout timeout) throws Exception {
        val statProvider = executorWrapper.getThreadPoolStatProvider();
        if (Objects.isNull(statProvider)) {
            return;
        }
        doRun();
    }

    protected Pair<String, String> getTaskNameAndTraceId() {<FILL_FUNCTION_BODY>}

    /**
     * Do run.
     */
    protected abstract void doRun();
}

        String taskName = StringUtils.EMPTY;
        String traceId = StringUtils.EMPTY;
        if (runnable instanceof DtpRunnable) {
            DtpRunnable dtpRunnable = (DtpRunnable) runnable;
            taskName = dtpRunnable.getTaskName();
            traceId = dtpRunnable.getTraceId();
        }
        return Pair.of(taskName, traceId);
    
<no_super_class>