Sha256: 0fd3409cf83dfc42d09f3b4fc0fb473098df541620ef2185fc56828ebda4fb2d

Contents?: true

Size: 1.36 KB

Versions: 2

Compression:

Stored size: 1.36 KB

Contents

#!/bin/env ruby

require './config/environment.rb'

require 'seapig-client'


STDOUT.sync = true
#ActiveRecord::Base.logger = Logger.new(STDERR)


EM.run {

	server = SeapigServer.new(ARGV[0], name: 'notifier')
	seapigs = Hash.new { |h,k| h[k] = server.notifier(k) }

	on_database_change = Proc.new {
		next if not server.connected
		SeapigDependency.where("current_version != reported_version").each { |seapig_dependency|
			puts "Dependency version changed: %30s:%-10s"%[seapig_dependency.name,seapig_dependency.current_version]
			seapigs[seapig_dependency.name].changed(seapig_dependency.current_version)
			seapig_dependency.reported_version = seapig_dependency.current_version
			seapig_dependency.save!
		}
	}

	Thread.new {
		begin
			ActiveRecord::Base.connection_pool.with_connection { |connection|
				connection = connection.instance_variable_get(:@connection)
				connection.exec("LISTEN seapig_dependency_changed")
				loop {
					connection.wait_for_notify { |channel, pid, payloads|
						EM.schedule(on_database_change)
					}
				}
			}
		rescue Exception => e
			puts "Exception in database thread"
			p e
			EM.schedule {
				server.disconnect
				EM.stop
			}
		end
	}


	(ARGV[1] or "").split(',').each { |interval|
		EM.add_periodic_timer(interval.to_i) {
			seapigs['Seconds#'+interval].changed(Time.new.to_i/interval.to_i)
		}
	}
	
	EM.schedule on_database_change

}


Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
seapig-rails-0.1.2 bin/seapig-rails-notifier
seapig-rails-0.1.0 bin/seapig-rails-notifier