Exemplo n.º 1
0
        private List <ReflectedTimeSeriesPoint> LoadPointsFromNg(IAquariusClient client)
        {
            var timeSeriesInfo = client.GetTimeSeriesInfo(Context.SourceTimeSeries.Identifier);

            var points = client.Publish.Get(new TimeAlignedDataServiceRequest
            {
                TimeSeriesUniqueIds = new List <Guid> {
                    timeSeriesInfo.UniqueId
                },
                QueryFrom = Context.SourceQueryFrom?.ToDateTimeOffset(),
                QueryTo   = Context.SourceQueryTo?.ToDateTimeOffset()
            })
                         .Points
                         .Select(p => new ReflectedTimeSeriesPoint
            {
                Time       = Instant.FromDateTimeOffset(p.Timestamp),
                Value      = p.NumericValue1,
                GradeCode  = p.GradeCode1.HasValue ? (int)p.GradeCode1 : (int?)null,
                Qualifiers = QualifiersParser.Parse(p.Qualifiers1)
            })
                         .ToList();

            Log.Info($"Loaded {points.Count} points from {timeSeriesInfo.Identifier}");

            return(points);
        }
Exemplo n.º 2
0
        private TimeSeriesPoint ParsePoint(string[] fields)
        {
            Instant?      time       = null;
            double?       value      = null;
            int?          gradeCode  = null;
            List <string> qualifiers = null;
            PointType?    pointType  = null;

            if (Context.CsvDateOnlyField > 0)
            {
                var dateOnly = DateTime.MinValue;
                var timeOnly = DefaultTimeOfDay;

                ParseField(fields, Context.CsvDateOnlyField, text =>
                {
                    if (TryParsePointType(text, out var pType))
                    {
                        pointType = pType;
                        return;
                    }

                    dateOnly = ParseDateOnly(text, Context.CsvDateOnlyFormat);
                });

                if (Context.CsvTimeOnlyField > 0)
                {
                    ParseField(fields, Context.CsvTimeOnlyField, text => timeOnly = ParseTimeOnly(text, Context.CsvTimeOnlyFormat));
                }

                time = InstantFromDateTime(dateOnly.Add(timeOnly));
            }
            else
            {
                ParseField(fields, Context.CsvDateTimeField, text =>
                {
                    if (TryParsePointType(text, out var pType))
                    {
                        pointType = pType;
                        return;
                    }

                    time = ParseInstant(text);
                });
            }

            ParseField(fields, Context.CsvValueField, text =>
            {
                if (TryParsePointType(text, out var pType))
                {
                    pointType = pType;
                    return;
                }

                if (double.TryParse(text, out var numericValue))
                {
                    value = numericValue;
                }
            });
            ParseField(fields, Context.CsvGradeField, text =>
            {
                if (int.TryParse(text, out var grade))
                {
                    gradeCode = grade;
                }
            });
            ParseField(fields, Context.CsvQualifiersField, text => qualifiers = QualifiersParser.Parse(text));

            if ((pointType == null || pointType == PointType.Unknown) && time == null)
            {
                return(null);
            }

            if (pointType != PointType.Gap)
            {
                pointType = null;
            }

            return(new TimeSeriesPoint
            {
                Type = pointType,
                Time = time,
                Value = value,
                GradeCode = gradeCode,
                Qualifiers = qualifiers
            });
        }
Exemplo n.º 3
0
        private TimeSeriesPoint ParseExcelRow(DataRow row)
        {
            Instant?      time       = null;
            double?       value      = null;
            int?          gradeCode  = null;
            List <string> qualifiers = null;

            if (!string.IsNullOrEmpty(Context.CsvComment) && ((row[0] as string)?.StartsWith(Context.CsvComment) ?? false))
            {
                return(null);
            }

            try
            {
                if (Context.CsvDateOnlyField > 0)
                {
                    var dateOnly = DateTime.MinValue;
                    var timeOnly = DefaultTimeOfDay;

                    ParseColumn <DateTime>(row, Context.CsvDateOnlyField, dateTime => dateOnly = dateTime.Date);

                    if (Context.CsvTimeOnlyField > 0)
                    {
                        ParseColumn <DateTime>(row, Context.CsvTimeOnlyField, dateTime => timeOnly = dateTime.TimeOfDay);
                    }

                    time = InstantFromDateTime(dateOnly.Add(timeOnly));
                }
                else
                {
                    ParseColumn <DateTime>(row, Context.CsvDateTimeField, dateTime => time = InstantFromDateTime(dateTime));
                }

                ParseColumn <double>(row, Context.CsvValueField, number => value      = number);
                ParseColumn <double>(row, Context.CsvGradeField, number => gradeCode  = (int)number);
                ParseStringColumn(row, Context.CsvQualifiersField, text => qualifiers = QualifiersParser.Parse(text));

                return(new TimeSeriesPoint
                {
                    Time = time,
                    Value = value,
                    GradeCode = gradeCode,
                    Qualifiers = qualifiers
                });
            }
            catch (Exception)
            {
                if (Context.CsvIgnoreInvalidRows)
                {
                    return(null);
                }

                throw;
            }
        }