Postgresql 世卫组织';有什么跟踪现场访问
我正在写一个与sinatra和heroku的网站,我想找到一种方法来跟踪每次访问我的网站。我看过实际的分析程序(例如),并选择不使用它们,因为我想自己学习如何使用它们 我对访问的定义: 当某人或某物(机器人)访问您的站点时,就会发生访问。它由一个或多个页面视图/点击组成。一个访问者可以多次访问您的站点 资料来源: 对于每次访问,我希望跟踪:Postgresql 世卫组织';有什么跟踪现场访问,postgresql,activerecord,logging,sinatra,Postgresql,Activerecord,Logging,Sinatra,我正在写一个与sinatra和heroku的网站,我想找到一种方法来跟踪每次访问我的网站。我看过实际的分析程序(例如),并选择不使用它们,因为我想自己学习如何使用它们 我对访问的定义: 当某人或某物(机器人)访问您的站点时,就会发生访问。它由一个或多个页面视图/点击组成。一个访问者可以多次访问您的站点 资料来源: 对于每次访问,我希望跟踪: 访客IP地址 访问开始时间(页面已打开) 访问结束时间(页面已关闭) 这个网站不经常浏览,所以我想把每次访问记录在一个使用activerecord访问的po
ip
,mac\u地址
,时间
,查看id
登录访问
PageView
time
和view\u id
被登录Visit
- 访问次数(表)
- ip(列、字符串)
- mac_地址(列、字符串)
- 视图id(列,int)
- 时间(列、日期时间)
- 浏览量(表格)
- 页面(列、字符串)
- 时间(列、日期时间)
- 视图id(列,int)
class Main < ActiveRecord::Migration
def change
create_table :visits do |item|
item.string :ip
item.string :mac_address
item.datetime :time
item.int :visit_id
end
create_table :pageviews do |item|
item.int :visit_id
item.string :page
item.datetime :time
end
end
classmain
对于每次访问,我希望跟踪:
,则可以轻松捕获#1和#2。有一些您想要的,您需要时间,并确保它是该ip的唯一用户:
before do
# this is pseudo code, Sequel style, you can work this bit out
# for ActiveRecord
user =
if user_id = session[:user]
User[user_id]
else
User.create
end
# you may want to check if there's an existing session for this page
# as refreshes would run this again. It's up to you.
user.add_visit Visit.create(page: request.path,ip: request.ip, start: Time.now.rfc2822])
session[:analytics] = visit.id
session[:user] = user.session_id # *don't* just bung the
# user id in there
end
您需要一个路由来记录结束时间
patch "/analytics", :provides => :json do
visit_id = session[:analytics]
user = User[ :session_id => session[:user] ]
visit = user.visits.find(:id => visit_id)
visit.end = Rack::Utils.rfc2822(params[:end])
visit.save
halt 204 # take your pick of success numbers
# you should also check for errors
# and check the input is valid
# and you may want to return some JSON to the
# calling javascript.
# Also think about how to restrict access to this
# route to only authorised callers. Since you're providing the
# javascript, you can place variables in them by generating
# parts on the fly and serving it via a Sinatra route etc.
end
我不打算编写javascript,这应该很简单
注意,我基本上把这个代码从我的背面拉出来,所以考虑任何或者所有的代码都可能会损坏,而且是摇晃的,但是这就是你的想法。正如我上面提到的,我可能会删掉大部分内容,使用日志和一些明智的正则表达式。我认为,未经他的许可,您将无法获得任何客户端mac添加。扩展上述内容:mac地址是l(仅限),您无法在路由Internet上看到它。因此,我可以从客户端请求它吗?或者我应该从问题中删除它?你可以用javascript获取客户端的MAC地址,如果他们运行Windows并允许你安装ActiveX控件,请检查这个@authprivate谢谢,我已经将它添加到问题中。