Skip to content

Commit

Permalink
feat: Implement Logs Bridge API
Browse files Browse the repository at this point in the history
This provides an interface for:
* LoggerProvider
* Logger
* LogRecord

This API will be consumed by the forthcoming Logs SDK.
Follows specification v 1.23.0.
  • Loading branch information
kaylareopelle committed Aug 3, 2023
1 parent ccad50f commit 700ca29
Show file tree
Hide file tree
Showing 11 changed files with 146 additions and 12 deletions.
1 change: 1 addition & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ jobs:
gem:
- opentelemetry-api
- opentelemetry-common
- opentelemetry-logs-api
- opentelemetry-metrics-api
- opentelemetry-registry
- opentelemetry-sdk
Expand Down
1 change: 1 addition & 0 deletions logs_api/lib/opentelemetry-logs-api.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@
#
# SPDX-License-Identifier: Apache-2.0

require 'opentelemetry'
require_relative 'opentelemetry/logs'
require_relative 'opentelemetry/logs/version'
8 changes: 6 additions & 2 deletions logs_api/lib/opentelemetry/logs.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,14 @@
#
# SPDX-License-Identifier: Apache-2.0

require 'opentelemetry'
require_relative 'logs/log_record'
require_relative 'logs/logger_provider'
require_relative 'logs/logger'

module OpenTelemetry
# OpenTelemetry Logs API
# The Logs API records a timestamped record with metadata.
# In OpenTelemetry, any data that is not part of a distributed trace or a
# metric is a log. For example, events are a specific type of log.
module Logs
end
end
12 changes: 12 additions & 0 deletions logs_api/lib/opentelemetry/logs/log_record.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# frozen_string_literal: true

# Copyright The OpenTelemetry Authors
#
# SPDX-License-Identifier: Apache-2.0

module OpenTelemetry
module Logs
# No-op implementation of an emitted log and its associated attributes
class LogRecord; end
end
end
48 changes: 48 additions & 0 deletions logs_api/lib/opentelemetry/logs/logger.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# frozen_string_literal: true

# Copyright The OpenTelemetry Authors
#
# SPDX-License-Identifier: Apache-2.0

module OpenTelemetry
module Logs
# No-op implementation of logger.
class Logger
# Create a {LogRecord}
#
# @param timestamp [optional Float, Time] Time in nanoseconds since Unix
# epoch when the event occurred measured by the origin clock, i.e. the
# time at the source.
# @param observed_timestamp [optional Float, Time] Time in nanoseconds
# since Unix epoch when the event was observed by the collection system.
# Defaults to +Process.clock_gettime(Process::CLOCK_REALTIME)+.
# @param context [optional Context] The Context to associate with the
# LogRecord. Defaults to +OpenTelemetry::Context.current+.
# @param severity_number [optional Integer] Numerical value of the
# severity. Smaller numerical values correspond to less severe events
# (such as debug events), larger numerical values correspond to more
# severe events (such as errors and critical events).
# @param severity_text [optional String] Original string representation of
# the severity as it is known at the source. Also known as log level.
# @param body [optional String, Numeric, Boolean, Array<String, Numeric,
# Boolean>, Hash{String => String, Numeric, Boolean, Array<String,
# Numeric, Boolean>}] A value containing the body of the log record.
# @param attributes [optional Hash{String => String, Numeric, Boolean,
# Array<String, Numeric, Boolean>}] Additional information about the
# event.
#
# @api public
def create_log_record(
timestamp: nil,
observed_timestamp: Process.clock_gettime(Process::CLOCK_REALTIME),
context: OpenTelemetry::Context.current,
severity_number: nil,
severity_text: nil,
body: nil,
attributes: nil
)
LogRecord.new
end
end
end
end
27 changes: 27 additions & 0 deletions logs_api/lib/opentelemetry/logs/logger_provider.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# frozen_string_literal: true

# Copyright The OpenTelemetry Authors
#
# SPDX-License-Identifier: Apache-2.0

