Exemplo n.º 1
0
        private static async Task PostSamples(
            TraceWriter log,
            IAsyncCollector <string> asyncCollector,
            MTConnectStreamsType sampleResult)
        {
            var samples = default(IEnumerable <SampleRecord>);

            if (sampleResult.Streams == null)
            {
                samples = new List <SampleRecord>();
            }
            else
            {
                var nonEmptySamples = sampleResult.Streams.Where(
                    s => s.ComponentStream != null &&
                    s.ComponentStream.All(cs => cs.Samples != null && cs.Samples.Any())).ToList();

                samples = nonEmptySamples.SelectMany(
                    s => s.ComponentStream.SelectMany(
                        cs => cs.Samples.Select(
                            sample => new SampleRecord()
                {
                    HourWindow =
                        new DateTime(
                            sample.timestamp.Year,
                            sample.timestamp.Month,
                            sample.timestamp.Day,
                            sample.timestamp.Hour,
                            0,
                            0),
                    Id                      = Guid.NewGuid().ToString(),
                    DeviceName              = s?.name,
                    DeviceId                = s?.uuid,
                    Component               = cs?.component,
                    ComponentName           = cs?.name,
                    ComponentId             = cs?.uuid,
                    SampleDataItemId        = sample?.dataItemId,
                    SampleTimestamp         = sample?.timestamp,
                    SampleName              = sample?.name,
                    SampleSequence          = sample?.sequence,
                    SampleSubtype           = sample?.subType,
                    SampleDuration          = sample?.duration,
                    SampleDurationSpecified = sample?.durationSpecified,
                    SampleRate              = sample?.sampleRate,
                    SampleStatistic         = sample?.statistic,
                    SampleValue             = sample?.Value
                }))).ToList();
            }

            log.Info($"{samples.Count()} samples found.");
            foreach (var sample in samples)
            {
                var flatSample = JsonConvert.SerializeObject(sample);

                await asyncCollector.AddAsync(flatSample);
            }
        }
Exemplo n.º 2
0
        private static async Task PostEvents(
            TraceWriter log,
            IAsyncCollector <string> asyncEventCollector,
            MTConnectStreamsType sampleResult)
        {
            var events = default(IEnumerable <EventRecord>);

            if (sampleResult.Streams == null)
            {
                events = new List <EventRecord>();
            }
            else
            {
                var nonEmptyEvents = sampleResult.Streams.Where(
                    s => s.ComponentStream != null &&
                    s.ComponentStream.All(cs => cs.Events != null && cs.Events.Any()))
                                     .ToList();

                events = nonEmptyEvents.SelectMany(
                    s => s.ComponentStream.SelectMany(
                        cs => cs.Events.Select(
                            e => new EventRecord()
                {
                    HourWindow =
                        new DateTime(
                            e.timestamp.Year,
                            e.timestamp.Month,
                            e.timestamp.Day,
                            e.timestamp.Hour,
                            0,
                            0),
                    Id              = Guid.NewGuid().ToString(),
                    DeviceName      = s?.name,
                    DeviceId        = s?.uuid,
                    Component       = cs?.component,
                    ComponentName   = cs?.name,
                    ComponentId     = cs?.uuid,
                    EventDataItemId = e?.dataItemId,
                    EventTimestamp  = e?.timestamp,
                    EventName       = e?.name,
                    EventSequence   = e?.sequence,
                    EventSubtype    = e?.subType,
                    EventValue      = e?.Value
                }))).ToList();
            }

            log.Info($"{events.Count()} events found.");
            foreach (var eventRecord in events)
            {
                var flatEvent = JsonConvert.SerializeObject(eventRecord);

                await asyncEventCollector.AddAsync(flatEvent);
            }
        }
Exemplo n.º 3
0
        public Analysis(String pathToXML)
        {
            Log.Write("Running MTConnect Analysis");
            // Read and deserialize the MTConnect Data
            XmlSerializer        serializer = new XmlSerializer(typeof(MTConnectStreamsType));
            Stream               reader     = new FileStream(pathToXML, FileMode.Open);
            MTConnectStreamsType data       = (MTConnectStreamsType)serializer.Deserialize(reader);

            Log.Write("MT Connect Data Read into MTConnectStreamsType");
            Log.Write("Creation Time " + data.Header.creationTime);

            // TODO use other device streams
            DeviceStreamType deviceStream = data.Streams.First();

            // Turns out these paths are useless- no sample information :(

            /*
             * List<ComponentStreamType> paths = deviceStream.ComponentStream.Where((cs) => cs.component == "Path").ToList();
             * Log.Write("Paths detected: " + paths.Count);
             * foreach (ComponentStreamType path in paths){
             *  List<SampleType> a = path.Samples.ToList();
             *  Log.Write("Loaded path");
             * }
             */

            reader.Close();

            // Switching to manual mode...
            XDocument       xd = XDocument.Load(pathToXML);
            List <XElement> sequenceElements = xd.XPathSelectElements("//*[@sequence]").OrderBy((elm) =>
            {
                return(Int32.Parse(elm.Attribute("sequence").Value));
            }).ToList();

            int unknownElements = 0;
            int parseErrors     = 0;

            int i = 0;

            foreach (XElement elm in sequenceElements)
            {
                try {
                    int seq = Int32.Parse(elm.Attribute("sequence").Value);
                    //Log.Write("SEQ" + seq + " : " + elm.Name);
                    if (elm.Name.LocalName.Equals("PathPosition"))
                    {
                        timeline.Add(new PathPosition(elm));
                    }
                    else
                    {
                        // Log.Write("[" + seq + "] Unregistered Event: " + elm.Name.LocalName);
                        unknownElements++;
                    }
                }catch (Exception e)
                {
                    parseErrors++;
                    Log.Write("[" + elm.Attribute("sequence").Value + "] Parse Error " + e);
                }
            }
            Log.Write("XML Parsing Complete");
            Log.Write("[" + timeline.Count((e) => e.name == "PathPosition") + "] PathPositions");
            Log.Write("[" + unknownElements + "] Unregistered Events (" + (1 - ((float)unknownElements) / sequenceElements.Count) * 100 + "% Coverage)");
            Log.Write("[" + parseErrors + "] Parse Errors ");
        }