.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "NINPATHS 8" .TH NINPATHS 8 2024-04-01 "INN 2.7.2" "InterNetNews Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH NAME ninpaths \- Report Usenet Path header field statistics (new inpaths) .SH SYNOPSIS .IX Header "SYNOPSIS" \&\fBninpaths\fR \fB\-p\fR \fB\-d\fR \fIdumpfile\fR .PP \&\fBninpaths\fR \fB\-r\fR \fIsite\fR \fB\-u\fR \fIdumpfile\fR [\fB\-u\fR \fIdumpfile\fR ...] \fB\-v\fR \&\fIlevel\fR .SH DESCRIPTION .IX Header "DESCRIPTION" This is an efficient and space-saving \fBinpaths\fR reporting program. It works as follows: you feed it the Path header fields via an INN channel feed or some other similar method, and from time to time the program writes all its internal counters accumulated so far to a dump file. Another instance of the program picks up all the dump files, adds them up and formats them into the report. The purpose of the final report is to summarize the frequency of occurrence of sites in the Path header fields of articles. .PP Some central sites accumulate the Path header field data from many news servers running this program or one like it, and then report statistics on the most frequently seen news servers in Usenet article Path header fields. The \fBsendinpaths\fR script can be run daily to mail the accumulated statistics to such a site and remove the old dump files. .PP You can get a working setup by doing the following: .IP 1. 4 Create a directory at \fIpathlog\fR/path (replacing \fIpathlog\fR here and in all steps that follow with the full path to your INN log directory). Do not change the name of the \f(CW\*(C`path\*(C'\fR subdirectory because it is used by \fBsendinpaths\fR. .IP 2. 4 Set up a channel feed using a \fInewsfeeds\fR entry like: .Sp .Vb 3 \& inpaths!\e \& :*\e \& :Tc,WP:/ninpaths \-p \-d /path/inpaths.%d .Ve .Sp if your version of INN supports \f(CW\*(C`WP\*(C'\fR (2.0 and later all do). Replace with the full path to your INN binaries directory, and with the full path to your INN log directory. .Sp Note that the naming convention of the generated inpaths dump files should not be changed. \fBsendinpaths\fR explicitly searches files whose name starts with \f(CW\*(C`inpaths.\*(C'\fR in the /path directory. .IP 3. 4 Run the following command to start logging these statistics: .Sp .Vb 1 \& ctlinnd reload newsfeeds \*(Aqinpaths feed setup\*(Aq .Ve .IP 4. 4 Enter into your news user crontab these two lines: .Sp .Vb 2 \& 6 6 * * * /ctlinnd flush inpaths! \& 10 6 * * * /sendinpaths .Ve .Sp (the actual time doesn't matter). This will force \fBninpaths\fR to generate a dump file once a day. Then, a few minutes later, \fBsendinpaths\fR collects the dumps, makes a report, sends the collected statistics, and deletes the old dumps. .Sp Note that you can manually generate a report without mailing it, and without deleting processed dump files, with \f(CW\*(C`sendinpaths \-n\*(C'\fR. Another useful command is \f(CW\*(C`sendinpaths \-c\*(C'\fR so as to receive a copy of the e\-mail sent by \fBsendinpaths\fR and therefore make sure that everything is properly set. .IP 5. 4 In a couple of days, check that your daily statistics properly appear in . .SH OPTIONS .IX Header "OPTIONS" .IP "\fB\-d\fR \fIdumpfile\fR" 4 .IX Item "-d dumpfile" Save dumps in \fIdumpfile\fR. Any \f(CW\*(C`%d\*(C'\fR in \fIdumpfile\fR will be replaced with the current system time when the dump is made. This option should be used with \fB\-p\fR. .Sp The format of these dump files is described below. .IP \fB\-p\fR 4 .IX Item "-p" Read Path header fields from standard input. .IP "\fB\-r\fR \fIsite\fR" 4 .IX Item "-r site" Generate a report for \fIsite\fR. Generally \fIsite\fR should be the value of \&\fIpathhost\fR from \fIinn.conf\fR. .IP "\fB\-u\fR \fIdumpfile\fR" 4 .IX Item "-u dumpfile" Read data from \fIdumpfile\fR. This option can be repeated to read data from multiple dump files. .IP "\fB\-v\fR \fIlevel\fR" 4 .IX Item "-v level" Set the verbosity level of the report. Valid values for \fIlevel\fR are \f(CW\*(C`0\*(C'\fR, \&\f(CW\*(C`1\*(C'\fR, and \f(CW\*(C`2\*(C'\fR, with \f(CW\*(C`2\*(C'\fR being the default. .SH "DUMP FILE FORMAT" .IX Header "DUMP FILE FORMAT" The format of the generated dump files is: .PP .Vb 6 \& !!NINP \& \& ... \& !!NLREC \& :!,:!, ... \& !!NEND .Ve .PP where times are UNIX timestamps. Then, \fInb-sites\fR records follow. Each record is separated by a space or a new line, and consists of a host name \fIsite_n\fR followed by a number of appearances \fIcount_n\fR. The number of processed Path header fields is \fInb-articles\fR. .PP Afterwards, \fInb-relations\fR relations follow. In 3.0.x versions, the relations are separated by a space or a new line, and their syntax is \&\f(CW\*(C`\fR\f(CIsite_a\fR\f(CW!\fR\f(CIsite_b\fR\f(CW!\fR\f(CIcount_ab\fR\f(CW\*(C'\fR where \fIsite_a\fR and \fIsite_b\fR are numbers of the site records starting at 0. .PP In 3.1.x versions, the relations begin with a colon and are separated by either nothing or a new line. Their syntax is \f(CW\*(C`:\fR\f(CIsite_a\fR\f(CW!\fR\f(CIsite_b\fR\f(CW,\fR\f(CIcount_ab\fR\f(CW\*(C'\fR with the same meaning as in previous versions. The count can be omitted when it is \f(CW\*(C`1\*(C'\fR. More than two sites can be specified in the relation (\f(CW\*(C`:\fR\f(CIsite_a\fR\f(CW!\fR\f(CIsite_b\fR\f(CW!\fR\f(CIsite_c\fR\f(CW,\fR\f(CIcount_abc\fR\f(CW\*(C'\fR). .PP For instance: .PP .Vb 7 \& !!NINP 3.1.1 1302944821 1302944838 5 2 1302944826 \& newsgate.cistron.nl 1 news.trigofacile.com 2 news.ecp.fr 2 \& usenet.stanford.edu 1 \& bleachbot 1 \& !!NLREC \& :3!2:2!1,2:4!0:0!2 \& !!NLEND 4 .Ve .PP where the two processed Path header fields are: .PP .Vb 4 \& Path: news.trigofacile.com!news.ecp.fr!usenet.stanford.edu \& !not\-for\-mail \& Path: news.trigofacile.com!news.ecp.fr!newsgate.cistron.nl \& !bleachbot!not\-for\-mail .Ve .SH NOTES .IX Header "NOTES" If your INN doesn't have the \f(CW\*(C`WP\*(C'\fR feed flag (1.5 does not, 1.6 and 1.7 do, 2.0 and later all do), use the following \fInewsfeeds\fR entry: .PP .Vb 1 \& inpaths!:*:Tc,WH:/ginpaths .Ve .PP where \fBginpaths\fR is the following script: .PP .Vb 3 \& #!/bin/sh \& exec egrep \*(Aq^Path: \*(Aq \e \& | /ninpaths \-p \-d /path/inpaths.%d .Ve .PP replacing and as above. .SH HISTORY .IX Header "HISTORY" This is a slightly modified version of Olaf Titz's original \fBninpaths\fR program, which is posted to alt.sources and kept on his WWW archive under . .PP The idea and some implementation details for \fBninpaths\fR come from the original \fBinpaths\fR program, but most of the code has been rewritten for clarity. This program is in the public domain. .SH "SEE ALSO" .IX Header "SEE ALSO" newsfeeds(5), sendinpaths(8).