public void Input(string input, string result)
        {
            // Arrange
            var inputData  = File.ReadAllText(Directory.GetCurrentDirectory() + "/TestInputs/" + input);
            var resultData = File.ReadAllText(Directory.GetCurrentDirectory() + "/TestInputs/" + result);

            // Act
            var parsed = ILogParser.EvaluateLogFile(inputData);

            //Assert
            parsed.Should().BeEquivalentTo(resultData);
        }
        public void EvaluateLogFile_ShouldReturnDefault_WhenNoRecordForSensor(SensorType sensor)
        {
            // Arrange
            var sb = new StringBuilder();

            sb.AppendFormat(Common.ReferenceFormat, 3);
            sb.AppendFormat(Common.SensorFormat, sensor, "s1");
            var expected = Common.FormatResult("s1", Result.NoData);
            // Act
            var res = ILogParser.EvaluateLogFile(sb.ToString());

            // Assert
            res.Should().BeEquivalentTo(expected);
        }
        public void EvaluateLogFile_ShouldReturnEmpty_WhenRecordIsInvalid(string record)
        {
            // Arrange
            var sb = new StringBuilder();

            sb.AppendFormat(Common.ReferenceFormat, 3);
            sb.AppendFormat(Common.SensorFormat, SensorType.Monoxide, "m1");
            sb.AppendFormat(record);
            string expected = Common.FormatResult("m1", Result.NoData);

            // Act
            var res = ILogParser.EvaluateLogFile(sb.ToString());

            // Assert
            res.Should().BeEquivalentTo(expected);
        }
Exemple #4
0
        public void EvaluateLogFile_ShouldReadMonoxideData_WhenTheLogfileIsValid(double reference, double value,
                                                                                 string name, Result result)
        {
            // Arrange
            var sb = new StringBuilder();

            sb.AppendFormat(Common.ReferenceFormat, reference);
            sb.AppendFormat(Common.SensorFormat, SensorType.Monoxide, name);
            sb.AppendFormat(Common.RecordFormat, value);
            var expected = Common.FormatResult(name, result);

            // Act
            var res = ILogParser.EvaluateLogFile(sb.ToString());

            // Assert
            res.Should().BeEquivalentTo(expected);
        }
        public void EvaluateLogFile_ShouldReturnEmpty_WhenSensorIsInvalid(string sensorName)
        {
            // Arrange
            var sb = new StringBuilder();

            sb.AppendFormat(Common.ReferenceFormat, 3);
            sb.AppendFormat(sensorName);
            sb.AppendLine();
            sb.AppendFormat(Common.RecordFormat, "2");
            const string expected = "{}"; //"invalid sensor name format";

            // Act
            var res = ILogParser.EvaluateLogFile(sb.ToString());

            // Assert
            res.Should().BeEquivalentTo(expected);
        }
        public void EvaluateLogFile_ShouldReturnEmpty_WhenTheReferenceIsInvalid(string reference)
        {
            // Arrange
            var sb = new StringBuilder();

            sb.AppendFormat(reference);
            sb.AppendLine();
            sb.AppendFormat(Common.SensorFormat, SensorType.Monoxide, "m1");
            sb.AppendFormat(Common.RecordFormat, "2");
            const string expected = "{}"; //"invalid reference format";

            // Act
            var res = ILogParser.EvaluateLogFile(sb.ToString());

            // Assert
            res.Should().BeEquivalentTo(expected);
        }
Exemple #7
0
        private static void Main(string[] args)
        {
            var serviceProvider = new ServiceCollection()
                                  .AddLogging()
                                  .BuildServiceProvider();

            // Unfortunate to have the static method in the interface so we can't use the DI to pass the logger to it :(
            // This should definitely be done differently
            var logger = serviceProvider.GetService <ILoggerFactory>()
                         .CreateLogger <Program>();

            logger.LogDebug("Starting application");

            var logFiles = Directory.GetFiles(GetLogFilesDirectory()).ToList();
            var sw       = new Stopwatch();

            System.Console.WriteLine("===========================================================");
            System.Console.WriteLine("=====================Log Analyzer==========================");
            System.Console.WriteLine("===========================================================");

            char pressed;

            do
            {
                System.Console.WriteLine(
                    "\nPress '1' to analyze the logs from file 'logFilesToAnalyze'.\nPress '2' to produce and then analyze a new log file.\nPress 'q' to exit");
                pressed = System.Console.ReadKey().KeyChar;
                string result;
                if (pressed == '1')
                {
                    foreach (var log in logFiles)
                    {
                        System.Console.WriteLine($"Evaluating logs from file {log}");
                        var logContent = File.ReadAllText(log);
                        sw.Restart();
                        result = ILogParser.EvaluateLogFile(logContent);
                        System.Console.WriteLine(result);
                        sw.Stop();
                        System.Console.WriteLine($"Elapsed: {sw.Elapsed}");
                    }
                }
                else if (pressed == '2')
                {
                    System.Console.WriteLine(
                        "\nPress '0' or '1' or '2' to generate logs for Thermometer(0), Monoxide(1) or Humidity(2) sensor. (Default = 0)");
                    if (!int.TryParse(System.Console.ReadKey().KeyChar.ToString(), out var sensor) || sensor > 2)
                    {
                        break;
                    }
                    System.Console.WriteLine(
                        $"\nInsert number of sensors to generate log for. (Default = 5)");
                    var sensorCount = System.Console.ReadLine();
                    System.Console.WriteLine(
                        "Insert number of records to generate for each sensor. (Default = 100)");
                    var recordCount = System.Console.ReadLine();
                    System.Console.WriteLine(
                        "Insert a reference value. (Default = 25)");
                    var reference = System.Console.ReadLine();

                    var producer = new LogProducer();
                    var produced = producer.ProduceSensorLog((SensorType)int.Parse(sensor.ToString() ?? "0"),
                                                             int.Parse(sensorCount ?? "5"),
                                                             int.Parse(recordCount ?? "100"), int.Parse(reference ?? "25"));

                    System.Console.WriteLine(
                        "Press '0' or '1' to store the generated log into the file to logFilesToAnalyze folder. (Default = 0--don't store)");
                    var store = System.Console.ReadKey().KeyChar;
                    if (store.Equals('1'))
                    {
                        System.Console.WriteLine(
                            "Storing produced log as 'ProducedLogData.txt' to folder 'logFilesToAnalyze'");
                        File.WriteAllText(GetLogFilesDirectory() + "/ProducedLogData.txt", produced);
                    }

                    sw.Restart();
                    result = ILogParser.EvaluateLogFile(produced);
                    System.Console.WriteLine(result);
                    sw.Stop();
                    System.Console.WriteLine($"Elapsed: {sw.Elapsed}");
                }
            } while (pressed != 'f' && pressed != 'q');
            logger.LogDebug("All done!");
        }