Beispiel #1
0
        private void InitializeDataBlocks(long messageId, IList <ChannelMetadataRecord> channels)
        {
            foreach (var channel in channels)
            {
                var uri = new EtpUri(channel.ChannelUri);

                var parentUri = uri.Parent; // Log or ChannelSet

                if (!_dataBlocks.ContainsKey(parentUri))
                {
                    _dataBlocks[parentUri] = new ChannelDataBlock(parentUri);
                }

                var dataBlock = _dataBlocks[parentUri];
                _channelParentUris[channel.ChannelId] = parentUri;

                foreach (var index in channel.Indexes)
                {
                    dataBlock.AddIndex(
                        index.Mnemonic,
                        index.Uom,
                        "long",
                        index.Direction == IndexDirections.Increasing,
                        index.IndexType == ChannelIndexTypes.Time);
                }

                dataBlock.AddChannel(channel.ChannelId, channel.ChannelName, channel.Uom, channel.DataType);
            }
        }
Beispiel #2
0
        public void ChannelDataExtensions_AddIndex_Adds_Index_To_Datablock()
        {
            var log = new Witsml200.Log
            {
                Uuid          = "uid",
                Citation      = new Witsml200.ComponentSchemas.Citation(),
                Wellbore      = new Witsml200.ComponentSchemas.DataObjectReference(),
                SchemaVersion = "2.0"
            };

            Witsml200.ComponentSchemas.ChannelIndex mdChannelIndex = _log20Generator.CreateMeasuredDepthIndex(Witsml200.ReferenceData.IndexDirection.increasing);
            DevKit.InitHeader(log, Witsml200.ReferenceData.LoggingMethod.MWD, mdChannelIndex);

            Assert.AreEqual(1, log.ChannelSet.Count);

            log.ChannelSet[0].Channel[1].DataType = null;

            var dataBlock = new ChannelDataBlock("eml://witsml20/well(1)/wellbore(1)/log(1)");

            foreach (var channelIndex in log.ChannelSet[0].Index)
            {
                dataBlock.AddIndex(channelIndex);
            }

            Assert.AreEqual(1, dataBlock.Indices.Count);
            Assert.AreEqual(mdChannelIndex.Mnemonic, dataBlock.Indices[0].Mnemonic);
            Assert.AreEqual(mdChannelIndex.Uom.ToString(), dataBlock.Indices[0].Unit);
        }
        public void Channel200DataAdapter_UpdateChannelData_With_Special_Characters()
        {
            AddParents();

            // Initialize ChannelSet
            var mdChannelIndex = LogGenerator.CreateMeasuredDepthIndex(IndexDirection.increasing);

            DevKit.InitHeader(Log, LoggingMethod.MWD, mdChannelIndex);

            // Add special channels
            var channelSet = Log.ChannelSet.First();

            channelSet.Channel.Add(LogGenerator.CreateChannel(Log, channelSet.Index, "Message", "MSG", null, "none", EtpDataType.@string, null));
            channelSet.Channel.Add(LogGenerator.CreateChannel(Log, channelSet.Index, "Count", "CNT", null, "none", EtpDataType.@long, null));

            // Initialize data block
            var uri       = channelSet.GetUri();
            var dataBlock = new ChannelDataBlock(uri);
            var channelId = 1;
            var numRows   = ChannelDataBlock.BatchSize;
            var flushRate = ChannelDataBlock.BlockFlushRateInMilliseconds;

            foreach (var channelIndex in channelSet.Index)
            {
                dataBlock.AddIndex(channelIndex);
            }

            foreach (var channel in channelSet.Channel)
            {
                dataBlock.AddChannel(channelId++, channel);
            }

            LogGenerator.GenerateChannelData(dataBlock, numRows);

            var reader = dataBlock.GetReader();

            Assert.IsTrue(reader.Read());

            // Read the first value for mnemonic "MSG"
            var msgValue = reader["MSG"];

            // Submit channel data
            _channelDataProvider.UpdateChannelData(uri, dataBlock.GetReader());

            var mnemonics = channelSet.Index.Select(i => i.Mnemonic)
                            .Concat(channelSet.Channel.Select(c => c.Mnemonic))
                            .ToList();

            // Query channel data
            var dataOut = _channelDataProvider.GetChannelData(uri, new Range <double?>(0, null), mnemonics, null);

            // Assert
            Assert.AreEqual(numRows, dataOut.Count);
            Assert.AreEqual(numRows, dataBlock.Count());
            Assert.AreEqual(2, dataOut[0].Count);
            Assert.AreEqual(5, dataOut[0][1].Count);
            Assert.AreEqual(msgValue, dataOut[0][1][3]);
            Assert.IsTrue(flushRate > 1000);
        }
