4898794edd81be5285ea6e544acbedeaeb31bf78 max Tue Nov 23 08:10:57 2021 -0800 Fixing pointers to README file for license in all source code files. refs #27614 diff --git src/hg/logCrawl/accessLogMerge/accessLogMerge.c src/hg/logCrawl/accessLogMerge/accessLogMerge.c index 65eb31f..c4f72c3 100644 --- src/hg/logCrawl/accessLogMerge/accessLogMerge.c +++ src/hg/logCrawl/accessLogMerge/accessLogMerge.c @@ -1,130 +1,130 @@ /* accessLogMerge - Merge multiple time sorted apache access logs into a single time sorted log.. */ /* Copyright (C) 2011 The Regents of the University of California - * See README in this or parent directory for licensing information. */ + * See kent/LICENSE or http://genome.ucsc.edu/license/ for licensing information. */ #include "common.h" #include "linefile.h" #include "hash.h" #include "options.h" void usage() /* Explain usage and exit. */ { errAbort( "accessLogMerge - Merge multiple time sorted apache access logs into a single time sorted log.\n" "usage:\n" " accessLogMerge log1 log2 ... logN\n" "Output goes to stdout.\n" "options:\n" " -xxx=XXX\n" ); } boolean addSource = FALSE; static struct optionSpec options[] = { {"addSource", OPTION_BOOLEAN}, {NULL, 0}, }; time_t stampFromLine(struct lineFile *lf, char *line) /* Figure out time stamp corresponding to apache log line. */ { char *s = strchr(line, '['); if (s == NULL) { warn("Couldn't find time stamp in %s\nline %d of %s", line, lf->lineIx, lf->fileName); return 0; } struct tm tm; char *res = strptime(s+1, "%d/%b/%Y:%T", &tm); if (res == NULL) { warn("Badly formatted time stamp in %s\nline %d of %s", line, lf->lineIx, lf->fileName); return 0; } return mktime(&tm); } void accessLogMerge(int logCount, char *logNames[], char *outFile) /* accessLogMerge - Merge multiple time sorted apache access logs into a single time sorted log.. */ { FILE *out = mustOpen(outFile, "w"); struct lineFile *lfs[logCount]; char *lines[logCount]; time_t stamps[logCount]; int i; for (i=0; i<logCount; ++i) { lfs[i] = lineFileOpen(logNames[i], TRUE); lines[i] = NULL; stamps[i] = 0; } for (;;) { /* Fetch next line from all open files. End program if all files closed. */ boolean gotAny = FALSE; for (i=0; i<logCount; ++i) { struct lineFile *lf = lfs[i]; if (lf != NULL && lines[i] == NULL) { char *line; if (lineFileNextReal(lf, &line)) { lines[i] = line; stamps[i] = stampFromLine(lf, line); gotAny = TRUE; /* Set here so that even error lines make things keep going. */ } else { lineFileClose(&lfs[i]); stamps[i] = 0; } } } /* Figure out minimum time stamp. */ time_t minTime = 0; for (i=0; i<logCount; ++i) { time_t stamp = stamps[i]; if (stamp != 0) { if (minTime == 0 || stamp < minTime) minTime = stamp; gotAny = TRUE; } } if (!gotAny) break; /* Output all that match stamp. */ for (i=0; i<logCount; ++i) { if (stamps[i] == minTime) { fprintf(out, "%s", lines[i]); if (addSource) fprintf(out, " %s", logNames[i]); fputc('\n', out); lines[i] = NULL; } } } carefulClose(&out); } int main(int argc, char *argv[]) /* Process command line. */ { optionInit(&argc, argv, options); if (argc < 3) usage(); addSource = optionExists("addSource"); accessLogMerge(argc-2, argv+1, argv[argc-1]); return 0; }