You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by al...@apache.org on 2018/07/24 13:53:27 UTC
nifi-minifi-cpp git commit: MINFICIPP-568: Change resp to
componentmanifest
Repository: nifi-minifi-cpp
Updated Branches:
refs/heads/master ed6dc27f6 -> 1c1f53ba5
MINFICIPP-568: Change resp to componentmanifest
MINIFICP-568: Add type for agent information
MINIFICPP-569: Break apart the different extensions in the c2 response
This closes #378.
Signed-off-by: Aldrin Piri <al...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/commit/1c1f53ba
Tree: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/tree/1c1f53ba
Diff: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/diff/1c1f53ba
Branch: refs/heads/master
Commit: 1c1f53ba5626ebfe0621a14bc6fa3c492949274a
Parents: ed6dc27
Author: Marc Parisi <ph...@apache.org>
Authored: Sat Jul 21 20:52:56 2018 -0400
Committer: Aldrin Piri <al...@apache.org>
Committed: Tue Jul 24 09:53:01 2018 -0400
----------------------------------------------------------------------
CMakeLists.txt | 2 -
cmake/Extensions.cmake | 3 +-
extensions/ExtensionHeader.txt | 2 +-
extensions/civetweb/CMakeLists.txt | 3 +-
extensions/http-curl/CMakeLists.txt | 5 +-
libminifi/CMakeLists.txt | 1 +
libminifi/include/agent/build_description.h | 50 +--
libminifi/include/core/ClassLoader.h | 25 +-
libminifi/include/core/Resource.h | 11 +-
libminifi/include/core/state/Value.h | 5 +
.../include/core/state/nodes/AgentInformation.h | 317 ++++++++++---------
.../include/core/state/nodes/MetricsBase.h | 1 -
libminifi/src/c2/C2Agent.cpp | 3 +
.../unit/PropertyValidationAgentInfoTests.cpp | 4 +-
14 files changed, 242 insertions(+), 190 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1c1f53ba/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1177813..c996758 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -356,8 +356,6 @@ if (NOT DISABLE_CURL)
add_subdirectory(LibExample)
endif()
-
-
get_property(selected_extensions GLOBAL PROPERTY EXTENSION-OPTIONS)
if (NOT BUILD_IDENTIFIER)
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1c1f53ba/cmake/Extensions.cmake
----------------------------------------------------------------------
diff --git a/cmake/Extensions.cmake b/cmake/Extensions.cmake
index b945f0b..05daeea 100644
--- a/cmake/Extensions.cmake
+++ b/cmake/Extensions.cmake
@@ -23,8 +23,9 @@ define_property(GLOBAL PROPERTY EXTENSION-OPTIONS
set_property(GLOBAL PROPERTY EXTENSION-OPTIONS "")
macro(register_extension extension-name)
- get_property(extensions GLOBAL PROPERTY EXTENSION-OPTIONS)
+ get_property(extensions GLOBAL PROPERTY EXTENSION-OPTIONS)
set_property(GLOBAL APPEND PROPERTY EXTENSION-OPTIONS ${extension-name})
+ target_compile_definitions(${extension-name} PRIVATE "MODULE_NAME=${extension-name}")
endmacro()
### TESTING MACROS
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1c1f53ba/extensions/ExtensionHeader.txt
----------------------------------------------------------------------
diff --git a/extensions/ExtensionHeader.txt b/extensions/ExtensionHeader.txt
index 8deafa5..328e3be 100644
--- a/extensions/ExtensionHeader.txt
+++ b/extensions/ExtensionHeader.txt
@@ -23,4 +23,4 @@ cmake_minimum_required(VERSION 2.6)
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--export-all-symbols")
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--export-symbols")
-include_directories(../../libminifi/include ../../libminifi/include/core/yaml ../../libminifi/include/core ../../thirdparty/spdlog-20170710/include ../../thirdparty/concurrentqueue ../../thirdparty/yaml-cpp-yaml-cpp-0.5.3/include ${CIVET_THIRDPARTY_ROOT}/include ../../thirdparty/)
\ No newline at end of file
+include_directories(../../libminifi/include ../../libminifi/include/core/yaml ../../libminifi/include/core ../../thirdparty/spdlog-20170710/include ../../thirdparty/concurrentqueue ../../thirdparty/yaml-cpp-yaml-cpp-0.5.3/include ${CIVET_THIRDPARTY_ROOT}/include ../../thirdparty/)
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1c1f53ba/extensions/civetweb/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/extensions/civetweb/CMakeLists.txt b/extensions/civetweb/CMakeLists.txt
index 470a231..755cbf8 100644
--- a/extensions/civetweb/CMakeLists.txt
+++ b/extensions/civetweb/CMakeLists.txt
@@ -17,8 +17,7 @@
# under the License.
#
-set(CMAKE_EXE_LINKER_FLAGS "-Wl,--export-all-symbols")
-set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--export-symbols")
+include(${CMAKE_SOURCE_DIR}/extensions/ExtensionHeader.txt)
include_directories(${CMAKE_SOURCE_DIR}/libminifi/include
${CMAKE_SOURCE_DIR}/libminifi/include/core
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1c1f53ba/extensions/http-curl/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/extensions/http-curl/CMakeLists.txt b/extensions/http-curl/CMakeLists.txt
index 14d4193..9d2d816 100644
--- a/extensions/http-curl/CMakeLists.txt
+++ b/extensions/http-curl/CMakeLists.txt
@@ -63,10 +63,7 @@ endif()
find_package(CURL REQUIRED)
-set(CMAKE_EXE_LINKER_FLAGS "-Wl,--export-all-symbols")
-set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--export-symbols")
-
-include_directories(../../libminifi/include ../../libminifi/include/core/yaml ../../libminifi/include/core ../../thirdparty/spdlog-20170710/include ../../thirdparty/concurrentqueue ../../thirdparty/yaml-cpp-yaml-cpp-0.5.3/include ${CIVET_THIRDPARTY_ROOT}/include ../../thirdparty/)
+include(${CMAKE_SOURCE_DIR}/extensions/ExtensionHeader.txt)
include_directories(protocols client processors sitetosite)
file(GLOB SOURCES "*.cpp" "protocols/*.cpp" "client/*.cpp" "processors/*.cpp" "sitetosite/*.cpp")
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1c1f53ba/libminifi/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/libminifi/CMakeLists.txt b/libminifi/CMakeLists.txt
index f7f3e93..54a9801 100644
--- a/libminifi/CMakeLists.txt
+++ b/libminifi/CMakeLists.txt
@@ -25,6 +25,7 @@ set(PROJECT_VERSION_MAJOR 0)
set(PROJECT_VERSION_MINOR 5)
set(PROJECT_VERSION_PATCH 0)
+
#### Establish Project Configuration ####
# Enable usage of the VERSION specifier
set(CMAKE_CXX_STANDARD 11)
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1c1f53ba/libminifi/include/agent/build_description.h
----------------------------------------------------------------------
diff --git a/libminifi/include/agent/build_description.h b/libminifi/include/agent/build_description.h
index b653b93..b46dde5 100644
--- a/libminifi/include/agent/build_description.h
+++ b/libminifi/include/agent/build_description.h
@@ -51,45 +51,45 @@ struct Components {
class BuildDescription {
public:
- static struct Components getClassDescriptions() {
- static struct Components classes;
- if (UNLIKELY(IsNullOrEmpty(classes.processors_) && IsNullOrEmpty(classes.controller_services_))) {
- for (auto clazz : core::ClassLoader::getDefaultClassLoader().getClasses()) {
-
+ static struct Components getClassDescriptions(const std::string group = "default") {
+ static std::map<std::string, struct Components> class_mappings;
+ if (UNLIKELY(IsNullOrEmpty(class_mappings[group].processors_) && IsNullOrEmpty(class_mappings[group].processors_))) {
+ for (auto clazz : core::ClassLoader::getDefaultClassLoader().getClasses(group)) {
+ std::string class_name = clazz;
auto lastOfIdx = clazz.find_last_of("::");
if (lastOfIdx != std::string::npos) {
lastOfIdx++; // if a value is found, increment to move beyond the .
int nameLength = clazz.length() - lastOfIdx;
- std::string class_name = clazz.substr(lastOfIdx, nameLength);
-
- auto obj = core::ClassLoader::getDefaultClassLoader().instantiate(class_name, class_name);
+ class_name = clazz.substr(lastOfIdx, nameLength);
+ }
+ auto obj = core::ClassLoader::getDefaultClassLoader().instantiate(class_name, class_name);
- std::shared_ptr<core::ConfigurableComponent> component = std::dynamic_pointer_cast<core::ConfigurableComponent>(obj);
+ std::shared_ptr<core::ConfigurableComponent> component = std::dynamic_pointer_cast<core::ConfigurableComponent>(obj);
- ClassDescription description(clazz);
- if (nullptr != component) {
+ ClassDescription description(clazz);
+ if (nullptr != component) {
- bool is_processor = std::dynamic_pointer_cast<core::Processor>(obj) != nullptr;
- bool is_controller_service = LIKELY(is_processor == true) ? false : std::dynamic_pointer_cast<core::controller::ControllerService>(obj) != nullptr;
+ bool is_processor = std::dynamic_pointer_cast<core::Processor>(obj) != nullptr;
+ bool is_controller_service = LIKELY(is_processor == true) ? false : std::dynamic_pointer_cast<core::controller::ControllerService>(obj) != nullptr;
- component->initialize();
- description.class_properties_ = component->getProperties();
- description.support_dynamic_ = component->supportsDynamicProperties();
- if (is_processor) {
- classes.processors_.emplace_back(description);
- } else if (is_controller_service) {
- classes.controller_services_.emplace_back(description);
- } else {
- classes.other_components_.emplace_back(description);
- }
+ component->initialize();
+ description.class_properties_ = component->getProperties();
+ description.support_dynamic_ = component->supportsDynamicProperties();
+ if (is_processor) {
+ class_mappings[group].processors_.emplace_back(description);
+ } else if (is_controller_service) {
+ class_mappings[group].controller_services_.emplace_back(description);
+ } else {
+ class_mappings[group].other_components_.emplace_back(description);
}
}
}
}
- return classes;
+ return class_mappings[group];
}
-};
+}
+;
} /* namespace minifi */
} /* namespace nifi */
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1c1f53ba/libminifi/include/core/ClassLoader.h
----------------------------------------------------------------------
diff --git a/libminifi/include/core/ClassLoader.h b/libminifi/include/core/ClassLoader.h
index 6c17493..b1ecaf8 100644
--- a/libminifi/include/core/ClassLoader.h
+++ b/libminifi/include/core/ClassLoader.h
@@ -224,6 +224,27 @@ class ClassLoader {
std::lock_guard<std::mutex> lock(internal_mutex_);
loaded_factories_.insert(std::make_pair(name, std::move(factory)));
+
+ }
+
+ /**
+ * Register a class with the give ProcessorFactory
+ */
+ void registerClass(const std::string &group, const std::string &name, std::unique_ptr<ObjectFactory> factory) {
+ if (loaded_factories_.find(name) != loaded_factories_.end()) {
+ return;
+ }
+
+ std::lock_guard<std::mutex> lock(internal_mutex_);
+
+ module_mapping_[group].push_back(factory->getName());
+
+ loaded_factories_.insert(std::make_pair(name, std::move(factory)));
+ }
+
+ std::vector<std::string> getClasses(const std::string &group) {
+ std::lock_guard<std::mutex> lock(internal_mutex_);
+ return module_mapping_[group];
}
std::vector<std::string> getGroups() {
@@ -242,7 +263,7 @@ class ClassLoader {
if (nullptr != resource.second) {
auto classes = resource.second->getClassNames();
groups.insert(groups.end(), classes.begin(), classes.end());
- }else{
+ } else {
}
}
return groups;
@@ -286,6 +307,8 @@ class ClassLoader {
protected:
+ std::map<std::string, std::vector<std::string>> module_mapping_;
+
std::map<std::string, std::unique_ptr<ObjectFactory>> loaded_factories_;
std::mutex internal_mutex_;
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1c1f53ba/libminifi/include/core/Resource.h
----------------------------------------------------------------------
diff --git a/libminifi/include/core/Resource.h b/libminifi/include/core/Resource.h
index 8bb7c97..0dc6723 100644
--- a/libminifi/include/core/Resource.h
+++ b/libminifi/include/core/Resource.h
@@ -26,13 +26,22 @@ namespace nifi {
namespace minifi {
namespace core {
+
+#define MKSOC(x) #x
+#define MAKESTRING(x) MKSOC(x)
+
+
template<class T>
class StaticClassType {
public:
StaticClassType(const std::string &name) {
// Notify when the static member is created
- ClassLoader::getDefaultClassLoader().registerClass(name, std::unique_ptr<ObjectFactory>(new DefautObjectFactory<T>()));
+#ifdef MODULE_NAME
+ ClassLoader::getDefaultClassLoader().registerClass(MAKESTRING(MODULE_NAME), name, std::unique_ptr<ObjectFactory>(new DefautObjectFactory<T>()));
+#else
+ ClassLoader::getDefaultClassLoader().registerClass("default", name, std::unique_ptr<ObjectFactory>(new DefautObjectFactory<T>()));
+#endif
}
};
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1c1f53ba/libminifi/include/core/state/Value.h
----------------------------------------------------------------------
diff --git a/libminifi/include/core/state/Value.h b/libminifi/include/core/state/Value.h
index 5abe9a3..f4a92ad 100644
--- a/libminifi/include/core/state/Value.h
+++ b/libminifi/include/core/state/Value.h
@@ -194,12 +194,17 @@ class ValueNode {
struct SerializedResponseNode {
std::string name;
ValueNode value;
+ bool array;
+
+ SerializedResponseNode() : array(false){
+ }
std::vector<SerializedResponseNode> children;
SerializedResponseNode &operator=(const SerializedResponseNode &other) {
name = other.name;
value = other.value;
children = other.children;
+ array = other.array;
return *this;
}
};
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1c1f53ba/libminifi/include/core/state/nodes/AgentInformation.h
----------------------------------------------------------------------
diff --git a/libminifi/include/core/state/nodes/AgentInformation.h b/libminifi/include/core/state/nodes/AgentInformation.h
index 8ca8954..5797ed8 100644
--- a/libminifi/include/core/state/nodes/AgentInformation.h
+++ b/libminifi/include/core/state/nodes/AgentInformation.h
@@ -58,6 +58,160 @@ namespace response {
#define GROUP_STR "org::apache::nifi::minifi"
+
+class ComponentManifest : public DeviceInformation {
+ public:
+ ComponentManifest(std::string name, uuid_t uuid)
+ : DeviceInformation(name, uuid) {
+ }
+
+ ComponentManifest(const std::string &name)
+ : DeviceInformation(name, 0) {
+ }
+
+ std::string getName() const {
+ return CoreComponent::getName();
+ }
+
+ std::vector<SerializedResponseNode> serialize() {
+ std::vector<SerializedResponseNode> serialized;
+ SerializedResponseNode resp;
+ resp.name = "componentManifest";
+ struct Components group = BuildDescription::getClassDescriptions(getName());
+ serializeClassDescription(group.processors_, "processors", resp);
+ serializeClassDescription(group.controller_services_, "controllerServices", resp);
+ serialized.push_back(resp);
+ return serialized;
+ }
+ protected:
+
+ void serializeClassDescription(const std::vector<ClassDescription> &descriptions, const std::string name, SerializedResponseNode &response) {
+ if (!descriptions.empty()) {
+ SerializedResponseNode type;
+ type.name = name;
+ type.array = true;
+ std::vector<SerializedResponseNode> serialized;
+ for (auto group : descriptions) {
+
+ SerializedResponseNode desc;
+ desc.name = group.class_name_;
+
+ SerializedResponseNode bgroup;
+ bgroup.name = "group";
+ bgroup.value = GROUP_STR;
+ SerializedResponseNode artifact;
+ artifact.name = "artifact";
+ artifact.value = group.class_name_;
+
+ SerializedResponseNode className;
+ className.name = "type";
+ className.value = group.class_name_;
+
+ SerializedResponseNode version;
+ version.name = "version";
+ version.value = AgentBuild::VERSION;
+
+ if (!group.class_properties_.empty()) {
+ SerializedResponseNode props;
+ props.name = "propertyDescriptors";
+ for (auto && prop : group.class_properties_) {
+
+ SerializedResponseNode child;
+ child.name = prop.first;
+
+ SerializedResponseNode descriptorName;
+ descriptorName.name = "name";
+ descriptorName.value = prop.first;
+
+ SerializedResponseNode descriptorDescription;
+ descriptorDescription.name = "description";
+ descriptorDescription.value = prop.second.getDescription();
+
+ SerializedResponseNode descriptorRequired;
+ descriptorRequired.name = "required";
+ descriptorRequired.value = prop.second.getRequired();
+
+ SerializedResponseNode descriptorDependentProperties;
+ descriptorDependentProperties.name = "dependentProperties";
+
+ for (const auto &propName : prop.second.getDependentProperties()) {
+ SerializedResponseNode descriptorDependentProperty;
+ descriptorDependentProperty.name = propName;
+ descriptorDependentProperties.children.push_back(descriptorDependentProperty);
+ }
+
+ SerializedResponseNode descriptorExclusiveOfProperties;
+ descriptorExclusiveOfProperties.name = "exclusiveOfProperties";
+
+ for (const auto &exclusiveProp : prop.second.getExclusiveOfProperties()) {
+ SerializedResponseNode descriptorExclusiveOfProperty;
+ descriptorExclusiveOfProperty.name = exclusiveProp.first;
+ descriptorExclusiveOfProperty.value = exclusiveProp.second;
+ descriptorExclusiveOfProperties.children.push_back(descriptorExclusiveOfProperty);
+ }
+
+ child.children.push_back(descriptorName);
+ child.children.push_back(descriptorDescription);
+ child.children.push_back(descriptorRequired);
+ child.children.push_back(descriptorDependentProperties);
+ child.children.push_back(descriptorExclusiveOfProperties);
+
+ props.children.push_back(child);
+ }
+
+ desc.children.push_back(props);
+ }
+
+ SerializedResponseNode dyn_prop;
+ dyn_prop.name = "supportsDynamicProperties";
+ dyn_prop.value = group.support_dynamic_;
+
+ desc.children.push_back(dyn_prop);
+
+ desc.children.push_back(bgroup);
+ desc.children.push_back(artifact);
+ desc.children.push_back(className);
+ desc.children.push_back(version);
+
+ SerializedResponseNode buildInfo;
+ buildInfo.name = "buildInfo";
+
+ SerializedResponseNode build_version;
+ build_version.name = "version";
+ build_version.value = AgentBuild::VERSION;
+
+ SerializedResponseNode build_rev;
+ build_rev.name = "revision";
+ build_rev.value = AgentBuild::BUILD_REV;
+
+ SerializedResponseNode build_date;
+ build_date.name = "timestamp";
+ build_date.value = (uint64_t) std::stoull(AgentBuild::BUILD_DATE);
+
+ SerializedResponseNode compiler_command;
+ compiler_command.name = "compiler";
+ compiler_command.value = AgentBuild::COMPILER;
+
+ SerializedResponseNode compiler_flags;
+ compiler_flags.name = "flags";
+ compiler_flags.value = AgentBuild::COMPILER_FLAGS;
+
+ buildInfo.children.push_back(compiler_flags);
+ buildInfo.children.push_back(compiler_command);
+
+ buildInfo.children.push_back(build_version);
+ buildInfo.children.push_back(build_rev);
+ buildInfo.children.push_back(build_date);
+ desc.children.push_back(buildInfo);
+ type.children.push_back(desc);
+ }
+ response.children.push_back(type);
+ }
+
+ }
+};
+
+
class Bundles : public DeviceInformation {
public:
Bundles(std::string name, uuid_t uuid)
@@ -94,6 +248,12 @@ class Bundles : public DeviceInformation {
bundle.children.push_back(bgroup);
bundle.children.push_back(artifact);
bundle.children.push_back(version);
+
+ ComponentManifest compMan(group, nullptr);
+ // serialize the component information.
+ for (auto component : compMan.serialize()) {
+ bundle.children.push_back(component);
+ }
serialized.push_back(bundle);
}
@@ -192,7 +352,7 @@ class AgentStatus : public StateMonitorNode {
class AgentIdentifier {
public:
- AgentIdentifier(){
+ AgentIdentifier() {
}
@@ -200,7 +360,7 @@ class AgentIdentifier {
identifier_ = identifier;
}
- void setAgentClass(const std::string &agentClass){
+ void setAgentClass(const std::string &agentClass) {
agent_class_ = agentClass;
}
@@ -231,151 +391,6 @@ class AgentMonitor {
std::shared_ptr<state::StateMonitor> monitor_;
};
-class ComponentManifest : public DeviceInformation {
- public:
- ComponentManifest(std::string name, uuid_t uuid)
- : DeviceInformation(name, uuid) {
- }
-
- ComponentManifest(const std::string &name)
- : DeviceInformation(name, 0) {
- }
-
- std::string getName() const {
- return "componentManifest";
- }
-
- std::vector<SerializedResponseNode> serialize() {
- std::vector<SerializedResponseNode> serialized;
- struct Components group = BuildDescription::getClassDescriptions();
- serializeClassDescription(group.processors_, "processors", serialized);
- serializeClassDescription(group.controller_services_, "controllerServices", serialized);
- return serialized;
- }
- protected:
-
- void serializeClassDescription(const std::vector<ClassDescription> &descriptions, const std::string name, std::vector<SerializedResponseNode> &response) {
- SerializedResponseNode resp;
- resp.name = " resp";
- if (!descriptions.empty()) {
-
- SerializedResponseNode type;
- type.name = name;
-
- for (auto group : descriptions) {
-
- SerializedResponseNode desc;
- desc.name = group.class_name_;
-
- SerializedResponseNode bgroup;
- bgroup.name = "group";
- bgroup.value = GROUP_STR;
- SerializedResponseNode artifact;
- artifact.name = "artifact";
- artifact.value = group.class_name_;
- SerializedResponseNode version;
- version.name = "version";
- version.value = AgentBuild::VERSION;
-
- if (!group.class_properties_.empty()) {
- SerializedResponseNode props;
- props.name = "propertyDescriptors";
- for (auto && prop : group.class_properties_) {
-
- SerializedResponseNode child;
- child.name = prop.first;
-
- SerializedResponseNode descriptorName;
- descriptorName.name = "name";
- descriptorName.value = prop.first;
-
- SerializedResponseNode descriptorDescription;
- descriptorDescription.name = "description";
- descriptorDescription.value = prop.second.getDescription();
-
- SerializedResponseNode descriptorRequired;
- descriptorRequired.name = "required";
- descriptorRequired.value = prop.second.getRequired();
-
- SerializedResponseNode descriptorDependentProperties;
- descriptorDependentProperties.name = "dependentProperties";
-
- for (const auto &propName : prop.second.getDependentProperties()) {
- SerializedResponseNode descriptorDependentProperty;
- descriptorDependentProperty.name = propName;
- descriptorDependentProperties.children.push_back(descriptorDependentProperty);
- }
-
- SerializedResponseNode descriptorExclusiveOfProperties;
- descriptorExclusiveOfProperties.name = "exclusiveOfProperties";
-
- for (const auto &exclusiveProp : prop.second.getExclusiveOfProperties()) {
- SerializedResponseNode descriptorExclusiveOfProperty;
- descriptorExclusiveOfProperty.name = exclusiveProp.first;
- descriptorExclusiveOfProperty.value = exclusiveProp.second;
- descriptorExclusiveOfProperties.children.push_back(descriptorExclusiveOfProperty);
- }
-
- child.children.push_back(descriptorName);
- child.children.push_back(descriptorDescription);
- child.children.push_back(descriptorRequired);
- child.children.push_back(descriptorDependentProperties);
- child.children.push_back(descriptorExclusiveOfProperties);
-
- props.children.push_back(child);
- }
-
- desc.children.push_back(props);
- }
-
- SerializedResponseNode dyn_prop;
- dyn_prop.name = "supportsDynamicProperties";
- dyn_prop.value = group.support_dynamic_;
-
- desc.children.push_back(dyn_prop);
-
- desc.children.push_back(bgroup);
- desc.children.push_back(artifact);
- desc.children.push_back(version);
-
- SerializedResponseNode buildInfo;
- buildInfo.name = "buildInfo";
-
- SerializedResponseNode build_version;
- build_version.name = "version";
- build_version.value = AgentBuild::VERSION;
-
- SerializedResponseNode build_rev;
- build_rev.name = "revision";
- build_rev.value = AgentBuild::BUILD_REV;
-
- SerializedResponseNode build_date;
- build_date.name = "timestamp";
- build_date.value = (uint64_t)std::stoull(AgentBuild::BUILD_DATE);
-
- SerializedResponseNode compiler_command;
- compiler_command.name = "compiler";
- compiler_command.value = AgentBuild::COMPILER;
-
- SerializedResponseNode compiler_flags;
- compiler_flags.name = "flags";
- compiler_flags.value = AgentBuild::COMPILER_FLAGS;
-
- buildInfo.children.push_back(compiler_flags);
- buildInfo.children.push_back(compiler_command);
-
- buildInfo.children.push_back(build_version);
- buildInfo.children.push_back(build_rev);
- buildInfo.children.push_back(build_date);
- desc.children.push_back(buildInfo);
- type.children.push_back(desc);
- }
- resp.children.push_back(type);
- }
- response.push_back(resp);
-
- }
-};
/**
* Justification and Purpose: Provides available extensions for the agent information block.
@@ -428,7 +443,7 @@ class AgentManifest : public DeviceInformation {
SerializedResponseNode build_date;
build_date.name = "timestamp";
- build_date.value = (uint64_t)std::stoull(AgentBuild::BUILD_DATE);
+ build_date.value = (uint64_t) std::stoull(AgentBuild::BUILD_DATE);
SerializedResponseNode compiler_command;
compiler_command.name = "compiler";
@@ -455,7 +470,7 @@ class AgentManifest : public DeviceInformation {
serialized.push_back(bundle);
}
- ComponentManifest compMan("componentManifest", nullptr);
+ ComponentManifest compMan("default", nullptr);
// serialize the component information.
for (auto component : compMan.serialize()) {
serialized.push_back(component);
@@ -473,10 +488,12 @@ class AgentInformation : public DeviceInformation, public AgentMonitor, public A
AgentInformation(std::string name, uuid_t uuid)
: DeviceInformation(name, uuid) {
+ setArray(false);
}
AgentInformation(const std::string &name)
: DeviceInformation(name, 0) {
+ setArray(false);
}
std::string getName() const {
@@ -525,7 +542,7 @@ class AgentInformation : public DeviceInformation, public AgentMonitor, public A
void serializeClass(const std::vector<ClassDescription> &processors, const std::vector<ClassDescription> &controller_services, const std::vector<ClassDescription> &other_components,
std::vector<SerializedResponseNode> &response) {
SerializedResponseNode resp;
- resp.name = " resp";
+ resp.name = "componentManifest";
if (!processors.empty()) {
SerializedResponseNode type;
type.name = "Processors";
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1c1f53ba/libminifi/include/core/state/nodes/MetricsBase.h
----------------------------------------------------------------------
diff --git a/libminifi/include/core/state/nodes/MetricsBase.h b/libminifi/include/core/state/nodes/MetricsBase.h
index 323b6cd..6e5aaf6 100644
--- a/libminifi/include/core/state/nodes/MetricsBase.h
+++ b/libminifi/include/core/state/nodes/MetricsBase.h
@@ -51,7 +51,6 @@ class ResponseNode : public core::Connectable {
virtual ~ResponseNode() {
}
- virtual std::string getName() const = 0;
virtual std::vector<SerializedResponseNode> serialize() = 0;
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1c1f53ba/libminifi/src/c2/C2Agent.cpp
----------------------------------------------------------------------
diff --git a/libminifi/src/c2/C2Agent.cpp b/libminifi/src/c2/C2Agent.cpp
index cb7e0f4..2514906 100644
--- a/libminifi/src/c2/C2Agent.cpp
+++ b/libminifi/src/c2/C2Agent.cpp
@@ -269,6 +269,9 @@ void C2Agent::serializeMetrics(C2Payload &metric_payload, const std::string &nam
for (auto metric : metrics) {
if (metric.children.size() > 0) {
C2Payload child_metric_payload(metric_payload.getOperation());
+ if (metric.array) {
+ child_metric_payload.setContainer(true);
+ }
child_metric_payload.setLabel(metric.name);
serializeMetrics(child_metric_payload, metric.name, metric.children, is_container);
metric_payload.addPayload(std::move(child_metric_payload));
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1c1f53ba/libminifi/test/unit/PropertyValidationAgentInfoTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/PropertyValidationAgentInfoTests.cpp b/libminifi/test/unit/PropertyValidationAgentInfoTests.cpp
index a7b297d..61fc95f 100644
--- a/libminifi/test/unit/PropertyValidationAgentInfoTests.cpp
+++ b/libminifi/test/unit/PropertyValidationAgentInfoTests.cpp
@@ -26,7 +26,7 @@
#include "core/ClassLoader.h"
TEST_CASE("Test Required", "[required]") {
- minifi::state::response::ComponentManifest manifest("PutFile");
+ minifi::state::response::ComponentManifest manifest("default");
auto serialized = manifest.serialize();
REQUIRE(serialized.size() > 0);
const auto &resp = serialized[0];
@@ -45,7 +45,7 @@ TEST_CASE("Test Required", "[required]") {
}
TEST_CASE("Test Dependent", "[dependent]") {
- minifi::state::response::ComponentManifest manifest("manifest");
+ minifi::state::response::ComponentManifest manifest("default");
auto serialized = manifest.serialize();
REQUIRE(serialized.size() > 0);
const auto &resp = serialized[0];