From 0e9ddcc306f0900fc38472a2c8b9d9aa886b279e Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 25 Aug 2017 14:53:50 +0200 Subject: [PATCH] Restore activity metadata This allows the progress bar to display "building perl-5.22.3" instead of "building /nix/store/-perl-5.22.3.drv". --- src/libstore/build.cc | 7 ++++-- src/libutil/logging.cc | 5 +++-- src/libutil/logging.hh | 48 ++++++++++++++++++++++------------------- src/nix/progress-bar.cc | 10 ++++++++- 4 files changed, 43 insertions(+), 27 deletions(-) diff --git a/src/libstore/build.cc b/src/libstore/build.cc index e97fcc9e2..77dee2914 100644 --- a/src/libstore/build.cc +++ b/src/libstore/build.cc @@ -1390,7 +1390,8 @@ void DerivationGoal::tryToBuild() bool buildLocally = buildMode != bmNormal || drv->willBuildLocally(); auto started = [&]() { - act = std::make_unique(*logger, actBuild, fmt("building '%s'", drvPath)); + act = std::make_unique(*logger, actBuild, + fmt("building '%s'", drvPath), Logger::Fields{drvPath}); mcRunningBuilds = std::make_unique>(worker.runningBuilds); worker.updateProgress(); }; @@ -2405,13 +2406,15 @@ struct BuilderLogger : Logger prevLogger.log(lvl, fs); } - void startActivity(ActivityId act, ActivityType type, const std::string & s) override + void startActivity(ActivityId act, ActivityType type, + const std::string & s, const Fields & fields) override { nlohmann::json json; json["action"] = "start"; json["id"] = act; json["type"] = type; json["text"] = s; + // FIXME: handle fields log(lvlError, "@nix " + json.dump()); } diff --git a/src/libutil/logging.cc b/src/libutil/logging.cc index 900f24e4c..87f20664e 100644 --- a/src/libutil/logging.cc +++ b/src/libutil/logging.cc @@ -74,10 +74,11 @@ Logger * makeDefaultLogger() std::atomic nextId{(uint64_t) getpid() << 32}; -Activity::Activity(Logger & logger, ActivityType type, const std::string & s) +Activity::Activity(Logger & logger, ActivityType type, + const std::string & s, const Logger::Fields & fields) : logger(logger), id(nextId++) { - logger.startActivity(id, type, s); + logger.startActivity(id, type, s, fields); } } diff --git a/src/libutil/logging.hh b/src/libutil/logging.hh index 08a116175..567af361e 100644 --- a/src/libutil/logging.hh +++ b/src/libutil/logging.hh @@ -40,25 +40,6 @@ class Logger public: - virtual ~Logger() { } - - virtual void log(Verbosity lvl, const FormatOrString & fs) = 0; - - void log(const FormatOrString & fs) - { - log(lvlInfo, fs); - } - - virtual void warn(const std::string & msg); - - virtual void startActivity(ActivityId act, ActivityType type, const std::string & s) { }; - - virtual void stopActivity(ActivityId act) { }; - - virtual void progress(ActivityId act, uint64_t done = 0, uint64_t expected = 0, uint64_t running = 0, uint64_t failed = 0) { }; - - virtual void setExpected(ActivityId act, ActivityType type, uint64_t expected) { }; - struct Field { // FIXME: use std::variant. @@ -70,7 +51,29 @@ public: Field(const uint64_t & i) : type(tInt), i(i) { } }; - virtual void result(ActivityId act, ResultType type, const std::vector & fields) { }; + typedef std::vector Fields; + + virtual ~Logger() { } + + virtual void log(Verbosity lvl, const FormatOrString & fs) = 0; + + void log(const FormatOrString & fs) + { + log(lvlInfo, fs); + } + + virtual void warn(const std::string & msg); + + virtual void startActivity(ActivityId act, ActivityType type, + const std::string & s, const Fields & fields) { }; + + virtual void stopActivity(ActivityId act) { }; + + virtual void progress(ActivityId act, uint64_t done = 0, uint64_t expected = 0, uint64_t running = 0, uint64_t failed = 0) { }; + + virtual void setExpected(ActivityId act, ActivityType type, uint64_t expected) { }; + + virtual void result(ActivityId act, ResultType type, const Fields & fields) { }; }; struct Activity @@ -79,7 +82,8 @@ struct Activity const ActivityId id; - Activity(Logger & logger, ActivityType type, const std::string & s = ""); + Activity(Logger & logger, ActivityType type, const std::string & s = "", + const Logger::Fields & fields = {}); Activity(const Activity & act) = delete; @@ -95,7 +99,7 @@ struct Activity template void result(ResultType type, const Args & ... args) { - std::vector fields; + Logger::Fields fields; nop{(fields.emplace_back(Logger::Field(args)), 1)...}; logger.result(id, type, fields); } diff --git a/src/nix/progress-bar.cc b/src/nix/progress-bar.cc index f0db3be60..a692250f8 100644 --- a/src/nix/progress-bar.cc +++ b/src/nix/progress-bar.cc @@ -93,7 +93,8 @@ public: update(state); } - void startActivity(ActivityId act, ActivityType type, const std::string & s) override + void startActivity(ActivityId act, ActivityType type, const std::string & s, + const Fields & fields) override { auto state(state_.lock()); @@ -102,6 +103,13 @@ public: state->its.emplace(act, i); state->activitiesByType[type].its.emplace(act, i); + if (type == actBuild) { + auto name = storePathToName(getS(fields, 0)); + if (hasSuffix(name, ".drv")) + name.resize(name.size() - 4); + i->s = fmt("building " ANSI_BOLD "%s" ANSI_NORMAL, name); + } + update(*state); }