blob: 125ebf339755401b4515866fe8bd397f6a35e047 [file] [log] [blame]
/**
* @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