diff --git a/src/backend/common/Hashrate.cpp b/src/backend/common/Hashrate.cpp index dedb74955..eb01a5fb0 100644 --- a/src/backend/common/Hashrate.cpp +++ b/src/backend/common/Hashrate.cpp @@ -30,6 +30,7 @@ #include "backend/common/Hashrate.h" +#include "base/io/json/Json.h" #include "base/tools/Chrono.h" #include "base/tools/Handle.h" #include "rapidjson/document.h" @@ -157,13 +158,7 @@ const char *xmrig::Hashrate::format(double h, char *buf, size_t size) rapidjson::Value xmrig::Hashrate::normalize(double d) { - using namespace rapidjson; - - if (!std::isnormal(d)) { - return Value(kNullType); - } - - return Value(floor(d * 100.0) / 100.0); + return Json::normalize(d, false); } diff --git a/src/base/api/Api.cpp b/src/base/api/Api.cpp index c66241c9c..c4b2c5a7d 100644 --- a/src/base/api/Api.cpp +++ b/src/base/api/Api.cpp @@ -31,10 +31,11 @@ #endif -#include "3rdparty/http-parser/http_parser.h" #include "base/api/Api.h" +#include "3rdparty/http-parser/http_parser.h" #include "base/api/interfaces/IApiListener.h" #include "base/api/requests/HttpApiRequest.h" +#include "base/io/json/Json.h" #include "base/kernel/Base.h" #include "base/tools/Buffer.h" #include "base/tools/Chrono.h" @@ -73,9 +74,10 @@ static rapidjson::Value getResources(rapidjson::Document &doc) double loadavg[3] = { 0.0 }; uv_loadavg(loadavg); - load_average.PushBack(loadavg[0], allocator); - load_average.PushBack(loadavg[1], allocator); - load_average.PushBack(loadavg[2], allocator); + + for (double value : loadavg) { + load_average.PushBack(Json::normalize(value, true), allocator); + } out.AddMember("memory", memory, allocator); out.AddMember("load_average", load_average, allocator); @@ -182,6 +184,9 @@ void xmrig::Api::exec(IApiRequest &request) # endif # ifdef XMRIG_FEATURE_OPENCL features.PushBack("opencl", allocator); +# endif +# ifdef XMRIG_FEATURE_CUDA + features.PushBack("cuda", allocator); # endif reply.AddMember("features", features, allocator); } diff --git a/src/base/io/json/Json.cpp b/src/base/io/json/Json.cpp index 9a5782933..738621448 100644 --- a/src/base/io/json/Json.cpp +++ b/src/base/io/json/Json.cpp @@ -28,6 +28,7 @@ #include +#include namespace xmrig { @@ -154,6 +155,18 @@ unsigned xmrig::Json::getUint(const rapidjson::Value &obj, const char *key, unsi } +rapidjson::Value xmrig::Json::normalize(double value, bool zero) +{ + using namespace rapidjson; + + if (!std::isnormal(value)) { + return zero ? Value(0.0) : Value(kNullType); + } + + return Value(floor(value * 100.0) / 100.0); +} + + bool xmrig::JsonReader::isEmpty() const { return !m_obj.IsObject() || m_obj.ObjectEmpty(); diff --git a/src/base/io/json/Json.h b/src/base/io/json/Json.h index 80fe5dc26..b5e2a3c8a 100644 --- a/src/base/io/json/Json.h +++ b/src/base/io/json/Json.h @@ -48,6 +48,8 @@ public: static bool get(const char *fileName, rapidjson::Document &doc); static bool save(const char *fileName, const rapidjson::Document &doc); + + static rapidjson::Value normalize(double value, bool zero); };