blob: 7ba6af4dedea58f84f67802da5acbea380b3adf8 [file] [log] [blame]
/**
* @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();
}
//! 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;
//! 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;
};
#endif