Skip to content

Monitoring & Telemetry

WPLM records every licensing event and watches device health so abandoned seats are reclaimed automatically.

Devices ping POST /wplm/v1/heartbeat on an interval (default 5 minutes, configurable under Settings → Monitoring). Each ping updates the device’s last_heartbeat_at and renews any floating lease.

wplm_record_heartbeat( $fingerprint, $license_id );

A WP-Cron job (wplm_cull_zombies) deactivates devices whose last heartbeat is older than the dead-machine window (default 2× the heartbeat interval), freeing the seat. Culls are written to the activation log and fire the wplm_zombie_culled action.

Every validate / activate / deactivate / heartbeat / revoke / deny event is logged with: timestamp, event type, result, license id, machine id, IP (packed), country (optional), and a JSON meta blob.

Country is resolved via the optional wplm_resolve_geo filter — provide your own IP→country resolver; it never blocks the request path:

add_filter( 'wplm_resolve_geo', function ( $country, string $ip ) {
return my_geoip_lookup( $ip ); // return a 2-letter ISO code, or null
}, 10, 2 );

Old log rows can be purged under Settings → Tools → Purge activation logs (older than the retention window) or automatically by the telemetry-retention setting.

License Manager → Dashboard aggregates (cached as transients):

  • Seat utilization (active devices vs. seats sold).
  • Validations per day (time series).
  • License status breakdown.
  • App-version distribution and geographic spread.
  • Top licenses by activity and licenses expiring soon.
  • Recurring-revenue metrics: MRR, active subscribers, churn, upcoming revenue.

WPLM flags suspicious patterns and fires wplm_anomaly_detected:

  • Impossible travel — the same license validating from distant geographies in an implausible window.
  • Fingerprint churn — an abnormal rate of new device fingerprints (key sharing).
  • Validation spikes — a sudden surge versus the license’s baseline.