diff --git a/access-node/access_node/CMakeLists.txt b/access-node/access_node/CMakeLists.txt index 2ef844586031591eb7bcee05d7960a6a11c899a3..52a60790ca52f27929ea63aeede148a2f30bdd4e 100644 --- a/access-node/access_node/CMakeLists.txt +++ b/access-node/access_node/CMakeLists.txt @@ -51,49 +51,58 @@ include_directories("extern/pdqsort") add_executable( insite-access-node - main.cpp - include/insite/query_params.h - include/insite/spike_util.h + src/main.cpp + + ${CMAKE_CURRENT_BINARY_DIR}/include/schema_generated.h include/insite/circular_timeseries.h - include/insite/config.h config.cpp - # include/insite/jsonParameters.h jsonParameters.cpp - include/insite/jsonStrings.h - include/insite/nest/nestKernelStatus.h nest/kernelStatus.cpp - include/insite/nest/nestMultimeter.h nest/nestMultimeter.cpp - include/insite/nest/nestMultimeterContainer.h nest/nestMultimeterContainer.cpp - include/insite/nest/nestNode.h nest/nestNode.cpp - include/insite/nest/nestSpikeDetectors.h - include/insite/nest/nestSpikeRecorders.h - include/insite/nest/nestSpikes.h nest/nestSpikes.cpp - include/insite/nest/nestVersion.h nest/nestVersion.cpp - include/insite/arbor/cell_endpoints.h arbor/cell_endpoints.cpp - include/insite/arbor/probe_endpoints.h arbor/probe_endpoints.cpp - include/insite/arbor/spike_endpoints.h arbor/spike_endpoints.cpp - include/insite/arbor/parameters.h arbor/parameters.cpp - include/insite/arbor/arbor_strings.h arbor/arbor_strings.cpp + include/insite/config.h src/config.cpp include/insite/opcodes.h - # include/insite/params.h params.cpp - include/insite/queryStringBuilder.h + include/insite/query_params.h + include/insite/query_string_builder.h include/insite/resource_flags.h - include/insite/spike.h nest/spike.cpp - include/insite/spikedetector.h nest/spikedetector.cpp - include/insite/tvb_http_endpoints.h - include/insite/tvbMonitor.h tvbMonitor.cpp - include/insite/tvb_handler.h tvb_handler.cpp - include/insite/nest_handler.h nest_handler.cpp - include/insite/utilityFunctions.h utilityFunctions.cpp - include/insite/websocket_sender.h websocket_sender.cpp - include/insite/websocket_server.h websocket_server.cpp - ${CMAKE_CURRENT_BINARY_DIR}/include/schema_generated.h + include/insite/spike_util.h + include/insite/utility_functions.h src/utility_functions.cpp + include/insite/websocket_sender.h src/websocket_sender.cpp + include/insite/websocket_server.h src/websocket_server.cpp + + include/insite/nest/endpoints.h + include/insite/nest/handler.h src/nest/handler.cpp + include/insite/nest/json_strings.h + include/insite/nest/kernel_status.h src/nest/kernel_status.cpp + include/insite/nest/multimeter.h src/nest/multimeter.cpp + include/insite/nest/multimeter_container.h src/nest/multimeter_container.cpp + include/insite/nest/nodecollections.h src/nest/nodecollections.cpp + include/insite/nest/spike_container.h src/nest/spike_container.cpp + include/insite/nest/spikerecorders.h src/nest/spikerecorders.cpp + include/insite/nest/spikes.h src/nest/spikes.cpp + include/insite/nest/version.h src/nest/version.cpp + + include/insite/arbor/arbor_strings.h src/arbor/arbor_strings.cpp + include/insite/arbor/cell_endpoints.h src/arbor/cell_endpoints.cpp + include/insite/arbor/parameters.h src/arbor/parameters.cpp + include/insite/arbor/probe_endpoints.h src/arbor/probe_endpoints.cpp + include/insite/arbor/spike_endpoints.h src/arbor/spike_endpoints.cpp + + include/insite/tvb/endpoints.h + include/insite/tvb/handler.h tvb/handler.cpp + include/insite/tvb/monitor.h tvb/monitor.cpp + ) -target_include_directories(insite-access-node PRIVATE include/insite) -target_include_directories(insite-access-node PRIVATE ${CMAKE_BINARY_DIR}/include) set_property( TARGET insite-access-node PROPERTY CXX_STANDARD 17 ) +target_include_directories( + insite-access-node + PRIVATE + include/insite + ${CMAKE_BINARY_DIR}/include + ${CMAKE_BINARY_DIR}/_deps/rapidjson-src/include + ${CMAKE_BINARY_DIR}/_deps/websocketpp-src +) + target_link_libraries( insite-access-node PRIVATE @@ -108,13 +117,3 @@ target_link_libraries( optional asio::asio ) - -target_include_directories( - insite-access-node - PRIVATE - ${CMAKE_BINARY_DIR}/_deps/rapidjson-src/include - ${CMAKE_BINARY_DIR}/_deps/websocketpp-src - # ${asio_INCLUDE_DIR}/include -) - -message("${ASIO_INCLUDE_DIR}") diff --git a/access-node/access_node/include/insite/arbor/arbor_endpoints.h b/access-node/access_node/include/insite/arbor/arbor_endpoints.h index be694106fb98a351460add355b34d219410db9ba..e1a7f15978781b0814fe82f64ea4231f78ddeb5d 100644 --- a/access-node/access_node/include/insite/arbor/arbor_endpoints.h +++ b/access-node/access_node/include/insite/arbor/arbor_endpoints.h @@ -6,7 +6,7 @@ #include "config.h" #include "crow/app.h" #include "crow/middlewares/cors.h" -#include "utilityFunctions.h" +#include <utility_functions.h> namespace insite { class ArborHttpEndpoint { diff --git a/access-node/access_node/include/insite/config.h b/access-node/access_node/include/insite/config.h index ab818f5c565277359fd9c36186af411d8d9f6a78..e741ccf3afd53c584790b5401fb4660714cae959 100644 --- a/access-node/access_node/include/insite/config.h +++ b/access-node/access_node/include/insite/config.h @@ -1,6 +1,5 @@ #pragma once - -#define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_TRACE +#include <insite_defines.h> #include <spdlog/fmt/fmt.h> #include <string> diff --git a/access-node/access_node/nest/nest_endpoints.h b/access-node/access_node/include/insite/nest/endpoints.h similarity index 95% rename from access-node/access_node/nest/nest_endpoints.h rename to access-node/access_node/include/insite/nest/endpoints.h index feb70256454be05fb4716e1c304c3ba364ed50d2..65562ffd5050bdd7d4a399db495261e667e579f2 100644 --- a/access-node/access_node/nest/nest_endpoints.h +++ b/access-node/access_node/include/insite/nest/endpoints.h @@ -4,12 +4,12 @@ #include "crow/http_request.h" #include "crow/middlewares/cors.h" #include "tl/optional.hpp" -#include <nest/nestKernelStatus.h> -#include <nest/nestMultimeter.h> -#include <nest/nestNode.h> -#include <nest/nestSpikeRecorders.h> -#include <nest/nestSpikes.h> -#include <nest/nestVersion.h> +#include <nest/kernel_status.h> +#include <nest/multimeter.h> +#include <nest/nodecollections.h> +#include <nest/spikerecorders.h> +#include <nest/spikes.h> +#include <nest/version.h> #define CROW_ROUTE_LAMBA(APP, ENDPOINT, FUNCTION) \ CROW_ROUTE(APP, ENDPOINT) \ diff --git a/access-node/access_node/include/insite/nest_handler.h b/access-node/access_node/include/insite/nest/handler.h similarity index 100% rename from access-node/access_node/include/insite/nest_handler.h rename to access-node/access_node/include/insite/nest/handler.h diff --git a/access-node/access_node/include/insite/jsonStrings.h b/access-node/access_node/include/insite/nest/json_strings.h similarity index 100% rename from access-node/access_node/include/insite/jsonStrings.h rename to access-node/access_node/include/insite/nest/json_strings.h diff --git a/access-node/access_node/include/insite/nest/nestKernelStatus.h b/access-node/access_node/include/insite/nest/kernel_status.h similarity index 100% rename from access-node/access_node/include/insite/nest/nestKernelStatus.h rename to access-node/access_node/include/insite/nest/kernel_status.h diff --git a/access-node/access_node/include/insite/nest/nestMultimeter.h b/access-node/access_node/include/insite/nest/multimeter.h similarity index 94% rename from access-node/access_node/include/insite/nest/nestMultimeter.h rename to access-node/access_node/include/insite/nest/multimeter.h index 48e249e1ca9b2f8586e2631123f38ea2cc47fa74..fc7a605fc1772c9236a641b7e6b18823506748ca 100644 --- a/access-node/access_node/include/insite/nest/nestMultimeter.h +++ b/access-node/access_node/include/insite/nest/multimeter.h @@ -2,9 +2,8 @@ #include <cpr/cpr.h> #include <cstdint> #include <iterator> -#include <nest/nestMultimeterContainer.h> +#include <nest/multimeter_container.h> #include <optional> -// #include <params.h> #include <rapidjson/document.h> #include <rapidjson/stringbuffer.h> #include <rapidjson/writer.h> @@ -12,7 +11,7 @@ #include <spdlog/fmt/ranges.h> #include <spdlog/spdlog.h> #include <unordered_set> -#include <utilityFunctions.h> +#include <utility_functions.h> #include <vector> namespace insite { diff --git a/access-node/access_node/include/insite/nest/nestMultimeterContainer.h b/access-node/access_node/include/insite/nest/multimeter_container.h similarity index 100% rename from access-node/access_node/include/insite/nest/nestMultimeterContainer.h rename to access-node/access_node/include/insite/nest/multimeter_container.h diff --git a/access-node/access_node/include/insite/nest/nestNode.h b/access-node/access_node/include/insite/nest/nodecollections.h similarity index 100% rename from access-node/access_node/include/insite/nest/nestNode.h rename to access-node/access_node/include/insite/nest/nodecollections.h diff --git a/access-node/access_node/include/insite/spike.h b/access-node/access_node/include/insite/nest/spike_container.h similarity index 100% rename from access-node/access_node/include/insite/spike.h rename to access-node/access_node/include/insite/nest/spike_container.h diff --git a/access-node/access_node/include/insite/nest/nestSpikeRecorders.h b/access-node/access_node/include/insite/nest/spikerecorders.h similarity index 85% rename from access-node/access_node/include/insite/nest/nestSpikeRecorders.h rename to access-node/access_node/include/insite/nest/spikerecorders.h index c17e7f8001e661a4524b0e3fc4624e2a810b2a89..9d88073f31e1ff5e99480951371483bb5b1870f3 100644 --- a/access-node/access_node/include/insite/nest/nestSpikeRecorders.h +++ b/access-node/access_node/include/insite/nest/spikerecorders.h @@ -1,38 +1,38 @@ #pragma once #include <config.h> #include <cpr/cpr.h> -#include <jsonStrings.h> -#include <nest/nestSpikes.h> +#include <iostream> +#include <iterator> +#include <nest/json_strings.h> +#include <nest/spikes.h> +#include <optional> #include <rapidjson/document.h> #include <rapidjson/stringbuffer.h> #include <spdlog/fmt/ostr.h> #include <spdlog/fmt/ranges.h> #include <spdlog/spdlog.h> #include <spikedetector.h> -#include <utilityFunctions.h> -#include <iostream> -#include <iterator> -#include <optional> #include <unordered_set> +#include <utility_functions.h> #include <vector> namespace insite { // Receives a rapidjson-Object and checks if it has all the necessary properties // for spikeRecorderData void CheckSpikeRecorderDataValid( - const rapidjson::GenericObject<false, rapidjson::Value>& - json_spikerecorder) { + const rapidjson::GenericObject<false, rapidjson::Value> + &json_spikerecorder) { assert(json_spikerecorder.HasMember(json_strings::kSpikerecorderId) && json_spikerecorder[json_strings::kSpikerecorderId].IsInt()); assert(json_spikerecorder.HasMember(json_strings::kNodeIds) && json_spikerecorder[json_strings::kNodeId].IsArray()); } -std::vector<Spikerecorder> GetSpikerecorder( - const rapidjson::Value& json_spikerecorders) { +std::vector<Spikerecorder> +GetSpikerecorder(const rapidjson::Value &json_spikerecorders) { std::vector<Spikerecorder> spikerecorders; - for (const auto& recorder : json_spikerecorders.GetArray()) { + for (const auto &recorder : json_spikerecorders.GetArray()) { spikerecorders.emplace_back(recorder); } @@ -53,16 +53,19 @@ inline crow::response SpikeRecorders(int api_version) { auto response = QueryRandomNode(ServerConfig::GetInstance().request_nest_urls, endpoint, api_version); + if (response.status_code == 202) { + return crow::response(202); + } std::string response_text = response.text; rapidjson::Document json_spikerecorders; - spdlog::error("{}", response_text); + // spdlog::error("{}", response_text); json_spikerecorders.Parse(response_text.c_str()); if (api_version == 1) { json_writer.StartArray(); auto spikerecorder = GetSpikerecorder(json_spikerecorders); - for (const auto& spikerecorder : spikerecorder) { + for (const auto &spikerecorder : spikerecorder) { spikerecorder.WriteToJson(json_writer); } json_writer.EndArray(); @@ -78,7 +81,7 @@ inline crow::response SpikeRecorders(int api_version) { json_writer.String(sim_id.c_str()); json_writer.Key("spikerecorders"); json_writer.StartArray(); - for (const auto& spikerecorder : spikerecorder) { + for (const auto &spikerecorder : spikerecorder) { spikerecorder.WriteToJson(json_writer); } json_writer.EndArray(); @@ -89,7 +92,7 @@ inline crow::response SpikeRecorders(int api_version) { return crow::response(202); } -inline crow::response SpikesBySpikeRecorderId(const crow::request& req, +inline crow::response SpikesBySpikeRecorderId(const crow::request &req, int api_version, int requested_spikerecorder_id) { SpikeParameter params(req.url_params); @@ -120,4 +123,4 @@ inline crow::response SpikesBySpikeRecorderId(const crow::request& req, // return {buffer.GetString()}; return {NestGetSpikes(params, api_version)}; } -} // namespace insite +} // namespace insite diff --git a/access-node/access_node/include/insite/nest/nestSpikes.h b/access-node/access_node/include/insite/nest/spikes.h similarity index 96% rename from access-node/access_node/include/insite/nest/nestSpikes.h rename to access-node/access_node/include/insite/nest/spikes.h index 6c3cbda5d92064df7e1f28f7a65c4d2c96bc6bfd..d12ceb111c01bae72eeb29183c45f827d2a725b7 100644 --- a/access-node/access_node/include/insite/nest/nestSpikes.h +++ b/access-node/access_node/include/insite/nest/spikes.h @@ -2,6 +2,7 @@ #include "query_params.h" #include <iostream> #include <iterator> +#include <nest/spike_container.h> #include <optional> #include <pdqsort.h> #include <rapidjson/document.h> @@ -9,11 +10,10 @@ #include <schema_generated.h> #include <spdlog/fmt/chrono.h> #include <spdlog/spdlog.h> -#include <spike.h> #include <unordered_set> #include <vector> // #include "pdqsort.h" -#include <utilityFunctions.h> +#include <utility_functions.h> namespace insite { // Receives a rapidjson-Object and checks if it has all the necessary properties diff --git a/access-node/access_node/include/insite/nest/nestVersion.h b/access-node/access_node/include/insite/nest/version.h similarity index 100% rename from access-node/access_node/include/insite/nest/nestVersion.h rename to access-node/access_node/include/insite/nest/version.h diff --git a/access-node/access_node/include/insite/opcodes.h b/access-node/access_node/include/insite/opcodes.h index 859d1a1e15f90039eca6e4a42f1e464ceb43d39b..188e97bf5fd5e9f5825e7afd804b22ec5aeea09c 100644 --- a/access-node/access_node/include/insite/opcodes.h +++ b/access-node/access_node/include/insite/opcodes.h @@ -7,7 +7,10 @@ enum Opcode : OpcodeType { kData, kRegisterNewMonitor, kStartSim, - kEndSim + kEndSim, + kDeregisterMonitor, + kSimInfo, + kSimInfoReturn }; enum DataType : char { diff --git a/access-node/access_node/include/insite/params.h.bak b/access-node/access_node/include/insite/params.h.bak deleted file mode 100644 index 6115130f20a5400d0567e0e78c214219b9125969..0000000000000000000000000000000000000000 --- a/access-node/access_node/include/insite/params.h.bak +++ /dev/null @@ -1,153 +0,0 @@ -#pragma once -#include <crow/http_request.h> -#include <crow/query_string.h> -#include <jsonStrings.h> -#include <spdlog/spdlog.h> -#include <array> -#include <optional> -#include <sstream> -#include <string> -#include <unordered_map> -#include <unordered_set> -#include <utility> -#include <variant> -#include <vector> -#include "string_util.h" - -// template <std::size_t N, typename... Types> -// using NthParameterT = std::tuple_element_t<N, std::tuple<Types...>>; - -namespace insite { - -template <class> -inline constexpr bool kAlwaysFalseV = false; -using ParameterValue = std::variant<std::string, - bool, - int, - double, - uint64_t, - std::unordered_set<uint64_t>>; -using OptionalParameterValue = std::optional<ParameterValue>; -using ParameterName = std::string; - -struct Param { - ParameterName name; - ParameterValue value; - - [[nodiscard]] std::string KeyValueToString() const; - [[nodiscard]] ParameterName Name() const { return name; }; - [[nodiscard]] ParameterValue Value() const { return value; }; - template <typename T> - [[nodiscard]] T ValueAsT() const { - return std::get<T>(value); - }; -}; - -struct OptionalParameter { - ParameterName name; - OptionalParameterValue value; - - template <class T> - [[nodiscard]] static OptionalParameter GetFromQueryString( - const crow::query_string& query, - const char* name) { - std::optional<T> result; - - if (query.get(name) != nullptr) { - result = ConvertStringToType<T>(query.get(name)); - SPDLOG_DEBUG("{}: {}", name, result.value()); - } else { - SPDLOG_DEBUG("{}: no value", name); - } - - return {name, result}; - } - - template <class T> - [[nodiscard]] inline static OptionalParameter GetFromQueryString( - const crow::request& req, - const char* name) { - return OptionalParameter::GetFromQueryString<T>(req.url_params, name); - }; - - template <class T> - [[nodiscard]] static OptionalParameter GetUSetFromQueryString( - const crow::query_string& query_string, - const char* name) { - std::unordered_set<T> result; - - if (!query_string.get_list(name, false).empty()) { - std::vector<char*> value_strings = query_string.get_list(name, false); - for (char* value_string : value_strings) { - T value = ConvertStringToType<T>(value_string); - result.insert(value); - } - return {name, result}; - } - return {name, std::nullopt}; - } - - template <class T> - [[nodiscard]] inline static OptionalParameter GetUSetFromQueryString( - const crow::request& req, - const char* name) { - return GetUSetFromQueryString<T>(req.url_params, name); - } - - // - [[nodiscard]] std::string KeyValueToString() const; - - [[nodiscard]] ParameterValue Value() { return value.value(); }; - - template <class T> - [[nodiscard]] T ValueAsT() { - return std::get<T>(value.value()); - }; - - template <class T> - [[nodiscard]] T ValueAsTOr(T default_value) { - return value.has_value() ? std::get<T>(value.value()) : default_value; - }; - - [[nodiscard]] bool HasValue() const { return value.has_value(); }; - - operator bool() const { return value.has_value(); } -}; - -struct OptionalParameters { - public: - // std::vector<OptionalParameter> parameters; - std::unordered_map<ParameterName, OptionalParameter> parameters; - - [[nodiscard]] std::vector<ParameterName> Keys(); - [[nodiscard]] std::vector<ParameterValue> Values(); - - [[nodiscard]] OptionalParameter GetValue(const ParameterName& parameter_name); - - [[nodiscard]] std::string ToQueryString(); - [[nodiscard]] static std::string ToQueryString( - const std::vector<OptionalParameter>& parameters); -}; - -struct MultimeterParameters : public OptionalParameters { - MultimeterParameters(const crow::request& request) { - using namespace insite::json_strings; - - parameters.insert({kFromTime, OptionalParameter::GetFromQueryString<double>( - request.url_params, kFromTime)}); - parameters.insert({kToTime, OptionalParameter::GetFromQueryString<double>( - request, kToTime)}); - parameters.insert( - {kNodeIds, OptionalParameter::GetUSetFromQueryString<uint64_t>( - request, kNodeIds)}); - parameters.insert({kSkip, OptionalParameter::GetFromQueryString<uint64_t>( - request, kSkip)}); - parameters.insert( - {kTop, OptionalParameter::GetFromQueryString<uint64_t>(request, kTop)}); - parameters.insert( - {kSort, - OptionalParameter::GetFromQueryString<std::string>(request, kSort)}); - } -}; - -} // namespace insite diff --git a/access-node/access_node/include/insite/queryStringBuilder.h b/access-node/access_node/include/insite/query_string_builder.h similarity index 100% rename from access-node/access_node/include/insite/queryStringBuilder.h rename to access-node/access_node/include/insite/query_string_builder.h diff --git a/access-node/access_node/include/insite/spikedetector.h b/access-node/access_node/include/insite/spikedetector.h index 24705bbed523dda773ab55d5e402ce1b26ef21e1..e2d7017284c5132f0cb67d53878954f9ac0db299 100644 --- a/access-node/access_node/include/insite/spikedetector.h +++ b/access-node/access_node/include/insite/spikedetector.h @@ -9,8 +9,8 @@ #include <unordered_set> #include <vector> -#include <nest/nestSpikes.h> -#include <utilityFunctions.h> +#include <nest/spikes.h> +#include <utility_functions.h> namespace insite { using NodeList = std::vector<uint64_t>; diff --git a/access-node/access_node/include/insite/tvb_http_endpoints.h b/access-node/access_node/include/insite/tvb/endpoints.h similarity index 61% rename from access-node/access_node/include/insite/tvb_http_endpoints.h rename to access-node/access_node/include/insite/tvb/endpoints.h index 88523196f97d0a7ef897751b4bf1614a182a6669..c5b3f3b82118eac261e1bfda768aeab3315e9177 100644 --- a/access-node/access_node/include/insite/tvb_http_endpoints.h +++ b/access-node/access_node/include/insite/tvb/endpoints.h @@ -5,8 +5,9 @@ #include "query_params.h" #include "rapidjson/stringbuffer.h" #include "rapidjson/writer.h" -#include "tvb_handler.h" -#include "utilityFunctions.h" +#include <chrono> +#include <tvb/handler.h> +#include <utility_functions.h> namespace insite { class TVBHttpEndpoint { @@ -18,10 +19,13 @@ public: CROW_ROUTE(app, "/tvb/data")(&TVBHttpEndpoint::GetData); CROW_ROUTE(app, "/tvb/monitors")(&TVBHttpEndpoint::GetMonitors); CROW_ROUTE(app, "/tvb/exec/")(&TVBHttpEndpoint::LOL); + CROW_ROUTE(app, "/tvb/simulation_info/")(&TVBHttpEndpoint::GetSimInfo); + CROW_ROUTE(app, "/tvb/simulation_info/<path>") + (&TVBHttpEndpoint::GetSimInfoDetails); } static crow::response LOL(const crow::request &request) { - if (tvb_handler->srv) { + if (tvb_handler->srv != nullptr) { auto query_string = GetQueryString(request.raw_url).substr(1); tvb_handler->srv->BroadcastAll(query_string, ResourceFlag::kTVB); } else { @@ -30,6 +34,39 @@ public: return {""}; } + static crow::response GetSimInfoDetails(const crow::request &request, + const std::string &value) { + if (tvb_handler->srv != nullptr) { + tvb_handler->srv->BroadcastAll(value, ResourceFlag::kTVB); + tvb_handler->sim_info_promise = std::promise<std::string>(); + auto future = tvb_handler->sim_info_promise.get_future(); + auto result = future.wait_for(std::chrono::milliseconds(500)); + + if (result == std::future_status::timeout) { + return {"timeout..."}; + } + + auto value = future.get(); + if (value == "null") { + return {crow::status::BAD_REQUEST, + R"({"error":"attribute not found"})"}; + } + return {value}; + } else { + spdlog::error("Websocket Server in TVB Handler not set!"); + return {"error"}; + } + } + + static crow::response GetSimInfo(const crow::request &request) { + rapidjson::StringBuffer buffer; + rapidjson::Writer<rapidjson::StringBuffer> writer(buffer); + + tvb_handler->sim_info.Accept(writer); + + return {buffer.GetString()}; + } + static crow::response GetMonitors(const crow::request &request) { rapidjson::StringBuffer buffer; rapidjson::Writer<rapidjson::StringBuffer> writer(buffer); diff --git a/access-node/access_node/include/insite/tvb_handler.h b/access-node/access_node/include/insite/tvb/handler.h similarity index 84% rename from access-node/access_node/include/insite/tvb_handler.h rename to access-node/access_node/include/insite/tvb/handler.h index 934901314b4a653c35e9e884d36099f1f269082a..c19b2072076430480eb006918dbfaf425683a57c 100644 --- a/access-node/access_node/include/insite/tvb_handler.h +++ b/access-node/access_node/include/insite/tvb/handler.h @@ -2,21 +2,24 @@ #include "opcodes.h" #include "rapidjson/stringbuffer.h" #include "rapidjson/writer.h" -#include "tvbMonitor.h" #include "websocket_server.h" #include <condition_variable> #include <cstdint> #include <mutex> #include <spdlog/spdlog.h> #include <thread> +#include <tvb/monitor.h> #include <unistd.h> namespace insite { class TvbHandler { public: TvbHandler() = default; + + void ParseSimInfoReturn(const std::string &payload); void ParseDataPacket(const std::string &payload); void ParseNewMonitorPacket(const std::string &payload); + void ParseSimInfo(const std::string &payload); void SerializeMonitorsJson(rapidjson::Writer<rapidjson::StringBuffer> &writer); void AddMessageIntoQueue(std::string &&msg); @@ -36,6 +39,8 @@ public: // WebsocketServer *srv; uint64_t bytes = 0; // private: + + std::promise<std::string> sim_info_promise; bool runConsumerLoop_ = true; std::vector<std::string> message_queue_; uint32_t number_of_monitors = 0; @@ -43,5 +48,7 @@ public: std::vector<TvbMonitor<double>> double_monitors_; std::condition_variable var_; std::mutex mut_; + + rapidjson::Document sim_info; }; } // namespace insite diff --git a/access-node/access_node/include/insite/tvbMonitor.h b/access-node/access_node/include/insite/tvb/monitor.h similarity index 79% rename from access-node/access_node/include/insite/tvbMonitor.h rename to access-node/access_node/include/insite/tvb/monitor.h index a0acef3e62bea585460b0a8e30d7d0519da07798..dfb48ae04f6160a32b9cbf631cfed72f36ce8878 100644 --- a/access-node/access_node/include/insite/tvbMonitor.h +++ b/access-node/access_node/include/insite/tvb/monitor.h @@ -1,15 +1,15 @@ #pragma once -#include <rapidjson/document.h> -#include <rapidjson/writer.h> +#include "circular_timeseries.h" #include <cstdint> #include <iterator> #include <limits> #include <optional> +#include <rapidjson/document.h> +#include <rapidjson/writer.h> #include <string> #include <type_traits> #include <utility> #include <vector> -#include "circular_timeseries.h" // #include "params.h" #include "spdlog/fmt/fmt.h" #include "spdlog/spdlog.h" @@ -17,24 +17,19 @@ namespace insite { -template <typename T> -class TvbMonitor { +template <typename T> class TvbMonitor { using It = typename std::vector<T>::iterator; - public: +public: uint32_t internal_id; std::string name; std::string uid; std::vector<std::string> observed_variables; - TvbMonitor(std::string name, - uint32_t internal_id, - std::string uid, + TvbMonitor(std::string name, uint32_t internal_id, std::string uid, std::vector<std::string> observed_variables) - : name(std::move(name)), - internal_id(internal_id), - uid(std::move(uid)), - data(4, {1, 76, 2}), + : name(std::move(name)), internal_id(internal_id), uid(std::move(uid)), + data(10, {1, 76, 2}), observed_variables(std::move(observed_variables)) { stride_length.push_back(1); stride_length.push_back(76); @@ -42,8 +37,8 @@ class TvbMonitor { SPDLOG_DEBUG(stride_length); }; - void SerializeMetadataToJson( - rapidjson::Writer<rapidjson::StringBuffer>& writer) { + void + SerializeMetadataToJson(rapidjson::Writer<rapidjson::StringBuffer> &writer) { writer.StartObject(); writer.Key("uid"); writer.String(uid.c_str()); @@ -53,14 +48,14 @@ class TvbMonitor { writer.String(name.c_str()); writer.Key("observedVariables"); writer.StartArray(); - for (const auto& var : observed_variables) { + for (const auto &var : observed_variables) { writer.String(var.c_str()); } writer.EndArray(); writer.EndObject(); } - void SerializeDataToJson(rapidjson::Writer<rapidjson::StringBuffer>& writer, + void SerializeDataToJson(rapidjson::Writer<rapidjson::StringBuffer> &writer, tl::optional<double> from_time, tl::optional<double> to_time) { writer.StartObject(); @@ -81,7 +76,7 @@ class TvbMonitor { writer.Key(observed_variables[var].c_str()); writer.StartArray(); auto res = data.GetVarByIndex(timestep, var); - for (auto& data : res) { + for (auto &data : res) { if constexpr (std::is_same_v<T, double>) { writer.Double(data); } @@ -105,18 +100,17 @@ class TvbMonitor { }; }; -} // namespace insite +} // namespace insite -template <typename T> -struct fmt::formatter<insite::TvbMonitor<T>> { - constexpr auto parse(format_parse_context& ctx) // NOLINT +template <typename T> struct fmt::formatter<insite::TvbMonitor<T>> { + constexpr auto parse(format_parse_context &ctx) // NOLINT -> decltype(ctx.begin()) { return ctx.begin(); } template <typename FormatContext> - auto format(const insite::TvbMonitor<T>& monitor, // NOLINT - FormatContext& ctx) const -> decltype(ctx.out()) { + auto format(const insite::TvbMonitor<T> &monitor, // NOLINT + FormatContext &ctx) const -> decltype(ctx.out()) { return fmt::format_to(ctx.out(), "Monitor {} Name: {}, Observed Vars: {}", monitor.uid, monitor.name, monitor.observed_variables); diff --git a/access-node/access_node/include/insite/utilityFunctions.h b/access-node/access_node/include/insite/utility_functions.h similarity index 95% rename from access-node/access_node/include/insite/utilityFunctions.h rename to access-node/access_node/include/insite/utility_functions.h index 8e638b4bcfad5f7776c45462071e79899265dc12..0e1832163e57ab8049ab0a88b0bb7a04a2e50029 100644 --- a/access-node/access_node/include/insite/utilityFunctions.h +++ b/access-node/access_node/include/insite/utility_functions.h @@ -14,9 +14,9 @@ #include <unordered_set> #include <vector> -#include <jsonStrings.h> -#include <queryStringBuilder.h> -#include <spike.h> +#include <nest/json_strings.h> +#include <nest/spike_container.h> +#include <query_string_builder.h> namespace insite { #ifdef INSITE_PRETTY_JSON diff --git a/access-node/access_node/include/insite/websocket_sender.h b/access-node/access_node/include/insite/websocket_sender.h index d1cba5b09b31d32c664c08b72bd1e40cf2c55112..b27981341942ee9231cd46cb4c69fba0904ddd13 100644 --- a/access-node/access_node/include/insite/websocket_sender.h +++ b/access-node/access_node/include/insite/websocket_sender.h @@ -1,19 +1,19 @@ #pragma once -#include <spdlog/spdlog.h> -#include <unistd.h> -#include <condition_variable> -#include <cstdint> -#include <map> -#include <mutex> -#include <thread> #include "opcodes.h" #include "rapidjson/stringbuffer.h" #include "rapidjson/writer.h" -#include "tvbMonitor.h" +#include "resource_flags.h" #include "websocketpp/common/connection_hdl.hpp" #include "websocketpp/config/asio_no_tls.hpp" #include "websocketpp/roles/server_endpoint.hpp" -#include "resource_flags.h" +#include <condition_variable> +#include <cstdint> +#include <map> +#include <mutex> +#include <spdlog/spdlog.h> +#include <thread> +#include <tvb/monitor.h> +#include <unistd.h> namespace insite { using Server = websocketpp::server<websocketpp::config::asio>; @@ -27,24 +27,30 @@ struct ClientParams { }; class WebsocketSender { - public: - WebsocketSender(std::map<websocketpp::connection_hdl, ClientParams, std::owner_less<websocketpp::connection_hdl>>& connection_map, Server& websocket_server, std::mutex& mutex, std::condition_variable& cond) - : connection_map(connection_map),var_(cond), mut_(mutex), websocket_server(websocket_server) {} +public: + WebsocketSender( + std::map<websocketpp::connection_hdl, ClientParams, + std::owner_less<websocketpp::connection_hdl>> &connection_map, + Server &websocket_server, std::mutex &mutex, + std::condition_variable &cond) + : connection_map(connection_map), var_(cond), mut_(mutex), + websocket_server(websocket_server) {} - void StartThread(std::vector<WebsocketMessage>* queue) { + void StartThread(std::vector<WebsocketMessage> *queue) { consumer_thread_ = std::thread(&WebsocketSender::Consumer, this, queue); } - void Consumer(std::vector<WebsocketMessage>* queue); + void Consumer(std::vector<WebsocketMessage> *queue); // void BroadcastAll(const std::string& msg); - void BroadcastAll(const std::string& msg, ResourceFlag resource); - + void BroadcastAll(const std::string &msg, ResourceFlag resource); + // private: - std::map<websocketpp::connection_hdl, ClientParams, std::owner_less<websocketpp::connection_hdl>>& connection_map; + std::map<websocketpp::connection_hdl, ClientParams, + std::owner_less<websocketpp::connection_hdl>> &connection_map; std::thread consumer_thread_; - std::condition_variable& var_; - std::mutex& mut_; - Server& websocket_server; + std::condition_variable &var_; + std::mutex &mut_; + Server &websocket_server; }; -} // namespace insite +} // namespace insite diff --git a/access-node/access_node/params.cpp.bak b/access-node/access_node/params.cpp.bak deleted file mode 100644 index 09381d073722a1b33866cae01e484e3d6e1c89ad..0000000000000000000000000000000000000000 --- a/access-node/access_node/params.cpp.bak +++ /dev/null @@ -1,98 +0,0 @@ -#include "params.h" -#include <optional> -#include <unordered_set> -#include <vector> -#include "crow/query_string.h" -#include "queryStringBuilder.h" - -namespace insite { -template <typename> -struct IsStdUSet : std::false_type {}; - -template <typename T, typename A> -struct IsStdUSet<std::unordered_set<T, A>> : std::true_type {}; -std::string Param::KeyValueToString() const { - std::string res = name; - - std::visit( - [&res, this](auto&& arg) { - using T = std::decay_t<decltype(arg)>; - if constexpr (std::is_same_v<T, std::string>) { - res += name + "=" + arg; - } else if constexpr (std::is_arithmetic_v<T>) { - res += name + "=" + std::to_string(arg); - } else if constexpr (IsStdUSet<T>::value) { - } else { - static_assert(kAlwaysFalseV<T>, "non-exhaustive visitor!"); - } - }, - value); - - return res; -} - -std::string OptionalParameter::KeyValueToString() const { - std::string res = name + "="; - if (!value) { - return ""; - } - - std::visit( - [&res, this](auto&& arg) { - using T = std::decay_t<decltype(arg)>; - if constexpr (std::is_same_v<T, std::string>) { - res += arg; - } else if constexpr (std::is_arithmetic_v<T>) { - res += std::to_string(arg); - } else if constexpr (IsStdUSet<T>::value) { - res += UnorderedSetToCsv(arg); - } else { - static_assert(kAlwaysFalseV<T>, "non-exhaustive visitor!"); - } - }, - value.value()); - - return res; -} - -std::string OptionalParameters::ToQueryString( - const std::vector<OptionalParameter>& parameters) { - std::string result = "?"; - for (auto it = parameters.begin(); it != parameters.end(); ++it) { - if (*it) { - if (it != parameters.begin()) { - result += "&"; - } - result += it->KeyValueToString(); - } - } - - return result; -} - -std::string OptionalParameters::ToQueryString() { - std::string result = "?"; - for (auto it = parameters.begin(); it != parameters.end(); ++it) { - if (it != parameters.begin()) { - result += "&"; - } - if (it->second) { - result += it->second.KeyValueToString(); - } - } - - return result; -} - -// Returns the parameter value if it is present nullopt otherwise -OptionalParameter OptionalParameters::GetValue( - const ParameterName& parameter_name) { - if (auto parameter = parameters.find(parameter_name); - parameter != parameters.end()) { - return parameter->second; - } - - return {parameter_name, std::nullopt}; -} - -} // namespace insite diff --git a/access-node/access_node/arbor/arbor_strings.cpp b/access-node/access_node/src/arbor/arbor_strings.cpp similarity index 100% rename from access-node/access_node/arbor/arbor_strings.cpp rename to access-node/access_node/src/arbor/arbor_strings.cpp diff --git a/access-node/access_node/arbor/cell_endpoints.cpp b/access-node/access_node/src/arbor/cell_endpoints.cpp similarity index 97% rename from access-node/access_node/arbor/cell_endpoints.cpp rename to access-node/access_node/src/arbor/cell_endpoints.cpp index fc90f79d97a24308189363b5e90c73234c000013..28ffeb7aa7ee6ce6c12acaeb63078b99e3a3f9ca 100644 --- a/access-node/access_node/arbor/cell_endpoints.cpp +++ b/access-node/access_node/src/arbor/cell_endpoints.cpp @@ -6,10 +6,10 @@ #include "rapidjson/rapidjson.h" #include "rapidjson/stringbuffer.h" #include "spdlog/spdlog.h" -#include "utilityFunctions.h" #include <arbor/arbor_strings.h> #include <arbor/cell_endpoints.h> #include <config.h> +#include <utility_functions.h> namespace insite::arbor { diff --git a/access-node/access_node/arbor/parameters.cpp b/access-node/access_node/src/arbor/parameters.cpp similarity index 100% rename from access-node/access_node/arbor/parameters.cpp rename to access-node/access_node/src/arbor/parameters.cpp diff --git a/access-node/access_node/arbor/probe_endpoints.cpp b/access-node/access_node/src/arbor/probe_endpoints.cpp similarity index 98% rename from access-node/access_node/arbor/probe_endpoints.cpp rename to access-node/access_node/src/arbor/probe_endpoints.cpp index 3cdfbc363cb4fb63515a225818f440237708ba0d..9f8308f29233862d4f632dfff40713267296298d 100644 --- a/access-node/access_node/arbor/probe_endpoints.cpp +++ b/access-node/access_node/src/arbor/probe_endpoints.cpp @@ -3,10 +3,10 @@ #include "rapidjson/document.h" #include "rapidjson/stringbuffer.h" #include "spdlog/spdlog.h" -#include "utilityFunctions.h" #include <arbor/arbor_strings.h> #include <arbor/probe_endpoints.h> #include <config.h> +#include <utility_functions.h> namespace insite::arbor { diff --git a/access-node/access_node/arbor/spike_endpoints.cpp b/access-node/access_node/src/arbor/spike_endpoints.cpp similarity index 96% rename from access-node/access_node/arbor/spike_endpoints.cpp rename to access-node/access_node/src/arbor/spike_endpoints.cpp index d5f8d6c421be535ae65d3777ea2778130a26ee83..425d50d660b1126024156435abda6fbfe3725450 100644 --- a/access-node/access_node/arbor/spike_endpoints.cpp +++ b/access-node/access_node/src/arbor/spike_endpoints.cpp @@ -5,11 +5,11 @@ #include "rapidjson/rapidjson.h" #include "rapidjson/stringbuffer.h" #include "spdlog/spdlog.h" -#include "utilityFunctions.h" #include <arbor/arbor_strings.h> #include <arbor/cell_endpoints.h> #include <arbor/spike_endpoints.h> #include <config.h> +#include <utility_functions.h> namespace insite::arbor { diff --git a/access-node/access_node/config.cpp b/access-node/access_node/src/config.cpp similarity index 100% rename from access-node/access_node/config.cpp rename to access-node/access_node/src/config.cpp diff --git a/access-node/access_node/insite_defines.cpp b/access-node/access_node/src/insite_defines.cpp similarity index 100% rename from access-node/access_node/insite_defines.cpp rename to access-node/access_node/src/insite_defines.cpp diff --git a/access-node/access_node/main.cpp b/access-node/access_node/src/main.cpp similarity index 83% rename from access-node/access_node/main.cpp rename to access-node/access_node/src/main.cpp index f37680db739b5a896515642b00c0d30fcc5f5fcd..0f005acbe938bf5da90ff54b59c0dc25778f9599 100644 --- a/access-node/access_node/main.cpp +++ b/access-node/access_node/src/main.cpp @@ -1,8 +1,6 @@ #define CROW_MAIN #include "arbor/arbor_endpoints.h" #include "crow/middlewares/cors.h" -#include "nest/nest_endpoints.h" -#include "nest_handler.h" #include "spdlog/cfg/env.h" #include "spdlog/spdlog.h" #include <config.h> @@ -10,14 +8,12 @@ #include <crow/routing.h> #include <exception> #include <limits> -#include <nest/nestKernelStatus.h> -#include <nest/nestMultimeter.h> -#include <nest/nestNode.h> -#include <nest/nestSpikeRecorders.h> -#include <nest/nestSpikes.h> -#include <nest/nestVersion.h> -#include <tvb_handler.h> -#include <tvb_http_endpoints.h> +#include <nest/endpoints.h> +#include <nest/handler.h> +#include <nest/spikerecorders.h> +#include <nest/spikes.h> +#include <tvb/endpoints.h> +#include <tvb/handler.h> #include <websocket_server.h> #include <websocketpp/config/asio_no_tls.hpp> @@ -29,7 +25,6 @@ int main() { using namespace insite; spdlog::set_level(spdlog::level::trace); SPDLOG_INFO("Starting Insite access node"); - ServerConfig::GetInstance().ParseConfigIfExists(); ServerConfig::GetInstance().GenerateRequestUrls(); diff --git a/access-node/access_node/nest_handler.cpp b/access-node/access_node/src/nest/handler.cpp similarity index 94% rename from access-node/access_node/nest_handler.cpp rename to access-node/access_node/src/nest/handler.cpp index 6fc8979818e5fab5b66fd73b2ba1904dd12ede3a..232384ae2cc931c8b65f00d874c4a91b4023f479 100644 --- a/access-node/access_node/nest_handler.cpp +++ b/access-node/access_node/src/nest/handler.cpp @@ -1,10 +1,3 @@ -#include "nest_handler.h" -#include <rapidjson/document.h> -#include <schema_generated.h> -#include <spdlog/fmt/bin_to_hex.h> -#include <spdlog/fmt/ranges.h> -#include <chrono> -#include <cstdint> #include "opcodes.h" #include "rapidjson/stringbuffer.h" #include "rapidjson/writer.h" @@ -12,12 +5,19 @@ #include "spike_util.h" #include "websocket_server.h" #include "websocketpp/frame.hpp" +#include <chrono> +#include <cstdint> +#include <nest/handler.h> +#include <rapidjson/document.h> +#include <schema_generated.h> +#include <spdlog/fmt/bin_to_hex.h> +#include <spdlog/fmt/ranges.h> using namespace std::chrono_literals; namespace insite { void NestHandler::AddMessageIntoQueue(websocketpp::frame::opcode::value value, - std::string&& msg) { + std::string &&msg) { { std::lock_guard mutex(mut_); message_queue_.emplace_back(value, std::move(msg)); @@ -34,7 +34,7 @@ void NestHandler::Consumer() { while (!message_queue_.empty()) { if (message_queue_.back().first == websocketpp::frame::opcode::BINARY) { // storage.AddSpikesFromFlatbuffer(message_queue_.back().second.c_str()); - const Insite::Nest::SpikeTable* spike_table = + const Insite::Nest::SpikeTable *spike_table = Insite::Nest::GetSpikeTable(message_queue_.back().second.c_str()); double lastTimestamp = 0; if (spike_table->spikes()->size() > 0) { @@ -76,4 +76,4 @@ void NestHandler::Consumer() { SPDLOG_DEBUG("Finished NestHandler Consumer Thread"); } -} // namespace insite +} // namespace insite diff --git a/access-node/access_node/nest/kernelStatus.cpp b/access-node/access_node/src/nest/kernel_status.cpp similarity index 84% rename from access-node/access_node/nest/kernelStatus.cpp rename to access-node/access_node/src/nest/kernel_status.cpp index 94c4a0a26548888b687a4d23bdb8955b060d58c9..7138c07519d248a8277df801eccbcedde87a9179 100644 --- a/access-node/access_node/nest/kernelStatus.cpp +++ b/access-node/access_node/src/nest/kernel_status.cpp @@ -1,28 +1,28 @@ +#include "config.h" +#include "rapidjson/document.h" +#include "rapidjson/stringbuffer.h" #include <cpr/cpr.h> -#include <spdlog/spdlog.h> #include <iterator> +#include <spdlog/spdlog.h> #include <unordered_set> #include <vector> -#include "config.h" -#include "rapidjson/document.h" -#include "rapidjson/stringbuffer.h" -#include "utilityFunctions.h" +#include <utility_functions.h> namespace insite { // Get all kernelStatuses from the nest-server -rapidjson::Value NestGetKernelStatuses( - int api_version, - rapidjson::MemoryPoolAllocator<>& json_alloc) { +rapidjson::Value +NestGetKernelStatuses(int api_version, + rapidjson::MemoryPoolAllocator<> &json_alloc) { // get request results back and store in array std::string endpoint; switch (api_version) { - case 1: - endpoint = "/kernelStatus"; - break; - case 2: - endpoint = "/v2/kernelStatus"; - break; + case 1: + endpoint = "/kernelStatus"; + break; + case 2: + endpoint = "/v2/kernelStatus"; + break; } CprResponseVec kernel_statuses = GetAccessNodeRequests( ServerConfig::GetInstance().request_nest_urls, endpoint); @@ -33,7 +33,7 @@ rapidjson::Value NestGetKernelStatuses( rapidjson::Value kernel_status_result_array(rapidjson::kArrayType); // loop through all kernelStatus-data-sets and create a new object for each - for (cpr::Response& kernel_status : kernel_statuses) { + for (cpr::Response &kernel_status : kernel_statuses) { // create rapidjson-document for current kernelStatus-data-set and parse // data into it rapidjson::Document kernel_data_old; @@ -49,7 +49,7 @@ rapidjson::Value NestGetKernelStatuses( } // copy all members from the old data-set to the new one - for (auto& member : kernel_data_old.GetObject()) { + for (auto &member : kernel_data_old.GetObject()) { rapidjson::Value key(member.name.GetString(), json_alloc); // rapidjson::Value key(member.name.GetString(), member.name.Size()); kernel_data_new.AddMember(key, member.value, json_alloc); @@ -81,4 +81,4 @@ crow::response KernelStatus(int api_version) { return {DocumentToString(result_doc)}; } -} // namespace insite +} // namespace insite diff --git a/access-node/access_node/nest/nestMultimeter.cpp b/access-node/access_node/src/nest/multimeter.cpp similarity index 96% rename from access-node/access_node/nest/nestMultimeter.cpp rename to access-node/access_node/src/nest/multimeter.cpp index 795ebfe4c367a7a0c8bd0370d2ac60ac3b0798df..e0b6f7f3c985d5aecb7a3b2605c5e7f27db5fd0e 100644 --- a/access-node/access_node/nest/nestMultimeter.cpp +++ b/access-node/access_node/src/nest/multimeter.cpp @@ -1,18 +1,18 @@ #include "config.h" #include "cpr/response.h" #include "crow/http_response.h" -#include "jsonStrings.h" #include "query_params.h" -#include "utilityFunctions.h" #include <algorithm> #include <cstdint> #include <iterator> -#include <nest/nestMultimeter.h> +#include <nest/json_strings.h> +#include <nest/multimeter.h> #include <rapidjson/document.h> #include <rapidjson/stringbuffer.h> #include <rapidjson/writer.h> #include <unordered_map> #include <utility> +#include <utility_functions.h> #include <vector> namespace insite { @@ -52,7 +52,7 @@ crow::response MultimeterResponse(int api_version) { for (auto &multimeter : multimeter_responses) { rapidjson::Document multimeter_resp_doc; multimeter_resp_doc.Parse(multimeter.text.c_str()); - spdlog::error(multimeter.text.c_str()); + // spdlog::error(multimeter.text.c_str()); if (api_version == 1) { for (auto &multimeter : multimeter_resp_doc.GetArray()) { @@ -111,7 +111,7 @@ crow::response MultimeterByIdResponse(int api_version, for (auto &multimeter : multimeter_responses) { rapidjson::Document multimeter_resp_doc; multimeter_resp_doc.Parse(multimeter.text.c_str()); - spdlog::error(multimeter.text.c_str()); + // spdlog::error(multimeter.text.c_str()); if (api_version == 1) { for (auto &multimeter : multimeter_resp_doc.GetArray()) { @@ -196,7 +196,7 @@ NestGetMultimeterAttributesV2(const uint64_t multimeter_id, for (auto &response : mm_data_sets) { rapidjson::Document json_doc; json_doc.Parse(response.text.c_str()); - spdlog::error(response.text); + // spdlog::error(response.text); multimeter_values.AddDataFromJson(json_doc); multimeter_values.sim_id = json_doc["simId"]; } @@ -250,13 +250,13 @@ crow::response MultimeterAttributesResponse(const crow::request &req, MultimeterValueContainer result = std::move( NestGetMultimeterAttributes(multimeter_id, attr_name, params)); result.SerializeToJson(writer); - spdlog::error(buffer.GetString()); + // spdlog::error(buffer.GetString()); } else if (api_version == 2) { MultimeterValueContainer result = std::move( NestGetMultimeterAttributesV2(multimeter_id, attr_name, params)); result.SerializeToJsonV2(writer); - spdlog::error(buffer.GetString()); + // spdlog::error(buffer.GetString()); } return {buffer.GetString()}; } diff --git a/access-node/access_node/nest/nestMultimeterContainer.cpp b/access-node/access_node/src/nest/multimeter_container.cpp similarity index 98% rename from access-node/access_node/nest/nestMultimeterContainer.cpp rename to access-node/access_node/src/nest/multimeter_container.cpp index 575025bf59b1b028fac2116e35c3b398c2d71ad5..9b880a5feba6bdc96b1fcc821da0b1178305b0c0 100644 --- a/access-node/access_node/nest/nestMultimeterContainer.cpp +++ b/access-node/access_node/src/nest/multimeter_container.cpp @@ -1,6 +1,6 @@ -#include "jsonStrings.h" #include <algorithm> -#include <nest/nestMultimeterContainer.h> +#include <nest/json_strings.h> +#include <nest/multimeter_container.h> namespace insite { void MultimeterContainer::SerializeToJson( diff --git a/access-node/access_node/nest/nestNode.cpp b/access-node/access_node/src/nest/nodecollections.cpp similarity index 81% rename from access-node/access_node/nest/nestNode.cpp rename to access-node/access_node/src/nest/nodecollections.cpp index 49d5108a1097ba4cd8ace066c4cb3fe1a8a60174..51714e7c35f5d36e6cb91c8d0939ad8dd928c9f1 100644 --- a/access-node/access_node/nest/nestNode.cpp +++ b/access-node/access_node/src/nest/nodecollections.cpp @@ -1,35 +1,34 @@ -#include <nest/nestNode.h> -#include <toml++/impl/json_formatter.h> +#include "config.h" +#include "rapidjson/rapidjson.h" +#include "rapidjson/stringbuffer.h" #include <cstdint> +#include <nest/json_strings.h> +#include <nest/nodecollections.h> #include <optional> +#include <toml++/impl/json_formatter.h> #include <unordered_set> #include <vector> -#include "config.h" -#include "jsonStrings.h" -#include "rapidjson/rapidjson.h" -#include "rapidjson/stringbuffer.h" -#include <nest/nestSpikes.h> -#include <spdlog/fmt/ostr.h> -#include <spdlog/fmt/ranges.h> #include "rapidjson/writer.h" #include "spdlog/common.h" #include "spdlog/spdlog.h" -#include "utilityFunctions.h" +#include <nest/spikes.h> +#include <spdlog/fmt/ostr.h> +#include <spdlog/fmt/ranges.h> +#include <utility_functions.h> namespace insite { using OptionalDouble = std::optional<double>; using OptionalUInt = std::optional<uint64_t>; -template <class T> -using OptionalUSet = std::optional<std::unordered_set<T>>; +template <class T> using OptionalUSet = std::optional<std::unordered_set<T>>; using OptionalString = std::optional<std::string>; // Receives a rapidjson-Object and checks if it has all the necessary properties // for nodeCollectionData void CheckNodeCollectionDataValid( - const rapidjson::GenericObject<false, rapidjson::Value>& n) { + const rapidjson::GenericObject<false, rapidjson::Value> &n) { assert(n.HasMember(json_strings::kModel)); assert(n[json_strings::kModel].IsObject()); assert(n.HasMember(json_strings::kNodeCollectionId)); @@ -38,19 +37,19 @@ void CheckNodeCollectionDataValid( assert(n[json_strings::kNodes].IsObject()); } -rapidjson::Value NestGetNodes(rapidjson::MemoryPoolAllocator<>& json_alloc) { +rapidjson::Value NestGetNodes(rapidjson::MemoryPoolAllocator<> &json_alloc) { auto node_data_sets = GetAccessNodeRequests( ServerConfig::GetInstance().request_nest_urls, "/nodes"); rapidjson::Value kernel_status_result_array(rapidjson::kArrayType); - for (auto& node_data_set : node_data_sets) { + for (auto &node_data_set : node_data_sets) { rapidjson::Document current_node_data; current_node_data.Parse(node_data_set.text.c_str()); assert(current_node_data.IsArray()); - for (auto& node : current_node_data.GetArray()) { + for (auto &node : current_node_data.GetArray()) { rapidjson::Value insert(node, json_alloc); kernel_status_result_array.PushBack(insert, json_alloc); } @@ -59,20 +58,20 @@ rapidjson::Value NestGetNodes(rapidjson::MemoryPoolAllocator<>& json_alloc) { return kernel_status_result_array; } -rapidjson::Value NestGetNodes(rapidjson::MemoryPoolAllocator<>& json_alloc, - std::unordered_set<int>& param_node_ids) { +rapidjson::Value NestGetNodes(rapidjson::MemoryPoolAllocator<> &json_alloc, + std::unordered_set<int> ¶m_node_ids) { auto node_data_sets = GetAccessNodeRequests( ServerConfig::GetInstance().request_nest_urls, "/nodes", 1); rapidjson::Value node_results(rapidjson::kArrayType); - for (auto& node_data_set : node_data_sets) { + for (auto &node_data_set : node_data_sets) { rapidjson::Document current_node_data; current_node_data.Parse(node_data_set.text.c_str()); assert(current_node_data.IsArray()); - for (auto& node : current_node_data.GetArray()) { + for (auto &node : current_node_data.GetArray()) { if (param_node_ids.find(node[json_strings::kNodeId].GetInt()) == param_node_ids.end()) { continue; @@ -86,23 +85,23 @@ rapidjson::Value NestGetNodes(rapidjson::MemoryPoolAllocator<>& json_alloc, return node_results; } -rapidjson::Value NestGetNodesV2(rapidjson::MemoryPoolAllocator<>& json_alloc, - std::unordered_set<int>& param_node_ids) { +rapidjson::Value NestGetNodesV2(rapidjson::MemoryPoolAllocator<> &json_alloc, + std::unordered_set<int> ¶m_node_ids) { auto node_data_sets = GetAccessNodeRequests( ServerConfig::GetInstance().request_nest_urls, "/nodes", 2); rapidjson::Value node_results(rapidjson::kArrayType); rapidjson::Value sim_id; - for (auto& node_data_set : node_data_sets) { + for (auto &node_data_set : node_data_sets) { rapidjson::Document current_node_data; current_node_data.Parse(node_data_set.text.c_str()); - spdlog::error(node_data_set.text.c_str()); + // spdlog::error(node_data_set.text.c_str()); assert(current_node_data.IsArray()); sim_id = current_node_data["simId"]; - for (auto& node : current_node_data["nodes"].GetArray()) { + for (auto &node : current_node_data["nodes"].GetArray()) { if (param_node_ids.find(node[json_strings::kNodeId].GetInt()) == param_node_ids.end()) { continue; @@ -120,9 +119,9 @@ rapidjson::Value NestGetNodesV2(rapidjson::MemoryPoolAllocator<>& json_alloc, return result; } -rapidjson::Value NestGetNodeCollections( - rapidjson::MemoryPoolAllocator<>& json_alloc, - tl::optional<int> requested_node_collection_id) { +rapidjson::Value +NestGetNodeCollections(rapidjson::MemoryPoolAllocator<> &json_alloc, + tl::optional<int> requested_node_collection_id) { auto node_collection_data_sets = GetAccessNodeRequests( ServerConfig::GetInstance().request_nest_urls, "/nodeCollections"); @@ -130,14 +129,14 @@ rapidjson::Value NestGetNodeCollections( std::unordered_set<int> added_node_collections; - for (auto& node_collection_set : node_collection_data_sets) { + for (auto &node_collection_set : node_collection_data_sets) { auto str = node_collection_set.text; rapidjson::Document node_collection_data_old; node_collection_data_old.Parse(str.c_str()); assert(node_collection_data_old.IsArray()); - for (auto& node_collection : node_collection_data_old.GetArray()) { + for (auto &node_collection : node_collection_data_old.GetArray()) { int node_collection_id = node_collection.GetObject()[json_strings::kNodeCollectionId].GetInt(); @@ -159,9 +158,9 @@ rapidjson::Value NestGetNodeCollections( return node_collection_result_array; } -rapidjson::Value NestGetNodeCollectionsV2( - rapidjson::MemoryPoolAllocator<>& json_alloc, - tl::optional<int> requested_node_collection_id) { +rapidjson::Value +NestGetNodeCollectionsV2(rapidjson::MemoryPoolAllocator<> &json_alloc, + tl::optional<int> requested_node_collection_id) { auto node_collection_data_sets = GetAccessNodeRequests( ServerConfig::GetInstance().request_nest_urls, "/nodeCollections", 2); @@ -170,7 +169,7 @@ rapidjson::Value NestGetNodeCollectionsV2( std::unordered_set<int> added_node_collections; - for (auto& node_collection_set : node_collection_data_sets) { + for (auto &node_collection_set : node_collection_data_sets) { auto str = node_collection_set.text; rapidjson::Document node_collection_data_old; node_collection_data_old.Parse(str.c_str()); @@ -179,7 +178,7 @@ rapidjson::Value NestGetNodeCollectionsV2( sim_id = node_collection_data_old["simId"]; - for (auto& node_collection : + for (auto &node_collection : node_collection_data_old.GetObject()["nodeCollections"].GetArray()) { int node_collection_id = node_collection.GetObject()[json_strings::kNodeCollectionId].GetInt(); @@ -216,20 +215,25 @@ crow::response NodeCollections(int api_version, rapidjson::Document result_doc; rapidjson::MemoryPoolAllocator<> json_alloc; rapidjson::Value node_collection_result_array; + if (api_version == 1) { node_collection_result_array = NestGetNodeCollections(json_alloc, requested_node_collection_id); result_doc.SetArray() = node_collection_result_array.GetArray(); return {DocumentToString(result_doc)}; - } else if (api_version == 2) { + } + + if (api_version == 2) { node_collection_result_array = NestGetNodeCollectionsV2(json_alloc, requested_node_collection_id); result_doc.SetObject() = node_collection_result_array.GetObject(); return {DocumentToString(result_doc)}; } + + return crow::response{crow::status::BAD_REQUEST, "Unknown version number."}; } -crow::response SpikesByNodeCollectionId(const crow::request& req, +crow::response SpikesByNodeCollectionId(const crow::request &req, int api_version, int requested_node_collection_id) { SpikeParameter params(req.url_params); @@ -249,21 +253,21 @@ crow::response Nodes(int api_version) { rapidjson::Value kernel_status_result_array(rapidjson::kArrayType); rapidjson::Value sim_id; - for (auto& node_data_set : node_data_sets) { + for (auto &node_data_set : node_data_sets) { rapidjson::Document current_node_data; current_node_data.Parse(node_data_set.text.c_str()); assert(current_node_data.IsArray()); if (api_version == 1) { - for (auto& node : current_node_data.GetArray()) { + for (auto &node : current_node_data.GetArray()) { rapidjson::Value insert(node, json_alloc); kernel_status_result_array.PushBack(insert, json_alloc); } } else if (api_version == 2) { sim_id = current_node_data["simId"]; - for (auto& node : current_node_data["nodes"].GetArray()) { + for (auto &node : current_node_data["nodes"].GetArray()) { rapidjson::Value insert(node, json_alloc); kernel_status_result_array.PushBack(insert, json_alloc); } @@ -305,20 +309,20 @@ crow::response NodesById(int api_version, int node_id) { return {DocumentToString(result_doc)}; } -rapidjson::Value GetNodeIds(rapidjson::MemoryPoolAllocator<>& json_alloc) { +rapidjson::Value GetNodeIds(rapidjson::MemoryPoolAllocator<> &json_alloc) { auto node_data_sets = GetAccessNodeRequests( ServerConfig::GetInstance().request_nest_urls, "/nodes"); rapidjson::Value node_array(rapidjson::kArrayType); - for (auto& node_data_set : node_data_sets) { + for (auto &node_data_set : node_data_sets) { rapidjson::Document current_node_data; current_node_data.Parse(node_data_set.text.c_str()); - spdlog::error(node_data_set.text.c_str()); + // spdlog::error(node_data_set.text.c_str()); assert(current_node_data.IsArray()); - for (auto& node : current_node_data.GetArray()) { + for (auto &node : current_node_data.GetArray()) { rapidjson::Value insert(node.GetObject()[json_strings::kNodeId], json_alloc); node_array.PushBack(node.GetObject()[json_strings::kNodeId], json_alloc); @@ -327,23 +331,23 @@ rapidjson::Value GetNodeIds(rapidjson::MemoryPoolAllocator<>& json_alloc) { return node_array; } -rapidjson::Value GetNodeIdsV2(rapidjson::MemoryPoolAllocator<>& json_alloc) { +rapidjson::Value GetNodeIdsV2(rapidjson::MemoryPoolAllocator<> &json_alloc) { auto node_data_sets = GetAccessNodeRequests( ServerConfig::GetInstance().request_nest_urls, "/nodes"); rapidjson::Value node_array(rapidjson::kArrayType); rapidjson::Value sim_id; - for (auto& node_data_set : node_data_sets) { + for (auto &node_data_set : node_data_sets) { rapidjson::Document current_node_data; current_node_data.Parse(node_data_set.text.c_str()); - spdlog::error(node_data_set.text.c_str()); + // spdlog::error(node_data_set.text.c_str()); sim_id = current_node_data["simId"]; assert(current_node_data.IsArray()); - for (auto& node : current_node_data["nodes"].GetArray()) { + for (auto &node : current_node_data["nodes"].GetArray()) { rapidjson::Value insert(node.GetObject()[json_strings::kNodeId], json_alloc); node_array.PushBack(node.GetObject()[json_strings::kNodeIds], json_alloc); @@ -369,4 +373,4 @@ crow::response NodeIdEndpoint(int api_version) { return {DocumentToString(node_result)}; } -} // namespace insite +} // namespace insite diff --git a/access-node/access_node/nest/spike.cpp b/access-node/access_node/src/nest/spike_container.cpp similarity index 99% rename from access-node/access_node/nest/spike.cpp rename to access-node/access_node/src/nest/spike_container.cpp index f75ae763f2cdfe5a6b0053fed7a0ad0f4923a85c..df7d4159a4f4ab8732414195bbd86433f7663376 100644 --- a/access-node/access_node/nest/spike.cpp +++ b/access-node/access_node/src/nest/spike_container.cpp @@ -1,13 +1,13 @@ -#include "spike.h" #include "flatbuffers/base.h" #include "flatbuffers/flatbuffer_builder.h" #include "flatbuffers/vector.h" -#include "jsonStrings.h" #include "pdqsort.h" #include "spdlog/spdlog.h" #include <algorithm> #include <exception> #include <iterator> +#include <nest/json_strings.h> +#include <nest/spike_container.h> #include <rapidjson/document.h> #include <rapidjson/encodings.h> #include <rapidjson/stringbuffer.h> diff --git a/access-node/access_node/nest/spikedetector.cpp b/access-node/access_node/src/nest/spikerecorders.cpp similarity index 80% rename from access-node/access_node/nest/spikedetector.cpp rename to access-node/access_node/src/nest/spikerecorders.cpp index 1aca00b423eaec9c24b5676b6526ea7def407c26..89e0bd0122bd2d563f97dd99a8ba6642a872a6bb 100644 --- a/access-node/access_node/nest/spikedetector.cpp +++ b/access-node/access_node/src/nest/spikerecorders.cpp @@ -1,13 +1,13 @@ #include "spikedetector.h" +#include <nest/json_strings.h> #include <utility> -#include "jsonStrings.h" namespace insite { Spikerecorder::Spikerecorder() {} -Spikerecorder::Spikerecorder(const rapidjson::Value& document) +Spikerecorder::Spikerecorder(const rapidjson::Value &document) : spikerecorder_id(document[json_strings::kSpikerecorderId].GetUint64()) { auto json_nodes = document[json_strings::kNodeIds].GetArray(); nodes.resize(json_nodes.Size()); @@ -16,7 +16,7 @@ Spikerecorder::Spikerecorder(const rapidjson::Value& document) } } -Spikerecorder::Spikerecorder(const rapidjson::Value& document, +Spikerecorder::Spikerecorder(const rapidjson::Value &document, std::string sim_id) : sim_id(std::move(sim_id)), spikerecorder_id(document[json_strings::kSpikerecorderId].GetUint64()) { @@ -30,7 +30,7 @@ Spikerecorder::Spikerecorder(const rapidjson::Value& document, Spikerecorder::~Spikerecorder() {} void Spikerecorder::WriteToJson( - rapidjson::Writer<rapidjson::StringBuffer>& writer) const { + rapidjson::Writer<rapidjson::StringBuffer> &writer) const { writer.StartObject(); writer.Key("spikerecorderId"); @@ -47,8 +47,8 @@ void Spikerecorder::WriteToJson( void Spikerecorder::ParseFromJson(rapidjson::Document input) {} -std::ostream& operator<<(std::ostream& ostream, - const Spikerecorder& spikerecorder) { +std::ostream &operator<<(std::ostream &ostream, + const Spikerecorder &spikerecorder) { ostream << "Spikerecorder: {" << std::endl; ostream << "spikerecorderId: " << spikerecorder.spikerecorder_id << std::endl; ostream << ", nodes: ["; @@ -60,4 +60,4 @@ std::ostream& operator<<(std::ostream& ostream, return ostream; } -} // namespace insite +} // namespace insite diff --git a/access-node/access_node/nest/nestSpikes.cpp b/access-node/access_node/src/nest/spikes.cpp similarity index 92% rename from access-node/access_node/nest/nestSpikes.cpp rename to access-node/access_node/src/nest/spikes.cpp index 7267492aefd9c65f5f33b8768a1281e39b05cc43..239725b3a28d46e4dc271f790222f67b8f0a74a9 100644 --- a/access-node/access_node/nest/nestSpikes.cpp +++ b/access-node/access_node/src/nest/spikes.cpp @@ -1,9 +1,12 @@ +#include <config.h> + +#include "query_params.h" #include "spdlog/common.h" #include "spdlog/spdlog.h" -#include <config.h> +#include "tl/optional.hpp" #include <cstdint> #include <limits> -#include <nest/nestSpikes.h> +#include <nest/spikes.h> #include <unordered_set> namespace insite { @@ -59,8 +62,10 @@ crow::response NestGetSpikes(const SpikeParameter ¶meter, int api_version) { rapidjson::Writer<rapidjson::StringBuffer> writer(buffer); spdlog::stopwatch stopwatch; + SpikeParameter params_without_skip = parameter; + params_without_skip.skip = tl::nullopt; std::string query_string = - BuildQueryString("/spikes", parameter.GetParameterVector()); + BuildQueryString("/spikes", params_without_skip.GetParameterVector()); auto spike_data_sets = GetAccessNodeRequests( ServerConfig::GetInstance().request_nest_urls, query_string, api_version); @@ -75,7 +80,7 @@ crow::response NestGetSpikes(const SpikeParameter ¶meter, int api_version) { rapidjson::Document document; document.Parse(spike_data_set.text.c_str()); - spdlog::error(spike_data_set.text.c_str()); + // spdlog::error(spike_data_set.text.c_str()); if (api_version == 1) { spikes.AddSpikesFromJson(document); diff --git a/access-node/access_node/nest/nestVersion.cpp b/access-node/access_node/src/nest/version.cpp similarity index 92% rename from access-node/access_node/nest/nestVersion.cpp rename to access-node/access_node/src/nest/version.cpp index e3c63574aab493c9f945f190496d08fd444ab6f6..36b3552c60cc696bbbe32d328bc4ec0533618315 100644 --- a/access-node/access_node/nest/nestVersion.cpp +++ b/access-node/access_node/src/nest/version.cpp @@ -1,19 +1,19 @@ +#include "rapidjson/document.h" +#include "rapidjson/stringbuffer.h" #include <config.h> -#include <nest/nestVersion.h> -#include <spdlog/spdlog.h> -#include <utilityFunctions.h> #include <fstream> #include <iterator> +#include <nest/version.h> #include <optional> +#include <spdlog/spdlog.h> #include <unordered_set> +#include <utility_functions.h> #include <vector> -#include "rapidjson/document.h" -#include "rapidjson/stringbuffer.h" namespace insite { -rapidjson::Value NestGetSimulationTimeInfo( - rapidjson::MemoryPoolAllocator<> json_alloc, - int api_version) { +rapidjson::Value +NestGetSimulationTimeInfo(rapidjson::MemoryPoolAllocator<> json_alloc, + int api_version) { // get request results back and store in array auto sim_time_infos = GetAccessNodeRequests(ServerConfig::GetInstance().request_nest_urls, @@ -26,7 +26,7 @@ rapidjson::Value NestGetSimulationTimeInfo( rapidjson::Value sim_id; // loop through all kernelStatus-data-sets and create a new object for each - for (const auto& sim_time_info : sim_time_infos) { + for (const auto &sim_time_info : sim_time_infos) { std::string json_string = sim_time_info.text; // create rapidjson-document for current kernelStatus-data-set and parse @@ -65,7 +65,7 @@ rapidjson::Value NestGetSimulationTimeInfo( return result; } -rapidjson::Value NestGetVersion(rapidjson::MemoryPoolAllocator<>& json_alloc) { +rapidjson::Value NestGetVersion(rapidjson::MemoryPoolAllocator<> &json_alloc) { // get request results back and store in array auto nest_version_infos = GetAccessNodeRequests( ServerConfig::GetInstance().request_nest_urls, "/version"); @@ -74,7 +74,7 @@ rapidjson::Value NestGetVersion(rapidjson::MemoryPoolAllocator<>& json_alloc) { rapidjson::Value insite_version; // loop through all kernelStatus-data-sets and create a new object for each - for (auto& nest_version_info : nest_version_infos) { + for (auto &nest_version_info : nest_version_infos) { std::string json_string = nest_version_info.text; rapidjson::Document current_version_info; @@ -140,4 +140,4 @@ crow::response Version() { return {DocumentToString(result_doc)}; } -} // namespace insite +} // namespace insite diff --git a/access-node/access_node/utilityFunctions.cpp b/access-node/access_node/src/utility_functions.cpp similarity index 96% rename from access-node/access_node/utilityFunctions.cpp rename to access-node/access_node/src/utility_functions.cpp index 6e0572b5de90d7ac933ea9861e18b550d5d67c1e..2faebd2d70996816cafbd5893bf6e9b1fbbb65f0 100644 --- a/access-node/access_node/utilityFunctions.cpp +++ b/access-node/access_node/src/utility_functions.cpp @@ -1,3 +1,5 @@ +#include "config.h" + #include "cpr/session.h" #include <cpr/async.h> #include <cpr/cpr.h> @@ -15,12 +17,11 @@ #include "rapidjson/stringbuffer.h" #include "rapidjson/writer.h" -#include "config.h" // #include "jsonParameters.h" -#include "jsonStrings.h" -#include "queryStringBuilder.h" -#include "spike.h" -#include "utilityFunctions.h" +#include <nest/json_strings.h> +#include <nest/spike_container.h> +#include <query_string_builder.h> +#include <utility_functions.h> namespace insite { @@ -112,7 +113,7 @@ CprResponseVec GetAccessNodeRequests(const std::vector<std::string> &urls, multiperform.AddSession(sessions.back()); SPDLOG_DEBUG( "[GetAccessNodeRequests] Added {} to the multiperform request.", - url + version + postfix); + url + versioned_postfix); } // Add sessions to the MultiPerform return multiperform.Get(); diff --git a/access-node/access_node/websocket_sender.cpp b/access-node/access_node/src/websocket_sender.cpp similarity index 100% rename from access-node/access_node/websocket_sender.cpp rename to access-node/access_node/src/websocket_sender.cpp diff --git a/access-node/access_node/websocket_server.cpp b/access-node/access_node/src/websocket_server.cpp similarity index 99% rename from access-node/access_node/websocket_server.cpp rename to access-node/access_node/src/websocket_server.cpp index 735d2b42592e7c4e2142eeb12266251ae93ecc49..8b7377dfe6f3d998856c8ca4128480e5545f2e2f 100644 --- a/access-node/access_node/websocket_server.cpp +++ b/access-node/access_node/src/websocket_server.cpp @@ -1,9 +1,9 @@ #include "websocket_server.h" -#include "nest_handler.h" #include "spdlog/spdlog.h" -#include "tvb_handler.h" #include "websocketpp/frame.hpp" #include <cstdint> +#include <nest/handler.h> +#include <tvb/handler.h> namespace insite { diff --git a/access-node/access_node/tvb_handler.cpp b/access-node/access_node/tvb/handler.cpp similarity index 82% rename from access-node/access_node/tvb_handler.cpp rename to access-node/access_node/tvb/handler.cpp index a564ebdc93eda780a709b3f93965b7c439eaab8b..3e6eb7aa00bf6aad9b6a435657020db09c57eaa5 100644 --- a/access-node/access_node/tvb_handler.cpp +++ b/access-node/access_node/tvb/handler.cpp @@ -1,12 +1,12 @@ -#define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_TRACE +#include <insite_defines.h> -#include "tvb_handler.h" #include "opcodes.h" #include "spdlog/spdlog.h" #include <chrono> #include <cstdint> #include <spdlog/fmt/bin_to_hex.h> #include <spdlog/fmt/ranges.h> +#include <tvb/handler.h> using namespace std::chrono_literals; namespace insite { @@ -59,6 +59,15 @@ void TvbHandler::Consumer() { SPDLOG_TRACE("New TVB Data"); ParseDataPacket(data); break; + case Opcode::kSimInfo: + SPDLOG_TRACE("Parse Sim Info"); + ParseSimInfo(data); + break; + + case Opcode::kSimInfoReturn: + SPDLOG_TRACE("Parse Sim Info Return"); + ParseSimInfoReturn(data); + break; default: SPDLOG_ERROR("[TVB Handler] Unknown opcode: " + std::to_string(opcode) + " Message: {}", @@ -70,6 +79,17 @@ void TvbHandler::Consumer() { } SPDLOG_DEBUG("Finished TvbHandler Consumer Thread"); } +void TvbHandler::ParseSimInfo(const std::string &payload) { + sim_info.Parse(payload.c_str() + 1); + // spdlog::error(payload); +} + +void TvbHandler::ParseSimInfoReturn(const std::string &payload) { + // spdlog::error("ParseSimInfoReturn: {}", payload); + // sim_info.Parse(payload.c_str() + 1); + sim_info_promise.set_value(payload.substr(1)); + // spdlog::error(payload); +} void TvbHandler::ParseNewMonitorPacket(const std::string &payload) { rapidjson::Document doc; @@ -101,11 +121,12 @@ void TvbHandler::ParseDataPacket(const std::string &payload) { std::memcpy(&header, payload.data() + sizeof(Opcode), sizeof(header)); cursor += sizeof(DataHeader); // SPDLOG_DEBUG( - // "Header: internalId: {}, time: {}, type: {}, dim1: {}, dim2: {}, dim3: + // "Header: internalId: {}, time: {}, type: {}, dim1: {}, dim2: {}, + // dim3: // " // "{}", - // header.internal_id, header.time, header.type, header.dim1, header.dim2, - // header.dim3); + // header.internal_id, header.time, header.type, header.dim1, + // header.dim2, header.dim3); if (header.type == DataType::kDouble) { const auto *dat = reinterpret_cast<const double *>(payload.data() + cursor); double_monitors_[header.internal_id].data.PushBack( diff --git a/access-node/access_node/tvb/monitor.cpp b/access-node/access_node/tvb/monitor.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f0a3c05ced3b4e358a12e3dffbbb5d86896e9d28 --- /dev/null +++ b/access-node/access_node/tvb/monitor.cpp @@ -0,0 +1 @@ +#include <tvb/monitor.h> diff --git a/access-node/access_node/tvbMonitor.cpp b/access-node/access_node/tvbMonitor.cpp deleted file mode 100644 index b20f6b27a31411131d512bb354406648f11a0496..0000000000000000000000000000000000000000 --- a/access-node/access_node/tvbMonitor.cpp +++ /dev/null @@ -1,2 +0,0 @@ -#include "tvbMonitor.h" -