Exemplo n.º 1
0
        private async Task <HttpResponseMessage> CommitS3CrashUpload(MinidumpPostOptions options, string s3Key, string md5)
        {
            using (var httpClient = new HttpClient())
            {
                var route = $"{baseUrl}/api/commitS3CrashUpload";

                var crashTypeId = options?.MinidumpType != MinidumpTypeId.Unknown ? options.MinidumpType : MinidumpType;
                var body        = CreateMultiPartFormDataContent(options);
                body.Add(new StringContent($"{(int)crashTypeId}"), "crashTypeId");
                body.Add(new StringContent(s3Key), "s3Key");
                body.Add(new StringContent(md5), "md5");

                return(await httpClient.PostAsync(route, body));
            }
        }
Exemplo n.º 2
0
        private byte[] CreateInMemoryCrashZipFile(FileInfo minidumpFileInfo, MinidumpPostOptions options)
        {
            var files = new List <InMemoryFile>();

            files.Add(new InMemoryFile()
            {
                FileName = minidumpFileInfo.Name, Content = File.ReadAllBytes(minidumpFileInfo.FullName)
            });

            foreach (var attachment in options.AdditionalAttachments)
            {
                files.Add(new InMemoryFile()
                {
                    FileName = attachment.Name, Content = File.ReadAllBytes(attachment.FullName)
                });
            }

            byte[] zipBytes;
            using (var archiveStream = new MemoryStream())
            {
                using (var archive = new ZipArchive(archiveStream, ZipArchiveMode.Create, true))
                {
                    foreach (var file in files)
                    {
                        var zipArchiveEntry = archive.CreateEntry(file.FileName, CompressionLevel.Fastest);
                        using (var zipStream = zipArchiveEntry.Open())
                        {
                            zipStream.Write(file.Content, 0, file.Content.Length);
                        }
                    }
                }

                zipBytes = archiveStream.ToArray();
            }

            return(zipBytes);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Post a minidump file to BugSplat
        /// </summary>
        /// <param name="ex">The minidump file that will be posted to BugSplat</param>
        /// <param name="options">Optional parameters that will override the defaults if provided</param>
        public async Task <HttpResponseMessage> Post(FileInfo minidumpFileInfo, MinidumpPostOptions options = null)
        {
            ThrowIfArgumentIsNull(minidumpFileInfo, "minidumpFileInfo");

            options = options ?? new MinidumpPostOptions();

            var zipBytes            = CreateInMemoryCrashZipFile(minidumpFileInfo, options);
            var crashUploadResponse = await GetCrashUploadUrl(zipBytes.Length);

            ThrowIfHttpRequestFailed(crashUploadResponse);

            var presignedUrl = await ParseCrashUploadUrl(crashUploadResponse);

            var uploadFileResponse = await UploadFileToPresignedURL(presignedUrl, zipBytes);

            ThrowIfHttpRequestFailed(uploadFileResponse);

            var md5 = GetETagFromResponseHeaders(uploadFileResponse.Headers);
            var commitS3CrashResponse = await CommitS3CrashUpload(options, presignedUrl.ToString(), md5);

            ThrowIfHttpRequestFailed(commitS3CrashResponse);

            return(commitS3CrashResponse);
        }