Module: Grafana::Login

Included in:
Client
Defined in:
lib/grafana/login.rb

Overview

Abstract base class for Login.

Instance Method Summary collapse

Instance Method Details

#headersObject



140
141
142
# File 'lib/grafana/login.rb', line 140

def headers
  @headers
end

#login(params) ⇒ Hash

Login into Grafana

Examples:

( username: 'admin', password: 'admin' )
( username: 'admin', password: 'admin', max_retries: 10, sleep_between_retries: 8 )

Parameters:

Options Hash (params):

  • username (String)

    username for the login

  • password (String)

    password for the login

  • max_retries (Integer) — default: 2

    maximum retries

  • sleep_between_retries (Integer) — default: 5

    sleep seconds between retries

Returns:

Raises:

  • (ArgumentError)


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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/grafana/login.rb', line 22

def ( params )

  raise ArgumentError.new(format('wrong type. \'params\' must be an Hash, given \'%s\'', params.class.to_s)) unless( params.is_a?(Hash) )
  raise ArgumentError.new('missing params') if( params.size.zero? )

  username = validate( params, required: true, var: 'username', type: String )
  password = validate( params, required: true, var: 'password', type: String )
  max_retries = validate( params, required: false, var: 'max_retries', type: Integer ) || 2
  sleep_between_retries = validate( params, required: false, var: 'sleep_between_retries', type: Integer ) || 5

  begin
    @api_instance = RestClient::Resource.new(
      @url,
      timeout: @timeout.to_i,
      open_timeout: @open_timeout.to_i,
      headers: @http_headers,
      verify_ssl: false
    )
  rescue => e
    logger.error( e ) if @debug
    logger.debug( e.backtrace.join("\n") ) if @debug
    false
  end

  request_data = { 'User' => username, 'Password' => password }

  if( @api_instance )
    retried ||= 0
    response_cookies  = ''
    @headers          = {}

    begin
      logger.debug('Attempting to establish user session') if @debug

      response = @api_instance['/login'].post(
        request_data.to_json,
        content_type: 'application/json; charset=UTF-8'
      )

      response_cookies  = response.cookies
      response_code     = response.code.to_i

      if( response_code == 200 )
        @headers = {
          content_type: 'application/json',
          accept: 'application/json',
          cookies: response_cookies
        }
        @username = username
        @password = password
      end

    rescue SocketError
      raise format( 'Maximum retries (%d) against \'%s/login\' reached. Giving up ...', max_retries, @url ) unless( retried < max_retries )

      retried += 1
      logger.debug( format( 'cannot login, socket error (retry %d / %d)', retried, max_retries ) ) if @debug
      sleep( sleep_between_retries )
      retry

    rescue RestClient::Unauthorized
      logger.debug( request_data.to_json ) if @debug
      raise format( 'Not authorized to connect \'%s\' - wrong username or password?', @url )

    rescue RestClient::BadGateway
      raise format( 'Maximum retries (%d) against \'%s/login\' reached. Giving up ...', max_retries, @url ) unless( retried < max_retries )

      retried += 1
      logger.debug( format( 'cannot login, connection refused (retry %d / %d)', retried, max_retries ) ) if @debug
      sleep( sleep_between_retries )
      retry

    rescue Errno::ECONNREFUSED
      raise format( 'Maximum retries (%d) against \'%s/login\' reached. Giving up ...', max_retries, @url ) unless( retried < max_retries )

      retried += 1
      logger.debug( format( 'cannot login, connection refused (retry %d / %d)', retried, max_retries ) ) if @debug
      sleep( sleep_between_retries )
      retry

    rescue Errno::EHOSTUNREACH
      raise format( 'Maximum retries (%d) against \'%s/login\' reached. Giving up ...', max_retries, @url ) unless( retried < max_retries )

      retried += 1
      logger.debug( format( 'cannot login, host unreachable (retry %d / %d)', retried, max_retries ) ) if @debug
      sleep( sleep_between_retries )
      retry

    rescue => error
      raise format( 'Maximum retries (%d) against \'%s/login\' reached. Giving up ...', max_retries, @url ) unless( retried < max_retries )

      retried += 1
      logger.error( error )
      logger.debug( format( 'cannot login (retry %d / %d)', retried, max_retries ) ) if @debug
      sleep( sleep_between_retries )
      retry
    end

    logger.debug('User session initiated') if @debug
    return true
  end
  false
end

#ping_sessionHash

Renew session based on remember cookie

Examples:

ping_session

Returns:



133
134
135
136
137
# File 'lib/grafana/login.rb', line 133

def ping_session
  endpoint = '/api/login/ping'
  logger.debug( "Pinging current session (GET #{endpoint})" ) if @debug
  get( endpoint )
end