Subversion Repositories wimsdev

Rev

Rev 8147 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. /*    Copyright (C) 1998-2003 XIAO, Gang of Universite de Nice - Sophia Antipolis
  2.  *
  3.  *  This program is free software; you can redistribute it and/or modify
  4.  *  it under the terms of the GNU General Public License as published by
  5.  *  the Free Software Foundation; either version 2 of the License, or
  6.  *  (at your option) any later version.
  7.  *
  8.  *  This program is distributed in the hope that it will be useful,
  9.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11.  *  GNU General Public License for more details.
  12.  *
  13.  *  You should have received a copy of the GNU General Public License
  14.  *  along with this program; if not, write to the Free Software
  15.  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  16.  */
  17.  
  18. /* This is an internal program,
  19.  * used to show statistics of frequentation, module by module. */
  20.  
  21. #include "../Lib/libwims.h"
  22.  
  23. #define MAX_FLEN 102400
  24. #define MAX_LANGS MAX_LANGUAGES /*#define MAX_LANGS   16*/
  25. char mbuf[MAX_LINELEN+1];
  26. char mbase[MAX_LINELEN+1];
  27. char indexfile[MAX_LINELEN+1];
  28. char modify_time[1024];
  29. char vbuf[MAX_LINELEN+1];
  30. char *tlist, *mlist, *slist; /* fields, modules, sqled modules */
  31. char *langs; /* site languages */
  32. char language[MAX_LANGS][4];
  33.  
  34. int start,end,mstart,mend,modtype,reqs,sites;
  35. int languagecnt=0;
  36. int count[MAX_LANGS],tcount;
  37.  
  38. void getlangs(void)
  39. {
  40.     char *p;
  41.  
  42.     langs=getenv("w_wims_site_languages"); if(langs==NULL) langs="";
  43.     for(p=langs;strlen(p)>=2 && languagecnt<MAX_LANGS;
  44.       p=find_word_start(find_word_end(p))) {
  45.       if(!isalpha(*p) || !isalpha(*(p+1))) continue;
  46.       memmove(language[languagecnt],p,2);
  47.       language[languagecnt][2]=0;
  48.       languagecnt++;
  49.     }
  50. }
  51.  
  52. int onefile(char *name)
  53. {
  54.     FILE *f;
  55.     char *buf, *p, *pe, *p2, *p3;
  56.     long int len,len2;
  57.     int s,i,j,k,t,u;
  58.  
  59.     f=fopen(name,"r"); if(f==NULL) return 0;
  60.     fseek(f,0,SEEK_END);len=ftell(f);
  61.     if(len<=0 || len>MAX_FLEN) return 0;
  62.     fseek(f,0,SEEK_SET);buf=xmalloc(len+1);
  63.     len2=fread(buf,1,len,f);
  64.     if(len2<=0 || len2>len) {
  65.       free(buf); return 0;
  66.     }
  67.     buf[len2]=0; fclose(f); s=t=u=0;
  68.     for(p=buf;p!=NULL && p<buf+len2;p=pe) {
  69.       p=find_word_start(p); pe=strchr(p,'\n');
  70.       if(pe!=NULL) *pe++=0;
  71.       p2=find_word_end(p);
  72.       if(*p2!=0) *p2++=0;
  73.       p2=find_word_start(p2);
  74.       p3=find_word_start(find_word_end(p2));
  75.       *find_word_end(p3)=0;
  76.       if(*p!=0) i=atoi(p); else i=0;
  77.       if(*p2!=0) j=atoi(p2); else j=0;
  78.       if(*p3!=0) k=atoi(p3); else k=0;
  79.       if(t==0 && i<mstart) mstart=i;
  80.       if(i>=start && i<=end) {s+=j; u+=k;}
  81.       t=1;
  82.     }
  83.     reqs+=s; sites+=u;
  84.     if(modtype==3) return u;
  85.     else return s;
  86. }
  87.  
  88. void onemodule(char *mod)
  89. {
  90.     char ibuf[MAX_LINELEN+5];
  91.     int i,k,sum;
  92.  
  93.     sum=reqs=sites=0;mstart=end;
  94.     k=onefile(mod);sum+=k;
  95.     for(i=0;i<languagecnt;i++) {
  96.       snprintf(ibuf,sizeof(ibuf),"%s.%s",mod,language[i]);
  97.       k=onefile(ibuf);sum+=k;
  98.       count[i]=k;
  99.     }
  100.     if(modtype!=2) tcount=sum;
  101.     else {
  102.       if(sites>0) tcount=(double) (100*reqs/sites+0.5);
  103.       else tcount=0;
  104.     }
  105. }
  106.  
  107. int main()
  108. {
  109.     char mmbuf[MAX_LINELEN+1];
  110.     char *p1, *p2, *pp;
  111.     int i;
  112.  
  113.     mlist=getenv("ll");
  114.     if(mlist==NULL || *mlist==0) return 1;
  115.     pp=getenv("start"); if(pp==NULL || *pp==0) return 1;
  116.     start=atoi(pp);
  117.     pp=getenv("end"); if(pp==NULL || *pp==0) return 1;
  118.     end=atoi(pp);
  119.     pp=getenv("w_module_type");
  120.     if(pp==NULL || (*pp!='2' && *pp!='3')) modtype=1; else modtype=*pp-'0';
  121.     getlangs();
  122.     for(p1=find_word_start(mlist);*p1!=0 && !isspace(*p1); p1=find_word_start(p2)) {
  123.       p2=find_word_end(p1);
  124.       if(p2-p1>MAX_LINELEN) continue;
  125.       memmove(mmbuf,p1,p2-p1);mmbuf[p2-p1]=0;
  126.       onemodule(mmbuf);
  127.       printf("%d %d %s",tcount,mstart,mmbuf);
  128.       for(i=0;i<languagecnt;i++) printf(" %d",count[i]);
  129.       printf("\n");
  130.     }
  131.     return 0;
  132. }
  133.  
  134.