Class: Lokilogger::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/lokilogger/client.rb

Overview

the client

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ Client

Returns a new instance of Client.



10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/lokilogger/client.rb', line 10

def initialize config
  @config = config
  check_config

  ssl_options = @config[:ssl_options].nil? ? nil : @config[:ssl_options]
  proxy_options = @config[:proxy_options].nil? ? nil : @config[:proxy_options]
  request_options = {timeout: 10, open_timeout: 10, read_timeout: 10, write_timeout: 10}

  Faraday.default_adapter = :async_http
  @conn = Faraday.new url: @config[:url], headers: {"Content-Type" => "application/json"}, ssl: ssl_options, proxy: proxy_options, request: request_options do |builder|
    builder.request :authorization, :basic, @config[:username], @config[:password] if @config[:username] && @config[:password]
  end
end

Instance Method Details

#check_configObject



24
25
26
27
28
29
# File 'lib/lokilogger/client.rb', line 24

def check_config
  fail ConfigError, "missing/malformed url in config" if !@config[:url] || @config[:url] !~ %r{^(http|https)://}
  fail ConfigError, "missing version in config" unless @config[:version]
  fail ConfigError, "missing tags in config" unless @config[:tags]
  fail ConfigError, "missing log_level in config" unless @config[:log_level]
end

#log_levelObject



31
32
33
# File 'lib/lokilogger/client.rb', line 31

def log_level
  @config[:log_level]
end

#log_level=(log_level) ⇒ Object



35
36
37
# File 'lib/lokilogger/client.rb', line 35

def log_level= log_level
  @config[:log_level] = log_level
end

#request(severity, message, extra_tags) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/lokilogger/client.rb', line 39

def request severity, message, extra_tags
  now = Time.now
  rational_seconds = now.to_r
  timestamp = (rational_seconds * (10**9)).to_i.to_s

  tags = @config[:tags]
  tags = tags.merge extra_tags unless extra_tags.nil?
  tags = tags.merge({severity:})

  Async do
    @conn.post "/loki/api/#{@config[:version]}/push" do |req|
      body = {streams: [{stream: tags, values: [[timestamp, message]]}]}.to_json

      req.body = body
    end
  rescue Faraday::Error => error
    puts error.response[:status]
    puts error.response[:body]
  end
end