[ 
https://issues.apache.org/jira/browse/MINIFI-339?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16159070#comment-16159070
 ] 

ASF GitHub Bot commented on MINIFI-339:
---------------------------------------

Github user benqiu2016 commented on a diff in the pull request:

    https://github.com/apache/nifi-minifi-cpp/pull/134#discussion_r137858437
  
    --- Diff: libminifi/include/c2/C2Payload.h ---
    @@ -0,0 +1,187 @@
    +/**
    + *
    + * 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 LIBMINIFI_INCLUDE_C2_C2PAYLOAD_H_
    +#define LIBMINIFI_INCLUDE_C2_C2PAYLOAD_H_
    +
    +#include <memory>
    +#include <string>
    +#include <map>
    +#include "core/state/UpdateController.h"
    +
    +namespace org {
    +namespace apache {
    +namespace nifi {
    +namespace minifi {
    +namespace c2 {
    +
    +enum Operation {
    +  ACKNOWLEDGE,
    +  START,
    +  STOP,
    +  RESTART,
    +  DESCRIBE,
    +  HEARTBEAT,
    +  UPDATE,
    +  VALIDATE,
    +  CLEAR
    +};
    +
    +enum Direction {
    +  TRANSMIT,
    +  RECEIVE
    +};
    +
    +class C2ContentResponse {
    + public:
    +  C2ContentResponse(Operation op);
    +
    +  C2ContentResponse(const C2ContentResponse &other);
    +
    +  C2ContentResponse(const C2ContentResponse &&other);
    +
    +  C2ContentResponse & operator=(const C2ContentResponse &&other);
    +
    +  C2ContentResponse & operator=(const C2ContentResponse &other);
    +
    +  Operation op;
    +  // determines if the operation is required
    +  bool required;
    +  // identifier
    +  std::string ident;
    +  // delay before running
    +  uint32_t delay;
    +  // max time before this response will no longer be honored.
    +  uint64_t ttl;
    +  // name applied to commands
    +  std::string name;
    +  // commands that correspond with the operation.
    +  std::map<std::string, std::string> operation_arguments;
    +//  std::vector<std::string> content;
    +};
    +
    +/**
    + * C2Payload is an update for the state manager.
    + * Note that the payload can either consist of other payloads or
    + * have content directly within it, represented by C2ContentResponse 
objects, above.
    + *
    + * Payloads can also contain raw data, which can be binary data.
    + */
    +class C2Payload : public state::Update {
    + public:
    +  virtual ~C2Payload() {
    +
    +  }
    +
    +  C2Payload(Operation op, std::string identifier, bool resp = false, bool 
isRaw = false);
    +
    +  C2Payload(Operation op, bool resp = false, bool isRaw = false);
    +
    +  C2Payload(Operation op, state::UpdateState state, bool resp = false, 
bool isRaw = false);
    +
    +  C2Payload(const C2Payload &other);
    +
    +  C2Payload(const C2Payload &&other);
    +
    +  void setIdentifier(const std::string &ident);
    +
    +  std::string getIdentifier() const;
    +
    +  void setLabel(const std::string label) {
    +    label_ = label;
    +  }
    +
    +  std::string getLabel() const {
    +    return label_;
    +  }
    +
    +  /**
    +   * Gets the operation for this payload. May be nested or a single 
operation.
    +   */
    +  Operation getOperation() const;
    +
    +  /**
    +   * Validate the payload, if necessary and/or possible.
    +   */
    +  virtual bool validate();
    +
    +  /**
    +   * Get content responses from this payload.
    +   */
    +  const std::vector<C2ContentResponse> &getContent() const;
    +
    +  /**
    +   * Add a content response to this payload.
    +   */
    +  void addContent(const C2ContentResponse &&content);
    +
    +  /**
    +   * Determines if this object contains raw data.
    +   */
    +  bool isRaw() const;
    +
    +  /**
    +   * Sets raw data within this object.
    +   */
    +  void setRawData(const std::string &data);
    +
    +  /**
    +   * Returns raw data.
    +   */
    +  std::string getRawData() const;
    +
    +  /**
    +   * Add a nested payload.
    +   * @param payload payload to move into this object.
    +   */
    +  void addPayload(const C2Payload &&payload);
    +  /**
    +   * Get nested payloads.
    +   */
    +  const std::vector<C2Payload> &getNestedPayloads() const;
    +
    +  C2Payload &operator=(const C2Payload &&other);
    +  C2Payload &operator=(const C2Payload &other);
    +
    + protected:
    +
    +  // identifier for this payload.
    +  std::string ident_;
    +
    +  std::string label_;
    +
    +  std::vector<C2Payload> payloads_;
    +
    +  std::vector<C2ContentResponse> content_;
    +
    +  Operation op_;
    +
    +  bool raw_;
    +
    +  std::string raw_data_;
    +
    +  bool isResponse;
    +
    +};
    +
    +} /* namesapce c2 */
    +} /* namespace minifi */
    +} /* namespace nifi */
    +} /* namespace apache */
    +} /* namespace org */
    +
    +#endif /* LIBMINIFI_INCLUDE_C2_C2PAYLOAD_H_ */
    --- End diff --
    
    for payload, have we consider using protobuf or avro format for the same?



> Begin building controlling API to facilitate control of agents
> --------------------------------------------------------------
>
>                 Key: MINIFI-339
>                 URL: https://issues.apache.org/jira/browse/MINIFI-339
>             Project: Apache NiFi MiNiFi
>          Issue Type: New Feature
>          Components: C++
>            Reporter: marco polo
>            Assignee: marco polo
>            Priority: Critical
>              Labels: Durability, Reliability, Statistics
>
> Begin building the controlling API in MiNiFi C++. This API will evolve and 
> likely have public and private elements. As development progresses we may 
> want more capabilities. 
> What I want to create as a straw man will be basic control and metrics 
> gathering
> -- Start
> -- Stop
> -- Pause
> -- Gather metrics
>    ** Throughput of of flow components
>    ** Execution time ( run time minus sleep time )
>    ** Memory consumption
> -- Drain repositories
> -- Switch repository types. 
> Better employ update listener within this controlling API



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to