public ActionResult Log(LogViewModel formModel)
        {
            if (!string.IsNullOrEmpty(formModel.Message))
            {
                Trace.TraceInformation("MasterAdminController.Log(formModel): " + formModel.Message);
            }

            var levels = formModel.GetLevels();
            IEnumerable <WindowsAzureLogHelper.TraceLogsEntity> logsSource = WindowsAzureLogHelper.GetLogEvents(
                formModel.Page ?? 1, levels.ToArray(), formModel.FilterRoleInstance, formModel.FilterPath);

            var logs = logsSource
                       .Select(
                item => new LogViewModel.TraceLogItem(item.Message)
            {
                Timestamp    = DateTime.Parse(item.Timestamp),
                Level        = item.Level,
                RoleInstance = item.RoleInstance,
                Role         = item.Role,
            });

            if (formModel.HasPathFilter())
            {
                logs = logs.Where(l => l.Path.StartsWith(formModel.FilterPath));
            }

            if (formModel.HasSourceFilter())
            {
                logs = logs.Where(l => l.Source.Equals(formModel.FilterSource, StringComparison.InvariantCultureIgnoreCase));
            }

            if (formModel.HasTextFilter())
            {
                logs = logs.Where(l => l.Text.IndexOf(formModel.FilterText, StringComparison.InvariantCultureIgnoreCase) > 0);
            }

            if (formModel.HasRoleInstanceFilter())
            {
                logs = logs.Where(l => formModel.FilterRoleInstance == l.RoleInstance);
            }

            if (formModel.HasLevelFilter())
            {
                logs = logs.Where(l => levels.Contains(l.Level));
            }

            if (formModel.HasSpecialFilter())
            {
                logs = logs.Where(l => l.SpecialStrings.Any(s => formModel.FilterSpecial.Contains(s)));
            }

            if (formModel.HasRoleFilter())
            {
                logs = logs.Where(l => formModel.FilterRole == l.Role);
            }

            if (formModel.HasTimestampFilter())
            {
                if (formModel.FilterTimestamp == "now")
                {
                    var vm = formModel.Clone();
                    vm.FilterLevel = null;
                    var q = UrlBuilder.GetListQueryParams("FilterSpecial", vm.FilterSpecial);
                    vm.FilterTimestamp = this.GetUtcNow().ToString("yyyy'-'MM'-'dd'-'HH'-'mm");

                    return(this.Redirect(UrlBuilder.AppendQuery(this.Url.Action("Log", vm), q)));
                }

                var date =
                    DateTime.Parse(
                        Regex.Replace(
                            formModel.FilterTimestamp,
                            @"(\d{4})\-(\d{2})\-(\d{2})\-(\d{2})\-(\d{2})",
                            @"$1-$2-$3T$4:$5:00"));

                logs = logs.Where(l => l.Timestamp > date);
            }

            formModel.Logs = logs.ToList();

            return(this.View(formModel));
        }