public void When_many_files_written_over_dates_old_files_are_deleted()
        {
            using (var tempPath = new TempPath())
            {
                var logger = new RollingLogger(tempPath.TempDirectory, numberOfArchiveFilesToKeep: 2)
                {
                    GetDate = () => new DateTime(2010, 10, 1)
                };
                logger.WriteLine("Foo1");
                logger.GetDate = () => new DateTime(2010, 10, 2);
                logger.WriteLine("Foo2");
                logger.GetDate = () => new DateTime(2010, 10, 3);
                logger.WriteLine("Foo3");
                logger.GetDate = () => new DateTime(2010, 10, 4);
                logger.WriteLine("Foo4");
                logger.GetDate = () => new DateTime(2010, 10, 5);
                logger.WriteLine("Foo5");
                var files = tempPath.GetFiles();
                Assert.AreEqual(3, files.Count, "Should be numberOfArchiveFilesToKeep + 1 (the current file) ");

                var first = files[0];
                Assert.AreEqual("nsb_log_2010-10-03_0.txt", Path.GetFileName(first));
                Assert.AreEqual($"Foo3{Environment.NewLine}", NonLockingFileReader.ReadAllTextWithoutLocking(first));

                var second = files[1];
                Assert.AreEqual("nsb_log_2010-10-04_0.txt", Path.GetFileName(second));
                Assert.AreEqual($"Foo4{Environment.NewLine}", NonLockingFileReader.ReadAllTextWithoutLocking(second));

                var third = files[2];
                Assert.AreEqual("nsb_log_2010-10-05_0.txt", Path.GetFileName(third));
                Assert.AreEqual($"Foo5{Environment.NewLine}", NonLockingFileReader.ReadAllTextWithoutLocking(third));
            }
        }
        public void When_many_files_written_over_size_old_files_are_deleted()
        {
            using (var tempPath = new TempPath())
            {
                var logger = new RollingLogger(tempPath.TempDirectory, numberOfArchiveFilesToKeep: 2, maxFileSize: 5)
                {
                    GetDate = () => new DateTime(2010, 10, 1)
                };
                logger.WriteLine("Long text0");
                logger.WriteLine("Long text1");
                logger.WriteLine("Long text2");
                logger.WriteLine("Long text3");
                logger.WriteLine("Long text4");
                var files = tempPath.GetFiles();
                Assert.AreEqual(3, files.Count, "Should be numberOfArchiveFilesToKeep + 1 (the current file) ");

                var first = files[0];
                Assert.AreEqual("nsb_log_2010-10-01_2.txt", Path.GetFileName(first));
                Assert.AreEqual($"Long text2{Environment.NewLine}", NonLockingFileReader.ReadAllTextWithoutLocking(first));

                var second = files[1];
                Assert.AreEqual("nsb_log_2010-10-01_3.txt", Path.GetFileName(second));
                Assert.AreEqual($"Long text3{Environment.NewLine}", NonLockingFileReader.ReadAllTextWithoutLocking(second));

                var third = files[2];
                Assert.AreEqual("nsb_log_2010-10-01_4.txt", Path.GetFileName(third));
                Assert.AreEqual($"Long text4{Environment.NewLine}", NonLockingFileReader.ReadAllTextWithoutLocking(third));
            }
        }
        public void When_file_already_exists_with_wrong_date_a_file_is_written()
        {
            using (var tempPath = new TempPath())
            {
                var logger1 = new RollingLogger(tempPath.TempDirectory)
                {
                    GetDate = () => new DateTime(2010, 10, 1)
                };
                logger1.WriteLine("Foo");
                var logger2 = new RollingLogger(tempPath.TempDirectory, maxFileSize: 10)
                {
                    GetDate = () => new DateTime(2010, 10, 2)
                };
                logger2.WriteLine("Bar");
                var files = tempPath.GetFiles();

                Assert.AreEqual(2, files.Count);

                var first = files[0];
                Assert.AreEqual("nsb_log_2010-10-01_0.txt", Path.GetFileName(first));
                Assert.AreEqual($"Foo{Environment.NewLine}", NonLockingFileReader.ReadAllTextWithoutLocking(files.First()));

                var second = files[1];
                Assert.AreEqual("nsb_log_2010-10-02_0.txt", Path.GetFileName(second));
                Assert.AreEqual($"Bar{Environment.NewLine}", NonLockingFileReader.ReadAllTextWithoutLocking(second));
            }
        }
        public void When_file_already_exists_and_is_too_large_a_new_sequence_file_is_written()
        {
            using (var tempPath = new TempPath())
            {
                DateTimeOffset dateTime = new DateTime(2010, 10, 1);
                var            logger1  = new RollingLogger(tempPath.TempDirectory, maxFileSize: 10)
                {
                    GetDate = () => dateTime
                };
                logger1.WriteLine("Some long text");
                var logger2 = new RollingLogger(tempPath.TempDirectory, maxFileSize: 10)
                {
                    GetDate = () => dateTime
                };
                logger2.WriteLine("Bar");
                var files = tempPath.GetFiles();

                Assert.AreEqual(2, files.Count);

                var first = files[0];
                Assert.AreEqual("nsb_log_2010-10-01_0.txt", Path.GetFileName(first));
                Assert.AreEqual($"Some long text{Environment.NewLine}", NonLockingFileReader.ReadAllTextWithoutLocking(files.First()));

                var second = files[1];
                Assert.AreEqual("nsb_log_2010-10-01_1.txt", Path.GetFileName(second));
                Assert.AreEqual($"Bar{Environment.NewLine}", NonLockingFileReader.ReadAllTextWithoutLocking(second));
            }
        }
