public AtomicWatch(string subName = null, long total = 0, [CallerMemberName] string name = null) { Logger = Loggers.All; Name = name; SubName = subName; Total.Value = total; Task.Run(async() => { while (!_running.Completed) { try { var count = _count.Value; await Task.WhenAny(Task.Delay(Interval), _running.Source.AsTask()); count = _count.Value - count; var result = GetResult(); Report?.Invoke(result); Logger?.Info(result); } catch (Exception e) { if (Logger is ILogger l) { l.Error(e); } else { Loggers.Error(e); } } } }); }
private async Task StartLogging() { while (_running || _messages.Count > 0) { try { var result = await _messages.PeekAsync(1000); if (result.HasValue) { using (await _fileLock.EnterAsync()) using (var writer = _file.AppendText()) using (var messages = _messages.Consume().OrderBy(m => m.Item.Id).ToList().AsDisposable()) { foreach (var message in messages) { await writer.WriteLineAsync(_formatMessage?message.Item.FormattedMessage : message.Item.Message); } await writer.FlushAsync(); foreach (var message in messages) { message.Complete(); } } } } catch (Exception e) { await Task.Delay(10000); Loggers.Error(e); } } }
public async Task <string> Get(Uri uri, bool ensureSuccess = true) { var w = Stopwatch.StartNew(); while (true) { using (var response = await _client.GetAsync(uri)) { var message = await response.Content.ReadAsStringAsync(); if (response.IsSuccessStatusCode) { return(message); } if (ensureSuccess) { if (response.StatusCode.EqualsAny(HttpStatusCode.BadGateway, HttpStatusCode.InternalServerError)) { if (w.Elapsed.TotalMinutes < 15) { await Task.Delay(5000); continue; } } Loggers.Error(message); response.EnsureSuccessStatusCode(); } return(message); } } }
public async Task <string> Post(Uri uri, object data) { var w = Stopwatch.StartNew(); var json = Jsonizer.Serialize(data); while (true) { using (var content = new StringContent(json, Encoding.UTF8, "application/json")) using (var response = await _client.PostAsync(uri, content)) { var message = await response.Content.ReadAsStringAsync(); if (response.IsSuccessStatusCode) { return(message); } if (response.StatusCode.EqualsAny(HttpStatusCode.BadGateway, HttpStatusCode.InternalServerError)) { if (w.Elapsed.TotalMinutes < 15) { await Task.Delay(5000); continue; } } Loggers.Error(message); response.EnsureSuccessStatusCode(); return(null); } } }
public static async void Catch(this Task task) { try { await task; } catch (Exception e) { Loggers.Error(e); } }
private async void StartBackups() { while (true) { try { await Task.Delay(TimeSpan.FromMinutes(1)); if (_initialized) { var tempFile = new FileInfo(_settings.BackupFile + ".temp"); await tempFile.DeleteAsync(); var files = _dataDir.EnumerateFiles() .Where(f => f.Name.StartsWith("db.")) .Where(f => f.Name.EndsWith(".json.zip")) .ToList(); using (var zip = ZipFile.Open(tempFile.FullName, ZipArchiveMode.Update)) foreach (var file in files.Watch(files.Count)) { using (await _fileLocks.GetOrAdd(file.FullName).EnterAsync()) { var entry = zip.CreateEntry(file.Name, CompressionLevel.Optimal); using var stream = entry.Open(); using var reader = file.OpenRead(); await reader.CopyToAsync(stream); await stream.FlushAsync(); } } await tempFile.MoveAsync(_settings.BackupFile); } } catch (Exception e) { Loggers.Error(e); } } }
public static async void StartLogging() { using (var logger = FileLogger.AppendDefault(typeof(ExecutionTimings))) while (true) { try { await Task.Delay(TimeSpan.FromSeconds(15)); if (_timings.Count == 0) { continue; } var b = new StringBuilder("***Execution Timings***").AppendLine(); var timings = _timings.OrderByDescending(t => t.Value.ElapsedMilliseconds.Value).ToList(); var maxName = timings.Max(t => t.Key.Length); var maxCount = timings.Max(t => t.Value.Count.ToString().Length); foreach (var t in timings) { var totalElapsed = TimeSpan.FromMilliseconds(t.Value.ElapsedMilliseconds); var avgElapsed = TimeSpan.FromMilliseconds(t.Value.ElapsedMilliseconds / t.Value.Count); b.Append($"Name: {t.Key.PadRight(maxName)} ") .Append($"Count: {t.Value.Count.ToString().PadLeft(maxCount)} ") .Append($"Total Elapsed: {totalElapsed} ") .Append($"Avg Elapsed: {avgElapsed} ") .AppendLine(); } await logger.ClearLog(); logger.Info(b.ToString()); } catch (Exception e) { Loggers.Error(e); } } }
private async Task StartLogging() { while (_running || _messages.Count > 0) { try { var result = await _messages.ConsumeAsync(1000); if (result.HasValue) { await Console.Out.WriteLineAsync(result.Value.Message); await Console.Out.FlushAsync(); } } catch (Exception e) { await Task.Delay(10000); Loggers.Error(e); } } }