Пример #1
0
        /// <summary>
        /// Runs the transformers.
        /// </summary>
        /// <returns><c>true</c>, if transformers was run, <c>false</c> otherwise.</returns>
        public bool RunTransformers()
        {
            if (!Transformers.Any())
            {
                LogManager.Info("No transformation operations configured.", this);
                return(true);
            }

            bool success      = false;
            var  transformers = TransformerManager.GetTransformers(Transformers);

            if (transformers?.Any() ?? false && InputData?.Keys?.Count >= 1)
            {
                // iterate through the list of transformers and run on each input data set
                var transformedData = new Dictionary <string, IEnumerable <SensorReading> >();
                foreach (var transformer in transformers)
                {
                    // Sanity checking ...
                    LogManager.Info($"Running transformation operation:\n\t{transformer}", this);

                    // Run the operation ...
                    foreach (var key in InputData.Keys)
                    {
                        bool dataAlreadyProcessedForKey = transformedData.ContainsKey(key);
                        var  inputData         = (dataAlreadyProcessedForKey ? transformedData[key] : InputData[key]);
                        var  transformedValues = transformer.Transform(inputData);

                        if (dataAlreadyProcessedForKey)
                        {
                            transformedData[key] = transformedValues;
                        }
                        else
                        {
                            transformedData.Add(key, transformedValues);
                        }

                        if (WriteOutputFile)
                        {
                            CsvFileWriter.WriteResultsToFile
                                (new[] { OutputDirs.Transformers, transformer.GetType().Name },
                                key, transformer.GetHeaderCsv(), transformedValues);
                        }
                    }
                }

                InputData = transformedData;
                success   = true;
            }
            else
            {
                LogManager.Error("No input data to run transformations on.", this);
            }

            return(success);
        }