On Wed, 2 Oct 1991 09:11:25 EDT Lisa M. Covi said:
>
>3. This same user wants statistics on how many requests each file on her
>filelist gets and how many requests for information on all files?
>
We have modified the user edit LSV$GETQ EXEC to log each successful
file request. Below are the changes we have made. I think you'll be able
to see how they fit into the exising EXEC. Data is stored by the year and
month requested (ie. in files called LSGET LOGyymm ).
I have been meaning to write a general statistical command but haven't
done it. What I have done is write special privileged commands so the
data owners can get a list of what files were requested and by whom.
I consider that information confidential between the owner of the data
and the requestor so I don't make it generally available. But it would be
easy to issue statistics WITHOUT the destinations that might be public.
I'll include one of these execs at the end. The following entry in
the LOCALCMD FILE file on LISTSERV enables it:
/NDECHUM 4 NDECHUM
to the authorized data owner just sends the command
/NDECHUM for month to date info or
/NDECHUM LOGyymm for a specific month.
The exec at the end will probably need work before it will run at your
site... It is offered as is with no promises! ;-)
Marty
--------------------------------------------------------------------------
Additions to LSV$GETQ to create an entry for each file requested.
I think I have everything. We set up a new disk
(4F0, mode G) and added it to LOCAL SYSVARS as well as using it here.
... Separates the sections of code in LSV$GETQ ...
...
/* The following code is yours to configure */
/* NDSU mgh Log Definitions... */
logdate=date('S')
logtime=time()
logfn = 'LSGET'
logft = 'LOG'substr(logdate,3,4) /* LOGyymm */
logfm = 'G' /* Log Disk */
...
/* Otherwise it's ok */
Signal Ok
Ok:
/* NDSU MGH 01/24/90 Add log record... */
call logit logdate logtime left(filelist,8) left(fn,8) left(ft,8) ,
format(#blocks,8,0) destination origin strip(userdata)
Exit 0 userdata
...
LOGIT: /* Log Record NDSU MGH 01/24/90 */
parse arg logitarg
'EXECIO 1 DISKW' logfn logft logfm '(FINIS VAR LOGITARG'
logrc=rc
if logrc<>0 then do
say 'LSV$GETQ ERROR Writing to' logfn logft logfm ' EXECIO rc='logrc
say 'LSV$GETQ Data="'logitarg'"'
end
return logrc
-------------------------------------------------------------------------
Here is an example of a local /NDECHUM command - to list files in a
certain filelist. NOTE: Some lines were wrapped - I tried to "FIX" them
but the exec may need work as is before it will run!
/**********************************************************************
* *
* NDECHUM - Compile log of ECHUM-L files for certain users. *
* *
* Syntax: /NDECHUM <filetype> (filetype defaults to current *
* LOGyymm file). *
* Marty Hoag NDSU Computer Center 9/24/90 11/08/90 *
* Adapted from NDKIDS 06/02/91 mgh *
**********************************************************************/
'GLOBALV SELECT LISTSERV GET POSTMASTER NODE RSCS MAILER';
myname='/NDECHUM'
debug=0
debuglimit=20 /* Number of output records to produce */
maxrecs=10000
okorigin=' USERID@NODE',
' [log in to unmask], /* Etc... Authorized User List */
||' 'POSTMASTER' '
logfn='LSGET'
logdate=date('S') /* Current date for default type */
logft='LOG'substr(logdate,3,4) /* LOGyymm */
logfm='G' /* See LSV$GETQ for details... */
targlist='ECHUM-L ' /* Filelist name */
targllen=8
targname='*'
targnlen=0
targtype='*'
targtlen=0
Address COMMAND;
'MAKEBUF';
parse arg origin . text ;
parse var origin orgid'@'orgnode
if orgnode = '' then orgnode = '*';
if debug then say myname 'Called from "'origin'" with "'text'"'
if pos(' 'translate(origin)' ',okorigin)=0 then do
call LSVTELL origin, 'Sorry, you are not authorized to use' myname
call LSVTELL origin, 'For more information contact' word(postmaster,1)
if debug then say 'okorigins="'okorigin'"'
exit 8
end
if text<>'' then logft = strip(translate(word(text,1)))
logfile = logfn logft logfm
'SET CMSTYPE HT'
'STATE' logfile
src=rc
'SET CMSTYPE RT'
if src<>0 then do
call LSVTELL origin, 'ERROR:' myname 'file' logfile 'not found.'
exit 4
end
countin=0
countout=0
nqd = queued()
rrc=0
if debug then say myname': Start Search' date() time()
do inrecs=1
'EXECIO 1 DISKR' logfile '(VAR RECIN'
rrc=rc
if rrc=2 then leave /* End of file */
if debug & countout>=debuglimit then leave
if rrc<>0 then do
say 'Error in DISKR in' myname'. rrc='rrc
call LSVTELL origin, 'ERROR: Error reading' logfile ', rc='rrc
'FINIS' logfile
'DROPBUF'
exit 8
end
if inrecs>maxrecs then do
call LSVTELL origin, myname 'ERROR: Maximum Record Count Exceeded. ' ,
'Contact' word(postmaster,1)
call LSVTELL origin, ' Countin='countin ,
'Countout='countout 'inrecs='inrecs'.'
'FINIS' logfile
'DROPBUF'
exit 8
end
countin = countin + 1
parse var recin filedate filetime filelist filename filetype filesize ,
filedest filereq .
if (targllen=0 | left(filelist,targllen)==targlist) ,
& (targnlen=0 | left(filename,targnlen)==targname) ,
& (targtlen=0 | left(filetype,targtlen)==targtype) ,
then do
if countout=0 then do /* headers */
queue '* File File Date K-Bytes Destination'
queue '* Name Type (to next 4k) '
queue '*------* *------* *------* *------*' ,
'*--------------------------*'
end
/* Try to keep outrec<=80 bytes... first 3 + sp = 3x9 = 27 */
outrec=left(filename,8) left(filetype,8) left(filedate,8) ,
right(filesize,8)
outrec=outrec' 'strip(right(filedest,80-length(outrec) ))
queue outrec
countout=countout+1
end
end inrecs
if debug then say myname': Ended Search' date() time()
'FINIS' logfile
call LSVTELL origin, myname 'Complete. ' countout 'records selected from' ,
countin 'in' logfile'.'
if countout>0 then do
Call LSVMAIL origin,,myname 'of 'logfile,queued()-nqd
end
'DROPBUF';
exit 0;
|