public IHttpActionResult GetChartTemplate(string id, [FromUri] int[] projectId, [FromUri] string format = null) { var result = _selectProjectListQuery.Execute(User.Identity.GetUserId(), projectId); if (result.Status != ProjectStatusDto.Ready) { return(Content(HttpStatusCode.NotFound, new { ProjectStatus = result.Status })); } var timer = Stopwatch.StartNew(); int.TryParse(id, out var templateId); var chartTemplate = _plotTemplateService.GetChartTemplate(new ChartOwner(User.Identity.GetUserId(), User.Identity.Name), templateId, result.Projects); if (chartTemplate == null) { Log.Error($"Template {templateId} not found"); return(NotFound()); } timer.Restart(); if (format?.ToLower() == "xlsx") { return(new ExcelHttpActionResult(_exporter.ToExcel(chartTemplate.Chart))); } var dto = chartTemplate.Chart.ToChartDto($"Template - {chartTemplate.Template.Name}"); Log.Info($"ChartController.GetChartByTemplate: Plot({chartTemplate.Template.Name}, {chartTemplate.Template.PlotParameters}, ProjectIds: {string.Join(",", projectId)} UTC Time: {DateTime.UtcNow} toDto {timer.ElapsedMilliseconds} ms"); return(Ok(dto)); }
public IHttpActionResult GetViewChart(int id, [FromUri] string format = null) { var timer = Stopwatch.StartNew(); var userId = User.Identity.GetUserId(); var selectedView = _db.Views.First(v => v.UserId == userId && v.Id == id); if (selectedView == null) { return(NotFound()); } var projectIds = selectedView.Projects.Select(p => p.Id).ToArray(); var result = _selectProjectListQuery.Execute(User.Identity.GetUserId(), projectIds); if (result.Status != ProjectStatusDto.Ready) { return(Content(HttpStatusCode.NotFound, new { result.Status })); } var chartTemplate = _plotTemplateService.GetChartTemplate(new ChartOwner(User.Identity.GetUserId(), User.Identity.Name), selectedView.PlotTemplateId, result.Projects); if (chartTemplate == null) { Log.Error($"Template {id} not found"); return(NotFound()); } if (format?.ToLower() == "xlsx") { return(new ExcelHttpActionResult(_exporter.ToExcel(chartTemplate.Chart))); } var dto = chartTemplate.Chart.ToChartDto($"View - {chartTemplate.Template.Name}"); Log.Info($"View({selectedView.Id}, {selectedView.PlotTemplateId}): toDto {timer.ElapsedMilliseconds} ms"); return(Ok(dto)); }
public IHttpActionResult GetExportChart( [FromUri] int[] projectId, [FromUri] PlotType plotType, [FromUri] string format = null, [FromUri] string templateIdValue = null, [FromUri] int?maxCycles = null, [FromUri] int?maxPointsPerSeries = null, [FromUri] int?fromCycle = null, [FromUri] int?toCycle = null, [FromUri] int?everyNthCycle = null, [FromUri] string customCycleFilter = null, [FromUri] bool?disableCharge = null, [FromUri] bool?disableDischarge = null, [FromUri] double?threshold = null, [FromUri] double?minY = null, [FromUri] double?maxY = null, [FromUri] CurrentUoM?currentUoM = null, [FromUri] CapacityUoM?capacityUoM = null, [FromUri] TimeUoM?timeUoM = null, [FromUri] PowerUoM?powerUoM = null, [FromUri] EnergyUoM?energyUoM = null, [FromUri] ResistanceUoM?resistanceUoM = null, [FromUri] NormalizeBy?normalizeBy = null, [FromUri] int?pointSize = null, [FromUri] double?chargeFrom = null, [FromUri] double?chargeTo = null) { var result = _selectProjectListQuery.Execute(User.Identity.GetUserId(), projectId); if (result.Status != ProjectStatusDto.Ready) { return(NotFound()); } var timer = Stopwatch.StartNew(); Chart chart; if ((plotType == PlotType.View || plotType == PlotType.Template) && !string.IsNullOrEmpty(templateIdValue)) { int.TryParse(templateIdValue, out var templateId); var item = _plotTemplateService.GetChartTemplate(new ChartOwner(User.Identity.GetUserId(), User.Identity.Name), templateId, result.Projects); if (item == null) { Log.Error($"Template {templateId} not found"); return(NotFound()); } chart = item.Chart; timer.Restart(); } else if (plotType == PlotType.Soc) { var parameters = new PlotParameters { MaxCycles = maxCycles, MaxPointsPerSeries = maxPointsPerSeries, FromCycle = fromCycle, ToCycle = toCycle, EveryNthCycle = everyNthCycle, CustomCycleFilter = customCycleFilter, DisableCharge = disableCharge, DisableDischarge = disableDischarge, Threshold = threshold, MinY = minY, MaxY = maxY, CurrentUoM = currentUoM, CapacityUoM = capacityUoM, TimeUoM = timeUoM, PowerUoM = powerUoM, EnergyUoM = energyUoM, ResistanceUoM = resistanceUoM, NormalizeBy = normalizeBy, PointSize = pointSize }; StateOfCharge stateOfCharge = new StateOfCharge { ChargeFrom = chargeFrom, ChargeTo = chargeTo }; chart = _chartPlotterFactory(PlotType.Soc).Plot(false, new ChartPlotterContext { Parameters = parameters, ProjectIds = projectId, Trace = User.Identity.Name, Data = stateOfCharge }); chart.PlotParameters = parameters; Log.Info($"ChartController.GetExportChart: Plot({plotType}, {parameters}, {projectId}): plot {timer.ElapsedMilliseconds} ms"); } else { PlotParameters parameters = new PlotParameters { MaxCycles = maxCycles, MaxPointsPerSeries = maxPointsPerSeries, FromCycle = fromCycle, ToCycle = toCycle, EveryNthCycle = everyNthCycle, CustomCycleFilter = customCycleFilter, DisableCharge = disableCharge, DisableDischarge = disableDischarge, Threshold = threshold, MinY = minY, MaxY = maxY, CurrentUoM = currentUoM, CapacityUoM = capacityUoM, TimeUoM = timeUoM, PowerUoM = powerUoM, EnergyUoM = energyUoM, ResistanceUoM = resistanceUoM, NormalizeBy = normalizeBy, PointSize = pointSize }; chart = _chartPlotterFactory(plotType).Plot(true, new ChartPlotterContext { Parameters = parameters, ProjectIds = projectId, Trace = User.Identity.Name }); Log.Info($"ChartController.GetExportChart: Plot({plotType}, {parameters}, {projectId}): plot {timer.ElapsedMilliseconds} ms"); chart.PlotParameters = parameters; } var files = HttpContext.Current.Request.Files; Stream imageStream = null; if (files.Count > 0) { imageStream = files[0].InputStream; } return(new ExcelHttpActionResult(_exporter.ToExcel(chart, imageStream))); }