LCOV - code coverage report
Current view: top level - libMagAOX/logger - logMap.cpp (source / functions) Coverage Total Hit
Test: MagAOX Lines: 0.0 % 47 0
Test Date: 2026-01-03 21:03:39 Functions: 0.0 % 1 0

            Line data    Source code
       1              : /** \file logMap.cpp
       2              :  * \brief Declares and defines the logMap class and related classes.
       3              :  * \author Jared R. Males (jaredmales@gmail.com)
       4              :  *
       5              :  * \ingroup logger_files
       6              :  *
       7              :  */
       8              : 
       9              : #include "logMap.hpp"
      10              : 
      11              : #include <sys/stat.h>
      12              : #include <fcntl.h>
      13              : #include <unistd.h>
      14              : 
      15              : #include <filesystem>
      16              : 
      17              : #include <mx/mxException.hpp>
      18              : 
      19              : #include "../common/exceptions.hpp"
      20              : 
      21              : using namespace flatlogs;
      22              : 
      23              : namespace MagAOX
      24              : {
      25              : namespace logger
      26              : {
      27              : 
      28            0 : int logInMemory::loadFile( file::stdFileName<verboseT> const &lfn )
      29              : {
      30            0 :     int fd = open( lfn.fullName().c_str(), O_RDONLY );
      31              : 
      32            0 :     off_t fsz = mx::ioutils::fileSize( fd );
      33              : 
      34            0 :     std::vector<char> memory( fsz );
      35              : 
      36            0 :     ssize_t nrd = read( fd, memory.data(), memory.size() );
      37              : 
      38            0 :     close( fd );
      39              : 
      40            0 :     if( nrd != fsz )
      41              :     {
      42            0 :         std::cerr << __FILE__ << " " << __LINE__ << " logInMemory::loadFile(" << lfn.fullName()
      43            0 :                   << ") did not read all bytes\n";
      44            0 :         return -1;
      45              :     }
      46              : 
      47            0 :     flatlogs::timespecX startTime = logHeader::timespec( memory.data() );
      48              : 
      49            0 :     size_t st = 0;
      50            0 :     size_t ed = logHeader::totalSize( memory.data() );
      51            0 :     st        = ed;
      52              : 
      53            0 :     while( st < memory.size() )
      54              :     {
      55            0 :         ed = logHeader::totalSize( memory.data() + st );
      56            0 :         st = st + ed;
      57              :     }
      58              : 
      59            0 :     if( st != memory.size() )
      60              :     {
      61            0 :         std::cerr << __FILE__ << " " << __LINE__ << " Possibly corrupt logfile.\n";
      62            0 :         return -1;
      63              :     }
      64              : 
      65            0 :     st -= ed;
      66              : 
      67            0 :     flatlogs::timespecX endTime = logHeader::timespec( memory.data() + st );
      68              : 
      69            0 :     if( m_memory.size() == 0 )
      70              :     {
      71            0 :         m_memory.swap( memory );
      72            0 :         m_startTime = startTime;
      73            0 :         m_endTime   = endTime;
      74              : 
      75            0 :         std::string timestamp;
      76            0 :         timespec    ts{ endTime.time_s, endTime.time_ns };
      77            0 :         mx::sys::timeStamp( timestamp, ts );
      78              : 
      79              : #ifdef DEBUG
      80              :         std::cerr << __FILE__ << " " << __LINE__ << " loading: " << lfn.fullName() << " " << timestamp << "\n";
      81              : #endif
      82              : 
      83            0 :         return 0;
      84            0 :     }
      85              : 
      86            0 :     if( startTime < m_startTime )
      87              :     {
      88              : 
      89            0 :         if( endTime >= m_startTime )
      90              :         {
      91            0 :             std::cerr << __FILE__ << " " << __LINE__ << " overlapping log files!\n";
      92            0 :             return -1;
      93              :         }
      94              : 
      95            0 :         m_memory.insert( m_memory.begin(), memory.begin(), memory.end() );
      96            0 :         m_startTime = startTime;
      97            0 :         std::cerr << __FILE__ << " " << __LINE__ << " added before!\n";
      98            0 :         return 0;
      99              :     }
     100              : 
     101            0 :     if( startTime > m_endTime )
     102              :     {
     103              : #ifdef DEBUG
     104              :         std::cerr << __FILE__ << " " << __LINE__ << " gonna append\n";
     105              : #endif
     106              : 
     107              :         // m_memory.insert( m_memory.end(), memory.begin(), memory.end() );
     108            0 :         m_endTime = endTime;
     109              : 
     110              : #ifdef DEBUG
     111              :         std::cerr << __FILE__ << " " << __LINE__ << " added after!\n";
     112              : #endif
     113              : 
     114            0 :         return 0;
     115              :     }
     116              : 
     117            0 :     std::cerr << __FILE__ << " " << __LINE__ << " Need to implement insert in the middle!\n";
     118            0 :     std::cerr << m_startTime.time_s << " " << m_startTime.time_ns << "\n";
     119            0 :     std::cerr << startTime.time_s << " " << startTime.time_ns << "\n";
     120              : 
     121            0 :     return -1;
     122            0 : }
     123              : 
     124              : 
     125              : template class logMap<XWC_DEFAULT_VERBOSITY>;
     126              : 
     127              : } // namespace logger
     128              : } // namespace MagAOX
        

Generated by: LCOV version 2.0-1