diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2017-08-28T17·13+0200 |
---|---|---|
committer | Eelco Dolstra <edolstra@gmail.com> | 2017-08-28T17·13+0200 |
commit | 2cc345b95f19334e7050c7203a5f6823af24344f (patch) | |
tree | 0bb381ffa64ceb59fac0ab6416e5699854c0c028 | |
parent | cfc813239128fc69a9228b39b5c0abb7e7a67b11 (diff) |
Give activities a verbosity level again
And print them (separately from the progress bar) given sufficient -v flags.
-rw-r--r-- | src/libstore/build.cc | 10 | ||||
-rw-r--r-- | src/libstore/download.cc | 2 | ||||
-rw-r--r-- | src/libstore/optimise-store.cc | 2 | ||||
-rw-r--r-- | src/libstore/remote-store.cc | 3 | ||||
-rw-r--r-- | src/libstore/store-api.cc | 4 | ||||
-rw-r--r-- | src/libutil/logging.cc | 11 | ||||
-rw-r--r-- | src/libutil/logging.hh | 8 | ||||
-rw-r--r-- | src/nix-daemon/nix-daemon.cc | 11 | ||||
-rw-r--r-- | src/nix/progress-bar.cc | 7 | ||||
-rw-r--r-- | src/nix/verify.cc | 2 |
10 files changed, 41 insertions, 19 deletions
diff --git a/src/libstore/build.cc b/src/libstore/build.cc index 92626738ab27..02dcd4536a5c 100644 --- a/src/libstore/build.cc +++ b/src/libstore/build.cc @@ -1390,7 +1390,7 @@ void DerivationGoal::tryToBuild() bool buildLocally = buildMode != bmNormal || drv->willBuildLocally(); auto started = [&]() { - act = std::make_unique<Activity>(*logger, actBuild, + act = std::make_unique<Activity>(*logger, lvlInfo, actBuild, fmt("building '%s'", drvPath), Logger::Fields{drvPath}); mcRunningBuilds = std::make_unique<MaintainCount<uint64_t>>(worker.runningBuilds); worker.updateProgress(); @@ -2419,12 +2419,13 @@ struct BuilderLogger : Logger prevLogger.log(lvl, fs); } - void startActivity(ActivityId act, ActivityType type, + void startActivity(ActivityId act, Verbosity lvl, ActivityType type, const std::string & s, const Fields & fields, ActivityId parent) override { nlohmann::json json; json["action"] = "start"; json["id"] = act; + json["level"] = lvl; json["type"] = type; json["text"] = s; addFields(json, fields); @@ -3339,7 +3340,8 @@ void DerivationGoal::flushLine() if (type == actDownload) builderActivities.emplace(std::piecewise_construct, std::forward_as_tuple(json["id"]), - std::forward_as_tuple(*logger, type, json["text"], getFields(json["fields"]), act->id)); + std::forward_as_tuple(*logger, (Verbosity) json["level"], type, + json["text"], getFields(json["fields"]), act->id)); } else if (action == "stop") @@ -3686,7 +3688,7 @@ void SubstitutionGoal::tryToRun() /* Wake up the worker loop when we're done. */ Finally updateStats([this]() { outPipe.writeSide = -1; }); - Activity act(*logger, actSubstitute, "", Logger::Fields{storePath, sub->getUri()}); + Activity act(*logger, actSubstitute, Logger::Fields{storePath, sub->getUri()}); PushActivity pact(act.id); copyStorePath(ref<Store>(sub), ref<Store>(worker.store.shared_from_this()), diff --git a/src/libstore/download.cc b/src/libstore/download.cc index a20999176778..625e781b4528 100644 --- a/src/libstore/download.cc +++ b/src/libstore/download.cc @@ -85,7 +85,7 @@ struct CurlDownloader : public Downloader DownloadItem(CurlDownloader & downloader, const DownloadRequest & request) : downloader(downloader) , request(request) - , act(*logger, actDownload, fmt("downloading '%s'", request.uri), {}, request.parentAct) + , act(*logger, lvlTalkative, actDownload, fmt("downloading '%s'", request.uri), {}, request.parentAct) { if (!request.expectedETag.empty()) requestHeaders = curl_slist_append(requestHeaders, ("If-None-Match: " + request.expectedETag).c_str()); diff --git a/src/libstore/optimise-store.cc b/src/libstore/optimise-store.cc index f1325ba5a1ce..891540ae4c1d 100644 --- a/src/libstore/optimise-store.cc +++ b/src/libstore/optimise-store.cc @@ -266,7 +266,7 @@ void LocalStore::optimiseStore(OptimiseStats & stats) addTempRoot(i); if (!isValidPath(i)) continue; /* path was GC'ed, probably */ { - Activity act(*logger, actUnknown, fmt("optimising path '%s'", i)); + Activity act(*logger, lvlTalkative, actUnknown, fmt("optimising path '%s'", i)); optimisePath_(&act, stats, realStoreDir + "/" + baseNameOf(i), inodeHash); } done++; diff --git a/src/libstore/remote-store.cc b/src/libstore/remote-store.cc index f0e3502bf79a..1af84cff5ba8 100644 --- a/src/libstore/remote-store.cc +++ b/src/libstore/remote-store.cc @@ -679,11 +679,12 @@ void RemoteStore::Connection::processStderr(Sink * sink, Source * source) else if (msg == STDERR_START_ACTIVITY) { auto act = readNum<ActivityId>(from); + auto lvl = (Verbosity) readInt(from); auto type = (ActivityType) readInt(from); auto s = readString(from); auto fields = readFields(from); auto parent = readNum<ActivityId>(from); - logger->startActivity(act, type, s, fields, parent); + logger->startActivity(act, lvl, type, s, fields, parent); } else if (msg == STDERR_STOP_ACTIVITY) { diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc index f07376852711..7a8a3f7dee04 100644 --- a/src/libstore/store-api.cc +++ b/src/libstore/store-api.cc @@ -565,7 +565,7 @@ void Store::buildPaths(const PathSet & paths, BuildMode buildMode) void copyStorePath(ref<Store> srcStore, ref<Store> dstStore, const Path & storePath, RepairFlag repair, CheckSigsFlag checkSigs) { - Activity act(*logger, actCopyPath, fmt("copying path '%s'", storePath), + Activity act(*logger, lvlInfo, actCopyPath, fmt("copying path '%s'", storePath), {storePath, srcStore->getUri(), dstStore->getUri()}); PushActivity pact(act.id); @@ -623,7 +623,7 @@ void copyPaths(ref<Store> srcStore, ref<Store> dstStore, const PathSet & storePa for (auto & path : storePaths) if (!valid.count(path)) missing.insert(path); - Activity act(*logger, actCopyPaths, fmt("copying %d paths", missing.size())); + Activity act(*logger, lvlInfo, actCopyPaths, fmt("copying %d paths", missing.size())); std::atomic<size_t> nrDone{0}; std::atomic<uint64_t> bytesExpected{0}; diff --git a/src/libutil/logging.cc b/src/libutil/logging.cc index b103b902eab0..e38a460537ea 100644 --- a/src/libutil/logging.cc +++ b/src/libutil/logging.cc @@ -45,6 +45,13 @@ public: writeToStderr(prefix + (tty ? fs.s : filterANSIEscapes(fs.s)) + "\n"); } + + void startActivity(ActivityId act, Verbosity lvl, ActivityType type, + const std::string & s, const Fields & fields, ActivityId parent) + { + if (lvl <= verbosity && !s.empty()) + log(lvl, s + "..."); + } }; Verbosity verbosity = lvlInfo; @@ -76,11 +83,11 @@ Logger * makeDefaultLogger() std::atomic<uint64_t> nextId{(uint64_t) getpid() << 32}; -Activity::Activity(Logger & logger, ActivityType type, +Activity::Activity(Logger & logger, Verbosity lvl, ActivityType type, const std::string & s, const Logger::Fields & fields, ActivityId parent) : logger(logger), id(nextId++) { - logger.startActivity(id, type, s, fields, parent); + logger.startActivity(id, lvl, type, s, fields, parent); } } diff --git a/src/libutil/logging.hh b/src/libutil/logging.hh index e3e7c8e6f330..84fffa820f4c 100644 --- a/src/libutil/logging.hh +++ b/src/libutil/logging.hh @@ -68,7 +68,7 @@ public: virtual void warn(const std::string & msg); - virtual void startActivity(ActivityId act, ActivityType type, + virtual void startActivity(ActivityId act, Verbosity lvl, ActivityType type, const std::string & s, const Fields & fields, ActivityId parent) { }; virtual void stopActivity(ActivityId act) { }; @@ -84,9 +84,13 @@ struct Activity const ActivityId id; - Activity(Logger & logger, ActivityType type, const std::string & s = "", + Activity(Logger & logger, Verbosity lvl, ActivityType type, const std::string & s = "", const Logger::Fields & fields = {}, ActivityId parent = curActivity); + Activity(Logger & logger, ActivityType type, + const Logger::Fields & fields = {}, ActivityId parent = curActivity) + : Activity(logger, lvlError, type, "", fields, parent) { }; + Activity(const Activity & act) = delete; ~Activity() diff --git a/src/nix-daemon/nix-daemon.cc b/src/nix-daemon/nix-daemon.cc index 9f1d619e59bf..dbf301a91533 100644 --- a/src/nix-daemon/nix-daemon.cc +++ b/src/nix-daemon/nix-daemon.cc @@ -149,12 +149,17 @@ struct TunnelLogger : public Logger } } - void startActivity(ActivityId act, ActivityType type, + void startActivity(ActivityId act, Verbosity lvl, ActivityType type, const std::string & s, const Fields & fields, ActivityId parent) override { - if (GET_PROTOCOL_MINOR(clientVersion) < 20) return; + if (GET_PROTOCOL_MINOR(clientVersion) < 20) { + if (!s.empty()) + log(lvl, s + "..."); + return; + } + StringSink buf; - buf << STDERR_START_ACTIVITY << act << type << s << fields << parent; + buf << STDERR_START_ACTIVITY << act << lvl << type << s << fields << parent; enqueueMsg(*buf.s); } diff --git a/src/nix/progress-bar.cc b/src/nix/progress-bar.cc index 70dbfd4e5964..341866679186 100644 --- a/src/nix/progress-bar.cc +++ b/src/nix/progress-bar.cc @@ -126,9 +126,12 @@ public: update(state); } - void startActivity(ActivityId act, ActivityType type, const std::string & s, - const Fields & fields, ActivityId parent) override + void startActivity(ActivityId act, Verbosity lvl, ActivityType type, + const std::string & s, const Fields & fields, ActivityId parent) override { + if (lvl <= verbosity && !s.empty()) + log(lvl, s + "..."); + auto state(state_.lock()); state->activities.emplace_back(ActInfo()); diff --git a/src/nix/verify.cc b/src/nix/verify.cc index 7156341396d3..4913d990097d 100644 --- a/src/nix/verify.cc +++ b/src/nix/verify.cc @@ -79,7 +79,7 @@ struct CmdVerify : StorePathsCommand try { checkInterrupt(); - Activity act2(*logger, actUnknown, fmt("checking '%s'", storePath)); + Activity act2(*logger, lvlInfo, actUnknown, fmt("checking '%s'", storePath)); MaintainCount<std::atomic<size_t>> mcActive(active); update(); |