From 2e5342811a2a36b8676db76a6ac9130cb60013bb Mon Sep 17 00:00:00 2001 From: "Alexander A. Klimov" Date: Thu, 25 Feb 2021 14:06:07 +0100 Subject: [PATCH] Clean up only old temp files refs #8615 --- lib/base/configobject.cpp | 2 +- lib/base/utility.cpp | 13 +++++++++++++ lib/base/utility.hpp | 1 + lib/icinga/icingaapplication.cpp | 2 +- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/base/configobject.cpp b/lib/base/configobject.cpp index 4317771d1..2fc34881c 100644 --- a/lib/base/configobject.cpp +++ b/lib/base/configobject.cpp @@ -464,7 +464,7 @@ void ConfigObject::DumpObjects(const String& filename, int attributeTypes) << "Dumping program state to file '" << filename << "'"; try { - Utility::Glob(filename + ".tmp.*", &Utility::Remove, GlobFile); + Utility::Glob(filename + ".tmp.*", &Utility::RemoveIfOld, GlobFile); } catch (const std::exception& ex) { Log(LogWarning, "ConfigObject") << DiagnosticInformation(ex); } diff --git a/lib/base/utility.cpp b/lib/base/utility.cpp index a2e461e5c..8b407de19 100644 --- a/lib/base/utility.cpp +++ b/lib/base/utility.cpp @@ -722,6 +722,19 @@ void Utility::RemoveDirRecursive(const String& path) (void)fs::remove_all(fs::path(path.Begin(), path.End())); } +void Utility::RemoveIfOld(const String& path) +{ + namespace fs = boost::filesystem; + + fs::path p (path.Begin(), path.End()); + boost::system::error_code ec; + auto modTime (fs::last_write_time(p, ec)); + + if (!ec && modTime < GetTime() - 24 * 60 * 60) { + (void)fs::remove(p); + } +} + /* * Copies a source file to a target location. * Caller must ensure that the target's base directory exists and is writable. diff --git a/lib/base/utility.hpp b/lib/base/utility.hpp index 5132673ca..00d5312cf 100644 --- a/lib/base/utility.hpp +++ b/lib/base/utility.hpp @@ -119,6 +119,7 @@ public: static void Remove(const String& path); static void RemoveDirRecursive(const String& path); + static void RemoveIfOld(const String& path); static void CopyFile(const String& source, const String& target); static void RenameFile(const String& source, const String& target); diff --git a/lib/icinga/icingaapplication.cpp b/lib/icinga/icingaapplication.cpp index 94ae0ede7..fe3a25680 100644 --- a/lib/icinga/icingaapplication.cpp +++ b/lib/icinga/icingaapplication.cpp @@ -170,7 +170,7 @@ void IcingaApplication::DumpModifiedAttributes() String path = Configuration::ModAttrPath; try { - Utility::Glob(path + ".tmp.*", &Utility::Remove, GlobFile); + Utility::Glob(path + ".tmp.*", &Utility::RemoveIfOld, GlobFile); } catch (const std::exception& ex) { Log(LogWarning, "IcingaApplication") << DiagnosticInformation(ex); }