in bistro/config/Job.cpp [147:224]
dynamic Job::toDynamic(const Config& parent_config) const {
//
// First, the fields that are ALWAYS exported. If in doubt, err on the
// side of always exporting -- see the docblock for the "why?".
//
dynamic config = dynamic::object
(kEnabled, enabled_)
("owner", owner_)
(kLevelForTasks, parent_config.levels.lookup(levelForTasks_))
("priority", priority_)
("config", config_)
(kBackoff, backoffSettings_.toDynamic())
(kKillOrphanTasksAfterSec,
killOrphanTasksAfterToDynamic(killOrphanTasksAfter_))
(kTaskSubprocess, taskSubprocessOptionsToDynamic(taskSubprocessOptions_))
(kKillSubprocess, killRequestToDynamic(killRequest_))
;
{ // As per docblock rule, always export "resources" (inherited from Config)
dynamic resources_obj = dynamic::object;
for (const auto& resource_ids : parent_config.levelIDToResourceID) {
for (auto resource_id : resource_ids) {
resources_obj[parent_config.resourceNames.lookup(resource_id)] =
resources_[resource_id];
}
}
if (!resources_obj.empty()) { // Ok to omit if no resources exist.
config["resources"] = std::move(resources_obj);
}
}
//
// The following fields have trivial, never-changing defaults, so we can
// safely omit them when empty.
//
{ // scope for "filters"
dynamic filters_obj = dynamic::object;
for (int i = 0; i < filters_.size(); ++i) {
if (!filters_[i].isEmpty()) {
auto d = filters_[i].toDynamic();
if (!d.empty()) {
filters_obj[parent_config.levels.lookup(i)] = std::move(d);
}
}
}
if (!filters_obj.empty()) {
config["filters"] = std::move(filters_obj);
}
}
if (levelForHostPlacement_ != StringTable::NotFound) {
config["level_for_host_placement"] =
parent_config.levels.lookup(levelForHostPlacement_);
}
if (!hostPlacement_.empty()) {
config["host_placement"] = hostPlacement_;
}
if (!dependsOn_.empty()) {
dynamic depends_on = dynamic::array;
for (auto job_id : dependsOn_) {
depends_on.push_back(JobNameTable->lookup(job_id));
}
config["depends_on"] = depends_on;
}
if (createTime_ > 0) {
config["create_time"] = createTime_;
}
if (modifyTime_ > 0) {
config["modify_time"] = modifyTime_;
}
if (!command_.empty()) {
config[kCommand] = folly::dynamic(command_.begin(), command_.end());
}
if (versionID_ >= 0) {
config["version_id"] = versionID_;
}
if (!errors_.empty()) {
config["errors"] = errors_;
}
return config;
}