public static SearchModel ApplyFilters(SearchQuery query, TagMessagesCollection messages) { SearchModel searchModel = new SearchModel(); //init messages searchModel.MessagesCollection = new TagMessagesCollection(messages.Host, messages.Tag); //init filters searchModel.FilterModel = new FilterModel() { Severity = !String.IsNullOrEmpty(query.Severity) ? query.Severity : String.Empty, Text = !String.IsNullOrEmpty(query.Text) ? query.Text : String.Empty, StartTime = query.StartTime, EndTime = query.EndTime, MinSeverity = !String.IsNullOrEmpty(query.MinSeverity) ? query.MinSeverity : String.Empty }; FilterUtility.ApplyQueryFilters(searchModel, messages.Messages); //calculate page options searchModel.PageOptions = new PageOptions(); //TODO: Hard-coded page size searchModel.PageOptions.PageCount = (searchModel.MessagesCollection.Messages.Count / 50) + 1; if (query.Page <= 0 || query.Page > searchModel.PageOptions.PageCount) { searchModel.PageOptions.Page = 1; } else { searchModel.PageOptions.Page = query.Page; } //filter by page searchModel.MessagesCollection.Messages = searchModel.MessagesCollection.Messages.Skip((searchModel.PageOptions.Page - 1) * 50).Take(50).ToList(); return(searchModel); }
public HtmlActionResult <TagMessagesCollection> MessageView(string host, string tag) { IStateQuery syslogState = base.GetSyslogState(); TagMessagesCollection msgCollection = syslogState.GetTagMessages(host, tag); msgCollection.Messages.Sort((x, y) => y.Timestamp.CompareTo(x.Timestamp)); return(new HtmlActionResult <TagMessagesCollection>(Path.Combine(base.GetViewDirectory(), "Messages.cshtml"), msgCollection)); }
public HtmlActionResult <SearchModel> Search([FromUri] SearchQuery search) { IStateQuery syslogState = base.GetSyslogState(); TagMessagesCollection msgCollection = syslogState.GetTagMessages(search.Host, search.Tag); //msgCollection.Messages.Sort((x, y) => y.Timestamp.CompareTo(x.Timestamp)); //TODO: This is stable sort but not in-place => possible memory pressure msgCollection.Messages = msgCollection.Messages.OrderByDescending(x => x.Timestamp).ToList(); SearchModel searchModel = FilterUtility.ApplyFilters(search, msgCollection); return(new HtmlActionResult <SearchModel>(Path.Combine(base.GetViewDirectory(), "Search.cshtml"), searchModel)); }
public TagMessagesCollection GetTagMessages(string host, string tag) { this.rwLock.EnterReadLock(); try { TagMessagesCollection tagMessages = new TagMessagesCollection(host, tag); foreach (var msg in this.messageQueue) { if (msg.Hostname.Equals(host, StringComparison.CurrentCultureIgnoreCase) && msg.Tag.Equals(tag, StringComparison.CurrentCultureIgnoreCase)) { tagMessages.Messages.Add(msg); } } return(tagMessages); } finally { this.rwLock.ExitReadLock(); } }