Replaced scrolling widget with new angular directive and simplified approach to endless scroll. Fixed non-response to job failing before any job_events actually received. Now if playbook run completely fails, the stdout gets displayed without having to refresh browser.
Autosizing on the jobs page assumed that there would be a certain amount of consistency with respect to row heights. However, really long job template names blow that assumptions and things break. Finally figured out how to add ellipsis via CSS, and that fixed the problem.
If host_summaries summary_fields.host does not exist, consider host deleted and use <deleted host> for the name. Also, added endless scroll to play list.
Removed malihu POS custom scrollbar widget. Installed new angular directive. Removed the waiting spinner on scroll, replacing it with a subtle, small spinning cog under the scrollbar.
Fixed key sorting. Turns out reverse() doesn't sort keys in reverse, it just reverses them. To sort in reverse: sort().reverse(). Ugh. Fixed JS liting issues for dashboard stuff.
When screen width goes below 1076px the menu disappears, being replaced by a button. Clicking the button displayed the default twitter bootstrap, which was pretty icky. Now it displays a much nicer slide in menu from the right.
Improved unreachable host count in tasks status bar. Once a host is unreachable it shows as missing in subsequent tasks, which is the expected result as it is skipped but not really marked as skipped.
When user switches from a search filter using an input field to one using a drop-down the bottom margin no longer disappears. The disappearing margin caused an unpleasant bounce effect.
Added 5px to navbar-collapse. Fixes FF active/focus border touching the logo. Try as I might, I cannot get FF 30 to stop with the dashed boarder around the active menu item.
Job tasks now include an unreachable count and %. Change unreachable color from grey to a different shade of red. While live events are happening host name filter is disabled and status filter is available. Created a custom status filter that accounts for live event processing. While live event processing is active angular filtering on status is disabled for tasks and plays, otherwise no tasks or plays would show up. However, status filtering does apply to host results and host summaries during live event processing.
Changed 'successful' to 'OK' throughout the page. Also fixed status tool tip text on unreachable hosts to be 'Unreachable' rather than 'failed'. Fixed tool tips on Plays and Tasks so that they updated in sync with status changes.
For SCM update and inventory sync job types, clicking on job details now gives you the log viewer dialog rather than attempting to load the job detail page and ending in error.
Changed host query from excluding things where host_id not null to including all runner events. This is to accommodate the temporary creation of hosts during a playbook run.
Attempted to remove the dashed outline around active or focused links. CSS outline property is supposed to control this. However, FF ignores and adds a dashed line anyway. Seems like a FF bug.
Fixed endless scroll, both up and down. It now models the Jenkins behavior. If live events are happening, it captures and displays them, always auto-scrolling down. If user srolls up, live events continue to be captured but auto-scrolling is suspended. If user scrolls all the way back down to bottom, auto-scrolling resumes.
Added dialog for viewing host results and a bunch of formatting. Linked host summary to job_host_summaries page (yes, that still exists). Host results now shows 'skipped' hosts with a blue icon rather than green.
Removed well and index from primary list pages. Job detail page cleanup. Fixed status filter on host summary list. Incresed # rows kept in memory for each list to 100. Showing unreachable host count on the play, mostly to help debugging.
Re-enabling a count of the possible hosts that should report status on each task. As live events happen increment a count stored on the play. Only increment when hosts are reporting for the first task of the play, and only increment if the host status is in: successful, changed, skipped or failed. Added the total to the plays list as 'Reporting Hosts'.
Fixed drop-down account menu so that it no longer behaves like a drop-down when the menu collapses on small viewports. On large screens added a right margin to the drop-down menu. Moved Logout to the bottom of the submenu. On large screens the drop-down now includes a divider above the logout option.
Fixed collapsed menu on small viewports. On a small viewport the web socket beacon now displays to the left of the menu button. On large screens it appears as part of the menu.
Fixed auto-resize. The page now differentiates between plays, tasks and host results when allocating space. The play list gets the least amount of space. Tasks receives slightly less than it used to but more than plays. Host results gets the most space at nearly 2x what it received previously.
Restyled status information using horizontal form layout with overrides to make not look like a form. Added a more/less link to hide or show additional details (i.e. job template, project, inventory). Added proper labels for finsished and elapsed. Looking much better.
Right justified Account menu. Modified bootstrap menu collapse setting to force collapse at 1075px so that we never show the menu on multiple lines. Started changing styles on job detail page so that we auto-resize behavior can be restored.
When live event processing is happening (job is not in a completed state) infinite scroll is now disabled. This keeps the programmatic scroll to bottom from tripping an API call.
Things being added to the DOM were passed by reference and not value. Fixed that using json stringify/parse. Now the DOM does not update in real time. Added in updated of summary list and graph. Performing updates every 5 sec.
First pass at aggregating all incoming events without any DOM updates. Lets see if we can just perform simple aggregration in memory without a CPU meltdown.
Reverting attempt to use _.throttle and _.defer. They assume we actually want to process every event. We need to stop all processing if the job has finished.