diff options
Diffstat (limited to 'video_in_hal/systemservice/logger_service/server/lib/ss_logger_store_logs.cpp')
-rwxr-xr-x | video_in_hal/systemservice/logger_service/server/lib/ss_logger_store_logs.cpp | 2233 |
1 files changed, 0 insertions, 2233 deletions
diff --git a/video_in_hal/systemservice/logger_service/server/lib/ss_logger_store_logs.cpp b/video_in_hal/systemservice/logger_service/server/lib/ss_logger_store_logs.cpp deleted file mode 100755 index 2bd8b79..0000000 --- a/video_in_hal/systemservice/logger_service/server/lib/ss_logger_store_logs.cpp +++ /dev/null @@ -1,2233 +0,0 @@ -/* - * @copyright Copyright (c) 2016-2020 TOYOTA MOTOR CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/////////////////////////////////////////////////////////////////////////////// -/// \ingroup tag_SystemServices_Logger -/// \brief This file supports the logger service interface for SystemManager. -/// -/////////////////////////////////////////////////////////////////////////////// -#include "system_service/ss_logger_store_logs.h" -#include <stdio.h> -#include <string.h> -#include <fcntl.h> -#include <dirent.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <errno.h> -#include <libtar_listhash.h> -#include <libtar.h> -#include <zlib.h> -#include <sys/klog.h> - -#include <stdlib.h> -#include <native_service/frameworkunified_application.h> -#include <native_service/frameworkunified_types.h> -#include <native_service/frameworkunified_framework_types.h> -#include <native_service/frameworkunified_framework_if.h> -#include <system_service/ss_system_types.h> -#include <native_service/ns_ringbuffer.h> -#include <native_service/ns_logger_if.h> -#include <native_service/ns_config_parser_if.h> -#include <native_service/cl_lockid.h> -#include <stub/Clock_API.h> -#include <vector> -#include <sstream> -#include <iomanip> -#include <string> -#include <algorithm> -#include "ss_logger_store_logs_loggerservicelog.h" -#include "ss_logger_cfg.h" - -#define LOGGERSERVICELOG_CONFIG_PATH "/usr/agl/conf/BS/ss/logger_service/rodata/ss_logger.cfg" -#define LOGGER_TMP_FN "__LOGGER.tmp" -#define LOGGERSERVICELOG_TMP_OUTPUT_PATH "/tmp" -#define PSTORE_DIR_PATH "/dev/pstore" -#define KERNEL_BOOT_LOG_FN "kernelboot.log" -#define KERNEL_LOG_FN "kernel.log" -#define COMMUNICATION_DIR_NAME "communication" -#define ACCOFFON_DIR_NAME "accoffon" - -#define PATHNAME_SEPARATOR '/' -#define PATHNAME_SEPARATOR_STR "/" -#define SS_STORE_FILENAME_SYSILG_TERM "_SYS_ILG_RESET.tar.gz" -#define SS_STORE_FILENAME__CWORD52__TERM "__CWORD52_.log" -#define LOGARCHIVE_FILENAME_STORE_ARCHIVE "/tmp/ss_logger_ilgfilenum" -#define TMPFILE_MODE 0640 -#define SSLOGGER_PATHNAME (255 + 1) -#define FILENUMBER_UPPER_LIMIT_OVER 100000u -#define FILENUMBER_LOWER_LIMIT 1u -#define FILENUMBER_DIGIT_NUM 5 -#define INVALID_FILENUMBER (FILENUMBER_UPPER_LIMIT_OVER) - - -/* Read all messages remaining in the ring buffer. (allowed for non-root) */ -#define SYSLOG_ACTION_READ_ALL 3 -/* Return size of the log buffer */ -#define SYSLOG_ACTION_SIZE_BUFFER 10 - -#define ENABLE_DEBUG_LOG 0 -#if ENABLE_DEBUG_LOG -#define DEB_LOGGERSERVICELOG(zone,funcname,print_fmt, ...) if(zone!=ZONE_FUNC) \ -fprintf(stderr,"%d/%s/%d:="print_fmt"\n", zone, funcname, __LINE__,##__VA_ARGS__) -#else -#define DEB_LOGGERSERVICELOG(zone,funcname,print_fmt, ...) -#endif - -typedef struct { - std::string output_path; - SI_32 output_max; - SI_32 output_errmax; - SI_32 external_log_num; - SI_32 external_log_max; -} CfgInfo; - -typedef struct { - std::string file_path; - std::string dest_name; - BOOL tmp_file_delete; -} LogInfo; - -typedef struct { - std::string path; - int index; -} LoggerservicelogInfo; - - -static const char* sys_illegal_log[] = { - "frameworkunified_sys.log", - }; - - -typedef enum { - SS_STORELOGS_KERNEL_LOG = 0, - SS_STORELOGS_KERNEL_BOOT_LOG -} SS_STORELOGS_KERNEL_LOG_TYPE; - -typedef void (*GetLogFileFunc)(SS_STORELOGS_OPE_TYPE type, - std::vector<LogInfo>& list); // NOLINT (runtime/references) - -static const UI_8 MAX_DIRECTORY_DEPTH = 4; -static const UI_32 TARMODE = 0644; - -static EFrameworkunifiedStatus addToArchive(TAR* f_pTarInfo, std::string f_filePathAndName, - std::string f_destinationName, UI_8 f_depth = - MAX_DIRECTORY_DEPTH); -static EFrameworkunifiedStatus addDirectoryToArchive(TAR* f_pTarInfo, std::string f_path, - std::string f_destinationName, - UI_8 f_depth = MAX_DIRECTORY_DEPTH); -static SI_32 gzOpenArchive(PCHAR f_pcPathname, SI_32 f_siOflags, - SI_32 f_siMode); -static SI_32 gzCloseArchive(); -static ssize_t gzWriteArchive(int fd, const void* buf, size_t count); -static ssize_t gzReadArchive(int fd, void* buf, size_t count); -static EFrameworkunifiedStatus addFileToArchive(TAR* f_pTarInfo, std::string f_filename, - std::string f_destinationName); -static EFrameworkunifiedStatus addAllFileToArchive (TAR* f_pTarInfo, std::string collectDir); -static EFrameworkunifiedStatus copyFile(std::string f_source, std::string f_destination); -static EFrameworkunifiedStatus copyDirectory (std::string f_source, std::string f_destination); -static EFrameworkunifiedStatus copyUntyped (std::string f_source, std::string f_destination); -static EFrameworkunifiedStatus copyFileToAccOffOnDir(std::vector<LogInfo>& list, SS_STORELOGS_OPE_TYPE type); -static void getLoggerservicelogFile(SS_STORELOGS_OPE_TYPE type, - std::vector<LogInfo>& list, // NOLINT (runtime/references) - std::vector<LoggerservicelogInfo> &loggerservicelogList); // NOLINT (runtime/references) -static void getKernellogFile(SS_STORELOGS_OPE_TYPE type, - std::vector<LogInfo>& list); // NOLINT (runtime/references) -static void getLastKernelLog(std::vector<LogInfo>& list); // NOLINT (runtime/references) -static void getKernelLog(std::vector<LogInfo>& list); // NOLINT (runtime/references) -static void getKernelBootLog(SS_STORELOGS_OPE_TYPE type, - std::vector<LogInfo>& list); // NOLINT (runtime/references) -static void getCommunicationlogFile(SS_STORELOGS_OPE_TYPE type, - std::vector<LogInfo>& list); // NOLINT (runtime/references) -static void getExternallogFile(SS_STORELOGS_OPE_TYPE type, - std::vector<LogInfo>& list); // NOLINT (runtime/references) - -//static std::string getFileName(std::string &path, uint32_t f_time, // NOLINT (runtime/references) -// SS_STORELOGS_OPE_TYPE type); -static std::string getFileName(std::string &path, uint32_t f_time, // NOLINT (runtime/references) - SS_STORELOGS_OPE_TYPE type, UI_32 l_counter); - -static void getEmmcCounter(std::string &path, UI_32& f_counter); // NOLINT (runtime/references) -static void getConfigInfo(CfgInfo& f_cfginfo); // NOLINT (runtime/references) -static EFrameworkunifiedStatus deleteOldEmmcLog(CfgInfo& f_cfginfo, // NOLINT (runtime/references) - std::string& f_archive_destination, // NOLINT (runtime/references) - SS_STORELOGS_OPE_TYPE type); -static EFrameworkunifiedStatus storeLogs(SS_STORELOGS_OPE_TYPE type); -static EFrameworkunifiedStatus deleteOldLog(std::string log_path, - std::vector<std::string>& l_vector, // NOLINT (runtime/references) - std::string& f_archive_destination, // NOLINT (runtime/references) - UI_32 max_num); -static size_t deleteRequestLogs(std::string f_emmcpath, ELOGGERSERVICELOGTYPE f_reqtype, - size_t f_reqsize, ELOGGERSERVICELOGTYPE f_deltype); -static EFrameworkunifiedStatus forceDeleteOldLog(std::string f_archive_destination, - size_t f_req_size); -static ELOGGERSERVICELOGTYPE QueryLoggerservicelogType(std::string f_logname); -static void SyncDir(std::string f_dir_path); -static BOOL RemoveSubDirectory(std::string &f_cPath); // NOLINT (runtime/references) -static void CreateSaveFinFlag(SS_STORELOGS_OPE_TYPE type); -static void ClearLoggerservicelogBuffer(std::vector<LoggerservicelogInfo> &loggerservicelogList); // NOLINT (runtime/references) -static void copyLoggerservicelogFile(std::string distPath); -static void deleteTmpAccOffOn(std::string accOffOnDir); -static void deleteAccOffOnDir(std::string deletePath); -static void deleteAccOffOnUntyped(std::string deletePath); - -static EFrameworkunifiedStatus getFileNumber(const std::string &filename,UI_32 &number); -static bool compareFileNumber(UI_32 filename1_number,const std::string &filename2); -static EFrameworkunifiedStatus removeFiles(const std::string &log_path, std::vector<std::string> &l_vector, - size_t begin_pos, size_t end_pos); -static EFrameworkunifiedStatus removeSameNumFiles(std::vector<std::string>::iterator &itr, const std::string &log_path, - std::vector<std::string> &l_vector); -static EFrameworkunifiedStatus deleteOldLogAbnrm(const std::string& log_path, std::vector<std::string>& l_vector, - const std::string& f_archive_destination, SI_32 max_num, UI_32 abnrm_total); -static EFrameworkunifiedStatus storeTempArchive(const std::string &real_name); -static EFrameworkunifiedStatus getFileNumberFromTempArchive(UI_32 &filenumber); - - -static std::string m_pathAndName; // NOLINT (runtime/string) -static std::string m_tmpName; // NOLINT (runtime/string) - -const GetLogFileFunc GetLogFuncTbl[] = { getKernellogFile, - getCommunicationlogFile, - getExternallogFile - }; -// GZF save variables -static gzFile g_gztype; - -// ->Bus-Error avoidance -static tartype_t l_gztype; - -static EFrameworkunifiedStatus openArchive(TAR** f_pTarInfo, std::string f_pathAndName) { - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - EFrameworkunifiedStatus l_eFrameworkunifiedStatus = eFrameworkunifiedStatusOK; - -// ->Bus-Error avoidance (because of local variables, content becomes indeterminate when functions exit) -// tartype_t l_gztype; - - *f_pTarInfo = NULL; - g_gztype = NULL; - l_gztype.openfunc = (openfunc_t) &gzOpenArchive; - l_gztype.closefunc = (closefunc_t) &gzCloseArchive; - l_gztype.readfunc = (readfunc_t) &gzReadArchive; - l_gztype.writefunc = (writefunc_t) &gzWriteArchive; - - m_pathAndName = f_pathAndName; - - /* check if directory exists */ - size_t l_found = f_pathAndName.find_last_of('/'); - std::string l_path = f_pathAndName.substr(0, l_found); - - if (0 != access(l_path.c_str(), F_OK)) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Directory does not exist. Creating..."); - return eFrameworkunifiedStatusFail; - } - - /* create archive in tmp */ - m_tmpName = "/tmp/log.tar.gz"; - - int l_tarRetVal = tar_open(f_pTarInfo, const_cast<char*>(m_tmpName.c_str()), &l_gztype, - O_WRONLY | O_CREAT, TARMODE, TAR_GNU); - - if ((l_tarRetVal != 0) || (*f_pTarInfo == NULL) || g_gztype == NULL) { // LCOV_EXCL_BR_LINE 6: tar_open must return ok // NOLINT[whitespace/line_length] - // LCOV_EXCL_START 6: tar_open must return ok - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Could not open TAR-Archive!"); - l_eFrameworkunifiedStatus = eFrameworkunifiedStatusAccessError; - // LCOV_EXCL_STOP - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return (l_eFrameworkunifiedStatus); -} - -static EFrameworkunifiedStatus addToArchive(TAR* f_pTarInfo, std::string f_filePathAndName, - std::string f_destinationName, UI_8 f_depth) { - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - EFrameworkunifiedStatus l_eFrameworkunifiedStatus = eFrameworkunifiedStatusFileLoadError; - struct stat l_stat; - int l_statRetVal; - - if (0 != access(f_filePathAndName.c_str(), F_OK)) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - " Error. The specified file path and name does not exist: %s", - f_filePathAndName.c_str()); - } else if (0 != (l_statRetVal = stat(f_filePathAndName.c_str(), &l_stat))) { // LCOV_EXCL_BR_LINE 5: stat's error case // NOLINT[whitespace/line_length] - // LCOV_EXCL_START 5: stat's error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - " Error. stat() for file or directory returned error: %s -> %d", - f_filePathAndName.c_str(), l_statRetVal); - // LCOV_EXCL_STOP - } else if (0 != S_ISDIR(l_stat.st_mode)) { - if (0 < f_depth) { // LCOV_EXCL_BR_LINE 6: f_depth must be greater than 0 - l_eFrameworkunifiedStatus = addDirectoryToArchive(f_pTarInfo, f_filePathAndName, - f_destinationName, f_depth); - } else { - // LCOV_EXCL_START 6: f_depth must be greater than 0 - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_WARN, __FUNCTION__, - "Maximum recursive depth reached! File %s not added to archive.", - f_filePathAndName.c_str()); - // LCOV_EXCL_STOP - } - } else if (0 != S_ISREG(l_stat.st_mode)) { - char path[PATH_MAX]; - if (realpath(f_filePathAndName.c_str(), path) != NULL) { - f_filePathAndName = path; - l_eFrameworkunifiedStatus = addFileToArchive(f_pTarInfo, f_filePathAndName, - f_destinationName); - } else { - FRAMEWORKUNIFIEDLOG(ZONE_WARN, __FUNCTION__, - "Archive not opened or could not access file: \"%s\"", - f_filePathAndName.c_str()); - } - } else { - FRAMEWORKUNIFIEDLOG( - ZONE_ERR, - __FUNCTION__, - " Error. specified file may be a symbolic link or other non 'regular' type. File: %s, mode: 0x%04X.", - f_filePathAndName.c_str(), l_stat.st_mode); - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return (l_eFrameworkunifiedStatus); -} - - -static EFrameworkunifiedStatus getFileNumberFromTempArchive(UI_32 &filenumber) -{ - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - char buf[FILENUMBER_DIGIT_NUM + 1]; - int fd; - int result; - EFrameworkunifiedStatus l_eFrameworkunifiedStatus = eFrameworkunifiedStatusOK; - - fd = open(LOGARCHIVE_FILENAME_STORE_ARCHIVE, O_RDONLY); - if (fd == -1) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR,__FUNCTION__," Error. open(). path = %s ,errno = %d", LOGARCHIVE_FILENAME_STORE_ARCHIVE, errno); - return eFrameworkunifiedStatusAccessError; - } - - result = read(fd, buf, FILENUMBER_DIGIT_NUM); - if (result != FILENUMBER_DIGIT_NUM) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR,__FUNCTION__," Error. read(). path = %s ,result = %d, errno = %d", - LOGARCHIVE_FILENAME_STORE_ARCHIVE, result, errno); - l_eFrameworkunifiedStatus = eFrameworkunifiedStatusAccessError; - } else { - char *endptr; - int error_number; - int temp_value; - buf[FILENUMBER_DIGIT_NUM] = '\x0'; - errno = EOK; - temp_value = strtol(buf, &endptr, 10); - error_number = errno; - if ((error_number != EOK) || (*endptr != '\x0')) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR,__FUNCTION__," Error. Failed to comvert string. source = %s ,errno = %d", buf, errno); - l_eFrameworkunifiedStatus = eFrameworkunifiedStatusInvldParam; - } else { - filenumber = temp_value; - } - } - result = close(fd); - if (result != 0) { // LCOV_EXCL_BR_LINE 6: close() must return ok - // LCOV_EXCL_START 6: close() must return ok - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR,__FUNCTION__," Error. close(). path = %s ,errno = %d", LOGARCHIVE_FILENAME_STORE_ARCHIVE, errno); - // LCOV_EXCL_STOP - } - result = remove(LOGARCHIVE_FILENAME_STORE_ARCHIVE); - if (result != 0) { // LCOV_EXCL_BR_LINE 6: remove() must return ok - // LCOV_EXCL_START 6: remove() must return ok - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR,__FUNCTION__," Error. remove(). path = %s ,errno = %d", LOGARCHIVE_FILENAME_STORE_ARCHIVE, errno); - // LCOV_EXCL_STOP - } - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_eFrameworkunifiedStatus; -} - -static EFrameworkunifiedStatus storeTempArchive(const std::string &real_name) -{ - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - std::string filename; - size_t pos; - int fd; - int result; - const char *p_real_filename; - EFrameworkunifiedStatus l_eFrameworkunifiedStatus = eFrameworkunifiedStatusOK; - - fd = open(LOGARCHIVE_FILENAME_STORE_ARCHIVE, O_CREAT | O_WRONLY, TMPFILE_MODE); - if (fd == -1) { // LCOV_EXCL_BR_LINE 5: open's error case - // LCOV_EXCL_START 5: open's error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR,__FUNCTION__," Error. open(). path = %s ,errno = %d", LOGARCHIVE_FILENAME_STORE_ARCHIVE, errno); - return eFrameworkunifiedStatusAccessError; - // LCOV_EXCL_STOP - } - - pos = real_name.find_last_of(PATHNAME_SEPARATOR); - if (pos == std::string::npos) { // LCOV_EXCL_BR_LINE 6: there must be '/' in string real_name - // LCOV_EXCL_START 6: there must be '/' in string real_name - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - p_real_filename = real_name.c_str(); - // LCOV_EXCL_STOP - } else { - p_real_filename = &real_name[pos + 1]; - } - - result = write(fd, p_real_filename, FILENUMBER_DIGIT_NUM); - if (result != FILENUMBER_DIGIT_NUM) { // LCOV_EXCL_BR_LINE 5: write's error case - // LCOV_EXCL_START 5: write's error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR,__FUNCTION__," Error. write(). path = %s ,result = %d, errno = %d", - LOGARCHIVE_FILENAME_STORE_ARCHIVE, result, errno); - l_eFrameworkunifiedStatus = eFrameworkunifiedStatusAccessError; - // LCOV_EXCL_STOP - } - - result = close(fd); - if (result != 0) { // LCOV_EXCL_BR_LINE 5: close's error case - // LCOV_EXCL_START 5: close's error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR,__FUNCTION__," Error. close(). path = %s ,errno = %d", LOGARCHIVE_FILENAME_STORE_ARCHIVE, errno); - l_eFrameworkunifiedStatus = eFrameworkunifiedStatusAccessError; - // LCOV_EXCL_STOP - } - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_eFrameworkunifiedStatus; -} - - - -//static EFrameworkunifiedStatus closeArchive(TAR* f_pTarInfo) { -static EFrameworkunifiedStatus closeArchive(TAR* f_pTarInfo, SS_STORELOGS_OPE_TYPE type) { - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - EFrameworkunifiedStatus l_eFrameworkunifiedStatus = eFrameworkunifiedStatusOK; - - if (0 != tar_append_eof(f_pTarInfo)) { // LCOV_EXCL_BR_LINE 5: tar_append_eof's error case - // LCOV_EXCL_START 5: tar_append_eof's error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __PRETTY_FUNCTION__, "tar_append_eof()"); - l_eFrameworkunifiedStatus = eFrameworkunifiedStatusFail; - // LCOV_EXCL_STOP - } - if (0 != tar_close(f_pTarInfo)) { // LCOV_EXCL_BR_LINE 5: tar_close's error case - // LCOV_EXCL_START 5: tar_close's error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Could not close archive"); - l_eFrameworkunifiedStatus = eFrameworkunifiedStatusFail; - // LCOV_EXCL_STOP - } - - if (eFrameworkunifiedStatusOK == l_eFrameworkunifiedStatus) { // LCOV_EXCL_BR_LINE 6: l_eFrameworkunifiedStatus must be eFrameworkunifiedStatusOK - l_eFrameworkunifiedStatus = copyFile(m_tmpName, m_pathAndName); - if (eFrameworkunifiedStatusOK == l_eFrameworkunifiedStatus) { - - if (type == SS_STORELOGS_ILLEGAL) { - l_eFrameworkunifiedStatus = storeTempArchive(m_pathAndName); - if (eFrameworkunifiedStatusOK != l_eFrameworkunifiedStatus) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Error. Failed to store temporary file."); - } - } - - l_eFrameworkunifiedStatus = - (0 == remove(m_tmpName.c_str())) ? eFrameworkunifiedStatusOK : eFrameworkunifiedStatusFault; - if (eFrameworkunifiedStatusOK != l_eFrameworkunifiedStatus) { // LCOV_EXCL_BR_LINE 5: remove's error case - // LCOV_EXCL_START 5: remove's error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG( - ZONE_WARN, - __FUNCTION__, - " Warning. Failed to remove temporary archive. Will overwrite on next event"); - // LCOV_EXCL_STOP - } - } else if (eFrameworkunifiedStatusErrNoEAGAIN == l_eFrameworkunifiedStatus) { // LCOV_EXCL_BR_LINE 4: no space error case - // LCOV_EXCL_START 4: no space error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - // disk space full - struct stat st_buf; - size_t req_size; - if (stat(m_tmpName.c_str(), &st_buf) != -1) { - req_size = st_buf.st_size; - if (eFrameworkunifiedStatusOK == forceDeleteOldLog(m_pathAndName, req_size)) { - l_eFrameworkunifiedStatus = copyFile(m_tmpName, m_pathAndName); - if (eFrameworkunifiedStatusOK != l_eFrameworkunifiedStatus) { - FRAMEWORKUNIFIEDLOG( - ZONE_ERR, - __FUNCTION__, - "Try Again but Error. Failed to copy to destination.%s, size=%d", - m_pathAndName.c_str(), req_size); - } - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - "Error. force delete failed.%s, size=%d", - m_pathAndName.c_str(), req_size); - } - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, " emmc full: dest=%s, size=%d", - m_pathAndName.c_str(), req_size); - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - "Warning. Failed to get tmp log file stat. dest=%s", - m_pathAndName.c_str()); - } - // LCOV_EXCL_STOP - } else { - /* should we copy lost archive to emmc?? */ - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - " Error. Failed to copy to destination. %s", m_pathAndName.c_str()); - } - remove(m_tmpName.c_str()); - m_tmpName = ""; - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return (l_eFrameworkunifiedStatus); -} - -static EFrameworkunifiedStatus addFileToArchive(TAR* f_pTarInfo, std::string f_filename, - std::string f_destinationName) { - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - EFrameworkunifiedStatus l_eFrameworkunifiedStatus = eFrameworkunifiedStatusOK; /* check if Tar is open and if file can be read */ - - if ((NULL != f_pTarInfo) && (0 == access(f_filename.c_str(), R_OK)) - && (0 != f_destinationName.length())) { - int l_tarRetVal = tar_append_file(f_pTarInfo, const_cast<char*>(f_filename.c_str()), - const_cast<char*>(f_destinationName.c_str())); - if (0 != l_tarRetVal) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - "Could not add file \'%s\' to tar archive.", f_filename.c_str()); - l_eFrameworkunifiedStatus = eFrameworkunifiedStatusAccessError; - } - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - "Archive not opened or could not access file: \"%s\"", - f_filename.c_str()); - l_eFrameworkunifiedStatus = eFrameworkunifiedStatusInvldParam; - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return (l_eFrameworkunifiedStatus); -} - -static EFrameworkunifiedStatus addAllFileToArchive (TAR* f_pTarInfo, std::string collectDir) -{ - struct dirent l_pDirent; - struct dirent* next; - EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusFail; - DEB_LOGGERSERVICELOG(ZONE_FUNC, __FUNCTION__, "+"); - DIR * l_pDir = opendir(collectDir.c_str()); - if (l_pDir == NULL) { - DEB_LOGGERSERVICELOG(ZONE_ERR, __FUNCTION__, "Could not open directory: %s", collectDir.c_str()); - } else { - while (0 == readdir_r(l_pDir,&l_pDirent,&next) && next != NULL) { - if ( ( 0 != strcmp( l_pDirent.d_name, "." ) ) && - ( 0 != strcmp( l_pDirent.d_name, ".." )) && - ( 0 != strcmp( l_pDirent.d_name, "lost+found" )) && - ( '.' != l_pDirent.d_name[0] ) ) { - std::string l_fileSource = collectDir; - l_fileSource.append("/"); - l_fileSource.append(l_pDirent.d_name); - std::string l_fileDestination = l_pDirent.d_name; - l_eStatus = addToArchive(f_pTarInfo,l_fileSource,l_fileDestination); - if (l_eStatus != eFrameworkunifiedStatusOK) { - break; - } - } - } - closedir (l_pDir); - } - DEB_LOGGERSERVICELOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_eStatus; -} - -static EFrameworkunifiedStatus addDirectoryToArchive(TAR* f_pTarInfo, std::string f_path, - std::string f_destinationName, - UI_8 f_depth) { - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - EFrameworkunifiedStatus l_eFrameworkunifiedStatus = eFrameworkunifiedStatusOK; - - DIR *l_pDir = opendir(f_path.c_str()); - if (l_pDir != NULL) { - struct dirent* l_pDirent; - while ((l_pDirent = readdir(l_pDir)) != NULL) { - if ((0 != strcmp(l_pDirent->d_name, ".")) && /* Ignore special . directory. */ - (0 != strcmp(l_pDirent->d_name, "..")) && /* Ignore special .. directory. */ - ('.' != l_pDirent->d_name[0])) { /* Ignore hidden files */ - std::string l_extension = "/"; - std::string l_fileName = f_path; - std::string l_destName = f_destinationName; - l_extension.append(l_pDirent->d_name); - l_fileName.append(l_extension); - l_destName.append(l_extension); - l_eFrameworkunifiedStatus = addToArchive(f_pTarInfo, l_fileName, l_destName, - static_cast<UI_8>(f_depth - 1)); - } - } - closedir(l_pDir); - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return (l_eFrameworkunifiedStatus); -} - -static SI_32 gzOpenArchive(PCHAR f_pcPathname, SI_32 f_siOflags, - SI_32 f_siMode) { - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - SI_32 l_siFileDescriptor = -1; - - if (f_pcPathname) { - PCHAR l_pcGzoflags; - - switch (f_siOflags & O_ACCMODE) { // LCOV_EXCL_BR_LINE 200: only O_WRONLY be set - case O_WRONLY: - l_pcGzoflags = (PCHAR) "wb"; - break; - // LCOV_EXCL_START 200: only O_WRONLY be set - case O_RDONLY: - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - l_pcGzoflags = (PCHAR) "rb"; - break; - // LCOV_EXCL_STOP - case O_RDWR: - default: - return -1; - } - if (-1 == (l_siFileDescriptor = open(f_pcPathname, f_siOflags, f_siMode))) { - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return -1; - } - - if ((f_siOflags & O_CREAT) && fchmod(l_siFileDescriptor, f_siMode)) { - close(l_siFileDescriptor); - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return -1; - } - - g_gztype = gzdopen(l_siFileDescriptor, l_pcGzoflags); - if (!g_gztype) { - close(l_siFileDescriptor); - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return -1; - } - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Source Path empty."); - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return (SI_32) l_siFileDescriptor; -} - -static SI_32 gzCloseArchive() { - return gzclose(g_gztype); -} - -static ssize_t gzWriteArchive(int fd, const void* buf, size_t count) { - return gzwrite(g_gztype, const_cast<void*>(buf), (unsigned int) count); -} - -static ssize_t gzReadArchive(int fd, void* buf, size_t count) { - return gzread(g_gztype, buf, (unsigned int) count); -} - -static EFrameworkunifiedStatus copyFile(std::string f_source, std::string f_destination) { - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK; - ssize_t l_nrd; - ssize_t l_nwr; - char l_buf[1024]; - - int l_if = open(f_source.c_str(), O_RDONLY | O_CLOEXEC); - if (-1 == l_if) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - "Error. Failed to open file: %s for reading.", f_source.c_str()); - l_eStatus = eFrameworkunifiedStatusFail; - } else { - std::string l_tmpDest; - size_t l_pos = f_destination.find_last_of('/'); - - if (std::string::npos != l_pos) { // LCOV_EXCL_BR_LINE 6: there must be '/' in string f_destination - l_tmpDest = f_destination.substr(0, l_pos); - l_tmpDest.append("/"); - l_tmpDest.append(LOGGER_TMP_FN); - if (unlink(l_tmpDest.c_str()) != 0) { - // always delete tmpLog, and create new tmpLog. - } - } else { - // LCOV_EXCL_START 6: there must be '/' in string f_destination - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - l_tmpDest = f_destination; - // LCOV_EXCL_STOP - } - - int l_of = open(l_tmpDest.c_str(), O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC, - 0640); - if (-1 == l_of) { // LCOV_EXCL_BR_LINE 5: open's error case - // LCOV_EXCL_START 5: open's error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "dest open fail:%s,errno:%d,msg:%s", - l_tmpDest.c_str(), errno, strerror(errno)); - l_eStatus = eFrameworkunifiedStatusFail; - // LCOV_EXCL_STOP - } else { - do { - l_nrd = read(l_if, l_buf, sizeof(l_buf)); - if (l_nrd == -1) { // LCOV_EXCL_BR_LINE 5: read's error case - // LCOV_EXCL_START 5: read's error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "read fail:%s,errno:%d,msg:%s", - f_source.c_str(), errno, strerror(errno)); - l_eStatus = eFrameworkunifiedStatusAccessError; - break; - // LCOV_EXCL_STOP - } - l_nwr = write(l_of, l_buf, l_nrd); - if (l_nwr == -1) { // LCOV_EXCL_BR_LINE 5: write's error case - // LCOV_EXCL_START 5: write's error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - if (ENOSPC == errno) { // LCOV_EXCL_BR_LINE 4: no space error case - // LCOV_EXCL_START 4: no space error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - "write fail(ENOSPC):%s,errno:%d,msg:%s", l_tmpDest.c_str(), - errno, strerror(errno)); - l_eStatus = eFrameworkunifiedStatusErrNoEAGAIN; - // LCOV_EXCL_STOP - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "write fail:%s,errno:%d,msg%s", - l_tmpDest.c_str(), errno, strerror(errno)); - l_eStatus = eFrameworkunifiedStatusAccessError; - } - break; - // LCOV_EXCL_STOP - } - } while (l_nrd > 0); - fsync(l_of); - close(l_of); - } - close(l_if); - - if (rename(l_tmpDest.c_str(), f_destination.c_str()) != 0) { // LCOV_EXCL_BR_LINE 5: rename's error case - // LCOV_EXCL_START 5: rename's error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "rename %s to %s fail,errno:%d,msg:%s", - l_tmpDest.c_str(), f_destination.c_str(), errno, strerror(errno)); - // LCOV_EXCL_STOP - } - - if (std::string::npos != l_pos) { // LCOV_EXCL_BR_LINE 6: there must be '/' in string f_destination - std::string l_destPath = f_destination.substr(0, l_pos); - SyncDir(l_destPath); - } else { - // LCOV_EXCL_START 6: there must be '/' in string f_destination - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "dest invalid:%s", f_destination.c_str()); - // LCOV_EXCL_STOP - } - } - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return (l_eStatus); -} - -static EFrameworkunifiedStatus copyDirectory (std::string f_source, std::string f_destination) -{ - DEB_LOGGERSERVICELOG(ZONE_FUNC, __FUNCTION__, "+"); - EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK; - DIR * l_pDir = opendir(f_source.c_str()); - if (l_pDir == NULL) { - DEB_LOGGERSERVICELOG(ZONE_ERR, __FUNCTION__, "Could not open directory: %s", f_source.c_str()); - } else { - if (mkdir(f_destination.c_str(),0775) == -1) { - if (errno == EEXIST) { - DEB_LOGGERSERVICELOG(ZONE_FUNC, __FUNCTION__, "Directory: %s already exists.", f_destination.c_str()); - } else { - DEB_LOGGERSERVICELOG(ZONE_ERR, __FUNCTION__, "Could not create directory: %s. Errno: %s", f_destination.c_str(),strerror(errno)); - l_eStatus = eFrameworkunifiedStatusFail; - } - } else { - SyncDir(f_destination); - size_t l_pos = f_destination.find_last_of('/'); - if (l_pos != std::string::npos) { - std::string l_destPath = f_destination.substr(0, l_pos); - SyncDir(l_destPath); - } - } - - struct dirent l_pDirent; - struct dirent* next; - while (0 == readdir_r(l_pDir,&l_pDirent,&next) && next != NULL) { - if ( ( 0 != strcmp( l_pDirent.d_name, "." ) ) && - ( 0 != strcmp( l_pDirent.d_name, ".." )) && - ( 0 != strcmp( l_pDirent.d_name, "lost+found" )) && - ( '.' != l_pDirent.d_name[0] ) ) { - std::string l_fileSource = f_source; - std::string l_fileDestination = f_destination; - l_fileSource.append("/"); - l_fileSource.append(l_pDirent.d_name); - l_fileDestination.append("/"); - l_fileDestination.append(l_pDirent.d_name); - l_eStatus = copyUntyped(l_fileSource,l_fileDestination); - } - } - closedir (l_pDir); - } - DEB_LOGGERSERVICELOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_eStatus; -} - -static EFrameworkunifiedStatus copyUntyped (std::string f_source, std::string f_destination) -{ - DEB_LOGGERSERVICELOG(ZONE_FUNC, __FUNCTION__, "+"); - EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK; - struct stat l_stat; - SI_8 l_statRetVal; - if (0 != access(f_source.c_str(), F_OK)) { - DEB_LOGGERSERVICELOG(ZONE_ERR,__FUNCTION__," Error. The specified file path and name does not exist: %s", f_source.c_str()); - } else if (0 != (l_statRetVal = lstat(f_source.c_str(), &l_stat))) { - DEB_LOGGERSERVICELOG(ZONE_ERR,__FUNCTION__," Error. stat() for file or directory returned error: %s -> %d", f_source.c_str(), l_statRetVal); - } else if (0 != S_ISDIR(l_stat.st_mode)) { - l_eStatus = copyDirectory(f_source, f_destination); - } else if (0 != S_ISLNK(l_stat.st_mode)) { - l_eStatus = copyDirectory(f_source, f_destination); - } else if (0 != S_ISREG(l_stat.st_mode)) { - l_eStatus = copyFile(f_source, f_destination); - } else { - DEB_LOGGERSERVICELOG(ZONE_ERR,__FUNCTION__," Error. specified file may be a symbolic link or other non 'regular' type. File: %s, mode: 0x%04X.",f_source.c_str(),l_stat.st_mode); - } - DEB_LOGGERSERVICELOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_eStatus; -} - -static EFrameworkunifiedStatus copyFileToAccOffOnDir(std::vector<LogInfo>& list, SS_STORELOGS_OPE_TYPE type) -{ - EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK; - EFrameworkunifiedStatus l_eFrameworkunifiedStatus = eFrameworkunifiedStatusOK; - std::string f_destination = LOGGERSERVICELOG_TMP_OUTPUT_PATH; - f_destination.append("/"); - f_destination.append(ACCOFFON_DIR_NAME); - DIR * l_pDir = opendir(LOGGERSERVICELOG_TMP_OUTPUT_PATH); - if (l_pDir == NULL) { - DEB_LOGGERSERVICELOG(ZONE_ERR, __FUNCTION__, "Could not open directory: %s", LOGGERSERVICELOG_TMP_OUTPUT_PATH); - l_eStatus = eFrameworkunifiedStatusFail; - return l_eStatus; - } else { - closedir (l_pDir); - if (mkdir(f_destination.c_str(), 0775) == -1) { - DEB_LOGGERSERVICELOG(ZONE_ERR, __FUNCTION__, "Could not create directory: %s. Errno: %s", f_destination.c_str(),strerror(errno)); - l_eStatus = eFrameworkunifiedStatusFail; - return l_eStatus; - } - } if (list.size() != 0) { - for (UI_32 j = 0; j < list.size(); j++) { - std::string dest_name = f_destination; - dest_name.append("/"); - dest_name.append(list.at(j).dest_name); - l_eFrameworkunifiedStatus = copyUntyped(list.at(j).file_path, dest_name); - if (l_eFrameworkunifiedStatus != eFrameworkunifiedStatusOK) { - DEB_LOGGERSERVICELOG(ZONE_WARN, __FUNCTION__, " Error. File %s failed to archive.", list.at(j).file_path.c_str()); - l_eStatus = l_eFrameworkunifiedStatus; - } - } - copyLoggerservicelogFile(f_destination); - } - return l_eStatus; -} - -ELOGGERSERVICELOGTYPE QueryLoggerservicelogType(std::string f_logname) { -// if (f_logname.find("_ILG_RESET.tar.gz") != std::string::npos - if (f_logname.find(SS_STORE_FILENAME_SYSILG_TERM) != std::string::npos) { - return eLoggerservicelogTypeSysAbnormal; - } else if (f_logname.find(SS_STORE_FILENAME__CWORD52__TERM) != std::string::npos) { - return eLoggerservicelogType_CWORD52_; - } else if (f_logname.find("_ILG_RESET.tar.gz") != std::string::npos - - || f_logname.find("_ERR.tar.gz") != std::string::npos) { - return eLoggerservicelogTypeAbnormal; - } else if (f_logname.find("_GRP_RELAUNCH.tar.gz") != std::string::npos) { - return eLoggerservicelogTypeGrpRelaunch; - } else if (f_logname.find(".tar.gz") != std::string::npos) { - return eLoggerservicelogTypeNormal; - } else { - return eLoggerservicelogTypeOther; - } -} - -void SyncDir(std::string f_dir_path) { - int fd = open(f_dir_path.c_str(), O_RDONLY | O_DIRECTORY | O_CLOEXEC); -#define OPE_ERR_MSG "%s %s failed. errno:%d,msg:%s" - if (fd == -1) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, OPE_ERR_MSG, f_dir_path.c_str(), "open", - errno, strerror(errno)); - } else { - if (fsync(fd) == -1) { // LCOV_EXCL_BR_LINE 5: fsync's error case - // LCOV_EXCL_START 5: fsync's error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, OPE_ERR_MSG, f_dir_path.c_str(), "fsync", - errno, strerror(errno)); - // LCOV_EXCL_STOP - } - if (close(fd) == -1) { // LCOV_EXCL_BR_LINE 5: close's error case - // LCOV_EXCL_START 5: close's error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, OPE_ERR_MSG, f_dir_path.c_str(), "close", - errno, strerror(errno)); - // LCOV_EXCL_STOP - } - } -#undef OPE_ERR_MSG -} - -// LCOV_EXCL_START 4: no space error case -size_t deleteRequestLogs(std::string f_emmcpath, ELOGGERSERVICELOGTYPE f_reqtype, - size_t f_reqsize, ELOGGERSERVICELOGTYPE f_deltype) { - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - DIR* l_dirp = NULL; - std::vector<std::string> vect; - std::vector<std::string>::iterator it; - UI_32 l_count = 0; - size_t l_totalsize = 0; - - ELOGGERSERVICELOGTYPE filetype; - - - // create saved file list on eMMC - l_dirp = opendir(f_emmcpath.c_str()); - if (l_dirp != NULL) { - struct dirent l_dirent; - struct dirent* next; - while (0 == readdir_r(l_dirp, &l_dirent, &next) && next != NULL) { - std::string l_filename = l_dirent.d_name; - -// if (QueryLoggerservicelogType(l_filename) == f_deltype) { -// vect.push_back(l_filename); -// } - if ((l_filename == ".") && (l_filename == "..")) { - continue; - } - filetype = QueryLoggerservicelogType(l_filename); - if (f_deltype == eLoggerservicelogTypeAbnormal) { - if ((filetype == eLoggerservicelogTypeAbnormal) || (filetype == eLoggerservicelogTypeSysAbnormal) || - (filetype == eLoggerservicelogType_CWORD52_)) { - vect.push_back(l_filename); - } - } else if (filetype == f_deltype) { - vect.push_back(l_filename); - } - - } - closedir(l_dirp); - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, " open failed eMMC path: %s", - f_emmcpath.c_str()); - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return 0; - } - - // get num of delete logs - std::sort(vect.begin(), vect.end()); - for (it = vect.begin(); it != vect.end(); it++) { - l_count++; - - std::string l_filename = *it; - struct stat st_buf; - std::string l_tmpstr = f_emmcpath; - l_tmpstr.append(l_filename.c_str()); - if (stat(l_tmpstr.c_str(), &st_buf) != -1) { - l_totalsize += st_buf.st_size; - } - - if (l_totalsize > f_reqsize) { - break; - } - } - - // start delete logs - if ((l_totalsize > f_reqsize) || (f_reqtype == eLoggerservicelogTypeAbnormal) - || (f_reqtype == eLoggerservicelogTypeGrpRelaunch)) { - for (it = vect.begin(); it != vect.end() && l_count > 0; it++) { - l_count--; - - std::string l_filename = *it; - std::string l_tmpstr = f_emmcpath; - l_tmpstr.append(l_filename.c_str()); - if (unlink(l_tmpstr.c_str()) != 0) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, " unlink failed %s:%d,msg:%s", - l_tmpstr.c_str(), errno, strerror(errno)); - } - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, " del-file=%s total=%d", l_tmpstr.c_str(), - l_totalsize); - } - - if (f_reqtype == eLoggerservicelogTypeAbnormal) { - removeSameNumFiles(it, f_emmcpath, vect); - } - - SyncDir(f_emmcpath); - } else { - l_totalsize = 0; - FRAMEWORKUNIFIEDLOG( - ZONE_INFO, - __FUNCTION__, - " nothing to delete logs req-type=%d del-logtype=%d total=%d, log_count=%d", - f_reqtype, f_deltype, l_totalsize, l_count); - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_totalsize; -} -// LCOV_EXCL_STOP - -// LCOV_EXCL_START 4: no space error case -EFrameworkunifiedStatus forceDeleteOldLog(std::string f_archive_destination, - size_t f_req_size) { - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusFail; - std::string l_emmc_path; - size_t l_delsize = 0; - ELOGGERSERVICELOGTYPE l_logtype = eLoggerservicelogTypeOther; - - size_t l_pos = f_archive_destination.find_last_of('/'); - if (std::string::npos != l_pos) { - l_emmc_path = f_archive_destination.substr(0, l_pos); - l_emmc_path.append("/"); - l_logtype = QueryLoggerservicelogType( - f_archive_destination.substr(l_pos + 1, - f_archive_destination.size() - l_pos + 1)); - - if ((l_logtype == eLoggerservicelogTypeSysAbnormal) || (l_logtype == eLoggerservicelogType_CWORD52_)) { - l_logtype = eLoggerservicelogTypeAbnormal; - } - - } - - if (l_logtype == eLoggerservicelogTypeOther) { - // not found - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, " Invalid Parameter. dest=%s", - f_archive_destination.c_str()); - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return eFrameworkunifiedStatusFail; - } - - // remove dirty-file if exist - if (unlink(f_archive_destination.c_str()) != 0) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, " unlink failed %s:%d.", - f_archive_destination.c_str(), errno); - } - - // delete normal log - l_delsize = deleteRequestLogs(l_emmc_path, l_logtype, f_req_size, - eLoggerservicelogTypeNormal); - if (l_delsize >= f_req_size) { - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, - " delete normal logs success: req-size=%d, del-size=%d", f_req_size, - l_delsize); - l_eStatus = eFrameworkunifiedStatusOK; - } else if (l_logtype == eLoggerservicelogTypeAbnormal) { - // delete abnormal log if request type is abnormal - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, - " continue delete abnormal logs: req-size=%d, del-size=%d", - f_req_size, l_delsize); - size_t l_tmpsize = f_req_size; - l_tmpsize -= l_delsize; - l_delsize = deleteRequestLogs(l_emmc_path, l_logtype, l_tmpsize, - eLoggerservicelogTypeAbnormal); - if (l_delsize >= l_tmpsize) { - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, - " delete abnormal logs success: req-size=%d, del-size=%d", - f_req_size, l_delsize); - l_eStatus = eFrameworkunifiedStatusOK; - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - " abnormal log delete not complete. req-size=%d, del-size=%d", - f_req_size, l_delsize); - } - } else if (l_logtype == eLoggerservicelogTypeGrpRelaunch) { - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, - " continue delete group relaunch logs: req-size=%d, del-size=%d", - f_req_size, l_delsize); - size_t l_tmpsize = f_req_size; - l_tmpsize -= l_delsize; - l_delsize = deleteRequestLogs(l_emmc_path, l_logtype, l_tmpsize, - eLoggerservicelogTypeGrpRelaunch); - if (l_delsize >= l_tmpsize) { - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, - " delete group relaunch logs success: req-size=%d, del-size=%d", - f_req_size, l_delsize); - l_eStatus = eFrameworkunifiedStatusOK; - } else { - FRAMEWORKUNIFIEDLOG( - ZONE_ERR, __FUNCTION__, - " group relaunch log delete not complete. req-size=%d, del-size=%d", - f_req_size, l_delsize); - } - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - " normal log del not complete. req-size=%d, del-size=%d", f_req_size, - l_delsize); - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_eStatus; -} -// LCOV_EXCL_STOP - -/////////////////////////////////////////////////////////////////////// -/// Function SS_LoggerStoreDebugLogs -/////////////////////////////////////////////////////////////////////// -EFrameworkunifiedStatus SS_LoggerStoreLogs(SS_STORELOGS_OPE_TYPE type) { - if (type < SS_STORELOGS_MAX) { - return storeLogs(type); - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Error. Bad enum number %d", type); - return eFrameworkunifiedStatusFail; - } -} - - -EFrameworkunifiedStatus SS_LoggerStoreLogs_deleteOldLogAbnrm(const std::string& log_path, - std::vector<std::string>& l_vector, - const std::string& f_archive_destination, - SI_32 max_num, - UI_32 abnrm_total) { - EFrameworkunifiedStatus l_eFrameworkunifiedStatus; - l_eFrameworkunifiedStatus = deleteOldLogAbnrm(log_path, l_vector, f_archive_destination, max_num, abnrm_total); - return l_eFrameworkunifiedStatus; -} - - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// IsDirectory -/// Method to check if the entity is a directory. -//////////////////////////////////////////////////////////////////////////////////////////////////// -static BOOL IsDirectory(std::string &f_cPath) { // NOLINT (runtime/references) - BOOL l_bReturn = FALSE; - struct stat st_buf; - - if (-1 == stat(f_cPath.c_str(), &st_buf)) { // LCOV_EXCL_BR_LINE 5: stat's error case // NOLINT (runtime/references) // NOLINT[whitespace/line_length] - // LCOV_EXCL_START 5: stat's error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - "Error: stat failed for path/file %s, errno %d", f_cPath.c_str(), - errno); - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - // LCOV_EXCL_STOP - } else if (S_ISDIR(st_buf.st_mode)) { - l_bReturn = TRUE; // return true if f_cPath is a directory - } - return l_bReturn; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// RemoveDirectory -/// Method to remove a directory. -//////////////////////////////////////////////////////////////////////////////////////////////////// -static BOOL RemoveDirectory(std::string &f_cPath) { // NOLINT (runtime/references) - BOOL l_bReturn = FALSE; - - if (RemoveSubDirectory(f_cPath)) { // LCOV_EXCL_BR_LINE 6: RemoveSubDirectory always return true - // delete the parent directory - if (0 == rmdir(f_cPath.c_str())) { // LCOV_EXCL_BR_LINE 5: rmdir's error case - l_bReturn = TRUE; - } - } - return l_bReturn; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// RemoveSubDirectory -/// Method to remove a sub directory. -//////////////////////////////////////////////////////////////////////////////////////////////////// -static BOOL RemoveSubDirectory(std::string &f_cPath) { // NOLINT (runtime/references) - BOOL l_bReturn = TRUE; - - if (!f_cPath.empty()) { // LCOV_EXCL_BR_LINE 6: f_cPath can't be empty - std::string l_cFilePath = ""; - struct dirent l_Dirent; - struct dirent* next; - DIR *l_pDir = NULL; - - l_pDir = opendir(f_cPath.c_str()); - if (NULL != l_pDir) { // LCOV_EXCL_BR_LINE 5: opendir's error case - if ('/' != f_cPath[f_cPath.length() - 1]) { // LCOV_EXCL_BR_LINE 6: there must be no '/' - f_cPath.append("/"); - } - - while (0 == readdir_r(l_pDir, &l_Dirent, &next) && next != NULL) { - if (0 != std::strcmp(l_Dirent.d_name, ".") - && 0 != std::strcmp(l_Dirent.d_name, "..") - && 0 != std::strcmp(l_Dirent.d_name, "lost+found")) { - l_cFilePath.assign(f_cPath); - l_cFilePath.append(l_Dirent.d_name); // concatenate the strings to get the complete f_cPath - if (TRUE == IsDirectory(l_cFilePath)) { - l_bReturn = RemoveDirectory(l_cFilePath); - } else { - // it's a file, we can use unlink - if (unlink(l_cFilePath.c_str()) == -1) { // LCOV_EXCL_BR_LINE 5: unlink's error case - // LCOV_EXCL_START 5: unlink's error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - l_bReturn = FALSE; - // LCOV_EXCL_STOP - } - } - } - } - closedir(l_pDir); // close the directory - SyncDir(f_cPath); - } else { - // LCOV_EXCL_START 5: opendir's error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "l_pDir is NULL"); - // LCOV_EXCL_STOP - } - } else { - // LCOV_EXCL_START 6: f_cPath can't be empty - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Pathname empty."); - l_bReturn = FALSE; - // LCOV_EXCL_STOP - } - return l_bReturn; -} - -static void CreateSaveFinFlag(SS_STORELOGS_OPE_TYPE type) { - if (type == SS_STORELOGS_INTERFACEUNIFIEDLOG) { - int fd; - fd = open(SS_LOGGER_SAVE_INTERFACEUNIFIEDLOG_FLAG, - O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC, 0640); - if (fd == -1) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Error. Create %s. errno %d msg :%s", - SS_LOGGER_SAVE_INTERFACEUNIFIEDLOG_FLAG, errno, strerror(errno)); - } else { - fsync(fd); - close(fd); - std::string l_flagPath = SS_LOGGER_SAVE_INTERFACEUNIFIEDLOG_FLAG; - size_t l_pos = l_flagPath.find_last_of('/'); - if (std::string::npos != l_pos) { // LCOV_EXCL_BR_LINE 6: there must be '/' in l_flagPath - std::string l_dirPath = l_flagPath.substr(0, l_pos); - SyncDir(l_dirPath); - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "create saveflag finish."); - fprintf(stderr, "%s:Completed\n", __FUNCTION__); - } - } - } -} - -static void deleteAccOffOnUntyped(std::string deletePath) -{ - struct stat l_stat; - SI_8 l_statRetVal; - if (0 != access(deletePath.c_str(), F_OK)) { - DEB_LOGGERSERVICELOG(ZONE_WARN, __FUNCTION__, "access error (%s)", deletePath.c_str()); - } else if (0 != (l_statRetVal = lstat(deletePath.c_str(), &l_stat))) { - DEB_LOGGERSERVICELOG(ZONE_WARN, __FUNCTION__, "get stat error (%s)", deletePath.c_str()); - } else if (0 != S_ISDIR(l_stat.st_mode)) { - deleteAccOffOnDir(deletePath); - } else if (0 != S_ISREG(l_stat.st_mode)) { - unlink(deletePath.c_str()); - } -} - -static void deleteAccOffOnDir(std::string deletePath) -{ - DIR * l_pDir = opendir(deletePath.c_str()); - if (l_pDir != NULL) { - struct dirent l_pDirent; - struct dirent* next; - while (0 == readdir_r(l_pDir,&l_pDirent,&next) && next != NULL) { - if ( ( 0 != strcmp( l_pDirent.d_name, "." ) ) && - ( 0 != strcmp( l_pDirent.d_name, ".." )) && - ( 0 != strcmp( l_pDirent.d_name, "lost+found" )) && - ( '.' != l_pDirent.d_name[0] ) ) { - std::string l_deletePath = deletePath; - l_deletePath.append("/"); - l_deletePath.append(l_pDirent.d_name); - deleteAccOffOnUntyped(l_deletePath); - } - } - closedir (l_pDir); - } - RemoveDirectory(deletePath); -} - -static EFrameworkunifiedStatus storeLogs(SS_STORELOGS_OPE_TYPE type) { - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - EFrameworkunifiedStatus l_eFrameworkunifiedStatus = eFrameworkunifiedStatusOK; - - std::string file_name; - std::vector<LogInfo> list; - std::vector<LoggerservicelogInfo> loggerservicelogList; - TAR* tar_info = NULL; - uint32_t time_info; - uint8_t status; - CfgInfo cfginfo; - - UI_32 l_counter = INVALID_FILENUMBER; - - - // load ss_logger configuration file. - getConfigInfo(cfginfo); - - - if (type == SS_STORELOGS_SYS_ILLEGAL) { - if (getFileNumberFromTempArchive(l_counter) != eFrameworkunifiedStatusOK) { - // ------------------------------------ // - // no made ILG_RESET.tar.gz // - // when is abnormal logging count over. // - // ------------------------------------ // - return eFrameworkunifiedStatusOK; - } - } - - -// Clock_getSystemTimeY2K38(&time_info, &status); - -// file_name = getFileName(cfginfo.output_path, time_info, type); -// -// // prepare log files for collectting -// for (UI_32 i = 0; i < _countof(GetLogFuncTbl); i++) { -// GetLogFuncTbl[i](type, list); -// } - file_name = getFileName(cfginfo.output_path, time_info, type, l_counter); - - if (type != SS_STORELOGS_SYS_ILLEGAL) { - // prepare log files for collectting - for (UI_32 i = 0; i < _countof(GetLogFuncTbl); i++) { - GetLogFuncTbl[i](type, list); - } - } - - if (type == SS_STORELOGS_ACCOFFON) { - copyFileToAccOffOnDir(list, type); - DEB_LOGGERSERVICELOG(ZONE_FUNC, __FUNCTION__, "- : FrameworkunifiedStatus = %d", l_eFrameworkunifiedStatus); - return l_eFrameworkunifiedStatus; - } else if (type != SS_STORELOGS_ACCOFFON_PRESS) { - // loggerservicelogList used with clear buffer - getLoggerservicelogFile(type, list, loggerservicelogList); - } - - // ---------------------------------------------------------------- // - // Warning!!! Logs by using FRAMEWORKUNIFIEDLOG macro, are not saved from here!! // - // You can saved logs by FRAMEWORKUNIFIEDLOG after finished to clear buffer. // - // ---------------------------------------------------------------- // - - if (list.size() != 0) { - // delete old archive before create new one. - deleteOldEmmcLog(cfginfo, file_name, type); - - l_eFrameworkunifiedStatus = openArchive(&tar_info, file_name); - if (l_eFrameworkunifiedStatus == eFrameworkunifiedStatusOK) { - if (type == SS_STORELOGS_ACCOFFON_PRESS) { - std::string collectPath; - collectPath = LOGGERSERVICELOG_TMP_OUTPUT_PATH; - collectPath.append("/"); - collectPath.append(ACCOFFON_DIR_NAME); - if (0 != access(collectPath.c_str(), F_OK)) { - DEB_LOGGERSERVICELOG(ZONE_ERR,__FUNCTION__," Error. The specified file path and name does not exist: %s", collectPath.c_str()); - l_eFrameworkunifiedStatus = eFrameworkunifiedStatusFail; - return l_eFrameworkunifiedStatus; - } else { - l_eFrameworkunifiedStatus = addAllFileToArchive(tar_info,collectPath); - } - } else { - for (UI_32 j = 0; j < list.size(); j++) { - l_eFrameworkunifiedStatus = addToArchive(tar_info, list.at(j).file_path, list.at(j).dest_name); - if(l_eFrameworkunifiedStatus != eFrameworkunifiedStatusOK) { - FRAMEWORKUNIFIEDLOG(ZONE_WARN, __FUNCTION__, " Error. File %s failed to archive.", list.at(j).file_path.c_str()); - } - } - } - -// l_eFrameworkunifiedStatus = closeArchive(tar_info); - l_eFrameworkunifiedStatus = closeArchive(tar_info, type); - - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "finish archiving logs(%d)", type); - - // when finish archiving, clear frameworkunifiedlog buffer. - if (type == SS_STORELOGS_ACCOFFON_PRESS) { - deleteTmpAccOffOn((std::string)ACCOFFON_DIR_NAME); - DEB_LOGGERSERVICELOG(ZONE_FUNC, __FUNCTION__, "- : FrameworkunifiedStatus = %d", l_eFrameworkunifiedStatus); - return (l_eFrameworkunifiedStatus); - } else { - ClearLoggerservicelogBuffer(loggerservicelogList); - } - - // create flag of archiving completed - CreateSaveFinFlag(type); - - // -------------------------------------------- // - // You can save logs by FRAMEWORKUNIFIEDLOG macro from here. // - // -------------------------------------------- // - } - - // remove temporary or unnecessary files. - for (UI_32 k = 0; k < list.size(); k++) { - if (list.at(k).tmp_file_delete == TRUE) { - struct stat l_stat; - if (0 != stat(list.at(k).file_path.c_str(), &l_stat)) { - FRAMEWORKUNIFIEDLOG(ZONE_WARN, __FUNCTION__, "Error. stat(%s) errno. %d", - list.at(k).file_path.c_str(), errno); - } else if (S_ISDIR(l_stat.st_mode)) { - RemoveDirectory(list.at(k).file_path); - } else { - if (0 != unlink(list.at(k).file_path.c_str())) { // LCOV_EXCL_BR_LINE 5: unlink's error case - // LCOV_EXCL_START 5: unlink's error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_WARN, __FUNCTION__, " Error. unlink(%s) errno. %d", - list.at(k).file_path.c_str(), errno); - // LCOV_EXCL_STOP - } - } - } - } - } - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "- : FrameworkunifiedStatus = %d", l_eFrameworkunifiedStatus); - return (l_eFrameworkunifiedStatus); -} - -static void getCommunicationlogFile(SS_STORELOGS_OPE_TYPE type, - std::vector<LogInfo>& list) { // NOLINT (runtime/references) - - LogInfo log_info; - - log_info.file_path = FRAMEWORKUNIFIEDLOG_RAMDISC_PATH; - log_info.file_path.append("/"); - log_info.file_path.append(COMMUNICATION_DIR_NAME); - log_info.dest_name = COMMUNICATION_DIR_NAME; - log_info.tmp_file_delete = FALSE; - list.push_back(log_info); -} - -static void getExternallogFile(SS_STORELOGS_OPE_TYPE type, - std::vector<LogInfo>& list) { // NOLINT (runtime/references) - EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK; - ExternalLogList ext_log; - memset(&ext_log, 0, sizeof(&ext_log)); - - CNSConfigReader *l_pReaderCfg = new CNSConfigReader(); - - if (NULL == l_pReaderCfg) { // LCOV_EXCL_BR_LINE 5: new's error case - // LCOV_EXCL_START 5: new's error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, " Error. Unable to allocate CNSConfigReader object."); - // LCOV_EXCL_STOP - } else { - if (eFrameworkunifiedStatusOK != (l_eStatus = l_pReaderCfg->Parse(LOGGERSERVICELOG_CONFIG_PATH))) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, " Error. l_pReaderCfg->Parse(%s) returned: 0x%X", LOGGERSERVICELOG_CONFIG_PATH); - } else if (eFrameworkunifiedStatusOK != - (l_eStatus = l_pReaderCfg->GetInt("LOGGING.ExternalLogNum", ext_log.num))) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, " Error. l_pReaderCfg->GetInt(LOGGING.ExternalLogNum)"); - } else if (eFrameworkunifiedStatusOK != - (l_eStatus = l_pReaderCfg->GetInt("LOGGING.ExternalLogMax", ext_log.max))) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, " Error. l_pReaderCfg->GetInt(LOGGING.EmmcOutputMax)"); - } else { - if (ext_log.num > 0) { - std::string str = "EXTERNAL_"; - UI_32 num = 0; - - if (ext_log.num <= ext_log.max) { - num = ext_log.num; - } else { - num = ext_log.max; - } - - ext_log.p_info = new ExternalLogInfo[num]; - - // Load external log info - for (UI_32 i = 0; i < num; i++) { - std::string query = str + std::to_string(i+1); - if (eFrameworkunifiedStatusOK != - (l_eStatus = l_pReaderCfg->GetString((query+".OutputPath"), ext_log.p_info[i].dirname))) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, " Error. l_pReaderCfg->GetString(EXTERNAL.OutputPath)"); - } else if (eFrameworkunifiedStatusOK != - (l_eStatus = l_pReaderCfg->GetString((query+".ExtLogPath"), ext_log.p_info[i].path))) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, " Error. l_pReaderCfg->GetString(EXTERNAL.ExtLogPath)"); - } else if (eFrameworkunifiedStatusOK != - (l_eStatus = l_pReaderCfg->GetBool((query+".Remove"), ext_log.p_info[i].remove))) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, " Error. l_pReaderCfg->GetBool(EXTERNAL.Remove)"); - } else { - LogInfo log_info; - log_info.file_path = ext_log.p_info[i].path; - log_info.dest_name = ext_log.p_info[i].dirname; - log_info.tmp_file_delete = ext_log.p_info[i].remove; - - list.push_back(log_info); - } - } - - delete[] ext_log.p_info; - - } else { - // None external log - } - } - delete l_pReaderCfg; - } -} - - - - -static void getLoggerservicelogFile(SS_STORELOGS_OPE_TYPE type, - std::vector<LogInfo>& list, // NOLINT (runtime/references) - std::vector<LoggerservicelogInfo>& loggerservicelogList) { // NOLINT (runtime/references) - EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK; - UI_32 l_DumpSize = 0; - std::string src_file_path; - std::string dst_file_path; - PCSTR file_name; - UI_32 file_num; - LogInfo log_info; - LoggerservicelogInfo loggerservicelog_info; - - file_num = NSLogGetFrameworkunifiedlogFileTotalNum(); - for (UI_32 cont = 0; cont < file_num; cont++) { - file_name = NSLogGetFrameworkunifiedlogFileName(cont); - if (file_name == NULL) { - break; - } - src_file_path = FRAMEWORKUNIFIEDLOG_RAMDISC_PATH; - src_file_path.append("/"); - src_file_path.append(file_name); - dst_file_path = LOGGERSERVICELOG_TMP_OUTPUT_PATH; - dst_file_path.append("/"); - dst_file_path.append(file_name); - - int index; - index = NSLogGetFrameworkunifiedlogIndex(src_file_path.c_str()); - CNSRingBuffer* l_pLoggerservicelog = new (std::nothrow) CNSRingBuffer( - src_file_path, 0, index + LOCK_NSLOG_ACCES_IF_1); - if (l_pLoggerservicelog == NULL) { // LCOV_EXCL_BR_LINE 5: new's error case - // LCOV_EXCL_START 5: new's error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - "Error: FRAMEWORKUNIFIEDLOG RingBuffer handle is NULL %s", - src_file_path.c_str()); - continue; - // LCOV_EXCL_STOP - } else if (eFrameworkunifiedStatusOK != (l_eStatus = l_pLoggerservicelog->Open())) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - "Error: FRAMEWORKUNIFIEDLOG RingBuffer Open failed %s %d", - src_file_path.c_str(), l_eStatus); - } else { - if (eFrameworkunifiedStatusOK - != (l_eStatus = l_pLoggerservicelog->DumpToFile(dst_file_path.c_str(), - &l_DumpSize))) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - "Error: FRAMEWORKUNIFIEDLOG RingBuffer DumpToFile failed %s %d", - src_file_path.c_str(), l_eStatus); - } else { - log_info.file_path = dst_file_path; - log_info.dest_name = file_name; - log_info.tmp_file_delete = TRUE; - list.push_back(log_info); - // save frameworkunifiedlog-info for using clear frameworkunifiedlog buffer - loggerservicelog_info.path = src_file_path; - loggerservicelog_info.index = index; - loggerservicelogList.push_back(loggerservicelog_info); - } - (void) l_pLoggerservicelog->Close(); - } - delete l_pLoggerservicelog; - } -} - -static void copyLoggerservicelogFile(std::string distPath) -{ - EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK; - UI_32 l_DumpSize = 0; - std::string src_file_path; - std::string dst_file_path; - PCSTR file_name; - UI_32 file_num; - - file_num = NSLogGetFrameworkunifiedlogFileTotalNum(); - - for (UI_32 cont = 0; cont < file_num; cont++) { - file_name = NSLogGetFrameworkunifiedlogFileName(cont); - - if (file_name == NULL) { - break; - } - - src_file_path = FRAMEWORKUNIFIEDLOG_RAMDISC_PATH; - src_file_path.append("/"); - src_file_path.append(file_name); - - dst_file_path = distPath; - dst_file_path.append("/"); - dst_file_path.append(file_name); - - int index; - index = NSLogGetFrameworkunifiedlogIndex(src_file_path.c_str()); - CNSRingBuffer* l_pLoggerservicelog = new (std::nothrow)CNSRingBuffer(src_file_path,0,index+LOCK_NSLOG_ACCES_IF_1); - if (l_pLoggerservicelog == NULL) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Error: FRAMEWORKUNIFIEDLOG RingBuffer handle is NULL %s", src_file_path.c_str()); - continue; - } else if (eFrameworkunifiedStatusOK != (l_eStatus = l_pLoggerservicelog->Open())) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__,"Error: FRAMEWORKUNIFIEDLOG RingBuffer Open failed %s %d", src_file_path.c_str(), l_eStatus); - } else { - if (eFrameworkunifiedStatusOK != (l_eStatus = l_pLoggerservicelog->DumpToFile(dst_file_path.c_str(), &l_DumpSize))) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__,"Error: FRAMEWORKUNIFIEDLOG RingBuffer DumpToFile failed %s %d", src_file_path.c_str(), l_eStatus); - } - (void)l_pLoggerservicelog->Close(); - } - delete l_pLoggerservicelog; - } -} - -static void deleteTmpAccOffOn(std::string accOffOnDir) -{ - std::string l_tmpAccOffOnPath = LOGGERSERVICELOG_TMP_OUTPUT_PATH; - l_tmpAccOffOnPath.append("/"); - l_tmpAccOffOnPath.append(accOffOnDir.c_str()); - DIR * l_pDir = opendir(l_tmpAccOffOnPath.c_str()); - if (l_pDir != NULL) { - struct dirent l_pDirent; - struct dirent* next; - while (0 == readdir_r(l_pDir,&l_pDirent,&next) && next != NULL) { - if ( ( 0 != strcmp( l_pDirent.d_name, "." ) ) && - ( 0 != strcmp( l_pDirent.d_name, ".." )) && - ( 0 != strcmp( l_pDirent.d_name, "lost+found" )) && - ( '.' != l_pDirent.d_name[0] ) ) { - std::string l_deletePath = l_tmpAccOffOnPath; - l_deletePath.append("/"); - l_deletePath.append(l_pDirent.d_name); - deleteAccOffOnUntyped(l_deletePath); - } - } - closedir (l_pDir); - } - RemoveDirectory(l_tmpAccOffOnPath); -} - -static void ClearLoggerservicelogBuffer(std::vector<LoggerservicelogInfo> &loggerservicelogList) { // NOLINT (runtime/references) - EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK; - std::vector<LoggerservicelogInfo>::iterator ite = loggerservicelogList.begin(); - - if (ite == loggerservicelogList.end()) { - // target not found... - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "nothing to clear"); - } else { - for (ite = loggerservicelogList.begin(); ite != loggerservicelogList.end(); ite++) { - CNSRingBuffer* l_pLoggerservicelog = new (std::nothrow) CNSRingBuffer( - ite->path.c_str(), 0, ite->index + LOCK_NSLOG_ACCES_IF_1); - if (l_pLoggerservicelog == NULL) { // LCOV_EXCL_BR_LINE 5: new's error case - // LCOV_EXCL_START 5: new's error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - "Error: FRAMEWORKUNIFIEDLOG RingBuffer handle is NULL %s", ite->path.c_str()); - continue; - // LCOV_EXCL_STOP - } else if (eFrameworkunifiedStatusOK != (l_eStatus = l_pLoggerservicelog->Open())) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - "Error: FRAMEWORKUNIFIEDLOG RingBuffer Open failed %s %d", ite->path.c_str(), - l_eStatus); - } else { - if (eFrameworkunifiedStatusOK != (l_eStatus = l_pLoggerservicelog->ClearBuf())) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - "Error: FRAMEWORKUNIFIEDLOG RingBuffer ClearBuf failed %s %d", - ite->path.c_str(), l_eStatus); - } - (void) l_pLoggerservicelog->Close(); - } - delete l_pLoggerservicelog; - } - } - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Completed"); - fprintf(stderr, "%s:Completed\n", __FUNCTION__); -} - -static void createKernelLog(SS_STORELOGS_KERNEL_LOG_TYPE type) { - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - int len; - int fd; - char* buf; - ssize_t wr_len; - - len = klogctl(SYSLOG_ACTION_SIZE_BUFFER, NULL, 0); - if (len < 0) { // LCOV_EXCL_BR_LINE 5: klogctl's error case - // LCOV_EXCL_START 5: klogctl's error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - "Error. Failed to get syslog buffer size: %d, %s", errno, - strerror(errno)); - // LCOV_EXCL_STOP - } else { - buf = reinterpret_cast<char*>(malloc(len)); - if (buf != NULL) { // LCOV_EXCL_BR_LINE 5: malloc's error case - len = klogctl(SYSLOG_ACTION_READ_ALL, buf, len); - if ((len < 0) || (len == 0)) { // LCOV_EXCL_BR_LINE 5: klogctl's error case - // LCOV_EXCL_START 5: klogctl's error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - "Error. Failed to read syslog buffer: %d, %s", errno, - strerror(errno)); - // LCOV_EXCL_STOP - } else { - std::string file_put_path = ""; - - switch (type) { - case SS_STORELOGS_KERNEL_LOG: - file_put_path = LOGGERSERVICELOG_TMP_OUTPUT_PATH; - file_put_path.append("/"); - file_put_path.append(KERNEL_LOG_FN); - fd = open(file_put_path.c_str(), - O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC, 0644); - break; - case SS_STORELOGS_KERNEL_BOOT_LOG: - file_put_path = FRAMEWORKUNIFIEDLOG_RAMDISC_PATH; - file_put_path.append("/"); - file_put_path.append(KERNEL_BOOT_LOG_FN); - fd = open(file_put_path.c_str(), - O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC, 0644); - break; - default: - fd = -1; - break; - } - - if (fd == -1) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - "Error. Failed to open file: %s: %d, %s", - file_put_path.c_str(), errno, strerror(errno)); - } else { - wr_len = write(fd, buf, len); - if (wr_len == -1) { // LCOV_EXCL_BR_LINE 5: write's error case - // LCOV_EXCL_START 5: write's error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - " Error. File write failed. errno: %d, %s", errno, - strerror(errno)); - // LCOV_EXCL_STOP - } - fsync(fd); - close(fd); - } - } - free(buf); - } else { - // LCOV_EXCL_START 5: malloc's error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Memory allocation Failed %s", - strerror(errno)); - // LCOV_EXCL_STOP - } - } - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); -} - -static void getKernellogFile(SS_STORELOGS_OPE_TYPE type, - std::vector<LogInfo>& list) { // NOLINT (runtime/references) - getLastKernelLog(list); - - getKernelLog(list); - - if (type != SS_STORELOGS_ACCOFFON) { - getKernelBootLog(type, list); - } -} - -static void getLastKernelLog(std::vector<LogInfo>& list) { // NOLINT (runtime/references) - LogInfo log_info; - - log_info.file_path = PSTORE_DIR_PATH; - log_info.dest_name = "kernellog"; - log_info.tmp_file_delete = FALSE; - list.push_back(log_info); -} - -static void getKernelLog(std::vector<LogInfo>& list) { // NOLINT (runtime/references) - createKernelLog(SS_STORELOGS_KERNEL_LOG); - - LogInfo log_info; - - std::string klog_path = LOGGERSERVICELOG_TMP_OUTPUT_PATH; - klog_path.append("/"); - klog_path.append(KERNEL_LOG_FN); - - if (0 == access(klog_path.c_str(), F_OK)) { - log_info.file_path = klog_path; - log_info.dest_name = KERNEL_LOG_FN; - log_info.tmp_file_delete = TRUE; - list.push_back(log_info); - } else { - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "Info: %s not found.", klog_path.c_str()); - } -} - -static void getKernelBootLog(SS_STORELOGS_OPE_TYPE type, - std::vector<LogInfo>& list) { // NOLINT (runtime/references) - createKernelLog(SS_STORELOGS_KERNEL_BOOT_LOG); - - LogInfo log_info; - - std::string klog_path = FRAMEWORKUNIFIEDLOG_RAMDISC_PATH; - klog_path.append("/"); - klog_path.append(KERNEL_BOOT_LOG_FN); - - if (0 == access(klog_path.c_str(), F_OK)) { - std::string klog_out_path = LOGGERSERVICELOG_TMP_OUTPUT_PATH; - klog_out_path.append("/"); - klog_out_path.append(KERNEL_BOOT_LOG_FN); - - if (eFrameworkunifiedStatusOK == copyFile(klog_path.c_str(), klog_out_path.c_str())) { // LCOV_EXCL_BR_LINE 6: copyFile must return ok // NOLINT[whitespace/line_length] - log_info.file_path = klog_out_path; - log_info.dest_name = KERNEL_BOOT_LOG_FN; - log_info.tmp_file_delete = TRUE; - list.push_back(log_info); - } else { - // LCOV_EXCL_START 6: copyFile must return ok - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "Info: copyFile src:%s dest:%s failed.", - klog_path.c_str(), klog_out_path.c_str()); - // LCOV_EXCL_STOP - } - } else { - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "Info: %s not found.", klog_path.c_str()); - } -} - - -//static std::string getFileName(std::string &path, uint32_t f_time, // NOLINT (runtime/references) -// SS_STORELOGS_OPE_TYPE type) { -static std::string getFileName(std::string &path, uint32_t f_time, - SS_STORELOGS_OPE_TYPE type, UI_32 l_counter) { - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - std::stringstream l_nameStream; - -// UI_32 l_counter = 0; - std::string l_time_str = "00000000_000000"; - std::string l_ret; - char buffer[20]; - struct tm l_time_tmp; - - -// getEmmcCounter(path, l_counter); - if (l_counter == INVALID_FILENUMBER) { - l_counter = 0; - getEmmcCounter(path, l_counter); - } - - -// CLOCK_RETURN clock_ret = Clock_getLocalTimeY2K38(&f_time, &l_time_tmp); -// if (clock_ret == CLOCK_OK) { -// if (0 != strftime(buffer, sizeof(buffer), "%Y%m%d_%H%M%S", &l_time_tmp)) { -// l_time_str = buffer; -// } -// } - -// l_nameStream << std::setw(5) << std::setfill('0') << std::right << std::dec -// << l_counter << '_'; - l_nameStream << std::setw(FILENUMBER_DIGIT_NUM) << std::setfill('0') << std::right << std::dec - << l_counter << '_'; - - - switch (type) { - case SS_STORELOGS_ILLEGAL: - l_nameStream << std::setw(15) << l_time_str << "_ILG_RESET.tar.gz"; - break; - case SS_STORELOGS_INTERFACEUNIFIEDLOG: - l_nameStream << std::setw(15) << l_time_str << "_ACCOFF.tar.gz"; - break; - case SS_STORELOGS_ACCOFFON: - case SS_STORELOGS_ACCOFFON_PRESS: - l_nameStream << std::setw(15) << l_time_str << "_ACCOFFON.tar.gz"; - break; - - case SS_STORELOGS_SYS_ILLEGAL: - l_nameStream << std::setw(15) << l_time_str << SS_STORE_FILENAME_SYSILG_TERM; - break; - - default: - //Set the file name as usual for cases other than the anomaly log specification. - l_nameStream << std::setw(15) << l_time_str << ".tar.gz"; - break; - } - - l_ret = path; - l_ret.append("/"); - l_ret.append(l_nameStream.str()); - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return (l_ret); -} - -static void getEmmcCounter(std::string &path, UI_32& f_counter) { // NOLINT (runtime/references) - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - std::string l_checkFileName; - std::vector<UI_32> l_vector; - DIR *l_dirp; - struct dirent *l_direntp; - size_t l_pos; - UI_32 l_count; - UI_32 l_maxCount = 0; - - l_dirp = opendir(path.c_str()); - if (l_dirp != NULL) { - for (;;) { - l_direntp = readdir(l_dirp); - if (l_direntp == NULL) { - break; - } - l_checkFileName = l_direntp->d_name; - l_pos = l_checkFileName.find(".tar.gz"); - if (std::string::npos != l_pos) { - l_pos = l_checkFileName.find("_"); - if (std::string::npos != l_pos) { - std::string l_numberString = l_checkFileName.substr(0, l_pos); - l_count = static_cast<UI_32>(strtoul(l_numberString.c_str(), NULL, 10)); - l_vector.push_back(l_count); - l_maxCount = std::max(l_count, l_maxCount); - } - } - } - closedir(l_dirp); - } - l_maxCount++; - -// if (l_maxCount >= 100000u) { -// l_maxCount = 1; - if (l_maxCount >= FILENUMBER_UPPER_LIMIT_OVER) { - l_maxCount = FILENUMBER_LOWER_LIMIT; - - for (;;) { - std::vector<UI_32>::iterator find_itr = std::find(l_vector.begin(), - l_vector.end(), - l_maxCount); - if (find_itr == l_vector.end()) { - break; - } - l_maxCount++; - } - } - f_counter = l_maxCount; - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); -} - -static void getConfigInfo(CfgInfo& f_cfginfo) { // NOLINT (runtime/references) - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - EFrameworkunifiedStatus l_eStatus; - - f_cfginfo.output_path = ""; - f_cfginfo.output_max = 0; - - CNSConfigReader *l_pReaderCfg = new CNSConfigReader(); - - if (NULL == l_pReaderCfg) { // LCOV_EXCL_BR_LINE 5: new's error case - // LCOV_EXCL_START 5: new's error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - " Error. Unable to allocate CNSConfigReader object."); - // LCOV_EXCL_STOP - } else { - if (eFrameworkunifiedStatusOK != (l_eStatus = l_pReaderCfg->Parse(LOGGERSERVICELOG_CONFIG_PATH))) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - " Error. l_pReaderCfg->Parse(%s) returned: 0x%X", - LOGGERSERVICELOG_CONFIG_PATH, l_eStatus); - } else if (eFrameworkunifiedStatusOK - != (l_eStatus = l_pReaderCfg->GetString("LOGGING.EmmcOutputPath", - f_cfginfo.output_path))) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - " Error. l_pReaderCfg->GetString(LOGGING.EmmcOutputPath)"); - } else if (eFrameworkunifiedStatusOK - != (l_eStatus = l_pReaderCfg->GetInt("LOGGING.EmmcOutputMax", - f_cfginfo.output_max))) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - " Error. l_pReaderCfg->GetInt(LOGGING.EmmcOutputMax)"); - } else if (eFrameworkunifiedStatusOK - != (l_eStatus = l_pReaderCfg->GetInt("LOGGING.EmmcOutputErrMax", - f_cfginfo.output_errmax))) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - " Error. l_pReaderCfg->GetInt(LOGGING.EmmcOutputErrMax)"); - } - delete l_pReaderCfg; - } - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); -} - -static EFrameworkunifiedStatus deleteOldLog(std::string log_path, - std::vector<std::string>& l_vector, // NOLINT (runtime/references) - std::string& f_archive_destination, // NOLINT (runtime/references) - UI_32 max_num) { - EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK; - - size_t l_pos = f_archive_destination.find_last_of('/'); - - if (std::string::npos != l_pos) { // LCOV_EXCL_BR_LINE 6: '/' must exist in f_archive_destination - std::sort(l_vector.begin(), l_vector.end()); - std::vector<std::string>::iterator itr = l_vector.begin(); - for (UI_32 i = static_cast<UI_32>(l_vector.size()); (max_num - 1) < i; i--, itr++) { - if (itr == l_vector.end()) { // LCOV_EXCL_BR_LINE 6: itr can't be l_vector.end() - // LCOV_EXCL_START 6: itr can't be l_vector.end() - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - break; - // LCOV_EXCL_STOP - } - std::string l_FilePath = log_path; - std::string l_FileName = *itr; - l_FilePath.append("/"); - l_FilePath.append(l_FileName.c_str()); - if (0 != unlink(l_FilePath.c_str())) { - l_eStatus = eFrameworkunifiedStatusAccessError; - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, " Error. delete old log file %s:%d.", - l_FilePath.c_str(), errno); - } - } - SyncDir(log_path); - } else { - // LCOV_EXCL_START 6: '/' must exist in f_archive_destination - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - l_eStatus = eFrameworkunifiedStatusFail; - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, " Error. delete target not found. %s", - f_archive_destination.c_str()); - // LCOV_EXCL_STOP - } - return l_eStatus; -} - - -static EFrameworkunifiedStatus getFileNumber(const std::string &filename,UI_32 &number) { - char buf[16]; - size_t pos; - size_t offset; - size_t length; - UI_32 temp_value; - - offset = filename.find_last_of(PATHNAME_SEPARATOR) + 1; - pos = filename.find_first_of('_', offset); - length = pos-offset; - if (std::string::npos == pos) { - return eFrameworkunifiedStatusInvldParam; - } else if (sizeof(buf) <= length) { - return eFrameworkunifiedStatusInvldParam; - } - - char *endptr; - int error_number; - - memcpy(buf, filename.c_str() + offset, length); - buf[length] = '\x0'; - - errno = EOK; - temp_value = strtol(buf, &endptr, 10); - error_number = errno; - if ((error_number != EOK) || (*endptr != '\x0')) { - return eFrameworkunifiedStatusInvldParam; - } - number = temp_value; - return eFrameworkunifiedStatusOK; -} - -static bool compareFileNumber(UI_32 filename1_number, const std::string &filename2) { - EFrameworkunifiedStatus l_eStatus; - bool result; - UI_32 filename2_number; - - l_eStatus = getFileNumber(filename2, filename2_number); - if (l_eStatus != eFrameworkunifiedStatusOK) { - return false; - } - result = (filename1_number == filename2_number); - return result; -} - -static EFrameworkunifiedStatus removeFiles(const std::string &log_path, std::vector<std::string> &l_vector, - size_t begin_pos, size_t end_pos) { - std::string l_FilePath; - size_t i; - int result; - EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK; - EFrameworkunifiedStatus l_ePartStatus = eFrameworkunifiedStatusOK; - l_FilePath.reserve(SSLOGGER_PATHNAME); - for (i = begin_pos; i < end_pos; i++) { - l_FilePath = log_path + PATHNAME_SEPARATOR_STR + l_vector[i]; - result = unlink(l_FilePath.c_str()); - if (0 != result) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, " Error. unlink() filename = %s ,errno = %d.", l_FilePath.c_str(), errno); - l_ePartStatus = eFrameworkunifiedStatusAccessError; - if (l_ePartStatus != eFrameworkunifiedStatusOK) { - l_eStatus = l_ePartStatus; - } - } - } - return l_eStatus; -} - -static EFrameworkunifiedStatus removeSameNumFiles(std::vector<std::string>::iterator &itr, const std::string &log_path, - std::vector<std::string> &l_vector) { - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - if (l_vector.begin() == itr) { // LCOV_EXCL_BR_LINE 4: itr is l_vector.begin() only when no space error case - // LCOV_EXCL_START 4: itr is l_vector.begin() only when no space error case - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return eFrameworkunifiedStatusOK; - // LCOV_EXCL_STOP - } - std::string &removed_filename = *(itr - 1); - UI_32 removed_filenumber; - if (getFileNumber(removed_filename, removed_filenumber) != eFrameworkunifiedStatusOK) { // LCOV_EXCL_BR_LINE 6: double check, must return ok // NOLINT[whitespace/line_length] - // LCOV_EXCL_START 6: double check, must return ok - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_WARN, __FUNCTION__, " Warning. Type mismatch filename. = %s", removed_filename.c_str()); - return eFrameworkunifiedStatusOK; - // LCOV_EXCL_STOP - } - - std::string l_FilePath; - EFrameworkunifiedStatus l_ePartStatus = eFrameworkunifiedStatusOK; - EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK; - int result; - for (;itr < l_vector.end(); itr++) { - const std::string &exist_filename = (*itr); - if (compareFileNumber(removed_filenumber, exist_filename) == true) { - l_FilePath = log_path + PATHNAME_SEPARATOR_STR + exist_filename; - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, " Remove file = %s.", l_FilePath.c_str()); - result = unlink(l_FilePath.c_str()); - if (0 != result) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, " Error. unlink() filename = %s , errno = %d.", l_FilePath.c_str(), errno); - l_ePartStatus = eFrameworkunifiedStatusAccessError; - if (l_ePartStatus != eFrameworkunifiedStatusOK) { - l_eStatus = l_ePartStatus; - } - } - } else { - break; - } - } - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_eStatus; -} - -static EFrameworkunifiedStatus deleteOldLogAbnrm(const std::string& log_path, std::vector<std::string>& l_vector, - const std::string& f_archive_destination, SI_32 max_num, UI_32 abnrm_total) { - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - size_t l_pos = f_archive_destination.find_last_of(PATHNAME_SEPARATOR); - if (std::string::npos == l_pos) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, " Error. delete target not found. %s", f_archive_destination.c_str()); - return eFrameworkunifiedStatusFail; - } - if (l_vector.size() == 0) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, " Error. empty array."); - return eFrameworkunifiedStatusFail; - } - //FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, " max_num = %d , vect_abnrm.size() = %d", max_num, vect_abnrm.size()); - - size_t i; - EFrameworkunifiedStatus l_ePartStatus = eFrameworkunifiedStatusOK; - EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK; - size_t end_pos = l_vector.size(); - SI_32 abnrm_count = 0; - UI_32 exist_filenumber; - ELOGGERSERVICELOGTYPE filetype; - - max_num = abnrm_total - max_num + 1; - std::sort(l_vector.begin(), l_vector.end()); - for (i = 0; i < end_pos; i++) { - const std::string &exist_filename = l_vector[i]; - if (getFileNumber(exist_filename, exist_filenumber) != eFrameworkunifiedStatusOK) { - continue; - } - filetype = QueryLoggerservicelogType(exist_filename); - if (filetype == eLoggerservicelogTypeAbnormal) { - abnrm_count++; - if (max_num <= abnrm_count) { - end_pos = i + 1; - break; - } - } - } - l_ePartStatus = removeFiles(log_path, l_vector, 0, end_pos); - if (l_ePartStatus != eFrameworkunifiedStatusOK) { - l_eStatus = l_ePartStatus; - } - if (end_pos < l_vector.size()) { - std::vector<std::string>::iterator itr = l_vector.begin() + end_pos; - l_ePartStatus = removeSameNumFiles(itr, log_path, l_vector); - if (l_ePartStatus != eFrameworkunifiedStatusOK) { - l_eStatus = l_ePartStatus; - } - } - SyncDir(log_path); - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_eStatus; -} - - -static EFrameworkunifiedStatus deleteOldEmmcLog(CfgInfo& f_cfginfo, // NOLINT (runtime/references) - std::string& f_archive_destination, // NOLINT (runtime/references) - SS_STORELOGS_OPE_TYPE type) { - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - DIR *l_dirp = NULL; - struct dirent *l_direntp = NULL; - std::vector<std::string> vect_abnrm; - std::vector<std::string> vect_nrm; - std::vector<std::string> vect_rlnc; - std::string l_emmc_path = f_cfginfo.output_path; - EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK; - - UI_32 abnrm_count = 0; - - if (SS_STORELOGS_SYS_ILLEGAL == type) { - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return eFrameworkunifiedStatusOK; - } - - - l_dirp = opendir(l_emmc_path.c_str()); - if (l_dirp != NULL) { - while ((l_direntp = readdir(l_dirp)) != NULL) { - std::string l_findFileName = l_direntp->d_name; - -// if ((std::string::npos != l_findFileName.find("_ILG_RESET.tar.gz")) -// || (std::string::npos != l_findFileName.find("_ERR.tar.gz"))) { - if ((l_findFileName == ".") || (l_findFileName == "..")) { - continue; - } else if (std::string::npos != l_findFileName.find(SS_STORE_FILENAME_SYSILG_TERM)) { - vect_abnrm.push_back(l_findFileName); - } else if (std::string::npos != l_findFileName.find(SS_STORE_FILENAME__CWORD52__TERM)) { - vect_abnrm.push_back(l_findFileName); - } else if((std::string::npos != l_findFileName.find("_ILG_RESET.tar.gz")) || - (std::string::npos != l_findFileName.find("_ERR.tar.gz"))) { - - vect_abnrm.push_back(l_findFileName); - - abnrm_count++; - - } else if (std::string::npos - != l_findFileName.find("_GRP_RELAUNCH.tar.gz")) { - vect_rlnc.push_back(l_findFileName); - } else if (std::string::npos != l_findFileName.find(".tar.gz")) { - vect_nrm.push_back(l_findFileName); - } - } - closedir(l_dirp); - } - - if (SS_STORELOGS_ILLEGAL == type) { - if ((UI_32) f_cfginfo.output_errmax <= vect_abnrm.size()) { - l_eStatus = deleteOldLog(l_emmc_path, vect_abnrm, f_archive_destination, - (UI_32) f_cfginfo.output_errmax); - } - } else { - if ((UI_32) f_cfginfo.output_max <= vect_nrm.size()) { - l_eStatus = deleteOldLog(l_emmc_path, vect_nrm, f_archive_destination, - (UI_32) f_cfginfo.output_max); - } - } - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_eStatus; -} |