module OpenTelemetry
module Logs
# No-op implementation of a logger provider
class LoggerProvider
# Returns a {Logger} instance.
#
# @param name [optional String] Instrumentation package name
# @param version [optional String] Instrumentation package version
# @param schema_url [optional String] Schema URL recorded in the emitted telemetry.
# @param attributes [optional Hash] Specifies the instrumentation scope
# attributes to associate with emitted telemetry.
#
# @return [OpenTelemetry::Logs::Logger]
#
# @api public
def logger(name: nil, version: nil, schema_url: nil, attributes: {})
@logger ||= OpenTelemetry::Logs::Logger.new
end
end
end
end
8 changes: 4 additions & 4 deletions logs_api/opentelemetry-logs-api.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,12 @@ Gem::Specification.new do |spec|
spec.add_dependency 'opentelemetry-api', '~> 1.0'

spec.add_development_dependency 'bundler', '>= 1.17'
spec.add_development_dependency 'minitest', '~> 5.0'
spec.add_development_dependency 'minitest', '~> 5.19'
spec.add_development_dependency 'rake', '~> 12.0'
spec.add_development_dependency 'rubocop', '~> 1.3'
spec.add_development_dependency 'simplecov', '~> 0.17'
spec.add_development_dependency 'rubocop', '~> 1.55'
spec.add_development_dependency 'simplecov', '~> 0.22'
spec.add_development_dependency 'yard', '~> 0.9'
spec.add_development_dependency 'yard-doctest', '~> 0.1.6'
spec.add_development_dependency 'yard-doctest', '~> 0.1'

if spec.respond_to?(:metadata)
spec.metadata['changelog_uri'] = "https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-logs-api/v#{OpenTelemetry::Logs::VERSION}/file.CHANGELOG.html"
Expand Down
8 changes: 8 additions & 0 deletions logs_api/test/.rubocop.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
inherit_from: ../.rubocop.yml

Metrics/BlockLength:
Enabled: false
Metrics/LineLength:
Enabled: false
Metrics/AbcSize:
Enabled: false
20 changes: 20 additions & 0 deletions logs_api/test/opentelemetry/logs/logger_provider_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# frozen_string_literal: true

# Copyright The OpenTelemetry Authors
#
# SPDX-License-Identifier: Apache-2.0

require 'test_helper'

describe OpenTelemetry::Logs::LoggerProvider do
let(:logger_provider) { OpenTelemetry::Logs::LoggerProvider.new }
let(:args) { { name: 'component', version: '1.0', schema_url: 'schema_url', attributes: { a: 1 } } }

describe '#logger' do
it 'returns the same logger for the same arguments' do
logger1 = logger_provider.logger(**args)
logger2 = logger_provider.logger(**args)
assert_same(logger1, logger2)
end
end
end
17 changes: 17 additions & 0 deletions logs_api/test/opentelemetry/logs/logger_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# frozen_string_literal: true

# Copyright The OpenTelemetry Authors
#
# SPDX-License-Identifier: Apache-2.0

require 'test_helper'

describe OpenTelemetry::Logs::Logger do
let(:logger) { OpenTelemetry::Logs::Logger.new }

describe '#create_log_record' do
it 'creates a new LogRecord' do
assert_instance_of(OpenTelemetry::Logs::LogRecord, logger.create_log_record)
end
end
end
8 changes: 2 additions & 6 deletions logs_api/test/test_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,8 @@
# SPDX-License-Identifier: Apache-2.0

require 'simplecov'
SimpleCov.start
SimpleCov.start { enable_coverage :branch }
SimpleCov.minimum_coverage 85

require 'opentelemetry-test-helpers'
require 'opentelemetry-metrics-api'
require 'opentelemetry-logs-api'
require 'minitest/autorun'
require 'pry'

OpenTelemetry.logger = Logger.new(File::NULL)

0 comments on commit 700ca29

Please sign in to comment.