Added "GET /2/dmi" API endpoint.

This commit is contained in:
XMRig 2021-01-20 22:54:02 +07:00
parent 9a02007900
commit 8471f7fad3
No known key found for this signature in database
GPG key ID: 446A53638BE94409
17 changed files with 263 additions and 74 deletions

View file

@ -20,6 +20,7 @@
#include "hw/dmi/DmiBoard.h"
#include "3rdparty/rapidjson/document.h"
#include "hw/dmi/DmiTools.h"
@ -32,3 +33,18 @@ void xmrig::DmiBoard::decode(dmi_header *h)
m_vendor = dmi_string(h, 0x04);
m_product = dmi_string(h, 0x05);
}
#ifdef XMRIG_FEATURE_API
rapidjson::Value xmrig::DmiBoard::toJSON(rapidjson::Document &doc) const
{
using namespace rapidjson;
auto &allocator = doc.GetAllocator();
Value out(kObjectType);
out.AddMember("vendor", m_vendor.toJSON(doc), allocator);
out.AddMember("product", m_product.toJSON(doc), allocator);
return out;
}
#endif

View file

@ -42,6 +42,10 @@ public:
void decode(dmi_header *h);
# ifdef XMRIG_FEATURE_API
rapidjson::Value toJSON(rapidjson::Document &doc) const;
# endif
private:
String m_product;
String m_vendor;

View file

@ -20,6 +20,7 @@
#include "hw/dmi/DmiMemory.h"
#include "3rdparty/rapidjson/document.h"
#include "hw/dmi/DmiTools.h"
@ -190,3 +191,28 @@ const char *xmrig::DmiMemory::type() const
{
return dmi_memory_device_type(m_type);
}
#ifdef XMRIG_FEATURE_API
rapidjson::Value xmrig::DmiMemory::toJSON(rapidjson::Document &doc) const
{
using namespace rapidjson;
auto &allocator = doc.GetAllocator();
Value out(kObjectType);
out.AddMember("slot", m_slot.toJSON(doc), allocator);
out.AddMember("type", StringRef(type()), allocator);
out.AddMember("form_factor", StringRef(formFactor()), allocator);
out.AddMember("size", m_size, allocator);
out.AddMember("speed", m_speed, allocator);
out.AddMember("rank", m_rank, allocator);
out.AddMember("voltage", m_voltage, allocator);
out.AddMember("width", m_width, allocator);
out.AddMember("total_width", m_totalWidth, allocator);
out.AddMember("vendor", m_vendor.toJSON(doc), allocator);
out.AddMember("product", m_product.toJSON(doc), allocator);
out.AddMember("bank", m_bank.toJSON(doc), allocator);
return out;
}
#endif

View file

@ -52,6 +52,10 @@ public:
const char *formFactor() const;
const char *type() const;
# ifdef XMRIG_FEATURE_API
rapidjson::Value toJSON(rapidjson::Document &doc) const;
# endif
private:
String m_bank;
String m_product;

View file

@ -20,6 +20,8 @@
#include "hw/dmi/DmiReader.h"
#include "3rdparty/fmt/core.h"
#include "3rdparty/rapidjson/document.h"
#include "hw/dmi/DmiTools.h"
@ -38,6 +40,38 @@ static void dmi_get_header(dmi_header *h, uint8_t *data)
} // namespace xmrig
#ifdef XMRIG_FEATURE_API
rapidjson::Value xmrig::DmiReader::toJSON(rapidjson::Document &doc) const
{
rapidjson::Value obj;
toJSON(obj, doc);
return obj;
}
void xmrig::DmiReader::toJSON(rapidjson::Value &out, rapidjson::Document &doc) const
{
using namespace rapidjson;
auto &allocator = doc.GetAllocator();
out.SetObject();
Value memory(kArrayType);
memory.Reserve(m_memory.size(), allocator);
for (const auto &value : m_memory) {
memory.PushBack(value.toJSON(doc), allocator);
}
out.AddMember("smbios", Value(fmt::format("{}.{}.{}", m_version >> 16, m_version >> 8 & 0xff, m_version & 0xff).c_str(), allocator), allocator);
out.AddMember("system", m_system.toJSON(doc), allocator);
out.AddMember("board", m_board.toJSON(doc), allocator);
out.AddMember("memory", memory, allocator);
}
#endif
bool xmrig::DmiReader::decode(uint8_t *buf, const Cleanup &cleanup)
{
const bool rc = decode(buf);

View file

@ -45,6 +45,11 @@ public:
bool read();
# ifdef XMRIG_FEATURE_API
rapidjson::Value toJSON(rapidjson::Document &doc) const;
void toJSON(rapidjson::Value &out, rapidjson::Document &doc) const;
# endif
private:
using Cleanup = std::function<void()>;