예제 #1
0
        public CoverageResult(IEnumerable <Batch> batches, List <string> xml, string database)
        {
            _batches  = batches;
            _database = database;
            var parser = new EventsParser(xml);

            var statement = parser.GetNextStatement();

            while (statement != null)
            {
                var batch = _batches.FirstOrDefault(p => p.ObjectId == statement.ObjectId);
                if (batch != null)
                {
                    var item = batch.Statements.FirstOrDefault(p => _statementChecker.Overlaps(p, statement));
                    if (item != null)
                    {
                        item.HitCount++;
                    }
                }

                statement = parser.GetNextStatement();
            }

            foreach (var batch in _batches)
            {
                batch.CoveredStatementCount = batch.Statements.Count(p => p.HitCount > 0);
                batch.HitCount = batch.Statements.Sum(p => p.HitCount);
            }

            CoveredStatementCount = _batches.Sum(p => p.CoveredStatementCount);
            StatementCount        = _batches.Sum(p => p.StatementCount);
            HitCount = _batches.Sum(p => p.HitCount);
        }
        public IEnumerable <LogEvent> Read(TextReader reader)
        {
            var    itemParser = new EventsParser();
            var    fieldMap   = (FieldMapping)null;
            string line;

            while ((line = reader.ReadLine()) != null)
            {
                if (line.StartsWith("#", StringComparison.OrdinalIgnoreCase))
                {
                    ParseHeader(line, fieldsLine => { fieldMap = new FieldsParser().Parse(fieldsLine); });
                    continue;
                }

                if (fieldMap == null)
                {
                    continue;
                }

                yield return(itemParser.Parse(line, fieldMap));
            }
        }
예제 #3
0
        static void Main(string[] args)
        {
            EmailService       emailService = new EmailService();
            EventsParser       eventsParser = new EventsParser();
            DataBaseOperations dbOperations = new DataBaseOperations();

            var eventList = eventsParser.Parse(new ParseConfiguration()
            {
                City = ParseCity(ConfigurationManager.AppSettings["city"]),
                Type = ConfigurationManager.AppSettings["type"],
                Cost = ParseCost(ConfigurationManager.AppSettings["cost"])
            });

            var events = eventList as IList <Event> ?? eventList.ToList();

            ShowParsedList(events);

            Console.WriteLine();
            while (true)
            {
                Console.WriteLine("*** calling MyMethod *** ");
                dbOperations.Insert(events);

                try
                {
                    var eventsListFromDb = dbOperations.ReadAllToList();
                    emailService.Send(eventsListFromDb);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }

                Console.WriteLine("\n All done");
                Thread.Sleep(60 * 1000 * int.Parse(ConfigurationManager.AppSettings["time"]));
            }
        }
예제 #4
0
        public CoverageResult(IEnumerable <Batch> batches, List <string> xml, string database, string dataSource, List <string> sqlExceptions, string commandDetail)
        {
            _batches       = batches;
            _sqlExceptions = sqlExceptions;
            _commandDetail = $"{commandDetail} at {DateTime.Now}";
            DatabaseName   = database;
            DataSource     = dataSource;
            var parser = new EventsParser(xml);

            var statement = parser.GetNextStatement();

            while (statement != null)
            {
                var batch = _batches.FirstOrDefault(p => p.ObjectId == statement.ObjectId);
                if (batch != null)
                {
                    var item = batch.Statements.FirstOrDefault(p => _statementChecker.Overlaps(p, statement));
                    if (item != null)
                    {
                        item.HitCount++;
                    }
                }

                statement = parser.GetNextStatement();
            }

            foreach (var batch in _batches)
            {
                batch.CoveredStatementCount = batch.Statements.Count(p => p.HitCount > 0);
                batch.HitCount = batch.Statements.Sum(p => p.HitCount);
            }

            CoveredStatementCount = _batches.Sum(p => p.CoveredStatementCount);
            StatementCount        = _batches.Sum(p => p.StatementCount);
            HitCount = _batches.Sum(p => p.HitCount);
        }
