aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/purge_request.rb
blob: 81980188d587089ac4ae373d0767d5c36275f26d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
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
44
45
46
47
48
# == Schema Information
#
# Table name: purge_requests
#
#  id         :integer          not null, primary key
#  url        :string(255)
#  created_at :datetime         not null
#  model      :string(255)      not null
#  model_id   :integer          not null
#

# models/purge_request.rb:
# A queue of URLs to purge
#
# Copyright (c) 2008 UK Citizens Online Democracy. All rights reserved.
# Email: hello@mysociety.org; WWW: http://www.mysociety.org/
#

class PurgeRequest < ActiveRecord::Base
    def self.purge_all
        done_something = false

        PurgeRequest.all.each do |item|
            item.purge
            done_something = true
        end

        done_something
    end

    # Run purge_all in an endless loop, sleeping when there is nothing to do
    def self.purge_all_loop
        while true
            sleep_seconds = 1
            while !purge_all
                sleep sleep_seconds
                sleep_seconds *= 2
                sleep_seconds = 30 if sleep_seconds > 30
            end
        end
    end

    def purge
        config = MySociety::Config.load_default
        result = quietly_try_to_purge(config['VARNISH_HOST'], url)
        delete
    end
end