Beispiel #4
0
        /// <summary>
        /// Processes the data block.
        /// </summary>
        /// <param name="uri">The URI.</param>
        /// <param name="dataBlock">The data block.</param>
        protected virtual void ProcessDataBlock(EtpUri uri, ChannelDataBlock dataBlock)
        {
            var reader = dataBlock.GetReader();

            dataBlock.Clear();

            UpdateChannelData(uri, reader);
        }
Beispiel #5
0
        private void ProcessDataBlock(EtpUri uri, ChannelDataBlock dataBlock)
        {
            var reader = dataBlock.GetReader();

            dataBlock.Clear();

            var dataProvider = _container.Resolve <IChannelDataProvider>(new ObjectName(uri.ObjectType, uri.Version));

            dataProvider.UpdateChannelData(uri, reader);
        }
Beispiel #6
0
        /// <summary>
        /// Generates the channel data.
        /// </summary>
        /// <param name="dataBlock">The data block.</param>
        /// <param name="numRows">The number rows.</param>
        public void GenerateChannelData(ChannelDataBlock dataBlock, int numRows)
        {
            for (var i = 0; i < numRows; i++)
            {
                var index   = (i * 0.1).IndexToScale(3);
                var indexes = new List <object> {
                    index
                };

                // columns
                for (var j = 1; j < dataBlock.ChannelIds.Count + 1; j++)
                {
                    dataBlock.Append(j, indexes, GenerateDataValue(dataBlock.DataTypes[j - 1]));
                }
            }
        }
Beispiel #7
0
        public void ChannelDataExtensions_AddChannel_Adds_Channel_To_Datablock()
        {
            var log = new Witsml200.Log
            {
                Uuid          = "uid",
                Citation      = new Witsml200.ComponentSchemas.Citation(),
                Wellbore      = new Witsml200.ComponentSchemas.DataObjectReference(),
                SchemaVersion = "2.0"
            };

            Witsml200.ComponentSchemas.ChannelIndex mdChannelIndex = _log20Generator.CreateMeasuredDepthIndex(Witsml200.ReferenceData.IndexDirection.increasing);
            DevKit.InitHeader(log, Witsml200.ReferenceData.LoggingMethod.MWD, mdChannelIndex);

            Assert.AreEqual(1, log.ChannelSet.Count);

            log.ChannelSet[0].Channel[1].DataType = null;

            var dataBlock = new ChannelDataBlock("eml://witsml20/well(1)/wellbore(1)/log(1)");

            var channelId = 1;

            foreach (var channel in log.ChannelSet[0].Channel)
            {
                dataBlock.AddChannel(channelId++, channel);
            }

            Assert.AreEqual(3, dataBlock.ChannelIds.Count);
            Assert.AreEqual(3, dataBlock.Mnemonics.Count);
            Assert.AreEqual(3, dataBlock.Units.Count);
            Assert.AreEqual(3, dataBlock.DataTypes.Count);
            Assert.AreEqual(3, dataBlock.NullValues.Count);

            log.ChannelSet[0].Channel.ForEach((x, i) => Assert.AreEqual(x.Mnemonic, dataBlock.Mnemonics[i]));
            log.ChannelSet[0].Channel.ForEach((x, i) => Assert.AreEqual(x.Uom.ToString(), dataBlock.Units[i]));
            log.ChannelSet[0].Channel.ForEach((x, i) => Assert.AreEqual((x.DataType == null ? null : x.DataType.ToString()), dataBlock.DataTypes[i]));
        }