示例#1
0
 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);
                 }
             }
         }
     });
 }
示例#2
0
        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);
                    }
            }
        }
示例#5
0
 public static async void Catch(this Task task)
 {
     try
     {
         await task;
     }
     catch (Exception e)
     {
         Loggers.Error(e);
     }
 }
示例#6
0
        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);
                }
            }
        }
示例#7
0
        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);
                    }
                }
        }
示例#8
0
        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);
                }
            }
        }