From: Tom Hughes Date: Thu, 14 Jun 2007 23:03:41 +0000 (+0000) Subject: Add a daemon to cleanup stale sessions. X-Git-Tag: live~8383 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/f00d473537a03a07270fc4df9ec9abfa108a1580 Add a daemon to cleanup stale sessions. --- diff --git a/lib/daemons/session_cleanup.rb b/lib/daemons/session_cleanup.rb new file mode 100644 index 000000000..08e2deae5 --- /dev/null +++ b/lib/daemons/session_cleanup.rb @@ -0,0 +1,45 @@ +#!/usr/bin/env ruby + +#You might want to change this +#ENV["RAILS_ENV"] ||= "development" + +require File.dirname(__FILE__) + "/../../config/environment" + +require 'pstore' + +terminated = false + +session_path = ActionController::Base.session_options[:tmpdir] + +def expire_session(name) + ActiveRecord::Base.logger.info("Expiring session #{File.basename(name)}") + FileUtils.rm_f(name) +end + +while (true) do + Dir.foreach(session_path) do |session_name| + if session_name =~ /^ruby_sess\./ + session_name = session_path + "/" + session_name + session = PStore.new(session_name) + + session.transaction do |session| + session_hash = session['hash'] + + if session_hash + session_stat = File::Stat.new(session_name) + puts session_hash[:token] + + if session_hash[:token] and User.find_by_token(session_hash[:token]) +# expire_session(session_name) if session_stat.mtime < 1.day.ago + else + expire_session(session_name) if session_stat.mtime < 1.hour.ago + end + else + expire_session(session_name) + end + end + end + end + + sleep 15.minutes +end diff --git a/lib/daemons/session_cleanup_ctl b/lib/daemons/session_cleanup_ctl new file mode 100644 index 000000000..f421370fd --- /dev/null +++ b/lib/daemons/session_cleanup_ctl @@ -0,0 +1,15 @@ +#!/usr/bin/env ruby +require 'rubygems' +require "daemons" +require 'yaml' +require 'erb' +require 'active_support' + +options = YAML.load( + ERB.new( + IO.read( + File.dirname(__FILE__) + "/../../config/daemons.yml" + )).result).with_indifferent_access +options[:dir_mode] = options[:dir_mode].to_sym + +Daemons.run File.dirname(__FILE__) + '/session_cleanup.rb', options