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 2016/10/13 15:07:36 UTC
[18/18] nifi-minifi-cpp git commit: MINIFI-34 Establishing CMake
build system to provide build functionality equivalent to pre-existing
Makefile.
MINIFI-34 Establishing CMake build system to provide build functionality equivalent to pre-existing Makefile.
Updating .travis.yml to support CMake build system.
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/b02af540
Tree: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/tree/b02af540
Diff: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/diff/b02af540
Branch: refs/heads/master
Commit: b02af540c4bc664be77174b32c4350dd7971b13d
Parents: 8beb377
Author: Aldrin Piri <al...@apache.org>
Authored: Thu May 5 17:32:57 2016 -0400
Committer: Aldrin Piri <al...@apache.org>
Committed: Thu Oct 13 11:06:55 2016 -0400
----------------------------------------------------------------------
.gitignore | 7 +
.travis.yml | 2 +-
CMakeLists.txt | 74 +
Makefile | 109 -
README.md | 90 +-
inc/Configure.h | 115 -
inc/Connection.h | 201 --
inc/Exception.h | 95 -
inc/FlowControlProtocol.h | 339 --
inc/FlowController.h | 248 --
inc/FlowFileRecord.h | 220 --
inc/GenerateFlowFile.h | 87 -
inc/GetFile.h | 117 -
inc/ListenSyslog.h | 209 --
inc/LogAttribute.h | 128 -
inc/Logger.h | 154 -
inc/ProcessContext.h | 99 -
inc/ProcessGroup.h | 182 -
inc/ProcessSession.h | 116 -
inc/Processor.h | 346 --
inc/Property.h | 344 --
inc/RealTimeDataCollector.h | 131 -
inc/Relationship.h | 87 -
inc/RemoteProcessorGroupPort.h | 96 -
inc/ResourceClaim.h | 92 -
inc/SchedulingAgent.h | 98 -
inc/Site2SiteClientProtocol.h | 638 ----
inc/Site2SitePeer.h | 364 --
inc/TailFile.h | 93 -
inc/TimeUtil.h | 82 -
inc/TimerDrivenSchedulingAgent.h | 66 -
inc/spdlog/async_logger.h | 90 -
inc/spdlog/common.h | 116 -
inc/spdlog/details/async_log_helper.h | 326 --
inc/spdlog/details/async_logger_impl.h | 82 -
inc/spdlog/details/file_helper.h | 144 -
inc/spdlog/details/format.cc | 1353 --------
inc/spdlog/details/format.h | 3155 ------------------
inc/spdlog/details/line_logger.h | 221 --
inc/spdlog/details/log_msg.h | 98 -
inc/spdlog/details/logger_impl.h | 320 --
inc/spdlog/details/mpmc_bounded_q.h | 175 -
inc/spdlog/details/null_mutex.h | 43 -
inc/spdlog/details/os.h | 198 --
inc/spdlog/details/pattern_formatter_impl.h | 628 ----
inc/spdlog/details/registry.h | 180 -
inc/spdlog/details/spdlog_impl.h | 154 -
inc/spdlog/formatter.h | 58 -
inc/spdlog/logger.h | 132 -
inc/spdlog/sinks/base_sink.h | 66 -
inc/spdlog/sinks/file_sinks.h | 232 --
inc/spdlog/sinks/null_sink.h | 52 -
inc/spdlog/sinks/ostream_sink.h | 67 -
inc/spdlog/sinks/sink.h | 42 -
inc/spdlog/sinks/stdout_sinks.h | 71 -
inc/spdlog/sinks/syslog_sink.h | 102 -
inc/spdlog/spdlog.h | 155 -
inc/spdlog/tweakme.h | 74 -
include/spdlog/async_logger.h | 90 +
include/spdlog/common.h | 116 +
include/spdlog/details/async_log_helper.h | 326 ++
include/spdlog/details/async_logger_impl.h | 82 +
include/spdlog/details/file_helper.h | 144 +
include/spdlog/details/format.cc | 1353 ++++++++
include/spdlog/details/format.h | 3155 ++++++++++++++++++
include/spdlog/details/line_logger.h | 221 ++
include/spdlog/details/log_msg.h | 98 +
include/spdlog/details/logger_impl.h | 320 ++
include/spdlog/details/mpmc_bounded_q.h | 175 +
include/spdlog/details/null_mutex.h | 43 +
include/spdlog/details/os.h | 198 ++
include/spdlog/details/pattern_formatter_impl.h | 628 ++++
include/spdlog/details/registry.h | 180 +
include/spdlog/details/spdlog_impl.h | 154 +
include/spdlog/formatter.h | 58 +
include/spdlog/logger.h | 132 +
include/spdlog/sinks/base_sink.h | 66 +
include/spdlog/sinks/file_sinks.h | 232 ++
include/spdlog/sinks/null_sink.h | 52 +
include/spdlog/sinks/ostream_sink.h | 67 +
include/spdlog/sinks/sink.h | 42 +
include/spdlog/sinks/stdout_sinks.h | 71 +
include/spdlog/sinks/syslog_sink.h | 102 +
include/spdlog/spdlog.h | 155 +
include/spdlog/tweakme.h | 74 +
libminifi/CMakeLists.txt | 51 +
libminifi/include/Configure.h | 115 +
libminifi/include/Connection.h | 201 ++
libminifi/include/Exception.h | 95 +
libminifi/include/FlowControlProtocol.h | 339 ++
libminifi/include/FlowController.h | 248 ++
libminifi/include/FlowFileRecord.h | 220 ++
libminifi/include/GenerateFlowFile.h | 87 +
libminifi/include/GetFile.h | 117 +
libminifi/include/ListenSyslog.h | 209 ++
libminifi/include/LogAttribute.h | 128 +
libminifi/include/Logger.h | 154 +
libminifi/include/ProcessContext.h | 99 +
libminifi/include/ProcessGroup.h | 182 +
libminifi/include/ProcessSession.h | 116 +
libminifi/include/Processor.h | 346 ++
libminifi/include/Property.h | 344 ++
libminifi/include/RealTimeDataCollector.h | 131 +
libminifi/include/Relationship.h | 87 +
libminifi/include/RemoteProcessorGroupPort.h | 96 +
libminifi/include/ResourceClaim.h | 92 +
libminifi/include/SchedulingAgent.h | 98 +
libminifi/include/Site2SiteClientProtocol.h | 638 ++++
libminifi/include/Site2SitePeer.h | 364 ++
libminifi/include/TailFile.h | 93 +
libminifi/include/TimeUtil.h | 82 +
libminifi/include/TimerDrivenSchedulingAgent.h | 66 +
libminifi/src/Configure.cpp | 167 +
libminifi/src/Connection.cpp | 160 +
libminifi/src/FlowControlProtocol.cpp | 541 +++
libminifi/src/FlowController.cpp | 1190 +++++++
libminifi/src/FlowFileRecord.cpp | 231 ++
libminifi/src/GenerateFlowFile.cpp | 134 +
libminifi/src/GetFile.cpp | 295 ++
libminifi/src/ListenSyslog.cpp | 342 ++
libminifi/src/LogAttribute.cpp | 158 +
libminifi/src/Logger.cpp | 27 +
libminifi/src/ProcessGroup.cpp | 314 ++
libminifi/src/ProcessSession.cpp | 731 ++++
libminifi/src/Processor.cpp | 451 +++
libminifi/src/RealTimeDataCollector.cpp | 482 +++
libminifi/src/RemoteProcessorGroupPort.cpp | 100 +
libminifi/src/ResourceClaim.cpp | 45 +
libminifi/src/SchedulingAgent.cpp | 86 +
libminifi/src/Site2SiteClientProtocol.cpp | 1313 ++++++++
libminifi/src/Site2SitePeer.cpp | 435 +++
libminifi/src/TailFile.cpp | 272 ++
libminifi/src/TimerDrivenSchedulingAgent.cpp | 134 +
libminifi/test/FlowFileRecordTest.cpp | 28 +
libminifi/test/Server.cpp | 607 ++++
main/CMakeLists.txt | 44 +
src/Configure.cpp | 167 -
src/Connection.cpp | 160 -
src/FlowControlProtocol.cpp | 541 ---
src/FlowController.cpp | 1190 -------
src/FlowFileRecord.cpp | 231 --
src/GenerateFlowFile.cpp | 134 -
src/GetFile.cpp | 295 --
src/ListenSyslog.cpp | 342 --
src/LogAttribute.cpp | 158 -
src/Logger.cpp | 27 -
src/ProcessGroup.cpp | 314 --
src/ProcessSession.cpp | 731 ----
src/Processor.cpp | 451 ---
src/RealTimeDataCollector.cpp | 482 ---
src/RemoteProcessorGroupPort.cpp | 100 -
src/ResourceClaim.cpp | 45 -
src/SchedulingAgent.cpp | 86 -
src/Site2SiteClientProtocol.cpp | 1313 --------
src/Site2SitePeer.cpp | 435 ---
src/TailFile.cpp | 272 --
src/TimerDrivenSchedulingAgent.cpp | 134 -
test/FlowFileRecordTest.cpp | 28 -
test/Server.cpp | 607 ----
thirdparty/yaml-cpp-yaml-cpp-0.5.3/Makefile | 40 -
160 files changed, 21572 insertions(+), 21493 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/b02af540/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 9d78a7f..69c2234 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,10 @@
# Filter out generated files from the included libuuid
thirdparty/uuid/tst_uuid*
assemblies
+CMakeCache.txt
+CMakeFiles
+CMakeScripts
+Makefile
+cmake_install.cmake
+install_manifest.txt
+CTestTestfile.cmake
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/b02af540/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index b9c9d20..eb2baa5 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -20,7 +20,7 @@ script:
# Establish updated toolchain as default
- sudo unlink /usr/bin/gcc && sudo ln -s /usr/bin/gcc-4.8 /usr/bin/gcc
- sudo unlink /usr/bin/g++ && sudo ln -s /usr/bin/g++-4.8 /usr/bin/g++
- - make
+ - mkdir ./build && cd ./build && cmake .. && make
addons:
apt:
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/b02af540/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..1cc95c2
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,74 @@
+# 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.
+#
+
+cmake_minimum_required(VERSION 2.6)
+
+set(PROJECT "nifi-minifi-cpp")
+set(VERSION "0.1.0")
+
+#### Establish Project Configuration ####
+# Enable usage of the VERSION specifier
+# https://cmake.org/cmake/help/v3.0/policy/CMP0048.html#policy:CMP0048
+cmake_policy(SET CMP0048 NEW)
+
+project(${PROJECT}
+ VERSION ${VERSION})
+
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+# Provide custom modules for the project
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+
+#file(GLOB SOURCES "libminifi/src/*.cpp")
+add_subdirectory(thirdparty/yaml-cpp-yaml-cpp-0.5.3)
+add_subdirectory(libminifi)
+add_subdirectory(main)
+
+# Generate source assembly
+set(ASSEMBLY_BASE_NAME "${CMAKE_PROJECT_NAME}-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
+set(CPACK_SOURCE_GENERATOR "TGZ")
+set(CPACK_SOURCE_PACKAGE_FILE_NAME "${ASSEMBLY_BASE_NAME}-source")
+set(CPACK_SOURCE_IGNORE_FILES "/build/;/.bzr/;~$;${CPACK_SOURCE_IGNORE_FILES}")
+
+# Generate binary assembly
+install(FILES conf/minifi.properties
+ DESTINATION conf
+ COMPONENT bin)
+
+install(PROGRAMS bin/minifi.sh
+ DESTINATION bin
+ COMPONENT bin)
+
+install(FILES LICENSE README.md NOTICE
+ DESTINATION .
+ COMPONENT bin)
+
+set(CPACK_GENERATOR "TGZ")
+set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Apache NiFi MiNiFi C++ version ${VERSION}")
+set(CPACK_PACKAGE_VENDOR "Apache NiFi")
+set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
+set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
+set(CPACK_PACKAGE_FILE_NAME "${ASSEMBLY_BASE_NAME}")
+set(CPACK_BINARY_TGZ, "ON")
+
+set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
+set(CPACK_COMPONENTS_ALL bin)
+
+include(CPack)
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/b02af540/Makefile
----------------------------------------------------------------------
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 0b03842..0000000
--- a/Makefile
+++ /dev/null
@@ -1,109 +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
-
-
-# for ARM make CROSS_COMPILE=arm-linux-gnueabi ARCH=arm
-VERSION=0.1.0
-CC=$(CROSS_COMPILE)-g++
-AR=$(CROSS_COMPILE)-ar
-BUILD_DIR= ./build
-TARGET_DIR=./target
-ASSEMBLIES_DIR = ./assemblies
-TARGET_LIB=libminifi.a
-PROJECT=minifi
-TARGET_EXE=$(PROJECT)
-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
-
-UNAME_S := $(shell uname -s)
-ifeq ($(UNAME_S),Linux)
- LDFLAGS += -lrt
-endif
-ifeq ($(UNAME_S),Darwin)
-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: 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
-
-$(BUILD_DIR)/%.o: src/%.cpp
- $(CC) $(CFLAGS) $(INCLUDES) -o $@ -c $<
-
-$(BUILD_DIR)/$(TARGET_LIB): $(OBJS)
- $(AR) crs $@ $(OBJS)
-
-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)
- cp $(BUILD_DIR)/$(TARGET_EXE) bin/$(TARGET_EXE)
-
-.PHONY: tests
-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)
- mkdir -p $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-source
- cp -r LICENSE \
- NOTICE \
- README.md \
- inc \
- src \
- main \
- bin \
- 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)
- mkdir -p $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-bin
- cp -R LICENSE \
- NOTICE \
- README.md \
- conf \
- bin \
- $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-bin
- cp target/minifi $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-bin/bin/
- tar -czf $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-bin.tar.gz -C $(ASSEMBLIES_DIR) $(PROJECT)-$(VERSION)-bin
-
-.PHONY: clean
-clean:
- rm -rf $(BUILD_DIR)
- rm -rf $(TARGET_DIR)
- rm -rf $(ASSEMBLIES_DIR)
- make -C thirdparty/yaml-cpp-yaml-cpp-0.5.3 clean
- make -C thirdparty/uuid clean
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/b02af540/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
index 0b4ac50..c8abc33 100644
--- a/README.md
+++ b/README.md
@@ -58,7 +58,8 @@ Perspectives of the role of MiNiFi should be from the perspective of the agent a
### To build
#### Utilities
-* Make
+* CMake
+ * 2.8 or greater
* gcc
* 4.8.4 or greater
* g++
@@ -77,33 +78,84 @@ Perspectives of the role of MiNiFi should be from the perspective of the agent a
## Getting Started
### Building
-From your source checkout, perform `make` in the root of the directory where the Makefile is located. For parallel building, the '-j' or '--jobs' option maybe used. On an average development machine, a serial build takes approximately 90 seconds.
+- From your source checkout, create a directory to perform the build (e.g. build) and cd into that directory.
+
+
+ # ~/Development/code/apache/nifi-minifi-cpp on git:master
+ $ mkdir build
+ # ~/Development/code/apache/nifi-minifi-cpp on git:master
+ $ cd build
+
+
+- Perform a `cmake ..` to generate the project files
+
+
+ # ~/Development/code/apache/nifi-minifi-cpp on git:master
+ $ cmake ..
+ ...
+ -- Configuring done
+ -- Generating done
+ -- Build files have been written to: /Users/apiri/Development/code/apache/nifi-minifi-cpp/build
+
+
+- Perform a build
+
# ~/Development/code/apache/nifi-minifi-cpp on git:master
$ make
- make -C thirdparty/yaml-cpp-yaml-cpp-0.5.3
- mkdir -p ./build
- g++ -Os -I./include -c -o build/parse.o src/parse.cpp
- mkdir -p ./build
- g++ -Os -I./include -c -o build/parser.o src/parser.cpp
- mkdir -p ./build
- g++ -Os -I./include -c -o build/regex_yaml.o src/regex_yaml.cpp
+ Scanning dependencies of target gmock_main
+ Scanning dependencies of target gmock
+ Scanning dependencies of target minifi
+ Scanning dependencies of target gtest
+ Scanning dependencies of target yaml-cpp
+ [ 1%] Building CXX object thirdparty/yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o
+ [ 3%] Building CXX object thirdparty/yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/CMakeFiles/gmock.dir/gtest/src/gtest-all.cc.o
+ [ 3%] Building CXX object thirdparty/yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/CMakeFiles/gmock.dir/src/gmock-all.cc.o
+ [ 6%] Building CXX object thirdparty/yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/CMakeFiles/gmock_main.dir/gtest/src/gtest-all.cc.o
+ [ 6%] Building CXX object thirdparty/yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/CMakeFiles/gmock_main.dir/src/gmock-all.cc.o
+ [ 7%] Building CXX object libminifi/CMakeFiles/minifi.dir/src/Configure.cpp.o
+
...
+ [ 97%] Linking CXX executable minifi
+ [ 97%] Built target minifiexe
+ [ 98%] Building CXX object thirdparty/yaml-cpp-yaml-cpp-0.5.3/test/CMakeFiles/run-tests.dir/node/node_test.cpp.o
+ [100%] Linking CXX executable run-tests
+ [100%] Built target run-tests
+
+
+
+- Create a binary assembly located in your build directory with suffix -bin.tar.gz
+
+
+ ~/Development/code/apache/nifi-minifi-cpp/build
+ $ make package
+ Run CPack packaging tool for source...
+ CPack: Create package using TGZ
+ CPack: Install projects
+ CPack: - Install directory: ~/Development/code/apache/nifi-minifi-cpp
+ CPack: Create package
+ CPack: - package: ~/Development/code/apache/nifi-minifi-cpp/build/nifi-minifi-cpp-0.1.0-bin.tar.gz generated.
+
+
+- Create a source assembly located in your build directory with suffix -source.tar.gz
+
+
+ ~/Development/code/apache/nifi-minifi-cpp/build
+ $ make package_source
+ Run CPack packaging tool for source...
+ CPack: Create package using TGZ
+ CPack: Install projects
+ CPack: - Install directory: ~/Development/code/apache/nifi-minifi-cpp
+ CPack: Create package
+ CPack: - package: ~/Development/code/apache/nifi-minifi-cpp/build/nifi-minifi-cpp-0.1.0-source.tar.gz generated.
+
### Cleaning
-Generated files and artifacts can be removed by performing a `make clean`.
+Remove the build directory created above.
# ~/Development/code/apache/nifi-minifi-cpp on git:master
- $ make clean
- rm -rf ./build
- rm -rf ./target
- rm -rf ./assemblies
- make -C thirdparty/yaml-cpp-yaml-cpp-0.5.3 clean
- rm -rf ./lib ./build
- make -C thirdparty/uuid clean
- rm -f *.o libuuid.a
- find ./ -iname "*.o" -exec rm -f {} \;
+ $ rm -rf ./build
### Configuring
The 'conf' directory in the root contains a template flow.yml document.
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/b02af540/inc/Configure.h
----------------------------------------------------------------------
diff --git a/inc/Configure.h b/inc/Configure.h
deleted file mode 100644
index d325fa0..0000000
--- a/inc/Configure.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/**
- * @file Configure.h
- * Configure class declaration
- *
- * 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.
- */
-#ifndef __CONFIGURE_H__
-#define __CONFIGURE_H__
-
-#include <stdio.h>
-#include <string>
-#include <map>
-#include <stdlib.h>
-#include <errno.h>
-#include <iostream>
-#include <fstream>
-#include "Logger.h"
-
-class Configure {
-public:
- //! Get the singleton logger instance
- static Configure * getConfigure()
- {
- if (!_configure)
- {
- _configure = new Configure();
- }
- return _configure;
- }
- //! nifi.flow.configuration.file
- static const char *nifi_flow_configuration_file;
- static const char *nifi_administrative_yield_duration;
- static const char *nifi_bored_yield_duration;
- static const char *nifi_server_name;
- static const char *nifi_server_port;
- static const char *nifi_server_report_interval;
-
- //! Clear the load config
- void clear()
- {
- std::lock_guard<std::mutex> lock(_mtx);
- _properties.clear();
- }
- //! Set the config value
- void set(std::string key, std::string value)
- {
- std::lock_guard<std::mutex> lock(_mtx);
- _properties[key] = value;
- }
- //! Check whether the config value existed
- bool has(std::string key)
- {
- std::lock_guard<std::mutex> lock(_mtx);
- return (_properties.find(key) != _properties.end());
- }
- //! Get the config value
- bool get(std::string key, std::string &value);
- // Trim String utils
- std::string trim(const std::string& s);
- std::string trimLeft(const std::string& s);
- std::string trimRight(const std::string& s);
- //! Parse one line in configure file like key=value
- void parseConfigureFileLine(char *buf);
- //! Load Configure File
- void loadConfigureFile(const char *fileName);
- //! Set the determined MINIFI_HOME
- void setHome(std::string minifiHome)
- {
- _minifiHome = minifiHome;
- }
-
- //! Get the determined MINIFI_HOME
- std::string getHome()
- {
- return _minifiHome;
- }
- //! Parse Command Line
- void parseCommandLine(int argc, char **argv);
-
-private:
- //! Mutex for protection
- std::mutex _mtx;
- //! Logger
- Logger *_logger;
- //! Home location for this executable
- std::string _minifiHome;
-
- Configure()
- {
- _logger = Logger::getLogger();
- }
- virtual ~Configure()
- {
-
- }
- static Configure *_configure;
-
-protected:
- std::map<std::string,std::string> _properties;
-};
-
-#endif
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/b02af540/inc/Connection.h
----------------------------------------------------------------------
diff --git a/inc/Connection.h b/inc/Connection.h
deleted file mode 100644
index dc6b94b..0000000
--- a/inc/Connection.h
+++ /dev/null
@@ -1,201 +0,0 @@
-/**
- * @file Connection.h
- * Connection class declaration
- *
- * 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.
- */
-#ifndef __CONNECTION_H__
-#define __CONNECTION_H__
-
-#include <uuid/uuid.h>
-#include <vector>
-#include <queue>
-#include <map>
-#include <mutex>
-#include <atomic>
-#include <algorithm>
-
-#include "FlowFileRecord.h"
-#include "Relationship.h"
-#include "Logger.h"
-
-//! Forwarder declaration
-class Processor;
-
-//! Connection Class
-class Connection
-{
-public:
- //! Constructor
- /*!
- * Create a new processor
- */
- Connection(std::string name, uuid_t uuid = NULL, uuid_t srcUUID = NULL, uuid_t destUUID = NULL);
- //! Destructor
- virtual ~Connection() {}
- //! Set Connection Name
- void setName(std::string name) {
- _name = name;
- }
- //! Get Process Name
- std::string getName(void) {
- return (_name);
- }
- //! Set UUID
- void setUUID(uuid_t uuid) {
- uuid_copy(_uuid, uuid);
- }
- //! Set Source Processor UUID
- void setSourceProcessorUUID(uuid_t uuid) {
- uuid_copy(_srcUUID, uuid);
- }
- //! Set Destination Processor UUID
- void setDestinationProcessorUUID(uuid_t uuid) {
- uuid_copy(_destUUID, uuid);
- }
- //! Get Source Processor UUID
- void getSourceProcessorUUID(uuid_t uuid) {
- uuid_copy(uuid, _srcUUID);
- }
- //! Get Destination Processor UUID
- void getDestinationProcessorUUID(uuid_t uuid) {
- uuid_copy(uuid, _destUUID);
- }
- //! Get UUID
- bool getUUID(uuid_t uuid) {
- if (uuid)
- {
- uuid_copy(uuid, _uuid);
- return true;
- }
- else
- return false;
- }
- //! Set Connection Source Processor
- void setSourceProcessor(Processor *source) {
- _srcProcessor = source;
- }
- // ! Get Connection Source Processor
- Processor *getSourceProcessor() {
- return _srcProcessor;
- }
- //! Set Connection Destination Processor
- void setDestinationProcessor(Processor *dest) {
- _destProcessor = dest;
- }
- // ! Get Connection Destination Processor
- Processor *getDestinationProcessor() {
- return _destProcessor;
- }
- //! Set Connection relationship
- void setRelationship(Relationship relationship) {
- _relationship = relationship;
- }
- // ! Get Connection relationship
- Relationship getRelationship() {
- return _relationship;
- }
- //! Set Max Queue Size
- void setMaxQueueSize(uint64_t size)
- {
- _maxQueueSize = size;
- }
- //! Get Max Queue Size
- uint64_t getMaxQueueSize()
- {
- return _maxQueueSize;
- }
- //! Set Max Queue Data Size
- void setMaxQueueDataSize(uint64_t size)
- {
- _maxQueueDataSize = size;
- }
- //! Get Max Queue Data Size
- uint64_t getMaxQueueDataSize()
- {
- return _maxQueueDataSize;
- }
- //! Set Flow expiration duration in millisecond
- void setFlowExpirationDuration(uint64_t duration)
- {
- _expiredDuration = duration;
- }
- //! Get Flow expiration duration in millisecond
- uint64_t getFlowExpirationDuration()
- {
- return _expiredDuration;
- }
- //! Check whether the queue is empty
- bool isEmpty();
- //! Check whether the queue is full to apply back pressure
- bool isFull();
- //! Get queue size
- uint64_t getQueueSize() {
- std::lock_guard<std::mutex> lock(_mtx);
- return _queue.size();
- }
- //! Get queue data size
- uint64_t getQueueDataSize()
- {
- return _maxQueueDataSize;
- }
- //! Put the flow file into queue
- void put(FlowFileRecord *flow);
- //! Poll the flow file from queue, the expired flow file record also being returned
- FlowFileRecord *poll(std::set<FlowFileRecord *> &expiredFlowRecords);
- //! Drain the flow records
- void drain();
-
-protected:
- //! A global unique identifier
- uuid_t _uuid;
- //! Source Processor UUID
- uuid_t _srcUUID;
- //! Destination Processor UUID
- uuid_t _destUUID;
- //! Connection Name
- std::string _name;
- //! Relationship for this connection
- Relationship _relationship;
- //! Source Processor (ProcessNode/Port)
- Processor *_srcProcessor;
- //! Destination Processor (ProcessNode/Port)
- Processor *_destProcessor;
- //! Max queue size to apply back pressure
- std::atomic<uint64_t> _maxQueueSize;
- //! Max queue data size to apply back pressure
- std::atomic<uint64_t> _maxQueueDataSize;
- //! Flow File Expiration Duration in= MilliSeconds
- std::atomic<uint64_t> _expiredDuration;
-
-
-private:
- //! Mutex for protection
- std::mutex _mtx;
- //! Queued data size
- std::atomic<uint64_t> _queuedDataSize;
- //! Queue for the Flow File
- std::queue<FlowFileRecord *> _queue;
- //! Logger
- Logger *_logger;
- // Prevent default copy constructor and assignment operation
- // Only support pass by reference or pointer
- Connection(const Connection &parent);
- Connection &operator=(const Connection &parent);
-
-};
-
-#endif
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/b02af540/inc/Exception.h
----------------------------------------------------------------------
diff --git a/inc/Exception.h b/inc/Exception.h
deleted file mode 100644
index d321454..0000000
--- a/inc/Exception.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/**
- * @file Exception.h
- * Exception class declaration
- *
- * 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.
- */
-#ifndef __EXCEPTION_H__
-#define __EXCEPTION_H__
-
-#include <sstream>
-#include <exception>
-#include <stdexcept>
-#include <errno.h>
-#include <string.h>
-
-//! ExceptionType
-enum ExceptionType
-{
- FILE_OPERATION_EXCEPTION = 0,
- FLOW_EXCEPTION,
- PROCESSOR_EXCEPTION,
- PROCESS_SESSION_EXCEPTION,
- PROCESS_SCHEDULE_EXCEPTION,
- SITE2SITE_EXCEPTION,
- GENERAL_EXCEPTION,
- MAX_EXCEPTION
-};
-
-//! Exception String
-static const char *ExceptionStr[MAX_EXCEPTION] =
-{
- "File Operation",
- "Flow File Operation",
- "Processor Operation",
- "Process Session Operation",
- "Process Schedule Operation",
- "Site2Site Protocol",
- "General Operation"
-};
-
-//! Exception Type to String
-inline const char *ExceptionTypeToString(ExceptionType type)
-{
- if (type < MAX_EXCEPTION)
- return ExceptionStr[type];
- else
- return NULL;
-}
-
-//! Exception Class
-class Exception : public std::exception
-{
-public:
- //! Constructor
- /*!
- * Create a new flow record
- */
- Exception(ExceptionType type, const char *errorMsg) : _type(type), _errorMsg(errorMsg) {
- }
- //! Destructor
- virtual ~Exception() throw () {}
- virtual const char * what() const throw () {
-
- _whatStr = ExceptionTypeToString(_type);
-
- _whatStr += ":" + _errorMsg;
- return _whatStr.c_str();
- }
-
-protected:
-
-private:
- //! Exception type
- ExceptionType _type;
- //! Exception detailed information
- std::string _errorMsg;
- //! Hold the what result
- mutable std::string _whatStr;
-
-};
-
-#endif
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/b02af540/inc/FlowControlProtocol.h
----------------------------------------------------------------------
diff --git a/inc/FlowControlProtocol.h b/inc/FlowControlProtocol.h
deleted file mode 100644
index 23f2d49..0000000
--- a/inc/FlowControlProtocol.h
+++ /dev/null
@@ -1,339 +0,0 @@
-/**
- * @file FlowControlProtocol.h
- * FlowControlProtocol class declaration
- *
- * 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.
- */
-#ifndef __FLOW_CONTROL_PROTOCOL_H__
-#define __FLOW_CONTROL_PROTOCOL_H__
-
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <fcntl.h>
-#include <netdb.h>
-#include <string>
-#include <errno.h>
-#include <chrono>
-#include <thread>
-#include "Logger.h"
-#include "Configure.h"
-#include "Property.h"
-
-//! Forwarder declaration
-class FlowController;
-
-#define DEFAULT_NIFI_SERVER_PORT 9000
-#define DEFAULT_REPORT_INTERVAL 1000 // 1 sec
-#define MAX_READ_TIMEOUT 30000 // 30 seconds
-
-//! FlowControl Protocol Msg Type
-typedef enum {
- REGISTER_REQ, // Device Register Request from device to server which contain device serial number, current running flow xml version
- REGISTER_RESP, // Device Register Respond from server to device, may contain new flow.xml from server ask device to apply and also device report interval
- REPORT_REQ, // Period Device Report from device to server which contain device serial number, current running flow xml name/version and other period report info
- REPORT_RESP, // Report Respond from server to device, may ask device to update flow xml or processor property
- MAX_FLOW_CONTROL_MSG_TYPE
-} FlowControlMsgType;
-
-//! FlowControl Protocol Msg Type String
-static const char *FlowControlMsgTypeStr[MAX_FLOW_CONTROL_MSG_TYPE] =
-{
- "REGISTER_REQ",
- "REGISTER_RESP",
- "REPORT_REQ",
- "REPORT_RESP"
-};
-
-//! Flow Control Msg Type to String
-inline const char *FlowControlMsgTypeToStr(FlowControlMsgType type)
-{
- if (type < MAX_FLOW_CONTROL_MSG_TYPE)
- return FlowControlMsgTypeStr[type];
- else
- return NULL;
-}
-
-//! FlowControll Protocol Msg ID (Some Messages are fix length, Some are variable length (TLV)
-typedef enum {
- //Fix length 8 bytes: client to server in register request, required field
- FLOW_SERIAL_NUMBER,
- // Flow XML name TLV: client to server in register request and report request, required field
- FLOW_XML_NAME,
- // Flow XML content, TLV: server to client in register respond, option field in case server want to ask client to load xml from server
- FLOW_XML_CONTENT,
- // Fix length, 4 bytes Report interval in msec: server to client in register respond, option field
- REPORT_INTERVAL,
- // Processor Name TLV: server to client in report respond, option field in case server want to ask client to update processor property
- PROCESSOR_NAME,
- // Processor Property Name TLV: server to client in report respond, option field in case server want to ask client to update processor property
- PROPERTY_NAME,
- // Processor Property Value TLV: server to client in report respond, option field in case server want to ask client to update processor property
- PROPERTY_VALUE,
- // Report Blob TLV: client to server in report request, option field in case client want to pickyback the report blob in report request to server
- REPORT_BLOB,
- MAX_FLOW_MSG_ID
-} FlowControlMsgID;
-
-//! FlowControl Protocol Msg ID String
-static const char *FlowControlMsgIDStr[MAX_FLOW_MSG_ID] =
-{
- "FLOW_SERIAL_NUMBER",
- "FLOW_XML_NAME",
- "FLOW_XML_CONTENT",
- "REPORT_INTERVAL",
- "PROCESSOR_NAME"
- "PROPERTY_NAME",
- "PROPERTY_VALUE",
- "REPORT_BLOB"
-};
-
-#define TYPE_HDR_LEN 4 // Fix Hdr Type
-#define TLV_HDR_LEN 8 // Type 4 bytes and Len 4 bytes
-
-//! FlowControl Protocol Msg Len
-inline int FlowControlMsgIDEncodingLen(FlowControlMsgID id, int payLoadLen)
-{
- if (id == FLOW_SERIAL_NUMBER)
- return (TYPE_HDR_LEN + 8);
- else if (id == REPORT_INTERVAL)
- return (TYPE_HDR_LEN + 4);
- else if (id < MAX_FLOW_MSG_ID)
- return (TLV_HDR_LEN + payLoadLen);
- else
- return -1;
-}
-
-//! Flow Control Msg Id to String
-inline const char *FlowControlMsgIdToStr(FlowControlMsgID id)
-{
- if (id < MAX_FLOW_MSG_ID)
- return FlowControlMsgIDStr[id];
- else
- return NULL;
-}
-
-//! Flow Control Respond status code
-typedef enum {
- RESP_SUCCESS,
- RESP_TRIGGER_REGISTER, // Server respond to client report to re trigger register
- RESP_START_FLOW_CONTROLLER, // Server respond to client to start flow controller
- RESP_STOP_FLOW_CONTROLLER, // Server respond to client to stop flow controller
- RESP_FAILURE,
- MAX_RESP_CODE
-} FlowControlRespCode;
-
-//! FlowControl Resp Code str
-static const char *FlowControlRespCodeStr[MAX_RESP_CODE] =
-{
- "RESP_SUCCESS",
- "RESP_TRIGGER_REGISTER",
- "RESP_START_FLOW_CONTROLLER",
- "RESP_STOP_FLOW_CONTROLLER",
- "RESP_FAILURE"
-};
-
-//! Flow Control Resp Code to String
-inline const char *FlowControlRespCodeToStr(FlowControlRespCode code)
-{
- if (code < MAX_RESP_CODE)
- return FlowControlRespCodeStr[code];
- else
- return NULL;
-}
-
-//! Common FlowControlProtocol Header
-typedef struct {
- uint32_t msgType; //! Msg Type
- uint32_t seqNumber; //! Seq Number to match Req with Resp
- uint32_t status; //! Resp Code, see FlowControlRespCode
- uint32_t payloadLen; //! Msg Payload length
-} FlowControlProtocolHeader;
-
-//! FlowControlProtocol Class
-class FlowControlProtocol
-{
-public:
- //! Constructor
- /*!
- * Create a new control protocol
- */
- FlowControlProtocol(FlowController *controller) {
- _controller = controller;
- _logger = Logger::getLogger();
- _configure = Configure::getConfigure();
- _socket = 0;
- _serverName = "localhost";
- _serverPort = DEFAULT_NIFI_SERVER_PORT;
- _registered = false;
- _seqNumber = 0;
- _reportBlob = NULL;
- _reportBlobLen = 0;
- _reportInterval = DEFAULT_REPORT_INTERVAL;
- _running = false;
-
- std::string value;
-
- if (_configure->get(Configure::nifi_server_name, value))
- {
- _serverName = value;
- _logger->log_info("NiFi Server Name %s", _serverName.c_str());
- }
- if (_configure->get(Configure::nifi_server_port, value) && Property::StringToInt(value, _serverPort))
- {
- _logger->log_info("NiFi Server Port: [%d]", _serverPort);
- }
- if (_configure->get(Configure::nifi_server_report_interval, value))
- {
- TimeUnit unit;
- if (Property::StringToTime(value, _reportInterval, unit) &&
- Property::ConvertTimeUnitToMS(_reportInterval, unit, _reportInterval))
- {
- _logger->log_info("NiFi server report interval: [%d] ms", _reportInterval);
- }
- }
- }
- //! Destructor
- virtual ~FlowControlProtocol()
- {
- stop();
- if (_socket)
- close(_socket);
- if (_reportBlob)
- delete [] _reportBlob;
- if (this->_thread)
- delete this->_thread;
- }
-
-public:
-
- //! SendRegisterRequest and Process Register Respond, return 0 for success
- int sendRegisterReq();
- //! SendReportReq and Process Report Respond, return 0 for success
- int sendReportReq();
- //! Start the flow control protocol
- void start();
- //! Stop the flow control protocol
- void stop();
- //! Set Report BLOB for periodically report
- void setReportBlob(char *blob, int len)
- {
- std::lock_guard<std::mutex> lock(_mtx);
- if (_reportBlob && _reportBlobLen >= len)
- {
- memcpy(_reportBlob, blob, len);
- _reportBlobLen = len;
- }
- else
- {
- if (_reportBlob)
- delete[] _reportBlob;
- _reportBlob = new char[len];
- _reportBlobLen = len;
- }
- }
- //! Run function for the thread
- static void run(FlowControlProtocol *protocol);
- //! set 8 bytes SerialNumber
- void setSerialNumber(uint8_t *number)
- {
- memcpy(_serialNumber, number, 8);
- }
-
-protected:
-
-private:
- //! Connect to the socket, return sock descriptor if success, 0 for failure
- int connectServer(const char *host, uint16_t port);
- //! Send Data via the socket, return -1 for failure
- int sendData(uint8_t *buf, int buflen);
- //! Read length into buf, return -1 for failure and 0 for EOF
- int readData(uint8_t *buf, int buflen);
- //! Select on the socket
- int selectClient(int msec);
- //! Read the header
- int readHdr(FlowControlProtocolHeader *hdr);
- //! encode uint32_t
- uint8_t *encode(uint8_t *buf, uint32_t value)
- {
- *buf++ = (value & 0xFF000000) >> 24;
- *buf++ = (value & 0x00FF0000) >> 16;
- *buf++ = (value & 0x0000FF00) >> 8;
- *buf++ = (value & 0x000000FF);
- return buf;
- }
- //! encode uint32_t
- uint8_t *decode(uint8_t *buf, uint32_t &value)
- {
- value = ((buf[0]<<24)|(buf[1]<<16)|(buf[2]<<8)|(buf[3]));
- return (buf + 4);
- }
- //! encode byte array
- uint8_t *encode(uint8_t *buf, uint8_t *bufArray, int size)
- {
- memcpy(buf, bufArray, size);
- buf += size;
- return buf;
- }
- //! encode std::string
- uint8_t *encode(uint8_t *buf, std::string value)
- {
- // add the \0 for size
- buf = encode(buf, value.size()+1);
- buf = encode(buf, (uint8_t *) value.c_str(), value.size()+1);
- return buf;
- }
- //! Mutex for protection
- std::mutex _mtx;
- //! Logger
- Logger *_logger;
- //! Configure
- Configure *_configure;
- //! NiFi server Name
- std::string _serverName;
- //! NiFi server port
- int64_t _serverPort;
- //! Serial Number
- uint8_t _serialNumber[8];
- //! socket to server
- int _socket;
- //! report interal in msec
- int64_t _reportInterval;
- //! whether it was registered to the NiFi server
- bool _registered;
- //! seq number
- uint32_t _seqNumber;
- //! FlowController
- FlowController *_controller;
- //! report Blob
- char *_reportBlob;
- //! report Blob len;
- int _reportBlobLen;
- //! thread
- std::thread *_thread;
- //! whether it is running
- bool _running;
- // Prevent default copy constructor and assignment operation
- // Only support pass by reference or pointer
- FlowControlProtocol(const FlowControlProtocol &parent);
- FlowControlProtocol &operator=(const FlowControlProtocol &parent);
-
-};
-
-#endif
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/b02af540/inc/FlowController.h
----------------------------------------------------------------------
diff --git a/inc/FlowController.h b/inc/FlowController.h
deleted file mode 100644
index 0d758df..0000000
--- a/inc/FlowController.h
+++ /dev/null
@@ -1,248 +0,0 @@
-/**
- * @file FlowController.h
- * FlowController class declaration
- *
- * 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.
- */
-#ifndef __FLOW_CONTROLLER_H__
-#define __FLOW_CONTROLLER_H__
-
-#include <uuid/uuid.h>
-#include <vector>
-#include <queue>
-#include <map>
-#include <mutex>
-#include <atomic>
-#include <algorithm>
-#include <set>
-#include <libxml/parser.h>
-#include <libxml/tree.h>
-#include <yaml-cpp/yaml.h>
-
-#include "Configure.h"
-#include "Property.h"
-#include "Relationship.h"
-#include "FlowFileRecord.h"
-#include "Connection.h"
-#include "Processor.h"
-#include "ProcessContext.h"
-#include "ProcessSession.h"
-#include "ProcessGroup.h"
-#include "GenerateFlowFile.h"
-#include "LogAttribute.h"
-#include "RealTimeDataCollector.h"
-#include "TimerDrivenSchedulingAgent.h"
-#include "FlowControlProtocol.h"
-#include "RemoteProcessorGroupPort.h"
-#include "GetFile.h"
-#include "TailFile.h"
-#include "ListenSyslog.h"
-#include "ExecuteProcess.h"
-
-//! 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
-{
-public:
- static const int DEFAULT_MAX_TIMER_DRIVEN_THREAD = 10;
- static const int DEFAULT_MAX_EVENT_DRIVEN_THREAD = 5;
- //! Constructor
- /*!
- * Create a new Flow Controller
- */
- FlowController(std::string name = DEFAULT_ROOT_GROUP_NAME);
- //! Destructor
- virtual ~FlowController();
- //! Set FlowController Name
- void setName(std::string name) {
- _name = name;
- }
- //! Get Flow Controller Name
- std::string getName(void) {
- return (_name);
- }
- //! Set UUID
- void setUUID(uuid_t uuid) {
- uuid_copy(_uuid, uuid);
- }
- //! Get UUID
- bool getUUID(uuid_t uuid) {
- if (uuid)
- {
- uuid_copy(uuid, _uuid);
- return true;
- }
- else
- return false;
- }
- //! Set MAX TimerDrivenThreads
- void setMaxTimerDrivenThreads(int number)
- {
- _maxTimerDrivenThreads = number;
- }
- //! Get MAX TimerDrivenThreads
- int getMaxTimerDrivenThreads()
- {
- return _maxTimerDrivenThreads;
- }
- //! Set MAX EventDrivenThreads
- void setMaxEventDrivenThreads(int number)
- {
- _maxEventDrivenThreads = number;
- }
- //! Get MAX EventDrivenThreads
- int getMaxEventDrivenThreads()
- {
- return _maxEventDrivenThreads;
- }
- //! Create FlowFile Repository
- bool createFlowFileRepository();
- //! Create Content Repository
- bool createContentRepository();
-
- //! Life Cycle related function
- //! Load flow xml from disk, after that, create the root process group and its children, initialize the flows
- void load(ConfigFormat format);
- //! Whether the Flow Controller is start running
- bool isRunning();
- //! Whether the Flow Controller has already been initialized (loaded flow XML)
- bool isInitialized();
- //! Start to run the Flow Controller which internally start the root process group and all its children
- bool start();
- //! Stop to run the Flow Controller which internally stop the root process group and all its children
- void stop(bool force);
- //! Unload the current flow xml, clean the root process group and all its children
- void unload();
- //! Load new xml
- void reload(std::string xmlFile);
- //! update property value
- void updatePropertyValue(std::string processorName, std::string propertyName, std::string propertyValue)
- {
- if (_root)
- _root->updatePropertyValue(processorName, propertyName, propertyValue);
- }
-
- //! Create Processor (Node/Input/Output Port) based on the name
- Processor *createProcessor(std::string name, uuid_t uuid);
- //! Create Root Processor Group
- ProcessGroup *createRootProcessGroup(std::string name, uuid_t uuid);
- //! Create Remote Processor Group
- ProcessGroup *createRemoteProcessGroup(std::string name, uuid_t uuid);
- //! Create Connection
- Connection *createConnection(std::string name, uuid_t uuid);
- //! set 8 bytes SerialNumber
- void setSerialNumber(uint8_t *number)
- {
- _protocol->setSerialNumber(number);
- }
-
-protected:
-
- //! A global unique identifier
- uuid_t _uuid;
- //! FlowController Name
- std::string _name;
- //! Configuration File Name
- std::string _configurationFileName;
- //! NiFi property File Name
- std::string _propertiesFileName;
- //! Root Process Group
- ProcessGroup *_root;
- //! MAX Timer Driven Threads
- int _maxTimerDrivenThreads;
- //! MAX Event Driven Threads
- int _maxEventDrivenThreads;
- //! Config
- //! FlowFile Repo
- //! Provenance Repo
- //! Flow Engines
- //! Flow Scheduler
- TimerDrivenSchedulingAgent _timerScheduler;
- //! Controller Service
- //! Config
- //! Site to Site Server Listener
- //! Heart Beat
- //! FlowControl Protocol
- FlowControlProtocol *_protocol;
-
-private:
-
- //! Mutex for protection
- std::mutex _mtx;
- //! Logger
- Logger *_logger;
- //! Configure
- Configure *_configure;
- //! Whether it is running
- std::atomic<bool> _running;
- //! Whether it has already been initialized (load the flow XML already)
- std::atomic<bool> _initialized;
- //! Process Processor Node XML
- void parseProcessorNode(xmlDoc *doc, xmlNode *processorNode, ProcessGroup *parent);
- //! Process Port XML
- void parsePort(xmlDoc *doc, xmlNode *processorNode, ProcessGroup *parent, TransferDirection direction);
- //! Process Root Processor Group XML
- void parseRootProcessGroup(xmlDoc *doc, xmlNode *node);
- //! Process Property XML
- void parseProcessorProperty(xmlDoc *doc, xmlNode *node, Processor *processor);
- //! Process connection XML
- 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);
- //! Parse Properties Node YAML for a processor
- void parsePropertiesNodeYaml(YAML::Node *propertiesNode, Processor *processor);
-
- // Prevent default copy constructor and assignment operation
- // Only support pass by reference or pointer
- FlowController(const FlowController &parent);
- FlowController &operator=(const FlowController &parent);
-
-};
-
-#endif
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/b02af540/inc/FlowFileRecord.h
----------------------------------------------------------------------
diff --git a/inc/FlowFileRecord.h b/inc/FlowFileRecord.h
deleted file mode 100644
index 8b7362f..0000000
--- a/inc/FlowFileRecord.h
+++ /dev/null
@@ -1,220 +0,0 @@
-/**
- * @file FlowFileRecord.h
- * Flow file record class declaration
- *
- * 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.
- */
-#ifndef __FLOW_FILE_RECORD_H__
-#define __FLOW_FILE_RECORD_H__
-
-#include <uuid/uuid.h>
-#include <vector>
-#include <queue>
-#include <map>
-#include <mutex>
-#include <atomic>
-#include <iostream>
-#include <sstream>
-#include <fstream>
-#include <set>
-
-#include "TimeUtil.h"
-#include "Logger.h"
-#include "ResourceClaim.h"
-
-class ProcessSession;
-class Connection;
-
-#define DEFAULT_FLOWFILE_PATH "."
-
-//! FlowFile Attribute
-enum FlowAttribute
-{
- //! The flowfile's path indicates the relative directory to which a FlowFile belongs and does not contain the filename
- PATH = 0,
- //! The flowfile's absolute path indicates the absolute directory to which a FlowFile belongs and does not contain the filename
- ABSOLUTE_PATH,
- //! The filename of the FlowFile. The filename should not contain any directory structure.
- FILENAME,
- //! A unique UUID assigned to this FlowFile.
- UUID,
- //! A numeric value indicating the FlowFile priority
- priority,
- //! The MIME Type of this FlowFile
- MIME_TYPE,
- //! Specifies the reason that a FlowFile is being discarded
- DISCARD_REASON,
- //! Indicates an identifier other than the FlowFile's UUID that is known to refer to this FlowFile.
- ALTERNATE_IDENTIFIER,
- MAX_FLOW_ATTRIBUTES
-};
-
-//! FlowFile Attribute Key
-static const char *FlowAttributeKeyArray[MAX_FLOW_ATTRIBUTES] =
-{
- "path",
- "absolute.path",
- "filename",
- "uuid",
- "priority",
- "mime.type",
- "discard.reason",
- "alternate.identifier"
-};
-
-//! FlowFile Attribute Enum to Key
-inline const char *FlowAttributeKey(FlowAttribute attribute)
-{
- if (attribute < MAX_FLOW_ATTRIBUTES)
- return FlowAttributeKeyArray[attribute];
- else
- return NULL;
-}
-
-//! FlowFile IO Callback functions for input and output
-//! throw exception for error
-class InputStreamCallback
-{
-public:
- virtual void process(std::ifstream *stream) = 0;
-};
-class OutputStreamCallback
-{
-public:
- virtual void process(std::ofstream *stream) = 0;
-};
-
-
-//! FlowFile Record Class
-class FlowFileRecord
-{
- friend class ProcessSession;
-public:
- //! Constructor
- /*!
- * Create a new flow record
- */
- FlowFileRecord(std::map<std::string, std::string> attributes, ResourceClaim *claim = NULL);
- //! Destructor
- virtual ~FlowFileRecord();
- //! addAttribute key is enum
- bool addAttribute(FlowAttribute key, std::string value);
- //! addAttribute key is string
- bool addAttribute(std::string key, std::string value);
- //! removeAttribute key is enum
- bool removeAttribute(FlowAttribute key);
- //! removeAttribute key is string
- bool removeAttribute(std::string key);
- //! updateAttribute key is enum
- bool updateAttribute(FlowAttribute key, std::string value);
- //! updateAttribute key is string
- bool updateAttribute(std::string key, std::string value);
- //! getAttribute key is enum
- bool getAttribute(FlowAttribute key, std::string &value);
- //! getAttribute key is string
- bool getAttribute(std::string key, std::string &value);
- //! setAttribute, if attribute already there, update it, else, add it
- void setAttribute(std::string key, std::string value) {
- _attributes[key] = value;
- }
- //! Get the UUID as string
- std::string getUUIDStr() {
- return _uuidStr;
- }
- //! Get Attributes
- std::map<std::string, std::string> getAttributes() {
- return _attributes;
- }
- //! Check whether it is still being penalized
- bool isPenalized() {
- return (_penaltyExpirationMs > 0 ? _penaltyExpirationMs > getTimeMillis() : false);
- }
- //! Get Size
- uint64_t getSize() {
- return _size;
- }
- // ! Get Offset
- uint64_t getOffset() {
- return _offset;
- }
- // ! Get Entry Date
- uint64_t getEntryDate() {
- return _entryDate;
- }
- // ! Get Lineage Start Date
- uint64_t getlineageStartDate() {
- return _lineageStartDate;
- }
- // ! Set Original connection
- void setOriginalConnection (Connection *connection) {
- _orginalConnection = connection;
- }
- //! Get Resource Claim
- ResourceClaim *getResourceClaim() {
- return _claim;
- }
-
-protected:
-
- //! Date at which the flow file entered the flow
- uint64_t _entryDate;
- //! Date at which the origin of this flow file entered the flow
- uint64_t _lineageStartDate;
- //! Date at which the flow file was queued
- uint64_t _lastQueueDate;
- //! Size in bytes of the data corresponding to this flow file
- uint64_t _size;
- //! A global unique identifier
- uuid_t _uuid;
- //! A local unique identifier
- uint64_t _id;
- //! Offset to the content
- uint64_t _offset;
- //! Penalty expiration
- uint64_t _penaltyExpirationMs;
- //! Attributes key/values pairs for the flow record
- std::map<std::string, std::string> _attributes;
- //! Pointer to the associated content resource claim
- ResourceClaim *_claim;
- //! UUID string
- std::string _uuidStr;
- //! UUID string for all parents
- std::set<std::string> _lineageIdentifiers;
- //! duplicate the original flow file
- void duplicate(FlowFileRecord *original);
-
-private:
-
- //! Local flow sequence ID
- static std::atomic<uint64_t> _localFlowSeqNumber;
- //! Mark for deletion
- bool _markedDelete;
- //! Connection queue that this flow file will be transfer or current in
- Connection *_connection;
- //! Orginal connection queue that this flow file was dequeued from
- Connection *_orginalConnection;
- //! Logger
- Logger *_logger;
- //! Snapshot flow record for session rollback
- bool _snapshot;
- // Prevent default copy constructor and assignment operation
- // Only support pass by reference or pointer
- FlowFileRecord(const FlowFileRecord &parent);
- FlowFileRecord &operator=(const FlowFileRecord &parent);
-
-};
-
-#endif
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/b02af540/inc/GenerateFlowFile.h
----------------------------------------------------------------------
diff --git a/inc/GenerateFlowFile.h b/inc/GenerateFlowFile.h
deleted file mode 100644
index 27aa43b..0000000
--- a/inc/GenerateFlowFile.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * @file GenerateFlowFile.h
- * GenerateFlowFile class declaration
- *
- * 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.
- */
-#ifndef __GENERATE_FLOW_FILE_H__
-#define __GENERATE_FLOW_FILE_H__
-
-#include "FlowFileRecord.h"
-#include "Processor.h"
-#include "ProcessSession.h"
-
-//! GenerateFlowFile Class
-class GenerateFlowFile : public Processor
-{
-public:
- //! Constructor
- /*!
- * Create a new processor
- */
- GenerateFlowFile(std::string name, uuid_t uuid = NULL)
- : Processor(name, uuid)
- {
- _data = NULL;
- _dataSize = 0;
- }
- //! Destructor
- virtual ~GenerateFlowFile()
- {
- if (_data)
- delete[] _data;
- }
- //! Processor Name
- static const std::string ProcessorName;
- //! Supported Properties
- static Property FileSize;
- static Property BatchSize;
- static Property DataFormat;
- static Property UniqueFlowFiles;
- static const char *DATA_FORMAT_BINARY;
- static const char *DATA_FORMAT_TEXT;
- //! Supported Relationships
- static Relationship Success;
- //! Nest Callback Class for write stream
- class WriteCallback : public OutputStreamCallback
- {
- public:
- WriteCallback(char *data, uint64_t size)
- : _data(data), _dataSize(size) {}
- char *_data;
- uint64_t _dataSize;
- void process(std::ofstream *stream) {
- if (_data && _dataSize > 0)
- stream->write(_data, _dataSize);
- }
- };
-
-public:
- //! OnTrigger method, implemented by NiFi GenerateFlowFile
- virtual void onTrigger(ProcessContext *context, ProcessSession *session);
- //! Initialize, over write by NiFi GenerateFlowFile
- virtual void initialize(void);
-
-protected:
-
-private:
- //! Generated data
- char * _data;
- //! Size of the generate data
- uint64_t _dataSize;
-};
-
-#endif
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/b02af540/inc/GetFile.h
----------------------------------------------------------------------
diff --git a/inc/GetFile.h b/inc/GetFile.h
deleted file mode 100644
index eb975fd..0000000
--- a/inc/GetFile.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/**
- * @file GetFile.h
- * GetFile class declaration
- *
- * 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.
- */
-#ifndef __GET_FILE_H__
-#define __GET_FILE_H__
-
-#include "FlowFileRecord.h"
-#include "Processor.h"
-#include "ProcessSession.h"
-
-//! GetFile Class
-class GetFile : public Processor
-{
-public:
- //! Constructor
- /*!
- * Create a new processor
- */
- GetFile(std::string name, uuid_t uuid = NULL)
- : Processor(name, uuid)
- {
- _logger = Logger::getLogger();
- _directory = ".";
- _recursive = true;
- _keepSourceFile = false;
- _minAge = 0;
- _maxAge = 0;
- _minSize = 0;
- _maxSize = 0;
- _ignoreHiddenFile = true;
- _pollInterval = 0;
- _batchSize = 10;
- _lastDirectoryListingTime = getTimeMillis();
- _fileFilter = "[^\\.].*";
- }
- //! Destructor
- virtual ~GetFile()
- {
- }
- //! Processor Name
- static const std::string ProcessorName;
- //! Supported Properties
- static Property Directory;
- static Property Recurse;
- static Property KeepSourceFile;
- static Property MinAge;
- static Property MaxAge;
- static Property MinSize;
- static Property MaxSize;
- static Property IgnoreHiddenFile;
- static Property PollInterval;
- static Property BatchSize;
- static Property FileFilter;
- //! Supported Relationships
- static Relationship Success;
-
-public:
- //! OnTrigger method, implemented by NiFi GetFile
- virtual void onTrigger(ProcessContext *context, ProcessSession *session);
- //! Initialize, over write by NiFi GetFile
- virtual void initialize(void);
- //! perform directory listing
- void performListing(std::string dir);
-
-protected:
-
-private:
- //! Logger
- Logger *_logger;
- //! Queue for store directory list
- std::queue<std::string> _dirList;
- //! Get Listing size
- uint64_t getListingSize() {
- std::lock_guard<std::mutex> lock(_mtx);
- return _dirList.size();
- }
- //! Whether the directory listing is empty
- bool isListingEmpty();
- //! Put full path file name into directory listing
- void putListing(std::string fileName);
- //! Poll directory listing for files
- void pollListing(std::queue<std::string> &list, int maxSize);
- //! Check whether file can be added to the directory listing
- bool acceptFile(std::string fileName);
- //! Mutex for protection of the directory listing
- std::mutex _mtx;
- std::string _directory;
- bool _recursive;
- bool _keepSourceFile;
- int64_t _minAge;
- int64_t _maxAge;
- int64_t _minSize;
- int64_t _maxSize;
- bool _ignoreHiddenFile;
- int64_t _pollInterval;
- int64_t _batchSize;
- uint64_t _lastDirectoryListingTime;
- std::string _fileFilter;
-};
-
-#endif
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/b02af540/inc/ListenSyslog.h
----------------------------------------------------------------------
diff --git a/inc/ListenSyslog.h b/inc/ListenSyslog.h
deleted file mode 100644
index 81bc92c..0000000
--- a/inc/ListenSyslog.h
+++ /dev/null
@@ -1,209 +0,0 @@
-/**
- * @file ListenSyslog.h
- * ListenSyslog class declaration
- *
- * 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.
- */
-#ifndef __LISTEN_SYSLOG_H__
-#define __LISTEN_SYSLOG_H__
-
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <errno.h>
-#include <sys/select.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <chrono>
-#include <thread>
-#include "FlowFileRecord.h"
-#include "Processor.h"
-#include "ProcessSession.h"
-
-//! SyslogEvent
-typedef struct {
- uint8_t *payload;
- uint64_t len;
-} SysLogEvent;
-
-//! ListenSyslog Class
-class ListenSyslog : public Processor
-{
-public:
- //! Constructor
- /*!
- * Create a new processor
- */
- ListenSyslog(std::string name, uuid_t uuid = NULL)
- : Processor(name, uuid)
- {
- _logger = Logger::getLogger();
- _eventQueueByteSize = 0;
- _serverSocket = 0;
- _recvBufSize = 65507;
- _maxSocketBufSize = 1024*1024;
- _maxConnections = 2;
- _maxBatchSize = 1;
- _messageDelimiter = "\n";
- _protocol = "UDP";
- _port = 514;
- _parseMessages = false;
- _serverSocket = 0;
- _maxFds = 0;
- FD_ZERO(&_readfds);
- _thread = NULL;
- _resetServerSocket = false;
- _serverTheadRunning = false;
- }
- //! Destructor
- virtual ~ListenSyslog()
- {
- _serverTheadRunning = false;
- if (this->_thread)
- delete this->_thread;
- // need to reset the socket
- std::vector<int>::iterator it;
- for (it = _clientSockets.begin(); it != _clientSockets.end(); ++it)
- {
- int clientSocket = *it;
- close(clientSocket);
- }
- _clientSockets.clear();
- if (_serverSocket > 0)
- {
- _logger->log_info("ListenSysLog Server socket %d close", _serverSocket);
- close(_serverSocket);
- _serverSocket = 0;
- }
- }
- //! Processor Name
- static const std::string ProcessorName;
- //! Supported Properties
- static Property RecvBufSize;
- static Property MaxSocketBufSize;
- static Property MaxConnections;
- static Property MaxBatchSize;
- static Property MessageDelimiter;
- static Property ParseMessages;
- static Property Protocol;
- static Property Port;
- //! Supported Relationships
- static Relationship Success;
- static Relationship Invalid;
- //! Nest Callback Class for write stream
- class WriteCallback : public OutputStreamCallback
- {
- public:
- WriteCallback(char *data, uint64_t size)
- : _data(data), _dataSize(size) {}
- char *_data;
- uint64_t _dataSize;
- void process(std::ofstream *stream) {
- if (_data && _dataSize > 0)
- stream->write(_data, _dataSize);
- }
- };
-
-public:
- //! OnTrigger method, implemented by NiFi ListenSyslog
- virtual void onTrigger(ProcessContext *context, ProcessSession *session);
- //! Initialize, over write by NiFi ListenSyslog
- virtual void initialize(void);
-
-protected:
-
-private:
- //! Logger
- Logger *_logger;
- //! Run function for the thread
- static void run(ListenSyslog *process);
- //! Run Thread
- void runThread();
- //! Queue for store syslog event
- std::queue<SysLogEvent> _eventQueue;
- //! Size of Event queue in bytes
- uint64_t _eventQueueByteSize;
- //! Get event queue size
- uint64_t getEventQueueSize() {
- std::lock_guard<std::mutex> lock(_mtx);
- return _eventQueue.size();
- }
- //! Get event queue byte size
- uint64_t getEventQueueByteSize() {
- std::lock_guard<std::mutex> lock(_mtx);
- return _eventQueueByteSize;
- }
- //! Whether the event queue is empty
- bool isEventQueueEmpty()
- {
- std::lock_guard<std::mutex> lock(_mtx);
- return _eventQueue.empty();
- }
- //! Put event into directory listing
- void putEvent(uint8_t *payload, uint64_t len)
- {
- std::lock_guard<std::mutex> lock(_mtx);
- SysLogEvent event;
- event.payload = payload;
- event.len = len;
- _eventQueue.push(event);
- _eventQueueByteSize += len;
- }
- //! Read \n terminated line from TCP socket
- int readline( int fd, char *bufptr, size_t len );
- //! start server socket and handling client socket
- void startSocketThread();
- //! Poll event
- void pollEvent(std::queue<SysLogEvent> &list, int maxSize)
- {
- std::lock_guard<std::mutex> lock(_mtx);
-
- while (!_eventQueue.empty() && (maxSize == 0 || list.size() < maxSize))
- {
- SysLogEvent event = _eventQueue.front();
- _eventQueue.pop();
- _eventQueueByteSize -= event.len;
- list.push(event);
- }
- return;
- }
- //! Mutex for protection of the directory listing
- std::mutex _mtx;
- int64_t _recvBufSize;
- int64_t _maxSocketBufSize;
- int64_t _maxConnections;
- int64_t _maxBatchSize;
- std::string _messageDelimiter;
- std::string _protocol;
- int64_t _port;
- bool _parseMessages;
- int _serverSocket;
- std::vector<int> _clientSockets;
- int _maxFds;
- fd_set _readfds;
- //! thread
- std::thread *_thread;
- //! whether to reset the server socket
- bool _resetServerSocket;
- bool _serverTheadRunning;
- //! buffer for read socket
- uint8_t _buffer[2048];
-};
-
-#endif
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/b02af540/inc/LogAttribute.h
----------------------------------------------------------------------
diff --git a/inc/LogAttribute.h b/inc/LogAttribute.h
deleted file mode 100644
index 125ebf3..0000000
--- a/inc/LogAttribute.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/**
- * @file LogAttribute.h
- * LogAttribute class declaration
- *
- * 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.
- */
-#ifndef __LOG_ATTRIBUTE_H__
-#define __LOG_ATTRIBUTE_H__
-
-#include "FlowFileRecord.h"
-#include "Processor.h"
-#include "ProcessSession.h"
-
-//! LogAttribute Class
-class LogAttribute : public Processor
-{
-public:
- //! Constructor
- /*!
- * Create a new processor
- */
- LogAttribute(std::string name, uuid_t uuid = NULL)
- : Processor(name, uuid)
- {
- _logger = Logger::getLogger();
- }
- //! Destructor
- virtual ~LogAttribute()
- {
- }
- //! Processor Name
- static const std::string ProcessorName;
- //! Supported Properties
- static Property LogLevel;
- static Property AttributesToLog;
- static Property AttributesToIgnore;
- static Property LogPayload;
- static Property LogPrefix;
- //! Supported Relationships
- static Relationship Success;
- enum LogAttrLevel {
- LogAttrLevelTrace, LogAttrLevelDebug, LogAttrLevelInfo, LogAttrLevelWarn, LogAttrLevelError
- };
- //! Convert log level from string to enum
- bool logLevelStringToEnum(std::string logStr, LogAttrLevel &level)
- {
- if (logStr == "trace")
- {
- level = LogAttrLevelTrace;
- return true;
- }
- else if (logStr == "debug")
- {
- level = LogAttrLevelDebug;
- return true;
- }
- else if (logStr == "info")
- {
- level = LogAttrLevelInfo;
- return true;
- }
- else if (logStr == "warn")
- {
- level = LogAttrLevelWarn;
- return true;
- }
- else if (logStr == "error")
- {
- level = LogAttrLevelError;
- return true;
- }
- else
- return false;
- }
- //! Nest Callback Class for read stream
- class ReadCallback : public InputStreamCallback
- {
- public:
- ReadCallback(uint64_t size)
- {
- _bufferSize = size;
- _buffer = new char[_bufferSize];
- }
- ~ReadCallback()
- {
- if (_buffer)
- delete[] _buffer;
- }
- void process(std::ifstream *stream) {
-
- stream->read(_buffer, _bufferSize);
- if (!stream)
- _readSize = stream->gcount();
- else
- _readSize = _bufferSize;
- }
- char *_buffer;
- uint64_t _bufferSize;
- uint64_t _readSize;
- };
-
-public:
- //! OnTrigger method, implemented by NiFi LogAttribute
- virtual void onTrigger(ProcessContext *context, ProcessSession *session);
- //! Initialize, over write by NiFi LogAttribute
- virtual void initialize(void);
-
-protected:
-
-private:
- //! Logger
- Logger *_logger;
-};
-
-#endif
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/b02af540/inc/Logger.h
----------------------------------------------------------------------
diff --git a/inc/Logger.h b/inc/Logger.h
deleted file mode 100644
index 3edad9d..0000000
--- a/inc/Logger.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/**
- * @file Logger.h
- * Logger class declaration
- * This is a C++ wrapper for spdlog, a lightweight C++ logging library
- *
- * 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.
- */
-#ifndef __LOGGER_H__
-#define __LOGGER_H__
-
-#include "spdlog/spdlog.h"
-
-using spdlog::stdout_logger_mt;
-using spdlog::rotating_logger_mt;
-using spdlog::logger;
-
-#define LOG_BUFFER_SIZE 1024
-#define FILL_BUFFER char buffer[LOG_BUFFER_SIZE]; \
- va_list args; \
- va_start(args, format); \
- vsnprintf(buffer, LOG_BUFFER_SIZE,format, args); \
- va_end(args);
-
-//! 5M default log file size
-#define DEFAULT_LOG_FILE_SIZE (5*1024*1024)
-//! 3 log files rotation
-#define DEFAULT_LOG_FILE_NUMBER 3
-#define LOG_NAME "minifi log"
-#define LOG_FILE_NAME "minifi-app.log"
-
-typedef enum
-{
- trace = 0,
- debug = 1,
- info = 2,
- notice = 3,
- warn = 4,
- err = 5,
- critical = 6,
- alert = 7,
- emerg = 8,
- off = 9
-} LOG_LEVEL_E;
-
-//! Logger Class
-class Logger {
-
-public:
-
- //! Get the singleton logger instance
- static Logger * getLogger() {
- if (!_logger)
- _logger = new Logger();
- return _logger;
- }
- void setLogLevel(LOG_LEVEL_E level) {
- if (_spdlog == NULL)
- return;
- _spdlog->set_level((spdlog::level::level_enum) level);
- }
- //! Destructor
- ~Logger() {}
- /**
- * @brief Log error message
- * @param format format string ('man printf' for syntax)
- * @warning does not check @p log or @p format for null. Caller must ensure parameters and format string lengths match
- */
- void log_error(const char *const format, ...) {
- if(_spdlog == NULL)
- return;
- FILL_BUFFER
- _spdlog->error(buffer);
- }
- /**
- * @brief Log warn message
- * @param format format string ('man printf' for syntax)
- * @warning does not check @p log or @p format for null. Caller must ensure parameters and format string lengths match
- */
- void log_warn(const char *const format, ...) {
- if(_spdlog == NULL)
- return;
- FILL_BUFFER
- _spdlog->warn(buffer);
- }
- /**
- * @brief Log info message
- * @param format format string ('man printf' for syntax)
- * @warning does not check @p log or @p format for null. Caller must ensure parameters and format string lengths match
- */
- void log_info(const char *const format, ...) {
- if(_spdlog == NULL)
- return;
- FILL_BUFFER
- _spdlog->info(buffer);
- }
- /**
- * @brief Log debug message
- * @param format format string ('man printf' for syntax)
- * @warning does not check @p log or @p format for null. Caller must ensure parameters and format string lengths match
- */
- void log_debug(const char *const format, ...) {
- if(_spdlog == NULL)
- return;
- FILL_BUFFER
- _spdlog->debug(buffer);
- }
- /**
- * @brief Log trace message
- * @param format format string ('man printf' for syntax)
- * @warning does not check @p log or @p format for null. Caller must ensure parameters and format string lengths match
- */
- void log_trace(const char *const format, ...) {
- if(_spdlog == NULL)
- return;
- FILL_BUFFER
- _spdlog->trace(buffer);
- }
-
-protected:
-
-private:
- // Prevent default copy constructor and assignment operation
- // Only support pass by reference or pointer
- Logger(const Logger &parent);
- Logger &operator=(const Logger &parent);
- //! Constructor
- /*!
- * Create a logger
- * */
- Logger(const std::string logger_name = LOG_NAME, const std::string filename = LOG_FILE_NAME, size_t max_file_size = DEFAULT_LOG_FILE_SIZE, size_t max_files = DEFAULT_LOG_FILE_NUMBER, bool force_flush = true) {
- _spdlog = rotating_logger_mt(logger_name, filename, max_file_size, max_files, force_flush);
- _spdlog->set_level((spdlog::level::level_enum) debug);
- }
- //! spdlog
- std::shared_ptr<logger> _spdlog;
-
- //! Singleton logger instance
- static Logger *_logger;
-};
-
-#endif
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/b02af540/inc/ProcessContext.h
----------------------------------------------------------------------
diff --git a/inc/ProcessContext.h b/inc/ProcessContext.h
deleted file mode 100644
index 2a88b93..0000000
--- a/inc/ProcessContext.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/**
- * @file ProcessContext.h
- * ProcessContext class declaration
- *
- * 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.
- */
-#ifndef __PROCESS_CONTEXT_H__
-#define __PROCESS_CONTEXT_H__
-
-#include <uuid/uuid.h>
-#include <vector>
-#include <queue>
-#include <map>
-#include <mutex>
-#include <atomic>
-#include <algorithm>
-
-#include "Logger.h"
-#include "Processor.h"
-
-//! ProcessContext Class
-class ProcessContext
-{
-public:
- //! Constructor
- /*!
- * Create a new process context associated with the processor/controller service/state manager
- */
- ProcessContext(Processor *processor = NULL) : _processor(processor) {
- _logger = Logger::getLogger();
- }
- //! Destructor
- virtual ~ProcessContext() {}
- //! Get Processor associated with the Process Context
- Processor *getProcessor() {
- return _processor;
- }
- bool getProperty(std::string name, std::string &value) {
- if (_processor)
- return _processor->getProperty(name, value);
- else
- return false;
- }
- //! Whether the relationship is supported
- bool isSupportedRelationship(Relationship relationship) {
- if (_processor)
- return _processor->isSupportedRelationship(relationship);
- else
- return false;
- }
- //! Check whether the relationship is auto terminated
- bool isAutoTerminated(Relationship relationship) {
- if (_processor)
- return _processor->isAutoTerminated(relationship);
- else
- return false;
- }
- //! Get ProcessContext Maximum Concurrent Tasks
- uint8_t getMaxConcurrentTasks(void) {
- if (_processor)
- return _processor->getMaxConcurrentTasks();
- else
- return 0;
- }
- //! Yield based on the yield period
- void yield() {
- if (_processor)
- _processor->yield();
- }
-
-protected:
-
-private:
-
- //! Processor
- Processor *_processor;
- // Prevent default copy constructor and assignment operation
- // Only support pass by reference or pointer
- ProcessContext(const ProcessContext &parent);
- ProcessContext &operator=(const ProcessContext &parent);
- //! Logger
- Logger *_logger;
-
-};
-
-#endif