MINIFI-68 Adding yaml-cpp source and updating LICENSE to reflect its inclusion.
Adding a Makefile for yaml-cpp and incorporating its library build as part of the overall process. Providing parsing of config.yml to establish a processing graph as well as providing configuration for FlowController to handle XML and YAML. Ignoring SIGPIPE signal. Adjusting Makefile to correct assembly packages not being generated. Providing includes for yaml-cpp build Makefile and having top level Makefile build libuuid regardless. Removing generated tst_uuid binary from uuid thirdprty dependency. Adding Google Test LICENSE information as it is bundled with yaml-cpp 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/63d2358d Tree: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/tree/63d2358d Diff: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/diff/63d2358d Branch: refs/heads/master Commit: 63d2358d3a37dcd44415ae764c028f72f64355e3 Parents: b3848a3 Author: Aldrin Piri <[email protected]> Authored: Thu Jul 14 09:13:34 2016 -0700 Committer: Aldrin Piri <[email protected]> Committed: Wed Aug 3 09:07:39 2016 -0400 ---------------------------------------------------------------------- .gitignore | 2 + LICENSE | 31 + Makefile | 90 +- README.md | 2 +- conf/flow.yml | 55 + conf/flowGetFile.xml | 2 +- conf/flowTailFile.xml | 2 +- conf/flowTest.xml | 131 +- conf/minifi.properties | 191 + conf/nifi.properties | 191 - inc/FlowController.h | 40 +- inc/ProcessGroup.h | 2 + main/MiNiFiMain.cpp | 72 +- src/FlowController.cpp | 985 +- src/ProcessGroup.cpp | 23 + src/ProcessSession.cpp | 6 +- src/Processor.cpp | 4 +- thirdparty/uuid/libuuid.a | Bin 1172996 -> 0 bytes thirdparty/uuid/tst_uuid | Bin 29660 -> 0 bytes .../yaml-cpp-yaml-cpp-0.5.3/.clang-format | 47 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/.gitignore | 1 + .../yaml-cpp-yaml-cpp-0.5.3/CMakeLists.txt | 340 + .../yaml-cpp-yaml-cpp-0.5.3/CONTRIBUTING.md | 17 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/LICENSE | 19 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/Makefile | 40 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/README.md | 52 + .../include/yaml-cpp/anchor.h | 17 + .../include/yaml-cpp/binary.h | 67 + .../include/yaml-cpp/contrib/anchordict.h | 37 + .../include/yaml-cpp/contrib/graphbuilder.h | 147 + .../include/yaml-cpp/dll.h | 37 + .../include/yaml-cpp/emitfromevents.h | 57 + .../include/yaml-cpp/emitter.h | 254 + .../include/yaml-cpp/emitterdef.h | 16 + .../include/yaml-cpp/emittermanip.h | 137 + .../include/yaml-cpp/emitterstyle.h | 16 + .../include/yaml-cpp/eventhandler.h | 40 + .../include/yaml-cpp/exceptions.h | 231 + .../include/yaml-cpp/mark.h | 29 + .../include/yaml-cpp/node/convert.h | 297 + .../include/yaml-cpp/node/detail/bool_type.h | 26 + .../include/yaml-cpp/node/detail/impl.h | 177 + .../include/yaml-cpp/node/detail/iterator.h | 65 + .../include/yaml-cpp/node/detail/iterator_fwd.h | 28 + .../include/yaml-cpp/node/detail/memory.h | 46 + .../include/yaml-cpp/node/detail/node.h | 170 + .../include/yaml-cpp/node/detail/node_data.h | 127 + .../yaml-cpp/node/detail/node_iterator.h | 159 + .../include/yaml-cpp/node/detail/node_ref.h | 97 + .../include/yaml-cpp/node/emit.h | 25 + .../include/yaml-cpp/node/impl.h | 448 + .../include/yaml-cpp/node/iterator.h | 31 + .../include/yaml-cpp/node/node.h | 145 + .../include/yaml-cpp/node/parse.h | 30 + .../include/yaml-cpp/node/ptr.h | 29 + .../include/yaml-cpp/node/type.h | 16 + .../include/yaml-cpp/noncopyable.h | 25 + .../include/yaml-cpp/null.h | 24 + .../include/yaml-cpp/ostream_wrapper.h | 72 + .../include/yaml-cpp/parser.h | 48 + .../include/yaml-cpp/stlemitter.h | 51 + .../include/yaml-cpp/traits.h | 103 + .../include/yaml-cpp/yaml.h | 24 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/install.txt | 24 + .../yaml-cpp-yaml-cpp-0.5.3/src/binary.cpp | 93 + .../src/collectionstack.h | 39 + .../src/contrib/graphbuilder.cpp | 17 + .../src/contrib/graphbuilderadapter.cpp | 94 + .../src/contrib/graphbuilderadapter.h | 79 + .../yaml-cpp-yaml-cpp-0.5.3/src/convert.cpp | 75 + .../yaml-cpp-yaml-cpp-0.5.3/src/directives.cpp | 22 + .../yaml-cpp-yaml-cpp-0.5.3/src/directives.h | 29 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/emit.cpp | 25 + .../src/emitfromevents.cpp | 119 + .../yaml-cpp-yaml-cpp-0.5.3/src/emitter.cpp | 911 + .../src/emitterstate.cpp | 350 + .../yaml-cpp-yaml-cpp-0.5.3/src/emitterstate.h | 203 + .../src/emitterutils.cpp | 484 + .../yaml-cpp-yaml-cpp-0.5.3/src/emitterutils.h | 50 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/exp.cpp | 136 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/exp.h | 209 + .../yaml-cpp-yaml-cpp-0.5.3/src/indentation.h | 41 + .../yaml-cpp-yaml-cpp-0.5.3/src/memory.cpp | 26 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/node.cpp | 12 + .../yaml-cpp-yaml-cpp-0.5.3/src/node_data.cpp | 301 + .../yaml-cpp-yaml-cpp-0.5.3/src/nodebuilder.cpp | 131 + .../yaml-cpp-yaml-cpp-0.5.3/src/nodebuilder.h | 70 + .../yaml-cpp-yaml-cpp-0.5.3/src/nodeevents.cpp | 101 + .../yaml-cpp-yaml-cpp-0.5.3/src/nodeevents.h | 64 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/null.cpp | 5 + .../src/ostream_wrapper.cpp | 57 + .../yaml-cpp-yaml-cpp-0.5.3/src/parse.cpp | 68 + .../yaml-cpp-yaml-cpp-0.5.3/src/parser.cpp | 128 + .../yaml-cpp-yaml-cpp-0.5.3/src/ptr_stack.h | 53 + .../yaml-cpp-yaml-cpp-0.5.3/src/ptr_vector.h | 49 + .../yaml-cpp-yaml-cpp-0.5.3/src/regex_yaml.cpp | 45 + .../yaml-cpp-yaml-cpp-0.5.3/src/regex_yaml.h | 85 + .../yaml-cpp-yaml-cpp-0.5.3/src/regeximpl.h | 186 + .../yaml-cpp-yaml-cpp-0.5.3/src/scanner.cpp | 386 + .../yaml-cpp-yaml-cpp-0.5.3/src/scanner.h | 135 + .../yaml-cpp-yaml-cpp-0.5.3/src/scanscalar.cpp | 221 + .../yaml-cpp-yaml-cpp-0.5.3/src/scanscalar.h | 61 + .../yaml-cpp-yaml-cpp-0.5.3/src/scantag.cpp | 81 + .../yaml-cpp-yaml-cpp-0.5.3/src/scantag.h | 19 + .../yaml-cpp-yaml-cpp-0.5.3/src/scantoken.cpp | 436 + .../yaml-cpp-yaml-cpp-0.5.3/src/setting.h | 99 + .../yaml-cpp-yaml-cpp-0.5.3/src/simplekey.cpp | 128 + .../src/singledocparser.cpp | 413 + .../src/singledocparser.h | 65 + .../yaml-cpp-yaml-cpp-0.5.3/src/stream.cpp | 448 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/stream.h | 76 + .../src/streamcharsource.h | 48 + .../yaml-cpp-yaml-cpp-0.5.3/src/stringsource.h | 48 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/tag.cpp | 49 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/tag.h | 33 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/token.h | 69 + .../yaml-cpp-yaml-cpp-0.5.3/test/CMakeLists.txt | 34 + .../test/create-emitter-tests.py | 211 + .../test/gmock-1.7.0/CHANGES | 126 + .../test/gmock-1.7.0/CMakeLists.txt | 171 + .../test/gmock-1.7.0/CONTRIBUTORS | 40 + .../test/gmock-1.7.0/LICENSE | 28 + .../test/gmock-1.7.0/Makefile.am | 216 + .../test/gmock-1.7.0/Makefile.in | 1357 ++ .../test/gmock-1.7.0/README | 369 + .../test/gmock-1.7.0/aclocal.m4 | 9799 ++++++++ .../test/gmock-1.7.0/build-aux/config.guess | 1530 ++ .../test/gmock-1.7.0/build-aux/config.h.in | 69 + .../test/gmock-1.7.0/build-aux/config.sub | 1773 ++ .../test/gmock-1.7.0/build-aux/depcomp | 688 + .../test/gmock-1.7.0/build-aux/install-sh | 527 + .../test/gmock-1.7.0/build-aux/ltmain.sh | 9661 ++++++++ .../test/gmock-1.7.0/build-aux/missing | 331 + .../test/gmock-1.7.0/configure | 18535 +++++++++++++++ .../test/gmock-1.7.0/configure.ac | 146 + .../gmock-1.7.0/fused-src/gmock-gtest-all.cc | 11443 ++++++++++ .../test/gmock-1.7.0/fused-src/gmock/gmock.h | 14198 ++++++++++++ .../test/gmock-1.7.0/fused-src/gmock_main.cc | 54 + .../test/gmock-1.7.0/fused-src/gtest/gtest.h | 20061 +++++++++++++++++ .../test/gmock-1.7.0/gtest/CHANGES | 157 + .../test/gmock-1.7.0/gtest/CMakeLists.txt | 252 + .../test/gmock-1.7.0/gtest/CONTRIBUTORS | 37 + .../test/gmock-1.7.0/gtest/LICENSE | 28 + .../test/gmock-1.7.0/gtest/Makefile.am | 306 + .../test/gmock-1.7.0/gtest/Makefile.in | 1360 ++ .../test/gmock-1.7.0/gtest/README | 435 + .../test/gmock-1.7.0/gtest/aclocal.m4 | 1198 + .../gmock-1.7.0/gtest/build-aux/config.guess | 1530 ++ .../gmock-1.7.0/gtest/build-aux/config.h.in | 69 + .../test/gmock-1.7.0/gtest/build-aux/config.sub | 1773 ++ .../test/gmock-1.7.0/gtest/build-aux/depcomp | 688 + .../test/gmock-1.7.0/gtest/build-aux/install-sh | 527 + .../test/gmock-1.7.0/gtest/build-aux/ltmain.sh | 9661 ++++++++ .../test/gmock-1.7.0/gtest/build-aux/missing | 331 + .../gtest/cmake/internal_utils.cmake | 227 + .../gmock-1.7.0/gtest/codegear/gtest.cbproj | 138 + .../gmock-1.7.0/gtest/codegear/gtest.groupproj | 54 + .../gmock-1.7.0/gtest/codegear/gtest_all.cc | 38 + .../gmock-1.7.0/gtest/codegear/gtest_link.cc | 40 + .../gtest/codegear/gtest_main.cbproj | 82 + .../gtest/codegear/gtest_unittest.cbproj | 88 + .../test/gmock-1.7.0/gtest/configure | 18222 +++++++++++++++ .../test/gmock-1.7.0/gtest/configure.ac | 68 + .../gtest/fused-src/gtest/gtest-all.cc | 9592 ++++++++ .../gmock-1.7.0/gtest/fused-src/gtest/gtest.h | 20061 +++++++++++++++++ .../gtest/fused-src/gtest/gtest_main.cc | 38 + .../gtest/include/gtest/gtest-death-test.h | 294 + .../gtest/include/gtest/gtest-message.h | 250 + .../gtest/include/gtest/gtest-param-test.h | 1421 ++ .../gtest/include/gtest/gtest-param-test.h.pump | 487 + .../gtest/include/gtest/gtest-printers.h | 855 + .../gmock-1.7.0/gtest/include/gtest/gtest-spi.h | 232 + .../gtest/include/gtest/gtest-test-part.h | 179 + .../gtest/include/gtest/gtest-typed-test.h | 259 + .../gmock-1.7.0/gtest/include/gtest/gtest.h | 2291 ++ .../gtest/include/gtest/gtest_pred_impl.h | 358 + .../gtest/include/gtest/gtest_prod.h | 58 + .../gtest/internal/gtest-death-test-internal.h | 319 + .../include/gtest/internal/gtest-filepath.h | 206 + .../include/gtest/internal/gtest-internal.h | 1158 + .../include/gtest/internal/gtest-linked_ptr.h | 233 + .../gtest/internal/gtest-param-util-generated.h | 5143 +++++ .../internal/gtest-param-util-generated.h.pump | 301 + .../include/gtest/internal/gtest-param-util.h | 619 + .../gtest/include/gtest/internal/gtest-port.h | 1947 ++ .../gtest/include/gtest/internal/gtest-string.h | 167 + .../gtest/include/gtest/internal/gtest-tuple.h | 1012 + .../include/gtest/internal/gtest-tuple.h.pump | 339 + .../include/gtest/internal/gtest-type-util.h | 3331 +++ .../gtest/internal/gtest-type-util.h.pump | 297 + .../test/gmock-1.7.0/gtest/m4/acx_pthread.m4 | 363 + .../test/gmock-1.7.0/gtest/m4/gtest.m4 | 74 + .../test/gmock-1.7.0/gtest/m4/libtool.m4 | 8001 +++++++ .../test/gmock-1.7.0/gtest/m4/ltoptions.m4 | 384 + .../test/gmock-1.7.0/gtest/m4/ltsugar.m4 | 123 + .../test/gmock-1.7.0/gtest/m4/ltversion.m4 | 23 + .../test/gmock-1.7.0/gtest/m4/lt~obsolete.m4 | 98 + .../test/gmock-1.7.0/gtest/make/Makefile | 82 + .../test/gmock-1.7.0/gtest/msvc/gtest-md.sln | 45 + .../test/gmock-1.7.0/gtest/msvc/gtest-md.vcproj | 126 + .../test/gmock-1.7.0/gtest/msvc/gtest.sln | 45 + .../test/gmock-1.7.0/gtest/msvc/gtest.vcproj | 126 + .../gmock-1.7.0/gtest/msvc/gtest_main-md.vcproj | 129 + .../gmock-1.7.0/gtest/msvc/gtest_main.vcproj | 129 + .../gtest/msvc/gtest_prod_test-md.vcproj | 164 + .../gtest/msvc/gtest_prod_test.vcproj | 164 + .../gtest/msvc/gtest_unittest-md.vcproj | 147 + .../gtest/msvc/gtest_unittest.vcproj | 147 + .../gmock-1.7.0/gtest/samples/prime_tables.h | 123 + .../test/gmock-1.7.0/gtest/samples/sample1.cc | 68 + .../test/gmock-1.7.0/gtest/samples/sample1.h | 43 + .../gtest/samples/sample10_unittest.cc | 144 + .../gtest/samples/sample1_unittest.cc | 153 + .../test/gmock-1.7.0/gtest/samples/sample2.cc | 56 + .../test/gmock-1.7.0/gtest/samples/sample2.h | 85 + .../gtest/samples/sample2_unittest.cc | 109 + .../gmock-1.7.0/gtest/samples/sample3-inl.h | 172 + .../gtest/samples/sample3_unittest.cc | 151 + .../test/gmock-1.7.0/gtest/samples/sample4.cc | 46 + .../test/gmock-1.7.0/gtest/samples/sample4.h | 53 + .../gtest/samples/sample4_unittest.cc | 45 + .../gtest/samples/sample5_unittest.cc | 199 + .../gtest/samples/sample6_unittest.cc | 224 + .../gtest/samples/sample7_unittest.cc | 130 + .../gtest/samples/sample8_unittest.cc | 173 + .../gtest/samples/sample9_unittest.cc | 160 + .../gtest/scripts/fuse_gtest_files.py | 250 + .../gtest/scripts/gen_gtest_pred_impl.py | 730 + .../gmock-1.7.0/gtest/scripts/gtest-config.in | 274 + .../test/gmock-1.7.0/gtest/scripts/pump.py | 855 + .../gmock-1.7.0/gtest/scripts/test/Makefile | 59 + .../test/gmock-1.7.0/gtest/src/gtest-all.cc | 48 + .../gmock-1.7.0/gtest/src/gtest-death-test.cc | 1344 ++ .../gmock-1.7.0/gtest/src/gtest-filepath.cc | 382 + .../gmock-1.7.0/gtest/src/gtest-internal-inl.h | 1218 + .../test/gmock-1.7.0/gtest/src/gtest-port.cc | 805 + .../gmock-1.7.0/gtest/src/gtest-printers.cc | 363 + .../gmock-1.7.0/gtest/src/gtest-test-part.cc | 110 + .../gmock-1.7.0/gtest/src/gtest-typed-test.cc | 110 + .../test/gmock-1.7.0/gtest/src/gtest.cc | 5015 ++++ .../test/gmock-1.7.0/gtest/src/gtest_main.cc | 38 + .../gtest/test/gtest-death-test_ex_test.cc | 93 + .../gtest/test/gtest-death-test_test.cc | 1367 ++ .../gtest/test/gtest-filepath_test.cc | 680 + .../gtest/test/gtest-linked_ptr_test.cc | 154 + .../gtest/test/gtest-listener_test.cc | 310 + .../gtest/test/gtest-message_test.cc | 159 + .../gtest/test/gtest-options_test.cc | 215 + .../gtest/test/gtest-param-test2_test.cc | 65 + .../gtest/test/gtest-param-test_test.cc | 904 + .../gtest/test/gtest-param-test_test.h | 57 + .../gmock-1.7.0/gtest/test/gtest-port_test.cc | 1253 + .../gtest/test/gtest-printers_test.cc | 1566 ++ .../gtest/test/gtest-test-part_test.cc | 208 + .../gmock-1.7.0/gtest/test/gtest-tuple_test.cc | 320 + .../gtest/test/gtest-typed-test2_test.cc | 45 + .../gtest/test/gtest-typed-test_test.cc | 360 + .../gtest/test/gtest-typed-test_test.h | 66 + .../gtest/test/gtest-unittest-api_test.cc | 341 + .../gmock-1.7.0/gtest/test/gtest_all_test.cc | 47 + .../test/gtest_break_on_failure_unittest.py | 212 + .../test/gtest_break_on_failure_unittest_.cc | 88 + .../gtest/test/gtest_catch_exceptions_test.py | 237 + .../gtest/test/gtest_catch_exceptions_test_.cc | 311 + .../gmock-1.7.0/gtest/test/gtest_color_test.py | 130 + .../gmock-1.7.0/gtest/test/gtest_color_test_.cc | 71 + .../gtest/test/gtest_env_var_test.py | 103 + .../gtest/test/gtest_env_var_test_.cc | 126 + .../gtest/test/gtest_environment_test.cc | 192 + .../gtest/test/gtest_filter_unittest.py | 633 + .../gtest/test/gtest_filter_unittest_.cc | 140 + .../gmock-1.7.0/gtest/test/gtest_help_test.py | 172 + .../gmock-1.7.0/gtest/test/gtest_help_test_.cc | 46 + .../gtest/test/gtest_list_tests_unittest.py | 207 + .../gtest/test/gtest_list_tests_unittest_.cc | 157 + .../gtest/test/gtest_main_unittest.cc | 45 + .../gtest/test/gtest_no_test_unittest.cc | 56 + .../gmock-1.7.0/gtest/test/gtest_output_test.py | 335 + .../gtest/test/gtest_output_test_.cc | 1034 + .../gtest/test/gtest_output_test_golden_lin.txt | 720 + .../gtest/test/gtest_pred_impl_unittest.cc | 2427 ++ .../gtest/test/gtest_premature_exit_test.cc | 141 + .../gmock-1.7.0/gtest/test/gtest_prod_test.cc | 57 + .../gmock-1.7.0/gtest/test/gtest_repeat_test.cc | 253 + .../gtest/test/gtest_shuffle_test.py | 325 + .../gtest/test/gtest_shuffle_test_.cc | 103 + .../gtest/test/gtest_sole_header_test.cc | 57 + .../gmock-1.7.0/gtest/test/gtest_stress_test.cc | 256 + .../gmock-1.7.0/gtest/test/gtest_test_utils.py | 320 + .../test/gtest_throw_on_failure_ex_test.cc | 92 + .../gtest/test/gtest_throw_on_failure_test.py | 171 + .../gtest/test/gtest_throw_on_failure_test_.cc | 72 + .../gtest/test/gtest_uninitialized_test.py | 70 + .../gtest/test/gtest_uninitialized_test_.cc | 43 + .../gmock-1.7.0/gtest/test/gtest_unittest.cc | 7415 ++++++ .../gtest/test/gtest_xml_outfile1_test_.cc | 49 + .../gtest/test/gtest_xml_outfile2_test_.cc | 49 + .../gtest/test/gtest_xml_outfiles_test.py | 132 + .../gtest/test/gtest_xml_output_unittest.py | 307 + .../gtest/test/gtest_xml_output_unittest_.cc | 181 + .../gtest/test/gtest_xml_test_utils.py | 194 + .../test/gmock-1.7.0/gtest/test/production.cc | 36 + .../test/gmock-1.7.0/gtest/test/production.h | 55 + .../gtest/xcode/Config/DebugProject.xcconfig | 30 + .../gtest/xcode/Config/FrameworkTarget.xcconfig | 17 + .../gtest/xcode/Config/General.xcconfig | 41 + .../gtest/xcode/Config/ReleaseProject.xcconfig | 32 + .../xcode/Config/StaticLibraryTarget.xcconfig | 18 + .../gtest/xcode/Config/TestTarget.xcconfig | 8 + .../gtest/xcode/Resources/Info.plist | 30 + .../xcode/Samples/FrameworkSample/Info.plist | 28 + .../WidgetFramework.xcodeproj/project.pbxproj | 457 + .../xcode/Samples/FrameworkSample/runtests.sh | 62 + .../xcode/Samples/FrameworkSample/widget.cc | 63 + .../xcode/Samples/FrameworkSample/widget.h | 59 + .../Samples/FrameworkSample/widget_test.cc | 68 + .../gmock-1.7.0/gtest/xcode/Scripts/runtests.sh | 65 + .../gtest/xcode/Scripts/versiongenerate.py | 100 + .../gtest/xcode/gtest.xcodeproj/project.pbxproj | 1135 + .../gmock-1.7.0/include/gmock/gmock-actions.h | 1078 + .../include/gmock/gmock-cardinalities.h | 147 + .../include/gmock/gmock-generated-actions.h | 2415 ++ .../gmock/gmock-generated-actions.h.pump | 821 + .../gmock/gmock-generated-function-mockers.h | 991 + .../gmock-generated-function-mockers.h.pump | 265 + .../include/gmock/gmock-generated-matchers.h | 2190 ++ .../gmock/gmock-generated-matchers.h.pump | 674 + .../include/gmock/gmock-generated-nice-strict.h | 397 + .../gmock/gmock-generated-nice-strict.h.pump | 161 + .../gmock-1.7.0/include/gmock/gmock-matchers.h | 3986 ++++ .../include/gmock/gmock-more-actions.h | 233 + .../include/gmock/gmock-more-matchers.h | 58 + .../include/gmock/gmock-spec-builders.h | 1791 ++ .../test/gmock-1.7.0/include/gmock/gmock.h | 94 + .../internal/gmock-generated-internal-utils.h | 279 + .../gmock-generated-internal-utils.h.pump | 136 + .../gmock/internal/gmock-internal-utils.h | 498 + .../include/gmock/internal/gmock-port.h | 78 + .../test/gmock-1.7.0/make/Makefile | 101 + .../test/gmock-1.7.0/msvc/2005/gmock.sln | 32 + .../test/gmock-1.7.0/msvc/2005/gmock.vcproj | 191 + .../gmock-1.7.0/msvc/2005/gmock_config.vsprops | 15 + .../gmock-1.7.0/msvc/2005/gmock_main.vcproj | 187 + .../gmock-1.7.0/msvc/2005/gmock_test.vcproj | 201 + .../test/gmock-1.7.0/msvc/2010/gmock.sln | 32 + .../test/gmock-1.7.0/msvc/2010/gmock.vcxproj | 82 + .../gmock-1.7.0/msvc/2010/gmock_config.props | 19 + .../gmock-1.7.0/msvc/2010/gmock_main.vcxproj | 88 + .../gmock-1.7.0/msvc/2010/gmock_test.vcxproj | 101 + .../gmock-1.7.0/scripts/fuse_gmock_files.py | 240 + .../test/gmock-1.7.0/scripts/generator/LICENSE | 203 + .../test/gmock-1.7.0/scripts/generator/README | 35 + .../scripts/generator/README.cppclean | 115 + .../scripts/generator/cpp/__init__.py | 0 .../gmock-1.7.0/scripts/generator/cpp/ast.py | 1723 ++ .../scripts/generator/cpp/gmock_class.py | 226 + .../scripts/generator/cpp/keywords.py | 59 + .../scripts/generator/cpp/tokenize.py | 287 + .../gmock-1.7.0/scripts/generator/cpp/utils.py | 41 + .../gmock-1.7.0/scripts/generator/gmock_gen.py | 31 + .../test/gmock-1.7.0/scripts/gmock-config.in | 303 + .../test/gmock-1.7.0/src/gmock-all.cc | 47 + .../test/gmock-1.7.0/src/gmock-cardinalities.cc | 156 + .../gmock-1.7.0/src/gmock-internal-utils.cc | 174 + .../test/gmock-1.7.0/src/gmock-matchers.cc | 498 + .../test/gmock-1.7.0/src/gmock-spec-builders.cc | 813 + .../test/gmock-1.7.0/src/gmock.cc | 182 + .../test/gmock-1.7.0/src/gmock_main.cc | 54 + .../test/gmock-1.7.0/test/gmock-actions_test.cc | 1256 ++ .../test/gmock-cardinalities_test.cc | 428 + .../test/gmock-generated-actions_test.cc | 1225 + .../gmock-generated-function-mockers_test.cc | 588 + .../test/gmock-generated-internal-utils_test.cc | 127 + .../test/gmock-generated-matchers_test.cc | 1289 ++ .../test/gmock-internal-utils_test.cc | 649 + .../gmock-1.7.0/test/gmock-matchers_test.cc | 5247 +++++ .../gmock-1.7.0/test/gmock-more-actions_test.cc | 705 + .../gmock-1.7.0/test/gmock-nice-strict_test.cc | 424 + .../test/gmock-1.7.0/test/gmock-port_test.cc | 43 + .../test/gmock-spec-builders_test.cc | 2613 +++ .../test/gmock-1.7.0/test/gmock_all_test.cc | 48 + .../test/gmock-1.7.0/test/gmock_ex_test.cc | 78 + .../test/gmock-1.7.0/test/gmock_leak_test.py | 108 + .../test/gmock-1.7.0/test/gmock_leak_test_.cc | 100 + .../test/gmock-1.7.0/test/gmock_link2_test.cc | 40 + .../test/gmock-1.7.0/test/gmock_link_test.cc | 40 + .../test/gmock-1.7.0/test/gmock_link_test.h | 669 + .../test/gmock-1.7.0/test/gmock_output_test.py | 180 + .../test/gmock-1.7.0/test/gmock_output_test_.cc | 291 + .../test/gmock_output_test_golden.txt | 310 + .../test/gmock-1.7.0/test/gmock_stress_test.cc | 322 + .../test/gmock-1.7.0/test/gmock_test.cc | 255 + .../test/gmock-1.7.0/test/gmock_test_utils.py | 112 + .../yaml-cpp-yaml-cpp-0.5.3/test/handler_test.h | 32 + .../test/integration/emitter_test.cpp | 1024 + .../test/integration/encoding_test.cpp | 182 + .../test/integration/gen_emitter_test.cpp | 9759 ++++++++ .../test/integration/handler_spec_test.cpp | 1611 ++ .../test/integration/handler_test.cpp | 46 + .../test/integration/load_node_test.cpp | 202 + .../test/integration/node_spec_test.cpp | 1131 + .../yaml-cpp-yaml-cpp-0.5.3/test/main.cpp | 6 + .../test/mock_event_handler.h | 26 + .../test/node/node_test.cpp | 474 + .../test/ostream_wrapper_test.cpp | 66 + .../yaml-cpp-yaml-cpp-0.5.3/test/specexamples.h | 846 + .../yaml-cpp-yaml-cpp-0.5.3/util/CMakeLists.txt | 11 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/util/api.cpp | 137 + .../yaml-cpp-yaml-cpp-0.5.3/util/parse.cpp | 61 + .../yaml-cpp-yaml-cpp-0.5.3/util/read.cpp | 33 + .../yaml-cpp-yaml-cpp-0.5.3/util/sandbox.cpp | 36 + .../yaml-cpp-config-version.cmake.in | 11 + .../yaml-cpp-config.cmake.in | 14 + .../yaml-cpp-yaml-cpp-0.5.3/yaml-cpp.pc.cmake | 11 + 414 files changed, 300136 insertions(+), 618 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/.gitignore ---------------------------------------------------------------------- diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c7dcff2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# Filter out generated files from the included libuuid +thirdparty/uuid/tst_uuid* http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/LICENSE ---------------------------------------------------------------------- diff --git a/LICENSE b/LICENSE index f1b29f3..4b01250 100644 --- a/LICENSE +++ b/LICENSE @@ -304,3 +304,34 @@ This product bundles 'yaml-cpp' which is available under an MIT license. LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +This product bundles 'Google Test' which is available under a 3-Clause BSD License. + + Copyright 2008, Google Inc. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/Makefile ---------------------------------------------------------------------- diff --git a/Makefile b/Makefile index 0bcfc35..40b11ff 100644 --- a/Makefile +++ b/Makefile @@ -26,28 +26,26 @@ TARGET_LIB=libminifi.a PROJECT=minifi TARGET_EXE=$(PROJECT) ifeq ($(ARCH), arm) -CFLAGS=-O0 -fexceptions -fpermissive -Wno-write-strings -std=c++11 -fPIC -Wall -g -Wno-unused-private-field -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -Wl,--whole-archive -lpthread -Wl,--no-whole-archive -lc -INCLUDES=-I./inc -I./src -I./thirdparty -I./test -I./thirdparty/libxml2/include #-I/usr/local/opt/leveldb/include/ -LDDIRECTORY=-L./build -L./thirdparty/uuid -L./thirdparty/libxml2/.libs/ #-L/usr/local/opt/leveldb/lib -#LDFLAGS=-lminifi -lxml2 -lleveldb -pthread -luuid +CFLAGS=-Os -fexceptions -fpermissive -Wno-write-strings -std=c++11 -fPIC -Wall -g -Wno-unused-private-field -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -Wl,--whole-archive -lpthread -Wl,--no-whole-archive -lc +INCLUDES=-I./inc -I./src -I./thirdparty -I./test -I./thirdparty/libxml2/include -I./thirdparty/yaml-cpp-yaml-cpp-0.5.3/include +LDDIRECTORY=-L./build -L./thirdparty -L./thirdparty/libxml2/.libs/ LDFLAGS=-static -lminifi -lxml2 -pthread -luuid else ifeq ($(ARCH), linux) -CFLAGS=-O0 -fexceptions -fpermissive -Wno-write-strings -std=c++11 -fPIC -Wall -g -INCLUDES=-I./inc -I./src -I./thirdparty -I./test -I./thirdparty/libxml2/include #-I/usr/local/opt/leveldb/include/ -LDDIRECTORY=-L./build -L./thirdparty/uuid -L./thirdparty/libxml2/.libs/ #-L/usr/local/opt/leveldb/lib -#LDFLAGS=-lminifi -lxml2 -lleveldb -pthread -luuid +CFLAGS=-Os -fexceptions -fpermissive -Wno-write-strings -std=c++11 -fPIC -Wall -g +INCLUDES=-I./inc -I./src -I./thirdparty -I./test -I./thirdparty/libxml2/include -I./thirdparty/yaml-cpp-yaml-cpp-0.5.3/include +LDDIRECTORY=-L./build -L./thirdparty/uuid -L./thirdparty/libxml2/.libs/ LDFLAGS=-lminifi -lxml2 -pthread -luuid else -CFLAGS=-O0 -fexceptions -fpermissive -Wno-write-strings -std=c++11 -fPIC -Wall -g -Wno-unused-private-field -INCLUDES=-I./inc -I./src -I./test -I/usr/include/libxml2 #-I/usr/local/opt/leveldb/include/ -LDDIRECTORY=-L./build #-L/usr/local/opt/leveldb/out-static/ -LDFLAGS=-lminifi -lxml2 -pthread -luuid #--llevedb +CFLAGS=-Os -fexceptions -fpermissive -Wno-write-strings -std=c++11 -fPIC -Wall -g -Wno-unused-private-field +INCLUDES=-I./inc -I./src -I./test -I./thirdparty -I/usr/include/libxml2 -I./thirdparty/yaml-cpp-yaml-cpp-0.5.3/include +LDDIRECTORY=-L./build -L./thirdparty/uuid -L./thirdparty/yaml-cpp-yaml-cpp-0.5.3/lib/ +LDFLAGS=-lminifi -lxml2 -pthread -luuid -lyaml-cpp endif UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Linux) - LDFLAGS += -lrt + LDFLAGS += -lrt endif ifeq ($(UNAME_S),Darwin) endif @@ -55,18 +53,22 @@ endif OBJS:=$(shell /bin/ls src/*.cpp | xargs -n1 basename 2>/dev/null | awk '/\.cpp$$/{a=$$0; gsub("\\.cpp$$",".o", a); print "$(BUILD_DIR)/" a}') TESTS:=Server -all: directory $(BUILD_DIR)/$(TARGET_LIB) minifi tests assemblies +all: thirdparty/yaml-cpp-yaml-cpp-0.5.3/lib/libyaml-cpp.a directory $(BUILD_DIR)/$(TARGET_LIB) minifi tests assembly-pkgs + +thirdparty/yaml-cpp-yaml-cpp-0.5.3/lib/libyaml-cpp.a: + make -C thirdparty/yaml-cpp-yaml-cpp-0.5.3 + .PHONY: directory directory: mkdir -p $(BUILD_DIR) mkdir -p $(TARGET_DIR) + make -C thirdparty/uuid ifeq ($(ARCH), arm) - make -C thirdparty/uuid CROSS_COMPILE=$(CROSS_COMPILE) - cd thirdparty/libxml2; ./configure --host=${CROSS_COMPILE} --target==${CROSSS_COMPILE} --without-python --without-zlib --enable-static --disable-shared; make; cd ../../ + make -C thirdparty/uuid CROSS_COMPILE=$(CROSS_COMPILE) + cd thirdparty/libxml2; ./configure --host=${CROSS_COMPILE} --target==${CROSSS_COMPILE} --without-python --without-zlib --enable-static --disable-shared; make; cd ../../ else ifeq ($(ARCH), linux) - make -C thirdparty/uuid - cd thirdparty/libxml2; ./configure --without-python --without-zlib --enable-static --disable-shared; make; cd ../../ + cd thirdparty/libxml2; ./configure --without-python --without-zlib --enable-static --disable-shared; make; cd ../../ endif $(BUILD_DIR)/%.o: src/%.cpp @@ -75,48 +77,54 @@ $(BUILD_DIR)/%.o: src/%.cpp $(BUILD_DIR)/$(TARGET_LIB): $(OBJS) $(AR) crs $@ $(OBJS) -minifi: $(BUILD_DIR)/$(TARGET_LIB) +minifi: $(BUILD_DIR)/$(TARGET_LIB) thirdparty/yaml-cpp-yaml-cpp-0.5.3/lib/libyaml-cpp.a $(CC) $(CFLAGS) $(INCLUDES) -o $(BUILD_DIR)/$(TARGET_EXE) main/MiNiFiMain.cpp $(LDDIRECTORY) $(LDFLAGS) cp $(BUILD_DIR)/$(TARGET_EXE) $(TARGET_DIR)/$(TARGET_EXE) .PHONY: tests -tests: $(BUILD_DIR)/$(TARGET_LIB) +tests: $(BUILD_DIR)/$(TARGET_LIB) thirdparty/yaml-cpp-yaml-cpp-0.5.3/lib/libyaml-cpp.a $(foreach TEST_NAME, $(TESTS),\ $(CC) $(CFLAGS) $(INCLUDES) -o $(BUILD_DIR)/$(TEST_NAME) test/$(TEST_NAME).cpp $(LDDIRECTORY) $(LDFLAGS)) $(ASSEMBLIES_DIR) : mkdir -p $(ASSEMBLIES_DIR) +.PHONY: assembly-pkgs +assembly-pkgs: $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-bin.tar.gz $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-source.tar.gz + $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-source.tar.gz : $(ASSEMBLIES_DIR) - tar -czf $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-source.tar.gz \ - LICENSE \ - NOTICE \ - README.md \ - inc \ - src \ - main \ - conf \ - thirdparty \ - Makefile - + mkdir -p $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-source + cp -r LICENSE \ + NOTICE \ + README.md \ + inc \ + src \ + main \ + conf \ + thirdparty \ + Makefile \ + $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-source + tar -czf $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-source.tar.gz -C $(ASSEMBLIES_DIR) $(PROJECT)-$(VERSION)-source + $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-bin.tar.gz : $(ASSEMBLIES_DIR) $(TARGET_EXE) tar -czf $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-bin.tar.gz \ - LICENSE \ - NOTICE \ - README.md \ - conf \ - -C target minifi + LICENSE \ + NOTICE \ + README.md \ + conf \ + -C target minifi .PHONY: clean clean: rm -rf $(BUILD_DIR) rm -rf $(TARGET_DIR) rm -rf $(ASSEMBLIES_DIR) -ifeq ($(ARCH), arm) + make -C thirdparty/yaml-cpp-yaml-cpp-0.5.3 clean make -C thirdparty/uuid clean - make -C thirdparty/libxml2 distclean +ifeq ($(ARCH), arm) + make -C thirdparty/uuid clean + make -C thirdparty/libxml2 distclean else ifeq ($(ARCH), linux) - make -C thirdparty/uuid clean - make -C thirdparty/libxml2 distclean + make -C thirdparty/uuid clean + make -C thirdparty/libxml2 distclean endif - http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/README.md ---------------------------------------------------------------------- diff --git a/README.md b/README.md index 6c4137e..233caf4 100644 --- a/README.md +++ b/README.md @@ -96,7 +96,7 @@ Add new propery HostName and Port into RemoteProcessGroup InputOutput port for r </property> </inputPort> 2) -Add new proerties into nifi.properties for command control +Add new proerties into minifi.properties for command control # MiNiFi Server for Command Control nifi.server.name=localhost nifi.server.port=9000 http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/conf/flow.yml ---------------------------------------------------------------------- diff --git a/conf/flow.yml b/conf/flow.yml new file mode 100644 index 0000000..6ebfa70 --- /dev/null +++ b/conf/flow.yml @@ -0,0 +1,55 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the \"License\"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an \"AS IS\" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +Flow Controller: + name: MiNiFi Flow + +Processors: + - name: GetFile + class: org.apache.nifi.processors.standard.GetFile + max concurrent tasks: 1 + scheduling strategy: TIMER_DRIVEN + scheduling period: 1 sec + penalization period: 30 sec + yield period: 1 sec + run duration nanos: 0 + auto-terminated relationships list: + Properties: + Input Directory: /tmp/getfile + Keep Source File: true + +Connections: + - name: GenerateFlowFileS2S + source name: GetFile + source relationship name: success + destination name: 471deef6-2a6e-4a7d-912a-81cc17e3a204 + max work queue size: 0 + max work queue data size: 1 MB + flowfile expiration: 60 sec + queue prioritizer class: org.apache.nifi.prioritizer.NewestFlowFileFirstPrioritizer + +Remote Processing Groups: + - name: NiFi Flow + url: https://localhost:8081/nifi + timeout: 30 secs + yield period: 10 sec + Input Ports: + - id: 471deef6-2a6e-4a7d-912a-81cc17e3a204 + name: From Node A + max concurrent tasks: 1 + use compression: false + Properties: # Deviates from spec and will later be removed when this is autonegotiated + Port: 10001 + Host Name: localhost http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/conf/flowGetFile.xml ---------------------------------------------------------------------- diff --git a/conf/flowGetFile.xml b/conf/flowGetFile.xml index 25369fb..bc29c30 100644 --- a/conf/flowGetFile.xml +++ b/conf/flowGetFile.xml @@ -25,7 +25,7 @@ <runDurationNanos>0</runDurationNanos> <property> <name>Input Directory</name> - <value>/Users/binqiu/GetFile</value> + <value>/Users/user/GetFile</value> </property> <property> <name>File Filter</name> http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/conf/flowTailFile.xml ---------------------------------------------------------------------- diff --git a/conf/flowTailFile.xml b/conf/flowTailFile.xml index 022bc4e..04c7d9b 100644 --- a/conf/flowTailFile.xml +++ b/conf/flowTailFile.xml @@ -60,7 +60,7 @@ <runDurationNanos>0</runDurationNanos> <property> <name>File to Tail</name> - <value>/Users/binqiu/getFile/log.txt</value> + <value>/Users/user/getFile/log.txt</value> </property> <property> <name>Rolling Filename Pattern</name> http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/conf/flowTest.xml ---------------------------------------------------------------------- diff --git a/conf/flowTest.xml b/conf/flowTest.xml index 56125f8..51b74e8 100644 --- a/conf/flowTest.xml +++ b/conf/flowTest.xml @@ -8,6 +8,41 @@ <position x="0.0" y="0.0"/> <comment/> <processor> + <id>e01275ae-ac38-48f9-ac53-1a44df1be88e</id> + <name>LogAttribute</name> + <position x="3950.0958625440016" y="1355.8949219185629"/> + <styles/> + <comment/> + <class>org.apache.nifi.processors.standard.LogAttribute</class> + <maxConcurrentTasks>1</maxConcurrentTasks> + <schedulingPeriod>0 sec</schedulingPeriod> + <penalizationPeriod>30 sec</penalizationPeriod> + <yieldPeriod>1 sec</yieldPeriod> + <bulletinLevel>WARN</bulletinLevel> + <lossTolerant>false</lossTolerant> + <scheduledState>RUNNING</scheduledState> + <schedulingStrategy>TIMER_DRIVEN</schedulingStrategy> + <runDurationNanos>0</runDurationNanos> + <property> + <name>Log Level</name> + <value>info</value> + </property> + <property> + <name>Log Payload</name> + <value>false</value> + </property> + <property> + <name>Attributes to Log</name> + </property> + <property> + <name>Attributes to Ignore</name> + </property> + <property> + <name>Log prefix</name> + </property> + <autoTerminatedRelationship>success</autoTerminatedRelationship> + </processor> + <processor> <id>572aa3f3-6288-4ca1-ae43-5e492cb0ea23</id> <name>LogAttribute</name> <position x="3259.732177734375" y="1739.991943359375"/> @@ -60,7 +95,7 @@ <runDurationNanos>0</runDurationNanos> <property> <name>File Size</name> - <value>1 kB</value> + <value>1024 kB</value> </property> <property> <name>Batch Size</name> @@ -75,6 +110,69 @@ <value>false</value> </property> </processor> + <label> + <id>809d63d9-6feb-496a-9dc3-d23c217e52fd</id> + <position x="3635.581271381991" y="1309.9918825902428"/> + <size height="193.5023651123047" width="641.0671997070312"/> + <styles> + <style name="background-color">#9a91ff</style> + <style name="font-size">16px</style> + </styles> + <value>Pull From Node B</value> + </label> + <label> + <id>d95ce8d3-c005-4d0b-8fcc-b2f6fae7172f</id> + <position x="2601.7320892530847" y="1413.1875613011803"/> + <size height="193.5023651123047" width="641.0671997070312"/> + <styles> + <style name="font-size">16px</style> + </styles> + <value>Push to Node B</value> + </label> + <remoteProcessGroup> + <id>8f3b248f-d493-4269-b317-36f85719f480</id> + <name>NiFi Flow</name> + <position x="3254.3356850982673" y="1432.3274284388426"/> + <comment/> + <url>http://localhost:8081/nifi</url> + <timeout>30 sec</timeout> + <yieldPeriod>1 sec</yieldPeriod> + <transmitting>true</transmitting> + <inputPort> + <id>471deef6-2a6e-4a7d-912a-81cc17e3a204</id> + <name> From Node A</name> + <position x="0.0" y="0.0"/> + <comments/> + <scheduledState>RUNNING</scheduledState> + <maxConcurrentTasks>1</maxConcurrentTasks> + <useCompression>false</useCompression> + <property> + <name>Host Name</name> + <value>localhost</value> + </property> + <property> + <name>Port</name> + <value>10001</value> + </property> + </inputPort> + <outputPort> + <id>75f88005-0a87-4fef-8320-6219cdbcf18b</id> + <name>To A</name> + <position x="0.0" y="0.0"/> + <comments/> + <scheduledState>RUNNING</scheduledState> + <maxConcurrentTasks>1</maxConcurrentTasks> + <useCompression>false</useCompression> + <property> + <name>Host Name</name> + <value>localhost</value> + </property> + <property> + <name>Port</name> + <value>10001</value> + </property> + </outputPort> + </remoteProcessGroup> <connection> <id>c4cf70d8-be05-4c3d-b926-465f330d6503</id> <name/> @@ -93,20 +191,35 @@ <flowFileExpiration>0 sec</flowFileExpiration> </connection> <connection> - <id>673cf83c-d261-4b6b-8e5a-19052fe40025</id> - <name/> - <bendPoints> - <bendPoint x="3106.4228882570283" y="1573.7169700192542"/> - </bendPoints> + <id>c9573abe-937c-464b-b18d-48b29c42dce2</id> + <name>site2siteSEND</name> + <bendPoints/> <labelIndex>1</labelIndex> <zIndex>0</zIndex> <sourceId>a0e57bb2-5b89-438e-8869-0326bbdbbe43</sourceId> <sourceGroupId>fe4a3a42-53b6-4af1-a80d-6fdfe60de97f</sourceGroupId> <sourceType>PROCESSOR</sourceType> - <destinationId>572aa3f3-6288-4ca1-ae43-5e492cb0ea23</destinationId> + <destinationId>471deef6-2a6e-4a7d-912a-81cc17e3a204</destinationId> + <destinationGroupId>8f3b248f-d493-4269-b317-36f85719f480</destinationGroupId> + <destinationType>REMOTE_INPUT_PORT</destinationType> + <relationship>success</relationship> + <maxWorkQueueSize>0</maxWorkQueueSize> + <maxWorkQueueDataSize>0 MB</maxWorkQueueDataSize> + <flowFileExpiration>0 sec</flowFileExpiration> + </connection> + <connection> + <id>2cb90b4c-d6cb-4fef-8f0f-b16459561af5</id> + <name>site2siteReceive</name> + <bendPoints/> + <labelIndex>1</labelIndex> + <zIndex>0</zIndex> + <sourceId>75f88005-0a87-4fef-8320-6219cdbcf18b</sourceId> + <sourceGroupId>8f3b248f-d493-4269-b317-36f85719f480</sourceGroupId> + <sourceType>REMOTE_OUTPUT_PORT</sourceType> + <destinationId>e01275ae-ac38-48f9-ac53-1a44df1be88e</destinationId> <destinationGroupId>fe4a3a42-53b6-4af1-a80d-6fdfe60de97f</destinationGroupId> <destinationType>PROCESSOR</destinationType> - <relationship>success</relationship> + <relationship/> <maxWorkQueueSize>0</maxWorkQueueSize> <maxWorkQueueDataSize>0 MB</maxWorkQueueDataSize> <flowFileExpiration>0 sec</flowFileExpiration> @@ -156,7 +269,7 @@ </property> <property> <name>Truststore Password</name> - <value>enc{9E2EE146023A0F31914706460EB177B357796CF0C768DECE09D10C4B40F344C8}</value> + <value>enc{3A31531B76B6395A72FB8BEB4C93E2040877D07C04FDAB5A84499B918BECEB77}</value> </property> <property> <name>Truststore Type</name> http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/conf/minifi.properties ---------------------------------------------------------------------- diff --git a/conf/minifi.properties b/conf/minifi.properties new file mode 100644 index 0000000..854b84a --- /dev/null +++ b/conf/minifi.properties @@ -0,0 +1,191 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Core Properties # +nifi.version=0.6.0-SNAPSHOT +nifi.flow.configuration.file=./conf/flow.yml +nifi.flow.configuration.archive.dir=./conf/archive/ +nifi.flowcontroller.autoResumeState=true +nifi.flowcontroller.graceful.shutdown.period=10 sec +nifi.flowservice.writedelay.interval=500 ms +nifi.administrative.yield.duration=30 sec +# If a component has no work to do (is "bored"), how long should we wait before checking again for work? +nifi.bored.yield.duration=10 millis + +nifi.authority.provider.configuration.file=./conf/authority-providers.xml +nifi.login.identity.provider.configuration.file=./conf/login-identity-providers.xml +nifi.templates.directory=./conf/templates +nifi.ui.banner.text= +nifi.ui.autorefresh.interval=30 sec +nifi.nar.library.directory=./lib +nifi.nar.working.directory=./work/nar/ +nifi.documentation.working.directory=./work/docs/components + +#################### +# State Management # +#################### +nifi.state.management.configuration.file=./conf/state-management.xml +# The ID of the local state provider +nifi.state.management.provider.local=local-provider +# The ID of the cluster-wide state provider. This will be ignored if NiFi is not clustered but must be populated if running in a cluster. +nifi.state.management.provider.cluster=zk-provider +# Specifies whether or not this instance of NiFi should run an embedded ZooKeeper server +nifi.state.management.embedded.zookeeper.start=false +# Properties file that provides the ZooKeeper properties to use if <nifi.state.management.embedded.zookeeper.start> is set to true +nifi.state.management.embedded.zookeeper.properties=./conf/zookeeper.properties + + +# H2 Settings +nifi.database.directory=./database_repository +nifi.h2.url.append=;LOCK_TIMEOUT=25000;WRITE_DELAY=0;AUTO_SERVER=FALSE + +# FlowFile Repository +nifi.flowfile.repository.implementation=org.apache.nifi.controller.repository.WriteAheadFlowFileRepository +nifi.flowfile.repository.directory=./flowfile_repository +nifi.flowfile.repository.partitions=256 +nifi.flowfile.repository.checkpoint.interval=2 mins +nifi.flowfile.repository.always.sync=false + +nifi.swap.manager.implementation=org.apache.nifi.controller.FileSystemSwapManager +nifi.queue.swap.threshold=20000 +nifi.swap.in.period=5 sec +nifi.swap.in.threads=1 +nifi.swap.out.period=5 sec +nifi.swap.out.threads=4 + +# Content Repository +nifi.content.repository.implementation=org.apache.nifi.controller.repository.FileSystemRepository +nifi.content.claim.max.appendable.size=10 MB +nifi.content.claim.max.flow.files=100 +nifi.content.repository.directory.default=./content_repository +nifi.content.repository.archive.max.retention.period=12 hours +nifi.content.repository.archive.max.usage.percentage=50% +nifi.content.repository.archive.enabled=true +nifi.content.repository.always.sync=false +nifi.content.viewer.url=/nifi-content-viewer/ + +# Provenance Repository Properties +nifi.provenance.repository.implementation=org.apache.nifi.provenance.PersistentProvenanceRepository + +# Persistent Provenance Repository Properties +nifi.provenance.repository.directory.default=./provenance_repository +nifi.provenance.repository.max.storage.time=24 hours +nifi.provenance.repository.max.storage.size=1 GB +nifi.provenance.repository.rollover.time=30 secs +nifi.provenance.repository.rollover.size=100 MB +nifi.provenance.repository.query.threads=2 +nifi.provenance.repository.index.threads=1 +nifi.provenance.repository.compress.on.rollover=true +nifi.provenance.repository.always.sync=false +nifi.provenance.repository.journal.count=16 +# Comma-separated list of fields. Fields that are not indexed will not be searchable. Valid fields are: +# EventType, FlowFileUUID, Filename, TransitURI, ProcessorID, AlternateIdentifierURI, Relationship, Details +nifi.provenance.repository.indexed.fields=EventType, FlowFileUUID, Filename, ProcessorID, Relationship +# FlowFile Attributes that should be indexed and made searchable. Some examples to consider are filename, uuid, mime.type +nifi.provenance.repository.indexed.attributes= +# Large values for the shard size will result in more Java heap usage when searching the Provenance Repository +# but should provide better performance +nifi.provenance.repository.index.shard.size=500 MB +# Indicates the maximum length that a FlowFile attribute can be when retrieving a Provenance Event from +# the repository. If the length of any attribute exceeds this value, it will be truncated when the event is retrieved. +nifi.provenance.repository.max.attribute.length=65536 + +# Volatile Provenance Respository Properties +nifi.provenance.repository.buffer.size=100000 + +# Component Status Repository +nifi.components.status.repository.implementation=org.apache.nifi.controller.status.history.VolatileComponentStatusRepository +nifi.components.status.repository.buffer.size=1440 +nifi.components.status.snapshot.frequency=1 min + +# Site to Site properties +nifi.remote.input.socket.host=localhost +nifi.remote.input.socket.port=10000 +nifi.remote.input.secure=false + +# web properties # +nifi.web.war.directory=./lib +nifi.web.http.host= +nifi.web.http.port=8080 +nifi.web.https.host= +nifi.web.https.port= +nifi.web.jetty.working.directory=./work/jetty +nifi.web.jetty.threads=200 + +# security properties # +nifi.sensitive.props.key= +nifi.sensitive.props.algorithm=PBEWITHMD5AND256BITAES-CBC-OPENSSL +nifi.sensitive.props.provider=BC + +nifi.security.keystore= +nifi.security.keystoreType= +nifi.security.keystorePasswd= +nifi.security.keyPasswd= +nifi.security.truststore= +nifi.security.truststoreType= +nifi.security.truststorePasswd= +nifi.security.needClientAuth= +nifi.security.user.credential.cache.duration=24 hours +nifi.security.user.authority.provider=file-provider +nifi.security.user.login.identity.provider= +nifi.security.support.new.account.requests= +# Valid Authorities include: ROLE_MONITOR,ROLE_DFM,ROLE_ADMIN,ROLE_PROVENANCE,ROLE_NIFI +nifi.security.anonymous.authorities= +nifi.security.ocsp.responder.url= +nifi.security.ocsp.responder.certificate= + +# cluster common properties (cluster manager and nodes must have same values) # +nifi.cluster.protocol.heartbeat.interval=5 sec +nifi.cluster.protocol.is.secure=false +nifi.cluster.protocol.socket.timeout=30 sec +nifi.cluster.protocol.connection.handshake.timeout=45 sec +# if multicast is used, then nifi.cluster.protocol.multicast.xxx properties must be configured # +nifi.cluster.protocol.use.multicast=false +nifi.cluster.protocol.multicast.address= +nifi.cluster.protocol.multicast.port= +nifi.cluster.protocol.multicast.service.broadcast.delay=500 ms +nifi.cluster.protocol.multicast.service.locator.attempts=3 +nifi.cluster.protocol.multicast.service.locator.attempts.delay=1 sec + +# cluster node properties (only configure for cluster nodes) # +nifi.cluster.is.node=false +nifi.cluster.node.address= +nifi.cluster.node.protocol.port= +nifi.cluster.node.protocol.threads=2 +# if multicast is not used, nifi.cluster.node.unicast.xxx must have same values as nifi.cluster.manager.xxx # +nifi.cluster.node.unicast.manager.address= +nifi.cluster.node.unicast.manager.protocol.port= + +# cluster manager properties (only configure for cluster manager) # +nifi.cluster.is.manager=false +nifi.cluster.manager.address= +nifi.cluster.manager.protocol.port= +nifi.cluster.manager.node.firewall.file= +nifi.cluster.manager.node.event.history.size=10 +nifi.cluster.manager.node.api.connection.timeout=30 sec +nifi.cluster.manager.node.api.read.timeout=30 sec +nifi.cluster.manager.node.api.request.threads=10 +nifi.cluster.manager.flow.retrieval.delay=5 sec +nifi.cluster.manager.protocol.threads=10 +nifi.cluster.manager.safemode.duration=0 sec + +# kerberos # +nifi.kerberos.krb5.file= + +# MiNiFi Server for Command Control +nifi.server.name=localhost +nifi.server.port=9000 +nifi.server.report.interval=1000 ms + http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/conf/nifi.properties ---------------------------------------------------------------------- diff --git a/conf/nifi.properties b/conf/nifi.properties deleted file mode 100644 index 627876f..0000000 --- a/conf/nifi.properties +++ /dev/null @@ -1,191 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Core Properties # -nifi.version=0.6.0-SNAPSHOT -nifi.flow.configuration.file=./conf/flow.xml -nifi.flow.configuration.archive.dir=./conf/archive/ -nifi.flowcontroller.autoResumeState=true -nifi.flowcontroller.graceful.shutdown.period=10 sec -nifi.flowservice.writedelay.interval=500 ms -nifi.administrative.yield.duration=30 sec -# If a component has no work to do (is "bored"), how long should we wait before checking again for work? -nifi.bored.yield.duration=10 millis - -nifi.authority.provider.configuration.file=./conf/authority-providers.xml -nifi.login.identity.provider.configuration.file=./conf/login-identity-providers.xml -nifi.templates.directory=./conf/templates -nifi.ui.banner.text= -nifi.ui.autorefresh.interval=30 sec -nifi.nar.library.directory=./lib -nifi.nar.working.directory=./work/nar/ -nifi.documentation.working.directory=./work/docs/components - -#################### -# State Management # -#################### -nifi.state.management.configuration.file=./conf/state-management.xml -# The ID of the local state provider -nifi.state.management.provider.local=local-provider -# The ID of the cluster-wide state provider. This will be ignored if NiFi is not clustered but must be populated if running in a cluster. -nifi.state.management.provider.cluster=zk-provider -# Specifies whether or not this instance of NiFi should run an embedded ZooKeeper server -nifi.state.management.embedded.zookeeper.start=false -# Properties file that provides the ZooKeeper properties to use if <nifi.state.management.embedded.zookeeper.start> is set to true -nifi.state.management.embedded.zookeeper.properties=./conf/zookeeper.properties - - -# H2 Settings -nifi.database.directory=./database_repository -nifi.h2.url.append=;LOCK_TIMEOUT=25000;WRITE_DELAY=0;AUTO_SERVER=FALSE - -# FlowFile Repository -nifi.flowfile.repository.implementation=org.apache.nifi.controller.repository.WriteAheadFlowFileRepository -nifi.flowfile.repository.directory=./flowfile_repository -nifi.flowfile.repository.partitions=256 -nifi.flowfile.repository.checkpoint.interval=2 mins -nifi.flowfile.repository.always.sync=false - -nifi.swap.manager.implementation=org.apache.nifi.controller.FileSystemSwapManager -nifi.queue.swap.threshold=20000 -nifi.swap.in.period=5 sec -nifi.swap.in.threads=1 -nifi.swap.out.period=5 sec -nifi.swap.out.threads=4 - -# Content Repository -nifi.content.repository.implementation=org.apache.nifi.controller.repository.FileSystemRepository -nifi.content.claim.max.appendable.size=10 MB -nifi.content.claim.max.flow.files=100 -nifi.content.repository.directory.default=./content_repository -nifi.content.repository.archive.max.retention.period=12 hours -nifi.content.repository.archive.max.usage.percentage=50% -nifi.content.repository.archive.enabled=true -nifi.content.repository.always.sync=false -nifi.content.viewer.url=/nifi-content-viewer/ - -# Provenance Repository Properties -nifi.provenance.repository.implementation=org.apache.nifi.provenance.PersistentProvenanceRepository - -# Persistent Provenance Repository Properties -nifi.provenance.repository.directory.default=./provenance_repository -nifi.provenance.repository.max.storage.time=24 hours -nifi.provenance.repository.max.storage.size=1 GB -nifi.provenance.repository.rollover.time=30 secs -nifi.provenance.repository.rollover.size=100 MB -nifi.provenance.repository.query.threads=2 -nifi.provenance.repository.index.threads=1 -nifi.provenance.repository.compress.on.rollover=true -nifi.provenance.repository.always.sync=false -nifi.provenance.repository.journal.count=16 -# Comma-separated list of fields. Fields that are not indexed will not be searchable. Valid fields are: -# EventType, FlowFileUUID, Filename, TransitURI, ProcessorID, AlternateIdentifierURI, Relationship, Details -nifi.provenance.repository.indexed.fields=EventType, FlowFileUUID, Filename, ProcessorID, Relationship -# FlowFile Attributes that should be indexed and made searchable. Some examples to consider are filename, uuid, mime.type -nifi.provenance.repository.indexed.attributes= -# Large values for the shard size will result in more Java heap usage when searching the Provenance Repository -# but should provide better performance -nifi.provenance.repository.index.shard.size=500 MB -# Indicates the maximum length that a FlowFile attribute can be when retrieving a Provenance Event from -# the repository. If the length of any attribute exceeds this value, it will be truncated when the event is retrieved. -nifi.provenance.repository.max.attribute.length=65536 - -# Volatile Provenance Respository Properties -nifi.provenance.repository.buffer.size=100000 - -# Component Status Repository -nifi.components.status.repository.implementation=org.apache.nifi.controller.status.history.VolatileComponentStatusRepository -nifi.components.status.repository.buffer.size=1440 -nifi.components.status.snapshot.frequency=1 min - -# Site to Site properties -nifi.remote.input.socket.host=localhost -nifi.remote.input.socket.port=10000 -nifi.remote.input.secure=false - -# web properties # -nifi.web.war.directory=./lib -nifi.web.http.host= -nifi.web.http.port=8080 -nifi.web.https.host= -nifi.web.https.port= -nifi.web.jetty.working.directory=./work/jetty -nifi.web.jetty.threads=200 - -# security properties # -nifi.sensitive.props.key= -nifi.sensitive.props.algorithm=PBEWITHMD5AND256BITAES-CBC-OPENSSL -nifi.sensitive.props.provider=BC - -nifi.security.keystore= -nifi.security.keystoreType= -nifi.security.keystorePasswd= -nifi.security.keyPasswd= -nifi.security.truststore= -nifi.security.truststoreType= -nifi.security.truststorePasswd= -nifi.security.needClientAuth= -nifi.security.user.credential.cache.duration=24 hours -nifi.security.user.authority.provider=file-provider -nifi.security.user.login.identity.provider= -nifi.security.support.new.account.requests= -# Valid Authorities include: ROLE_MONITOR,ROLE_DFM,ROLE_ADMIN,ROLE_PROVENANCE,ROLE_NIFI -nifi.security.anonymous.authorities= -nifi.security.ocsp.responder.url= -nifi.security.ocsp.responder.certificate= - -# cluster common properties (cluster manager and nodes must have same values) # -nifi.cluster.protocol.heartbeat.interval=5 sec -nifi.cluster.protocol.is.secure=false -nifi.cluster.protocol.socket.timeout=30 sec -nifi.cluster.protocol.connection.handshake.timeout=45 sec -# if multicast is used, then nifi.cluster.protocol.multicast.xxx properties must be configured # -nifi.cluster.protocol.use.multicast=false -nifi.cluster.protocol.multicast.address= -nifi.cluster.protocol.multicast.port= -nifi.cluster.protocol.multicast.service.broadcast.delay=500 ms -nifi.cluster.protocol.multicast.service.locator.attempts=3 -nifi.cluster.protocol.multicast.service.locator.attempts.delay=1 sec - -# cluster node properties (only configure for cluster nodes) # -nifi.cluster.is.node=false -nifi.cluster.node.address= -nifi.cluster.node.protocol.port= -nifi.cluster.node.protocol.threads=2 -# if multicast is not used, nifi.cluster.node.unicast.xxx must have same values as nifi.cluster.manager.xxx # -nifi.cluster.node.unicast.manager.address= -nifi.cluster.node.unicast.manager.protocol.port= - -# cluster manager properties (only configure for cluster manager) # -nifi.cluster.is.manager=false -nifi.cluster.manager.address= -nifi.cluster.manager.protocol.port= -nifi.cluster.manager.node.firewall.file= -nifi.cluster.manager.node.event.history.size=10 -nifi.cluster.manager.node.api.connection.timeout=30 sec -nifi.cluster.manager.node.api.read.timeout=30 sec -nifi.cluster.manager.node.api.request.threads=10 -nifi.cluster.manager.flow.retrieval.delay=5 sec -nifi.cluster.manager.protocol.threads=10 -nifi.cluster.manager.safemode.duration=0 sec - -# kerberos # -nifi.kerberos.krb5.file= - -# MiNiFi Server for Command Control -nifi.server.name=localhost -nifi.server.port=9000 -nifi.server.report.interval=1000 ms - http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/inc/FlowController.h ---------------------------------------------------------------------- diff --git a/inc/FlowController.h b/inc/FlowController.h index 3dd0952..1d3b2f8 100644 --- a/inc/FlowController.h +++ b/inc/FlowController.h @@ -30,6 +30,7 @@ #include <set> #include <libxml/parser.h> #include <libxml/tree.h> +#include <yaml-cpp/yaml.h> #include "Configure.h" #include "Property.h" @@ -52,6 +53,23 @@ //! Default NiFi Root Group Name #define DEFAULT_ROOT_GROUP_NAME "" #define DEFAULT_FLOW_XML_FILE_NAME "conf/flow.xml" +#define DEFAULT_FLOW_YAML_FILE_NAME "conf/flow.yml" +#define CONFIG_YAML_PROCESSORS_KEY "Processors" + +enum class ConfigFormat { XML, YAML }; + +struct ProcessorConfig { + std::string name; + std::string javaClass; + std::string maxConcurrentTasks; + std::string schedulingStrategy; + std::string schedulingPeriod; + std::string penalizationPeriod; + std::string yieldPeriod; + std::string runDurationNanos; + std::vector<std::string> autoTerminatedRelationships; + std::vector<Property> properties; +}; //! FlowController Class class FlowController @@ -115,7 +133,7 @@ public: //! Life Cycle related function //! Load flow xml from disk, after that, create the root process group and its children, initialize the flows - void load(); + void load(ConfigFormat format); //! Whether the Flow Controller is start running bool isRunning(); //! Whether the Flow Controller has already been initialized (loaded flow XML) @@ -155,10 +173,10 @@ protected: uuid_t _uuid; //! FlowController Name std::string _name; - //! XML File Name - std::string _xmlFileName; + //! Configuration File Name + std::string _configurationFileName; //! NiFi property File Name - std::string _configFileName; + std::string _propertiesFileName; //! Root Process Group ProcessGroup *_root; //! MAX Timer Driven Threads @@ -202,6 +220,20 @@ private: void parseConnection(xmlDoc *doc, xmlNode *node, ProcessGroup *parent); //! Process Remote Process Group void parseRemoteProcessGroup(xmlDoc *doc, xmlNode *node, ProcessGroup *parent); + + //! Process Processor Node YAML + void parseProcessorNodeYaml(YAML::Node processorNode, ProcessGroup *parent); + //! Process Port YAML + void parsePortYaml(YAML::Node *portNode, ProcessGroup *parent, TransferDirection direction); + //! Process Root Processor Group YAML + void parseRootProcessGroupYaml(YAML::Node rootNode); + //! Process Property YAML + void parseProcessorPropertyYaml(YAML::Node *doc, YAML::Node *node, Processor *processor); + //! Process connection YAML + void parseConnectionYaml(YAML::Node *node, ProcessGroup *parent); + //! Process Remote Process Group YAML + void parseRemoteProcessGroupYaml(YAML::Node *node, ProcessGroup *parent); + // Prevent default copy constructor and assignment operation // Only support pass by reference or pointer FlowController(const FlowController &parent); http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/inc/ProcessGroup.h ---------------------------------------------------------------------- diff --git a/inc/ProcessGroup.h b/inc/ProcessGroup.h index be69f2d..4dd26f8 100644 --- a/inc/ProcessGroup.h +++ b/inc/ProcessGroup.h @@ -138,6 +138,8 @@ public: void addConnection(Connection *connection); //! findProcessor based on UUID Processor *findProcessor(uuid_t uuid); + //! findProcessor based on name + Processor *findProcessor(std::string processorName); //! removeConnection void removeConnection(Connection *connection); //! update property value http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/main/MiNiFiMain.cpp ---------------------------------------------------------------------- diff --git a/main/MiNiFiMain.cpp b/main/MiNiFiMain.cpp index 1ceaba5..4506af1 100644 --- a/main/MiNiFiMain.cpp +++ b/main/MiNiFiMain.cpp @@ -23,6 +23,7 @@ #include <queue> #include <map> #include <unistd.h> +#include <yaml-cpp/yaml.h> #include "Logger.h" #include "Configure.h" @@ -32,8 +33,17 @@ #define SLEEP_INTERVAL 1 //! Main thread stop wait time #define STOP_WAIT_TIME 2 +//! Default YAML location +#define DEFAULT_NIFI_CONFIG_YML "./conf/config.yml" //! Default nifi properties file path -#define DEFAULT_NIFI_PROPERTIES_FILE "./conf/nifi.properties" +#define DEFAULT_NIFI_PROPERTIES_FILE "./conf/minifi.properties" + +/* Define Parser Values for Configuration YAML sections */ +#define CONFIG_YAML_FLOW_CONTROLLER_KEY "Flow Controller" +#define CONFIG_YAML_PROCESSORS_KEY "Processors" +#define CONFIG_YAML_CONNECTIONS_KEY "Connections" +#define CONFIG_YAML_REMOTE_PROCESSING_GROUPS_KEY "Remote Processing Groups" + //! Whether it is running static bool running = false; //! Flow Controller @@ -49,14 +59,58 @@ void sigHandler(int signal) } } -int main(int argc, char **argv) -{ +int loadYaml() { + YAML::Node flow = YAML::LoadFile("./conf/flow.yml"); + + YAML::Node flowControllerNode = flow[CONFIG_YAML_FLOW_CONTROLLER_KEY]; + YAML::Node processorsNode = flow[CONFIG_YAML_PROCESSORS_KEY]; + YAML::Node connectionsNode = flow[CONFIG_YAML_CONNECTIONS_KEY]; + YAML::Node remoteProcessingGroupNode = flow[CONFIG_YAML_REMOTE_PROCESSING_GROUPS_KEY]; + + if (processorsNode) { + int numProcessors = processorsNode.size(); + if (numProcessors < 1) { + throw new std::invalid_argument("There must be at least one processor configured."); + } + + std::vector<ProcessorConfig> processorConfigs; + + if (processorsNode.IsSequence()) { + for (YAML::const_iterator iter = processorsNode.begin(); iter != processorsNode.end(); ++iter) { + ProcessorConfig procCfg; + YAML::Node procNode = iter->as<YAML::Node>(); + + procCfg.name = procNode["name"].as<std::string>(); + procCfg.javaClass = procNode["class"].as<std::string>(); + + processorConfigs.push_back(procCfg); + } + } + + Logger::getLogger()->log_info("Added %d processor configs.", processorConfigs.size()); + } else { + throw new std::invalid_argument( + "Cannot instantiate a MiNiFi instance without a defined Processors configuration node."); + } + + return 0; +} + +int main(int argc, char **argv) { + Logger *logger = Logger::getLogger(); - logger->setLogLevel(trace); + logger->setLogLevel(info); logger->log_info("MiNiFi started"); - if (signal(SIGINT, sigHandler) == SIG_ERR || signal(SIGTERM, sigHandler) == SIG_ERR) - { + try { + logger->log_info("Performing parsing of specified config.yml"); + loadYaml(); + } catch (...) { + std::cout << "Could not load YAML due to improper configuration."; + return 1; + } + + if (signal(SIGINT, sigHandler) == SIG_ERR || signal(SIGTERM, sigHandler) == SIG_ERR || signal(SIGPIPE, SIG_IGN) == SIG_ERR) { logger->log_error("Can not install signal handler"); return -1; } @@ -64,10 +118,10 @@ int main(int argc, char **argv) Configure *configure = Configure::getConfigure(); configure->loadConfigureFile(DEFAULT_NIFI_PROPERTIES_FILE); - controller = new FlowController();; + controller = new FlowController(); - // Load flow XML - controller->load(); + // Load flow from specified configuration file + controller->load(ConfigFormat::YAML); // Start Processing the flow controller->start(); running = true;
