commit d858b07972812c62d05232668d5c17b8885843bd
parent 44d79ce612e9cf0518fd866645f40ea72f307daa
Author: Frederic Cambus <fcambus@users.sourceforge.net>
Date: Sun, 21 Jun 2015 22:38:49 +0200
Introducing a 'parseLine' function for tokenizing log lines
Diffstat:
M | src/logswan.c | | | 81 | +++++++++++++++++++++++++++++++++++++++++-------------------------------------- |
1 file changed, 42 insertions(+), 39 deletions(-)
diff --git a/src/logswan.c b/src/logswan.c
@@ -4,7 +4,7 @@
/* https://github.com/fcambus/logswan */
/* */
/* Created: 2015/05/31 */
-/* Last Updated: 2015/06/17 */
+/* Last Updated: 2015/06/21 */
/* */
/* Logswan is released under the BSD 3-Clause license. */
/* See LICENSE file for details. */
@@ -44,11 +44,11 @@ uint64_t hitsIPv6 = 0;
uint64_t countries[255];
struct logLine {
- char *remoteHost;
- char *date;
- char *resource;
- char *statusCode;
- char *objectSize;
+ char *remoteHost;
+ char *date;
+ char *resource;
+ char *statusCode;
+ char *objectSize;
};
struct logLine parsedLine;
@@ -64,6 +64,30 @@ FILE *logFile;
char *endptr;
int getoptFlag;
+void parseLine(struct logLine* parsedLine, char *lineBuffer) {
+ /* Remote host */
+ parsedLine->remoteHost = strtok(lineBuffer, " ");
+
+ /* User-identifier */
+ strtok(NULL, " ");
+
+ /* User ID */
+ strtok(NULL, "[");
+
+ /* Date */
+ parsedLine->date = strtok(NULL, "]");
+
+ /* Requested resource */
+ strtok(NULL, "\"");
+ parsedLine->resource = strtok(NULL, "\"");
+
+ /* HTTP status codes */
+ parsedLine->statusCode = strtok(NULL, " ");
+
+ /* Returned object size */
+ parsedLine->objectSize = strtok(NULL, "\"");
+}
+
int main (int argc, char *argv[]) {
printf("-------------------------------------------------------------------------------\n" \
" Logswan (c) by Frederic Cambus 2015 \n" \
@@ -74,13 +98,13 @@ int main (int argc, char *argv[]) {
return EXIT_FAILURE;
}
- while ((getoptFlag = getopt(argc, argv, "v")) != -1) {
- switch(getoptFlag) {
- case 'v':
- printf(VERSION);
- return 0;
- }
- }
+ while ((getoptFlag = getopt(argc, argv, "v")) != -1) {
+ switch(getoptFlag) {
+ case 'v':
+ printf(VERSION);
+ return 0;
+ }
+ }
/* Starting timer */
begin = clock();
@@ -100,12 +124,10 @@ int main (int argc, char *argv[]) {
}
while (fgets(lineBuffer, LINE_MAX_LENGTH, logFile) != NULL) {
- /* Tokenize line */
-
- /* Remote host */
- //char* token = strtok(lineBuffer, " ");
- parsedLine.remoteHost = strtok(lineBuffer, " ");
+ /* Parse and tokenize line */
+ parseLine(&parsedLine, lineBuffer);
+ /* Detect if remote host is IPv4 or IPv6 */
if (parsedLine.remoteHost) { /* Do not feed NULL tokens to inet_pton */
isIPv4 = inet_pton(AF_INET, parsedLine.remoteHost, &(ipv4.sin_addr));
isIPv6 = inet_pton(AF_INET6, parsedLine.remoteHost, &(ipv6.sin6_addr));
@@ -117,27 +139,8 @@ int main (int argc, char *argv[]) {
countries[GeoIP_id_by_addr(geoip, parsedLine.remoteHost)]++;
}
- /* User-identifier */
- strtok(NULL, " ");
-
- /* User ID */
- strtok(NULL, "[");
-
- /* Date */
- parsedLine.date = strtok(NULL, "]");
-
- /* Requested resource */
- strtok(NULL, "\"");
- parsedLine.resource = strtok(NULL, "\"");
-
- /* HTTP status codes */
- parsedLine.statusCode = strtok(NULL, " ");
-
- /* Returned object size */
- parsedLine.objectSize = strtok(NULL, "\"");
-
/* Increment bandwidth usage */
- if (parsedLine.objectSize) { /* Do not feed NULL tokens to strtol */
+ if (parsedLine.objectSize) { /* Do not feed NULL tokens to strtol */
bandwidth += strtol(parsedLine.objectSize, &endptr, 10);
}
@@ -152,7 +155,7 @@ int main (int argc, char *argv[]) {
}
/* Increment processed lines counter */
- processedLines++;
+ processedLines++;
}
/* Stopping timer */