class Google::Cloud::Logging::Service

@private Represents the gRPC Logging service, including all the API methods.

Attributes

credentials[RW]
host[RW]
mocked_logging[RW]
mocked_metrics[RW]
mocked_sinks[RW]
project[RW]
timeout[RW]

Public Class Methods

new(project, credentials, timeout: nil, host: nil) click to toggle source

Creates a new Service instance.

# File lib/google/cloud/logging/service.rb, line 35
def initialize project, credentials, timeout: nil, host: nil
  @project = project
  @credentials = credentials
  @timeout = timeout
  @host = host
end

Public Instance Methods

create_metric(name, filter, description) click to toggle source
# File lib/google/cloud/logging/service.rb, line 171
def create_metric name, filter, description
  metric = Google::Cloud::Logging::V2::LogMetric.new(
    { name: name, description: description,
      filter: filter }.delete_if { |_, v| v.nil? }
  )
  metrics.create_log_metric parent: project_path, metric: metric
end
create_sink(name, destination, filter, unique_writer_identity: nil) click to toggle source
# File lib/google/cloud/logging/service.rb, line 134
def create_sink name, destination, filter, unique_writer_identity: nil
  sink = Google::Cloud::Logging::V2::LogSink.new(
    {
      name: name, destination: destination, filter: filter
    }.delete_if { |_, v| v.nil? }
  )
  sinks.create_sink parent:                 project_path,
                    sink:                   sink,
                    unique_writer_identity: unique_writer_identity
end
delete_log(name) click to toggle source
# File lib/google/cloud/logging/service.rb, line 121
def delete_log name
  logging.delete_log log_name: log_path(name)
end
delete_metric(name) click to toggle source
# File lib/google/cloud/logging/service.rb, line 191
def delete_metric name
  metrics.delete_log_metric metric_name: metric_path(name)
end
delete_sink(name) click to toggle source
# File lib/google/cloud/logging/service.rb, line 160
def delete_sink name
  sinks.delete_sink sink_name: sink_path(name)
end
get_metric(name) click to toggle source
# File lib/google/cloud/logging/service.rb, line 179
def get_metric name
  metrics.get_log_metric metric_name: metric_path(name)
end
get_sink(name) click to toggle source
# File lib/google/cloud/logging/service.rb, line 145
def get_sink name
  sinks.get_sink sink_name: sink_path(name)
end
inspect() click to toggle source
# File lib/google/cloud/logging/service.rb, line 202
def inspect
  "#{self.class}(#{@project})"
end
list_entries(resources: nil, filter: nil, order: nil, token: nil, max: nil, projects: nil) click to toggle source
# File lib/google/cloud/logging/service.rb, line 84
def list_entries resources: nil, filter: nil, order: nil, token: nil,
                 max: nil, projects: nil

  project_ids = Array(projects).map { |p| "projects/#{p}" }
  resource_names = Array(resources) + project_ids
  resource_names = ["projects/#{@project}"] if resource_names.empty?
  paged_enum = logging.list_log_entries resource_names: resource_names,
                                        filter:         filter,
                                        order_by:       order,
                                        page_size:      max,
                                        page_token:     token
  paged_enum.response
end
list_logs(resource: nil, token: nil, max: nil) click to toggle source
# File lib/google/cloud/logging/service.rb, line 113
def list_logs resource: nil, token: nil, max: nil
  parent = resource || "projects/#{@project}"
  paged_enum = logging.list_logs parent:     parent,
                                 page_size:  max,
                                 page_token: token
  paged_enum.response
end
list_metrics(token: nil, max: nil) click to toggle source
# File lib/google/cloud/logging/service.rb, line 164
def list_metrics token: nil, max: nil
  paged_enum = metrics.list_log_metrics parent:     project_path,
                                        page_size:  max,
                                        page_token: token
  paged_enum.response
end
list_resource_descriptors(token: nil, max: nil) click to toggle source
# File lib/google/cloud/logging/service.rb, line 125
def list_resource_descriptors token: nil, max: nil
  logging.list_monitored_resource_descriptors page_size: max, page_token: token
end
list_sinks(token: nil, max: nil) click to toggle source
# File lib/google/cloud/logging/service.rb, line 129
def list_sinks token: nil, max: nil
  paged_enum = sinks.list_sinks parent: project_path, page_size: max, page_token: token
  paged_enum.response
end
log_path(log_name) click to toggle source
# File lib/google/cloud/logging/service.rb, line 195
def log_path log_name
  return nil if log_name.nil?
  return log_name if log_name.empty?
  return log_name if log_name.to_s.include? "/"
  "#{project_path}/logs/#{log_name}"
