Sha256: b2095c390f090e2e1f2367b8cb3335ff27c57b1f601196d4146f66f73296dcad

Contents?: true

Size: 1.34 KB

Versions: 23

Compression:

Stored size: 1.34 KB

Contents

# frozen_string_literal: true

#
# Mixin for objects that act as servers
#
module ServerProcessAble
  extend ActiveSupport::Concern

  def self.included(base)
    base.class_eval do
      #
      # Fields
      #
      field :host_name, type: String
      field :pid, type: Integer
      field :running, type: Mongoid::Boolean, default: false
      field :last_check_in_at, type: Time
      #
      # Validations
      #
      validates :host_name, presence: true
      validates :pid, presence: true
    end
    base.extend ClassMethods
  end

  #
  # Methods for the concrete class this concern is attached too, ways to find or create or just find the
  # associated server.
  #
  module ClassMethods
    #
    # Find a record for this server
    #
    def find_or_create_server
      find_or_create_by!(host_name: Socket.gethostname, pid: Process.pid)
    end

    #
    # Find a worker, return nil if not found
    #
    def find_server
      find_by(host_name: Socket.gethostname, pid: Process.pid)
    rescue StandardError
      nil
    end
  end

  #
  # Perform a check in for the server
  #
  def check_in
    set(last_check_in_at: Time.now.utc)
  end

  #
  # Stop the worker
  #
  def stop
    set(running: false, last_check_in_at: Time.now.utc)
  end

  #
  # Start the worker
  #
  def start
    set(running: true, last_check_in_at: Time.now.utc)
  end
end

Version data entries

23 entries across 23 versions & 1 rubygems

Version Path
web47core-3.2.20 lib/app/models/concerns/server_process_able.rb
web47core-3.2.19 lib/app/models/concerns/server_process_able.rb
web47core-3.2.18 lib/app/models/concerns/server_process_able.rb
web47core-3.2.17 lib/app/models/concerns/server_process_able.rb
web47core-3.2.16 lib/app/models/concerns/server_process_able.rb
web47core-3.2.15 lib/app/models/concerns/server_process_able.rb
web47core-3.2.14 lib/app/models/concerns/server_process_able.rb
web47core-3.2.13 lib/app/models/concerns/server_process_able.rb
web47core-3.2.12 lib/app/models/concerns/server_process_able.rb
web47core-3.2.9 lib/app/models/concerns/server_process_able.rb
web47core-3.2.8 lib/app/models/concerns/server_process_able.rb
web47core-3.2.7 lib/app/models/concerns/server_process_able.rb
web47core-3.2.6 lib/app/models/concerns/server_process_able.rb
web47core-3.2.5 lib/app/models/concerns/server_process_able.rb
web47core-3.2.4 lib/app/models/concerns/server_process_able.rb
web47core-3.2.3 lib/app/models/concerns/server_process_able.rb
web47core-3.2.2 lib/app/models/concerns/server_process_able.rb
web47core-3.0.6 lib/app/models/concerns/server_process_able.rb
web47core-3.0.5 lib/app/models/concerns/server_process_able.rb
web47core-3.0.4 lib/app/models/concerns/server_process_able.rb