ROOT logo
// $Id: XrdMonSucker.h 2793 2012-06-23 02:04:58Z matevz $

// Copyright (C) 1999-2008, Matevz Tadel. All rights reserved.
// This file is part of GLED, released under GNU General Public License version 2.
// For the licensing terms see $GLEDSYS/LICENSE or http://www.gnu.org/.

#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;       // X{GS} L{}
  ZLink<UdpPacketSource>  mSource;    // X{GS} L{}
  ZLink<ZHashList>        mOpenFiles; // X{GS} L{}
  GQueue<SUdpPacket>      mUdpQueue;  //!

  Int_t      mSuckPort;     // X{GS} 7 Value()

  TString    mNagiosUser;   // X{GS} 7 Textor()
  TString    mNagiosHost;   // X{GS} 7 Textor()
  TString    mNagiosDomain; // X{GS} 7 Textor()

  TString    mTraceDN;      // X{GS} Ray{TraceRE} 7 Textor()
  TString    mTraceHost;    // X{GS} Ray{TraceRE} 7 Textor()
  TString    mTraceDomain;  // X{GS} Ray{TraceRE} 7 Textor()

  ZLink<ZHashList> mFCReporters; // X{GS} L{}

  Int_t      mUserKeepSec;       // X{GS}   7 Value(-range=>[60,   86400, 1])
  Int_t      mUserDeadSec;       // X{GS}   7 Value(-range=>[300, 604800, 1])
  Int_t      mServDeadSec;       // X{GS}   7 Value(-range=>[300, 604800, 1])
  Int_t      mServIdentSec;      // X{GS}   7 Value(-range=>[60,   86400, 1])
  Int_t      mServIdentCnt;      // X{GS}   7 Value(-range=>[2,  1000000, 1])
  GTime      mLastOldUserCheck;  // X{GRSQ} 7 TimeOut()
  GTime      mLastDeadUserCheck; // X{GRSQ} 7 TimeOut()
  GTime      mLastDeadServCheck; // X{GRSQ} 7 TimeOut()
  GTime      mLastIdentServCheck;// X{GRSQ} 7 TimeOut()

  Long64_t   mPacketCount;       //!X{G}    7 ValOut()
  Long64_t   mSeqIdFailCount;    //!X{G}    7 ValOut()

  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);    // X{E} C{1}
  void RemoveFileCloseReporter(XrdFileCloseReporter* fcr); // X{E} C{1}

  void StartSucker(); // X{Ed} 7 MButt()
  void StopSucker();  // X{Ed} 7 MButt()

  void CleanUpOldUsers();       // X{Ed} 7 MButt()
  void CleanUpDeadUsers();      // X{Ed} 7 MButt()
  void CleanUpDeadServers();    // X{Ed} 7 MButt()
  void CleanUpNoIdentServers(); // X{Ed} 7 MButt()

  void EmitTraceRERay();

#include "XrdMonSucker.h7"
  ClassDef(XrdMonSucker, 1);
}; // endclass XrdMonSucker

#endif
 XrdMonSucker.h:1
 XrdMonSucker.h:2
 XrdMonSucker.h:3
 XrdMonSucker.h:4
 XrdMonSucker.h:5
 XrdMonSucker.h:6
 XrdMonSucker.h:7
 XrdMonSucker.h:8
 XrdMonSucker.h:9
 XrdMonSucker.h:10
 XrdMonSucker.h:11
 XrdMonSucker.h:12
 XrdMonSucker.h:13
 XrdMonSucker.h:14
 XrdMonSucker.h:15
 XrdMonSucker.h:16
 XrdMonSucker.h:17
 XrdMonSucker.h:18
 XrdMonSucker.h:19
 XrdMonSucker.h:20
 XrdMonSucker.h:21
 XrdMonSucker.h:22
 XrdMonSucker.h:23
 XrdMonSucker.h:24
 XrdMonSucker.h:25
 XrdMonSucker.h:26
 XrdMonSucker.h:27
 XrdMonSucker.h:28
 XrdMonSucker.h:29
 XrdMonSucker.h:30
 XrdMonSucker.h:31
 XrdMonSucker.h:32
 XrdMonSucker.h:33
 XrdMonSucker.h:34
 XrdMonSucker.h:35
 XrdMonSucker.h:36
 XrdMonSucker.h:37
 XrdMonSucker.h:38
 XrdMonSucker.h:39
 XrdMonSucker.h:40
 XrdMonSucker.h:41
 XrdMonSucker.h:42
 XrdMonSucker.h:43
 XrdMonSucker.h:44
 XrdMonSucker.h:45
 XrdMonSucker.h:46
 XrdMonSucker.h:47
 XrdMonSucker.h:48
 XrdMonSucker.h:49
 XrdMonSucker.h:50
 XrdMonSucker.h:51
 XrdMonSucker.h:52
 XrdMonSucker.h:53
 XrdMonSucker.h:54
 XrdMonSucker.h:55
 XrdMonSucker.h:56
 XrdMonSucker.h:57
 XrdMonSucker.h:58
 XrdMonSucker.h:59
 XrdMonSucker.h:60
 XrdMonSucker.h:61
 XrdMonSucker.h:62
 XrdMonSucker.h:63
 XrdMonSucker.h:64
 XrdMonSucker.h:65
 XrdMonSucker.h:66
 XrdMonSucker.h:67
 XrdMonSucker.h:68
 XrdMonSucker.h:69
 XrdMonSucker.h:70
 XrdMonSucker.h:71
 XrdMonSucker.h:72
 XrdMonSucker.h:73
 XrdMonSucker.h:74
 XrdMonSucker.h:75
 XrdMonSucker.h:76
 XrdMonSucker.h:77
 XrdMonSucker.h:78
 XrdMonSucker.h:79
 XrdMonSucker.h:80
 XrdMonSucker.h:81
 XrdMonSucker.h:82
 XrdMonSucker.h:83
 XrdMonSucker.h:84
 XrdMonSucker.h:85
 XrdMonSucker.h:86
 XrdMonSucker.h:87
 XrdMonSucker.h:88
 XrdMonSucker.h:89
 XrdMonSucker.h:90
 XrdMonSucker.h:91
 XrdMonSucker.h:92
 XrdMonSucker.h:93
 XrdMonSucker.h:94
 XrdMonSucker.h:95
 XrdMonSucker.h:96
 XrdMonSucker.h:97
 XrdMonSucker.h:98
 XrdMonSucker.h:99
 XrdMonSucker.h:100
 XrdMonSucker.h:101
 XrdMonSucker.h:102
 XrdMonSucker.h:103
 XrdMonSucker.h:104
 XrdMonSucker.h:105
 XrdMonSucker.h:106
 XrdMonSucker.h:107
 XrdMonSucker.h:108
 XrdMonSucker.h:109
 XrdMonSucker.h:110
 XrdMonSucker.h:111
 XrdMonSucker.h:112
 XrdMonSucker.h:113
 XrdMonSucker.h:114
 XrdMonSucker.h:115
 XrdMonSucker.h:116
 XrdMonSucker.h:117
 XrdMonSucker.h:118
 XrdMonSucker.h:119
 XrdMonSucker.h:120
 XrdMonSucker.h:121
 XrdMonSucker.h:122
 XrdMonSucker.h:123
 XrdMonSucker.h:124