/// <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);
        }
Пример #3
0
        /// <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;
        }