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