RollFmt=%Y-%m-%d-%H:%M
RollHour=0
If you want another format, you'll have to edit daily-report-procs.tcl and alter the string name "archive_log_name".
Each service has a separate directory under the Reports Server Root, e.g., /web/reports/arsdigita for the arsdigita.com server and /web/reports/edf for the Scorecard server. The name of this directory should be the same as that pf the server. Each service directory contains the following:
All files must be writable by nsadmin.
The procedure will also run at 10am and 6pm to verify that the reports have been generated, and if they have not, to generate them.
Where time_of_running is the time in seconds from 1970 (from an ns_time call) of the day you would like the reports to run, and the specified_logfile is the logfile to give to analog, not using the default specified in your .cfg. Note that generate_analog_reports will generate reports for the day_before the time of running. See example.
Example:
If I'm running this on December 4, 1998 c. 2:30 pm EST, then an
ns_time call returns "912799791". Executing:
generate_analog_reports foo 912799791
Will generate the reports for 1998-12-03 from the default logfile specified in foo.cfg.
Analog will seg fault and dump core if you try to generate reports for a date with no input while specifying a cacheoutfile. The exact command being executed by the server is kept in the reports server's error log. You can search the error log and run the exact command in your shell but you should be sure to:
{0, "200 OK", 0, 0},
to the array
Statuscodes scs[]
/*Terence hack to match 0 status codes*/ if (*pos == '0') *pos = '-';to the function
choice parseuint3strict(FILE *f, void *arg, char c)
/*terence hack for 0 status codes*/ if (code==0) code = 200;in the beginning of:
void process_data(Filelist *logfilep, FILE *lf, Hashtable **hash, choice *count, Include **wanthead, Include *ispagehead, Alias **aliashead, Include *argshead, Include *refargshead, Dateman *dman, Sizedata *sizes, Tree **tree, choice *alltrees, choice *lowmem, logical case_insensitive, char *dirsuffix, unsigned int dirsufflength, unsigned int granularity)
/*terence hack for 0 status codes*. if (code == 0) code = 200;under the loop
for (i = 0; scs[i].code < 600; i++)in the function
void codescore(unsigned int code, unsigned long reqs, timecode_t timecode)