138 const RequiredKeys = ...;
142 const RequiredKeysWithHost = RequiredKeys +
"host";
151 "tempfile_template":
".tmp.%s.part",
152 "atomic_transfer": False,
156 const OptionalKeys = ...;
160 const AllKeys = RequiredKeysWithHost + keys Defaults + OptionalKeys;
163 const ErrorDelay = 1m;
188 softlist<string> path =
".";
209 bool runflag = False;
414 *
string nlst = ftp.
nlst();
416 throw "FTP-ERROR", sprintf(
"no data returned from NLST command");
418 fl = nlst.split(
"\r\n");
426 list<hash<FtpPollerFileEventInfo>> l = ();
427 foreach string fn in (fl);
434 logDetail(
"%s: polled %d matching file%s", url, l.size(), l.size() == 1 ?
"" :
"s");
494 hash<FtpPollerFileEventInfo>
retrieveFile(hash<FtpPollerFileEventInfo> event);
540 static checkPath(
string path,
string type,
bool write = False);
551 "atomic_transfer": <DataProviderOptionInfo>{
552 "type": AbstractDataProviderType::get(BoolType),
553 "desc":
"Use an atomic transfer mechanism with `local_dir` where remote files are first moved to a "
554 "temporary location and then moved to the final location when they have been fully transferred",
555 "default_value": True,
558 "local_dir": <DataProviderOptionInfo>{
559 "type": AbstractDataProviderType::get(StringOrNothingType),
560 "desc":
"A local directory that will be used to retrieve files",
563 "mask": <DataProviderOptionInfo>{
564 "type": AbstractDataProviderType::get(StringType),
565 "desc":
"The glob mask to use; will be treated as a regex if `regex` is `true`",
566 "default_value":
"*",
569 "minage": <DataProviderOptionInfo>{
570 "type": AbstractDataProviderType::get(IntType),
571 "desc":
"An integer giving the minimum file age in seconds before the file will be polled; this is "
572 "meant to work around non-atomic file transfer operations",
575 "poll_interval": <DataProviderOptionInfo>{
576 "type": AbstractDataProviderType::get(IntType),
577 "desc":
"The interval in seconds between polling for files",
581 "regex": <DataProviderOptionInfo>{
582 "type": AbstractDataProviderType::get(BoolType),
583 "desc":
"If `true` then `mask` is treated as a regular expression instead of a glob pattern",
586 "reopt": <DataProviderOptionInfo>{
587 "type": AbstractDataProviderType::get(IntType),
588 "desc":
"A bitfield of regular expression options (`1` = ignore case, `2` = treat EOL as a regular "
589 "character); ignored if `regex` is not `true`",
592 "sort_desc": <DataProviderOptionInfo>{
593 "type": AbstractDataProviderType::get(BoolType),
594 "desc":
"Sort descending; if not given then an ascending sort is assumed if a `sort_type` is given",
597 "sort_type": <DataProviderOptionInfo>{
598 "type": AbstractDataProviderType::get(StringType),
599 "desc":
"Either `name` or `date` for the data to use for sorting",
602 "url": <DataProviderOptionInfo>{
603 "type": AbstractDataProviderType::get(StringType),
604 "desc":
"A URL for an FTP connection",
650 "type":
"FtpPollerDataProvider",
651 "supports_observable": True,
660 hash<DataProviderInfo> getStaticInfoImpl();
675 "type":
"FtpDelayedPollerDataProvider",
676 "supports_observable": True,
691 hash<DataProviderInfo> getStaticInfoImpl();
702 static Class
cls =
new Class(
"FtpPollerDataProvider");
707 "desc":
"FTP poller data provider factory",
708 "children_can_support_observers": True,
739class EmbeddedFtpPoller :
public FtpPoller {
744 Observable observable;
748 constructor(FtpPollerDataProviderBase provider, hash<auto> options)
752 singleFileEvent(hash<FtpPollerFileEventInfo> event);
755 postSingleFileEvent(hash<FtpPollerFileEventInfo> event);
Event-based data provider for FTP polling events.
Definition: FtpPoller.qm.dox.h:670
const ProviderInfo
Provider info.
Definition: FtpPoller.qm.dox.h:674
constructor(*hash< auto > options)
Creates the object from constructor options.
observersReady()
Called when all observers have been added to the object.
Event-based data provider for FTP polling events.
Definition: FtpPoller.qm.dox.h:546
*string getDesc()
Returns the data provider description.
hash< string, hash< DataProviderMessageInfo > > getEventTypesImpl()
Returns a hash of all supported event types.
constructor(*hash< auto > options)
Creates the object from constructor options.
const ConstructorOptions
Constructor options.
Definition: FtpPoller.qm.dox.h:550
EmbeddedFtpPoller poller
The file poller itself.
Definition: FtpPoller.qm.dox.h:611
The FTP poller data provider factory.
Definition: FtpPoller.qm.dox.h:697
const FactoryInfo
Factory info.
Definition: FtpPoller.qm.dox.h:705
Class getClassImpl()
Returns the class for the data provider object.
static Class cls
Data provider type info.
Definition: FtpPoller.qm.dox.h:702
hash< DataProviderFactoryInfo > getInfoImpl()
Returns static factory information without provider_info.
hash< DataProviderInfo > getProviderInfoImpl()
Returns static provider information.
Event-based data provider for FTP polling events.
Definition: FtpPoller.qm.dox.h:645
const ProviderInfo
Provider info.
Definition: FtpPoller.qm.dox.h:649
constructor(*hash< auto > options)
Creates the object from constructor options.
static checkPath(string path, string type, bool write=False)
checks a path on the local file system
string local_dir
Local directory to transfer file.
Definition: FtpPoller.qm.dox.h:200
const SortNone
no sorting
Definition: FtpPoller.qm.dox.h:132
logInfo(string fmt)
calls the "log_info" closure or call reference with important information
hash< FtpPollerFileEventInfo > getRemoteFileData(hash< FtpPollerFileEventInfo > event)
Retrieves remote file data and adds it to the event data.
int port
port
Definition: FtpPoller.qm.dox.h:173
getStoreFile(string remote_path, string local_path)
retrieves a remote file and stores it to a local path
*code sleep
optional sleep closure
Definition: FtpPoller.qm.dox.h:254
list< hash< FtpPollerFileEventInfo > > getFiles(string subdir, int sort=FtpPoller::SortNone, int order=FtpPoller::OrderAsc)
returns a list of regular file hashes matching any file name mask set for the object
Definition: FtpPoller.qm.dox.h:408
int start()
starts polling in the background; returns the thread ID of the polling thread
*code log_debug
optional debug log closure
Definition: FtpPoller.qm.dox.h:248
stopNoWait()
stops the polling operation, returns immediately
logDetail(string fmt)
calls the "log_detail" closure or call reference with detail information
destructor()
stops the polling operation if in progress and destroys the object
*string mask
file glob name mask (ignored if "regex_mask" also set)
Definition: FtpPoller.qm.dox.h:194
rename(string old, string nnew)
renames a file on the server
int tid
polling tid
Definition: FtpPoller.qm.dox.h:224
*string pass
password
Definition: FtpPoller.qm.dox.h:185
*code start_thread
optional start thread closure
Definition: FtpPoller.qm.dox.h:251
hash< FtpPollerFileEventInfo > retrieveTempFile(hash< FtpPollerFileEventInfo > event)
Retrieves the remote file to local_dir using a temporary file.
constructor(hash< auto > nconf)
creates the FtpPoller object from the configuration hash argument passed
binary getFile(string path)
retrieves a binary file and returns the file's contents
string host
host or address name
Definition: FtpPoller.qm.dox.h:170
*code log_detail
optional detail log closure
Definition: FtpPoller.qm.dox.h:245
*bool fileEvent(list< hash< FtpPollerFileEventInfo > > l)
called for each poll with a list of all files matched before transfer
bool atomic_transfer
Atomic transfer flag for use with local_dir.
Definition: FtpPoller.qm.dox.h:206
abstract postSingleFileEvent(hash< FtpPollerFileEventInfo > event)
called after singleFileEvent() for each matching file individually
string url
url
Definition: FtpPoller.qm.dox.h:179
*code log_info
optional info log closure
Definition: FtpPoller.qm.dox.h:242
*softint minage
minimum file age
Definition: FtpPoller.qm.dox.h:239
hash< FtpPollerFileEventInfo > retrieveFile(hash< FtpPollerFileEventInfo > event)
Retrieves the remote file to local_dir directly.
string tempfile_template
The temporary filename template when local_dir is set.
Definition: FtpPoller.qm.dox.h:203
stop()
stops the polling operation, returns when the polling operation has been stopped
bool runOnce()
runs a single poll (useful for checking for errors inline before starting a background thread)
ftpSleep(softint secs)
sleeps for the specificed number of seconds
run()
starts the polling operation
string getTextFile(string path)
retrieves a text file and returns the file's contents
logDebug(string fmt)
calls the "log_debug" closure or call reference with verbose debugging information
int poll_interval
poll interval in seconds
Definition: FtpPoller.qm.dox.h:197
constructor(Qore::FtpClient n_ftp, hash< auto > nconf)
creates the FtpPoller object from the FtpClient argument and configuration hash argument passed
bool get_files
internal "get files" flag
Definition: FtpPoller.qm.dox.h:212
timeout timeout
timeout in ms
Definition: FtpPoller.qm.dox.h:227
waitStop()
waits indefinitely for the polling operation to stop
int getPollCount()
returns the current poll count
removeFile(string fn)
deletes a file on the server
setMask()
converts a glob mask into a regex
Qore::FtpClient ftp
FtpClient object.
Definition: FtpPoller.qm.dox.h:233
abstract singleFileEvent(hash< FtpPollerFileEventInfo > event)
called for each matching file individually whenever matching files are polled
const OrderAsc
ascending sort order
Definition: FtpPoller.qm.dox.h:127
string user
user
Definition: FtpPoller.qm.dox.h:176
hash< UrlInfo > urlh
url hash
Definition: FtpPoller.qm.dox.h:182
string protocol
Protocol ("ftp" or "ftps")
Definition: FtpPoller.qm.dox.h:167
startInline()
starts the polling operation inline (not in a background thread)
string rootFtpPath
path after connecting to Ftp server
Definition: FtpPoller.qm.dox.h:191
const EVENT_FTP_FILE
FTP file event constant.
Definition: FtpPoller.qm.dox.h:120