diff --git a/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/AddImportFileRequestHandler.cpp b/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/AddImportFileRequestHandler.cpp new file mode 100644 index 0000000000000000000000000000000000000000..54cd3a84c7ba320defa2d6fa9931b04cd2454634 --- /dev/null +++ b/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/AddImportFileRequestHandler.cpp @@ -0,0 +1,21 @@ +/* +* Copyright (c), Huawei Technologies Co., Ltd. 2024-2024.All rights reserved. +*/ + +#include "AddImportFileRequestHandler.h" +#include "histoParser/FileParser.h" +#include "defs/ResponseDef.h" +#include "utils/FileUtils.h" +#include "defs/RequestDef.h" + +namespace Insight::Histogram::handler { +using namespace Insight::Histogram::Parser; + bool AddImportFileRequestHandler::HandleRequest(std::string_view data, std::string &resultStr) + { + AddImportFileRequest req(data); + // 解析并获取文件和tag映射数据 + ImportResponse rsp(GetTagsByFilePath(req.filepathList)); + resultStr = rsp.ToJsonString(); + return true; + } +} // Histogram diff --git a/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/AddImportFileRequestHandler.h b/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/AddImportFileRequestHandler.h new file mode 100644 index 0000000000000000000000000000000000000000..a25a59dd66115333134448892498fe300563ad3d --- /dev/null +++ b/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/AddImportFileRequestHandler.h @@ -0,0 +1,18 @@ +/* +* Copyright (c), Huawei Technologies Co., Ltd. 2024-2024.All rights reserved. +/* +* Copyright (c), Huawei Technologies Co., Ltd. 2024-2024.All rights reserved. +*/ + +#ifndef UPDATEIMPORTFILEREQUESTHANDLER_H +#define UPDATEIMPORTFILEREQUESTHANDLER_H + +#include +#include "ImportRequestHandler.h" + +namespace Insight::Histogram::handler { + class AddImportFileRequestHandler : public ImportRequestHandler { + bool HandleRequest(std::string_view data, std::string &resultStr) override; + }; +} // Histogram +#endif //UPDATEIMPORTFILEREQUESTHANDLER_H diff --git a/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/GetHistoDataRequestHandler.cpp b/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/GetHistoDataRequestHandler.cpp new file mode 100644 index 0000000000000000000000000000000000000000..3e8193b1d8d1862f1f9f4171998cd4ae788488e2 --- /dev/null +++ b/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/GetHistoDataRequestHandler.cpp @@ -0,0 +1,68 @@ +/* +* Copyright (c), Huawei Technologies Co., Ltd. 2024-2024.All rights reserved. +*/ + +#include "GetHistoDataRequestHandler.h" +#include "histogramViewManager.h" +#include "histoParser/ParserFactory.h" +#include "histoParser/FileParser.h" +#include "defs/ResponseDef.h" +#include "utils/FileUtils.h" +#include "RequestDef.h" + +namespace Insight::Histogram::handler { +using namespace Insight::Histogram::Parser; + + bool GetHistoDataRequestHandler::run(std::string_view data, std::string &result) { + return HandleRequest(data, result); + } + + bool GetHistoDataRequestHandler::HandleRequest(std::string_view data, std::string &resultStr) + { + GetHistoDataRequest req(data); + std::map> pathToTagsMap = req.filePathTotags; + + HistogramViewManager& viewManager = HistogramViewManager::getInstance(); + + std::map> filePathToInfo; + std::map> filePathToNewTags; + // 遍历请求命令里的每一个文件 + for (auto & pathToTags : pathToTagsMap) { + std::string filePath = pathToTags.first; + if (pathToTags.second.empty()) { + // 这个文件路径下想要的tag 图为空,则不再往下走节省时间 + continue; + } + uint64_t offset = viewManager.GetReaderOffsetByFilePath(filePath); + ParserFactory parserFactory; + std::shared_ptr parser = parserFactory.CreateFileParse(filePath); + if (!parser) { + continue; + } + // 从上次解析的偏移量开始解析新的数据 + parser->ParseData(filePath, offset); + // 获取到最新数据交给infomanager追加到老数据里并做更新 + viewManager.AppendNewFileInfo(filePath, offset, parser->GetTags(), parser->GetTagToHistoGraph()); + // 获取合并之后的新数据 + std::map newData = viewManager.GetHistoInfoByFilePath(filePath); + filePathToInfo[filePath] = FilterHistoDataByTag(pathToTags.second, viewManager.GetHistoInfoByFilePath(filePath)); + // 处理是否有新增的tag + filePathToNewTags[filePath] = viewManager.GetNewTagsByFilePath(filePath); + }; + GetHistoDataResponse rsp(filePathToInfo, filePathToNewTags); + resultStr = rsp.ToJsonString(); + return true; + } + + // 根据前端请求返回需要的tag数据 + std::map GetHistoDataRequestHandler::FilterHistoDataByTag(std::set tags, std::map histoGraphs) + { + std::map result; + for (auto & tag : tags) { + if (histoGraphs.find(tag) != histoGraphs.end()) { + result[tag] = histoGraphs[tag]; + } + } + return result; + } +} // Histogram diff --git a/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/GetHistoDataRequestHandler.h b/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/GetHistoDataRequestHandler.h new file mode 100644 index 0000000000000000000000000000000000000000..0c20a1ac00a159efb1f2e7e824b5a5e86c42ec86 --- /dev/null +++ b/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/GetHistoDataRequestHandler.h @@ -0,0 +1,29 @@ +// +// Created by admin on 2024/12/11. +// + +#ifndef GET_HISTO_DATA_REQUEST_HANDLER_H +#define GET_HISTO_DATA_REQUEST_HANDLER_H + +#include +#include +#include +#include +#include "iostream" +#include "ApiHandler.h" +#include "defs/RequestDef.h" + +namespace Insight::Histogram::handler { + + class GetHistoDataRequestHandler : public Dic::Core::PostHandler{ + public: + bool run(std::string_view data, std::string &result) override; + private: + bool HandleRequest(std::string_view data, std::string &resultStr); + std::map FilterHistoDataByTag(std::set tags, + std::map histoGraphs); + }; + +} // Histogram + +#endif //GET_HISTO_DATA_REQUEST_HANDLER_H diff --git a/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/GetNewFilesRequestHandler.cpp b/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/GetNewFilesRequestHandler.cpp new file mode 100644 index 0000000000000000000000000000000000000000..3aee5a9dca8eddf8476dc0dc675817e185f9be8b --- /dev/null +++ b/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/GetNewFilesRequestHandler.cpp @@ -0,0 +1,21 @@ +/* +* Copyright (c), Huawei Technologies Co., Ltd. 2024-2024.All rights reserved. +*/ +#include "GetNewFilesRequestHandler.h" +#include "histogramViewManager.h" +#include "defs/ResponseDef.h" + +namespace Insight::Histogram::handler { + bool GetNewFilesRequestHandler::run(std::string_view data, std::string &result) { + return HandleRequest(data, result); + } + + bool GetNewFilesRequestHandler::HandleRequest(std::string_view data, std::string &resultStr) + { + // 获取通过文件监控得到的新增文件 + GetNewFilesResponse rsp(HistogramViewManager::getInstance().GetNewFiles()); + // 每次请求过后清空新增文件列表,重新记录从本地请求结束到下次请求开始这个时间段的请求 + resultStr = rsp.ToJsonString(); + return true; + } +} \ No newline at end of file diff --git a/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/GetNewFilesRequestHandler.h b/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/GetNewFilesRequestHandler.h new file mode 100644 index 0000000000000000000000000000000000000000..91eec5f3f55c5a636746c96ff5b05c5c1ef763b4 --- /dev/null +++ b/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/GetNewFilesRequestHandler.h @@ -0,0 +1,25 @@ +/* +* Copyright (c), Huawei Technologies Co., Ltd. 2024-2024.All rights reserved. +*/ + +#ifndef GET_NEWFILES_REQUEST_HANDLER_H +#define GET_NEWFILES_REQUEST_HANDLER_H + +#include +#include +#include +#include "iostream" +#include "ApiHandler.h" + +namespace Insight::Histogram::handler { + + class GetNewFilesRequestHandler : public Dic::Core::PostHandler{ + public: + bool run(std::string_view data, std::string &result) override; + private: + bool HandleRequest(std::string_view data, std::string &resultStr); + }; + +} // Histogram + +#endif //GET_NEWFILES_REQUEST_HANDLER_H diff --git a/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/ImportProjectRequestHandler.cpp b/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/ImportProjectRequestHandler.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4ac6286f6ec94a2caa91dff8f8a677dc93ae5817 --- /dev/null +++ b/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/ImportProjectRequestHandler.cpp @@ -0,0 +1,36 @@ +/* +* Copyright (c), Huawei Technologies Co., Ltd. 2024-2024.All rights reserved. +*/ + +#include "ImportProjectRequestHandler.h" +#include "histoParser/ParserFactory.h" +#include "defs/ResponseDef.h" +#include "utils/FileUtils.h" +#include "RequestDef.h" + +namespace Insight::Histogram::handler { + using namespace Insight::Histogram::Parser; + + bool ImportProjectRequestHandler::HandleRequest(std::string_view data, std::string &resultStr) + { + // 工程最开始进来的时候先清空所有数据,停掉文件监控 + HistogramViewManager::getInstance().Reset(); + ImportRequest req(data); + std::vector pathList = req.rootPathList; + if (!fs::is_directory(pathList[0])) { + ResponseDef response("ERROR: The path is not a directory.", false, 0); + resultStr = response.ToJsonString(); + return false; + } + // 根目录只有一个,每次只查看一个工程下的数据,不支持集群数据 + std::vector fileList = util::GetListFilesInDirectory(req.rootPathList[0]); + + // 获取到当前文件夹下的所有文件之后,开启文件监控,记录新增文件 + HistogramViewManager::getInstance().StartFileWatch(req.rootPathList[0]); + std::map> fileToTags = GetTagsByFilePath(fileList); + ImportResponse rsp(fileToTags); + resultStr = rsp.ToJsonString(); + return true; + } + +} // Histogram diff --git a/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/ImportProjectRequestHandler.h b/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/ImportProjectRequestHandler.h new file mode 100644 index 0000000000000000000000000000000000000000..ea4ec5777c349b3cdce04455105b5c37eb9f2ed9 --- /dev/null +++ b/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/ImportProjectRequestHandler.h @@ -0,0 +1,17 @@ +/* +* Copyright (c), Huawei Technologies Co., Ltd. 2024-2024.All rights reserved. +*/ +#ifndef IMPORT_FILE_REQUEST_HANDLER_H +#define IMPORT_FILE_REQUEST_HANDLER_H + +#include +#include "ImportRequestHandler.h" + +namespace Insight::Histogram::handler { + +class ImportProjectRequestHandler : public ImportRequestHandler { + bool HandleRequest(std::string_view data, std::string &resultStr) override; +}; + +} // Histogram +#endif //IMPORT_FILE_REQUEST_HANDLER_H \ No newline at end of file diff --git a/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/ImportRequestHandler.h b/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/ImportRequestHandler.h new file mode 100644 index 0000000000000000000000000000000000000000..19cb4573ec7663aea52de9e3f9ee6ad0a0e0bd0c --- /dev/null +++ b/plugins/mindstudio-insight-plugins/Histogram/server/src/handler/ImportRequestHandler.h @@ -0,0 +1,50 @@ +/* +* Copyright (c), Huawei Technologies Co., Ltd. 2024-2024.All rights reserved. +*/ + +#ifndef IMPORTREQUESTHANDLER_H +#define IMPORTREQUESTHANDLER_H + +#include +#include +#include +#include "ApiHandler.h" +#include "histogramViewManager.h" +#include "histoParser/ParserFactory.h" +#include "histoParser/FileParser.h" + +namespace Insight::Histogram::handler { + using namespace Insight::Histogram::Parser; + class ImportRequestHandler : public Dic::Core::PostHandler{ + public: + bool run(std::string_view data, std::string &result) override { + return HandleRequest(data, result); + } + protected: + virtual bool HandleRequest(std::string_view data, std::string &resultStr) = 0; + + std::map> GetTagsByFilePath(const std::vector &fileList) + { + std::map> filepathToTags; + for (const auto& filepath :fileList) { + // 逐个解析每个文件的数据 + uint64_t offset = 0; + ParserFactory parserFactory; + std::shared_ptr parser = parserFactory.CreateFileParse(filepath); + if (!parser) { + continue; + } + parser->ParseData(filepath, offset); + std::set tags = parser->GetTags(); + // 获取文件到tag的对应关系 + filepathToTags[filepath] = tags; + // 已经解析完的数据存储在viewManager单例里, tag 和 具体图的数据都要存储进去 + HistogramViewManager::getInstance().SetViewFileList(filepath, offset, tags, parser->GetTagToHistoGraph()); + } + // 把filepathToTags 塞给response转换成json返回给前端 + return filepathToTags; + } + }; + +} // Histogram +#endif //IMPORTREQUESTHANDLER_H