Commit 2e279eb197cbe2acc5d3fa8af349d0dad8e283a7
1 parent
49b0fe02
Exists in
master
and in
1 other branch
added a tally of browsers on which an error occurred to err/summary
Showing
4 changed files
with
71 additions
and
2 deletions
Show diff stats
app/helpers/application_helper.rb
1 | module ApplicationHelper | 1 | module ApplicationHelper |
2 | + | ||
3 | + | ||
2 | def lighthouse_tracker? object | 4 | def lighthouse_tracker? object |
3 | object.issue_tracker_type == "lighthouseapp" | 5 | object.issue_tracker_type == "lighthouseapp" |
4 | end | 6 | end |
7 | + | ||
8 | + | ||
9 | + def user_agent_graph(error) | ||
10 | + tallies = tally(error.notices) {|notice| pretty_user_agent(notice.user_agent)} | ||
11 | + create_percentage_table(tallies, :total => error.notices.count) | ||
12 | + end | ||
13 | + | ||
14 | + def pretty_user_agent(user_agent) | ||
15 | + (user_agent.nil? || user_agent.none?) ? "N/A" : "#{user_agent.browser} #{user_agent.version}" | ||
16 | + end | ||
17 | + | ||
18 | + | ||
19 | + def tally(collection, &block) | ||
20 | + collection.inject({}) do |tallies, item| | ||
21 | + value = yield item | ||
22 | + tallies[value] = (tallies[value] || 0) + 1 | ||
23 | + tallies | ||
24 | + end | ||
25 | + end | ||
26 | + | ||
27 | + | ||
28 | + def create_percentage_table(tallies, options={}) | ||
29 | + total = (options[:total] || total_from_tallies(tallies)) | ||
30 | + percent = 100.0 / total.to_f | ||
31 | + rows = tallies.map {|value, count| [(count.to_f * percent), value]} \ | ||
32 | + .sort {|a, b| a[0] <=> b[0]} | ||
33 | + render :partial => "errs/tally_table", :locals => {:rows => rows} | ||
34 | + end | ||
35 | + | ||
36 | + | ||
37 | +private | ||
38 | + | ||
39 | + | ||
40 | + def total_from_tallies(tallies) | ||
41 | + tallies.values.inject(0) {|sum, n| sum + n} | ||
42 | + end | ||
43 | + | ||
44 | + | ||
5 | end | 45 | end |
app/views/notices/_summary.html.haml
@@ -15,4 +15,7 @@ | @@ -15,4 +15,7 @@ | ||
15 | %td= notice.created_at.to_s(:micro) | 15 | %td= notice.created_at.to_s(:micro) |
16 | %tr | 16 | %tr |
17 | %th Similar | 17 | %th Similar |
18 | - %td= notice.err.notices.count - 1 | ||
19 | \ No newline at end of file | 18 | \ No newline at end of file |
19 | + %td= notice.err.notices.count - 1 | ||
20 | + %tr | ||
21 | + %th Browser | ||
22 | + %td= user_agent_graph(notice.err) | ||
20 | \ No newline at end of file | 23 | \ No newline at end of file |
public/stylesheets/application.css
@@ -562,7 +562,7 @@ table.errs td.app .environment { | @@ -562,7 +562,7 @@ table.errs td.app .environment { | ||
562 | table.errs td.message a { | 562 | table.errs td.message a { |
563 | width: 420px; | 563 | width: 420px; |
564 | display: block; | 564 | display: block; |
565 | - word-wrap: break-word; | 565 | + word-wrap: break-word; |
566 | } | 566 | } |
567 | table.errs td.message em { | 567 | table.errs td.message em { |
568 | color: #727272; | 568 | color: #727272; |
@@ -574,6 +574,27 @@ table.errs tr.resolved td > * { | @@ -574,6 +574,27 @@ table.errs tr.resolved td > * { | ||
574 | -webkit-opacity: 0.5; | 574 | -webkit-opacity: 0.5; |
575 | } | 575 | } |
576 | 576 | ||
577 | +/* Tally tables */ | ||
578 | +table.tally { | ||
579 | + border:none; | ||
580 | +} | ||
581 | +table.tally td, | ||
582 | +table.tally th { | ||
583 | + border:none !important; | ||
584 | + background:none !important; | ||
585 | + padding:8px 0 0; | ||
586 | +} | ||
587 | +table.tally tbody tr:first-child td, | ||
588 | +table.tally tbody tr:first-child th { | ||
589 | + padding-top:0; | ||
590 | +} | ||
591 | +table.tally td.percent { | ||
592 | + width:4.5em; | ||
593 | +} | ||
594 | +table.tally th.value { | ||
595 | + text-transform:none; | ||
596 | +} | ||
597 | + | ||
577 | /* Resolve Errs */ | 598 | /* Resolve Errs */ |
578 | #action-bar a.resolve { | 599 | #action-bar a.resolve { |
579 | background: transparent url(images/icons/thumbs-up.png) 6px 5px no-repeat; | 600 | background: transparent url(images/icons/thumbs-up.png) 6px 5px no-repeat; |