Class: LogBrew::TelemetryResource
- Inherits:
-
Object
- Object
- LogBrew::TelemetryResource
- Defined in:
- lib/logbrew/telemetry_resource.rb
Overview
Immutable service, deployment, runtime, framework, OS, device, and app identity.
Constant Summary collapse
- SECTION_FIELDS =
{ "service" => %w[name version].freeze, "deployment" => %w[environment release].freeze, "runtime" => %w[name version].freeze, "framework" => %w[name version].freeze, "operatingSystem" => %w[name version build].freeze, "device" => %w[family model architecture].freeze, "application" => %w[name version build].freeze }.freeze
- NAME_REQUIRED_SECTIONS =
%w[service runtime framework operatingSystem].freeze
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.create ⇒ Object
17 18 19 |
# File 'lib/logbrew/telemetry_resource.rb', line 17 def self.create TelemetryResourceBuilder.new end |
.from_hash(value = nil, **keywords) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/logbrew/telemetry_resource.rb', line 21 def self.from_hash(value = nil, **keywords) if value.nil? value = keywords elsif !keywords.empty? raise TelemetryContextValue.invalid("telemetry resource must be one object") end object = TelemetryContextValue.object(value, "telemetry resource") TelemetryContextValue.reject_unknown_fields(object, SECTION_FIELDS.keys, "telemetry resource") raise TelemetryContextValue.invalid("telemetry resource must not be empty") if object.empty? normalized = {} SECTION_FIELDS.each do |section_name, fields| next unless object.key?(section_name) section = TelemetryContextValue.object( object.fetch(section_name), "telemetry resource #{section_name}" ) TelemetryContextValue.reject_unknown_fields( section, fields, "telemetry resource #{section_name}" ) normalized_section = {} fields.each do |field| next unless section.key?(field) normalized_section[field] = TelemetryContextValue.required_string( section.fetch(field), "telemetry resource #{section_name} #{field}" ) end if NAME_REQUIRED_SECTIONS.include?(section_name) && !normalized_section.key?("name") raise TelemetryContextValue.invalid("telemetry resource #{section_name} name is required") end if normalized_section.empty? raise TelemetryContextValue.invalid("telemetry resource #{section_name} must not be empty") end normalized[section_name] = normalized_section end new(normalized) end |
.merge(base, override) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/logbrew/telemetry_resource.rb', line 65 def self.merge(base, override) require_resource_or_nil(base, "base telemetry resource") require_resource_or_nil(override, "override telemetry resource") return nil if base.nil? && override.nil? return from_hash(override.to_h) if base.nil? return from_hash(base.to_h) if override.nil? base_value = base.to_h override_value = override.to_h merged = {} SECTION_FIELDS.each_key do |section| base_section = base_value[section] override_section = override_value[section] next if base_section.nil? && override_section.nil? merged[section] = (base_section || {}).merge(override_section || {}) end from_hash(merged) end |
Instance Method Details
#to_h ⇒ Object
85 86 87 |
# File 'lib/logbrew/telemetry_resource.rb', line 85 def to_h TelemetryContextValue.deep_copy(@value) end |