public IActionResult GetAll() { var signals = _signalService.GetAll(); if (userRole == "Admin") // All signals for the admin { var model = _mapper.Map <IList <SignalModel> >(signals); return(Ok(model)); } else // Only active signals for normal user { signals = signals.ToList <Signal>(); var signalQuery = from Signal signal in signals where signal.Status == Status.Active select signal; var model = _mapper.Map <IList <SignalModel> >(signalQuery); return(Ok(model)); } }
public void Start() { Task pushEventsToLocalStorageTask = Task.Factory.StartNew(() => { List <Signal> extract = new List <Signal>(); while (true) { if (_TokenSource.IsCancellationRequested) { break; } if (movingToLocal || movingToCloud) // Must wait when any data transfer { Thread.Sleep(20); continue; } movingToLocal = true; Signal signal; try { Thread.Sleep(20); extract.Clear(); while (_EventCache.TryTake(out signal)) { extract.Add(signal); } _Service.Add(extract); } catch (Exception ex) { _Logger.LogError(ex.Message); } finally { movingToLocal = false; } while (_EventCacheTemp.TryTake(out signal)) { _EventCache.Add(signal); } Thread.Sleep(IntervalMemToLocal * 1000); } }, _TokenSource.Token); Task transferEventsToCloudStorageTask = Task.Factory.StartNew(() => { while (true) { Thread.Sleep(IntervalLocalToCloud * 1000); int attempt = 0; while (movingToLocal || movingToCloud) { attempt++; if (attempt > 100) // Do task anyway { break; } Thread.Sleep(100); } movingToCloud = true; try { IEnumerable <Signal> events = _Service.GetAll(); foreach (var signal in events) { _CloudAdapter.Enqueue(signal.DeviceId, signal.Data); } _Service.Truncate(); } catch (Exception ex) { _Logger.LogError(ex.Message); } finally { movingToCloud = false; } } }, _TokenSource.Token); }