Sha256: 48d50333f5a58673c96c0e658527022ccdddbe0ee5bfe90472929d7a99f09f0b

Contents?: true

Size: 1.97 KB

Versions: 2

Compression:

Stored size: 1.97 KB

Contents

# frozen_string_literal: true

require 'logger'
require 'json'
require 'httparty'
require 'socket'
require 'time'
require 'yaml'

require 'cronitor/config'
require 'cronitor/error'
require 'cronitor/version'
require 'cronitor/monitor'

module Cronitor
  def self.read_config(path = nil)
    Cronitor.config = path || Cronitor.config
    unless Cronitor.config
      raise ConfigurationError.new(
        "Must include a path by setting Cronitor.config or passing a path to read_config e.g. \
        Cronitor.read_config('./cronitor.yaml')"
      )
    end

    conf = YAML.safe_load(File.read(Cronitor.config))
    conf.each do |k, _v|
      raise ConfigurationError.new("Invalid configuration variable: #{k}") unless Cronitor::YAML_KEYS.include?(k)
    end
    conf
  end

  def self.apply_config(rollback: false)
    conf = read_config
    # allow a significantly longer timeout on requests that are sending full yaml config. min 30 seconds.
    timeout = Cronitor.timeout < 30 ? 30 : Cronitor.timeout
    monitors = Monitor.put(monitors: conf, format: Cronitor::Monitor::Formats::YAML, rollback: rollback,
                           timeout: timeout)
    count = 0
    # step through the different monitor types and count up all the returned configurations
    Cronitor::YAML_KEYS.each do |k|
      count += (monitors[k]&.count || 0)
    end
    puts("#{count} monitors #{rollback ? 'validated' : 'synced to Cronitor'}.")
  rescue ValidationError => e
    Cronitor.logger&.error(e)
  end

  def self.validate_config
    apply_config(rollback: true)
  end

  def self.job(key, &block)
    monitor = Monitor.new(key)
    series = Time.now.to_f
    monitor.ping(state: 'run', series: series)

    begin
      block.call
      monitor.ping(state: 'complete', series: series)
    rescue StandardError => e
      monitor.ping(state: 'fail', message: e.message[[0, e.message.length - 1600].max..-1], series: series)
      raise e
    end
  end

end

Cronitor.read_config(Cronitor.config) unless Cronitor.config.nil?

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
cronitor-5.2.1 lib/cronitor.rb
cronitor-5.2.0 lib/cronitor.rb