Esempio n. 1
0
void
ArgusClientTimeout ()
{
   struct ArgusAggregatorStruct *agg = ArgusParser->ArgusAggregator;

   while (agg) {
      int i, count;

      if (agg->statusint > 0) {
      if ((count = agg->queue->count) > 0) {
         for (i = 0; i < count; i++) {
            struct ArgusRecordStruct *ns = (void *) ArgusPopQueue(agg->queue, ARGUS_LOCK);
            double nsst = ArgusFetchStartTime(ns);
            double nslt = ArgusFetchLastTime(ns);
            double glt  = (double)(ArgusParser->ArgusGlobalTime.tv_sec * 1.0) + (double)(ArgusParser->ArgusGlobalTime.tv_usec/1000000.0);

            if (agg->statusint && ((glt - nsst) >= agg->statusint)) {
               RaSendArgusRecord(ns);

            } else {
               if (agg->idleint && ((glt - nslt) >= agg->idleint)) {
                  ArgusRemoveHashEntry(&ns->htblhdr);
                  RaSendArgusRecord(ns);
                  ArgusDeleteRecordStruct (ArgusParser, ns);
                  ns = NULL;
               }
            }

            if (ns != NULL)
               ArgusAddToQueue(agg->queue, &ns->qhdr, ARGUS_LOCK);
         }
      }
      } else {
         if (agg->idleint) {
            int done = 0;
            while ((!done) && (agg->queue->count > 0)) {
               struct ArgusRecordStruct *ns = (void *) agg->queue->start;
               double nslt = ArgusFetchLastTime(ns);
               double glt  = (double)(ArgusParser->ArgusGlobalTime.tv_sec * 1.0) + (double)(ArgusParser->ArgusGlobalTime.tv_usec/1000000.0);

               if ((glt - nslt) >= agg->idleint) {
                  ArgusRemoveHashEntry(&ns->htblhdr);
                  RaSendArgusRecord(ns);
                  ArgusDeleteRecordStruct (ArgusParser, ns);
               } else
                  done = 1;
            }
         }
      }

      agg = agg->nxt;
   }

#ifdef ARGUSDEBUG
   ArgusDebug (6, "ArgusClientTimeout()\n");
#endif
}
Esempio n. 2
0
void
RaArgusInputComplete (struct ArgusInput *input)
{
   struct ArgusRecordStruct *nsr;
   struct ArgusWfileStruct *wfile = NULL;
   char buf[MAXSTRLEN];
   int count, label, i, fd;
 
   if (ArgusSorter->ArgusReplaceMode) {
      if (ArgusParser->ArgusWfileList == NULL)
         ArgusParser->ArgusWfileList = ArgusNewList();
 
      if ((count = ArgusSorter->ArgusRecordQueue->count) > 0) {
         if (!(ArgusParser->ArgusRandomSeed))
            srandom(ArgusParser->ArgusRandomSeed);

         srandom (ArgusParser->ArgusRealTime.tv_usec);
         label = random() % 100000;
 
         bzero(buf, sizeof(buf));
         snprintf (buf, MAXSTRLEN, "%s.tmp%d", input->filename, label);
         if ((fd = open(buf, O_CREAT|O_EXCL, input->statbuf.st_mode)) < 0)
            ArgusLog (LOG_ERR, "open %s error: %s", buf, strerror(errno));
 
         close(fd);
 
         if ((wfile = (struct ArgusWfileStruct *) ArgusCalloc (1, sizeof (*wfile))) != NULL) {
            ArgusPushFrontList(ArgusParser->ArgusWfileList, (struct ArgusListRecord *)wfile, ARGUS_NOLOCK);
            wfile->filename  = strdup(buf);
 
         } else
            ArgusLog (LOG_ERR, "setArgusWfile, ArgusCalloc %s", strerror(errno));
 
         ArgusSortQueue (ArgusSorter, ArgusSorter->ArgusRecordQueue);
 
         for (i = 0, count = ArgusSorter->ArgusRecordQueue->count; i < count; i++)
            RaSendArgusRecord ((struct ArgusRecordStruct *)ArgusSorter->ArgusRecordQueue->array[i]);
 
         while ((nsr = (struct ArgusRecordStruct *) ArgusPopQueue(ArgusSorter->ArgusRecordQueue, ARGUS_NOLOCK)) != NULL)
            ArgusDeleteRecordStruct(ArgusParser, nsr);
 
         rename (wfile->filename, input->filename);
         fclose (wfile->fd);
         ArgusDeleteList (ArgusParser->ArgusWfileList, ARGUS_WFILE_LIST);
         ArgusParser->ArgusWfileList = NULL;
 
         if (ArgusParser->Vflag)
            ArgusLog(LOG_INFO, "file %s sorted", input->filename);
      }
   }
}