| 77 | } |
| 78 | |
| 79 | void StorageSystemAsyncLoader::fillData(MutableColumns & res_columns, ContextPtr context, const ActionsDAG::Node *, std::vector<UInt8>) const |
| 80 | { |
| 81 | TimePoint now = std::chrono::system_clock::now(); |
| 82 | |
| 83 | AsyncLoader & async_loader = context->getAsyncLoader(); |
| 84 | |
| 85 | for (const auto & state : async_loader.getJobStates()) |
| 86 | { |
| 87 | Array dependencies; |
| 88 | dependencies.reserve(state.job->dependencies.size()); |
| 89 | for (const auto & dep : state.job->dependencies) |
| 90 | dependencies.emplace_back(dep->jobId()); |
| 91 | |
| 92 | TimePoint started = state.job->startTime(); |
| 93 | TimePoint finished = state.job->finishTime(); |
| 94 | TimePoint last = finished != TimePoint{} ? finished : now; |
| 95 | TimeDuration elapsed = started != TimePoint{} ? last - started : TimeDuration{0}; |
| 96 | double elapsed_sec = static_cast<double>(std::chrono::duration_cast<std::chrono::nanoseconds>(elapsed).count()) * 1e-9; |
| 97 | |
| 98 | Field ready_seqno; |
| 99 | if (state.ready_seqno) |
| 100 | ready_seqno = state.ready_seqno; |
| 101 | |
| 102 | Field exception; |
| 103 | if (state.job->exception()) |
| 104 | { |
| 105 | try |
| 106 | { |
| 107 | std::rethrow_exception(state.job->exception()); |
| 108 | } |
| 109 | catch (...) |
| 110 | { |
| 111 | exception = getCurrentExceptionMessage(false); |
| 112 | } |
| 113 | } |
| 114 | |
| 115 | size_t i = 0; |
| 116 | res_columns[i++]->insert(state.job->name); |
| 117 | res_columns[i++]->insert(state.job->jobId()); |
| 118 | res_columns[i++]->insert(dependencies); |
| 119 | res_columns[i++]->insert(state.dependencies_left); |
| 120 | res_columns[i++]->insert(static_cast<Int8>(state.job->status())); |
| 121 | res_columns[i++]->insert(state.is_executing); |
| 122 | res_columns[i++]->insert(state.is_blocked); |
| 123 | res_columns[i++]->insert(state.is_ready); |
| 124 | res_columns[i++]->insert(elapsed_sec); |
| 125 | res_columns[i++]->insert(state.job->pool()); |
| 126 | res_columns[i++]->insert(async_loader.getPoolName(state.job->pool())); |
| 127 | res_columns[i++]->insert(async_loader.getPoolPriority(state.job->pool()).value); |
| 128 | res_columns[i++]->insert(state.job->executionPool()); |
| 129 | res_columns[i++]->insert(async_loader.getPoolName(state.job->executionPool())); |
| 130 | res_columns[i++]->insert(async_loader.getPoolPriority(state.job->executionPool()).value); |
| 131 | res_columns[i++]->insert(ready_seqno); |
| 132 | res_columns[i++]->insert(state.job->waitersCount()); |
| 133 | res_columns[i++]->insert(exception); |
| 134 | res_columns[i++]->insert(timeInMicroseconds(state.job->scheduleTime())); |
| 135 | res_columns[i++]->insert(optionalTimeInMicroseconds(state.job->enqueueTime())); |
| 136 | res_columns[i++]->insert(optionalTimeInMicroseconds(state.job->startTime())); |
nothing calls this directly
no test coverage detected