public async Task <IHttpActionResult> Actigraphy() { // https://stackify.com/understanding-asp-net-performance-for-reading-incoming-data/ string data = await Request.Content.ReadAsStringAsync(); var viewModels = Newtonsoft.Json.JsonConvert.DeserializeObject <IEnumerable <ActivityViewModel> >(data); if (viewModels == null || !viewModels.Any()) { return(BadRequest("Something went wrong. Empty request.")); } string userId = User.Identity.GetUserId(); try { BulkCommands.StoreActivities( viewModels.Select(m => { m.UserId = userId; return(m); }) .ToList()); } catch (Exception e) { _service.WriteBugReport(userId, e.Message); } return(Ok()); }
public ActionResult Actigraphy(ResearchAccelerometerViewModel model) { if (!ModelState.IsValid) { ViewBag.Users = _service.GetUserNames().OrderBy(s => s); return(View("Index")); } ModelState.Clear(); if (model._From > model._To) { ModelState.AddModelError("_From", @"The first date must be less than second"); ModelState.AddModelError("To", @"The first date must be less than second"); ViewBag.Users = _service.GetUserNames().OrderBy(s => s); return(View()); } string fileName, report; string exportedUserId = _service.GetUserId(model._UserName); var activities = BulkCommands.GetActivities(exportedUserId, model._From, model._To); List <ActivityPerMinute> activityPerMinute = null; switch (model._ActivityOptions) { case AcceptableActivityOptions.Export: model._ExportOptions = AcceptableExportOptions.Text; fileName = "Report"; report = ReportHelper.GetAccelerometerData(activities); break; case AcceptableActivityOptions.StandardDeviation: model._ExportOptions = AcceptableExportOptions.Text; fileName = "StdDev"; double devX = StandardDeviation.CalculateStdDev(activities.Select(m => (double)m.X).ToList()); double devY = StandardDeviation.CalculateStdDev(activities.Select(m => (double)m.Y).ToList()); double devZ = StandardDeviation.CalculateStdDev(activities.Select(m => (double)m.Z).ToList()); report = ReportHelper.ExportStdDev(devX, devY, devZ); break; case AcceptableActivityOptions.EnergyExpenditure: case AcceptableActivityOptions.ZeroCrossing: activityPerMinute = CalculateActivity.BeginAnalyzation(model._ActivityOptions, activities); report = ReportHelper.ExportProcessedData(activityPerMinute); fileName = string.Concat("Processed-", model._ActivityOptions); break; default: throw new ArgumentOutOfRangeException(); } activities.Clear(); GC.Collect(); switch (model._ExportOptions) { case AcceptableExportOptions.Chart: var chart = ReportHelper.CreateChart(activityPerMinute); // ReSharper disable once PossibleNullReferenceException activityPerMinute.Clear(); GC.Collect(); return(File(chart.GetBytes(), "jpeg", string.Concat(fileName, "-accelerometer - ", model._UserName, " - ", DateTime.Now, ".jpeg"))); case AcceptableExportOptions.Text: return(File(Encoding.UTF8.GetBytes(report), "text/plain", string.Concat(fileName, "-accelerometer - ", model._UserName, " - ", DateTime.Now, ".txt"))); default: throw new ArgumentOutOfRangeException(); } }