Class: RakeAudit::Adapters::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/rake_audit/adapters/base.rb

Overview

Abstract storage adapter defining the full persistence and query contract.

Every concrete adapter must implement #save. Adapters that back the Web UI must also implement the six query methods below; the default implementations raise NotImplementedError so omissions surface loudly.

Direct Known Subclasses

ActiveRecordAdapter, MongoAdapter, RedisAdapter

Instance Method Summary collapse

Instance Method Details

#average_duration_msFloat?

Mean duration_ms across all stored executions, or nil when empty.

Returns:

  • (Float, nil)

Raises:

  • (NotImplementedError)

    when not overridden.



61
62
63
# File 'lib/rake_audit/adapters/base.rb', line 61

def average_duration_ms
  raise NotImplementedError, "#{self.class}#average_duration_ms is not implemented"
end

#countInteger

Total number of stored executions.

Returns:

  • (Integer)

Raises:

  • (NotImplementedError)

    when not overridden.



44
45
46
# File 'lib/rake_audit/adapters/base.rb', line 44

def count
  raise NotImplementedError, "#{self.class}#count is not implemented"
end

#count_by_status(status) ⇒ Integer

Number of executions whose status equals status.

Parameters:

  • status (String)

    e.g. "success" or "failure".

Returns:

  • (Integer)

Raises:

  • (NotImplementedError)

    when not overridden.



53
54
55
# File 'lib/rake_audit/adapters/base.rb', line 53

def count_by_status(status)
  raise NotImplementedError, "#{self.class}#count_by_status is not implemented"
end

#find(id) ⇒ Object

Return a single execution record by ID.

Parameters:

  • id (String, Integer)

    adapter-specific identifier.

Raises:



36
37
38
# File 'lib/rake_audit/adapters/base.rb', line 36

def find(id)
  raise NotImplementedError, "#{self.class}#find is not implemented"
end

#query(filters: {}, page: nil, per_page: 25) ⇒ Object

Return a kaminari-paginated, filtered, newest-first collection.

Parameters:

  • filters (Hash) (defaults to: {})

    any subset of: :task_name, :status, :hostname, :rails_env, :from, :to (all pre-validated, non-blank values only — blank keys are never present).

  • page (Integer, String, nil) (defaults to: nil)

    1-based page number.

  • per_page (Integer) (defaults to: 25)

    records per page.

Raises:

  • (NotImplementedError)

    when not overridden.



27
28
29
# File 'lib/rake_audit/adapters/base.rb', line 27

def query(filters: {}, page: nil, per_page: 25)
  raise NotImplementedError, "#{self.class}#query is not implemented"
end

#save(record) ⇒ Object

Persist a TaskExecutionRecord.

Parameters:

Raises:

  • (NotImplementedError)

    when not overridden.



15
16
17
# File 'lib/rake_audit/adapters/base.rb', line 15

def save(record)
  raise NotImplementedError, "#{self.class}#save is not implemented"
end

#statsHash

All five dashboard metrics in a single call.

The default implementation delegates to the five individual methods, which is efficient for SQL-backed adapters (five fast queries). Adapters whose individual methods are expensive (e.g. Redis, which reads the full list per call) should override this to compute everything in one pass.

Returns:

  • (Hash)

    with keys :total, :success_count, :failure_count, :average_duration_ms, :top_failed_tasks.



83
84
85
86
87
88
89
90
91
# File 'lib/rake_audit/adapters/base.rb', line 83

def stats
  {
    total: count,
    success_count: count_by_status('success'),
    failure_count: count_by_status('failure'),
    average_duration_ms: average_duration_ms,
    top_failed_tasks: top_failed_tasks
  }
end

#top_failed_tasks(limit: 10) ⇒ Array<Array(String, Integer)>

The limit task names with the most failures, ordered descending.

Parameters:

  • limit (Integer) (defaults to: 10)

Returns:

  • (Array<Array(String, Integer)>)

    e.g. [[“db:migrate”, 5], …]

Raises:

  • (NotImplementedError)

    when not overridden.



70
71
72
# File 'lib/rake_audit/adapters/base.rb', line 70

def top_failed_tasks(limit: 10)
  raise NotImplementedError, "#{self.class}#top_failed_tasks is not implemented"
end