]> git.ipfire.org Git - thirdparty/sarg.git/commitdiff
Optimize time range filtering
authorFrédéric Marchal <fmarchal@users.sourceforge.net>
Sat, 20 Nov 2010 22:06:27 +0000 (22:06 +0000)
committerFrédéric Marchal <fmarchal@users.sourceforge.net>
Sat, 20 Nov 2010 22:06:27 +0000 (22:06 +0000)
Filtering of the log entries based on a time or time range passed with
command line option -t is done using numerical values instead of
strings.

log.c

diff --git a/log.c b/log.c
index bfc6f43848628e3fcda61c0e664c5d4da49f6f1b..e5868ed20231660e2e12765d18ba5b7d5cc260b5 100644 (file)
--- a/log.c
+++ b/log.c
@@ -95,8 +95,8 @@ int main(int argc,char *argv[])
    char date[255];
    char arq[255];
    char arq_log[255];
-   char hm[15], hmf[15], hmr[15];
-   int  chm=0;
+   int hm, hmf, hmr;
+   char hm_str[15];
    char uagent[MAXLEN];
    char hexclude[MAXLEN];
    char csort[MAXLEN];
@@ -304,8 +304,8 @@ int main(int argc,char *argv[])
    uagent[0]='\0';
    hexclude[0]='\0';
    addr[0]='\0';
-   hm[0]='\0';
-   hmf[0]='\0';
+   hm=-1;
+   hmf=-1;
    site[0]='\0';
    outdir[0]='\0';
    elap[0]='\0';
@@ -438,28 +438,25 @@ int main(int argc,char *argv[])
             break;
          case 't':
          {
-            int h,m;
+            int h1,m1,h2,m2;
 
             if(strstr(optarg,"-") == 0) {
-              strcpy(hm,optarg);
-              strcpy(hmf,optarg);
+               if(sscanf(optarg,"%d:%d",&h1,&m1)!=2) {
+                  debuga(_("Time period passed on the command line with option -t must be MM:SS\n"));
+                  exit(EXIT_FAILURE);
+               }
+               hm=h1*100+m1;
+               hmf=hm;
+               snprintf(hm_str,sizeof(hm_str),"%02d:%02d",h1,m1);
             } else {
-               getword_start(&gwarea,optarg);
-               if (getword(hm,sizeof(hm),&gwarea,'-')<0 || getword(hmf,sizeof(hmf),&gwarea,'\0')<0) {
-                  debuga(_("The time range passed on the command line with option -t is invalid\n"));
+               if(sscanf(optarg,"%d:%d-%d:%d",&h1,&m1,&h2,&m2)!=4) {
+                  debuga(_("Time range passed on the command line with option -t must be MM:SS-MM:SS\n"));
                   exit(EXIT_FAILURE);
                }
+               hm=h1*100+m1;
+               hmf=h2*100+m2;
+               snprintf(hm_str,sizeof(hm_str),"%02d:%02d-%02d:%02d",h1,m1,h2,m2);
             }
-            if(sscanf(hm,"%d:%d",&h,&m)!=2) {
-               debuga(_("Time period must be MM or MM:SS. Exit\n"));
-               exit(EXIT_FAILURE);
-            }
-            sprintf(hm,"%02d%02d",h,m);
-            if(sscanf(hmf,"%d:%d",&h,&m)!=2) {
-               debuga(_("Time period must be MM or MM:SS. Exit\n"));
-               exit(EXIT_FAILURE);
-            }
-            sprintf(hmf,"%02d%02d",h,m);
             break;
          }
          case 'u':
@@ -664,7 +661,7 @@ int main(int argc,char *argv[])
       debuga(_("                      Output dir (-o) = %s\n"),outdir);
       debuga(_("Use Ip Address instead of userid (-p) = %s\n"),(UserIp) ? _("Yes") : _("No"));
       debuga(_("                   Accessed site (-s) = %s\n"),site);
-      debuga(_("                            Time (-t) = %s\n"),hm);
+      debuga(_("                            Time (-t) = %s\n"),hm_str);
       debuga(_("                            User (-u) = %s\n"),us);
       debuga(_("                   Temporary dir (-w) = %s\n"),tmp);
       debuga(_("                  Debug messages (-x) = %s\n"),(debug) ? _("Yes") : _("No"));
@@ -695,7 +692,7 @@ int main(int argc,char *argv[])
       printf(_("                      Output dir (-o) = %s\n"),outdir);
       printf(_("Use Ip Address instead of userid (-p) = %s\n"),(UserIp) ? _("Yes") : _("No"));
       printf(_("                   Accessed site (-s) = %s\n"),site);
-      printf(_("                            Time (-t) = %s\n"),hm);
+      printf(_("                            Time (-t) = %s\n"),hm_str);
       printf(_("                            User (-u) = %s\n"),us);
       printf(_("                   Temporary dir (-w) = %s\n"),tmp);
       printf(_("                  Debug messages (-x) = %s\n"),(debug) ? _("Yes") : _("No"));
@@ -1330,21 +1327,9 @@ int main(int argc,char *argv[])
             }
          }
 
-         if(hm[0] != '\0') {
-            hmr[0]='\0';
-            chm++;
-            getword_start(&gwarea,hora);
-            while(chm) {
-               if (getword_multisep(warea,sizeof(warea),&gwarea,':')<0){
-                  debuga(_("Maybe you have a broken time in your %s file\n"),arq);
-                  exit(EXIT_FAILURE);
-               }
-               strncat(hmr,warea,2);
-               chm--;
-            }
-            strncat(hmr,gwarea.current,2);
-
-            if(atoi(hmr) < atoi(hm) || atoi(hmr) > atoi(hmf)) continue;
+         if(hm >= 0 && hmf >= 0) {
+            hmr=t->tm_hour*100+t->tm_min;
+            if(hmr < hm || hmr > hmf) continue;
          }
 
          if(site[0] != '\0'){