Example #1
0
        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));
        }
Example #2
0
        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));
        }
Example #3
0
        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)));
        }