default: all
-all compile: ${PLUGIN_LIB}
+all compile: ${PLUGIN_LIB}
${PLUGIN_LIB}: ${PLUGIN_LOBJS}
${SOLINK} -o $@ ${PLUGIN_LOBJS} ${EXT_LIB}
return 0;
}
me->first_event_sent = 0;
+ eq->last_connected= time(NULL);
return 1;
}
}
event_queue_remove(eq, me);
me->first_event_sent = 1;
+ eq->last_sent = time(NULL);
}
edg_wll_FreeContext(context);
return 1;
int max_len; /* max queue length */
int cur_len; /* current length */
int throttling; /* event insertion suspend flag */
+ time_t last_connected; /* time of the last successful connection */
+ time_t last_sent; /* time the last event was sent */
/* delivery methods */
int (*event_queue_connect)(struct event_queue *, struct queue_thread *);
int (*event_queue_send)(struct event_queue *, struct queue_thread *);
s[4] == '\0')
continue;
+ /* skip all statistic files */
+ if((s=strstr(entry->d_name, ".stat")) != NULL &&
+ s[5] == '\0')
+ continue;
+
s = malloc(strlen(dir) + strlen(entry->d_name) + 2);
if(s == NULL) {
free(dir);
#include <errno.h>
#include <signal.h>
#include <unistd.h>
+#include <sys/param.h>
#include "interlogd.h"
return (msg->expires > 0) && (msg->expires < *t);
}
+extern char *file_prefix;
+
+static
+void
+event_queue_write_stat(struct event_queue *eq) {
+ FILE *statfile;
+ char fn[MAXPATHLEN];
+
+ snprintf(fn, sizeof(fn), "%s.%s.stat", file_prefix, eq->dest_name);
+ statfile = fopen(fn, "w");
+ if(NULL == statfile) {
+ glite_common_log(IL_LOG_CATEGORY, LOG_PRIORITY_WARN,
+ "Error opening destination stat file %s: %s",
+ fn, strerror(errno));
+ return;
+ }
+ if(fprintf(statfile, "last_connected=%ld\nlast_sent=%ld\n",
+ eq->last_connected,
+ eq->last_sent) < 0) {
+ glite_common_log(IL_LOG_CATEGORY, LOG_PRIORITY_WARN,
+ "Error writing destination statistics into %s: %s",
+ fn, strerror(errno));
+ }
+ fclose(statfile);
+}
+
+
static
void *
queue_thread(void *q)
eq->dest);
}
}
+ event_queue_write_stat(eq);
}
#if defined(INTERLOGD_HANDLE_CMD) && defined(INTERLOGD_FLUSH)
}
#endif
+ eq->last_connected = time(NULL);
return(1);
}
case LB_NOMEM:
/* NOT USED: case LB_SYS: */
/* NOT USED: case LB_AUTH: */
- case LB_PERM:
- case LB_DBERR:
+
+ case LB_DBERR:
/* non fatal errors (for us) */
me->timeout = TIMEOUT;
return(0);
case LB_OK:
/* event succesfully delivered */
+ case LB_PERM:
default: /* LB_PROTO */
/* the event was not accepted by the server */
/* update the event pointer */
event_queue_remove(eq, me);
me->first_event_sent = 1;
+ eq->last_sent = time(NULL);
break;
} /* switch */