647d004c04
collection before email alert reply comes back. then it comes back to a delete collrec and cores.
188 lines
5.0 KiB
C++
188 lines
5.0 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;
|
|
class CollectionRec *m_collRec;
|
|
//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
|
|
|