WsLogAccessService.cpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #include <ws_logaccess/WsLogAccessService.hpp>
  2. Cws_logaccessEx::Cws_logaccessEx()
  3. {
  4. }
  5. Cws_logaccessEx::~Cws_logaccessEx()
  6. {
  7. }
  8. bool Cws_logaccessEx::onGetLogAccessInfo(IEspContext &context, IEspGetLogAccessInfoRequest &req, IEspGetLogAccessInfoResponse &resp)
  9. {
  10. bool success = true;
  11. if (m_remoteLogAccessor)
  12. {
  13. resp.setRemoteLogManagerType(m_remoteLogAccessor->getRemoteLogAccessType());
  14. resp.setRemoteLogManagerConnectionString(m_remoteLogAccessor->fetchConnectionStr());
  15. }
  16. else
  17. success = false;
  18. return success;
  19. }
  20. void Cws_logaccessEx::init(const IPropertyTree *cfg, const char *process, const char *service)
  21. {
  22. LOG(MCdebugProgress,"WsLogAccessService loading remote log access plug-in...");
  23. try
  24. {
  25. m_remoteLogAccessor.set(queryRemoteLogAccessor());
  26. if (m_remoteLogAccessor == nullptr)
  27. LOG(MCerror,"WsLogAccessService could not load remote log access plugin!");
  28. }
  29. catch (IException * e)
  30. {
  31. StringBuffer msg;
  32. e->errorMessage(msg);
  33. LOG(MCoperatorWarning,"WsLogAccessService could not load remote log access plug-in: %s", msg.str());
  34. e->Release();
  35. }
  36. }
  37. LogAccessTimeRange requestedRangeToLARange(IConstTimeRange & reqrange)
  38. {
  39. struct LogAccessTimeRange range;
  40. range.setStart(reqrange.getStartDate());
  41. range.setEnd(reqrange.getEndDate());
  42. return range;
  43. }
  44. bool Cws_logaccessEx::onGetLogs(IEspContext &context, IEspGetLogsRequest &req, IEspGetLogsResponse & resp)
  45. {
  46. if (!m_remoteLogAccessor)
  47. throw makeStringException(-1, "WsLogAccess: Remote Log Access plug-in not available!");
  48. CLogAccessType searchByCategory = req.getLogCategory();
  49. const char * searchByValue = req.getSearchByValue();
  50. if (searchByCategory != CLogAccessType_All && isEmptyString(searchByValue))
  51. throw makeStringException(-1, "WsLogAccess::onGetLogs: Must provide log category");
  52. LogAccessConditions logFetchOptions;
  53. switch (searchByCategory)
  54. {
  55. case CLogAccessType_All:
  56. logFetchOptions.setFilter(getWildCardLogAccessFilter());
  57. break;
  58. case CLogAccessType_ByJobIdID:
  59. logFetchOptions.setFilter(getJobIDLogAccessFilter(searchByValue));
  60. break;
  61. case CLogAccessType_ByComponent:
  62. logFetchOptions.setFilter(getComponentLogAccessFilter(searchByValue));
  63. break;
  64. case CLogAccessType_ByLogType:
  65. {
  66. LogMsgClass logType = LogMsgClassFromAbbrev(searchByValue);
  67. if (logType == MSGCLS_unknown)
  68. throw makeStringExceptionV(-1, "Invalid Log Type 3-letter code encountered: '%s' - Available values: 'DIS,ERR,WRN,INF,PRO,MET'", searchByValue);
  69. logFetchOptions.setFilter(getClassLogAccessFilter(logType));
  70. break;
  71. }
  72. case CLogAccessType_ByTargetAudience:
  73. {
  74. MessageAudience targetAud = LogMsgAudFromAbbrev(searchByValue);
  75. if (targetAud == MSGAUD_unknown || targetAud == MSGAUD_all)
  76. throw makeStringExceptionV(-1, "Invalid Target Audience 3-letter code encountered: '%s' - Available values: 'OPR,USR,PRO,ADT'", searchByValue);
  77. logFetchOptions.setFilter(getAudienceLogAccessFilter(targetAud));
  78. break;
  79. }
  80. case LogAccessType_Undefined:
  81. default:
  82. throw makeStringException(-1, "Invalid remote log access request type");
  83. }
  84. LogAccessTimeRange range = requestedRangeToLARange(req.getRange());
  85. const StringArray & cols = req.getColumns();
  86. unsigned limit = req.getLogLineLimit();
  87. __int64 startFrom = req.getLogLineStartFrom();
  88. if (startFrom < 0)
  89. throw makeStringExceptionV(-1, "WsLogAccess: Encountered invalid LogLineStartFrom value: '%lld'", startFrom);
  90. logFetchOptions.setTimeRange(range);
  91. logFetchOptions.copyLogFieldNames(cols);
  92. logFetchOptions.setLimit(limit);
  93. logFetchOptions.setStartFrom((offset_t)startFrom);
  94. StringBuffer logcontent;
  95. m_remoteLogAccessor->fetchLog(logFetchOptions, logcontent, logAccessFormatFromName(req.getFormat()));
  96. resp.setLogLines(logcontent.str());
  97. return true;
  98. }