Skip to content

Floating licenses

Floating licensing (Enterprise tier and up) replaces the organization key file with a pool of concurrent automation sessions served by vericue-license-server - a small standalone daemon you run on your own network. Nothing leaves your LAN: the license server is self-hosted and works entirely offline, like all veriCue licensing.

How it works

┌─────────────────┐  checkout / heartbeat  ┌──────────────────────┐
│ App under test  │ ─────────────────────▶ │ vericue-license-server │
│ (libvericue-     │ ◀───────────────────── │  (your LAN, port 7777)│
│  server)        │      lease granted     │ license.json (N sessions)│
└─────────────────┘                        └──────────────────────┘
  1. The license server loads your RSA-signed key file (which carries the licensed session count) and listens on TCP. Each granted lease is one active session from that pool.
  2. Each application under test checks out a lease at startup and renews it with a heartbeat every 60 seconds.
  3. A lease that misses heartbeats for 180 seconds is reclaimed server-side - crashed apps free their session automatically.
  4. On a clean shutdown the app checks in the lease immediately.

If the license server becomes unreachable, the app keeps its lease through a 5-minute grace period, retrying the connection every 10 seconds. Only after the grace period expires does the automation interface stop.

Running the server

bash
vericue-license-server --license /etc/acme/vericue-floating.json --port 7777
FlagMeaning
--license <path>RSA-signed key file (required in server mode)
--port <n>TCP lease port (default: 7777)
--http-port <n>Optional HTTP admin API + dashboard
--http-token <token>Bearer token protecting the HTTP admin API (recommended)
--statusQuery a running server and exit (with --host, default 127.0.0.1)

Run it under systemd or your service manager of choice; it is a single binary with no database - leases live in memory.

Application side

Instead of a key file, point the embedded server at the license server:

cpp
vericue::VeriCueServer server(&window);
server.setLicenseServer("licenses.acme.lan", 7777);
server.start(4242);

Admin API & dashboard

With --http-port set, the server also exposes:

EndpointPurpose
/ or /adminAuto-refreshing web dashboard with per-lease revoke buttons
GET /api/statusSession totals (used / licensed), license info
GET /api/sessionsActive sessions, i.e. current leases (client id, hostname, expiry). /api/seats still works as a deprecated alias and will be removed in a future release
POST /api/revoke/<lease_id>Force-release a lease

Protect the admin port

/api/revoke releases active sessions, so anyone who can reach the HTTP port can disrupt licensing. Always pass --http-token; every request must then send Authorization: Bearer <token>. The server logs a loud warning when it starts without one. Keep both ports LAN-only - the lease protocol is plain TCP, so firewall it to trusted subnets and never expose it to the internet.

bash
curl -H "Authorization: Bearer $TOKEN" http://licenses.acme.lan:8080/api/sessions

Monitoring

Check session usage from a shell:

bash
vericue-license-server --status --host licenses.acme.lan --port 7777

or scrape GET /api/status from your monitoring system.

Lease lifecycle reference

ParameterValue
Heartbeat interval (client)60 s
Lease timeout (server)180 s without a heartbeat
Grace period on server outage (client)5 min
Reconnect attempts during outageevery 10 s

Troubleshooting

  • lease denied - all licensed sessions are in use. Check /api/sessions for stale clients, or revoke a lease from the dashboard.
  • App loses automation after ~5 min - the license server is unreachable and the grace period ran out. The app under test keeps running; only the veriCue interface stops. Restore connectivity and restart the app under test to re-checkout.
  • Server refuses to start - the key file failed signature verification, or the port is taken. Both are logged on stderr.

Released under a commercial licence. Privacy · Terms