more fixes and improvements

This commit is contained in:
Robin Müller 2022-12-14 10:34:23 +01:00
parent 2d72942d47
commit 8ee6a23229
No known key found for this signature in database
GPG Key ID: 71B58F8A3CDFA9AC
3 changed files with 22 additions and 15 deletions

View File

@ -10,9 +10,9 @@ PusTmFunnel::PusTmFunnel(object_id_t objectId, TimeReaderIF &timeReader, Storage
SdCardMountedIF &sdcMan, uint32_t messageDepth)
: TmFunnelBase(objectId, tmStore, messageDepth),
timeReader(timeReader),
miscStore(objects::MISC_STORE, "misc", RolloverInterval::HOURLY, 8, currentTv, sdcMan),
okStore(objects::OK_STORE, "event", RolloverInterval::MINUTELY, 30, currentTv, sdcMan),
notOkStore(objects::NOT_OK_STORE, "event", RolloverInterval::MINUTELY, 30, currentTv, sdcMan),
miscStore(objects::MISC_STORE, "tm", "misc", RolloverInterval::HOURLY, 8, currentTv, sdcMan),
okStore(objects::OK_STORE, "tm", "ok", RolloverInterval::MINUTELY, 30, currentTv, sdcMan),
notOkStore(objects::NOT_OK_STORE,"tm", "nok", RolloverInterval::MINUTELY, 30, currentTv, sdcMan),
sdcMan(sdcMan) {
Clock::getClock_timeval(&currentTv);
Clock::getUptime(&lastTvUpdate);
@ -20,6 +20,11 @@ PusTmFunnel::PusTmFunnel(object_id_t objectId, TimeReaderIF &timeReader, Storage
miscStore.addService(17);
okStore.addApid(config::EIVE_PUS_APID);
okStore.addServiceSubservice(5, 1);
okStore.addApid(config::EIVE_PUS_APID);
okStore.addServiceSubservice(1, 1);
okStore.addServiceSubservice(1, 3);
okStore.addServiceSubservice(1, 5);
okStore.addServiceSubservice(1, 7);
}
PusTmFunnel::~PusTmFunnel() = default;

View File

@ -10,9 +10,9 @@
using namespace returnvalue;
TmStore::TmStore(object_id_t objectId, std::string baseName, RolloverInterval intervalUnit,
uint32_t intervalCount, timeval& currentTv, SdCardMountedIF& sdcMan)
: SystemObject(objectId), baseName(std::move(baseName)), currentTv(currentTv), sdcMan(sdcMan) {
TmStore::TmStore(object_id_t objectId, std::string baseDir, std::string baseName,
RolloverInterval intervalUnit, uint32_t intervalCount, timeval& currentTv, SdCardMountedIF& sdcMan)
: SystemObject(objectId), baseDir(std::move(baseDir)), baseName(std::move(baseName)), currentTv(currentTv), sdcMan(sdcMan) {
calcDiffSeconds(intervalUnit, intervalCount);
}
@ -99,16 +99,16 @@ void TmStore::calcDiffSeconds(RolloverInterval intervalUnit, uint32_t intervalCo
void TmStore::updateBaseDir() {
using namespace std::filesystem;
std::string currentPrefix = sdcMan.getCurrentMountPrefix();
baseDir = path(currentPrefix) / baseName;
if (not exists(baseDir)) {
create_directory(baseDir);
basePath = path(currentPrefix) / baseDir / baseName;
if (not exists(basePath)) {
create_directories(basePath);
}
baseDirUninitialized = false;
}
void TmStore::assignAndOrCreateMostRecentFile() {
using namespace std::filesystem;
for (auto const& file : directory_iterator(baseDir)) {
for (auto const& file : directory_iterator(basePath)) {
if (file.is_directory()) {
continue;
}
@ -135,13 +135,14 @@ void TmStore::assignAndOrCreateMostRecentFile() {
}
if (not mostRecentFile) {
unsigned currentIdx = 0;
memcpy(fileBuf.data() + currentIdx, baseName.data(), baseName.size());
path pathStart = basePath / baseName;
memcpy(fileBuf.data() + currentIdx, pathStart.c_str(), pathStart.string().length());
currentIdx += baseName.size();
Clock::TimeOfDay_t tod;
Clock::convertTimevalToTimeOfDay(&currentTv, &tod);
currentIdx += sprintf(reinterpret_cast<char*>(fileBuf.data() + currentIdx),
"%4" SCNu32 "-%2" SCNu32 "-%2" SCNu32 "T%2" SCNu32 ":%2" SCNu32
":%2" SCNu32 "Z.bin",
"_%4" PRIu32 "-%2" PRIu32 "-%2" PRIu32 "T%2" PRIu32 ":%2" PRIu32
":%2" PRIu32 "Z.bin",
tod.year, tod.month, tod.day, tod.hour, tod.minute, tod.second);
path newPath(std::string(reinterpret_cast<const char*>(fileBuf.data()), currentIdx));
std::ofstream of(newPath, std::ios::binary);

View File

@ -19,7 +19,7 @@ enum class RolloverInterval { MINUTELY, HOURLY, DAILY };
class TmStore : public SystemObject {
public:
TmStore(object_id_t objectId, std::string baseName, RolloverInterval intervalUnit,
TmStore(object_id_t objectId, std::string baseDir, std::string baseName, RolloverInterval intervalUnit,
uint32_t intervalCount, timeval& currentTv, SdCardMountedIF& sdcMan);
void addApid(uint16_t apid);
@ -39,8 +39,9 @@ class TmStore : public SystemObject {
MessageQueueId_t getCommandQueue();
PacketFilter filter;
bool baseDirUninitialized = true;
std::string baseDir;
std::string baseName;
std::filesystem::path baseDir;
std::filesystem::path basePath;
uint32_t rolloverDiffSeconds = 0;
std::array<uint8_t, MAX_FILESIZE> fileBuf{};
timeval& currentTv;