コード例 #1
0
        public void ProcessQueue(CloudBlockBlob blob,
                                 string strContainer,
                                 CloudQueueMessage receivedMessage,
                                 CloudQueue urbanWaterQueue)
        {
            EventSourceWriter.Log.MessageMethod("Worker Role Prcessing HeadEndSystem file " + receivedMessage.Id.ToString() + " " + blob.Name);

            SQLAzureDataContext currentContext = new SQLAzureDataContext();

            using (TextReader sr = new StringReader(blob.DownloadText()))
            {
                using (var csv = new CsvReader(sr))
                {
                    csv.Configuration.Delimiter = ";";
                    while (csv.Read())
                    {
                        try
                        {
                            MeterReadingEntity    sm    = new MeterReadingEntity();
                            DMAMeterReadingEntity dmasm = new DMAMeterReadingEntity();
                            if (csv.CurrentRecord[0] != null &&
                                csv.CurrentRecord[3] != null &&
                                csv.CurrentRecord[4] != null &&
                                csv.CurrentRecord[5] != null &&
                                string.Compare(csv.CurrentRecord[5], "LITER") == 0)
                            {
                                DateTime creationDateTime = DateTime.ParseExact(csv.CurrentRecord[3], "dd/MM/yyyy HH:mm:ss", null).ToUniversalTime();

//                                DMAMeterTableStorageContext dmamcontext = new DMAMeterTableStorageContext(strContainer + "_dmameter");
                                // DMAMeterEntity dmaMeterEntity = dmamcontext.MeterReadings.FirstOrDefault(x => x.PartitionKey == csv.CurrentRecord[0]);
                                string dmaId = currentContext.DMAs.Where(x => x.Name == "El Toyo – Retamar").FirstOrDefault().Identifier;

                                sm.PartitionKey = csv.CurrentRecord[0];
                                sm.CreatedOn    = creationDateTime;
                                sm.RowKey       = creationDateTime.Ticks.ToString();
                                sm.Reading      = csv.CurrentRecord[4];
                                sm.Encrypted    = false;
                                sm.DMA          = dmaId;

                                dmasm.PartitionKey = dmaId;
                                dmasm.CreatedOn    = creationDateTime;
                                dmasm.RowKey       = creationDateTime.Ticks.ToString();
                                dmasm.Reading      = csv.CurrentRecord[4];
                                dmasm.Encrypted    = false;
                                dmasm.MeterID      = csv.CurrentRecord[0];
                            }
                            else
                            {
                                EventSourceWriter.Log.MessageMethod("ERROR: Null values parsed in HeadEndSystem file  " + blob.Name);
                            }

                            string strWriteConnectionString = "MKWDNConnectionString";
                            bool   blAttempt = WriteMessageMeterDataToDataTable(sm, dmasm, strWriteConnectionString, strContainer);

                            if (!blAttempt)
                            {
                                EventSourceWriter.Log.MessageMethod("ERROR:Processing Entry NOT added to storage " + receivedMessage.Id.ToString());
                                EventSourceWriter.Log.MessageMethod("ERROR:Processing Entry NOT added to storage " + blob.Name + " " + sm.PartitionKey);
                            }
                        }
                        catch (Exception e)
                        {
                            EventSourceWriter.Log.MessageMethod("Exception processing meter reading: " + e.Message);
                        }
                    }
                }
            }

            EventSourceWriter.Log.MessageMethod("Processing Complete Entry added to storage " + receivedMessage.Id.ToString());

            urbanWaterQueue.DeleteMessage(receivedMessage);

            Event newEvent = new Event();

            newEvent.BusDispatched = false;
            newEvent.EventDateTime = DateTime.Now;
            newEvent.EventType     = (int)EventTypes.NewMeteringData;
            currentContext.Events.InsertOnSubmit(newEvent);
            currentContext.SubmitChanges();
        }
