/// <summary> /// Extract the first maxMessages messages from stackdriverEntries into stackdriverEntriesInFlight /// </summary> private static void extractStackdriverEntries(StackdriverEntries stackdriverEntries, StackdriverEntries stackdriverEntriesInFlight, int maxMessages) { if (stackdriverEntriesInFlight.entries.Count > 0) { UberDebug.LogErrorChannel(StackdriverChannel, "Attempted to extract a new set of messages while the previous set already was in-flight"); stackdriverEntriesInFlight.entries.Clear(); } int messageExtractCount = Math.Min(stackdriverEntries.entries.Count, maxMessages); stackdriverEntriesInFlight.entries.AddRange(stackdriverEntries.entries.GetRange(0, messageExtractCount)); stackdriverEntries.entries.RemoveRange(0, messageExtractCount); }
public UberLoggerStackdriver(StartCoroutineDelegate startCoroutine, string backendUrl, int maxMessagesPerPost, float minIntervalBetweenPosts, LogSeverityLevel logSeverityLevel, IncludeCallstackMode includeCallstacks, int maxRetries, string sessionId) { this.startCoroutine = startCoroutine; this.backendUrl = backendUrl; this.maxMessagesPerPost = maxMessagesPerPost; this.minIntervalBetweenPosts = minIntervalBetweenPosts; this.logSeverityLevel = logSeverityLevel; this.includeCallstacks = includeCallstacks; this.maxRetries = maxRetries; this.sessionId = sessionId; stackdriverEntries = new StackdriverEntries(sessionId); stackdriverEntriesInFlight = new StackdriverEntries(sessionId); Assert.IsNotNull(this.backendUrl, "You must supply a target URL for the UberLoggerStackdriver backend API. UberLoggerStackdriver will be inactive."); }
/// <summary> /// Given a list of messages, construct a UnityWebRequest that will post these messages to the backend entry point in Google Cloud /// </summary> private static UnityWebRequest createPost(StackdriverEntries stackdriverEntries, string url) { string jsonMessage = stackdriverEntries.ToJson(); byte[] jsonMessageBytes = Encoding.UTF8.GetBytes(jsonMessage); UnityWebRequest request = UnityWebRequest.Post(url, ""); // Hack: provide the JSON data via a custom upload handler // UnityWebRequest.Post will assume that body is going to be sent as application/x-www-form-urlencoded format, and it will apply that conversion to the body string // ( so {"a":"b"} turns into %7b%22a%22:%22b%22%7d ) // To get around this, we provide a handler that will send raw JSON bytes and with the appropriate content type request.uploadHandler = new UploadHandlerRaw(jsonMessageBytes); request.uploadHandler.contentType = "application/json"; return(request); }