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); }
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 }); }
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; } }