| 166 | } |
| 167 | |
| 168 | folly::dynamic serialize() const { |
| 169 | folly::dynamic obj = folly::dynamic::object; |
| 170 | obj["numTotalSplits"] = numTotalSplits; |
| 171 | obj["numFinishedSplits"] = numFinishedSplits; |
| 172 | obj["numRunningSplits"] = numRunningSplits; |
| 173 | obj["numQueuedSplits"] = numQueuedSplits; |
| 174 | obj["completedSplitGroups"] = folly::dynamic::array; |
| 175 | for (auto group : completedSplitGroups) { |
| 176 | obj["completedSplitGroups"].push_back(group); |
| 177 | } |
| 178 | obj["pipelineStats"] = folly::dynamic::array; |
| 179 | for (const auto& pipeline : pipelineStats) { |
| 180 | folly::dynamic pipelineObj = folly::dynamic::object; |
| 181 | pipelineObj["inputPipeline"] = pipeline.inputPipeline; |
| 182 | pipelineObj["outputPipeline"] = pipeline.outputPipeline; |
| 183 | pipelineObj["operatorStats"] = folly::dynamic::array; |
| 184 | for (const auto& operatorStats : pipeline.operatorStats) { |
| 185 | pipelineObj["operatorStats"].push_back(operatorStats.serialize()); |
| 186 | } |
| 187 | pipelineObj["pipelineInputSizeCoefficientOfVariation"] = |
| 188 | pipeline.pipelineInputSizeCoefficientOfVariation; |
| 189 | obj["pipelineStats"].push_back(pipelineObj); |
| 190 | } |
| 191 | obj["executionStartTimeMs"] = executionStartTimeMs; |
| 192 | obj["executionEndTimeMs"] = executionEndTimeMs; |
| 193 | obj["firstSplitStartTimeMs"] = firstSplitStartTimeMs; |
| 194 | obj["lastSplitStartTimeMs"] = lastSplitStartTimeMs; |
| 195 | obj["endTimeMs"] = endTimeMs; |
| 196 | obj["terminationTimeMs"] = terminationTimeMs; |
| 197 | obj["taskInputSizeCoefficientOfVariation"] = |
| 198 | taskInputSizeCoefficientOfVariation; |
| 199 | obj["numTotalDrivers"] = numTotalDrivers; |
| 200 | obj["numCompletedDrivers"] = numCompletedDrivers; |
| 201 | obj["numTerminatedDrivers"] = numTerminatedDrivers; |
| 202 | obj["numRunningDrivers"] = numRunningDrivers; |
| 203 | obj["numBlockedDrivers"] = folly::dynamic::object; |
| 204 | for (const auto& [reason, count] : numBlockedDrivers) { |
| 205 | obj["numBlockedDrivers"][blockingReasonToString(reason)] = count; |
| 206 | } |
| 207 | obj["outputBufferUtilization"] = outputBufferUtilization; |
| 208 | obj["outputBufferOverutilized"] = outputBufferOverutilized; |
| 209 | obj["longestRunningOpCall"] = longestRunningOpCall; |
| 210 | obj["longestRunningOpCallMs"] = longestRunningOpCallMs; |
| 211 | obj["memoryReclaimCount"] = memoryReclaimCount; |
| 212 | obj["memoryReclaimMs"] = memoryReclaimMs; |
| 213 | obj["multiSplitUuidToSingleSplitNum"] = folly::dynamic::object; |
| 214 | for (const auto& [uuid, num] : multiSplitUuidToSingleSplitNum) { |
| 215 | obj["multiSplitUuidToSingleSplitNum"][uuid] = num; |
| 216 | } |
| 217 | return obj; |
| 218 | } |
| 219 | }; |
| 220 | |
| 221 | } // namespace bytedance::bolt::exec |
no test coverage detected