#
# 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
    id: 2438e3c8-015a-1000-79ca-83af40ec1990
Processors:
    - name: invoke
      id: 2438e3c8-015a-1000-79ca-83af40ec1991
      class: org.apache.nifi.processors.standard.GetTCP
      max concurrent tasks: 1
      scheduling strategy: TIMER_DRIVEN
      scheduling period: 10 msec
      penalization period: 30 msec
      yield period: 10 msec
      run duration nanos: 0
      auto-terminated relationships list:
      Properties:
          SSL Context Service: SSLContextService
          endpoint-list: localhost:28776
          end-of-message-byte: d
          reconnect-interval: 5ms
          connection-attempt-timeout: 2000
    - name: LogAttribute
      id: 2438e3c8-015a-1000-79ca-83af40ec1992
      class: org.apache.nifi.processors.standard.LogAttribute
      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: response
      Properties:
        Log Level: info
        Log Payload: true

Connections:
    - name: TransferFilesToRPG
      id: 2438e3c8-015a-1000-79ca-83af40ec1997
      source name: invoke
      source id: 2438e3c8-015a-1000-79ca-83af40ec1991
      source relationship name: success
      destination name: LogAttribute
      destination id: 2438e3c8-015a-1000-79ca-83af40ec1992
      max work queue size: 0
      max work queue data size: 1 MB
      flowfile expiration: 60 sec
    - name: TransferFilesToRPG2
      id: 2438e3c8-015a-1000-79ca-83af40ec1917
      source name: LogAttribute
      source id: 2438e3c8-015a-1000-79ca-83af40ec1992
      destination name: LogAttribute
      destination id: 2438e3c8-015a-1000-79ca-83af40ec1992
      source relationship name: success
      max work queue size: 0
      max work queue data size: 1 MB
      flowfile expiration: 60 sec

Controller Services:
    - name: SSLContextService
      id: 2438e3c8-015a-1000-79ca-83af40ec1994
      class: SSLContextService
      Properties:
        Client Certificate:
            - value: cn.crt.pem
        Private Key:
            - value: encrypted.key.pem
        Passphrase:
            - value: VsVTmHBzixyA9UfTCttRYXus1oMpIxO6jmDXrNrOp5w
        CA Certificate:
            - value: nifi-cert.pem

Remote Processing Groups:
