/// <summary> /// Read historian data from server. /// </summary> /// <param name="instanceName">Historian instance name.</param> /// <param name="startTime">Start time of query.</param> /// <param name="stopTime">Stop time of query.</param> /// <param name="measurementIDs">Measurement IDs to query - or <c>null</c> for all available points.</param> /// <param name="resolution">Resolution for data query.</param> /// <param name="seriesLimit">Maximum number of points per series.</param> /// <param name="forceLimit">Flag that determines if series limit should be strictly enforced.</param> /// <returns>Enumeration of <see cref="TrendValue"/> instances read for time range.</returns> public IEnumerable <TrendValue> GetHistorianData(string instanceName, DateTime startTime, DateTime stopTime, ulong[] measurementIDs, Resolution resolution, int seriesLimit, bool forceLimit) { // Cancel any running query CancellationToken cancellationToken = new CancellationToken(); Interlocked.Exchange(ref m_cancellationToken, cancellationToken)?.Cancel(); return(TrendValueAPI.GetHistorianData(GetDatabase(instanceName), startTime, stopTime, measurementIDs, resolution, seriesLimit, forceLimit, cancellationToken)); }
/// <summary> /// Read historian data from server. /// </summary> /// <param name="instanceName">Historian instance name.</param> /// <param name="startTime">Start time of query.</param> /// <param name="stopTime">Stop time of query.</param> /// <param name="measurementIDs">Measurement IDs to query - or <c>null</c> for all available points.</param> /// <param name="resolution">Resolution for data query.</param> /// <param name="seriesLimit">Maximum number of points per series.</param> /// <param name="forceLimit">Flag that determines if series limit should be strictly enforced.</param> /// <returns>Enumeration of <see cref="TrendValue"/> instances read for time range.</returns> public IEnumerable<TrendValue> GetHistorianData(string instanceName, DateTime startTime, DateTime stopTime, ulong[] measurementIDs, Resolution resolution, int seriesLimit, bool forceLimit) { // Cancel any running query CancellationToken cancellationToken = new CancellationToken(); Interlocked.Exchange(ref m_cancellationToken, cancellationToken)?.Cancel(); return TrendValueAPI.GetHistorianData(GetDatabase(instanceName), startTime, stopTime, measurementIDs, resolution, seriesLimit, forceLimit, cancellationToken); }
/// <summary> /// Initializes this <see cref="HadoopDataLoader"/>. /// </summary> public override void Initialize() { Dictionary <string, string> settings = Settings; m_nTags = 0; m_num = 0; m_currNum = 0; // Handle misspelled property so previously configured adapters will still apply proper value if (settings.TryGetValue("UpdateIntervall", out string setting) && int.TryParse(setting, out _)) { settings["UpdateInterval"] = setting; } new ConnectionStringParser <ConnectionStringParameterAttribute>().ParseConnectionString(ConnectionString, this); base.Initialize(); //Generate Query m_query = $"SELECT {ValueField} AS V, {TimeStampField} AS T"; if (!string.IsNullOrEmpty(SubSecondField)) { m_query = m_query + $", {SubSecondField} AS Ticks"; } m_query = m_query + $" FROM {TableName} WHERE {TimeStampField} > '{{0}}' AND {TagQuery}"; if (!string.IsNullOrEmpty(OrderField)) { m_query = $" ORDER BY {OrderField}"; } //Create Mapping Dictionary List <string> pointTags = OutputMeasurements.Select(item => item.Metadata.TagName).ToList(); m_queryParameter = new Dictionary <Guid, List <string> >(); // Read Mapping File using (StreamReader reader = new StreamReader(FilePath.GetAbsolutePath(MappingFile))) { string line; while ((line = reader.ReadLine()) != null) { List <string> entries = line.Split(',').Select(item => item.Trim()).ToList(); string pointTag = entries[0]; int index = pointTags.FindIndex(item => item == pointTag); if (index > -1) { m_queryParameter.Add(OutputMeasurements[index].Key.SignalID, entries.Skip(1).ToList()); } } } m_nTags = m_queryParameter.Count; m_cancelationToken = new CancellationToken(); //start Timer m_timer = new Timer(); m_timer.Interval = UpdateInterval; m_timer.AutoReset = true; m_timer.Elapsed += m_timer_Elapsed; }