AnalyticsFormatter
in package
Formats analytics data and calculates bounded durations.
Table of Contents
Properties
- $roomFields : array<string|int, string>
- $userFields : array<string|int, string>
- $rawData : array<string|int, mixed>
- $roomData : array<string|int, mixed>
- $timezone : DateTimeZone
- $usersData : array<string|int, mixed>
Methods
- __construct() : mixed
- formatSecondsToTime() : string
- Format seconds to H:i:s format.
- formatTimestamp() : string
- Format timestamp to user readable format.
- getFormattedEventData() : array<string|int, mixed>
- Get formatted analytics data.
- getRawAnalyticsData() : array<string|int, mixed>
- Get raw analytics data.
- getRoomFields() : array<string|int, string>
- Get room fields.
- getUserFields() : array<string|int, string>
- Get user fields.
- capDurationsAtRoomDuration() : void
- Cap per-user duration fields at the authoritative room duration limit.
- clampDuration() : int
- Clamp a duration value to the valid range [0, room limit].
- countStatusStartTypeEvent() : int
- Count how many times an event occurred.
- formatRoomData() : void
- Format basic room data.
- formatRoomEvents() : void
- Format room events.
- formatRoomPolls() : array<string|int, mixed>
- Format room polls data.
- formatUserEvents() : void
- Format user events.
- formatUserJoinDuration() : void
- Calculate user join duration using an active/inactive state machine.
- formatUserPollVoted() : int
- Format user's poll voted data.
- formatUsersData() : void
- Format user data.
- getDurationFromEvents() : int
- Calculate device duration from start/end and user-leave events.
- getRoomDurationLimit() : int
- Returns the authoritative room duration limit in seconds.
- getRoomEndMilliseconds() : int|null
- Get room end time in milliseconds, or null if unavailable.
- getRoomStartMilliseconds() : int|null
- Get room start time in milliseconds, or null if unavailable.
Properties
$roomFields
protected
array<string|int, string>
$roomFields
= ["room_id", "room_title", "room_creation", "room_ended", "room_duration", "room_total_users", "enabled_e2ee", "recording_status", "rtmp_status", "external_media_player_status", "etherpad_status", "external_display_link_status", "ingress_created", "breakout_room"]
$userFields
protected
array<string|int, string>
$userFields
= ["name", "ex_user_id", "is_admin", "duration", "joined", "left", "mic_status", "mic_muted", "mic_duration", "talked", "talked_duration", "webcam_status", "webcam_duration", "raise_hand", "voted_poll", "whiteboard_annotated", "whiteboard_files", "screen_share_status", "public_chat", "private_chat", "chat_files", "interface_invisible", "connection_quality"]
$rawData
private
array<string|int, mixed>
$rawData
= []
$roomData
private
array<string|int, mixed>
$roomData
= []
$timezone
private
DateTimeZone
$timezone
$usersData
private
array<string|int, mixed>
$usersData
= []
Methods
__construct()
public
__construct(array<string|int, mixed> $rawData[, string $userTimezone = 'UTC' ]) : mixed
Parameters
- $rawData : array<string|int, mixed>
-
Raw analytics data from plugNmeet-server
- $userTimezone : string = 'UTC'
-
User timezone
formatSecondsToTime()
Format seconds to H:i:s format.
public
formatSecondsToTime(mixed $seconds) : string
Parameters
- $seconds : mixed
Return values
stringformatTimestamp()
Format timestamp to user readable format.
public
formatTimestamp(mixed $timestamp[, bool $ms = true ]) : string
Parameters
- $timestamp : mixed
- $ms : bool = true
Return values
stringgetFormattedEventData()
Get formatted analytics data.
public
getFormattedEventData() : array<string|int, mixed>
Return values
array<string|int, mixed>getRawAnalyticsData()
Get raw analytics data.
public
getRawAnalyticsData() : array<string|int, mixed>
Return values
array<string|int, mixed>getRoomFields()
Get room fields.
public
getRoomFields() : array<string|int, string>
Return values
array<string|int, string>getUserFields()
Get user fields.
public
getUserFields() : array<string|int, string>
Return values
array<string|int, string>capDurationsAtRoomDuration()
Cap per-user duration fields at the authoritative room duration limit.
private
capDurationsAtRoomDuration(array<string|int, mixed> &$user) : void
Parameters
- $user : array<string|int, mixed>
clampDuration()
Clamp a duration value to the valid range [0, room limit].
private
clampDuration(mixed $duration) : int
When no trustworthy limit exists the raw duration is returned unchanged — we never zero out data just because room metadata is incomplete.
Parameters
- $duration : mixed
Return values
intcountStatusStartTypeEvent()
Count how many times an event occurred.
private
countStatusStartTypeEvent(array<string|int, mixed> $data[, string $type = "ANALYTICS_STATUS_STARTED" ]) : int
Parameters
- $data : array<string|int, mixed>
- $type : string = "ANALYTICS_STATUS_STARTED"
Return values
intformatRoomData()
Format basic room data.
private
formatRoomData() : void
formatRoomEvents()
Format room events.
private
formatRoomEvents(array<string|int, mixed> $events) : void
Parameters
- $events : array<string|int, mixed>
formatRoomPolls()
Format room polls data.
private
formatRoomPolls(array<string|int, mixed> $data) : array<string|int, mixed>
Parameters
- $data : array<string|int, mixed>
Return values
array<string|int, mixed>formatUserEvents()
Format user events.
private
formatUserEvents(array<string|int, mixed> &$user, array<string|int, mixed> $events) : void
Uses two passes so joined and left events are available before device durations are calculated, regardless of the incoming event order.
Parameters
- $user : array<string|int, mixed>
- $events : array<string|int, mixed>
formatUserJoinDuration()
Calculate user join duration using an active/inactive state machine.
private
formatUserJoinDuration(array<string|int, mixed> &$user) : void
Merges join and leave events into a single timeline. Only one active session exists at a time — duplicate joins and unmatched leaves are ignored. At most one unfinished session may extend to room end.
Parameters
- $user : array<string|int, mixed>
formatUserPollVoted()
Format user's poll voted data.
private
formatUserPollVoted(array<string|int, mixed> $values) : int
Parameters
- $values : array<string|int, mixed>
Return values
intformatUsersData()
Format user data.
private
formatUsersData() : void
getDurationFromEvents()
Calculate device duration from start/end and user-leave events.
private
getDurationFromEvents(array<string|int, mixed> $events[, string $startStatus = "ANALYTICS_STATUS_STARTED" ][, string $endStatus = "ANALYTICS_STATUS_ENDED" ][, array<string|int, mixed> $leaveEvents = [] ]) : int
Builds a timeline from start, end, and user leave events. A pending device session is closed by the earliest of: matching end event, user leave, or room end.
Uses stripos for prefix matching so values like "ANALYTICS_STATUS_STARTED:node_01" are correctly recognised.
Parameters
- $events : array<string|int, mixed>
-
Device status events (mic_status, webcam_status, etc.)
- $startStatus : string = "ANALYTICS_STATUS_STARTED"
-
Value prefix for start events
- $endStatus : string = "ANALYTICS_STATUS_ENDED"
-
Value prefix for end events
- $leaveEvents : array<string|int, mixed> = []
-
User leave timestamps (ms)
Return values
int —Duration in seconds
getRoomDurationLimit()
Returns the authoritative room duration limit in seconds.
private
getRoomDurationLimit() : int
Uses the smaller of room_duration and room_ended - room_creation to guard against inconsistent data.
Return values
int —0 if no valid limit is available.
getRoomEndMilliseconds()
Get room end time in milliseconds, or null if unavailable.
private
getRoomEndMilliseconds() : int|null
Return values
int|nullgetRoomStartMilliseconds()
Get room start time in milliseconds, or null if unavailable.
private
getRoomStartMilliseconds() : int|null