MOON
Server: Apache
System: Linux vps.erhabenn.com.br 3.10.0-1160.119.1.el7.tuxcare.els2.x86_64 #1 SMP Mon Jul 15 12:09:18 UTC 2024 x86_64
User: sonne (1011)
PHP: 8.2.31
Disabled: NONE
Upload Files
File: //opt/microsoft/omsagent/plugin/omslog.rb
module OMS
  class Log
    require 'set'
    require 'digest'
    require_relative 'agent_telemetry_script'

    @@error_proc = Proc.new {|message| $log.error message }
    @@warn_proc  = Proc.new {|message| $log.warn message }
    @@info_proc = Proc.new {|message| $log.info message }
    @@debug_proc = Proc.new {|message| $log.debug message }

    @@logged_hashes = Set.new

    class << self
      def error_once(message, tag=nil)
        log_once(@@error_proc, @@debug_proc, message, tag)
        OMS::Telemetry.push_error_event(message) if defined?(OMS::Telemetry.push_error_event)
      end

      def warn_once(message, tag=nil)
        log_once(@@warn_proc, @@debug_proc, message, tag)
      end

      def info_once(message, tag=nil)
        log_once(@@info_proc, @@debug_proc, message, tag)
      end

      def log_once(first_loglevel_proc, next_loglevel_proc, message, tag=nil)
        # Will log a message once with the first procedure and subsequently with the second
        # This allows repeated messages to be ignored by having the second logging function at a lower log level
        # An optional tag can be used as the message key

        if tag == nil
          tag = message
        end

        sha256_digest = Digest::SHA256.new
        tag_hash = sha256_digest.update(tag).base64digest
        res = @@logged_hashes.add?(tag_hash)

        if res == nil
          # The hash was already in the set
          next_loglevel_proc.call(message)
        else
          # First time we see this hash
          first_loglevel_proc.call(message)
        end
      end
    end # Class methods

  end # Class Log
end # Module OMS