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