コード例 #2
0
        public void ProcessQueue(CloudBlockBlob blob,
                                 string strContainer,
                                 CloudQueueMessage receivedMessage,
                                 CloudQueue urbanWaterQueue)
        {
            EventSourceWriter.Log.MessageMethod("Worker Role Prcessing Water Meter Reading file " + receivedMessage.Id.ToString() + " " + blob.Name);

            SQLAzureDataContext currentContext = new SQLAzureDataContext();

            var xml  = blob.DownloadText();
            var xDoc = XDocument.Parse(xml);

            IEnumerable <XElement> root = xDoc.Elements();
            XElement gateways           = root.Elements().Where(x => x.Name.LocalName == "gateways").FirstOrDefault();

            try
            {
                foreach (XElement gateway in gateways.Elements().Where(x => x.Name.LocalName == "gateway"))
                {
                    XElement collections = gateway.Elements().Where(x => x.Name.LocalName == "collections").FirstOrDefault();
                    foreach (XElement collection in collections.Elements().Where(x => x.Name.LocalName == "collection"))
                    {
                        string   ProducerId = collection.Elements().Where(x => x.Name.LocalName == "producer-id").FirstOrDefault().Value;
                        XElement data       = collection.Elements().Where(x => x.Name.LocalName == "data").FirstOrDefault();

                        foreach (XElement record in data.Elements())
                        {
                            string recordDateTime = record.Attributes().Where(x => x.Name.LocalName == "ts").FirstOrDefault().Value;
                            string recordValue    = record.Elements().Where(x => x.Name.LocalName == "CURRENT_INDEX").FirstOrDefault().Value;

                            MeterReadingEntity    sm    = new MeterReadingEntity();
                            DMAMeterReadingEntity dmasm = new DMAMeterReadingEntity();

                            if (!string.IsNullOrEmpty(ProducerId) &&
                                !string.IsNullOrEmpty(recordDateTime) &&
                                !string.IsNullOrEmpty(recordValue)
                                )
                            {
                                string dmaId = currentContext.DMAs.Where(x => x.Name == "Lagar").FirstOrDefault().Identifier;
//                            currentContext.Meters.Where(x => x.MeterIdentity == ProducerId).FirstOrDefault().Utility);
//                            DMAMeterTableStorageContext dmamcontext = new DMAMeterTableStorageContext(container.Name + "_dmameter");
//                            DMAMeterEntity dmaMeterEntity = dmamcontext.MeterReadings.FirstOrDefault(x => x.PartitionKey == ProducerId);

                                sm.PartitionKey = ProducerId;
                                sm.CreatedOn    = DateTime.Parse(recordDateTime);
                                sm.RowKey       = sm.CreatedOn.Ticks.ToString();
                                sm.Reading      = recordValue;
                                sm.Encrypted    = false;
                                sm.DMA          = dmaId;

                                dmasm.PartitionKey = dmaId;
                                dmasm.CreatedOn    = DateTime.Parse(recordDateTime);
                                dmasm.RowKey       = dmasm.CreatedOn.Ticks.ToString();
                                dmasm.Reading      = recordValue;
                                dmasm.Encrypted    = false;
                                dmasm.MeterID      = ProducerId;
                            }
                            else
                            {
                                EventSourceWriter.Log.MessageMethod("ERROR: Null values parsed in water meter readings file  " + blob.Name);
                            }

                            string strWriteConnectionString = "MKWDNConnectionString";
                            bool   blAttempt = WriteMessageMeterDataToDataTable(sm, dmasm, strWriteConnectionString, strContainer);

                            if (!blAttempt)
                            {
                                EventSourceWriter.Log.MessageMethod("ERROR:Processing Entry NOT added to storage " + receivedMessage.Id.ToString());
                                EventSourceWriter.Log.MessageMethod("ERROR:Processing Entry NOT added to storage " + blob.Name + " " + sm.PartitionKey);
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                EventSourceWriter.Log.MessageMethod("ERROR:Processing water meter file:  " + e.Message);
            }

            EventSourceWriter.Log.MessageMethod("Processing Complete Entry added to storage " + receivedMessage.Id.ToString());

            urbanWaterQueue.DeleteMessage(receivedMessage);

            Event newEvent = new Event();

            newEvent.BusDispatched = false;
            newEvent.EventDateTime = DateTime.Now;
            newEvent.EventType     = (int)EventTypes.NewMeteringData;
            currentContext.Events.InsertOnSubmit(newEvent);
            currentContext.SubmitChanges();
        }