Skip to main content

Analogger

This is a simple Deno library to consume access logs generated by nginx/apache and generate reports about visits, sessions, etc.

It’s divided in two scopes:

  • Transformers: to parse, transform and enrich the data from log files.
  • Reporters: to generate reports of this data.

Example

import {
  read,
  saveHTML,
  saveJSON,
  show,
  transform,
} from "https://deno.land/x/analogger/mod.ts";
import { sessions } from "https://deno.land/x/analogger/reports.ts";
import {
  filter,
  filterByExtensions,
  filterByTimerange,
  isBot,
  parser,
  parseUserAgent,
  sessionId,
} from "https://deno.land/x/analogger/transformers.ts";

// Step 1: Read, parse and transform the logs:
const result = await transform(
  read("./access.log"), // Read the log file.
  parse(), // Parse the data.
  filterByExtensions([".html", ""]), // Filter by .html extensions or not extension at all.
  filterByTimeRange( // Filter by time range (one year, from 2020 to 2021).
    new Date(2020),
    new Date(2021),
  ),
  filter((log) => log.status === 200), // Get only requests generating a 200 status code response.
  isBot(), // Add the `isBot` property indicating if the request is from a bot (ex: Google).
  filter((log) => !log.isBot), // Discard request from bots
  parseUserAgent(), // Parse the user-agent info
  filter((log) => !!log.browserName), // Discard request with unknown browsers
  sessionId(), // Add the `sessionId` property with an autogenerated session id
);

// Now, result is an array of logs with rich data (like date, browserName, path, referrer, etc)

// Step 2: Generate reports with this data.
// For example, the number of sessions by month:
const report = session(result, "monthly");

// Step 3:
// Save the result in an interactive html file that you can open in your browser
await saveHTML("sessions.html", report);

// Or save only the JSON data of this report
await saveJSON("sessions.json", report);

// Or create a local server to see in your browser
await show(report);