// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "DeviceInfoEndpoint.hpp" #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace parserFSM; auto DeviceInfoEndpoint::handle(Context &context) -> void { switch (context.getMethod()) { case http::Method::get: getDeviceInfo(context); break; default: context.setResponseStatus(http::Code::BadRequest); MessageHandler::putToSendQueue(context.createSimpleResponse()); break; } } auto DeviceInfoEndpoint::getDeviceInfo(Context &context) -> bool { if (ownerServicePtr == nullptr) { return false; } json11::Json updateHistory = static_cast(ownerServicePtr)->updateOS->getUpdateHistory(); std::unique_ptr vfstat = std::make_unique(); if ((*statvfs)(purefs::dir::getRootDiskPath().c_str(), vfstat.get()) < 0) { return false; } unsigned long totalMbytes = (vfstat->f_frsize * vfstat->f_blocks) / 1024LLU / 1024LLU; unsigned long freeMbytes = (vfstat->f_bfree * vfstat->f_bsize) / 1024LLU / 1024LLU; unsigned long freePercent = (freeMbytes * 100) / totalMbytes; context.setResponseBody(json11::Json::object( {{json::batteryLevel, std::to_string(Store::Battery::get().level)}, {json::batteryState, std::to_string(static_cast(Store::Battery::get().state))}, {json::selectedSim, std::to_string(static_cast(Store::GSM::get()->selected))}, {json::trayState, std::to_string(static_cast(Store::GSM::get()->tray))}, {json::signalStrength, std::to_string(static_cast(Store::GSM::get()->getSignalStrength().rssiBar))}, {json::accessTechnology, std::to_string(static_cast(Store::GSM::get()->getNetwork().accessTechnology))}, {json::networkStatus, std::to_string(static_cast(Store::GSM::get()->getNetwork().status))}, {json::fsTotal, std::to_string(totalMbytes)}, {json::fsFree, std::to_string(freeMbytes)}, {json::fsFreePercent, std::to_string(freePercent)}, {json::gitRevision, (std::string)(GIT_REV)}, {json::gitTag, (std::string)GIT_TAG}, {json::gitBranch, (std::string)GIT_BRANCH}, {json::updateHistory, updateHistory}, {json::currentRTCTime, std::to_string(static_cast(std::time(nullptr)))}, {json::version, std::string(VERSION)}})); MessageHandler::putToSendQueue(context.createSimpleResponse()); return true; }