- InfoLogger GUI (ILG)
The Web User Interface for ALICE O2 InfoLogger. The application operates in two distinct modes:
- Query - historical logs from a database.
- Live - real-time logs from a TCP endpoint over the InfoLogger protocol.
Screenshot of the current interface, running locally against a fake InfoLoggerServer emitting synthetic logs:
- Use upper panel to:
- match and/or exclude filters (Supports SQL Wildcard
%, empty value toggling) - control the zoom level of the log table
- limit the number of logs displayed
- match severity and level
- reset the filters
- match and/or exclude filters (Supports SQL Wildcard
- Show/hide columns by clicking on labels on top of page
- Click "Query" or "Live" button to start the respective mode
- Double click on a log or toggle the inspector view from the bottom right corner to see all fields of the log
- Right-click a log to open a context menu with copy / use-as-filter / open inspector actions
- Use arrow keys to navigate quickly between logs
- Download the logs in a file via the top left download icon
nodejs>=22.x- InfoLogger MariaDB database for Query mode
- InfoLoggerServer endpoint for Live mode
ILG is a Node.js API Gateway and Single-Page Application built on top of the @aliceo2/web-ui framework. It serves as a unified interface to two separate operational backends: a MariaDB database for historical queries and an InfoLoggerServer TCP endpoint for live log streaming.
- Entry point - index.js starts the
HttpServerfrom@aliceo2/web-uiand attaches aWebSocket. lib/api.js instantiates the services, wires them to the DB and InfoLoggerServer, and registers HTTP routes. Config is loaded by configProvider.js. - Query -
POST /queryandGET /query/stats→ QueryController → QueryService. Both routes are gated by serviceAvailabilityCheck. - Live - LiveService wraps
InfoLoggerReceiver, parses each TCP line per the InfoLogger protocol, and broadcasts to connected clients over WebSocket. - Status / Config - StatusController reports DB / Server / GUI health; ConfigController exposes the runtime config to the frontend.
- Profiles - ProfileService persists per-user column visibility/width to a JSON file (JSONFileConnector) via
getUserProfile/saveUserProfile. The named-profile endpoint (getProfile) is a stub - it returns the hard-coded defaults regardless of the profile requested. - Utilities - utils/ contains the InfoLogger message-command parser, SQL to native error mapping, prepared-statement parsing, and query cancellation.
Static files served from public/; no build step. A lightweight MVC app on top of @aliceo2/web-ui.
- App shell - index.html bootstraps index.js, which mounts the top-level Model and renders view.js.
- Sub-models - log/Log.js drives the log table (rendering in
tableLogs*.js, inspector, status bar, context menu, zoom, etc.). logFilter/LogFilter.js owns the filter inputs. table/Table.js holds shared table state. - Supporting code - services/, constants/, common/, about/ (about component).
- Styles - app.css, layered on the framework's bootstrap.css.
git clone https://github.com/AliceO2Group/WebUi.git
cd WebUi/InfoLogger
npm ci
cp config-default.js config.jsEdit config.js for the setup you're using below.
npm run dev runs the backend under nodemon. The frontend has no hot reload - refresh the browser to pick up changes.
- Point
mysqlandinfoLoggerServerinconfig.jsat the remote host and port. npm start, then open http://localhost:8080.
The bundled fake InfoLoggerServer emits a log every 0-100 ms, shuffling through test/live-simulator/fakeData.json.
- Set
infoLoggerServerinconfig.jstolocalhost:6102. - Terminal 1:
npm run simul. - Terminal 2:
npm run dev. - Open http://localhost:8080 and click Live.
Requires Docker Desktop.
-
In a working dir, create
compose.yaml:services: mariadb: image: mariadb restart: unless-stopped ports: ['3306:3306'] environment: MARIADB_ROOT_PASSWORD: root # this is just an example, not intended to be a production configuration phpmyadmin: image: phpmyadmin restart: unless-stopped ports: ['9090:80'] environment: - PMA_HOST=mariadb
Gives you a MariaDB server with phpMyAdmin on the latest image. Pin a specific version (e.g.
mariadb:11.5) by changing theimage:tag. -
docker compose up -d. -
Open http://localhost:9090/ → log in
root/root→ New → create databaseINFOLOGGER. -
Open the SQL tab, paste docs/database-specs.sql, click Go.
-
In
config.js:mysql: { host: '127.0.0.1', user: 'root', password: 'root', database: 'INFOLOGGER', port: 3306, timeout: 60000, retryMs: 5000, },
-
npm run dev- startup should logConnection to DB successfully established: 127.0.0.1:3306.
npm test- eslint + mocha.npm run mocharuns the suite alone.- Backend tests: test/lib/.
- Frontend tests: test/public/.
- Add or update the matching test when fixing a bug.
npm run eslint- config in eslint.config.js. Lint failures block CI.
ILG integration tests live in the system-configuration repo and run in its pipeline against a pipeline ILG. They are not executed by this repo's CI. To run them locally, clone system-configuration and run npx mocha ilg-main.js.
⚠️ If you change behaviour covered by integration tests, update the system-configuration suite during the next ILG release.
Runs on every PR touching InfoLogger/**. Must pass to merge:
npm test(eslint + mocha) onubuntu-latest.npm run coveragewith a CodeCov report; coverage cannot decrease.
- Publishes a new version to the NPM Registry under @aliceo2/infologger.
- Builds a
tgzarchive of the project for local-repository installations.
Runs the integration suite against a pipeline instance. Runs separately from this repo's CI, so run the suite locally before merging and flag any required changes to the team at release time.
