home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Spezial / SPEZIAL2_97.zip / SPEZIAL2_97.iso / ANWEND / ONLINE / SREFV12J / SREFAST3.CMD < prev    next >
OS/2 REXX Batch file  |  1997-07-22  |  14KB  |  440 lines

  1. /* modify the srefast configuration file */
  2.  
  3.  
  4. parse arg  ddir, tempfile, reqstrg,list0,verb ,uri,user, ,
  5.           basedir ,workdir,privset,enmadd,transaction,verbose, ,
  6.          servername,host_nickname,homedir
  7.  
  8. if verb="" then do
  9.     say " This SRE-Filter configurator is NOT meant to be run from the command line! "
  10.    exit
  11. end  /* Do */
  12. /* chekc for needed_privs: superuser */
  13.  
  14. NO_REM=VALUE('SREF_NO_REMOTE_CONFIG',,'OS2ENVIRONMENT')
  15.  
  16.  
  17. if wordpos('SUPERUSER',upper(privset))=0 | no_rem=2 then do
  18.     'header add WWW-Authenticate: Basic Realm=<SREFAST>'  /* challenge */
  19.      foo=sref_response('unauth', "You do not have configuration rights ",tempfile,servername)
  20.      return foo
  21. end
  22.  
  23. port=extract('serverport')
  24. optslist=' '
  25. list=translate(list0,' ','+')
  26.  
  27. do until list=""
  28.    parse var list a1 '&' list
  29.    parse var a1 avar '=' aval ; avar=upper(avar)
  30.    optslist=optslist||' '||avar
  31.    aa='!'||avar
  32.    opts.aa=aval
  33. end /* do */
  34.  
  35.  
  36. /* which configuration header ? */
  37.  
  38. select
  39.   when wordpos('ADDONE',optslist)>0 then  call do_addone  /* add to list */
  40.   when wordpos('REMOVEONE',optslist)>0  then call do_removeone
  41.   when wordpos('REMOVETWO',optslist)>0  then call do_removetwo
  42.   when wordpos('VIEWCONFIG0',optslist)>0  then call do_viewconfig0
  43.   when wordpos('VIEWCONFIG',optslist)>0 then call do_viewconfig
  44.   when wordpos('REFRESH',optslist)>0 then call do_refresh
  45.  
  46.   otherwise
  47.      string ' Bad option sent to SREFAST ' optslist
  48. end
  49.  
  50. return 0
  51.  
  52. /*****************************/
  53. /*  remove an entry, step2 */
  54. do_removetwo:
  55.  
  56. foo=get_initfast('Removing an Entry')
  57. if foo=0 then return 0
  58. igoo0=doit.0
  59. igoo=0
  60. do mm=1 to doit.0
  61.    aa='V_'||mm
  62.    if wordpos(aa,optslist)>0 then iterate  /* remove this one */
  63.    igoo=igoo+1
  64.    coo=cvcopy(doit.mm,sidx.igoo)
  65. end /* do */
  66. sidx.0=igoo
  67.  
  68. call lineout tempfile,'<html><head><title>SREFAST: Removing  Entries </title></head>'
  69. call lineout tempfile,'<BODY><H2>Removing entries from the SREFAST configuration file </h2> '
  70.  
  71. foo=write_cfg(cfgfile)
  72. if foo=0 then
  73.    call lineout tempfile,' <br> <b> Error writing entries (after deletion) </b>'
  74. else
  75.    call lineout tempfile, '<p>' igoo ' of ' igoo0 ' entries retained in SREFAST configuration file '
  76. call lineout tempfile,'</body></html>'
  77. call lineout tempfile
  78. 'FILE ERASE type text/html name ' tempfile
  79.  return 0
  80.  
  81.  
  82. /*****************************/
  83. /*  remove an entry */
  84. do_removeone:
  85.  
  86. foo=get_initfast('Remove Entry')
  87. if foo=0 then return 0
  88.  
  89. call lineout tempfile,'<html><head><title>SREFAST: Remove Entry </title></head>'
  90. call lineout tempfile,'<BODY><H2>Remove an entry from the SREFAST configuration file </h2> '
  91. call lineout tempfile,'<FORM ACTION="/srefast3" METHOD="POST">'
  92. call lineout tempfile,'<input type="hidden" name="REMOVETWO" value=1>'
  93. call lineout tempfile,' Select entries to remove: <ol>'
  94.  
  95. do ii=1 to doit.0
  96.    call lineout tempfile,'<LI> '
  97.    if  symbol('doit.'||ii||'.!NODO')="VAR" & doit.ii.!nodo=1 then
  98.         call lineout tempfile,' <U>NODO : </u> '
  99.     call lineout tempfile,'<INPUT TYPE="CHECKBOX" NAME="V_'||ii'" VALUE=1> '
  100.  
  101.    call lineout tempfile,doit.ii.!sel
  102.    if  symbol('doit.'||ii||'.!NODO')="VAR" & doit.ii.!nodo=1 then
  103.         call lineout tempfile,' <U>NODO : </u> '
  104.    if  symbol('doit.'||ii||'.!SERVER')="VAR" then  do
  105.         if doit.ii.!server<>' ' then call lineout tempfile,' <em> (for server <u>: 'doit.ii.!server '</u>) </em> '
  106.     end
  107. end /* do */
  108.  
  109. call lineout tempfile,'</ol><INPUT TYPE="submit" VALUE="Submit"></form></body></html>'
  110. call lineout tempfile
  111. foo=stream(tempfile,'c','close')
  112. 'FILE ERASE type text/html name ' tempfile
  113. return 0
  114.  
  115. /*****************************/
  116. /*  show working configuration file */
  117. do_viewconfig:
  118.  
  119. temp_dir=get_value("TEMPDATA_DIR")
  120. temp_dir=strip(TEMP_DIR,'t','\')||'\'
  121.  
  122. isfast=get_value('SREFAST')
  123.  
  124. if isfast<>1 then do
  125.     ' STRING SREFAST is not currently in use; working configuration file is not in use '
  126.    return 0
  127. end  /* Do */
  128.  
  129.  
  130. idxfile=temp_dir||'_FSTINDX.'||port
  131.  
  132. if stream(idxfile,'c','query exists')='' then do
  133.    'STRING SREFAST working configuration file (' idxfile ') is not available. Try again in a minute. '
  134.    return 0
  135. end
  136.  
  137. foo=cvread(idxfile,sidx)
  138. if foo=0 then  do
  139.    'STRING SREFAST configuration file (' idxfile ') was empty '
  140.    return 0
  141. end
  142.  
  143. oo= write_cfg(tempfile,1)
  144. oo=stream(tempfile,'c','close')
  145. 'FILE ERASE TYPE text/html name ' tempfile
  146.  
  147. return 0
  148.  
  149. /*****************************/
  150. /*  show configuration file */
  151. do_viewconfig0:
  152.  
  153. foo=get_initfast('View Configuration')
  154. if foo=0 then return 0
  155. drop sidx.
  156. ff=cvcopy(doit,sidx)
  157. oo= write_cfg(tempfile,1,1)
  158. oo=stream(tempfile,'c','close')
  159. 'FILE ERASE TYPE text/html name ' tempfile
  160.  
  161. return 0
  162.  
  163. /*****************************/
  164. /*  add an entry */
  165. do_addone:
  166.  
  167.   dolist='SEL NODO DIR DIR_NAMEONLY HOST SERVER TRIGGER  USERS PWDS  MIME NOCACHE NORECORD SSI '
  168.  
  169.    cfgfile=basedir||'\INITFAST.'||port
  170.    if stream(cfgfile,'c','query exists')=' ' then do
  171.       doit.0=0
  172.    end  /* Do */
  173.    else do
  174.        foo=get_initfast('Add an Entry',1)
  175.        if foo=0 then  doit.0=0
  176.   end /* do */
  177.  
  178.   ido=doit.0+1
  179.   if wordpos('ENTRYNUM',optslist)>0 then do
  180.        ient=strip(packur(opts.!entrynum))
  181.       select
  182.          when datatype(ient)<>'NUM' then ient=ido
  183.          when ient<1 then ient=ido
  184.          when ient>ido then ient=ido
  185.          otherwise nop
  186.        end
  187.   end  /* Do */
  188.   if ient<ido then do   /* insert in da middle */
  189.      foo=cvcopy(doit,tmpx)
  190.      drop doit.
  191.      do mm=1 to ient-1
  192.          foo=cvcopy(tmpx.mm,doit.mm)
  193.      end /* do */
  194.      do mm=ient to ido
  195.          mm2=mm+1
  196.          foo=cvcopy(tmpx.mm,doit.mm2)
  197.      end /* do */
  198.   end  /* Do */
  199.  
  200.   doit.0=ido
  201.   do m1=1 to words(dolist)
  202.       aw=strip(word(dolist,m1))
  203.       if wordpos(aw,optslist)=0 then iterate
  204.       amm='!'||aw
  205.       if aw="MIME" & upper(opts.amm)="OTHER" then  opts.amm=opts.!mime2
  206.  
  207.       opts.amm=packur(opts.amm)
  208.       if opts.amm=' ' then iterate
  209.       doit.ient.amm=packur(opts.amm)
  210.  
  211.   end /* do */
  212.  
  213.   if symbol('DOIT.'||ient||'.!SEL')<>'VAR' | doit.ient.!sel="" then do
  214.           string ' Error:  no SEL specified '
  215.           return 0
  216.      end
  217.  
  218. /* check special cases*/
  219. if wordpos('USERS',optslist)>0 then do
  220.      if wordpos('PWDS',optslist)=0  then do
  221.           string ' Error: ' words(users)' USERS specified with no PWDS '
  222.           return 0
  223.      end
  224.      if words(doit.ient.!users)<>words(doit.ient.!pwds) then do
  225.            string 'Error: ' words(doit.ient.!users) ' USERS, but ' words(doit.ient.!pwds) ' PWDS '
  226.           return 0
  227.      end
  228. end
  229.  
  230. call lineout tempfile,'<html><head><title>SREFAST: Adding  Entry </title></head>'
  231. call lineout tempfile,'<BODY><H2>Adding an entry to the SREFAST configuration file </h2> '
  232.  
  233. foo=cvcopy(doit,sidx)
  234. oo=write_cfg(cfgfile)
  235. if oo=0 then
  236.     call lineout tempfile,'<br> Error writing SREFAST configuration file: 'cfgfile
  237. else
  238.    call lineout tempfile,' <p> <b>' doit.ient.!sel ' </B> added to SREFAST index file  as entry # ' ient
  239.  
  240. call lineout tempfile,'</body></html>'
  241. call lineout tempfile
  242. 'FILE ERASE type text/html name ' tempfile
  243.  return 0
  244.  
  245.  
  246. /******************/
  247. /* save results to srefstcf.80 file */
  248. write_cfg:procedure expose sidx. port tempfile enmadd
  249. parse arg aout,notascfg,isorig
  250.  
  251. nossi=sidx.!nossi
  252. drop sidx.!nossi
  253. oo=cvtails(sidx,yeeks)
  254.  
  255. do ii=1 to yeeks.0
  256.      parse var yeeks.ii  ik '.' pook
  257.      oog.ii=left(ik,8)||'.'||pook
  258. end /* do */
  259.  
  260. oog.0=yeeks.0
  261. boop=arraysort(oog,,,1,5,'A','N',9,,'A')
  262. if boop<>1 then return 0
  263.  
  264. if notascfg<>1 then do
  265.    idd=lastpos('.',aout)
  266.    idd2=aout
  267.    if idd>0 then   idd2=delstr(aout,idd)
  268.    aoutbak=dostempname(idd2||'.b??')
  269.    foo=dosrename(aout,aoutbak)
  270.    call lineout tempfile, ' <br> Prior version saved as : <tt> ' aoutbak '</tt>'
  271.    call lineout aout,'; Configuration for SREFAST: '||date('n')||' '||time('n')
  272.    call lineout aout,'; Use SREFAST.HTM to modify this, or read SREFAST.DOC for details.'
  273.  
  274.    do mm=1 to oog.0
  275.       aw=space(strip(oog.mm),0)
  276.       if aw='0.' then aw='0'
  277.       if datatype(sidx.aw)='NUM'  then
  278.          call lineout aout, 'DOIT.'||aw||'='|| sidx.aw
  279.       else
  280.          call lineout aout,'DOIT.'||aw||'="'|| sidx.aw|| '"'
  281.    end /* do */
  282.    call lineout tempfile, ' <br> ' oog.0 ' lines written to: <tt> ' aout '</tt>'
  283.  
  284. end
  285. else do                 /* write as a report, not as an "interpretable" file */
  286.   if isorig<>1 then do
  287.      call lineout aout,'<html><head><title>SREFAST: Display Entries </title></head>'
  288.      call lineout aout,' <body>'
  289.     call lineout aout,' <h2> SREFAST: Usage Stats and Working Configuration File </h2>'
  290.  
  291.   /* some stats */
  292.    iscsh=value(enmadd||'SREF_FAST_CACHE',,'os2environment')
  293.    ismain=value(enmadd||'SREF_FAST_MAIN',,'os2environment')
  294.    isfast=value(enmadd||'SREF_FAST_FAST',,'os2environment')
  295.    if iscsh=' ' then iscsh=0
  296.    if ismain=' ' then ismain=0
  297.    if isfast=' ' then isfast=0
  298.    itot=max(iscsh+ismain+isfast,1)
  299.  
  300.    biscsh=value(enmadd||'SREF_FAST_BYTES_CACHE',,'os2environment')
  301.    bismain=value(enmadd||'SREF_FAST_BYTES_MAIN',,'os2environment')
  302.    bisfast=value(enmadd||'SREF_FAST_BYTES_FAST',,'os2environment')
  303.    if biscsh=' ' then biscsh=0
  304.    if bismain=' ' then bismain=0
  305.    if bisfast=' ' then bisfast=0
  306.    bitot=max(biscsh+bismain+bisfast,1)
  307.  
  308.  
  309.    pctcsh=format(100*iscsh/itot,4,2) ; pctfast=format(100*isfast/itot,4,2)
  310.    pctmain=format(100*ismain/itot,4,2)
  311.  
  312.    bpctcsh=format(100*biscsh/bitot,4,2) ; bpctfast=format(100*bisfast/bitot,4,2)
  313.    bpctmain=format(100*bismain/bitot,4,2)
  314.    select
  315.       when bitot>1000 & bitot<2000000 then
  316.          bitot=format(bitot/1000,4,0)||'K'
  317.       when bitot>= 2000000 then
  318.           bitot=format(bitot/1000000,7,1)||'M'
  319.       otherwise nop
  320.    end
  321.  
  322.    call lineout tempfile,' <h3> Some Usage Statistics </h3>'
  323.    call lineout tempfile,' # SREFAST transactions (bytes)=' itot ' (' bitot ')<br>'
  324.    call lineout tempfile,' % transactions from GoServe cache: ' pctcsh ' (' bpctcsh ') <br>'
  325.    call lineout tempfile,' % transactions from INITFAST entries: ' pctfast '(' bpctfast ')  <br>'
  326.    call lineout tempfile,' % transactions from main filter: ' pctmain '(' bpctmain ')  <p>'
  327.  
  328.   call lineout aout,'<h3>' sidx.0 ' entries in SREFAST configuration file </h3>'
  329.   call lineout aout,' This is the <i>working </i> configuration file; as produced from INITFAST'
  330.   if nossi=1 then    call lineout aout, ',<em> it is currently being updated </em>'
  331.   call lineout aout,'<p> Note that the <tt>FILE, ORIGFILE, STAMP, and TYPE </tt> fields are created by SREFAST. <p>'
  332.  
  333.  
  334.  
  335.  
  336.   end
  337.   else do
  338.      call lineout aout,'<html><head><title>SREFAST: Display Entries </title></head>'
  339.      call lineout aout,' <body><h3>' sidx.0 ' entries in SREFAST configuration file </h3>'
  340.   end  /* Do */
  341.   call lineout aout,' <oL> '
  342.   ido=0
  343.   do mm=1 to oog.0
  344.       aw=space(strip(oog.mm),0)
  345.       if aw='0.' then iterate
  346.       parse upper var aw anum '.!' atype
  347.       if anum<>ido then do
  348.           if ido>0 then call lineout aout,'  </menu>'
  349.           call lineout aout,'<li> <B> ' sidx.anum.!sel '</b>'
  350.           call lineout aout,'   <menu>'
  351.           ido=anum
  352.       end
  353.       if  atype="SEL" then iterate
  354.       ali=sidx.aw
  355.       call lineout aout,'       <li> ' atype ': <tt> ' ali ' </tt> '
  356.   end /* do */
  357.   call lineout aout,'</menu></oL> </BODY></HTML> '
  358.   call lineout aout
  359. end  /* Do */
  360. return 1
  361.  
  362.  
  363.  
  364. /* ----------- */
  365. /* get environment value, possibly host specific */
  366. /* ------------ */
  367. get_value: procedure expose enmadd host_nickname
  368. parse arg vname
  369.  
  370. vname=strip(vname) ; hname=strip(host_nickname)
  371. if hname<>' ' then do
  372.    aval=value(enmadd||vname||'.'||hname,,'os2environment')
  373.    if aval<>' ' Then do
  374.         return aval
  375.    end
  376. end
  377. aval=value(enmadd||vname,,'os2environment')
  378. return aval
  379.  
  380. /**********/
  381. /* read initfast into doit */
  382. get_initfast:procedure expose port doit. basedir tempfile cfgfile
  383. parse arg amess,nowrite
  384. cfgfile=basedir||'\INITFAST.'||port
  385.  
  386. aa=0
  387. if stream(cfgfile,'c','query exists')<>""  then aa=sref_fileread(cfgfile,todos,,'E')
  388. if aa=0 then do
  389.     if nowrite=1 then return 0
  390.    call lineout tempfile,'<html><head><title>SREFAST: No Configuration File </title></head>'
  391.    call lineout tempfile,'<BODY><H2>SREFAST ' amess ' error: Missing configuation file </h2> '
  392.    call lineout tempfile,' The required configuration file,' cfgfile', is not available '
  393.    call lineout tempfile,'</body></html>'
  394.    call lineout tempfile
  395.    'FILE ERASE type text/html name ' tempfile
  396.    return 0
  397. end
  398.  
  399. drop doit.
  400. signal on error name badline ; signal on syntax name badline
  401. ierr=1
  402. do kk=1 to todos.0              /* look for errors */
  403.    aline=strip(todos.kk)
  404.    if aline=' ' then iterate
  405.    if abbrev(aline,';')=1 then iterate
  406.    interpret aline
  407. end /* do */
  408.  
  409. ierr=0
  410. badline:
  411. signal off error ; signal off syntax
  412. if ierr=1 then do
  413.    if nowrite=1 then return 0
  414.    call lineout tempfile,'<html><head><title>SREFAST: Bad  Entry </title></head>'
  415.    call lineout tempfile,'<BODY><H2>SREFAST ' amess ' error:  Bad entry  </h2> '
  416.    call lineout tempfile,' There is a bad entry in the configuration file,'cfgfile,' near line 'kk)
  417.    call lineout tempfile,'</body></html>'
  418.    call lineout tempfile
  419.    'FILE ERASE type text/html name ' tempfile
  420.    return 0
  421. end
  422.  
  423. return 1
  424.  
  425.  
  426. /**********/
  427. do_refresh:
  428.  cfgfile=basedir||'\INITFAST.'||port
  429.  foo=value('SREF_FAST_REDO',1,'os2environment')  /* srefast shoud also redo */
  430.  call lineout tempfile,'<html><head><title>SREFAST: Index Refresh </title></head>'
  431.  call lineout tempfile,'<BODY><H2>SREFAST Index Refresh </h2> '
  432.  call lineout tempfile,' The SREFAST index will be refreshed in a minute or two'
  433.  call lineout tempfile,'<BR><em> The SREFAST index is generated from the 'cfgfile  ' configuration file.'
  434.  call lineout tempfile,'</body></html>'
  435.  call lineout tempfile
  436.  'FILE ERASE type text/html name ' tempfile
  437.  return 0
  438.  
  439.  
  440.