source: subversion/sites/rails_port/script/statistics @ 7415

Last change on this file since 7415 was 6278, checked in by tomhughes, 12 years ago

Stop trying to report on the number of ways with tags because (a) almost all
ways have tags so it isn't very interesting and (b) it locks up the API every
night as it involved a join to a MyISAM table.

  • Property svn:executable set to *
File size: 3.9 KB
Line 
1#!/usr/bin/env ruby
2
3require File.dirname(__FILE__) + '/../config/environment'
4require 'generator'
5
6start_time = Time.now
7
8puts "<html>"
9puts "<head>"
10puts "<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />"
11puts "<title>OpenStreetMap Statistics</title>"
12puts "<style>th { text-align: left }</style>"
13puts "</head>"
14puts "<body>"
15puts "<h2>OpenStreetMap stats report run at #{start_time.to_s}</h2>"
16
17begin
18  user_count = User.count(:conditions => "active = true")
19  tracepoint_count = Tracepoint.count()
20  node_count = Node.count(:conditions => "visible = true")
21  way_count = Way.count(:conditions => "visible = true")
22  relation_count = Relation.count(:conditions => "visible = true")
23
24  puts "<table>"
25  puts "<tr><td>Number of users</td><td>#{user_count}</td></tr>"
26  puts "<tr><td>Number of uploaded GPS points</td><td>#{tracepoint_count}</td></tr>"
27  puts "<tr><td>Number of nodes</td><td>#{node_count}</td></tr>"
28  puts "<tr><td>Number of ways</td><td>#{way_count}</td></tr>"
29  puts "<tr><td>Number of relations</td><td>#{relation_count}</td></tr>"
30  puts "</table>"
31
32  puts "<h2>Top 50 users for uploads of GPS data</h2>"
33  puts "<table>"
34  puts "<tr><th>User</th><th>Number of Points</th></tr>"
35
36  Trace.sum(:size, :group => :user_id, :order => "sum_size DESC", :limit => 50).each do |user, count|
37    display_name = User.find(user).display_name.gsub('@', ' at ').gsub('.', ' dot ')
38    puts "<tr><td>#{display_name}</td><td>#{count}</td></tr>"
39  end
40
41  puts "</table>"
42
43  puts "<h2>Number of users editing over the past...</h2>"
44  puts "<table>"
45  puts "<tr><th>Data Type</th><th>Day</th><th>Week</th><th>Month</th></tr>"
46
47  day_count = Trace.count(:user_id, :distinct => true, 
48                          :conditions => "timestamp > NOW() - INTERVAL 1 DAY")
49  week_count = Trace.count(:user_id, :distinct => true, 
50                           :conditions => "timestamp > NOW() - INTERVAL 7 DAY")
51  month_count = Trace.count(:user_id, :distinct => true, 
52                            :conditions => "timestamp > NOW() - INTERVAL 28 DAY")
53
54  puts "<tr><th>GPX Files</th><td>#{day_count}</td><td>#{week_count}</td><td>#{month_count}</td></tr>"
55
56  day_count = OldNode.count(:user_id, :distinct => true, 
57                            :conditions => "timestamp > NOW() - INTERVAL 1 DAY")
58  week_count = OldNode.count(:user_id, :distinct => true, 
59                             :conditions => "timestamp > NOW() - INTERVAL 7 DAY")
60  month_count = OldNode.count(:user_id, :distinct => true, 
61                              :conditions => "timestamp > NOW() - INTERVAL 28 DAY")
62
63  puts "<tr><th>Nodes</th><td>#{day_count}</td><td>#{week_count}</td><td>#{month_count}</td></tr>"
64
65  puts "</table>"
66 
67  puts "<h2>Top users editing over the past...</h2>"
68  puts "<table>"
69  puts "<tr><th>Day</th><th>Week</th><th>Month</th></tr>"
70
71  day_users = OldNode.count(:conditions => "timestamp > NOW() - INTERVAL 1 DAY",
72                            :group => :user_id, :order => "count_all DESC")
73  week_users = OldNode.count(:conditions => "timestamp > NOW() - INTERVAL 7 DAY",
74                             :group => :user_id, :order => "count_all DESC", :limit => 60)
75  month_users = OldNode.count(:conditions => "timestamp > NOW() - INTERVAL 28 DAY",
76                              :group => :user_id, :order => "count_all DESC", :limit => 60)
77
78  SyncEnumerator.new(day_users, week_users, month_users).each do |row|
79    puts "<tr>"
80    row.each do |column|
81      if column.nil?
82        puts "<td></td>"
83      else
84        display_name = User.find(column[0]).display_name.gsub('@', ' at ').gsub('.', ' dot ')
85        count = column[1]
86        puts "<td>#{count} #{display_name}</td>"
87      end
88    end
89    puts "</tr>"
90  end
91
92  puts "</table>"
93rescue Exception => e
94  puts "<p><em>Exception: #{e.to_s}</em><br />#{e.backtrace.join('<br />')}</p>"
95end
96
97puts "<p>Report took #{(Time.new - start_time).to_s} seconds to run</p>"
98puts "</body>"
99puts "</html>"
Note: See TracBrowser for help on using the repository browser.