public HttpResponseMessage Post([FromBody] JObject loadTime)
        {
            var clientSettings = new MessageBusClient();
            var router = clientSettings.GetClientRouter();

            var page = new PageModel
            {
                Id = Guid.NewGuid().ToString("N"),
                Key = Guid.NewGuid().ToString("N"),
                Source = new Dictionary<string, string>
                        {
                            {"Request.ApplicationPath", HttpContext.Current.Request.ApplicationPath},
                            {"Request.PhysicalApplicationPath", HttpContext.Current.Request.PhysicalApplicationPath},
                            {"Request.PhysicalPath", HttpContext.Current.Request.PhysicalPath},
                        },
                Metric = new MetricModel
                {
                    Key = MetricType.LoadTime.ToString(),
                    Value = loadTime.ToString()
                },
                Time = DateTime.UtcNow
            };

            Task.Factory.StartNew(() =>
            {
                var producerusingClient = new JsonProducer(router);
                // todo: topics need to be maintained dynamically
                // todo: we are not specifying the partition
                producerusingClient.Publish("PageLoadTime", new List<PageModel> { page });
            });

            return new HttpResponseMessage(HttpStatusCode.Created);
        }
        static void Main(string[] args)
        {
            var redisUri = ConfigurationManager.AppSettings["Redis_Server_Uri"];
            IRedisClientsManager clientManger = new PooledRedisClientManager(redisUri);
            PageRepository pageRepository = new PageRepository(clientManger.GetClient());

            // bin\windows\zookeeper-server-start.bat config\zookeeper.properties
            // bin\windows\kafka-server-start.bat config\server.properties
            // bin\windows\kafka-console-consumer.bat --zookeeper localhost:2181 --topic PageLoadTime --from-beginning
            // kafka-console-producer.bat --broker-list localhost:9092 --topic PageLoadTime

            //// CONSUMER READING OFF THE QUEUE
            //var options = new KafkaOptions(new Uri("http://localhost:9092"));
            //var router = new BrokerRouter(options);

            //var redisClient = new RedisClient("127.0.0.1:6379");
            //var db = redisClient.Instance(1);

            //var consumer = new Consumer(new ConsumerOptions("PageLoadTime", router));
            //var allData = consumer.Consume();
            //Task.Factory.StartNew(() =>
            //    {
            //        int i = 0;
            //        foreach (var data in allData)
            //        {
            //            if (string.IsNullOrEmpty(data.Key))
            //            {
            //                continue;
            //            }
            //            Console.ForegroundColor = ConsoleColor.Green;
            //            Console.WriteLine(string.Format("Reading {0} message => {1}", i, data.Value));
            //            Console.ForegroundColor = ConsoleColor.Yellow;
            //            Console.WriteLine("----------------------------------------------------------");
            //            db.StringSetAsync(data.Key, data.Value.ToString(CultureInfo.InvariantCulture));
            //            i++;
            //        }
            //    });

            var redisData = pageRepository.GetAll();
            DisplayAll(redisData);
            // CONSUMER READING OFF THE QUEUE + REDIS

            var clientSettings = new MessageBusClient();
            var router = clientSettings.GetClientRouter();
            var consumer = new JsonConsumer<PageModel>(new ConsumerOptions("PageLoadTime", router));

            var allData = consumer.Consume();

            Task.Factory.StartNew(() =>
                {
                    foreach (var data in allData)
                    {
                        if (string.IsNullOrEmpty(data.Value.Key))
                        {
                            continue;
                        }

                        var page = pageRepository.Store(data.Value);
                        DisplaySingle(page);
                    }
                });

            Console.ReadKey();
        }