about summary refs log tree commit homepage
path: root/projects/mongrel_config/lib
diff options
context:
space:
mode:
Diffstat (limited to 'projects/mongrel_config/lib')
-rw-r--r--projects/mongrel_config/lib/mongrel_config/app.rb158
-rw-r--r--projects/mongrel_config/lib/mongrel_config/init.rb75
-rw-r--r--projects/mongrel_config/lib/mongrel_config/win32.rb85
-rw-r--r--projects/mongrel_config/lib/mongrel_config/win32_app.rb251
4 files changed, 0 insertions, 569 deletions
diff --git a/projects/mongrel_config/lib/mongrel_config/app.rb b/projects/mongrel_config/lib/mongrel_config/app.rb
deleted file mode 100644
index b1a182a..0000000
--- a/projects/mongrel_config/lib/mongrel_config/app.rb
+++ /dev/null
@@ -1,158 +0,0 @@
-require 'erb'
-require 'camping'
-require 'mongrel/camping'
-
-
-Camping.goes :Configure
-
-module Configure::Controllers
-  class Index < R '/'
-    def get
-      render :show
-    end
-  end
-
-  class Start < R '/start'
-    def get      
-      render :start
-    end
-
-    def post
-      @results = `mongrel_rails start -d -p #{input.port} -e #{input.env} -n #{input.num_procs} -a #{input.address}`
-      render :start_done
-    end
-  end
-
-  class Kill < R '/kill/(\w+)'
-
-    def get(signal)
-      if _running?
-        @signal = signal.upcase
-        pid = open($PID_FILE) {|f| f.read }
-        begin
-          Process.kill(@signal, pid.to_i)
-          @results = "Mongrel sent PID #{pid} signal #{@signal}."
-        rescue
-          puts "ERROR: #$!"
-          @results = "Failed to signal the Mongrel process.  Maybe it is not running?<p>#$!</p>"
-        end
-      else
-        @results = "Mongrel does not seem to be running.  Maybe delete the pid file #{$PID_FILE} or start again."
-      end
-      
-      render :kill
-    end
-  end
-
-
-  class Stop < R '/stop'
-    def get
-      render :stop
-    end
-  end
-
-  class Logs < R '/logs'
-    def get
-      @log_files = Dir.glob("log/**/*")
-      render :logs
-    end
-  end
-
-end
-
-
-module Configure::Views
-  def layout
-    body_content = yield
-    currently_running = _running?
-    pid = _pid
-    open(GemPlugin::Manager.instance.resource("mongrel_config", "/index.html")) do |f|
-      template = ERB.new(f.read)
-      template.result(binding)
-    end
-  end
-
-  def show
-    div do
-      h2 { "Status" }
-      if _running?
-        p { "Currently running with PID #{_pid}." }
-      else
-        p { "Mongrel is not running." }
-      end
-    end
-  end
-
-  def start
-    div do
-      form :action => "/start", :method => "POST" do
-        p { span { "Port:" }; input :name => "port", :value => "4000" }
-        p { span { "Environment:" }; input :name => "env", :value => "development" }
-        p { span { "Address:" }; input :name => "address", :value => "0.0.0.0" }
-        input :type => "submit", :value => "START"
-      end
-    end
-  end
-
-  def start_done
-    div do
-      p { @results }
-    end
-  end
-
-  def kill
-    div do
-      p { @results }
-      
-      case @signal
-        when "HUP":
-          p { "A reload (HUP) does not stop the process, but may not be complete." }
-        when "TERM":
-          p { "Stopped with TERM signal.  The process should exit shortly, but only after processing pending requests." }
-        when "USR2":
-          p { "Complete restart (USR2) may take a little while.  Check status in a few seconds or read logs." }
-        when "KILL":
-          p { "Process was violently stopped (KILL) so pending requests will be lost." }
-        end
-    end
-  end
-
-  def stop
-    if _running?
-      ul do
-        li { a "Stop (TERM)", :href => "/kill/term" }
-        li { a "Reload (HUP)", :href => "/kill/hup" }
-        li { a "Restart (USR2)", :href => "/kill/usr2" }
-        li { a "Kill (KILL)", :href => "/kill/kill" }
-      end
-    else
-      p { "Mongrel does not appear to be running (no PID file at #$PID_FILE)." }
-    end
-  end
-
-  def logs
-    div do
-      h2 { "Logs" }
-      table do
-        tr do
-          th { "File"}; th { "Bytes" }; th { "Last Modified" }
-        end
-        @log_files.each do |file|
-          tr do
-            td { a file, :href => "../#{file}" }
-            td { File.size file }
-            td { File.mtime file }
-          end
-        end
-      end
-    end
-  end
-  
-  def _running?
-    File.exist? $PID_FILE
-  end
-
-  def _pid
-    open($PID_FILE) {|f| f.read } if _running?
-  end
-end
diff --git a/projects/mongrel_config/lib/mongrel_config/init.rb b/projects/mongrel_config/lib/mongrel_config/init.rb
deleted file mode 100644
index 623ea03..0000000
--- a/projects/mongrel_config/lib/mongrel_config/init.rb
+++ /dev/null
@@ -1,75 +0,0 @@
-require 'rubygems'
-require 'gem_plugin'
-require 'mongrel'
-
-
-class ConfigTool < GemPlugin::Plugin "/commands"
-  include Mongrel::Command::Base
-
-  def configure
-    if RUBY_PLATFORM =~ /mswin/
-      options [
-        ['-h', '--host ADDR', "Host to bind to for server", :@host, "0.0.0.0"],
-        ['-p', '--port NUMBER', "Port to bind to", :@port, "3001"],
-        ['-u', '--uri URI', "Where to put your config tool", :@uri, "/config"],
-        ['-R', '--mongrel PATH', "Path to mongrel_rails_service", :@mongrel_script, "c:\\ruby\\bin\\mongrel_rails_service"]
-      ]
-    else
-      options [
-        ['-c', '--chdir PATH', "Change to dir before starting (will be expanded)", :@cwd, Dir.pwd],
-        ['-P', '--pid FILE', "Where to write the PID", :@pid_file, "log/mongrel.pid"],
-        ['-h', '--host ADDR', "Host to bind to for server", :@host, "0.0.0.0"],
-        ['-p', '--port NUMBER', "Port to bind to", :@port, "3001"],
-        ['-u', '--uri URI', "Where to put your config tool", :@uri, "/config"]
-      ]
-    end
-  end
-  
-  def validate
-      valid?(@uri, "Must give a uri")
-      valid?(@port && @port.to_i > 0, "Must give a valid port")
-      valid?(@host, "Host IP to bind must be given")
-      
-    if RUBY_PLATFORM !~ /mswin/    
-      valid_dir? @cwd, "Cannot change to a directory that doesn't exist"
-      Dir.chdir @cwd
-      valid_dir? "log", "Log directory does not exist"
-    end
-
-    return @valid
-  end
-
-
-  def run
-    # must require this here since rails and camping don't like eachother
-    if RUBY_PLATFORM =~ /mswin/
-      require 'mongrel_config/win32_app'
-      $mongrel_rails_service = @mongrel_script
-    else
-      require 'mongrel_config/app'
-    end
-
-    resources = GemPlugin::Manager.instance.resource "mongrel_config", "/"
-    $PID_FILE = @pid_file
-
-    $server = Mongrel::Camping::start(@host,@port,@uri,Configure)
-
-    puts "** Configure is running at http://#{@host}:#{@port}#{@uri}"
-    if RUBY_PLATFORM !~ /mswin/
-      trap("INT") {
-        $server.stop
-      }
-      puts "Use CTRL-C to quit."
-    else
-      puts "Use CTRL-Pause/Break to quit."
-    end
-
-    # add our log directory
-    $server.register("/log", Mongrel::DirHandler.new("log"))
-    $server.register("/config/resources", Mongrel::DirHandler.new(resources))
-
-    $server.acceptor.join
-  end
-end
-
-
diff --git a/projects/mongrel_config/lib/mongrel_config/win32.rb b/projects/mongrel_config/lib/mongrel_config/win32.rb
deleted file mode 100644
index 4cdf605..0000000
--- a/projects/mongrel_config/lib/mongrel_config/win32.rb
+++ /dev/null
@@ -1,85 +0,0 @@
-require 'win32/service'
-
-
-# Simply abstracts the common stuff that the config tool needs to do
-# when dealing with Win32.  It is a very thin wrapper which may expand
-# later.
-module W32Support
-
-  # Lists all of the services that have "mongrel" in the binary_path_name
-  # of the service.  This detects the mongrel services.
-  def W32Support.list
-    Win32::Service.services.select {|s| s.binary_path_name =~ /mongrel/ }
-  end
-
-  # Just gets the display name of the service.
-  def W32Support.display(name)
-    Win32::Service.getdisplayname(name)
-  end
-
-  # Performs one operations (like :start or :start) which need
-  # to be "monitored" until they're done.  The wait_for parameter
-  # should be a regex for the content of the status like /running/
-  # or /stopped/
-  def W32Support.do_and_wait(service_name, operation, wait_for)
-    status = W32Support.status(service_name)
-    if status =~ wait_for
-      # already running call the block once and leave
-      yield status
-    else
-      # start trying to start it
-      Win32::Service.send(operation, service_name)
-      status = W32Support.status(service_name)
-      while status !~ wait_for
-        yield status
-        status = W32Support.status(service_name)
-      end
-
-      # do one last yield so they know it started
-      yield status
-    end
-  end
-
-  # Starts the requested service and calls a passed in block
-  # until the service is done.  You should sleep for a short
-  # period until it's done or there's an exception.
-  def W32Support.start(service_name)
-    W32Support.do_and_wait(service_name, :start, /running/) do |status|
-      yield status
-    end
-  end
-
-
-  # Stops the service.  Just like W32Support.start is will call
-  # a block while it checks for the service to actually stop.
-  def W32Support.stop(service_name)
-    W32Support.do_and_wait(service_name, :stop, /stopped/) do |status|
-      yield status
-    end
-  end
-
-
-  # Returns the current_state field of the service.
-  def W32Support.status(service_name)
-    Win32::Service.status(service_name).current_state
-  end
-  
-
-  # Deletes the service from the system.  It first tries to stop
-  # the service, and if you pass in a block it will call it while
-  # the service is being stopped.
-  def W32Support.delete(service_name)
-    begin
-      W32Support.stop(service_name) do |status|
-        yield status if block_given?
-      end
-    rescue
-    end
-
-    begin
-      Win32::Service.delete(service_name)
-    rescue
-    end
-  end
-
-end
diff --git a/projects/mongrel_config/lib/mongrel_config/win32_app.rb b/projects/mongrel_config/lib/mongrel_config/win32_app.rb
deleted file mode 100644
index d4e15b2..0000000
--- a/projects/mongrel_config/lib/mongrel_config/win32_app.rb
+++ /dev/null
@@ -1,251 +0,0 @@
-require 'erb'
-require 'camping'
-require 'mongrel/camping'
-require 'yaml'
-require 'thread'
-
-Camping.goes :Configure
-
-require 'mongrel_config/win32'
-
-$service_group = ThreadGroup.new
-$service_logs = ""
-
-module Configure
-  module Controllers
-    class Index < R '/'
-      def get
-        @services = W32Support.list
-        render :list
-      end
-    end
-    
-    class Info < R '/info/(\w+)'
-      def get(name)
-        @services = W32Support.list.select {|s| s.service_name == name }
-        render :info
-      end
-    end
-    
-    class Start < R '/start/(\w+)'
-      def get(service)
-        runner = Thread.new do
-          W32Support.start(service) do |status|
-            $service_logs << "Starting #{service}: #{status}\n"
-            sleep 1
-          end
-        end
-
-        $service_group.add(runner)
-
-        redirect Index
-      end
-    end    
-    
-    class Stop < R '/stop/(\w+)'
-      def get(service)
-        runner = Thread.new do
-          W32Support.stop(service) do |status|
-            $service_logs << "Starting #{service}: #{status}\n"
-            sleep 1
-          end
-        end
-
-        $service_group.add(runner)
-        redirect Index
-      end
-    end
-    
-    # eventually this will also let you see a particular service's logs
-    class Logs < R '/logs'
-      def get
-        render :service_logs
-      end
-    end
-
-    class ClearLogs < R '/clear_logs'
-      def get
-        $service_logs = ""
-        $service_logs << "#{Time.now}: CLEARED"
-
-        redirect Logs
-      end
-    end
-
-    class Install < R '/install'
-      def get
-        render :install_form
-      end
-
-      def post
-        options = []
-        if bad?(input.service_name) or bad?(input.root) or bad?(input.environment) or bad?(input.address) or bad?(input.port)
-          @result = "ERROR: You must fill out all mandatory (*) fields."
-          render :install_result
-        else
-          options << ["-n", input.service_name]
-          options << ["-r", '"' + input.root + '"']
-          options << ["-e", input.environment]
-          options << ["-b", input.address]
-          options << ["-p", input.port]
-          options << ["-d", input.display_name] if good? input.display_name
-          options << ["-m", '"' + input.mime + '"'] if good? input.mime
-          options << ["-P", input.num_procs] if good? input.num_procs
-          options << ["-t", input.timeout] if good? input.timeout
-          options << ["-c", input.cpu] if good? input.cpu
-          
-          begin
-            @result = `ruby #$mongrel_rails_service install #{options.join(' ')}`
-            $service_logs << @result
-          rescue
-            @result = "Failed to start #{input.service_name}: #$!"
-            $service_logs << @result
-          end
-          
-          render :install_result
-        end
-      end
-
-      def good?(field)
-        field and not field.strip.empty?
-      end
-      
-      def bad?(field)
-        not good? field
-      end
-    end
-
-
-    class Delete < R '/delete/(\w+)'
-      def get(name)
-        W32Support.delete(name)
-        $service_logs << "Deleted #{name}\n"
-        redirect Index
-      end
-    end
-  end
-  
-  
-  module Views
-    def layout
-      links = [
-        ["/config", "Status"],
-        ["/config/install", "Install"],
-        ["/config/logs", "Logs"]
-        ]
-      body_content = yield
-      currently_running = _running_procs
-
-      open(GemPlugin::Manager.instance.resource("mongrel_config", "/index_win32.html")) do |f|
-        template = ERB.new(f.read)
-        self << template.result(binding)
-      end
-    end
-    
-
-    def list
-      div :id=>"viewport" do
-        table do
-          tr { th { "Service"}; th { "Status"}; th { "Control" }; th { "Delete" } }
-          @services.each do |s|
-            status = W32Support.status(s.service_name)
-            tr {
-              td { a(s.service_name, :href => "/info/#{s.service_name}") }
-              td { status.capitalize }
-              td {
-                if status =~ /stopped/
-                  a("start",:href => "/start/#{s.service_name}")
-                elsif status =~ /running/
-                  a("stop",:href => "/stop/#{s.service_name}")
-                else
-                  b { "in progress" }
-                end
-              }
-              td {
-                a("delete!",:href => "/delete/#{s.service_name}",
-                  :onclick=>"return confirm('Delete #{s.service_name}?') == '1'")
-              }
-            }
-          end
-        end
-      end
-    end
-    
-
-    def info
-      div :id=>"viewport" do
-        @services.each do |s|
-        
-          h2 { "#{s.service_name} service information" }
-          table do
-            tr { th {"Attribute"}; th {"Value"} }
-            
-            s.each_pair do |memb,obj|
-              name = memb.to_s.tr("_"," ").capitalize
-              tr {
-                td { b { "#{name}: " } }
-                td { obj.inspect }
-              }
-            end
-          end
-        end
-      end
-    end
-
-    def service_logs
-      h2 { "Latest Service Activity Logs" }
-      a("[clear logs]", :href => "/clear_logs")
-
-      div :id=>"viewport" do
-        pre :style=>"font-size: 10pt;" do
-          self << $service_logs
-        end
-      end
-    end
-
-    def install_form
-      div do
-        h2 { "Install New Mongrel Service" }
-        p { "Items with an * are mandatory.  Leave an item blank to not specify it." }
-        form :action=>"/install", :method=>"POST" do
-          b { "* Service Name: "}; input :name => "service_name"; br
-          b { "* Root: "}; input :name => "root"; br
-          b { "* Environment: "}; input :name => "environment", :value => "development"; br
-          b { "*Address: "}; input :name => "address", :value => "0.0.0.0"; br
-          b { "*Port: "}; input :name => "port", :value => "4000", :size => 6; br
-          b { "Display Name: "}; input :name => "display_name"; br
-          b { "MIME Map File: "};  input :name => "mime"; br
-          b { "Number Processor Threads: "}; input :name => "num_procs", :size => 3; br
-          b { "Request Timeout: "}; input :name => "timeout", :size => 3; br
-          b { "Assigned CPU: " }; input :name => "cpu", :size => 2; br
-
-          p { input :type=>"submit", :value => "INSTALL" }
-        end
-      end
-    end
-
-
-    def install_result
-      div :id=>"viewport" do
-        h2 { "Install Results"}
-        pre do
-          self << @result
-        end
-      end
-    end
-
-    def _running_procs
-      running = []
-      W32Support.list.each {|s| running << s.service_name if s.current_state =~ /running/}
-      running
-    end
-    
-  end
-end
-
-
-
-
-
-
-