open-source-search-engine/PingServer.h
2014-11-10 14:45:11 -08:00

187 lines
4.9 KiB
C++

// Matt Wells, Copyright Apr 2004
#ifndef _PINGSERVER_H_
#define _PINGSERVER_H_
#include "gb-include.h"
#include "Hostdb.h"
#include "SafeBuf.h"
//#include "Repair.h"
extern char g_repairMode;
class EmailInfo {
public:
SafeBuf m_toAddress;
SafeBuf m_fromAddress;
SafeBuf m_subject;
SafeBuf m_body;
//char *m_spiderStatusMsg;
SafeBuf m_spiderStatusMsg;
//CollectionRec *m_cr;
collnum_t m_collnum;
char *m_dom; // ref into m_toAddress of the domain in email addr
SafeBuf m_mxDomain; // just the domain with a "gbmxrec-" prepended
void *m_state;
void (* m_callback ) (void *state);
void *m_finalState;
void (* m_finalCallback ) (void *state);
// ip address of MX record for this domain
int32_t m_mxIp;
int32_t m_notifyBlocked;
bool m_inUse;
EmailInfo() {
memset ( this,0,sizeof(EmailInfo) );
};
void reset() {
if ( m_inUse ) { char *xx=NULL;*xx=0; }
if ( m_notifyBlocked ) { char *xx=NULL;*xx=0; }
memset ( this,0,sizeof(EmailInfo) );
};
};
class PingServer {
public:
// . set up our PingServer
// . sets itself from g_conf (our configuration class)
// . returns false on fatal error
// . gets filename from Conf.h class
bool init ( );
void initKernelErrorCheck();
// for dealing with pings
bool registerHandler ( );
void sendPingsToAll();
// ping host #i
void pingHost ( Host *h , uint32_t ip , uint16_t port );
void pingNextHost ( );
// . send notes to EVERYONE that you are shutting down
// . when they get one they'll set your ping to DEAD status
// . returns false if blocked, true otherwise
bool broadcastShutdownNotes ( bool sendEmail ,
void *state ,
void (* callback)(void *state));
// send an email warning that host "h" is dead
//bool sendEmail ( Host *h );
bool sendEmail ( Host *h ,
char *errmsg = NULL ,
bool sendToAdmin = true ,
bool oom = false ,
bool kernelErrors = false ,
bool parmChanged = false ,
bool forceIt = false ,
int32_t mxIP = 0 );
// tapping a host is telling it to store a sync point by calling
// Sync::addOp(OP_SYNCPT,NULL,s_timestamp);
void tapHost ( int32_t hostId ) ;
// are all hosts in repair mode "mode1" or "mode2"?
//bool allHostsInRepairModes1 ( );
//bool allHostsInRepairModes ( char mode1 , char mode2 ) ;
// . update ping time info of this host
// . uses a 10-ping running average
// . "tripTime" is in milliseconds
// . hostId of -1 means unknown (will just return true)
//void stampHost ( int32_t hostId , int32_t tripTime , bool timedOut );
//int32_t m_launched ;
//int32_t m_totalLaunched ;
//int64_t m_startTime;
int32_t m_i;
char m_useShotgun;
//char m_request[14+4+4+4+1+4];
char m_pingProxy;
//char m_reply[9];
// broadcast shutdown info
int32_t m_numRequests ;
int32_t m_numReplies ;
void *m_broadcastState ;
void (*m_broadcastCallback) ( void *state );
int32_t m_numRequests2;
int32_t m_numReplies2;
int32_t m_maxRequests2;
int32_t m_pingSpacer;
int32_t m_callnum;
//char *getReplyBuffer( ) { return m_reply; }
// . these functions used by Repair.cpp
// . we do not tally ourselves when computing m_minRepairMode
int32_t getMinRepairMode ( ) {
// is it us?
if ( g_repairMode < m_minRepairMode ) return g_repairMode;
// m_minRepairMode could be -1 if uninitialized
if ( g_hostdb.getNumHosts() != 1 ) return m_minRepairMode;
return g_repairMode;
};
int32_t getMaxRepairMode ( ) {
// is it us?
if ( g_repairMode > m_maxRepairMode ) return g_repairMode;
// m_maxRepairMode could be -1 if uninitialized
if ( g_hostdb.getNumHosts() != 1 ) return m_maxRepairMode;
return g_repairMode;
};
// we do not tally ourselves when computing m_numHostsInRepairMode7
int32_t getMinRepairModeBesides0 ( ) {
// is it us?
if ( g_repairMode < m_minRepairModeBesides0 &&
g_repairMode != 0 ) return g_repairMode;
// m_minRepairMode could be -1 if uninitialized
if ( g_hostdb.getNumHosts() != 1 )
return m_minRepairModeBesides0;
return g_repairMode;
};
void sendEmailMsg ( int32_t *lastTimeStamp , char *msg ) ;
void setMinRepairMode ( Host *h ) ;
// set by setMinRepairMode() function
int32_t m_minRepairMode;
int32_t m_maxRepairMode;
int32_t m_minRepairModeBesides0;
Host *m_minRepairModeHost;
Host *m_maxRepairModeHost;
Host *m_minRepairModeBesides0Host;
int32_t m_currentPing ;
int32_t m_bestPing ;
time_t m_bestPingDate ;
// some cluster stats
int32_t m_numHostsWithForeignRecs;
int32_t m_numHostsDead;
int32_t m_hostsConfInAgreement;
bool m_hostsConfInDisagreement;
};
extern class PingServer g_pingServer;
// . returns false if blocked, true otherwise
// . use this for sending generic emails
bool sendEmail ( class EmailInfo *ei ) ;
// use mailchimp's mandrill email http api
bool sendEmailThroughMandrill ( class EmailInfo *ei ) ;
// send email and webhook notification
bool sendNotification ( class EmailInfo *ei );
#endif