diff --git a/lib/inc/internal/facts/windows/uptime_resolver.hpp b/lib/inc/internal/facts/windows/uptime_resolver.hpp index b380eff..3102887 100644 --- a/lib/inc/internal/facts/windows/uptime_resolver.hpp +++ b/lib/inc/internal/facts/windows/uptime_resolver.hpp @@ -18,9 +18,8 @@ { /** * Constructs the uptime_resolver. - * @param wmi_conn The WMI connection to use when resolving facts. */ - uptime_resolver(std::shared_ptr wmi_conn = std::make_shared()); + uptime_resolver(); protected: /** @@ -28,9 +27,6 @@ * @return Returns the system uptime in seconds. */ virtual int64_t get_uptime() override; - - private: - std::shared_ptr _wmi; }; }}} // namespace facter::facts::windows diff --git a/lib/src/facts/windows/collection.cc b/lib/src/facts/windows/collection.cc index 609103f..ebaeaec 100644 --- a/lib/src/facts/windows/collection.cc +++ b/lib/src/facts/windows/collection.cc @@ -75,6 +75,7 @@ add(make_shared()); add(make_shared()); add(make_shared()); + add(make_shared()); try { shared_ptr shared_wmi = make_shared(); @@ -82,7 +83,6 @@ add(make_shared(shared_wmi)); add(make_shared(shared_wmi)); add(make_shared(shared_wmi)); - add(make_shared(shared_wmi)); } catch (wmi_exception &e) { LOG_ERROR("failed adding platform facts that require WMI: {1}", e.what()); } diff --git a/lib/src/facts/windows/uptime_resolver.cc b/lib/src/facts/windows/uptime_resolver.cc index 9453a33..e251c56 100644 --- a/lib/src/facts/windows/uptime_resolver.cc +++ b/lib/src/facts/windows/uptime_resolver.cc @@ -1,10 +1,7 @@ #include -#include +#include #include -#include #include -#include -#include // Mark string for translation (alias for leatherman::locale::format) using leatherman::locale::_; @@ -14,37 +11,16 @@ using namespace std; using namespace leatherman::util; using namespace leatherman::windows; - using namespace boost::posix_time; - using namespace boost::gregorian; - uptime_resolver::uptime_resolver(shared_ptr wmi_conn) : - resolvers::uptime_resolver(), - _wmi(move(wmi_conn)) + uptime_resolver::uptime_resolver() : + resolvers::uptime_resolver() { - } - - static ptime get_ptime(string const& wmitime) - { - static boost::regex wmi_regex("^(\\d{8,})(\\d{2})(\\d{2})(\\d{2})\\."); - string iso_date; - int hour, min, sec; - if (!re_search(wmitime, wmi_regex, &iso_date, &hour, &min, &sec)) { - throw runtime_error(_("failed to parse {1} as a date/time", wmitime)); - } - - return ptime(from_undelimited_string(iso_date), time_duration(hour, min, sec)); } int64_t uptime_resolver::get_uptime() { - auto vals = _wmi->query(wmi::operatingsystem, {wmi::lastbootuptime, wmi::localdatetime}); - if (vals.empty()) { - return -1; - } - - ptime boottime = get_ptime(wmi::get(vals, wmi::lastbootuptime)); - ptime now = get_ptime(wmi::get(vals, wmi::localdatetime)); - return (now - boottime).total_seconds(); + uint64_t tickCount = GetTickCount64(); + return (int64_t)(tickCount / 1000); // seconds } }}} // namespace facter::facts::windows