end
logging() click to toggle source
# File lib/google/cloud/logging/service.rb, line 42
def logging
  return mocked_logging if mocked_logging
  @logging ||= \
    V2::LoggingService::Client.new do |config|
      config.credentials = credentials if credentials
      config.timeout = timeout if timeout
      config.endpoint = host if host
      config.lib_name = "gccl"
      config.lib_version = Google::Cloud::Logging::VERSION
      config.metadata = { "google-cloud-resource-prefix" => "projects/#{@project}" }
    end
end
metrics() click to toggle source
# File lib/google/cloud/logging/service.rb, line 70
def metrics
  return mocked_metrics if mocked_metrics
  @metrics ||= \
    V2::MetricsService::Client.new do |config|
      config.credentials = credentials if credentials
      config.timeout = timeout if timeout
      config.endpoint = host if host
      config.lib_name = "gccl"
      config.lib_version = Google::Cloud::Logging::VERSION
      config.metadata = { "google-cloud-resource-prefix" => "projects/#{@project}" }
    end
end
sinks() click to toggle source
# File lib/google/cloud/logging/service.rb, line 56
def sinks
  return mocked_sinks if mocked_sinks
  @sinks ||= \
    V2::ConfigService::Client.new do |config|
      config.credentials = credentials if credentials
      config.timeout = timeout if timeout
      config.endpoint = host if host
      config.lib_name = "gccl"
      config.lib_version = Google::Cloud::Logging::VERSION
      config.metadata = { "google-cloud-resource-prefix" => "projects/#{@project}" }
    end
end
update_metric(name, description, filter) click to toggle source
# File lib/google/cloud/logging/service.rb, line 183
def update_metric name, description, filter
  metric = Google::Cloud::Logging::V2::LogMetric.new(
    { name: name, description: description,
      filter: filter }.delete_if { |_, v| v.nil? }
  )
  metrics.update_log_metric metric_name: metric_path(name), metric: metric
end
update_sink(name, destination, filter, unique_writer_identity: nil) click to toggle source
# File lib/google/cloud/logging/service.rb, line 149
def update_sink name, destination, filter, unique_writer_identity: nil
  sink = Google::Cloud::Logging::V2::LogSink.new(
    {
      name: name, destination: destination, filter: filter
    }.delete_if { |_, v| v.nil? }
  )
  sinks.update_sink sink_name:              sink_path(name),
                    sink:                   sink,
                    unique_writer_identity: unique_writer_identity
end
write_entries(entries, log_name: nil, resource: nil, labels: nil, partial_success: nil) click to toggle source
# File lib/google/cloud/logging/service.rb, line 98
def write_entries entries, log_name: nil, resource: nil, labels: nil,
                  partial_success: nil
  # Fix log names so they are the full path
  entries = Array(entries).each do |entry|
    entry.log_name = log_path entry.log_name
  end
  resource = resource.to_grpc if resource
  labels = Hash[labels.map { |k, v| [String(k), String(v)] }] if labels
  logging.write_log_entries entries:         entries,
                            log_name:        log_path(log_name),
                            resource:        resource,
                            labels:          labels,
                            partial_success: partial_success
end

Protected Instance Methods

metric_path(metric_name) click to toggle source
# File lib/google/cloud/logging/service.rb, line 217
def metric_path metric_name
  return metric_name if metric_name.to_s.include? "/"
  "#{project_path}/metrics/#{metric_name}"
end
project_path() click to toggle source
# File lib/google/cloud/logging/service.rb, line 208
def project_path
  "projects/#{@project}"
end
sink_path(sink_name) click to toggle source
# File lib/google/cloud/logging/service.rb, line 212
def sink_path sink_name
  return sink_name if sink_name.to_s.include? "/"
  "#{project_path}/sinks/#{sink_name}"
end
time_to_timestamp(time) click to toggle source

@private Get a Google::Protobuf::Timestamp object from a Time object.

# File lib/google/cloud/logging/service.rb, line 224
def time_to_timestamp time
  return nil if time.nil?
  # Make sure we have a Time object
  return nil unless time.respond_to? :to_time
  time = time.to_time
  Google::Protobuf::Timestamp.new seconds: time.to_i, nanos: time.nsec
end
timestamp_to_time(timestamp) click to toggle source

@private Get a Time object from a Google::Protobuf::Timestamp object.

# File lib/google/cloud/logging/service.rb, line 234
def timestamp_to_time timestamp
  return nil if timestamp.nil?
  # Time.at takes microseconds, so convert nano seconds to microseconds
  Time.at timestamp.seconds, Rational(timestamp.nanos, 1000)
end