static bool TryParseUrl(string url, out CloudWatchDownloader.DownloadRequest request) { request = null; if (!Uri.TryCreate(url, UriKind.Absolute, out var uri)) { return(false); } if (uri.Scheme != urlProtocol) { return(false); } if (uri.Host != urlHost) { return(false); } var ids = new string[0]; long t = 0; string env = "?"; foreach (var q in uri.Query.Split(new [] { '&', '?' }, StringSplitOptions.RemoveEmptyEntries)) { var kv = q.Split('='); if (kv.Length != 2) { continue; } if (kv[0] == "ids") { ids = kv[1].Split(new [] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(Uri.UnescapeDataString).ToArray(); } else if (kv[0] == "t") { long.TryParse(kv[1], out t); } else if (kv[0] == "env") { env = kv[1]; } } request = new CloudWatchDownloader.DownloadRequest( env, ids, t.UnixTimestampMillisToDateTime()); return(true); }
async Task DownloadAndMakeZip( CloudWatchDownloader.DownloadRequest request, Stream zipStream, IPreprocessingStepCallback callback ) { var logs = await CloudWatchDownloader.Download( webViewTools, request, callback.SetStepDescription); using (var archive = new ZipArchive(zipStream, ZipArchiveMode.Create, leaveOpen: true)) { foreach (var l in logs) { string tmpFile = callback.TempFilesManager.GenerateNewName(); File.WriteAllText(tmpFile, l.Value); archive.CreateEntryFromFile(tmpFile, l.Key); File.Delete(tmpFile); } } }