Report Generation

Once you have all this data, it's time to generate some


Google

useful reports out of it. Lire's framework includes a generic report builder. What Lire calls a report is actually a collection of what one may understand as reports; Lire however speaks about a subreports. For example, the proxy's superservice report will contain subreports about the top visited sites, another subreport on the cache hit ratio, as well as several others. The subreports are defined using the Report Specification Markup Language. This markup language contains elements for several things: information regarding the schema on which it operates; descriptions that should be included in the generated report to help in the interpretation of the data; parameters that can be used to modify the generated report (for example, to generate a top 20 subreport instead of a top 10); a filter that selects the records that will be used for the subreport; and finally the operations that make up the subreport: grouping, summing, counting, etc. The report markup language covers most simple needs and there is an extension element as well as an API that can be used to hook in more fancy computations. There are no subreport specifications in the current distribution that make use of this feature yet, however. You can see an overview of this process in the Figure 1.4 figure.

Figure 1.4. Report Generation Process

The actual computation of the subreport is delegated to another module of the framework. Presently, the DLF concept is implemented as simple space delimited log files. This makes it very portable and very simple, but for huge amounts of log data this isn't necessarily the best solution. But it would be easy to switch to a database driven backend where the DLF records are hold in tables and the subreport specifications are mapped to SQL queries.

The generated report is another XML file that uses another markup language, this time called the Lire's Report Markup Language. An actual report contains the help descriptions from the report specifications, information on the subreport specifications used, as well as the actual subreport's data.Using another intermediary XML file as output format makes all sort of things possible in the formatting and post-processing stage.