Beispiel #1
0
        protected CsvMetadata GetMetadataBasic(string[] items)
        {
            var csvMetadata = new CsvMetadata();

            csvMetadata.perspectiveName      = items[0];
            csvMetadata.measureGroupName     = items[1];
            csvMetadata.measureCaption       = items[2];
            csvMetadata.measureUniqueName    = items[3];
            csvMetadata.measureDisplayFolder = items[4];
            csvMetadata.dimensionCaption     = items[5];
            csvMetadata.dimensionUniqueName  = items[6];
            csvMetadata.hierarchyCaption     = items[7];
            csvMetadata.hierarchyUniqueName  = items[8];
            csvMetadata.levelCaption         = items[9];
            csvMetadata.levelUniqueName      = items[10];
            csvMetadata.levelNumber          = int.Parse(items[11]);
            csvMetadata.propertyCaption      = items[12];
            csvMetadata.propertyUniqueName   = items[13];
            return(csvMetadata);
        }
Beispiel #2
0
        protected CsvMetadata GetMetadataBasic(string[] items)
        {
            var csvMetadata = new CsvMetadata();

            csvMetadata.perspectiveName = items[0];
            csvMetadata.measureGroupName = items[1];
            csvMetadata.measureCaption = items[2];
            csvMetadata.measureUniqueName = items[3];
            csvMetadata.measureDisplayFolder = items[4];
            csvMetadata.dimensionCaption = items[5];
            csvMetadata.dimensionUniqueName = items[6];
            csvMetadata.hierarchyCaption = items[7];
            csvMetadata.hierarchyUniqueName = items[8];
            csvMetadata.levelCaption = items[9];
            csvMetadata.levelUniqueName = items[10];
            csvMetadata.levelNumber = int.Parse(items[11]);
            csvMetadata.propertyCaption = items[12];
            csvMetadata.propertyUniqueName = items[13];
            return csvMetadata;
        }
        void Run(string[] args)
        {
            // Read the command line
            if (args.Length < 1)
            {
                WriteLine("Invalid args");
                WriteLine(formatString);
                return;
            }

            ReadCommandLine(args);

            string csvOutFilename = GetArg("o", false);

            if (csvOutFilename.Length == 0)
            {
                WriteLine("Missing -o arg");
                WriteLine(formatString);
                return;
            }

            // Set the title
            string title = GetArg("title", false);

            if (title.Length == 0)
            {
                title = MakeShortFilename(csvOutFilename).ToLower().Replace(".csv", "");
            }
            char c = title[0];

            c     = char.ToUpper(c);
            title = c + title.Substring(1);

            // Whether or not we want stats to be averaged rather than appended
            bool bAverage = GetBoolArg("avg");

            // Read CSV filenames from a directory or list
            string[] csvFilenames;
            string   csvDir = GetArg("csvDir");

            if (csvDir.Length > 0)
            {
                DirectoryInfo di    = new DirectoryInfo(csvDir);
                var           files = di.GetFiles("*.csv", SearchOption.AllDirectories);
                csvFilenames = new string[files.Length];
                int i = 0;
                foreach (FileInfo csvFile in files)
                {
                    csvFilenames[i] = csvFile.FullName;
                    i++;
                }
            }
            else
            {
                string csvFilenamesStr = GetArg("csvs", true);
                if (csvFilenamesStr.Length == 0)
                {
                    System.Console.Write(formatString);
                    return;
                }
                csvFilenames = csvFilenamesStr.Split(';');
            }

            CsvStats combinedCsvStats = new CsvStats();

            // List of stats to be averaged
            CsvStats[] statsToAvg = new CsvStats[csvFilenames.Length];

            // Read all the CSVs into one big CSVStats class
            int csvIndex = 0;

            foreach (string csvFilename in csvFilenames)
            {
                CsvStats csvStats = CsvStats.ReadCSVFile(csvFilename, null);

                // Add the CSV filename as the first event (sanitised for CSV)
                CsvEvent firstEvent = null;
                firstEvent       = new CsvEvent();
                firstEvent.Frame = 0;
                firstEvent.Name  = "CSV:" + MakeShortFilename(csvFilename).Replace(' ', '_').Replace(',', '_').Replace('\n', '_');
                csvStats.Events.Insert(0, firstEvent);

                if (bAverage)
                {
                    statsToAvg[csvIndex] = csvStats;
                }
                else
                {
                    // Combine the stats
                    if (csvIndex == 0)
                    {
                        combinedCsvStats = csvStats;
                    }
                    else
                    {
                        CsvMetadata metadataA = combinedCsvStats.metaData;
                        CsvMetadata metadataB = csvStats.metaData;

                        // If there is metadata, it should match
                        if (metadataA != null || metadataB != null)
                        {
                            if (!CsvMetadata.Matches(metadataA, metadataB))
                            {
                                WriteLine("Metadata mismatch!");
                            }
                        }
                        combinedCsvStats.Combine(csvStats, false);
                    }
                }

                csvIndex++;
            }

            if (bAverage)
            {
                // Average stats by frame
                combinedCsvStats = CsvStats.AverageByFrame(statsToAvg);

                if (combinedCsvStats.metaData != null)
                {
                    // Add few more meta information
                    combinedCsvStats.metaData.Values.Add("Averaged", statsToAvg.Length.ToString());
                }

                int      fIt       = 0;
                string[] filenames = new string[csvFilenames.Length];
                foreach (var filename in csvFilenames)
                {
                    filenames[fIt++] = Path.GetFileName(filename);
                }

                if (combinedCsvStats.metaData != null)
                {
                    combinedCsvStats.metaData.Values.Add("Files", string.Join(",", filenames));
                }
            }

            // Write the csv stats to a CSV
            combinedCsvStats.WriteToCSV(csvOutFilename);
        }
        void Run(string[] args)
        {
            // Read the command line
            if (args.Length < 1)
            {
                WriteLine("Invalid args");
                WriteLine(formatString);
                return;
            }

            ReadCommandLine(args);

            string csvOutFilename = GetArg("o", false);

            if (csvOutFilename.Length == 0)
            {
                WriteLine("Missing -o arg");
                WriteLine(formatString);
                return;
            }

            // Set the title
            string title = GetArg("title", false);

            if (title.Length == 0)
            {
                title = MakeShortFilename(csvOutFilename).ToLower().Replace(".csv", "");
            }
            char c = title[0];

            c     = char.ToUpper(c);
            title = c + title.Substring(1);

            string filterOutlierStat      = GetArg("filterOutlierStat", false);
            float  filterOutlierThreshold = GetFloatArg("filterOutlierThreshold", 1000.0f);

            // Whether or not we want stats to be averaged rather than appended
            bool bAverage = GetBoolArg("avg");

            string csvDir          = GetArg("csvDir");
            string csvFilenamesStr = GetArg("csvs", false);

            if (csvDir == null && csvFilenamesStr == null)
            {
                WriteLine("-csvs or -csvdir is required");
                WriteLine(formatString);
                return;
            }

            string searchPattern = GetArg("searchPattern", null);

            if (csvFilenamesStr.Contains("*"))
            {
                // If passed a wildcard to -csvs, this is equivalent to -csvdir . -searchpattern <csvs>
                if (csvDir != null && csvDir != "")
                {
                    throw new Exception("Can't use -csvs with -csvdir");
                }
                csvDir        = ".";
                searchPattern = csvFilenamesStr;
            }

            // Read CSV filenames from a directory or list
            string[] csvFilenames;
            if (csvDir.Length > 0)
            {
                if (searchPattern == null)
                {
                    searchPattern = "*.csv";
                }
                DirectoryInfo di       = new DirectoryInfo(csvDir);
                bool          bRecurse = GetBoolArg("recurse");
                var           files    = di.GetFiles(searchPattern, bRecurse ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);
                csvFilenames = new string[files.Length];
                int i = 0;
                foreach (FileInfo csvFile in files)
                {
                    csvFilenames[i] = csvFile.FullName;
                    i++;
                }
            }
            else
            {
                if (csvFilenamesStr.Length == 0)
                {
                    System.Console.Write(formatString);
                    return;
                }
                csvFilenames = csvFilenamesStr.Split(';');
            }

            Console.WriteLine("Collating " + csvFilenames.Length + " csvs:");
            foreach (string csvFilename in csvFilenames)
            {
                Console.WriteLine("  " + csvFilename);
            }
            Console.WriteLine("");

            CsvStats combinedCsvStats = new CsvStats();


            string        metadataFilterString = GetArg("metadataFilter", null);
            List <int>    frameCsvCounts       = new List <int>();
            List <string> allCsvFilenames      = new List <string>();
            int           csvIndex             = 0;

            foreach (string csvFilename in csvFilenames)
            {
                CsvStats srcCsvStats = CsvStats.ReadCSVFile(csvFilename, null);

                // Check for outliers
                bool skip = false;
                if (filterOutlierStat != null)
                {
                    StatSamples outlierStat = srcCsvStats.GetStat(filterOutlierStat);
                    if (outlierStat != null)
                    {
                        foreach (float sample in outlierStat.samples)
                        {
                            if (sample > filterOutlierThreshold)
                            {
                                WriteLine("CSV " + csvFilename + " ignored due to bad " + filterOutlierStat + " value: " + sample);
                                skip = true;
                                break;
                            }
                        }
                    }
                }
                if (metadataFilterString != null)
                {
                    if (srcCsvStats.metaData == null || !CsvStats.DoesMetadataMatchFilter(srcCsvStats.metaData, metadataFilterString))
                    {
                        WriteLine("Skipping CSV " + csvFilename + " due to metadata filter");
                        skip = true;
                    }
                }
                if (skip)
                {
                    continue;
                }

                // Add the CSV filename as the first event if we're not averaging
                if (!bAverage)
                {
                    CsvEvent firstEvent = new CsvEvent();
                    firstEvent.Frame = 0;
                    firstEvent.Name  = "CSV:" + MakeShortFilename(csvFilename).Replace(' ', '_').Replace(',', '_').Replace('\n', '_');
                    srcCsvStats.Events.Insert(0, firstEvent);
                }

                // Combine the stats
                if (csvIndex == 0)
                {
                    combinedCsvStats = srcCsvStats;
                }
                else
                {
                    CsvMetadata metadataA = combinedCsvStats.metaData;
                    CsvMetadata metadataB = srcCsvStats.metaData;

                    // If there is metadata, it should match
                    if (metadataA != null || metadataB != null)
                    {
                        metadataA.CombineAndValidate(metadataB);
                    }
                    combinedCsvStats.Combine(srcCsvStats, bAverage, false);
                }

                // If we're computing the average, update the counts for each frame
                if (bAverage)
                {
                    // Resize frameCsvCounts if necessary
                    for (int i = frameCsvCounts.Count; i < combinedCsvStats.SampleCount; i++)
                    {
                        frameCsvCounts.Add(0);
                    }
                    for (int i = 0; i < srcCsvStats.SampleCount; i++)
                    {
                        frameCsvCounts[i] += 1;
                    }
                }

                allCsvFilenames.Add(Path.GetFileName(csvFilename));
                csvIndex++;
                WriteLine("Csvs Processed: " + csvIndex + " / " + csvFilenames.Length);
            }


            if (bAverage)
            {
                // Divide all samples by the total number of CSVs
                foreach (StatSamples stat in combinedCsvStats.Stats.Values)
                {
                    for (int i = 0; i < stat.samples.Count; i++)
                    {
                        stat.samples[i] /= (float)(frameCsvCounts[i]);
                    }
                }

                // Add a stat for the csv count
                string csvCountStatName = "csvCount";
                if (!combinedCsvStats.Stats.ContainsKey(csvCountStatName))
                {
                    StatSamples csvCountStat = new StatSamples(csvCountStatName);
                    foreach (int count in frameCsvCounts)
                    {
                        csvCountStat.samples.Add((int)count);
                    }
                    combinedCsvStats.Stats.Add(csvCountStatName, csvCountStat);
                }
                if (combinedCsvStats.metaData != null)
                {
                    // Add some metadata
                    combinedCsvStats.metaData.Values.Add("Averaged", allCsvFilenames.Count.ToString());
                    combinedCsvStats.metaData.Values.Add("SourceFiles", string.Join(";", allCsvFilenames));
                }
            }

            combinedCsvStats.ComputeAveragesAndTotal();

            // Write the csv stats to a CSV
            combinedCsvStats.WriteToCSV(csvOutFilename);
        }
