The roSystemLog component enables the application to receive events from the Roku Streaming Player that are intended for reporting errors and trends, rather than trigger a response to a user action.
Table of Contents
Supported Interfaces
Description
The roSystemLog component requires specific Design Patterns in your BrightScript Application. Take care to:
- Use one roMessagePort throughout the application (instead of creating a new roMessagePort for each screen)
- Create one roSystemLog instance at startup that remains for the entire lifetime of the application.
- Pass the global roMessagePort referenced in the first bullet point to SetMessagePort() on the roSystemLog component.
- Enable the desired log types using EnableType()
- Handle the roSystemLogEvents in all message loops.
All of the log event messages are sent to the roMessagePort that is registered on the roSystemLog object. See roSystemLogEvent for details on the messages.
This object is created with no parameters:
CreateObject("roSystemLog")
Example
Sub showVideoScreenWithLogging(item As Object)
port = CreateObject("roMessagePort")
vs = CreateObject("roVideoScreen")
' **** Metrics *****
' Create a SystemLog object for detailed HTTP information and
' periodic bandwidth measurements. The high level idea is to use
' the roVideoScreen events as the primary driver of the
' reporting and then to use the http.error and http.connect
' roSystemLogEvents for detailed information. In this case that
' detailed information is primarily the ip addresses.
syslog = CreateObject("roSystemLog")
syslog.SetMessagePort(port)
syslog.EnableType("http.error")
syslog.EnableType("http.connect")
syslog.EnableType("bandwidth.minute")
' **** End Metrics *****
vs.SetContent(item)
vs.SetPostionNotificationPeriod(1)
vs.SetMessagePort(port)
vs.Show()
metrics = CreateObject("roAssociativeArray")
metrics.streamStartTimer = CreateObject("roTimespan")
metrics.timeSpentBuffering = 0
metrics.errorCount = 0
While True
If msg.isPlaybackPosition() Then
If metrics.streamStartTimer <> invalid
duration = metrics.streamStartTimer.TotalMilliseconds()
dateTime = CreateObject("roDateTime").asSeconds()*1000
startTime = dateTime - duration
note = "Rebuferring"
if lastpos = 0 note ="Initial loading"
print "Report following prints via urls to your site"
print "Note is " ; note
print "Report startTime, buffering, duration, note"
End If
Elseif type(msg) = "roSystemLogEvent" Then
' Handle the roSystemLogEvents:
i = msg.GetInfo()
If i.LogType = "http.error" or i.LogType = "http.connect"
If i.LogType = "http.error"
metrics.errorCount = metrics.errorCount + 1
print "http error: "; i.HttpCode; "URL: ";i.Url
End If
url = i.OrigUrl
If (not httpIpAddrs.DoesExist(url)) Then
httpIpAddrs[url] = CreateObject("roAssociativeArray")
End If
httpIpAddrs[url].AddReplace(i.TargetIp,"")
Else If i.LogType = "bandwidth.minute"
metrics.bandwidth = i.Bandwidth
End If
End If
REM more event handling
End While
End Sub