Team Ai
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes847downloads
WebLogRep.txt532 linesDownload Raw Back to WebLogDemo
1 2#define DOWNLOAD_FILE1          "TempleOSCD.ISO"3#define DOWNLOAD_FILE1_SIZE     170000004#define DOWNLOAD_FILE2          "TempleOSUltra.ISO"5#define DOWNLOAD_FILE2_SIZE      19000006#define DOWNLOAD_FILE3          "TempleOSCDRS.ISO"7#define DOWNLOAD_FILE3_SIZE     160000008#define DOWNLOAD_FILE4          "TempleOSUltraRS.ISO"9#define DOWNLOAD_FILE4_SIZE      160000010 11#define HOURS_MAX               (24*3)12 13class LogStruct14{15  LogStruct *next,*last;16  LogStruct *ip_num_left,*ip_num_right;17  U32 ip_num,code;18  I64 size;19  U8 *file,*link;20  CDate datetime;21};22 23class LinkStruct24{25  LinkStruct *left,*right;26  U8 *link,*file;27  I64 cnt;28};29 30class BlockedStruct31{32  BlockedStruct *next,*last;33  U32 ip_num;34};35 36U0 LogStructDel(LogStruct *tmplg)37{38  Free(tmplg->file);39  Free(tmplg->link);40  Free(tmplg);41}42 43U0 PrsSingleLogFile(LogStruct *head,U8 *name,CDate *_start,CDate *_end)44{45  CDoc *doc=DocRead(name,46        DOCF_PLAIN_TEXT_TABS|DOCF_DBL_DOLLARS|DOCF_NO_CURSOR);47  CDocEntry *doc_e=doc->head.next;48  U8 *src,*src2,*mon_lst=Define("ST_MONTHS");49  LogStruct *tmplg;50  CDateStruct ds;51  I64 i;52  "%$Q\n",name;53  while (doc_e!=doc) {54    if (doc_e->type_u8==DOCT_TEXT) {55      tmplg=CAlloc(sizeof(LogStruct));56      try {57        src=doc_e->tag;58        tmplg->ip_num.u8[3]=Str2I64(src,10,&src);59        if (*src++!='.') throw;60        tmplg->ip_num.u8[2]=Str2I64(src,10,&src);61        if (*src++!='.') throw;62        tmplg->ip_num.u8[1]=Str2I64(src,10,&src);63        if (*src++!='.') throw;64        tmplg->ip_num.u8[0]=Str2I64(src,10,&src);65 66        do if (!*src) throw;67        while (*src++!='[');68        MemSet(&ds,0,sizeof(CDateStruct));69        ds.day_of_mon=Str2I64(src,10,&src);70        if (*src++!='/') throw;71        src2=src;72        do if (!*src2) throw;73        while (*src2++!='/');74        * --src2=0;75        ds.mon=1+LstMatch(src,mon_lst,LMF_IGNORE_CASE);76        src=++src2;77        ds.year=Str2I64(src,10,&src);78        if (*src++!=':') throw;79        ds.hour=Str2I64(src,10,&src);80        if (*src++!=':') throw;81        ds.min=Str2I64(src,10,&src);82        if (*src++!=':') throw;83        ds.sec=Str2I64(src,10,&src);84        tmplg->datetime=Struct2Date(&ds);85        if (*src++!=CH_SPACE) throw;86        i=Str2I64(src,10,&src);87        tmplg->datetime-=(i/100+i%100/60.0)*CDATE_FREQ*60*60;88 89        if (tmplg->datetime<*_start) *_start=tmplg->datetime;90        if (tmplg->datetime>*_end)   *_end  =tmplg->datetime;91 92        do if (!*src) throw;93        while (*src++!=']');94 95        if (*src++!=CH_SPACE) throw;96        if (*src++!='\"') throw;97        if (!StrNCmp(src,"GET ",4)) {98          src2=src+=4;99          do if (!*src2) throw;100          while (*src2++!=CH_SPACE);101          * --src2=0;102          tmplg->file=StrNew(src);103          src=++src2;104 105          do if (!*src) throw;106          while (*src++!='\"');107 108          tmplg->code=Str2I64(src,10,&src);109          if (*src++!=CH_SPACE) throw;110          tmplg->size=Str2I64(src,10,&src);111          if (*src++!=CH_SPACE) throw;112 113          if (*src++!='\"') throw;114          src2=src;115          do if (!*src2) throw;116          while (*src2++!='\"');117          * --src2=0;118          tmplg->link=StrNew(src);119          src=++src2;120 121          QueIns(tmplg,head->last);122        } else if (!StrNCmp(src,"HEAD ",5)) {123          LogStructDel(tmplg);124        } else125          throw;126      } catch {127        Fs->catch_except=TRUE;128        "%$Q\n",doc_e->tag;129        LogStructDel(tmplg);130      }131    }132    doc_e=doc_e->next;133  }134  DocDel(doc);135}136 137LogStruct *PrsLogFiles(U8 *files_find_mask,CDate *_start,CDate *_end)138{139  LogStruct *head=CAlloc(sizeof(LogStruct));140  CDirEntry *tmpde=FilesFind(files_find_mask),*tmpde1=tmpde;141  QueInit(head);142  while (tmpde) {143    PrsSingleLogFile(head,tmpde->full_name,_start,_end);144    tmpde=tmpde->next;145  }146  DirTreeDel(tmpde1);147  return head;148}149 150U0 LogLstDel(LogStruct *head)151{152  LogStruct *tmplg=head->next,*tmplg1;153  while (tmplg!=head) {154    tmplg1=tmplg->next;155    LogStructDel(tmplg);156    tmplg=tmplg1;157  }158}159 160U0 BlockedStructAdd(BlockedStruct *head,U32 ip_num)161{162  BlockedStruct *tmpb=CAlloc(sizeof(BlockedStruct));163  tmpb->ip_num=ip_num;164  QueIns(tmpb,head->last);165}166 167Bool IsBlocked(BlockedStruct *head,U32 ip_num)168{169  BlockedStruct *tmpb=head->next;170  while (tmpb!=head) {171    if (tmpb->ip_num==ip_num)172      return TRUE;173    tmpb=tmpb->next;174  }175  return FALSE;176}177 178U0 BlockIPNuip(LogStruct *head)179{180  BlockedStruct blocked_head;181  LogStruct *tmplg=head->next,*tmplg1;182 183  QueInit(&blocked_head);184 185  BlockedStructAdd(&blocked_head,70<<24+173<<16+110<<8+214);186  BlockedStructAdd(&blocked_head,68<<24+224<<16+130<<8+96);187  BlockedStructAdd(&blocked_head,68<<24+96<<16+100<<8+126);188  BlockedStructAdd(&blocked_head,68<<24+96<<16+110<<8+213);189  BlockedStructAdd(&blocked_head,68<<24+96<<16+242<<8+108);190  BlockedStructAdd(&blocked_head,68<<24+227<<16+61<<8+11);191  BlockedStructAdd(&blocked_head,68<<24+227<<16+61<<8+139);192 193  //pass 1: collect robot lst194  while (tmplg!=head) {195    if (StrIMatch("ROBOT",tmplg->file) &&196          !IsBlocked(&blocked_head,tmplg->ip_num))197      BlockedStructAdd(&blocked_head,tmplg->ip_num);198    tmplg=tmplg->next;199  }200 201  //pass 2: removed blocked ip_nuip202  tmplg=head->next;203  while (tmplg!=head) {204    tmplg1=tmplg->next;205    if (IsBlocked(&blocked_head,tmplg->ip_num)) {206      QueRem(tmplg);207      LogStructDel(tmplg);208    }209    tmplg=tmplg1;210  }211 212  QueDel(&blocked_head);213}214 215Bool IsDownLoad(LogStruct *tmplg)216{217  if (StrMatch(DOWNLOAD_FILE1,tmplg->file)&&tmplg->size>=218        DOWNLOAD_FILE1_SIZE ||219        StrMatch(DOWNLOAD_FILE2,tmplg->file)&&tmplg->size>=220        DOWNLOAD_FILE2_SIZE ||221        StrMatch(DOWNLOAD_FILE3,tmplg->file)&&tmplg->size>=222        DOWNLOAD_FILE3_SIZE ||223        StrMatch(DOWNLOAD_FILE4,tmplg->file)&&tmplg->size>=224        DOWNLOAD_FILE4_SIZE)225    return TRUE;226  else227    return FALSE;228}229 230Bool IsIndex(LogStruct *tmplg)231{232  if (!StrCmp(tmplg->file,"/index.html") ||233        !StrNCmp(tmplg->file+StrLen(tmplg->file)-14,"/TempleOS.html",14) ||234        !StrCmp(tmplg->file,"/"))235    return TRUE;236  else237    return FALSE;238}239 240Bool IPNumTreeAdd(LogStruct **_head,LogStruct *tmplg)241{242  LogStruct *head;243  if (UnusedStk<0x200) {244    PrintErr("Stk Overflow");245    throw;246  }247  if (head=*_head) {248    if (tmplg->ip_num==head->ip_num)249      return TRUE;250    else if (tmplg->ip_num<head->ip_num)251      return IPNumTreeAdd(&head->ip_num_left,tmplg);252    else253      return IPNumTreeAdd(&head->ip_num_right,tmplg);254  } else {255    tmplg->ip_num_left=NULL;256    tmplg->ip_num_right=NULL;257    *_head=tmplg;258    return FALSE;259  }260}261 262U0 LinkTreeAdd(LinkStruct **_root,LogStruct *tmplg)263{264  I64 i;265  LinkStruct *root,*tmplk;266  if (UnusedStk<0x200) {267    PrintErr("Stk Overflow");268    throw;269  }270  if (root=*_root) {271    if (!(i=StrCmp(tmplg->link,root->link)))272      root->cnt++;273    else if (i<0)274      LinkTreeAdd(&root->left,tmplg);275    else276      LinkTreeAdd(&root->right,tmplg);277  } else {278    tmplk=CAlloc(sizeof(LinkStruct));279    tmplk->link=tmplg->link;280    tmplk->cnt=1;281    *_root=tmplk;282  }283}284 285U0 FileTreeAdd(LinkStruct **_root,LogStruct *tmplg)286{287  I64 i;288  LinkStruct *root,*tmplk;289  if (UnusedStk<0x200) {290    PrintErr("Stk Overflow");291    throw;292  }293  if (root=*_root) {294    if (!(i=StrCmp(tmplg->file,root->file)))295      root->cnt++;296    else if (i<0)297      FileTreeAdd(&root->left,tmplg);298    else299      FileTreeAdd(&root->right,tmplg);300  } else {301    tmplk=CAlloc(sizeof(LinkStruct));302    tmplk->file=tmplg->file;303    tmplk->cnt=1;304    *_root=tmplk;305  }306}307 308U0 LinkTreeDel(LinkStruct *root)309{310  if (root) {311    LinkTreeDel(root->left);312    LinkTreeDel(root->right);313    Free(root);314  }315}316 317U0 LinkTreeTraverse(LinkStruct *root)318{319  if (root) {320    LinkTreeTraverse(root->left);321    "%3d:%$Q\n",root->cnt,root->link;322    LinkTreeTraverse(root->right);323  }324}325 326U0 FileTreeDel(LinkStruct *root)327{328  if (root) {329    FileTreeDel(root->left);330    FileTreeDel(root->right);331    Free(root);332  }333}334 335U0 FileTreeTraverse(LinkStruct *root)336{337  if (root) {338    FileTreeTraverse(root->left);339    "%3d:%$Q\n",root->cnt,root->file;340    FileTreeTraverse(root->right);341  }342}343 344U0 DownLoadRep(LogStruct *head,CDate start,CDate end)345{346  I64 i,j,cnt,dups,347        hours_start,hours_end,*hour_cnts,*dup_cnts,348        days_start,days_end,*day_cnts,*day_dup_cnts;349  LogStruct *tmplg=head->next,*dup_head=NULL;350  LinkStruct *link_root=NULL;351  CDateStruct ds;352 353  i=start*24;hours_start=i.u32[1];354  i=end  *24;hours_end  =i.u32[1];355 356  days_start=(start+local_time_offset)>>32;357  days_end  =(end+local_time_offset)>>32;358 359  hour_cnts=CAlloc((hours_end-hours_start+1)*sizeof(I64));360  dup_cnts =CAlloc((hours_end-hours_start+1)*sizeof(I64));361  day_cnts =CAlloc((days_end-days_start+1)*sizeof(I64));362  day_dup_cnts=CAlloc((days_end-days_start+1)*sizeof(I64));363  dups=cnt=0;364  while (tmplg!=head) {365    if (start<=tmplg->datetime<=end && IsDownLoad(tmplg)) {366      i=tmplg->datetime*24;367      hour_cnts[i.u32[1]-hours_start]++;368      day_cnts[(tmplg->datetime+local_time_offset)>>32-days_start]++;369      cnt++;370      if (IPNumTreeAdd(&dup_head,tmplg)) {371        day_dup_cnts[(tmplg->datetime+local_time_offset)>>32-days_start]++;372        dup_cnts[i.u32[1]-hours_start]++;373        dups++;374      }375      LinkTreeAdd(&link_root,tmplg);376    }377    tmplg=tmplg->next;378  }379 380  "\n\nDownloads of /TempleOSCD.ISO\n";381  for (i=start;i<=end;i+=1<<32)382    "%D  Dups:%5d  Total:%5d  Uniques:%5d\n",i,383          day_dup_cnts[(i+local_time_offset)>>32-days_start],384          day_cnts[(i+local_time_offset)>>32-days_start],385          day_cnts[(i+local_time_offset)>>32-days_start]-386          day_dup_cnts[(i+local_time_offset)>>32-days_start];387 388  "\n\nDownloads of /TempleOSCD.ISO\n"389        "'-' is a dup.  '+' is not a dup.\n";390  if (hours_end-hours_start>=HOURS_MAX)391    i=hours_end-HOURS_MAX+1;392  else393    i=hours_start;394  for (;i<=hours_end;i++) {395    Date2Struct(&ds,i<<32/24+local_time_offset);396    "%D %02d: ",i<<32/24,ds.hour;397    for (j=0;j<dup_cnts[i-hours_start];j++)398      '-';399    for (;j<hour_cnts[i-hours_start];j++)400      '+';401    '\n';402  }403  "Total:%d  Dups:%d  Uniques:%d\n",cnt,dups,cnt-dups;404 405  "\n\nDownloads of /TempleOSCD.ISO\n";406  LinkTreeTraverse(link_root);407  '\n';408 409  LinkTreeDel(link_root);410  Free(hour_cnts);411  Free(dup_cnts);412  Free(day_cnts);413  Free(day_dup_cnts);414}415 416U0 FileRep(LogStruct *head,CDate start,CDate end)417{418  LogStruct *tmplg=head->next;419  LinkStruct *file_root=NULL;420  while (tmplg!=head) {421    if (start<=tmplg->datetime<=end)422      FileTreeAdd(&file_root,tmplg);423    tmplg=tmplg->next;424  }425  "\n\nFile Hits\n";426  FileTreeTraverse(file_root);427  '\n';428  FileTreeDel(file_root);429}430 431U0 IndexRep(LogStruct *head,CDate start,CDate end)432{433  I64 i,j,cnt,dups,434        hours_start,hours_end,*hour_cnts,*dup_cnts,435        days_start,days_end,*day_cnts,*day_dup_cnts;436  LogStruct *tmplg=head->next,*dup_head=NULL;437  LinkStruct *link_root=NULL;438  CDateStruct ds;439 440  i=start*24;hours_start=i.u32[1];441  i=end  *24;hours_end  =i.u32[1];442 443  days_start=(start+local_time_offset)>>32;444  days_end  =(end+local_time_offset)>>32;445 446  hour_cnts=CAlloc((hours_end-hours_start+1)*sizeof(I64));447  dup_cnts =CAlloc((hours_end-hours_start+1)*sizeof(I64));448  day_cnts =CAlloc((days_end-days_start+1)*sizeof(I64));449  day_dup_cnts=CAlloc((days_end-days_start+1)*sizeof(I64));450  dups=cnt=0;451  while (tmplg!=head) {452    if (start<=tmplg->datetime<=end && IsIndex(tmplg)) {453      i=tmplg->datetime*24;454      hour_cnts[i.u32[1]-hours_start]++;455      day_cnts[(tmplg->datetime+local_time_offset)>>32-days_start]++;456      cnt++;457      if (IPNumTreeAdd(&dup_head,tmplg)) {458        day_dup_cnts[(tmplg->datetime+local_time_offset)>>32-days_start]++;459        dup_cnts[i.u32[1]-hours_start]++;460        dups++;461      }462      LinkTreeAdd(&link_root,tmplg);463    }464    tmplg=tmplg->next;465  }466 467  "\n\nHits on /index.html\n"468        "'-' is a dup.  '+' is not a dup.\n";469  for (i=start;i<=end;i+=1<<32)470    "%D  Dups:%5d  Total:%5d  Uniques:%5d\n",i,471          day_dup_cnts[(i+local_time_offset)>>32-days_start],472          day_cnts[(i+local_time_offset)>>32-days_start],473          day_cnts[(i+local_time_offset)>>32-days_start]-474          day_dup_cnts[(i+local_time_offset)>>32-days_start];475 476  "\n\nHits on /index.html\n";477  if (hours_end-hours_start>=HOURS_MAX)478    i=hours_end-HOURS_MAX+1;479  else480    i=hours_start;481  for (;i<=hours_end;i++) {482    Date2Struct(&ds,i<<32/24+local_time_offset);483    "%D %02d: ",i<<32/24,ds.hour;484    for (j=0;j<dup_cnts[i-hours_start];j++)485      '-';486    for (;j<hour_cnts[i-hours_start];j++)487      '+';488    '\n';489  }490  "Total:%d  Dups:%d  Uniques:%d\n",cnt,dups,cnt-dups;491 492  "\n\nHits on /index.html\n";493  LinkTreeTraverse(link_root);494  '\n';495 496  LinkTreeDel(link_root);497  Free(hour_cnts);498  Free(dup_cnts);499  Free(day_cnts);500  Free(day_dup_cnts);501}502 503U0 WebLogRep(U8 *mask,U8 *output_filename)504{505  LogStruct *head;506  CDate start=I64_MAX,end=I64_MIN;507 508  DocMax;509 510  head=PrsLogFiles(mask,&start,&end);511  start=GetDate("Start(%D):",start);512  end  =GetDate("End  (%D):",end);513  BlockIPNuip(head);514 515  DocClear;516  "$WW,0$";517  IndexRep(head,start,end);518  FileRep(head,start,end);519  DownLoadRep(head,start,end);520 521  StrCpy(DocPut->filename.name,output_filename);522  DocWrite(DocPut,TRUE);523 524  "$WW,1$";525  LogLstDel(head);526}527 528#if __CMD_LINE__529Cd(__DIR__);;530WebLogRep("*.LOG*","~/DemoWebLog.DD.Z");531#endif532