Beispiel #5
0
        private void LoadMetadata(CsvMetadata r, bool filter, ref CubeMetadata metadata)
        {
            MeasureGroup mg = null;

            if ((!filter) || r.isChecked)
            {
                metadata.Perspectives.AddOrIgnore(r.perspectiveName);
                var perspective = metadata.Perspectives[r.perspectiveName];

                if (perspective.MeasureGroups.ContainsKey(r.measureGroupName))
                {
                    mg = perspective.MeasureGroups[r.measureGroupName];
                }
                else
                {
                    mg = new MeasureGroup(r.measureGroupName);
                    perspective.MeasureGroups.Add(mg);
                }

                if (!mg.Measures.ContainsKey(r.measureUniqueName))
                {
                    mg.Measures.Add(r.measureUniqueName, r.measureCaption, r.measureDisplayFolder);
                }

                Dimension dim = null;

                if (perspective.Dimensions.ContainsKey(r.dimensionUniqueName))
                {
                    dim = perspective.Dimensions[r.dimensionUniqueName];
                }
                else
                {
                    dim = new Dimension(r.dimensionUniqueName, r.dimensionCaption);
                    perspective.Dimensions.Add(dim);
                }

                if (!dim.Hierarchies.ContainsKey(r.hierarchyUniqueName))
                {
                    var hierarchy = new Hierarchy(r.hierarchyUniqueName, r.hierarchyCaption, string.Empty);
                    dim.Hierarchies.Add(r.hierarchyUniqueName, hierarchy);
                }

                if (!dim.Hierarchies[r.hierarchyUniqueName].Levels.ContainsKey(r.levelUniqueName))
                {
                    var level = new Level(r.levelUniqueName, r.levelCaption, r.levelNumber);
                    dim.Hierarchies[r.hierarchyUniqueName].Levels.Add(r.levelUniqueName, level);
                }

                if (!string.IsNullOrEmpty(r.propertyUniqueName))
                {
                    if (!dim.Hierarchies[r.hierarchyUniqueName].Levels[r.levelUniqueName].Properties.ContainsKey(r.propertyUniqueName))
                    {
                        var prop = new Property(r.propertyUniqueName, r.propertyCaption);
                        dim.Hierarchies[r.hierarchyUniqueName].Levels[r.levelUniqueName].Properties.Add(r.propertyUniqueName, prop);
                    }
                }

                if (!mg.LinkedDimensions.ContainsKey(r.dimensionUniqueName))
                {
                    mg.LinkedDimensions.Add(dim);
                }
            }
        }
