semlogr/semlogr

View on GitHub
lib/semlogr/events/log_event.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

require 'digest/xxhash'
require 'semlogr/templates/parser'

module Semlogr
  module Events
    class LogEvent
      attr_reader :severity
      attr_reader :template
      attr_reader :error
      attr_reader :properties
      attr_reader :timestamp

      def initialize(severity, template, error: nil, **properties)
        @timestamp = Time.now.utc
        @severity = severity
        @template = template
        @error = error
        @properties = properties
      end

      def self.create(severity, template, properties)
        template = Templates::Parser.parse(template)

        LogEvent.new(severity, template, properties)
      end

      def get_property(name)
        @properties[name]
      end

      def add_property(properties)
        @properties.merge!(properties)
      end

      def add_property_if_absent(properties)
        @properties.merge!(properties) { |_, old, _| old }
      end

      def render(output)
        @template.render(output, @properties)
      end

      def type
        @type ||= Digest::XXH32.hexdigest(@template.text)
      end

      def to_s
        output = +''

        render(output)

        output
      end
    end
  end
end