Module: Ask::Honeybadger

Defined in:
lib/ask/honeybadger/client.rb,
lib/ask/honeybadger/context.rb,
lib/ask/honeybadger/version.rb,
lib/ask/honeybadger/error_guide.rb

Defined Under Namespace

Modules: Errors Classes: ClientProxy

Constant Summary collapse

BASE_URL =

Base URL for the Honeybadger Data API.

"https://app.honeybadger.io/v2"
DESCRIPTION =

Human-readable description of the Honeybadger service context.

"Honeybadger — error tracking via the Honeybadger API"
DOCS_URL =

Base URL for Honeybadger API documentation.

"https://docs.honeybadger.io/api/"
AUTH_NAME =

Credential name used with Ask::Auth.resolve.

:honeybadger_token
AUTH_HOW =

Instructions for obtaining a Honeybadger API token.

"https://app.honeybadger.io/users/edit"
GEM_NAME =

Gem name for the Honeybadger Ruby integration.

"honeybadger-ruby"
QUICK_START =

Quick-start Ruby code snippet for agents to copy-paste.

<<~RUBY
  client = Ask::Honeybadger.client

  # List faults for a project:
  faults = client.get("/v2/projects/PROJECT_ID/faults")

  # Get fault details:
  fault = client.get("/v2/projects/PROJECT_ID/faults/FAULT_ID")

  # List projects:
  projects = client.get("/v2/projects")

  # Convenience helpers:
  Ask::Honeybadger.recent_faults(project_id: "PROJECT_ID", limit: 10)
  Ask::Honeybadger.fault_summary(project_id: "PROJECT_ID")
RUBY
VERSION =
"0.1.0"

Class Method Summary collapse

Class Method Details

.clientFaraday::Connection

Returns an authenticated Faraday client for the Honeybadger Data API.

Resolves the Honeybadger API token via Ask::Auth.resolve(:honeybadger_token) and configures the client with sensible defaults:

  • request: JSON encoding

  • response: JSON decoding

  • retry: Faraday retry middleware (3 retries, exponential backoff)

  • auth: HTTP Basic Auth with token as username and blank password

The client is wrapped in a ClientProxy that converts Faraday::UnauthorizedError into Ask::Auth::InvalidCredential.

Examples:

client = Ask::Honeybadger.client
client.get("/v2/projects/ID/faults")

Returns:

  • (Faraday::Connection)

    an authenticated HTTP client

Raises:

  • (Ask::Auth::MissingCredential)

    if no Honeybadger token is configured

  • (Ask::Auth::InvalidCredential)

    if the token is rejected (401)



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/ask/honeybadger/client.rb', line 32

def self.client
  token = Ask::Auth.resolve(:honeybadger_token)

  conn = Faraday.new(url: BASE_URL) do |f|
    # HTTP Basic Auth: token is the username, password is blank
    f.request :authorization, :basic, token, ""

    # JSON request/response handling
    f.request :json
    f.response :json

    # Retry middleware for transient failures
    f.request :retry, max: 3, interval: 1, backoff_factor: 2,
                      retry_statuses: [429, 500, 502, 503]

    f.adapter Faraday.default_adapter
  end

  ClientProxy.new(conn)
end

.fault(project_id:, fault_id:) ⇒ Hash

Convenience: fetch a single fault by ID.

Parameters:

  • project_id (String, Integer)

    The Honeybadger project ID

  • fault_id (String, Integer)

    The fault ID

Returns:

  • (Hash)

    Fault details



78
79
80
# File 'lib/ask/honeybadger/client.rb', line 78

def self.fault(project_id:, fault_id:)
  client.get("/v2/projects/#{project_id}/faults/#{fault_id}").body
end

.fault_summary(project_id:, **params) ⇒ Hash

Convenience: get a fault summary (counts grouped by environment, status, etc.).

Parameters:

  • project_id (String, Integer)

    The Honeybadger project ID

  • params (Hash)

    Additional query parameters

Returns:

  • (Hash)

    Fault summary with counts



69
70
71
# File 'lib/ask/honeybadger/client.rb', line 69

def self.fault_summary(project_id:, **params)
  client.get("/v2/projects/#{project_id}/faults/summary", params).body
end

.projectsHash

Convenience: list all projects accessible with this token.

Returns:

  • (Hash)

    Response with results array and links



85
86
87
# File 'lib/ask/honeybadger/client.rb', line 85

def self.projects
  client.get("/v2/projects").body
end

.recent_faults(project_id:, limit: 25, **params) ⇒ Hash

Convenience: fetch recent faults for a project.

Parameters:

  • project_id (String, Integer)

    The Honeybadger project ID

  • limit (Integer) (defaults to: 25)

    Number of faults to return (max 25)

  • params (Hash)

    Additional query parameters (q, order, environment, etc.)

Returns:

  • (Hash)

    Response with results array and links



59
60
61
62
# File 'lib/ask/honeybadger/client.rb', line 59

def self.recent_faults(project_id:, limit: 25, **params)
  params[:limit] = limit
  client.get("/v2/projects/#{project_id}/faults", params).body
end