Beispiel #1
0
        public async Task <ActionResult> ExportFile(ExportModel options)
        {
            try
            {
                List <DataModel>       data     = new List <DataModel>();
                string                 filename = Session.SessionID;
                string                 path     = "";
                string                 fullPath = "";
                Helpers.DocumentHelper s        = new Helpers.DocumentHelper();
                filename += ".json";
                path      = Server.MapPath(Common.GlobalSettings.GetJSONPath);
                fullPath  = path + filename;
                List <MeasurementModel> measurements = s.DezerializeJSONFile <List <MeasurementModel> >(fullPath);

                if (measurements == null || measurements?.Count < 1)
                {
                    return(new HttpNotFoundResult("Data Cant be read"));
                }
                string csvFilename          = Session.SessionID + ".csv";
                string csvPath              = Server.MapPath(Common.GlobalSettings.GetCsvPath);
                string csvFullPath          = csvPath + csvFilename;
                Helpers.CsvExportHelper ceh = new Helpers.CsvExportHelper();
                ceh.CreateCsvFile(csvFilename, csvPath, options, measurements);
                //HACK: Possible out of memory if file exceeds maximum storage size of byte array! should this be configured on server IIS?
                byte[] filedata = System.IO.File.ReadAllBytes(csvFullPath);
                Response.AddHeader("Content-Disposition", ceh.CreateContentDisposition("Measurements.csv", filename, path).ToString());
                string contentType = MimeMapping.GetMimeMapping(csvFullPath);
                System.IO.File.Delete(csvFullPath);
                return(File(filedata, contentType));
            }
            catch (IOException ioex)
            {
                Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(ioex, System.Web.HttpContext.Current.Request);
                return(new HttpNotFoundResult("Data Cant be read"));
            }
            catch (UnauthorizedAccessException uaex)
            {
                Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(uaex, System.Web.HttpContext.Current.Request);
                return(new HttpUnauthorizedResult("Data Cant be read"));
            }
            catch (ArgumentException arex)
            {
                Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(arex, System.Web.HttpContext.Current.Request);
                return(new HttpNotFoundResult("Data Cant be read"));
            }
            catch (NotSupportedException nsupex)
            {
                Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(nsupex, System.Web.HttpContext.Current.Request);
                return(new HttpNotFoundResult("Data Cant be read"));
            }
            catch (Exception ex)
            {
                Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(ex, System.Web.HttpContext.Current.Request);
                return(new HttpNotFoundResult("Data Cant be read"));
            }
        }
Beispiel #2
0
        public async Task <ActionResult> Measurements(MeasurementQueryModel query, CancellationToken t)
        {
            CancellationToken disconnectedToken = Response.ClientDisconnectedToken;
            var timeOutToken = Request.TimedOutToken;
            var source       = CancellationTokenSource.CreateLinkedTokenSource(t, disconnectedToken, timeOutToken);

            Helpers.LoginHelper lh = new Helpers.LoginHelper();
            query.Key = lh.GetAuthenticationKey(this.HttpContext);
            if (query.Key != null)
            {
                ModelState.Remove("key");
                ModelState.Add("Key", new ModelState());
                ModelState.SetModelValue("Key", new ValueProviderResult(query.Key, query.Key, System.Globalization.CultureInfo.CurrentCulture));
            }

            if (!ModelState.IsValid)
            {
                return(RedirectToAction("RedirectToLogin"));
            }
            Repository r = new Repository();

            try
            {
                var measurements = await r.GetMeasurementsAsync(query, source.Token, true);

                if (measurements?.Count > 0 && !source.IsCancellationRequested)
                {
                    ViewBag.DataCount = measurements[0].Data.Count;
                    Helpers.DocumentHelper s = new Helpers.DocumentHelper();
                    string filename          = Session.SessionID + ".json";
                    string directoryPath     = Server.MapPath(Common.GlobalSettings.GetJSONPath);
                    s.SerializeJSONFile <List <MeasurementModel> >(measurements, directoryPath, filename);
                    ViewBag.DatetimeFormats  = Helpers.DatetimeFormatHelper.GetPossibleDatetimeFormats();
                    ViewBag.ExportModel      = new Models.ExportModel();
                    ViewBag.MeasurementCount = measurements.Count;
                }
                else
                {
                    source.Dispose();
                    return(Content("<span class='text-danger'>0 measurements found with given parameters.</span>"));
                }
                if (measurements.Count > 3000)
                {
                    var m = measurements.Take(3000);
                    measurements = m.ToList();
                }

                return(PartialView("~/Views/Export/Export.cshtml", measurements));
            }
            catch (KeyNotFoundException kex)
            {
                Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(kex, System.Web.HttpContext.Current.Request);
                return(RedirectToAction("RedirectToLogin"));
            }
            catch (UnauthorizedAccessException uex)
            {
                Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(uex, System.Web.HttpContext.Current.Request);
                return(RedirectToAction("RedirectToLogin"));
            }
            catch (OperationCanceledException canceled)
            {
                Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(canceled, System.Web.HttpContext.Current.Request);
                source.Dispose();
                return(Content("<span class='text-danger'>Request cancelled.</span>"));
            }
            catch (Exception ex)
            {
                Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(ex, System.Web.HttpContext.Current.Request);
                return(RedirectToAction("RedirectToLogin"));
            }
        }