rail_stat_generator 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/templates/app/controllers/rail_stat_controller.rb +126 -111
- data/templates/app/helpers/rail_stat_helper.rb +13 -14
- data/templates/app/models/iptoc.rb +3 -1
- data/templates/app/models/rail_stat.rb +256 -130
- data/templates/app/models/search_term.rb +6 -4
- data/templates/app/views/rail_stat/hits.rhtml +30 -19
- data/templates/app/views/rail_stat/lang.rhtml +24 -12
- data/templates/app/views/rail_stat/other.rhtml +49 -24
- data/templates/app/views/rail_stat/path.rhtml +13 -15
- data/templates/app/views/rail_stat/platform.rhtml +26 -10
- data/templates/app/views/rail_stat/refs.rhtml +21 -9
- data/templates/db/railstat.mysql.sql +44 -43
- data/templates/db/railstat.pgsql.sql +47 -46
- data/templates/lib/path_tracker.rb +6 -3
- metadata +3 -2
@@ -16,29 +16,28 @@
|
|
16
16
|
<%% if @paths.size > 0 %>
|
17
17
|
<table class="list" width='100%'>
|
18
18
|
<tr>
|
19
|
-
<th>
|
19
|
+
<th>Timestamp</th>
|
20
20
|
<th>Path</th>
|
21
21
|
<th>Addr.</th>
|
22
22
|
<th>Browser</th>
|
23
23
|
<th>Platform</th>
|
24
24
|
</tr>
|
25
|
-
<%%
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
<td width='60px'><div class='cutField'><%%=get_time(row.dt)%></div></td>
|
25
|
+
<%% for i in 0..@paths.size-1
|
26
|
+
row = @paths[i]
|
27
|
+
if not(row.marked?)
|
28
|
+
row.mark
|
29
|
+
domain, refferer = "-", '' -%>
|
30
|
+
<tr class='<%%= alternator %>'>
|
31
|
+
<td width='60px'><div class='cutField'><%%=get_time(row.created_at)%></div></td>
|
33
32
|
<td width='200px'><div class='cutField'>
|
34
|
-
<%% last_access_time = row.
|
33
|
+
<%% last_access_time = row.created_at
|
35
34
|
# work through loop backwards so we get the *first* page time wise
|
36
35
|
(@paths.size-1).downto(i+1) { |j|
|
37
|
-
if not(@paths[j].marked?) and row.remote_ip == @paths[j].remote_ip and (last_access_time - 900 <= @paths[j].
|
36
|
+
if not(@paths[j].marked?) and row.remote_ip == @paths[j].remote_ip and (last_access_time - 900 <= @paths[j].created_at)
|
38
37
|
domain, refferer = @paths[j].domain, @paths[j].referer if domain == "-" and @paths[j].domain and not(@paths[j].domain == SITE_NAME)%>
|
39
38
|
<%%=get_path_image(@paths[j].resource, @ordered_resources)%>
|
40
39
|
<%% @paths[j].mark
|
41
|
-
last_access_time = @paths[j].
|
40
|
+
last_access_time = @paths[j].created_at
|
42
41
|
end
|
43
42
|
}
|
44
43
|
# add last page %>
|
@@ -67,9 +66,8 @@
|
|
67
66
|
<%% if @orarr.size > 0 %>
|
68
67
|
<table class="list">
|
69
68
|
<tr><th colspan="2">Resource</th><th>Hits statistics</th></tr>
|
70
|
-
|
71
|
-
|
72
|
-
<tr class="<%%=popListClass%>">
|
69
|
+
<%% for resource in @orarr -%>
|
70
|
+
<tr class="<%%= alternator %>">
|
73
71
|
<td><%%=get_path_image(resource['resource'], @ordered_resources)%></td>
|
74
72
|
<td><a href='<%%=resource['resource']%>'><%%=h resource['resource'] %></a></td>
|
75
73
|
<td><%%=resource['requests']%></td></tr>
|
@@ -3,22 +3,38 @@
|
|
3
3
|
<h2>Operating systems</h2>
|
4
4
|
<div id="path_stats_pl">
|
5
5
|
<table class="list">
|
6
|
-
<tr
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
<tr>
|
7
|
+
<th>OS</th>
|
8
|
+
<th>Percentage</th>
|
9
|
+
<th>Hit Count</th>
|
10
|
+
</tr>
|
11
|
+
<%% for platform in @platforms %>
|
12
|
+
<tr class='<%%= alternator %>'>
|
13
|
+
<td><%%= platform.platform %></td>
|
14
|
+
<td><%%= sprintf("%000.2f", (platform.total.to_f/@total_hits)*100) %>%</td>
|
15
|
+
<td><%%= platform.total %></td>
|
16
|
+
</tr>
|
17
|
+
<%% end %>
|
11
18
|
</table>
|
12
19
|
</div>
|
13
20
|
|
14
21
|
<h2>Browsers usage</h2>
|
15
22
|
<div id="path_stats_br">
|
16
23
|
<table class="list">
|
17
|
-
<tr
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
24
|
+
<tr>
|
25
|
+
<th>Browser</th>
|
26
|
+
<th>Version</th>
|
27
|
+
<th>Percentage</th>
|
28
|
+
<th>Hit Count</th>
|
29
|
+
</tr>
|
30
|
+
<%% for browser in @browsers %>
|
31
|
+
<tr class='<%%= alternator %>'>
|
32
|
+
<td><%%= browser.browser %></td>
|
33
|
+
<td><%%= browser.version %></td>
|
34
|
+
<td><%%= sprintf("%000.2f",(browser.total.to_f/@total_hits)*100) %>%</td>
|
35
|
+
<td><%%= browser.total %></td>
|
36
|
+
</tr>
|
37
|
+
<%% end %>
|
22
38
|
</table>
|
23
39
|
</div>
|
24
40
|
</div>
|
@@ -3,10 +3,17 @@
|
|
3
3
|
<h2>Repeat referrers</h2>
|
4
4
|
<div id="path_stats_refsd">
|
5
5
|
<table class="list">
|
6
|
-
<tr
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
<tr>
|
7
|
+
<th>Domains</th>
|
8
|
+
<th>Referred to Resource</th>
|
9
|
+
<th>Hits</th>
|
10
|
+
</tr>
|
11
|
+
<%% for row in @refs %>
|
12
|
+
<tr class="<%%= alternator %>">
|
13
|
+
<td><a href='<%%= row['referer'] %>' title='<%%= row['resource'] %>'><%%=row['domain']%></a></td>
|
14
|
+
<td><%%= row['resource'] %></td>
|
15
|
+
<td><%%= row['total'] %></td>
|
16
|
+
</tr>
|
10
17
|
<%% end %>
|
11
18
|
</table>
|
12
19
|
</div>
|
@@ -14,11 +21,16 @@
|
|
14
21
|
<h2>Search strings</h2>
|
15
22
|
<div id="path_stats_refst">
|
16
23
|
<table class="list">
|
17
|
-
<tr
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
24
|
+
<tr>
|
25
|
+
<th>Search strings</th>
|
26
|
+
<th>Hits</th>
|
27
|
+
</tr>
|
28
|
+
<%% for row in @searchterms %>
|
29
|
+
<tr class="<%%= alternator %>">
|
30
|
+
<td><%%=h row['searchterms'] %></td>
|
31
|
+
<td><%%= row['count'] %></td>
|
32
|
+
</tr>
|
33
|
+
<%% end %>
|
22
34
|
</table>
|
23
35
|
</div>
|
24
36
|
</div>
|
@@ -1,43 +1,44 @@
|
|
1
|
-
CREATE TABLE rail_stats (
|
2
|
-
id int(11) unsigned NOT NULL auto_increment,
|
3
|
-
remote_ip varchar(15) default '',
|
4
|
-
country varchar(50) default '',
|
5
|
-
language VARCHAR(5) default '',
|
6
|
-
domain varchar(250) default '',
|
7
|
-
subdomain varchar(250) default '',
|
8
|
-
referer varchar(255) default '',
|
9
|
-
resource varchar(255) default '',
|
10
|
-
user_agent varchar(255) default '',
|
11
|
-
platform varchar(50) default '',
|
12
|
-
browser varchar(50) default '',
|
13
|
-
version varchar(15) default '',
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
)
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
)
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
)
|
1
|
+
CREATE TABLE rail_stats (
|
2
|
+
id int(11) unsigned NOT NULL auto_increment,
|
3
|
+
remote_ip varchar(15) default '',
|
4
|
+
country varchar(50) default '',
|
5
|
+
language VARCHAR(5) default '',
|
6
|
+
domain varchar(250) default '',
|
7
|
+
subdomain varchar(250) default '',
|
8
|
+
referer varchar(255) default '',
|
9
|
+
resource varchar(255) default '',
|
10
|
+
user_agent varchar(255) default '',
|
11
|
+
platform varchar(50) default '',
|
12
|
+
browser varchar(50) default '',
|
13
|
+
version varchar(15) default '',
|
14
|
+
created_at datetime,
|
15
|
+
created_on date,
|
16
|
+
screen_size varchar(10) default null,
|
17
|
+
colors varchar(10) default null,
|
18
|
+
java varchar(10) default null,
|
19
|
+
java_enabled varchar(10) default null,
|
20
|
+
flash varchar(10) default null,
|
21
|
+
UNIQUE KEY id (id),
|
22
|
+
INDEX(subdomain)
|
23
|
+
) TYPE=MyISAM;
|
24
|
+
|
25
|
+
CREATE TABLE search_terms (
|
26
|
+
id int(11) unsigned NOT NULL auto_increment,
|
27
|
+
subdomain varchar(250) default '',
|
28
|
+
searchterms varchar(255) NOT NULL default '',
|
29
|
+
count int(10) unsigned NOT NULL default '0',
|
30
|
+
domain varchar(250),
|
31
|
+
PRIMARY KEY (id),
|
32
|
+
INDEX(subdomain)
|
33
|
+
) TYPE=MyISAM;
|
34
|
+
|
35
|
+
CREATE TABLE iptocs (
|
36
|
+
id int(11) unsigned NOT NULL auto_increment,
|
37
|
+
ip_from int(10) unsigned zerofill not null,
|
38
|
+
ip_to int(10) unsigned zerofill not null,
|
39
|
+
country_code2 char(2) not null,
|
40
|
+
country_code3 char(3) not null,
|
41
|
+
country_name varchar(50) not null,
|
42
|
+
PRIMARY KEY (id),
|
43
|
+
unique index(ip_from, ip_to)
|
44
|
+
);
|
@@ -1,47 +1,48 @@
|
|
1
|
-
DROP TABLE rail_stats, search_terms, iptocs CASCADE;
|
2
|
-
CREATE TABLE rail_stats (
|
3
|
-
id SERIAL,
|
4
|
-
remote_ip VARCHAR(15) default '',
|
5
|
-
country VARCHAR(50) default '',
|
6
|
-
language VARCHAR(5) default '',
|
7
|
-
domain VARCHAR(250) default '',
|
8
|
-
subdomain VARCHAR(250) default '',
|
9
|
-
referer VARCHAR(255) default '',
|
10
|
-
resource VARCHAR(255) default '',
|
11
|
-
user_agent VARCHAR(255) default '',
|
12
|
-
platform VARCHAR(50) default '',
|
13
|
-
browser VARCHAR(50) default '',
|
14
|
-
version VARCHAR(15) default '',
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
)
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
)
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
)
|
1
|
+
DROP TABLE rail_stats, search_terms, iptocs CASCADE;
|
2
|
+
CREATE TABLE rail_stats (
|
3
|
+
id SERIAL,
|
4
|
+
remote_ip VARCHAR(15) default '',
|
5
|
+
country VARCHAR(50) default '',
|
6
|
+
language VARCHAR(5) default '',
|
7
|
+
domain VARCHAR(250) default '',
|
8
|
+
subdomain VARCHAR(250) default '',
|
9
|
+
referer VARCHAR(255) default '',
|
10
|
+
resource VARCHAR(255) default '',
|
11
|
+
user_agent VARCHAR(255) default '',
|
12
|
+
platform VARCHAR(50) default '',
|
13
|
+
browser VARCHAR(50) default '',
|
14
|
+
version VARCHAR(15) default '',
|
15
|
+
created_at TIMESTAMP,
|
16
|
+
created_on DATE,
|
17
|
+
screen_size VARCHAR(10) default null,
|
18
|
+
colors VARCHAR(10) default null,
|
19
|
+
java VARCHAR(10) default null,
|
20
|
+
java_enabled VARCHAR(10) default null,
|
21
|
+
flash VARCHAR(10) default null,
|
22
|
+
|
23
|
+
CONSTRAINT pk_rail_stats_id PRIMARY KEY(id)
|
24
|
+
);
|
25
|
+
CREATE UNIQUE INDEX rail_stats_subdomain_idx ON rail_stats(subdomain);
|
26
|
+
|
27
|
+
CREATE TABLE search_terms (
|
28
|
+
id SERIAL,
|
29
|
+
subdomain VARCHAR(250) default '',
|
30
|
+
searchterms VARCHAR(255) NOT NULL default '',
|
31
|
+
count INT4 NOT NULL default '0',
|
32
|
+
domain VARCHAR(250),
|
33
|
+
|
34
|
+
CONSTRAINT pk_search_terms_id PRIMARY KEY(id)
|
35
|
+
);
|
36
|
+
CREATE UNIQUE INDEX search_terms_subdomain_idx ON search_terms(subdomain);
|
37
|
+
|
38
|
+
CREATE TABLE iptocs (
|
39
|
+
id SERIAL,
|
40
|
+
ip_from INT8 NOT NULL default '0',
|
41
|
+
ip_to INT8 NOT NULL default '0',
|
42
|
+
country_code2 CHAR(2) NOT NULL,
|
43
|
+
country_code3 CHAR(3) NOT NULL,
|
44
|
+
country_name VARCHAR(50) NOT NULL,
|
45
|
+
|
46
|
+
CONSTRAINT pk_iptocs_id PRIMARY KEY(id)
|
47
|
+
);
|
47
48
|
CREATE UNIQUE INDEX iptocs_ip_from_ip_to_idx ON iptocs(ip_from, ip_to);
|
@@ -27,10 +27,14 @@ module PathTracker
|
|
27
27
|
|
28
28
|
sniff_keywords(domain, subdomain, referer);
|
29
29
|
|
30
|
-
|
30
|
+
if @request.env['REMOTE_ADDR'] == "127.0.0.1"
|
31
|
+
client_country = "localhost"
|
32
|
+
else
|
33
|
+
client_country = Iptoc.find_by_ip_address(@request.env['REMOTE_ADDR'])
|
34
|
+
end
|
31
35
|
|
32
36
|
RailStat.create("remote_ip" => env['REMOTE_ADDR'],
|
33
|
-
"country" =>
|
37
|
+
"country" => client_country,
|
34
38
|
"language" => determine_lang(env['HTTP_ACCEPT_LANGUAGE']),
|
35
39
|
"domain" => domain,
|
36
40
|
"subdomain" => subdomain,
|
@@ -40,7 +44,6 @@ module PathTracker
|
|
40
44
|
"platform" => br['platform'],
|
41
45
|
"browser" => br['browser'],
|
42
46
|
"version" => br['version'],
|
43
|
-
"dt" => Time.now,
|
44
47
|
"screen_size" => size,
|
45
48
|
"colors" => colors,
|
46
49
|
"java" => java,
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.10
|
|
3
3
|
specification_version: 1
|
4
4
|
name: rail_stat_generator
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.1.
|
7
|
-
date: 2005-08-
|
6
|
+
version: 0.1.3
|
7
|
+
date: 2005-08-24
|
8
8
|
summary: RailStat is a real-time web site statistics package which uses Ruby on Rails web application framework.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -30,6 +30,7 @@ platform: ruby
|
|
30
30
|
authors:
|
31
31
|
- Luben Manolov
|
32
32
|
- Nick Penkov
|
33
|
+
- Jeff Casimir
|
33
34
|
files:
|
34
35
|
- templates/db
|
35
36
|
- templates/app
|