Module: Polyseerio

Defined in:
lib/log.rb,
lib/enum.rb,
lib/client.rb,
lib/helper.rb,
lib/request.rb,
lib/constant.rb,
lib/response.rb,
lib/agent/enum.rb,
lib/middleware.rb,
lib/polyseerio.rb,
lib/sdk/helper.rb,
lib/agent/agent.rb,
lib/sdk/factory.rb,
lib/url_builder.rb,
lib/agent/helper.rb,
lib/resource/base.rb,
lib/agent/executor.rb,
lib/resource/helper.rb,
lib/sdk/method/fact.rb,
lib/sdk/method/save.rb,
lib/sdk/static/find.rb,
lib/resource/factory.rb,
lib/resource/routine.rb,
lib/sdk/method/check.rb,
lib/sdk/method/gauge.rb,
lib/sdk/method/index.rb,
lib/sdk/static/check.rb,
lib/sdk/static/index.rb,
lib/sdk/method/attach.rb,
lib/sdk/method/detach.rb,
lib/sdk/method/remove.rb,
lib/sdk/static/attach.rb,
lib/sdk/static/create.rb,
lib/sdk/static/detach.rb,
lib/sdk/static/remove.rb,
lib/sdk/static/update.rb,
lib/agent/handler/fact.rb,
lib/sdk/method/execute.rb,
lib/sdk/method/message.rb,
lib/sdk/method/to_json.rb,
lib/sdk/method/trigger.rb,
lib/sdk/static/execute.rb,
lib/sdk/static/message.rb,
lib/sdk/static/trigger.rb,
lib/agent/handler/event.rb,
lib/agent/handler/index.rb,
lib/resource/definition.rb,
lib/sdk/method/add_fact.rb,
lib/agent/default_config.rb,
lib/agent/handler/metric.rb,
lib/sdk/method/add_gauge.rb,
lib/agent/handler/process.rb,
lib/sdk/static/find_by_id.rb,
lib/agent/handler/interface.rb,
lib/sdk/static/find_by_name.rb,
lib/agent/handler/expectation.rb

Overview

Default agent configuration.

Defined Under Namespace

Modules: Agent, Constant, Enum, Helper, Middleware, Resource, SDK, URL Classes: Client, Request, Response

Constant Summary collapse

DEFAULT_CLIENT_OPTIONS =

Default client options.

{
  agent:       {},
  deduce:      true,
  env:         Constant::DEFAULT_ENV,
  timeout:     Constant::DEFAULT_TIMEOUT,
  environment: Constant::DEFAULT_ENVIRONMENT,
  token:       nil,
  token_env:   Constant::DEFAULT_TOKEN_ENV,
  upsert_env:  true,
  version:     Constant::DEFAULT_API_VERSION
}.freeze
REQUIRED_RESOURCES =

Required resources for constructing a client.

[
  Enum::Resource::ALERT,
  Enum::Resource::CHANNEL,
  Enum::Resource::ENVIRONMENT,
  Enum::Resource::EVENT,
  Enum::Resource::EXPECTATION,
  Enum::Resource::INSTANCE,
  Enum::Resource::LOGIC_BLOCK,
  Enum::Resource::MEMBER,
  Enum::Resource::SETTING,
  Enum::Resource::TASK
].freeze
CLIENT_RESOURCE_PATHS =

Maps resources to paths within a Client

{
  Enum::Resource::ALERT       => :Alert,
  Enum::Resource::CHANNEL     => :Channel,
  Enum::Resource::ENVIRONMENT => :Environment,
  Enum::Resource::EVENT       => :Event,
  Enum::Resource::EXPECTATION => :Expectation,
  Enum::Resource::INSTANCE    => :Instance,
  Enum::Resource::LOGIC_BLOCK => :LogicBlock,
  Enum::Resource::MEMBER      => :Member,
  Enum::Resource::SETTING     => :Settings,
  Enum::Resource::TASK        => :Task
}.freeze

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.loggerObject

Gem logger.



29
30
31
32
33
34
35
36
37
38
39
# File 'lib/log.rb', line 29

def logger
  @logger ||= Logger.new($stdout).tap do |log|
    log.level = if ENV.key? 'POLYSEERIO_LOG_LEVEL'
                  level_to_severity ENV['POLYSEERIO_LOG_LEVEL']
                else
                  Logger::ERROR
                end

    log.progname = name
  end
end

Class Method Details

.level_to_severity(level) ⇒ Object

Convert a string log level to a severity.



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/log.rb', line 9

def level_to_severity(level) # rubocop:disable all
  case level
  when 'debug'
    Logger::DEBUG
  when 'error'
    Logger::ERROR
  when 'fatal'
    Logger::FATAL
  when 'info'
    Logger::INFO
  when 'unknown'
    Logger::UNKNOWN
  when 'warn'
    Logger::WARN
  else
    raise ArgumentError, "Unsupported log level: #{level}."
  end
end

.log(severity, *args) ⇒ Object

Convenience logging method.



42
43
44
45
46
47
48
49
50
# File 'lib/log.rb', line 42

def log(severity, *args)
  severity = if severity.is_a? String
               level_to_severity severity
             else
               severity
             end

  logger.log(severity, *args)
end

.make(options = {}) ⇒ Object

Create a client.



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
# File 'lib/polyseerio.rb', line 67

def self.make(options = {})
  options = Helper.defaults(options, DEFAULT_CLIENT_OPTIONS)

  cid = @make_call_count

  token = Helper.resolve_token options

  base_url = URL.get_base_url(
    Constant::DEFAULT_API_BASE_URL,
    Constant::DEFAULT_API_PROTOCOL,
    options[:version]
  )

  if token.nil?
    raise ArgumentError, 'Could not find an access token. None was passed' \
      'and non could be found in the environment variable: ' \
      "#{options[:token_env]}."
  end

  headers = {
    Constant::ACCESS_TOKEN_HEADER => token,
    :content_type => 'application/json'
  }

  rest_resource = RestClient::Resource.new(
    base_url,
    headers: headers,
    timeout: Helper.ms_to_seconds(options[:timeout])
  )

  # Create a request instance that uses middleware.
  request = Request.new(
    rest_resource,
    pre: [Middleware::Pre.format_arguments],
    post: [Middleware::Post.to_response, Middleware::Post.parse_response]
  )

  resources = REQUIRED_RESOURCES.each_with_object({}) do |resource, acc|
    acc[resource] = Resource::Factory.make(resource, request, cid, options)

    acc
  end

  resources = Helper.rekey(resources, CLIENT_RESOURCE_PATHS)

  client = Client.new(cid, request: request, resources: resources)

  @make_call_count += 1

  client
end

.start(options = {}) ⇒ Object

Create a client and start it’s agent.



56
57
58
59
60
61
62
# File 'lib/polyseerio.rb', line 56

def self.start(options = {})
  options = Helper.defaults(options, DEFAULT_CLIENT_OPTIONS)

  client = make(options)

  client.start_agent(options[:agent])
end