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 |