--[[ Specialized analytics reporter for ephemeral counters. Useful for tracking at-a-glance health of a feature. ]] local UserInputService = game:GetService("UserInputService") local Diag = {} Diag.__index = Diag -- reportingService - (object) any object that defines the same functions for Diag as AnalyticsService function Diag.new(reportingService) local rsType = type(reportingService) assert(rsType == "table" or rsType == "userdata", "Unexpected value for reportingService") local self = { _reporter = reportingService, _isEnabled = true, } setmetatable(self, Diag) return self end -- isEnabled : (boolean) function Diag:setEnabled(isEnabled) assert(type(isEnabled) == "boolean", "Expected isEnabled to be a boolean") self._isEnabled = isEnabled end -- counterName : (string) the name of the ephemeral counter to increment -- amount : (int) the value to increment the counter by function Diag:reportCounter(counterName, amount) assert(type(counterName) == "string", "Expected counterName to be a string") assert(type(amount) == "number", "Expected amount to be a number") assert(self._isEnabled, "This reporting service is disabled") -- use special naming convention for Xbox counters -- the call to GetPlatform is wrapped in a pcall() because the Testing Service -- executes the scripts in the wrong authorization level local platformID = Enum.Platform.None pcall(function() platformID = UserInputService:GetPlatform() end) if platformID == Enum.Platform.XBoxOne then counterName = "Xbox-" .. tostring(counterName) end -- the AnalyticsService should automatically handle batch reporting self._reporter:ReportCounter(counterName, amount) end -- category : (string) the name of the statistics buffer which to append the data -- value : (number) any type of numeric value function Diag:reportStats(category, value) assert(type(category) == "string", "Expected category to be a string") assert(type(value) == "number", "Expected value to be a number") assert(self._isEnabled, "This reporting service is disabled") self._reporter:ReportStats(category, value) end return Diag