Class: Tasker::Health::StatusChecker

Inherits:
Object
  • Object
show all
Defined in:
lib/tasker/health/status_checker.rb

Overview

StatusChecker provides comprehensive system status information

Gathers detailed metrics about tasks, workflow steps, and system health. Uses Rails caching to avoid expensive database queries on frequent requests.

Examples:

Basic usage

checker = Tasker::Health::StatusChecker.new
status = checker.check
puts status[:healthy]

Force refresh (bypass cache)

status = checker.check(force_refresh: true)

Constant Summary collapse

CACHE_KEY =

Cache key for status data

'tasker:health:status'

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(cache_duration: nil) ⇒ StatusChecker

Initialize status checker

Parameters:

  • cache_duration (Integer) (defaults to: nil)

    Cache duration in seconds (default from config)



27
28
29
# File 'lib/tasker/health/status_checker.rb', line 27

def initialize(cache_duration: nil)
  @cache_duration = cache_duration || Tasker::Configuration.configuration.health.cache_duration_seconds
end

Instance Attribute Details

#cache_durationInteger (readonly)

Returns Cache duration in seconds.

Returns:

  • (Integer)

    Cache duration in seconds



19
20
21
# File 'lib/tasker/health/status_checker.rb', line 19

def cache_duration
  @cache_duration
end

Class Method Details

.statusHash

Class method for status check

Returns:

  • (Hash)

    Comprehensive status information



34
35
36
# File 'lib/tasker/health/status_checker.rb', line 34

def self.status
  new.check
end

Instance Method Details

#check(force_refresh: false) ⇒ Hash

Perform comprehensive status check

Parameters:

  • force_refresh (Boolean) (defaults to: false)

    Whether to bypass cache and force fresh data

Returns:

  • (Hash)

    Comprehensive status information

    • :healthy [Boolean] Overall system health
    • :status [String] Status description
    • :data [Hash] Detailed metrics
    • :cached [Boolean] Whether data came from cache
    • :timestamp [Time] When data was generated


47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/tasker/health/status_checker.rb', line 47

def check(force_refresh: false)
  if force_refresh
    result = generate_status_data
    result[:cached] = false
    result
  else
    begin
      # Check if we have cached data first
      cached_data = Rails.cache.read(CACHE_KEY)
      if cached_data.nil?
        # No cached data, generate fresh and cache it
        result = generate_status_data
        # Create a copy for caching (without the cached flag)
        cache_data = result.dup
        cache_data.delete(:cached)
        Rails.cache.write(CACHE_KEY, cache_data, expires_in: @cache_duration.seconds)
        result[:cached] = false
      else
        # Return cached data with cached flag set
        result = cached_data.dup
        result[:cached] = true
      end
      result
    rescue StandardError => e
      # If cache fails, generate fresh data
      result = generate_status_data
      result[:cached] = false
      result[:cache_error] = "Cache error: #{e.message}"
      result
    end
  end
end