#ifndef XrdMon_XrdMonSucker_H
#define XrdMon_XrdMonSucker_H
#include <Glasses/ZNameMap.h>
#include <Stones/SXrdServerId.h>
#include "Gled/GQueue.h"
#include <Gled/GTime.h>
#include "TPRegexp.h"
class XrdServer;
class XrdDomain;
class XrdUser;
class XrdFile;
class XrdFileCloseReporter;
class SUdpPacket;
class UdpPacketSource;
class ZLog;
class ZHashList;
class XrdMonSucker : public ZNameMap
{
MAC_RNR_FRIENDS(XrdMonSucker);
private:
void _init();
protected:
ZLink<ZLog> mLog;
ZLink<UdpPacketSource> mSource;
ZLink<ZHashList> mOpenFiles;
GQueue<SUdpPacket> mUdpQueue;
Int_t mSuckPort;
TString mNagiosUser;
TString mNagiosHost;
TString mNagiosDomain;
TString mTraceDN;
TString mTraceHost;
TString mTraceDomain;
ZLink<ZHashList> mFCReporters;
Int_t mUserKeepSec;
Int_t mUserDeadSec;
Int_t mServDeadSec;
Int_t mServIdentSec;
Int_t mServIdentCnt;
GTime mLastOldUserCheck;
GTime mLastDeadUserCheck;
GTime mLastDeadServCheck;
GTime mLastIdentServCheck;
Long64_t mPacketCount;
Long64_t mSeqIdFailCount;
Int_t mSocket;
GThread *mSuckerThread;
GThread *mCheckerThread;
#ifndef __CINT__
Bool_t bTraceAllNull;
TPMERegexp mTraceDN_RE;
TPMERegexp mTraceHost_RE;
TPMERegexp mTraceDomain_RE;
#endif
#ifndef __CINT__
typedef hash_map<SXrdServerId, XrdServer*, SXrdServerId::Hash> xrd_hash_t;
typedef xrd_hash_t::iterator xrd_hash_i;
xrd_hash_t m_xrd_servers;
GMutex m_xrd_servers_mutex;
#endif
void on_file_open(XrdFile* file);
void on_file_close(XrdFile* file, XrdUser* user, XrdServer* server);
void disconnect_user_and_close_open_files(XrdUser* user, XrdServer* server,
const GTime& time);
void disconnect_server(XrdServer* server, XrdDomain *domain,
const GTime& time);
static void* tl_Suck(XrdMonSucker* s);
void Suck();
static void* tl_Check(XrdMonSucker* s);
void Check();
public:
XrdMonSucker(const Text_t* n="XrdMonSucker", const Text_t* t=0);
virtual ~XrdMonSucker();
virtual void AdEnlightenment();
void AddFileCloseReporter(XrdFileCloseReporter* fcr);
void RemoveFileCloseReporter(XrdFileCloseReporter* fcr);
void StartSucker();
void StopSucker();
void CleanUpOldUsers();
void CleanUpDeadUsers();
void CleanUpDeadServers();
void CleanUpNoIdentServers();
void EmitTraceRERay();
#include "XrdMonSucker.h7"
ClassDef(XrdMonSucker, 1);
};
#endif