In addition, make it daemonize by default.  This makes
the whole thing much more daemon like, and makes it
appropriate for running from an initscript.

Speaking of which, the second part of this is to add a
new initscript to conf/ for this daemon.  With all of
this in place, things seem to be working pretty well.

Signed-off-by: Chris Lalancette <[email protected]>
---
 conf/deltacloud-condor_refreshd        |   80 +++++++++++++++++++++++
 deltacloud-aggregator.spec.in          |    9 ++-
 src/condor_refreshd/condor_refreshd    |  112 ++++++++++++++++++++++++++++++++
 src/condor_refreshd/condor_refreshd.rb |   59 -----------------
 4 files changed, 200 insertions(+), 60 deletions(-)
 create mode 100755 conf/deltacloud-condor_refreshd
 create mode 100755 src/condor_refreshd/condor_refreshd
 delete mode 100755 src/condor_refreshd/condor_refreshd.rb

diff --git a/conf/deltacloud-condor_refreshd b/conf/deltacloud-condor_refreshd
new file mode 100755
index 0000000..29843c9
--- /dev/null
+++ b/conf/deltacloud-condor_refreshd
@@ -0,0 +1,80 @@
+#!/bin/bash
+#
+#
+# deltacloud-condor_refreshd       startup script for 
deltacloud-condor_refreshd
+#
+# chkconfig: - 97 03
+# description: deltacloud-condor_refreshd populates the Deltacloud Scheduler
+#    from the Deltacloud Aggregator db
+
+[ -r /etc/sysconfig/deltacloud-rails ] && . /etc/sysconfig/deltacloud-rails
+
+[ -r /etc/sysconfig/deltacloud-aggregator ] && . 
/etc/sysconfig/deltacloud-aggregator
+
+DELTACLOUD_DIR="${DELTACLOUD_DIR:-/usr/share/deltacloud-aggregator}"
+REFRESHD_LOG="${REFRESHD_LOG:-/var/log/deltacloud-aggregator/condor_refreshd.log}"
+REFRESHD_PID="${REFRESHD_PID:-/var/run/deltacloud-aggregator/condor_refreshd.pid}"
+REFRESHD_LOCKFILE="${REFRESHD_LOCKFILE:-/var/lock/subsys/deltacloud-condor_refreshd}"
+USER="${USER:-dcloud}"
+GROUP="${GROUP:-dcloud}"
+
+REFRESHD_PATH=/usr/share/deltacloud-aggregator/condor_refreshd
+REFRESHD_PROG=condor_refreshd
+REFRESHD_PID=/var/run/deltacloud-aggregator/condor_refreshd.pid
+
+. /etc/init.d/functions
+
+start() {
+    echo -n "Starting deltacloud-condor_refreshd: "
+
+    daemon --user=$USER $REFRESHD_PATH/$REFRESHD_PROG
+    RETVAL=$?
+    if [ $RETVAL -eq 0 ] && touch $REFRESHD_LOCKFILE ; then
+      echo_success
+      echo
+    else
+      echo_failure
+      echo
+    fi
+}
+
+stop() {
+    echo -n "Shutting down deltacloud-condor_refreshd: "
+    killproc -p $REFRESHD_PID $REFRESHD_PROG
+    RETVAL=$?
+    if [ $RETVAL -eq 0 ] && rm -f $REFRESHD_LOCKFILE ; then
+      echo_success
+      echo
+    else
+      echo_failure
+      echo
+    fi
+}
+
+case "$1" in
+    start)
+      start
+     ;;
+    stop)
+      stop
+      ;;
+    restart)
+      stop
+      start
+      ;;
+    reload)
+      ;;
+    force-reload)
+      restart
+      ;;
+    status)
+     status $REFRESHD_PROG
+     RETVAL=$?
+     ;;
+    *)
+      echo "Usage: deltacloud-condor_refreshd {start|stop|restart|status}"
+      exit 1
+  ;;
+esac
+
+exit $RETVAL
diff --git a/deltacloud-aggregator.spec.in b/deltacloud-aggregator.spec.in
index 9014e92..63824cf 100644
--- a/deltacloud-aggregator.spec.in
+++ b/deltacloud-aggregator.spec.in
@@ -95,13 +95,18 @@ mv %{buildroot}/%{app_root}/doc 
%{buildroot}/%{app_root}/test %{buildroot}/%{doc
 # copy over init scripts and various config
 %{__cp} conf/deltacloud-aggregator %{buildroot}%{_initrddir}
 %{__cp} conf/deltacloud-dbomatic %{buildroot}%{_initrddir}
+%{__cp} conf/deltacloud-condor_refreshd %{buildroot}%{_initrddir}
 %{__cp} conf/deltacloud-portal.conf 
%{buildroot}%{_sysconfdir}/httpd/conf.d/deltacloud-aggregator.conf
 %{__cp} conf/deltacloud-portal.logrotate 
%{buildroot}%{_sysconfdir}/logrotate.d/deltacloud-aggregator
 %{__cp} conf/deltacloud-aggregator.sysconf 
%{buildroot}%{_sysconfdir}/sysconfig/deltacloud-aggregator
 %{__cp} conf/deltacloud-rails.sysconf 
%{buildroot}%{_sysconfdir}/sysconfig/deltacloud-rails
 
 # move rails config to /etc, creating symlinks
-%{__mv} %{buildroot}%{app_root}/config/database.yml 
%{buildroot}%{_sysconfdir}/%{name}
+if [ -f %{buildroot}%{app_root}/config/database.yml ]; then
+   %{__mv} %{buildroot}%{app_root}/config/database.yml 
%{buildroot}%{_sysconfdir}/%{name}
+else
+   %{__cp} %{buildroot}%{app_root}/config/database.pg 
%{buildroot}%{_sysconfdir}/%{name}/database.yml
+fi
 %{__mv} %{buildroot}%{app_root}/config/environments/development.rb 
%{buildroot}%{_sysconfdir}/%{name}
 %{__mv} %{buildroot}%{app_root}/config/environments/production.rb 
%{buildroot}%{_sysconfdir}/%{name}
 %{__mv} %{buildroot}%{app_root}/config/environments/test.rb 
%{buildroot}%{_sysconfdir}/%{name}
@@ -118,6 +123,7 @@ touch %{buildroot}%{_localstatedir}/log/%{name}/mongrel.log
 touch %{buildroot}%{_localstatedir}/log/%{name}/rails.log
 touch %{buildroot}%{_localstatedir}/log/%{name}/dbomatic.log
 touch %{buildroot}%{_localstatedir}/run/%{name}/event_log_position
+touch %{buildroot}%{_localstatedir}/log/%{name}/condor_refreshd.log
 
 
 # remove the files not needed for the installation
@@ -170,6 +176,7 @@ fi
 %defattr(-,root,root,-)
 %attr(755, dcloud, dcloud) %{_initrddir}/deltacloud-aggregator
 %attr(755, dcloud, dcloud) %{_initrddir}/deltacloud-dbomatic
+%attr(755, dcloud, dcloud) %{_initrddir}/deltacloud-condor_refreshd
 %config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
 %config(noreplace) %{_sysconfdir}/sysconfig/deltacloud-aggregator
 %config(noreplace) %{_sysconfdir}/sysconfig/deltacloud-rails
diff --git a/src/condor_refreshd/condor_refreshd 
b/src/condor_refreshd/condor_refreshd
new file mode 100755
index 0000000..1210e1b
--- /dev/null
+++ b/src/condor_refreshd/condor_refreshd
@@ -0,0 +1,112 @@
+#!/usr/bin/env ruby
+
+# Copyright (C) 2010 Red Hat, Inc.
+# Written by Chris Lalancette <[email protected]>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA  02110-1301, USA.  A copy of the GNU General Public License is
+# also available at http://www.gnu.org/copyleft/gpl.html.
+
+$: << File.join(File.dirname(__FILE__), "../dutils")
+$: << File.join(File.dirname(__FILE__), "../config")
+
+require 'rubygems'
+require 'optparse'
+require 'socket'
+require 'dutils'
+
+port = 7890
+help = false
+daemon = true
+refreshd_log_dir = "/var/log/deltacloud-aggregator"
+refreshd_pid_dir = "/var/run/deltacloud-aggregator"
+
+optparse = OptionParser.new do |opts|
+
+  opts.banner = <<BANNER
+Usage: condor_refreshd [options]
+
+Options:
+BANNER
+  opts.on( '-f', '--pid-file PATH', "Use PATH to the condor_refreshd pid 
directory (defaults to #{refreshd_pid_dir})") do |newpath|
+    refreshd_pid_dir = newpath
+  end
+  opts.on( '-h', '--help', '') { help = true }
+  opts.on( '-l', '--log PATH', "Use PATH to the condor_refreshd log directory 
(defaults to #{refreshd_log_dir}).  Use '-' for stdout") do |newpath|
+    refreshd_log_dir = newpath
+  end
+  opts.on( '-n', '--nodaemon', 'Do not daemonize (useful in combination with 
-l for debugging)') { daemon = false }
+  opts.on( '-p', '--port PORT', 'Use PORT (default: 7890)') do |newport|
+    port = newport
+  end
+end
+
+begin
+  optparse.parse!
+rescue OptionParser::InvalidOption => e
+  puts "Invalid option #{e.args}"
+  puts
+  puts optparse
+  exit(1)
+end
+
+if help
+  puts optparse
+  exit(0)
+end
+
+# setup the logger
+if refreshd_log_dir == '-'
+  REFRESHD_LOG_FILE = STDOUT
+else
+  REFRESHD_LOG_FILE = "#{refreshd_log_dir}/condor_refreshd.log"
+end
+logger = Logger.new(REFRESHD_LOG_FILE)
+logger.level = Logger::DEBUG
+
+logger.info "Starting condor_refreshd..."
+socket = Socket.new(Socket::AF_INET, Socket::SOCK_DGRAM, 0)
+in_addr = Socket.pack_sockaddr_in(port, '0.0.0.0')
+socket.bind(in_addr)
+
+# daemonize
+if daemon
+  # note that this requires 'active_support', which we get for free from dutils
+  Process.daemon
+end
+
+begin
+  REFRESHD_PID_FILE = "#{refreshd_pid_dir}/condor_refreshd.pid"
+  FileUtils.mkdir_p File.dirname(REFRESHD_PID_FILE)
+  open(REFRESHD_PID_FILE, "w") {|f| f.write(Process.pid) }
+  File.chmod(0644, REFRESHD_PID_FILE)
+rescue => e
+  logger.error "#{e.backtrace.shift}: #{e.message}"
+  e.backtrace.each do |step|
+    logger.error "\tfrom #{step}"
+  end
+end
+
+while true
+  begin
+    packet = socket.recvfrom(1024)
+    logger.info "Doing classad sync"
+    condormatic_classads_sync
+  rescue => e
+    logger.error "#{e.backtrace.shift}: #{e.message}"
+    e.backtrace.each do |step|
+      logger.error "\tfrom #{step}"
+    end
+  end
+end
diff --git a/src/condor_refreshd/condor_refreshd.rb 
b/src/condor_refreshd/condor_refreshd.rb
deleted file mode 100755
index 5e9dd4a..0000000
--- a/src/condor_refreshd/condor_refreshd.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/usr/bin/env ruby
-
-# Copyright (C) 2010 Red Hat, Inc.
-# Written by Chris Lalancette <[email protected]>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-# MA  02110-1301, USA.  A copy of the GNU General Public License is
-# also available at http://www.gnu.org/copyleft/gpl.html.
-
-$: << File.join(File.dirname(__FILE__), "../dutils")
-$: << File.join(File.dirname(__FILE__), "../config")
-
-require 'rubygems'
-require 'optparse'
-require 'socket'
-require 'dutils'
-
-port = 7890
-help = false
-
-optparse = OptionParser.new do |opts|
-
-opts.banner = <<BANNER
-Usage:
-condor_refreshd [options]
-
-Options:
-BANNER
-  opts.on( '-p', '--port PORT', 'Use PORT (default: 7890)') do |newport|
-    port = newport
-  end
-  opts.on( '-h', '--help', '') { help = true }
-end
-
-optparse.parse!
-
-if help
-  puts optparse
-  exit(0)
-end
-
-socket = UDPSocket.new
-socket.bind(nil, port)
-while true
-  packet = socket.recvfrom(1024)
-  puts "Doing classad sync"
-  condormatic_classads_sync
-end
-- 
1.7.2.3

_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel

Reply via email to