public void QueueWrite(InfluxDbEntry[] entries, int maxRetries, string database, string retentionPoliciy) { _logger.Debug("Queuing {0} entries for influx db upload: \r\n{1}", entries.Length, string.Join(Environment.NewLine, entries.Select(x => x.ToString()))); _jobQueue.Add(new InfluxDbUploadQueueElement(entries, maxRetries, database, retentionPoliciy)); if (_handle == null || !_handle.IsRunning || _handle.HasFailed) { if (_handle != null) { _logger.Warn("Not running upload thread detected. Starting new one. Stopping old thread. Has failed: {0}", _handle.HasFailed); _threadManager.StopThread(_handle); } else { _logger.Info("Starting first time upload thread."); } var newThread = new InfluxDbUploadThread(_jobQueue, _retryJobQueue, _logger, this); _handle = _threadManager.Start(newThread); } if (_retryJob == null) { _logger.Info("Starting first time retry job."); _retryJob = new InfluxDbUploadRetryJob(_logger, _jobQueue, _retryJobQueue); _schedulingService.AddJob(_retryJob, new PollingPlan(TimeSpan.FromMinutes(1))); } }
public void StopThread(IManagedThreadHandle managedThread) { lock (_lock) { var curThread = _threads.FirstOrDefault(x => x == managedThread); if (curThread != null) { StopThread(curThread); } } }
public void Run(IManagedThreadHandle handle) { while (!handle.WasInterrupted) { try { foreach (var job in _jobQueue.GetConsumingEnumerable()) { if (job.RetryCount < 1) { _logger.Error("Job has reached max retry count. Discarding job. Errors are:{0}", string.Join(Environment.NewLine, job.Errors.Select(x => x.ToString()))); } try { _logger.Debug("Uploading entries"); if (string.IsNullOrEmpty(job.RetentioPolicy)) { _upload.Write(job.Entries, job.Database); } else { _upload.Write(job.Entries, job.Database, job.RetentioPolicy); } _logger.Info("Uploading entries done"); } catch (Exception ex) { _logger.Warn("Uploading of entries from job run on error. Current count of retries is {0}", job.RetryCount); job.RetryCount--; job.AddError(ex); lock (_retryJobQueue) { _retryJobQueue.Add(new InfluxDbUploadRetryQueueElement(job)); } } } } catch (Exception ex) { _logger.Error(ex, "In influxDbUpload thread an error occured"); } } }
public void Run(IManagedThreadHandle handle) { foreach (var input in _inputQueue.GetConsumingEnumerable()) { var wallpaperMaybe = _wallpaperManager.GetById(input.WallpaperId); if (!wallpaperMaybe.HasValue) { continue; } var wallpaper = wallpaperMaybe.Value; var handler = new ImageConverterWallpaperHandler(_logger, wallpaper, _wallpaperManager); foreach (var file in wallpaper.Files) { file.Accept(handler); } handler.ProcessFiles(); _logger.Info("Converter queue: {0}", _inputQueue.Count); } }
public void Run(IManagedThreadHandle handle) { foreach (var wallpaper in _collection.GetConsumingEnumerable()) { try { _logger.Debug("Checking images for wallpaper '{0}'", wallpaper.Id); CheckFile(wallpaper.Image, $"wallpaper/wallpaper/{wallpaper.Id.ToString()}/original"); CheckFile(wallpaper.Thumbnail, $"wallpaper/wallpaper/{wallpaper.Id.ToString()}/thumbnail"); } catch (Exception ex) { _logger.Error(ex, "Downloading of wallpaper '{0}' not possible", wallpaper.Id); } if (handle.WasInterrupted) { break; } } }