From: Piotr Kosko/Tizen API (PLT) /SRPOL/Engineer/Samsung Electronics Date: Thu, 18 May 2023 09:13:59 +0000 (+0200) Subject: [Systeminfo] Uptime feature added X-Git-Tag: accepted/tizen/unified/20230605.170322^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3c5a2fbb0e498d181f7582b20082836e0c962260;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [Systeminfo] Uptime feature added [ACR] https://code.sec.samsung.net/jira/browse/TWDAPI-291 [Verification] Code compiles without errors. Checked in chrome console. Code returns seconds since uptime. > tizen.systeminfo.getDeviceUptime() 2567 Change-Id: I968ee8e19cdb07f031d543161fcf24f62d9047fd --- diff --git a/src/systeminfo/systeminfo-utils.cpp b/src/systeminfo/systeminfo-utils.cpp index 5b432294..ef873791 100644 --- a/src/systeminfo/systeminfo-utils.cpp +++ b/src/systeminfo/systeminfo-utils.cpp @@ -15,16 +15,18 @@ */ #include "systeminfo-utils.h" -#include "systeminfo/systeminfo_instance.h" - -#include #include #include +#include +#include + #include "common/logger.h" #include "common/platform_exception.h" #include "common/scope_exit.h" +#include "common/tools.h" +#include "systeminfo/systeminfo_instance.h" namespace extension { namespace systeminfo { @@ -33,8 +35,9 @@ namespace { const short MEMORY_TO_BYTE = 1024; } // namespace -using common::PlatformResult; using common::ErrorCode; +using common::PlatformResult; +using common::tools::GetErrorString; PlatformResult SysteminfoUtils::GetVconfInt(const char *key, int *value) { ScopeLogger(); @@ -182,6 +185,22 @@ PlatformResult SysteminfoUtils::GetAvailableMemory(long long *result) { return PlatformResult(ErrorCode::NO_ERROR); } +PlatformResult SysteminfoUtils::GetDeviceUptime(unsigned long long *result) { + ScopeLogger(); + + double uptime_seconds; + if (std::ifstream("/proc/uptime", std::ios::in) >> uptime_seconds) { + *result = static_cast(llround(uptime_seconds)); + return PlatformResult(ErrorCode::NO_ERROR); + } + int ret = errno; + std::string log_msg = + "Failed to get uptime from /proc/uptime: " + GetErrorString(ret); + return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, log_msg, + ("Failed to get uptime from /proc/uptime: %d (%s)", + ret, GetErrorString(ret).c_str())); +} + PlatformResult SysteminfoUtils::RegisterVconfCallback(const char *in_key, vconf_callback_fn cb, void *event_ptr) { ScopeLogger(); diff --git a/src/systeminfo/systeminfo-utils.h b/src/systeminfo/systeminfo-utils.h index 004d4b15..ddad26fd 100644 --- a/src/systeminfo/systeminfo-utils.h +++ b/src/systeminfo/systeminfo-utils.h @@ -50,6 +50,7 @@ class SysteminfoUtils { static common::PlatformResult GetTotalMemory(long long *result); static common::PlatformResult GetServiceCountry(std::string *result); static common::PlatformResult GetAvailableMemory(long long *result); + static common::PlatformResult GetDeviceUptime(unsigned long long *result); static common::PlatformResult RegisterVconfCallback(const char *in_key, vconf_callback_fn cb, void *event_ptr); static common::PlatformResult UnregisterVconfCallback(const char *in_key, vconf_callback_fn cb); diff --git a/src/systeminfo/systeminfo_api.js b/src/systeminfo/systeminfo_api.js index 679e99b1..a3046395 100644 --- a/src/systeminfo/systeminfo_api.js +++ b/src/systeminfo/systeminfo_api.js @@ -1570,6 +1570,14 @@ SystemInfo.prototype.getAvailableMemory = function() { return native_.getResultObject(result).availableMemory; }; +SystemInfo.prototype.getDeviceUptime = function () { + var result = native_.callSync('SystemInfoGetDeviceUptime', {}); + if (native_.isFailure(result)) { + throw native_.getErrorObject(result); + } + return native_.getResultObject(result).uptime; +}; + SystemInfo.prototype.getCount = function() { var args = validator_.validateArgs(arguments, [ { diff --git a/src/systeminfo/systeminfo_instance.cc b/src/systeminfo/systeminfo_instance.cc index 7a4905fd..44ea5901 100644 --- a/src/systeminfo/systeminfo_instance.cc +++ b/src/systeminfo/systeminfo_instance.cc @@ -61,6 +61,7 @@ SysteminfoInstance::SysteminfoInstance() : manager_(this) { REGISTER_METHOD(SystemInfoRemovePropertyValueChangeListener); REGISTER_METHOD(SystemInfoGetTotalMemory); REGISTER_METHOD(SystemInfoGetAvailableMemory); + REGISTER_METHOD(SystemInfoGetDeviceUptime); REGISTER_METHOD(SystemInfoGetCount); REGISTER_METHOD(SystemInfoSetBrightness); REGISTER_METHOD(SystemInfoGetBrightness); @@ -127,6 +128,12 @@ void SysteminfoInstance::SystemInfoGetAvailableMemory(const picojson::value& arg manager_.GetAvailableMemory(args, &out); } +void SysteminfoInstance::SystemInfoGetDeviceUptime(const picojson::value& args, + picojson::object& out) { + ScopeLogger(); + manager_.GetDeviceUptime(args, &out); +} + void SysteminfoInstance::SystemInfoGetCount(const picojson::value& args, picojson::object& out) { ScopeLogger(); manager_.GetCount(args, &out); diff --git a/src/systeminfo/systeminfo_instance.h b/src/systeminfo/systeminfo_instance.h index 2ce40c69..18e38106 100644 --- a/src/systeminfo/systeminfo_instance.h +++ b/src/systeminfo/systeminfo_instance.h @@ -41,6 +41,7 @@ class SysteminfoInstance : public common::ParsedInstance { void SystemInfoSetBrightness(const picojson::value& args, picojson::object& out); void SystemInfoGetTotalMemory(const picojson::value& args, picojson::object& out); void SystemInfoGetAvailableMemory(const picojson::value& args, picojson::object& out); + void SystemInfoGetDeviceUptime(const picojson::value &args, picojson::object &out); void SystemInfoGetCount(const picojson::value& args, picojson::object& out); SysteminfoManager manager_; diff --git a/src/systeminfo/systeminfo_manager.cc b/src/systeminfo/systeminfo_manager.cc index ca333f27..ed845655 100644 --- a/src/systeminfo/systeminfo_manager.cc +++ b/src/systeminfo/systeminfo_manager.cc @@ -732,6 +732,25 @@ void SysteminfoManager::GetAvailableMemory(const picojson::value& args, picojson LoggerD("Success"); } +void SysteminfoManager::GetDeviceUptime(const picojson::value& args, + picojson::object* out) { + ScopeLogger(); + picojson::value result = picojson::value(picojson::object()); + picojson::object& result_obj = result.get(); + + unsigned long long return_value = 0; + PlatformResult ret = SysteminfoUtils::GetDeviceUptime(&return_value); + if (ret.IsError()) { + LogAndReportError(ret, out); + return; + } + result_obj.insert(std::make_pair( + "uptime", picojson::value(static_cast(return_value)))); + + ReportSuccess(result, *out); + LoggerD("Success"); +} + void SysteminfoManager::GetCount(const picojson::value& args, picojson::object* out) { ScopeLogger(); CHECK_EXIST(args, "property", out) diff --git a/src/systeminfo/systeminfo_manager.h b/src/systeminfo/systeminfo_manager.h index 7fb97dbc..0d3b802f 100644 --- a/src/systeminfo/systeminfo_manager.h +++ b/src/systeminfo/systeminfo_manager.h @@ -50,6 +50,7 @@ class SysteminfoManager { void SetBrightness(const picojson::value& args, picojson::object* out); void GetTotalMemory(const picojson::value& args, picojson::object* out); void GetAvailableMemory(const picojson::value& args, picojson::object* out); + void GetDeviceUptime(const picojson::value& args, picojson::object* out); void GetCount(const picojson::value& args, picojson::object* out); common::PlatformResult GetPropertyCount(const std::string& property, unsigned long* count);