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 */