lib/contrast/agent/telemetry/events/exceptions/telemetry_exception_message.rb in contrast-agent-6.0.0 vs lib/contrast/agent/telemetry/events/exceptions/telemetry_exception_message.rb in contrast-agent-6.1.0

- old
+ new

@@ -1,97 +1,115 @@ # Copyright (c) 2022 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details. # frozen_string_literal: true require_relative 'telemetry_exception_base' require_relative 'telemetry_exception_message_exception' +require 'contrast/utils/telemetry_identifier' module Contrast module Agent - # This class will hold the all the information for the specific exceptions - # and will be passed in the the event to be sent to TS - class TelemetryExceptionMessage < Contrast::Agent::TelemetryExceptionBase - VALIDATIONS = { - instance: { required: true, range: 12..64 }, - tags: { required: true, range: 1..512 }, - logger: { required: false, range: 1..128 }, - message: { required: false, range: 1..512 }, - exceptions: { required: true, range: 1..512, class: Contrast::Agent::TelemetryExceptionMessageException } - }.cs__freeze + module Telemetry + module TelemetryException + # This class will hold the all the information for the specific exceptions + # and will be passed in the the event to be sent to TS + class Message < Contrast::Agent::Telemetry::TelemetryException::Base + VALIDATIONS = { + instance: { required: true, range: 12..64 }, + tags: { required: true, range: 0..512 }, + logger: { required: false, range: 1..128 }, + message: { required: false, range: 1..512 }, + exceptions: { + required: true, + range: 1..512, + class: Contrast::Agent::Telemetry::TelemetryException::MessageException + } + }.cs__freeze - # Timestamp of creation in ISO8601 format - # @return [Integer] - attr_reader :timestamp + # Timestamp of creation in ISO8601 format + # @return [Integer] + attr_reader :timestamp - # An Instance ID as defined in Unique Identification // Application ID - # @return [String] - attr_reader :instance + # An Instance ID as defined in Unique Identification // Application ID + # @return [String] + attr_reader :instance - # Tags are key-value string pairs that annotate either metrics - # or errors to help provide context, filtering, grouping, and deduplication. - # @return [Hash{String => String}] - attr_reader :tags + # Tags are key-value string pairs that annotate either metrics + # or errors to help provide context, filtering, grouping, and deduplication. + # @return [Hash{String => String}] + attr_reader :tags - # @return [Integer] A number of the occurrences of the exception - attr_accessor :occurrences + # @return [Integer] A number of the occurrences of the exception + attr_accessor :occurrences - # Array of exceptions, but in our case the Array will only include one exception - # @return [Array<Contrast::Agent::TelemetryExceptionMessageException>] - attr_reader :exceptions + # Array of exceptions, but in our case the Array will only include one exception + # @return [Array<Contrast::Agent::Telemetry::TelemetryException::MessageException>] + attr_reader :exceptions - # @return [String,nil] A string denoting the origin of this error. - attr_reader :logger + # @return [String,nil] A string denoting the origin of this error. + attr_reader :logger - # @return [String | nil] A string message to provide additional context to the errors. - attr_reader :message + # @return [String | nil] A string message to provide additional context to the errors. + attr_reader :message - def initialize instance, tags, exceptions - super() - @tags = tags - @timestamp = Time.now.iso8601 - @instance = instance - @occurrences = 1 - @exceptions = exceptions - validate VALIDATIONS - end + def initialize instance, tags, exceptions + super() + @tags = tags + @timestamp = Time.now.iso8601 + @instance = instance + @occurrences = 1 + @exceptions = exceptions + validate(VALIDATIONS) + end - # Optional parameters will be set separately from the required - # - # @param logger[String] - def logger= logger - validate_field VALIDATIONS[:logger], 'logger' - @logger = logger - end + # Optional parameters will be set separately from the required + # + # @param logger[String] + def logger= logger + validate_field(VALIDATIONS[:logger], 'logger') + @logger = logger + end - # Optional parameters will be set separately from the required - # - # @param message[String] - def message= message - validate_field VALIDATIONS[:message], 'message' - @message = message - end + # Optional parameters will be set separately from the required + # + # @param message[String] + def message= message + validate_field(VALIDATIONS[:message], 'message') + @message = message + end - # Optional parameters will be set separately from the required - # This method is different and is regarding the way we proceed - # with incrementing occurrences - # If we keep track of them in different places and we store that value - # in separated variable - we may directly re-assign occurrences= - # But if we are not doing that - we may on same message generated - # to increment occurrences from here - def increment_occurrences - @occurrences += 1 - end + # Optional parameters will be set separately from the required + # This method is different and is regarding the way we proceed + # with incrementing occurrences + # If we keep track of them in different places and we store that value + # in separated variable - we may directly re-assign occurrences= + # But if we are not doing that - we may on same message generated + # to increment occurrences from here + def increment_occurrences + @occurrences += 1 + end - def to_controlled_hash - super() - { - timestamp: timestamp, - instance: instance, - occurrences: occurrences, - tags: tags, - exceptions: exceptions.map(&:to_controlled_hash), - logger: logger, - message: message - }.compact + def to_controlled_hash + super() + { + timestamp: timestamp, + instance: instance, + occurrences: occurrences, + tags: tags, + exceptions: exceptions.map(&:to_controlled_hash), + logger: logger, + message: message + }.compact + end + + class << self + def build tags, exceptions, logger = nil, message = nil + inst = new(Contrast::Utils::Telemetry::Identifier.instance_id, tags, exceptions) + inst.logger = logger unless logger.nil? + inst.message = message unless message.nil? + inst + end + end + end end end end end