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.startLocal();     // or server.start(4242) for TCP

Call setLicenseServer() before the first start()/startLocal(). The lease is checked out once for the whole application process - starting both transports does not take a second one - and checked back in by stop(). Note that this is about the licence server's TCP port, which is independent of the transport your automation clients use to reach the application.

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