예제 #5
0
        private static void Main(string[] args)
        {
            if (args.Length < 3 || args.Length > 6)
            {
                Console.WriteLine(Help);

                return;
            }

            var parser = new EventsParser();

            IList <EventModel> events = null;

            try
            {
                events = parser.ParseFromCSV(args[0]);
            }
            catch (FormatException e)
            {
                Console.WriteLine(e.Message);
                Console.WriteLine(Strings.WrongFileFormat);
                Console.WriteLine(Strings.Tweets);

                return;
            }

            if (events == null)
            {
                Console.WriteLine(Strings.FileNotFound);

                return;
            }

            ISymptomAlgorithm symtopmAlgorithm;
            IDetectionMethod  method;

            var isFastTest = false;

            switch (args[1].ToLower())
            {
            case "bow":

                symtopmAlgorithm = new BagOfWords();

                break;

            case "tf-idf":

                symtopmAlgorithm = new TermFrequencyInverseDocumentFrequency();

                break;

            case "ft":

                isFastTest = true;

                symtopmAlgorithm = new FastTest(args[2]);

                break;

            default:

                Console.WriteLine(Strings.SymptomAlgorithmError);
                Console.WriteLine(Strings.Bow);

                return;
            }

            switch (args[isFastTest ? 3 : 2].ToLower())
            {
            case "mdm":

                method = new MinimalDistanceMethod();

                break;

            case "knn":

                if (args.Length < 4 || !int.TryParse(args[isFastTest ? 4 : 3], out var k) || k <= 0)
                {
                    Console.WriteLine(Strings.PositiveIntegerError);
                    Console.WriteLine(Strings.KNN);

                    return;
                }

                method = new KNearestNeighbors(k);

                break;

            default:

                Console.WriteLine(Strings.DetectionMethodError);
                Console.WriteLine(Strings.MDM);

                return;
            }

            Console.WriteLine("Generating symtoms...");

            symtopmAlgorithm.GenerateSymptoms(events);

            Console.WriteLine("Symptoms generated successfully.");
            Console.WriteLine($"There are { events.Count(s => s.SymptomModel != null) } symptoms.");

            Console.WriteLine("\nMaking etalons...");

            var symptomLength = events[0].SymptomModel.Length;

            var etalons = new List <ClusterModel>();

            foreach (var e in events)
            {
                var exist = etalons.Where(etalon => e.EventType == etalon.Type).FirstOrDefault();

                if (exist != null)
                {
                    exist.Events.Add(e);
                    continue;
                }

                etalons.Add(new ClusterModel
                {
                    Type   = e.EventType,
                    Events = new List <EventModel> {
                        e
                    }
                });
            }

            etalons.ForEach(e => Console.WriteLine($"Created etalon { e.Type }"));

            Console.WriteLine("\nDetection...");

            var clusters = method.Detect(events, etalons);

            Console.WriteLine("Detecting done.");

            var output = args.Last();

            if (output.LastIndexOf('.') > 0 && output.Substring(output.LastIndexOf('.')).ToLower().CompareTo(".csv") == 0)
            {
                Console.WriteLine("\nWriting result into csv file...\n");

                var classifiedEvents = clusters.Select(c => c.Clone() as ClusterModel).ToList();

                classifiedEvents.ForEach(c => c.Events.ForEach(e => e.EventType = c.Type));

                try
                {
                    parser.ParseIntoCSV(output, classifiedEvents.SelectMany(c => c.Events.Select(e => e)).ToList());
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);

                    return;
                }
            }
            else
            {
                Console.WriteLine(Environment.NewLine + Strings.OutputError + Environment.NewLine);
            }

            Console.WriteLine("Results:");

            double correctResults = clusters.Sum(c => c.Events.Count(e => e.EventType == c.Type));

            double all = clusters.Sum(c => c.Events.Count);

            var precision = correctResults / all;

            var recall = (correctResults / Math.Abs((all - correctResults))) / 100;

            var fMeasure = (2 * (precision * recall)) / (precision + recall);

            Console.WriteLine($"Precision: { precision }\nRecall: { recall }\nF-measure: { fMeasure }\n");

            foreach (var c in clusters)
            {
                foreach (var e in c.Events)
                {
                    if (e.EventType != c.Type)
                    {
                        Console.WriteLine($"Cluster { c.Type } contain wrong classified { e.EventType }");
                    }
                }
            }
        }