Пример #1
0
 public WI_ReadRaw(VariableRef variable, Timestamp startInclusive, Timestamp endInclusive, int maxValues, BoundingMethod bounding, QualityFilter filter, TaskCompletionSource <List <VTTQ> > promise)
 {
     Variable       = variable;
     StartInclusive = startInclusive;
     EndInclusive   = endInclusive;
     MaxValues      = maxValues;
     Bounding       = bounding;
     Filter         = filter;
     Promise        = promise;
 }
Пример #2
0
        private Timeseries.BoundingMethod Map(BoundingMethod b)
        {
            switch (b)
            {
            case BoundingMethod.CompressToN: return(Timeseries.BoundingMethod.CompressToN);

            case BoundingMethod.TakeFirstN: return(Timeseries.BoundingMethod.TakeFirstN);

            case BoundingMethod.TakeLastN: return(Timeseries.BoundingMethod.TakeLastN);
            }
            throw new Exception("Unknown bounding");
        }
Пример #3
0
 public abstract IList <VTTQ> ReadData(Timestamp startInclusive, Timestamp endInclusive, int maxValues, BoundingMethod bounding);
Пример #4
0
        public override async Task <VTTQs> HistorianReadRaw(VariableRef variable, Timestamp startInclusive, Timestamp endInclusive, int maxValues, BoundingMethod bounding, QualityFilter filter = QualityFilter.ExcludeNone)
        {
            var request = MakeSessionRequest <HistorianReadRawReq>();

            request.Variable       = variable;
            request.StartInclusive = startInclusive;
            request.EndInclusive   = endInclusive;
            request.MaxValues      = maxValues;
            request.Bounding       = bounding;
            request.Filter         = filter;
            return(await Post <VTTQs>(request, binaryDeserializer : BinSeri.VTTQ_Serializer.Deserialize));
        }
Пример #5
0
        public override List <VTTQ> ReadData(Timestamp startInclusive, Timestamp endInclusive, int maxValues, BoundingMethod bounding, QualityFilter filter)
        {
            long N = CountData(startInclusive, endInclusive, filter);

            PreparedStatement statement;

            switch (bounding)
            {
            case BoundingMethod.TakeFirstN:
                statement = stmtRawFirstN;
                break;

            case BoundingMethod.TakeLastN:
                statement = stmtRawLastN;
                break;

            case BoundingMethod.CompressToN:
                if (N <= maxValues)
                {
                    return(ReadData(startInclusive, endInclusive, maxValues, BoundingMethod.TakeFirstN, filter));
                }
                else
                {
                    return(ReadDataCompressed(startInclusive, endInclusive, maxValues, N, filter));
                }

            default:
                throw new Exception($"Unknown BoundingMethod: {bounding}");
            }

            statement[0] = startInclusive.ToDateTime();
            statement[1] = endInclusive.ToDateTime();
            statement[2] = maxValues;

            var filterHelper = QualityFilterHelper.Make(filter);

            int initSize = N < maxValues ? (int)N : maxValues;
            var res      = new List <VTTQ>(initSize);

            using (var reader = statement.ExecuteReader()) {
                while (reader.Read())
                {
                    VTTQ vttq = ReadVTTQ(reader);
                    if (filterHelper.Include(vttq.Q))
                    {
                        res.Add(vttq);
                    }
                }
            }

            if (bounding == BoundingMethod.TakeLastN)
            {
                res.Reverse();
            }

            return(res);
        }
Пример #6
0
 /// <summary>
 /// Reads the history of a variable in a certain time interval.
 /// </summary>
 /// <param name="variable">The variable to read</param>
 /// <param name="startInclusive">The start of the time interval (inclusive)</param>
 /// <param name="endInclusive">The end of the time interval (inclusive)</param>
 /// <param name="maxValues">The maximum number of data points to return</param>
 /// <param name="bounding">Defines which data points to return when there are more data points in the time interval than maxValues</param>
 public abstract Task <VTTQ[]> HistorianReadRaw(VariableRef variable, Timestamp startInclusive, Timestamp endInclusive, int maxValues, BoundingMethod bounding);
Пример #7
0
 public abstract List <VTTQ> ReadData(Timestamp startInclusive, Timestamp endInclusive, int maxValues, BoundingMethod bounding, QualityFilter filter);
Пример #8
0
        public Task <IList <VTTQ> > ReadRaw(VariableRef variable, Timestamp startInclusive, Timestamp endInclusive, int maxValues, BoundingMethod bounding)
        {
            var promise = new TaskCompletionSource <IList <VTTQ> >();

            if (CheckPrecondition(promise))
            {
                queue.Post(new WI_ReadRaw()
                {
                    Variable       = variable,
                    StartInclusive = startInclusive,
                    EndInclusive   = endInclusive,
                    MaxValues      = maxValues,
                    Bounding       = bounding,
                    Promise        = promise
                });
            }
            return(promise.Task);
        }
Пример #9
0
        public Task <List <VTTQ> > ReadRaw(VariableRef variable, Timestamp startInclusive, Timestamp endInclusive, int maxValues, BoundingMethod bounding, QualityFilter filter)
        {
            var promise = new TaskCompletionSource <List <VTTQ> >();

            if (CheckPrecondition(promise))
            {
                queue.Post(new WI_ReadRaw(variable, startInclusive, endInclusive, maxValues, bounding, filter, promise));
            }
            return(promise.Task);
        }
