35 #include <sys/types.h>
52 char *XrdFrmMonitor::Dest1 = 0;
53 int XrdFrmMonitor::monMode1 = 0;
55 char *XrdFrmMonitor::Dest2 = 0;
56 int XrdFrmMonitor::monMode2 = 0;
59 int XrdFrmMonitor::isEnabled = 0;
60 char *XrdFrmMonitor::idRec = 0;
61 int XrdFrmMonitor::idLen = 0;
62 int XrdFrmMonitor::sidSize = 0;
63 char *XrdFrmMonitor::sidName = 0;
64 int XrdFrmMonitor::idTime = 3600;
90 if (dest1 && !mode1) {free(dest1); dest1 = 0; mode1 = 0;}
91 if (dest2 && !mode2) {free(dest2); dest2 = 0; mode2 = 0;}
96 {mode1 = (dest1 = dest2) ? mode2 : 0;
102 if (Dest1) free(Dest1);
103 Dest1 = dest1; monMode1 = mode1;
104 if (Dest2) free(Dest2);
105 Dest2 = dest2; monMode2 = mode2;
115 isEnabled = (Dest1 == 0 && Dest2 == 0 ? 0 : 1);
125 do{
Send(-1, idRec, idLen);
138 const char *etext = 0;
145 (iName ? iName :
"anon"), 0);
146 sidSize = strlen(sidName);
151 if (!isEnabled)
return 1;
155 #if defined(__GNUC__) && __GNUC__ >= 12
156 #pragma GCC diagnostic push
157 #pragma GCC diagnostic ignored "-Warray-bounds"
162 idRec = (
char *)malloc(idLen+1);
167 strcpy(mP->
info, iBuff);
168 #if defined(__GNUC__) && __GNUC__ >= 12
169 #pragma GCC diagnostic pop
176 {
Say.
Emsg(
"Monitor",
"setup monitor collector;", etext);
185 {
Say.
Emsg(
"Monitor",
"setup monitor collector;", etext);
196 {
Say.
Emsg(
"Init", retc,
"create monitor ident thread");
return 0;}
211 const char *colonP, *atP;
217 if ((colonP = index(uname,
':')) && (atP = index(colonP+1,
'@')))
218 {
int n = colonP - uname + 1;
219 strncpy(uBuff, uname, n);
220 strcpy(uBuff+n, sidName);
221 strcpy(uBuff+n+sidSize, atP);
222 }
else strcpy(uBuff, uname);
227 strcpy(map.
info, uBuff);
228 size = strlen(uBuff);
230 {*(map.
info+size) =
'\n';
232 size = size + strlen(path) + 1;
249 fillHeader(&map.
hdr, code, size);
251 Send(montype, (
void *)&map, size);
266 const char id,
int size)
274 myseq = 0x00ff & (seq++);
281 hdr->
plen = htons(
static_cast<uint16_t
>(size));
289 int XrdFrmMonitor::Send(
int monMode,
void *buff,
int blen)
295 if (monMode & monMode1 && InetDest1)
296 {rc1 = InetDest1->Send((
char *)buff, blen);
297 DEBUG(blen <<
" bytes sent to " <<Dest1 <<
" rc=" <<rc1);
300 if (monMode & monMode2 && InetDest2)
301 {rc2 = InetDest2->Send((
char *)buff, blen);
302 DEBUG(blen <<
" bytes sent to " <<Dest2 <<
" rc=" <<rc2);
307 return (rc1 ? rc1 : rc2);
void * XrdFrmMonitorID(void *parg)
const kXR_char XROOTD_MON_MAPIDNT
const kXR_char XROOTD_MON_MAPXFER
const kXR_char XROOTD_MON_MAPMIGR
const kXR_char XROOTD_MON_MAPSTAG
const kXR_char XROOTD_MON_MAPPURG
static kXR_unt32 Map(char code, const char *uname, const char *path)
static int Init(const char *iHost, const char *iProg, const char *iName)
static void Defaults(char *dest1, int m1, char *dest2, int m2, int iTime)
static char * Ident(long long &mySID, char *iBuff, int iBlen, const char *iHost, const char *iProg, const char *iName, int Port)
int Emsg(const char *esfx, int ecode, const char *text1, const char *text2=0)
static int Run(pthread_t *, void *(*proc)(void *), void *arg, int opts=0, const char *desc=0)
static void Snooze(int seconds)
ssize_t Send(int fd, KernelBuffer &buffer)