Beispiel #5
0
        public IActionResult Post()
        {
            // Process data received from Comapi
            try
            {
                // Grab the body and parse to a JSON object
                string rawBody = GetDocumentContents(Request);
                if (string.IsNullOrEmpty(rawBody))
                {
                    // No body, bad request.
                    return(BadRequest("Bad request - No JSON body found!"));
                }

                // We have a request body so lets look at what we have

                // First lets ensure it hasn't been tampered with and it came from Comapi
                // We do this by checking the HMAC from the X-Comapi-Signature header
                string hmac = Request.Headers["x-comapi-signature"];

                if (String.IsNullOrEmpty(hmac))
                {
                    // No HMAC, invalid request.
                    RollingLogger.LogMessage("Invalid request: No HMAC value found!");
                    return(Unauthorized());
                }
                else
                {
                    // Validate the HMAC, ensure you has exposed the rawBody, see app.js for how to do this
                    var hash = CreateHMAC(rawBody, ">>>YOUR SECRET<<<");

                    if (hmac != hash)
                    {
                        // The request is not from Comapi or has been tampered with
                        RollingLogger.LogMessage("Invalid request: HMAC hash check failed!");
                        return(Unauthorized());
                    }
                }

                // Parse the recieved JSON to extract data
                dynamic eventObj = JsonConvert.DeserializeObject(rawBody);

                // Store the received event for later processing, remember you only have 10 secs to process, in this simple example we output to the console
                RollingLogger.LogMessage("");
                RollingLogger.LogMessage(String.Format("Received a {0} event id: {1}", (string)eventObj.name, (string)eventObj.eventId));
                RollingLogger.LogMessage(FormatJson(rawBody));

                // You could use queuing tech such as RabbitMQ, MSMQ or possibly a distributed cache such as Redis

                // All good return a 200
                return(Ok("Data accepted"));
            }
            catch (Exception err)
            {
                // An error occurred
                var msg = "An error occurred receiving data, the error was: " + err.ToString();
                RollingLogger.LogMessage(msg);
                throw;
            }
        }
 public DefaultLoggerFactory(LogLevel filterLevel, string loggingDirectory)
 {
     this.filterLevel = filterLevel;
     rollingLogger = new RollingLogger(loggingDirectory);
     isDebugEnabled = LogLevel.Debug >= filterLevel;
     isInfoEnabled = LogLevel.Info >= filterLevel;
     isWarnEnabled = LogLevel.Warn >= filterLevel;
     isErrorEnabled = LogLevel.Error >= filterLevel;
     isFatalEnabled = LogLevel.Fatal >= filterLevel;
 }
 public void When_line_is_write_line_appears_in_file()
 {
     using (var tempPath = new TempPath())
     {
         var logger = new RollingLogger(tempPath.TempDirectory);
         logger.WriteLine("Foo");
         var singleFile = tempPath.GetSingle();
         Assert.AreEqual($"Foo{Environment.NewLine}", NonLockingFileReader.ReadAllTextWithoutLocking(singleFile));
     }
 }
 public void When_multiple_lines_are_written_lines_appears_in_file()
 {
     using (var tempPath = new TempPath())
     {
         var logger = new RollingLogger(tempPath.TempDirectory);
         logger.Write("Foo");
         logger.Write("Bar");
         var singleFile = tempPath.GetSingle();
         Assert.AreEqual("Foo\r\nBar\r\n", NonLockingFileReader.ReadAllTextWithoutLocking(singleFile));
     }
 }
 public void When_new_write_causes_overlap_of_file_size_line_is_written_to_current_file()
 {
     using (var tempPath = new TempPath())
     {
         var logger = new RollingLogger(tempPath.TempDirectory, maxFileSize: 10);
         logger.WriteLine("Foo");
         logger.WriteLine("Some long text");
         var singleFile = tempPath.GetSingle();
         Assert.AreEqual($"Foo{Environment.NewLine}Some long text{Environment.NewLine}", NonLockingFileReader.ReadAllTextWithoutLocking(singleFile));
     }
 }
 public void When_line_is_write_file_has_correct_name()
 {
     using (var tempPath = new TempPath())
     {
         var logger = new RollingLogger(tempPath.TempDirectory)
         {
             GetDate = () => new DateTime(2010, 10, 1)
         };
         logger.WriteLine("Foo");
         var singleFile = tempPath.GetSingle();
         Assert.AreEqual("nsb_log_2010-10-01_0.txt", Path.GetFileName(singleFile));
     }
 }
 public void ManyWritesTest()
 {
     using (var tempPath = new TempPath())
     {
         var logger = new RollingLogger(tempPath.TempDirectory)
         {
             GetDate = () => new DateTime(2010, 10, 1)
         };
         for (var i = 0; i < 1000000; i++)
         {
             logger.Write("Some long text");
         }
     }
 }
 public void When_file_is_deleted_underneath_continues_to_write_afterwards()
 {
     using (var tempPath = new TempPath())
     {
         var logger = new RollingLogger(tempPath.TempDirectory)
         {
             GetDate = () => new DateTime(2010, 10, 1)
         };
         logger.Write("Foo");
         var single = tempPath.GetSingle();
         File.Delete(single);
         logger.Write("Bar");
         Assert.AreEqual("Bar\r\n", NonLockingFileReader.ReadAllTextWithoutLocking(single));
     }
 }
 public void When_file_is_deleted_underneath_continues_to_write_afterwards()
 {
     using (var tempPath = new TempPath())
     {
         var logger = new RollingLogger(tempPath.TempDirectory)
         {
             GetDate = () => new DateTime(2010, 10, 1)
         };
         logger.WriteLine("Foo");
         var single = tempPath.GetSingle();
         File.Delete(single);
         logger.WriteLine("Bar");
         Assert.AreEqual($"Bar{Environment.NewLine}", NonLockingFileReader.ReadAllTextWithoutLocking(single));
     }
 }
 public void When_many_sequence_files_are_written_the_max_is_not_exceeded()
 {
     using (var tempPath = new TempPath())
     {
         var logger = new RollingLogger(tempPath.TempDirectory, maxFileSize: 10)
         {
             GetDate = () => new DateTime(2010, 10, 1)
         };
         for (var i = 0; i < 100; i++)
         {
             logger.WriteLine("Some long text");
             Assert.LessOrEqual(tempPath.GetFiles().Count, 11);
         }
     }
 }
 public void When_file_is_locked_exception_is_swallowed()
 {
     using (var tempPath = new TempPath())
     {
         var logger = new RollingLogger(tempPath.TempDirectory)
         {
             GetDate = () => new DateTime(2010, 10, 1)
         };
         logger.Write("Foo");
         var single = tempPath.GetSingle();
         using (LockFile(single))
         {
             logger.Write("Bar");
         }
         Assert.AreEqual("Foo\r\n", NonLockingFileReader.ReadAllTextWithoutLocking(single));
     }
 }
 public void When_file_is_locked_exception_is_swallowed()
 {
     using (var tempPath = new TempPath())
     {
         var logger = new RollingLogger(tempPath.TempDirectory)
         {
             GetDate = () => new DateTime(2010, 10, 1)
         };
         logger.WriteLine("Foo");
         var single = tempPath.GetSingle();
         using (LockFile(single))
         {
             logger.WriteLine("Bar");
         }
         Assert.AreEqual($"Foo{Environment.NewLine}", NonLockingFileReader.ReadAllTextWithoutLocking(single));
     }
 }
        public void When_getting_todays_log_file_sequence_number_is_used_in_sorting()
        {
            var today    = new DateTime(2010, 10, 2);
            var logFiles = new List <RollingLogger.LogFile>
            {
                new RollingLogger.LogFile
                {
                    SequenceNumber = 0,
                    DatePart       = today
                },
                new RollingLogger.LogFile
                {
                    SequenceNumber = 2,
                    DatePart       = today
                },
            };
            var logFile = RollingLogger.GetTodaysNewest(logFiles, today);

            Assert.AreEqual(2, logFile.SequenceNumber);
        }
        public void When_max_file_size_is_exceeded_sequence_number_is_added()
        {
            using (var tempPath = new TempPath())
            {
                var logger = new RollingLogger(tempPath.TempDirectory, maxFileSize: 10)
                {
                    GetDate = () => new DateTime(2010, 10, 1)
                };
                logger.WriteLine("Some long text");
                logger.WriteLine("Bar");
                var files = tempPath.GetFiles();
                Assert.AreEqual(2, files.Count);

                var first = files[0];
                Assert.AreEqual("nsb_log_2010-10-01_0.txt", Path.GetFileName(first));
                Assert.AreEqual($"Some long text{Environment.NewLine}", NonLockingFileReader.ReadAllTextWithoutLocking(first));

                var second = files[1];
                Assert.AreEqual("nsb_log_2010-10-01_1.txt", Path.GetFileName(second));
                Assert.AreEqual($"Bar{Environment.NewLine}", NonLockingFileReader.ReadAllTextWithoutLocking(second));
            }
        }
 public void When_file_already_exists_that_file_is_written_to()
 {
     using (var tempPath = new TempPath())
     {
         var dateTime = new DateTime(2010, 10, 1);
         var logger1  = new RollingLogger(tempPath.TempDirectory)
         {
             GetDate = () => dateTime
         };
         logger1.WriteLine("Foo");
         var files1 = tempPath.GetFiles();
         Assert.AreEqual(1, files1.Count);
         Assert.AreEqual($"Foo{Environment.NewLine}", NonLockingFileReader.ReadAllTextWithoutLocking(files1.First()));
         var logger2 = new RollingLogger(tempPath.TempDirectory)
         {
             GetDate = () => dateTime
         };
         logger2.WriteLine("Bar");
         var files2 = tempPath.GetFiles();
         Assert.AreEqual(1, files2.Count);
         Assert.AreEqual($"Foo{Environment.NewLine}Bar{Environment.NewLine}", NonLockingFileReader.ReadAllTextWithoutLocking(files2.First()));
     }
 }
 public void When_file_already_exists_that_file_is_written_to()
 {
     using (var tempPath = new TempPath())
     {
         var dateTime = new DateTime(2010, 10, 1);
         var logger1 = new RollingLogger(tempPath.TempDirectory)
         {
             GetDate = () => dateTime
         };
         logger1.Write("Foo");
         var files1 = tempPath.GetFiles();
         Assert.AreEqual(1, files1.Count);
         Assert.AreEqual("Foo\r\n", NonLockingFileReader.ReadAllTextWithoutLocking(files1.First()));
         var logger2 = new RollingLogger(tempPath.TempDirectory)
         {
             GetDate = () => dateTime
         };
         logger2.Write("Bar");
         var files2 = tempPath.GetFiles();
         Assert.AreEqual(1, files2.Count);
         Assert.AreEqual("Foo\r\nBar\r\n", NonLockingFileReader.ReadAllTextWithoutLocking(files2.First()));
     }
 }
        public void When_date_changes_new_file_is_written()
        {
            using (var tempPath = new TempPath())
            {
                var logger = new RollingLogger(tempPath.TempDirectory)
                {
                    GetDate = () => new DateTime(2010, 10, 1)
                };
                logger.Write("Foo");
                logger.GetDate = () => new DateTime(2010, 10, 2);
                logger.Write("Bar");
                var files = tempPath.GetFiles();
                Assert.AreEqual(2, files.Count);

                var first = files[0];
                Assert.AreEqual("nsb_log_2010-10-01_0.txt", Path.GetFileName(first));
                Assert.AreEqual("Foo\r\n", NonLockingFileReader.ReadAllTextWithoutLocking(first));

                var second = files[1];
                Assert.AreEqual("nsb_log_2010-10-02_0.txt", Path.GetFileName(second));
                Assert.AreEqual("Bar\r\n", NonLockingFileReader.ReadAllTextWithoutLocking(second));
            }
        }
        public void When_getting_todays_log_file_only_today_is_respected()
        {
            var today     = new DateTime(2010, 10, 2);
            var yesterday = new DateTime(2010, 10, 1);
            var tomorrow  = new DateTime(2010, 10, 3);
            var logFiles  = new List <RollingLogger.LogFile>
            {
                new RollingLogger.LogFile
                {
                    SequenceNumber = 2,
                    DatePart       = tomorrow
                },
                new RollingLogger.LogFile
                {
                    SequenceNumber = 2,
                    DatePart       = yesterday
                },
                new RollingLogger.LogFile
                {
                    SequenceNumber = 0,
                    DatePart       = today
                },
                new RollingLogger.LogFile
                {
                    SequenceNumber = 2,
                    DatePart       = tomorrow
                },
                new RollingLogger.LogFile
                {
                    SequenceNumber = 2,
                    DatePart       = yesterday
                },
            };
            var logFile = RollingLogger.GetTodaysNewest(logFiles, today);

            Assert.AreEqual(0, logFile.SequenceNumber);
        }
 public void When_multiple_lines_are_written_lines_appears_in_file()
 {
     using (var tempPath = new TempPath())
     {
         var logger = new RollingLogger(tempPath.TempDirectory);
         logger.Write("Foo");
         logger.Write("Bar");
         var singleFile = tempPath.GetSingle();
         Assert.AreEqual("Foo\r\nBar\r\n", NonLockingFileReader.ReadAllTextWithoutLocking(singleFile));
     }
 }
        public void When_file_already_exists_and_is_too_large_a_new_sequence_file_is_written()
        {
            using (var tempPath = new TempPath())
            {
                var dateTime = new DateTime(2010, 10, 1);
                var logger1 = new RollingLogger(tempPath.TempDirectory, maxFileSize: 10)
                {
                    GetDate = () => dateTime
                };
                logger1.Write("Some long text");
                var logger2 = new RollingLogger(tempPath.TempDirectory, maxFileSize: 10)
                {
                    GetDate = () => dateTime
                };
                logger2.Write("Bar");
                var files = tempPath.GetFiles();

                Assert.AreEqual(2, files.Count);

                var first = files[0];
                Assert.AreEqual("nsb_log_2010-10-01_0.txt", Path.GetFileName(first));
                Assert.AreEqual("Some long text\r\n", NonLockingFileReader.ReadAllTextWithoutLocking(files.First()));

                var second = files[1];
                Assert.AreEqual("nsb_log_2010-10-01_1.txt", Path.GetFileName(second));
                Assert.AreEqual("Bar\r\n", NonLockingFileReader.ReadAllTextWithoutLocking(second));
            }
        }
        public void When_many_files_written_over_dates_old_files_are_deleted()
        {
            using (var tempPath = new TempPath())
            {
                var logger = new RollingLogger(tempPath.TempDirectory, numberOfArchiveFilesToKeep: 2)
                {
                    GetDate = () => new DateTime(2010, 10, 1)
                };
                logger.Write("Foo1");
                logger.GetDate = () => new DateTime(2010, 10, 2);
                logger.Write("Foo2");
                logger.GetDate = () => new DateTime(2010, 10, 3);
                logger.Write("Foo3");
                logger.GetDate = () => new DateTime(2010, 10, 4);
                logger.Write("Foo4");
                logger.GetDate = () => new DateTime(2010, 10, 5);
                logger.Write("Foo5");
                var files = tempPath.GetFiles();
                Assert.AreEqual(3, files.Count, "Should be numberOfArchiveFilesToKeep + 1 (the current file) ");

                var first = files[0];
                Assert.AreEqual("nsb_log_2010-10-03_0.txt", Path.GetFileName(first));
                Assert.AreEqual("Foo3\r\n", NonLockingFileReader.ReadAllTextWithoutLocking(first));

                var second = files[1];
                Assert.AreEqual("nsb_log_2010-10-04_0.txt", Path.GetFileName(second));
                Assert.AreEqual("Foo4\r\n", NonLockingFileReader.ReadAllTextWithoutLocking(second));

                var third = files[2];
                Assert.AreEqual("nsb_log_2010-10-05_0.txt", Path.GetFileName(third));
                Assert.AreEqual("Foo5\r\n", NonLockingFileReader.ReadAllTextWithoutLocking(third));
            }
        }
        public void When_many_files_written_over_size_old_files_are_deleted()
        {
            using (var tempPath = new TempPath())
            {
                var logger = new RollingLogger(tempPath.TempDirectory, numberOfArchiveFilesToKeep: 2, maxFileSize: 5)
                {
                    GetDate = () => new DateTime(2010, 10, 1)
                };
                logger.Write("Long text0");
                logger.Write("Long text1");
                logger.Write("Long text2");
                logger.Write("Long text3");
                logger.Write("Long text4");
                var files = tempPath.GetFiles();
                Assert.AreEqual(3, files.Count, "Should be numberOfArchiveFilesToKeep + 1 (the current file) ");

                var first = files[0];
                Assert.AreEqual("nsb_log_2010-10-01_2.txt", Path.GetFileName(first));
                Assert.AreEqual("Long text2\r\n", NonLockingFileReader.ReadAllTextWithoutLocking(first));

                var second = files[1];
                Assert.AreEqual("nsb_log_2010-10-01_3.txt", Path.GetFileName(second));
                Assert.AreEqual("Long text3\r\n", NonLockingFileReader.ReadAllTextWithoutLocking(second));

                var third = files[2];
                Assert.AreEqual("nsb_log_2010-10-01_4.txt", Path.GetFileName(third));
                Assert.AreEqual("Long text4\r\n", NonLockingFileReader.ReadAllTextWithoutLocking(third));
            }
        }
        public void When_max_file_size_is_exceeded_sequence_number_is_added()
        {
            using (var tempPath = new TempPath())
            {
                var logger = new RollingLogger(tempPath.TempDirectory, maxFileSize: 10)
                {
                    GetDate = () => new DateTime(2010, 10, 1)
                };
                logger.Write("Some long text");
                logger.Write("Bar");
                var files = tempPath.GetFiles();
                Assert.AreEqual(2, files.Count);

                var first = files[0];
                Assert.AreEqual("nsb_log_2010-10-01_0.txt", Path.GetFileName(first));
                Assert.AreEqual("Some long text\r\n", NonLockingFileReader.ReadAllTextWithoutLocking(first));

                var second = files[1];
                Assert.AreEqual("nsb_log_2010-10-01_1.txt", Path.GetFileName(second));
                Assert.AreEqual("Bar\r\n", NonLockingFileReader.ReadAllTextWithoutLocking(second));
            }
        }
        public void ProcessRequest(HttpContext context)
        {
            if (context.Request.HttpMethod == "GET")
            {
                // Return helper page to aid testing
                ReturnMessage(HttpStatusCode.OK, "Configure this page as your Comapi webhook location to start receiving data.", context.Response);
            }
            else if (context.Request.HttpMethod == "POST")
            {
                try
                {
                    // Process posted data
                    // Grab the body and parse to a JSON object
                    string rawBody = GetDocumentContents(context.Request);
                    if (string.IsNullOrEmpty(rawBody))
                    {
                        // No body, bad request.
                        ReturnMessage(HttpStatusCode.BadRequest, "Bad request - No JSON body found!", context.Response);
                        return;
                    }

                    // We have a request body so lets look at what we have

                    // First lets ensure it hasn't been tampered with and it came from Comapi
                    // We do this by checking the HMAC from the X-Comapi-Signature header
                    string hmac = context.Request.Headers["x-comapi-signature"];

                    if (String.IsNullOrEmpty(hmac))
                    {
                        // No HMAC, invalid request.
                        RollingLogger.LogMessage("Invalid request: No HMAC value found!");
                        ReturnMessage(HttpStatusCode.Unauthorized, "Invalid request: No HMAC value found!", context.Response);
                        return;
                    }
                    else
                    {
                        // Validate the HMAC; ensure you update the secret with the one you have configured on your webhook in Comapi
                        var hash = CreateHMAC(rawBody, ">>>YOUR SECRET<<<"); // <<<<<< Change this!!!!!!

                        if (hmac != hash)
                        {
                            // The request is not from Comapi or has been tampered with
                            RollingLogger.LogMessage("Invalid request: HMAC hash check failed!");
                            ReturnMessage(HttpStatusCode.Unauthorized, "Invalid request: HMAC hash check failed!", context.Response);
                        }
                    }

                    // Parse the recieved JSON to extract data; we strongly recommend using .Net 4 and dynamic objects where possible.
                    Event eventObj = null;
                    using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(rawBody)))
                    {
                        System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(new Event().GetType());
                        eventObj = serializer.ReadObject(ms) as Event;
                        ms.Close();
                    }

                    // Store the received event for later processing, remember you only have 10 secs to process, in this simple example we output to the console
                    RollingLogger.LogMessage("");
                    RollingLogger.LogMessage(String.Format("Received a {0} event id: {1}", eventObj.name, eventObj.eventId.ToString()));
                    RollingLogger.LogMessage(rawBody);

                    // You could use queuing tech such as RabbitMQ, MSMQ or possibly a distributed cache such as Redis

                    // All good return a 200
                    context.Response.StatusCode = (int)HttpStatusCode.OK;
                }
                catch (Exception err)
                {
                    // An error occurred
                    var msg = "An error occurred receiving data, the error was: " + err.ToString();
                    RollingLogger.LogMessage(msg);
                    throw;
                }
            }
        }
 public void When_new_write_causes_overlap_of_file_size_line_is_written_to_current_file()
 {
     using (var tempPath = new TempPath())
     {
         var logger = new RollingLogger(tempPath.TempDirectory, maxFileSize: 10);
         logger.Write("Foo");
         logger.Write("Some long text");
         var singleFile = tempPath.GetSingle();
         Assert.AreEqual("Foo\r\nSome long text\r\n", NonLockingFileReader.ReadAllTextWithoutLocking(singleFile));
     }
 }
 public void When_many_sequence_files_are_written_the_max_is_not_exceeded()
 {
     using (var tempPath = new TempPath())
     {
         var logger = new RollingLogger(tempPath.TempDirectory, maxFileSize: 10)
         {
             GetDate = () => new DateTime(2010, 10, 1)
         };
         for (var i = 0; i < 100; i++)
         {
             logger.Write("Some long text");
             Assert.LessOrEqual(tempPath.GetFiles().Count, 11);
         }
     }
 }
        public void When_file_already_exists_with_wrong_date_a_file_is_written()
        {
            using (var tempPath = new TempPath())
            {
                var logger1 = new RollingLogger(tempPath.TempDirectory)
                {
                    GetDate = () => new DateTime(2010, 10, 1)
                };
                logger1.Write("Foo");
                var logger2 = new RollingLogger(tempPath.TempDirectory, maxFileSize: 10)
                {
                    GetDate = () => new DateTime(2010, 10, 2)
                };
                logger2.Write("Bar");
                var files = tempPath.GetFiles();

                Assert.AreEqual(2, files.Count);

                var first = files[0];
                Assert.AreEqual("nsb_log_2010-10-01_0.txt", Path.GetFileName(first));
                Assert.AreEqual("Foo\r\n", NonLockingFileReader.ReadAllTextWithoutLocking(files.First()));

                var second = files[1];
                Assert.AreEqual("nsb_log_2010-10-02_0.txt", Path.GetFileName(second));
                Assert.AreEqual("Bar\r\n", NonLockingFileReader.ReadAllTextWithoutLocking(second));
            }
        }
        public void When_date_changes_new_file_is_written()
        {
            using (var tempPath = new TempPath())
            {
                var logger = new RollingLogger(tempPath.TempDirectory)
                {
                    GetDate = () => new DateTime(2010, 10, 1)
                };
                logger.Write("Foo");
                logger.GetDate = () => new DateTime(2010, 10, 2);
                logger.Write("Bar");
                var files = tempPath.GetFiles();
                Assert.AreEqual(2, files.Count);

                var first = files[0];
                Assert.AreEqual("nsb_log_2010-10-01_0.txt", Path.GetFileName(first));
                Assert.AreEqual("Foo\r\n", NonLockingFileReader.ReadAllTextWithoutLocking(first));

                var second = files[1];
                Assert.AreEqual("nsb_log_2010-10-02_0.txt", Path.GetFileName(second));
                Assert.AreEqual("Bar\r\n", NonLockingFileReader.ReadAllTextWithoutLocking(second));
            }
        }
 public void When_line_is_write_file_has_correct_name()
 {
     using (var tempPath = new TempPath())
     {
         var logger = new RollingLogger(tempPath.TempDirectory)
         {
             GetDate = () => new DateTime(2010, 10, 1)
         };
         logger.Write("Foo");
         var singleFile = tempPath.GetSingle();
         Assert.AreEqual("nsb_log_2010-10-01_0.txt", Path.GetFileName(singleFile));
     }
 }
 public void ManyWritesTest()
 {
     using (var tempPath = new TempPath())
     {
         var logger = new RollingLogger(tempPath.TempDirectory)
         {
             GetDate = () => new DateTime(2010, 10, 1)
         };
         for (var i = 0; i < 1000000; i++)
         {
             logger.Write("Some long text");
         }
     }
 }