Beispiel #6
0
        void Run(string[] args)
        {
            // Read the command line
            if (args.Length < 1)
            {
                WriteLine("Invalid args");
                WriteLine(formatString);
                return;
            }

            ReadCommandLine(args);

            string csvOutFilename = GetArg("o", false);

            if (csvOutFilename.Length == 0)
            {
                WriteLine("Missing -o arg");
                WriteLine(formatString);
                return;
            }

            // Set the title
            string title = GetArg("title", false);

            if (title.Length == 0)
            {
                title = MakeShortFilename(csvOutFilename).ToLower().Replace(".csv", "");
            }
            char c = title[0];

            c     = char.ToUpper(c);
            title = c + title.Substring(1);

            string filterOutlierStat      = GetArg("filterOutlierStat", false);
            float  filterOutlierThreshold = GetFloatArg("filterOutlierThreshold", 1000.0f);

            // Whether or not we want stats to be averaged rather than appended
            bool bAverage = GetBoolArg("avg");

            // Read CSV filenames from a directory or list
            string[] csvFilenames;
            string   csvDir = GetArg("csvDir");

            if (csvDir.Length > 0)
            {
                DirectoryInfo di    = new DirectoryInfo(csvDir);
                var           files = di.GetFiles("*.csv", SearchOption.AllDirectories);
                csvFilenames = new string[files.Length];
                int i = 0;
                foreach (FileInfo csvFile in files)
                {
                    csvFilenames[i] = csvFile.FullName;
                    i++;
                }
            }
            else
            {
                string csvFilenamesStr = GetArg("csvs", true);
                if (csvFilenamesStr.Length == 0)
                {
                    System.Console.Write(formatString);
                    return;
                }
                csvFilenames = csvFilenamesStr.Split(';');
            }

            CsvStats combinedCsvStats = new CsvStats();

            // List of stats to be averaged
            //CsvStats[] statsToAvg = new CsvStats[csvFilenames.Length];

            // Read all the CSVs into one big CSVStats class
            List <int>    frameCsvCounts  = new List <int>();
            List <string> allCsvFilenames = new List <string>();
            int           csvIndex        = 0;

            foreach (string csvFilename in csvFilenames)
            {
                CsvStats srcCsvStats = CsvStats.ReadCSVFile(csvFilename, null);

                // Check for outliers
                bool skip = false;
                if (filterOutlierStat != null)
                {
                    StatSamples outlierStat = srcCsvStats.GetStat(filterOutlierStat);
                    if (outlierStat != null)
                    {
                        foreach (float sample in outlierStat.samples)
                        {
                            if (sample > filterOutlierThreshold)
                            {
                                WriteLine("CSV " + csvFilename + " ignored due to bad " + filterOutlierStat + " value: " + sample);
                                skip = true;
                                break;
                            }
                        }
                    }
                }
                if (skip)
                {
                    continue;
                }

                // Add the CSV filename as the first event if we're not averaging
                if (!bAverage)
                {
                    CsvEvent firstEvent = new CsvEvent();
                    firstEvent.Frame = 0;
                    firstEvent.Name  = "CSV:" + MakeShortFilename(csvFilename).Replace(' ', '_').Replace(',', '_').Replace('\n', '_');
                    srcCsvStats.Events.Insert(0, firstEvent);
                }

                // Combine the stats
                if (csvIndex == 0)
                {
                    combinedCsvStats = srcCsvStats;
                }
                else
                {
                    CsvMetadata metadataA = combinedCsvStats.metaData;
                    CsvMetadata metadataB = srcCsvStats.metaData;

                    // If there is metadata, it should match
                    if (metadataA != null || metadataB != null)
                    {
                        metadataA.CombineAndValidate(metadataB);
                    }
                    combinedCsvStats.Combine(srcCsvStats, bAverage, false);
                    if (bAverage)
                    {
                        // Resize the framecount array to match
                        for (int i = frameCsvCounts.Count; i < combinedCsvStats.SampleCount; i++)
                        {
                            frameCsvCounts.Add(0);
                        }
                        for (int i = 0; i < srcCsvStats.SampleCount; i++)
                        {
                            frameCsvCounts[i] += 1;
                        }
                    }
                }
                allCsvFilenames.Add(Path.GetFileName(csvFilename));
                WriteLine("Csvs Processed: " + csvIndex + " / " + csvFilenames.Length);
                csvIndex++;
            }

            if (bAverage)
            {
                // Divide all samples by the total number of CSVs
                foreach (StatSamples stat in combinedCsvStats.Stats.Values)
                {
                    for (int i = 0; i < stat.samples.Count; i++)
                    {
                        stat.samples[i] /= (float)(frameCsvCounts[i]);
                    }
                }

                // Add a stat for the csv count
                string csvCountStatName = "csvCount";
                if (!combinedCsvStats.Stats.ContainsKey(csvCountStatName))
                {
                    StatSamples csvCountStat = new StatSamples(csvCountStatName);
                    foreach (int count in frameCsvCounts)
                    {
                        csvCountStat.samples.Add((int)count);
                    }
                    combinedCsvStats.Stats.Add(csvCountStatName, csvCountStat);
                }
                if (combinedCsvStats.metaData != null)
                {
                    // Add some metadata
                    combinedCsvStats.metaData.Values.Add("Averaged", allCsvFilenames.Count.ToString());
                    combinedCsvStats.metaData.Values.Add("SourceFiles", string.Join(";", allCsvFilenames));
                }
            }

            combinedCsvStats.ComputeAveragesAndTotal();

            // Write the csv stats to a CSV
            combinedCsvStats.WriteToCSV(csvOutFilename);
        }
