diff --git a/trustie2/app/controllers/relative_memos_controller.rb b/trustie2/app/controllers/relative_memos_controller.rb index 8a059dd..f569474 100644 --- a/trustie2/app/controllers/relative_memos_controller.rb +++ b/trustie2/app/controllers/relative_memos_controller.rb @@ -175,11 +175,11 @@ class RelativeMemosController < ApplicationController #order_by(:created_time, :desc) #with(:created_time, Date.new(year,01,01)..Date.new(year+1,01,01)) - any_of do - # with :parent_id, 0 - # with :parent_id, nil - with :source, params[:name].downcase - end + # any_of do + # # with :parent_id, 0 + # # with :parent_id, nil + # with :source, params[:name].downcase + # end paginate :page => params[:page], :per_page => per_page_option end @topics = search.results diff --git a/trustie2/app/controllers/user_traces_controller.rb b/trustie2/app/controllers/user_traces_controller.rb index febfe3c..8eaa38b 100644 --- a/trustie2/app/controllers/user_traces_controller.rb +++ b/trustie2/app/controllers/user_traces_controller.rb @@ -7,7 +7,7 @@ class UserTracesController < ApplicationController keyword = params[:keyword] logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["keyword" => keyword] - writeLog(logger_search,type,session_id,ip,host,time,parameter) + writeDatabase(logger_search,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -18,7 +18,7 @@ class UserTracesController < ApplicationController keyword = params[:keyword] logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["keyword" => keyword] - writeLog(logger_search,type,session_id,ip,host,time,parameter) + writeDatabase(logger_search,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -32,7 +32,7 @@ class UserTracesController < ApplicationController keyword = params[:keyword] logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["keyword" => keyword, "page" => page, "rank" => rank, "osp_id" => id] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -45,7 +45,7 @@ class UserTracesController < ApplicationController id = params[:id] logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["page" => page, "rank" => rank, "osp_id" => id] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -56,8 +56,7 @@ class UserTracesController < ApplicationController osp_id = params[:osp_id] logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["osp_id" => osp_id] - session_id = request.session_options[:id] #由于onclick事件在前段js页面 因此无法获取session_id - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -71,7 +70,7 @@ class UserTracesController < ApplicationController osp_id = params[:osp_id] logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["osp_id" => osp_id, "source" => source, "url" => url, "rank" => rank] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -84,7 +83,7 @@ class UserTracesController < ApplicationController rank = params[:rank] logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["osp_id_former" => osp_id_former,"rank" => rank, "osp_id_similar" => osp_id_similar] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -111,7 +110,7 @@ class UserTracesController < ApplicationController logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["osp_id_former" => osp_id_former,"rank" => rank, "osp_id_similar" => osp_id_similar] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -138,7 +137,7 @@ class UserTracesController < ApplicationController logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["osp_id_former" => osp_id_former,"rank" => rank, "osp_id_similar" => osp_id_similar] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -151,7 +150,7 @@ class UserTracesController < ApplicationController rank = params[:rank] logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["osp_id_former" => osp_id_former,"rank" => rank, "osp_id_related" => osp_id_related] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -161,7 +160,7 @@ class UserTracesController < ApplicationController type = "click_project_list" logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash.new - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -171,7 +170,7 @@ class UserTracesController < ApplicationController type = "click_more_tags" logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["osp_id" => params[:osp_id]] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -181,7 +180,7 @@ class UserTracesController < ApplicationController type = "click_tag" #还可能是帖子的标签 logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["osp_id" => params[:osp_id], "rank" => params[:rank], "tag_name" => params[:tag_name]] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -191,7 +190,7 @@ class UserTracesController < ApplicationController type = "click_knowledge_after_search" logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["keyword" => params[:keyword], "sort" => params[:sort], "page" => params[:page], "rank" => params[:rank], "knowledge_id" => params[:id]] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -200,8 +199,8 @@ class UserTracesController < ApplicationController def click_knowledge_in_project_detail type = "click_knowledge_in_project_detail" logger_search,logger_click,session_id,ip,host,time = generateHead - parameter = Hash["osp_id" => params[:osp_id], "memo_type" => params[:memo_type], "page" => params[:page], "rank" => params[:rank], "knowledge_id" => params[:memo_id]] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + parameter = Hash["osp_id" => params[:osp_id], "memo_type" => params[:memo_type], "page" => params[:page], "rank" => params[:rank], "knowledge_id" => params[:memo_id], "href" => params[:href]] + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -211,7 +210,7 @@ class UserTracesController < ApplicationController type = "click_more_knowledge_in_project_detail" logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["osp_id" => params[:osp_id], "memo_type" => params[:type]] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -221,7 +220,7 @@ class UserTracesController < ApplicationController type = "click_knowledge_in_project_detail_after_click_more" logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["osp_id" => params[:osp_id], "memo_type" => params[:memo_type], "page" => params[:page], "rank" => params[:rank], "knowledge_id" => params[:memo_id], "sort_by" => params[:sort]] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -235,7 +234,7 @@ class UserTracesController < ApplicationController keyword = 'nil' end parameter = Hash["keyword" => keyword, "page" => params[:page], "rank" => params[:rank], "osp_id" => params[:osp_id]] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -245,7 +244,7 @@ class UserTracesController < ApplicationController type = "click_project_img_after_search" logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["keyword" => params[:keyword], "page" => params[:page], "rank" => params[:rank], "osp_id" => params[:osp_id]] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -255,27 +254,75 @@ class UserTracesController < ApplicationController type = "click_project_img_in_project_list" logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["page" => params[:page], "rank" => params[:rank], "osp_id" => params[:osp_id]] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end end + # 定义函数 将trustie_user_id存储到session中 + def add_trustie_user_id + # 获取参数 + trustie_user_id = params[:trustie_user_id] + if trustie_user_id != nil + # 判断长度是否合乎规范 + if trustie_user_id.length <= 11 + # 表示可能是int型数据 + # 看一下id是否符合规范 是否是真正跳转过来的 + pattern = /\D+/ # 表示字符串中有非数字的字符 + index = (trustie_user_id =~ pattern) + if index == nil + # 表示合法的trustie_user_id + session[:trustie_user_id] = trustie_user_id.to_i + else + session[:trustie_user_id] = nil # 表示trustie_user_id中有除了数字之外的字符 + end + else + session[:trustie_user_id] = nil # 表示长度不合法 + end + else + session[:trustie_user_id] = nil # 表示为空 + end + respond_to do |format| + format.json {render :json => {}} + end + end + + + # 定义函数捕获用户点击link的操作 + def click_link + # url = request.original_url + # url = URI.unescape(url) # 获取url跳转的url地址lick_link" # 表示点击了a链接 + href = params[:href]# 获取href参数 + logger_search,logger_click,session_id,ip,host,time = generateHead + parameter = Hash["url" => href] + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) + respond_to do |format| + format.json {render :json => {}} + end + end + private def generateHead - #创建一个新的日志 - filename = File.join(Rails.root, 'log', 'user_trace_search.log') - logger_search = Logger.new(filename) + # #创建一个新的日志 + # filename = File.join(Rails.root, 'log', 'user_trace_search.log') + # logger_search = Logger.new(filename) +# + # #创建用户click的日志 + # filename = File.join(Rails.root, 'log', 'user_trace_click.log') + # logger_click = Logger.new(filename) - #创建用户click的日志 - filename = File.join(Rails.root, 'log', 'user_trace_click.log') - logger_click = Logger.new(filename) - - session_id = request.session_options[:id] + logger_search = nil + logger_click = nil + session_id = params[:session_id] if session_id == nil - session_id = params[:session_id] + session[:session_id] + session_id = request.session_options[:id] end + # if session_id == nil + # session_id = params[:session_id] + # end # ip = request.remote_ip ip = Socket.ip_address_list.detect(&:ipv4_private?).try(:ip_address) @@ -308,6 +355,34 @@ class UserTracesController < ApplicationController end end + # 张迅晖 将用户行为监控存储到数据库中 + def writeDatabase(logger,type,session_id,ip,host,time,parameter) # logger为了和writeLog保持一致的参数 在该函数中没有实际作用 + # puts "~~~~session_id" + if type != nil && session_id != nil && ip != nil && host != nil && session_id != 'null' && session_id != "" + # 读取session中trustie_user_id + trustie_user_id = session[:trustie_user_id] + # 判断trustie_user_id是否为nil 如果为nil表示不是trustie跳转过来的用户 如果不是nil表示是trustie链接跳转过来的用户 + params = "" # 用于存储参数 + keys_in_parameter = parameter.keys + keys_in_parameter.each do |k| + value = parameter[k] + params = params + "[" + k + "=>" + value.to_s + "]" + end + params = params.strip # 获取到了存储的参数 + + # 将结果存储到数据库中 + userAction = UserAction.new + userAction.trustie_user_id = trustie_user_id + userAction.session_id = session_id + userAction.type = type + userAction.ip = ip + userAction.host = host + userAction.time = time + userAction.params = params + userAction.save + end + end + def getCurrentTime time = Time.new.localtime year = time.year.to_s diff --git a/trustie2/app/models/hot_word.rb b/trustie2/app/models/hot_word.rb index 27acd23..504e056 100644 --- a/trustie2/app/models/hot_word.rb +++ b/trustie2/app/models/hot_word.rb @@ -1,4 +1,4 @@ class HotWord < ActiveRecord::Base attr_accessible :name, :osp_id, :weight belongs_to :open_source_project, :foreign_key => "osp_id" -end +end \ No newline at end of file diff --git a/trustie2/app/models/relative_memo.rb b/trustie2/app/models/relative_memo.rb index dccad41..c693c26 100644 --- a/trustie2/app/models/relative_memo.rb +++ b/trustie2/app/models/relative_memo.rb @@ -38,19 +38,19 @@ class RelativeMemo < ActiveRecord::Base acts_as_attachable #solr search - # searchable do - # text :title, :stored => false - # integer :review_num - # #integer :parent_id - # time :created_time - # text :tags - # string :source, :stored => false - # #integer :view_num - # #integer :view_num_ossean - # #integer :collection_num - # #join(:osp_id, :target => RelativeMemoToOpenSourceProject, :type => :integer, :join => { :from => :relative_memo_id, :to => :id }, :as => 'osp_id') - # #join(:relative_memo_id, :target => RelativeMemoToOpenSourceProject, :type => :integer, :join => { :from => :relative_memo_id, :to => :id }, :as => 'relative_memo_id') - # end + searchable do + text :title, :stored => false + integer :review_num + #integer :parent_id + time :created_time + text :tags + string :source, :stored => false + #integer :view_num + #integer :view_num_ossean + #integer :collection_num + #join(:osp_id, :target => RelativeMemoToOpenSourceProject, :type => :integer, :join => { :from => :relative_memo_id, :to => :id }, :as => 'osp_id') + #join(:relative_memo_id, :target => RelativeMemoToOpenSourceProject, :type => :integer, :join => { :from => :relative_memo_id, :to => :id }, :as => 'relative_memo_id') + end belongs_to :last_reply, :class_name => 'RelativeMemo', :foreign_key => 'last_reply_id' # acts_as_searchable :column => ['title', 'content'], diff --git a/trustie2/app/models/user_action.rb b/trustie2/app/models/user_action.rb new file mode 100644 index 0000000..d836023 --- /dev/null +++ b/trustie2/app/models/user_action.rb @@ -0,0 +1,3 @@ +class UserAction < ActiveRecord::Base + attr_accessible :id, :trustie_user_id, :session_id, :type, :ip, :host, :time, :params +end diff --git a/trustie2/app/views/layouts/_base_welcome_header.html.erb b/trustie2/app/views/layouts/_base_welcome_header.html.erb index 83637d4..e8f3c5a 100644 --- a/trustie2/app/views/layouts/_base_welcome_header.html.erb +++ b/trustie2/app/views/layouts/_base_welcome_header.html.erb @@ -93,6 +93,22 @@
+ + + + + - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/trustie2/app/views/layouts/base_opensource_p.html.erb b/trustie2/app/views/layouts/base_opensource_p.html.erb index 4b77e53..5b45bdd 100644 --- a/trustie2/app/views/layouts/base_opensource_p.html.erb +++ b/trustie2/app/views/layouts/base_opensource_p.html.erb @@ -125,7 +125,9 @@ function user_trace_click_project_source_in_detail(source,url,rank,session_id){ //解析url获取osp_id url_now = document.URL; - id = url_now.substring(47); + str = "open_source_projects/"; + index = url_now.indexOf(str); + id = url_now.substring(index + str.length); $.ajax({ type: "post", contentType: "application/json; charset=utf-8", diff --git a/trustie2/app/views/layouts/base_welcome.html.erb b/trustie2/app/views/layouts/base_welcome.html.erb index 6b2d92f..2e54873 100644 --- a/trustie2/app/views/layouts/base_welcome.html.erb +++ b/trustie2/app/views/layouts/base_welcome.html.erb @@ -40,5 +40,59 @@ <%= call_hook :view_layouts_base_body_bottom %> + + + + + + + + + + +