Documentation

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"]

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
string

formatTimestamp()

Format timestamp to user readable format.

public formatTimestamp(mixed $timestamp[, bool $ms = true ]) : string
Parameters
$timestamp : mixed
$ms : bool = true
Return values
string

getFormattedEventData()

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
int

countStatusStartTypeEvent()

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
int

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
int

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|null

getRoomStartMilliseconds()

Get room start time in milliseconds, or null if unavailable.

private getRoomStartMilliseconds() : int|null
Return values
int|null
On this page

Search results