#!/usr/bin/env ruby
# Copyright (C) 2012-2016 Zammad Foundation, http://zammad-foundation.org/

$LOAD_PATH << './lib'
require 'rubygems'

# load rails env
dir = File.expand_path(File.join(File.dirname(__FILE__), '..'))
Dir.chdir dir
RAILS_ENV = ENV['RAILS_ENV'] || 'development'

require 'rails/all'
require 'bundler'
require File.join(dir, 'config', 'environment')
require 'daemons'

def before_fork

  # remember open file handles
  @files_to_reopen = []
  ObjectSpace.each_object(File) do |file|
    @files_to_reopen << file unless file.closed?
  end
end

def after_fork(dir)
  Dir.chdir dir

  # Re-open file handles
  @files_to_reopen.each do |file|
    file.reopen file.path, 'a+'
    file.sync = true
  end

  $stdout.reopen("#{dir}/log/scheduler_out.log", 'w')
  $stderr.reopen("#{dir}/log/scheduler_err.log", 'w')
end

before_fork

daemon_options = {
  multiple: false,
  dir_mode: :normal,
  dir: File.join(dir, 'tmp', 'pids'),
  backtrace: true
}

name = 'scheduler'
Daemons.run_proc(name, daemon_options) do
  if ARGV.include?('--')
    ARGV.slice! 0..ARGV.index('--')
  else
    ARGV.clear
  end

  after_fork(dir)

  require 'scheduler'
  Scheduler.threads
end
