class Appsignal::EventFormatter
@api private
argument if you need to use helper methods.
So only keep global configuration as state and pass the payload around as an
event, the same object will be called intermittently in a threaded environment.
When implementing a formatter remember that it cannot keep separate state per
and body.
and implement a format(payload) method which returns an array with the title
the title and body of an event. Formatters should inherit from this class
Keeps track of formatters for types event that we can use to get
def deprecated_formatter_classes
def deprecated_formatter_classes @@deprecated_formatter_classes ||= {} end
def format(name, payload)
def format(name, payload) formatter = formatters[name] formatter.format(payload) unless formatter.nil? end
def formatter_classes
def formatter_classes @@formatter_classes ||= {} end
def formatters
def formatters @@formatters ||= {} end
def initialize_deprecated_formatters
def initialize_deprecated_formatters deprecated_formatter_classes.each do |name, formatter| register(name, formatter) end end
def initialize_formatter(name, formatter)
def initialize_formatter(name, formatter) format_method = formatter.instance_method(:format) if !format_method || format_method.arity != 1 raise "#{formatter} does not have a format(payload) method" end formatter_classes[name] = formatter formatters[name] = formatter.new rescue => ex formatter_classes.delete(name) formatters.delete(name) logger.error("'#{ex.message}' when initializing #{name} event formatter") end
def logger
def logger Appsignal.logger end
def register(name, formatter = nil)
def register(name, formatter = nil) unless formatter register_deprecated_formatter(name) return end if registered?(name, formatter) logger.warn( "Formatter for '#{name}' already registered, not registering "\ "'#{formatter.name}'" ) return end initialize_formatter name, formatter end
def register_deprecated_formatter(name)
def register_deprecated_formatter(name) deprecation_message \ "Formatter for '#{name}' is using a deprecated registration " \ "method. This event formatter will not be loaded. " \ "Please update the formatter according to the documentation at: " \ "https://docs.appsignal.com/ruby/instrumentation/event-formatters.html", logger deprecated_formatter_classes[name] = self end
def registered?(name, klass = nil)
def registered?(name, klass = nil) if klass formatter_classes[name] == klass else formatter_classes.include?(name) end end
def unregister(name, formatter = self)
def unregister(name, formatter = self) return unless formatter_classes[name] == formatter formatter_classes.delete(name) formatters.delete(name) end