Пример #10
0
        public override List <VTTQ> ReadData(Timestamp startInclusive, Timestamp endInclusive, int maxValues, BoundingMethod bounding, QualityFilter filter)
        {
            long N = CountData(startInclusive, endInclusive, filter);

            //double millis = (endInclusive - startInclusive).TotalMilliseconds + 1;
            //double avgInterval_MS = millis / N;
            //double requestInterval_MS = 60 * 1000;

            //double N_2 = N;
            //if (requestInterval_MS > avgInterval_MS) {
            //    N_2 = N / (requestInterval_MS / avgInterval_MS);
            //}

            PreparedStatement statement;

            switch (bounding)
            {
            case BoundingMethod.TakeFirstN:
                statement = stmtRawFirstN;
                break;

            case BoundingMethod.TakeLastN:
                statement = stmtRawLastN;
                break;

            case BoundingMethod.CompressToN:
                if (N <= maxValues)
                {
                    return(ReadData(startInclusive, endInclusive, maxValues, BoundingMethod.TakeFirstN, filter));
                }
                else
                {
                    return(ReadDataCompressed(startInclusive, endInclusive, maxValues, N, filter));
                }

            default:
                throw new Exception($"Unknown BoundingMethod: {bounding}");
            }

            statement[0] = startInclusive.JavaTicks;
            statement[1] = endInclusive.JavaTicks;
            statement[2] = maxValues;

            var filterHelper = QualityFilterHelper.Make(filter);

            int initSize = N < maxValues ? (int)N : maxValues;
            var res      = new List <VTTQ>(initSize);

            using (var reader = statement.ExecuteReader()) {
                while (reader.Read())
                {
                    VTTQ vttq = ReadVTTQ(reader);
                    if (filterHelper.Include(vttq.Q))
                    {
                        res.Add(vttq);
                    }
                }
            }

            if (bounding == BoundingMethod.TakeLastN)
            {
                res.Reverse();
            }

            return(res);
        }
Пример #11
0
        public override IList <VTTQ> ReadData(Timestamp startInclusive, Timestamp endInclusive, int maxValues, BoundingMethod bounding)
        {
            long N = CountData(startInclusive, endInclusive);

            PreparedStatement statement = null;

            switch (bounding)
            {
            case BoundingMethod.TakeFirstN:
                statement = stmtRawFirstN;
                break;

            case BoundingMethod.TakeLastN:
                statement = stmtRawLastN;
                break;

            case BoundingMethod.CompressToN:
                if (N <= maxValues)
                {
                    return(ReadData(startInclusive, endInclusive, maxValues, BoundingMethod.TakeFirstN));
                }
                else
                {
                    return(ReadDataCompressed(startInclusive, endInclusive, maxValues, N));
                }
            }

            statement[0] = startInclusive.JavaTicks;
            statement[1] = endInclusive.JavaTicks;
            statement[2] = maxValues;

            int initSize = N < maxValues ? (int)N : maxValues;
            var res      = new List <VTTQ>(initSize);

            using (var reader = statement.ExecuteReader()) {
                while (reader.Read())
                {
                    res.Add(ReadVTTQ(reader));
                }
            }

            if (bounding == BoundingMethod.TakeLastN)
            {
                res.Reverse();
            }

            return(res);
        }
Пример #12
0
        public async Task <List <VTTQ> > HistorianReadRaw(VariableRef variable, Timestamp startInclusive, Timestamp endInclusive, int maxValues, BoundingMethod bounding, QualityFilter filter)
        {
            HistoryDBWorker?worker = WorkerByVarRef(variable);

            if (worker == null)
            {
                throw new Exception("Failed to find DB worker for variable " + variable);
            }
            CheckExistingVariable(variable);
            return(await worker.ReadRaw(variable, startInclusive, endInclusive, maxValues, bounding, filter));
        }
Пример #13
0
 public override Task <List <VTTQ> > HistorianReadRaw(VariableRef variable, Timestamp startInclusive, Timestamp endInclusive, int maxValues, BoundingMethod bounding, QualityFilter filter = QualityFilter.ExcludeNone)
 {
     throw new InvalidOperationException("HistorianReadRaw on closed connection");
 }
Пример #14
0
        public override async Task <VTTQ[]> HistorianReadRaw(VariableRef variable, Timestamp startInclusive, Timestamp endInclusive, int maxValues, BoundingMethod bounding)
        {
            JObject request = MakeSessionRequest();

            request["variable"]       = new JRaw(StdJson.ObjectToString(variable));
            request["startInclusive"] = new JRaw(StdJson.ValueToString(startInclusive));
            request["endInclusive"]   = new JRaw(StdJson.ValueToString(endInclusive));
            request["maxValues"]      = new JRaw(StdJson.ValueToString(maxValues));
            request["bounding"]       = new JRaw(StdJson.ValueToString(bounding));
            return(await Post <VTTQ[]>("HistorianReadRaw", request));
        }