Beispiel #7
0
        private void LoadMetadata(CsvMetadata r, bool filter, ref CubeMetadata metadata)
        {
            MeasureGroup mg = null;

            if ((!filter) || r.isChecked)
            {
                metadata.Perspectives.AddOrIgnore(r.perspectiveName);
                var perspective = metadata.Perspectives[r.perspectiveName];

                if (perspective.MeasureGroups.ContainsKey(r.measureGroupName))
                {
                    mg = perspective.MeasureGroups[r.measureGroupName];
                }
                else
                {
                    mg = new MeasureGroup(r.measureGroupName);
                    perspective.MeasureGroups.Add(mg);
                }

                if (!mg.Measures.ContainsKey(r.measureUniqueName))
                {
                    mg.Measures.Add(r.measureUniqueName, r.measureCaption, r.measureDisplayFolder);
                }

                Dimension dim = null;

                if (perspective.Dimensions.ContainsKey(r.dimensionUniqueName))
                {
                    dim = perspective.Dimensions[r.dimensionUniqueName];
                }
                else
                {
                    dim = new Dimension(r.dimensionUniqueName, r.dimensionCaption);
                    perspective.Dimensions.Add(dim);
                }

                if (!dim.Hierarchies.ContainsKey(r.hierarchyUniqueName))
                {
                    var hierarchy = new Hierarchy(r.hierarchyUniqueName, r.hierarchyCaption, string.Empty);
                    dim.Hierarchies.Add(r.hierarchyUniqueName, hierarchy);
                }

                if (!dim.Hierarchies[r.hierarchyUniqueName].Levels.ContainsKey(r.levelUniqueName))
                {
                    var level = new Level(r.levelUniqueName, r.levelCaption, r.levelNumber);
                    dim.Hierarchies[r.hierarchyUniqueName].Levels.Add(r.levelUniqueName, level);
                }

                if (!string.IsNullOrEmpty(r.propertyUniqueName))
                {
                    if (!dim.Hierarchies[r.hierarchyUniqueName].Levels[r.levelUniqueName].Properties.ContainsKey(r.propertyUniqueName))
                    {
                        var prop = new Property(r.propertyUniqueName, r.propertyCaption);
                        dim.Hierarchies[r.hierarchyUniqueName].Levels[r.levelUniqueName].Properties.Add(r.propertyUniqueName, prop);
                    }
                }

                if (!mg.LinkedDimensions.ContainsKey(r.dimensionUniqueName))
                    mg.LinkedDimensions.Add(dim);
            }
        }