コード例 #1
0
        private async Task <ActiveError[]> GetEvents(TimeRange range, ActiveError[] alarms)
        {
            Timestamp tStart = range.GetStart();
            Timestamp tEnd   = range.GetEnd();

            VTTQ[] data = await Connection.HistorianReadRaw(Var, tStart, tEnd, 10000, BoundingMethod.TakeLastN);

            var events = data.Select(VTTQ2Event).ToList();

            Func <Timestamp, bool> isInRange = t => (t >= tStart && t <= tEnd);

            return(events.Concat(alarms.Where(a => !isInRange(a.TimeFirst) && isInRange(a.TimeLast)))
                   .OrderByDescending(x => x.T)
                   .ToArray());
        }
コード例 #2
0
ファイル: HistoryPlot.cs プロジェクト: ifakFAST/Mediator.Net
        public async Task <ReqResult> UiReq_LoadData(TimeRange timeRange)
        {
            LastTimeRange = timeRange;

            Timestamp tStart        = timeRange.GetStart();
            Timestamp tEnd          = timeRange.GetEnd();
            int       maxDataPoints = configuration.PlotConfig.MaxDataPoints;
            var       listHistories = new List <VTTQs>();

            QualityFilter filter = configuration.PlotConfig.FilterByQuality;

            foreach (var variable in Variables)
            {
                try {
                    VTTQs data = await Connection.HistorianReadRaw(variable, tStart, tEnd, maxDataPoints, BoundingMethod.CompressToN, filter);

                    listHistories.Add(data);
                }
                catch (Exception) {
                    listHistories.Add(new VTTQs());
                }
            }

            IsLoaded = true;

            var(windowLeft, windowRight) = GetTimeWindow(timeRange, listHistories);

            dataRevision += 1;

            var res = MemoryManager.GetMemoryStream("LoadHistory");

            try {
                using (var writer = new StreamWriter(res, Encoding.ASCII, 8 * 1024, leaveOpen: true)) {
                    writer.Write("{ \"WindowLeft\": " + windowLeft.JavaTicks);
                    writer.Write(", \"WindowRight\": " + windowRight.JavaTicks);
                    writer.Write(", \"DataRevision\": " + dataRevision);
                    writer.Write(", \"Data\": ");
                    WriteUnifiedData(new JsonDataRecordArrayWriter(writer), listHistories);
                    writer.Write('}');
                }
                res.Seek(0, SeekOrigin.Begin);
            }
            catch (Exception) {
                res.Dispose();
                throw;
            }
            return(new ReqResult(200, res));
        }
コード例 #3
0
ファイル: HistoryPlot.cs プロジェクト: ifakFAST/Mediator.Net
        private (Timestamp left, Timestamp right) GetTimeWindow(TimeRange range, List <VTTQs> data)
        {
            switch (range.Type)
            {
            case TimeType.Last:

                Timestamp?latest = data.Any(x => x.Count > 0) ? data.Where(x => x.Count > 0).Max(vtqs => vtqs.Last().T) : (Timestamp?)null;
                var       now    = Timestamp.Now.TruncateMilliseconds().AddSeconds(1);
                var       right  = latest.HasValue ? Timestamp.MaxOf(now, latest.Value) : now;
                var       left   = now - TimeRange.DurationFromTimeRange(range);
                return(left, right);

            case TimeType.Range:

                return(range.GetStart(), range.GetEnd());

            default:
                throw new Exception("Unknown range type: " + range.Type);
            }
        }
コード例 #4
0
ファイル: HistoryPlot.cs プロジェクト: ifakFAST/Mediator.Net
        public async Task <ReqResult> UiReq_DownloadFile(
            TimeRange timeRange,
            VariableRef[] variables,
            string[] variableNames,
            FileType fileType)
        {
            QualityFilter filter = configuration.PlotConfig.FilterByQuality;

            Timestamp tStart = timeRange.GetStart();
            Timestamp tEnd   = timeRange.GetEnd();

            var listHistories = new List <VTTQs>();

            foreach (var variable in variables)
            {
                try {
                    const int ChunckSize = 5000;
                    VTTQs     data       = await Connection.HistorianReadRaw(variable, tStart, tEnd, ChunckSize, BoundingMethod.TakeFirstN, filter);

                    if (data.Count < ChunckSize)
                    {
                        listHistories.Add(data);
                    }
                    else
                    {
                        var buffer = new List <VTTQ>(data);
                        do
                        {
                            Timestamp t = data[data.Count - 1].T.AddMillis(1);
                            data = await Connection.HistorianReadRaw(variable, t, tEnd, ChunckSize, BoundingMethod.TakeFirstN, filter);

                            buffer.AddRange(data);
                        }while (data.Count == ChunckSize);

                        listHistories.Add(buffer);
                    }
                }
                catch (Exception) {
                    listHistories.Add(new VTTQs());
                }
            }

            var columns = new List <string>();

            columns.Add("Time");
            columns.AddRange(variableNames);

            var res = MemoryManager.GetMemoryStream("DownloadFile");

            try {
                string contentType;
                switch (fileType)
                {
                case FileType.CSV:

                    contentType = "text/csv";
                    using (var writer = new StreamWriter(res, Encoding.UTF8, 8 * 1024, leaveOpen: true)) {
                        WriteUnifiedData(new CsvDataRecordArrayWriter(writer, columns, configuration.DataExport.CSV), listHistories);
                    }
                    break;

                case FileType.Spreadsheet:

                    contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                    using (var excel = new ExcelPackage(res)) {
                        ExcelWorksheet sheet = excel.Workbook.Worksheets.Add("Data Export");
                        WriteUnifiedData(new ExcelDataRecordArrayWriter(sheet, columns, configuration.DataExport.Spreadsheet), listHistories);
                        excel.Save();
                    }
                    break;

                default: throw new Exception($"Unknown file type: {fileType}");
                }

                res.Seek(0, SeekOrigin.Begin);
                return(new ReqResult(200, res, contentType));
            }
            catch (Exception) {
                res.Dispose();
                throw;
            }
        }