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);