[ 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)