Module: QueryGuard

Defined in:
lib/query_guard.rb,
lib/query_guard.rb,
lib/query_guard/cli.rb,
lib/query_guard/rspec.rb,
lib/query_guard/store.rb,
lib/query_guard/trace.rb,
lib/query_guard/budget.rb,
lib/query_guard/client.rb,
lib/query_guard/config.rb,
lib/query_guard/publish.rb,
lib/query_guard/version.rb,
lib/query_guard/exporter.rb,
lib/query_guard/security.rb,
lib/query_guard/core/query.rb,
lib/query_guard/middleware.rb,
lib/query_guard/subscriber.rb,
lib/query_guard/cli/command.rb,
lib/query_guard/fingerprint.rb,
lib/query_guard/core/context.rb,
lib/query_guard/core/finding.rb,
lib/query_guard/cli/formatter.rb,
lib/query_guard/analyzers/base.rb,
lib/query_guard/cli/json_reporter.rb,
lib/query_guard/uploader/registry.rb,
lib/query_guard/analyzers/registry.rb,
lib/query_guard/cli/commands/check.rb,
lib/query_guard/uploader/interface.rb,
lib/query_guard/analysis/risk_level.rb,
lib/query_guard/cli/commands/analyze.rb,
lib/query_guard/explain/plan_signals.rb,
lib/query_guard/core/finding_builders.rb,
lib/query_guard/uploader/http_uploader.rb,
lib/query_guard/analysis/risk_detectors.rb,
lib/query_guard/suggest/index_suggester.rb,
lib/query_guard/uploader/no_op_uploader.rb,
lib/query_guard/uploader/upload_service.rb,
lib/query_guard/explain/explain_enricher.rb,
lib/query_guard/explain/adapter_interface.rb,
lib/query_guard/cli/batch_report_formatter.rb,
lib/query_guard/cli/paged_report_formatter.rb,
lib/query_guard/explain/postgresql_adapter.rb,
lib/query_guard/suggest/pattern_extractors.rb,
lib/query_guard/migrations/database_adapter.rb,
lib/query_guard/action_controller_subscriber.rb,
lib/query_guard/analyzers/query_risk_analyzer.rb,
lib/query_guard/analyzers/slow_query_analyzer.rb,
lib/query_guard/cli/source_metadata_collector.rb,
lib/query_guard/migrations/migration_analyzer.rb,
lib/query_guard/migrations/postgresql_adapter.rb,
lib/query_guard/analysis/query_risk_classifier.rb,
lib/query_guard/analyzers/query_count_analyzer.rb,
lib/query_guard/analyzers/select_star_analyzer.rb,
lib/query_guard/migrations/table_risk_analyzer.rb,
lib/query_guard/migrations/table_size_resolver.rb,
lib/query_guard/migrations/migration_risk_detectors.rb

Defined Under Namespace

Modules: ActionControllerSubscriber, Analysis, Analyzers, Core, Explain, Fingerprint, Migrations, RSpec, Security, Subscriber, Suggest, Trace, Uploader Classes: Budget, CLI, Client, Config, Error, Exporter, Middleware, Railtie, Store

Constant Summary collapse

VERSION =
"0.5.2"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.client ⇒ Object

Returns the value of attribute client.



54
55
56
# File 'lib/query_guard.rb', line 54

def client
  @client
end

Class Method Details

.buffer ⇒ Object

thread-local queue for the current request



17
# File 'lib/query_guard/publish.rb', line 17

def buffer; Thread.current[:qg_buf] ||= [] end

.clear! ⇒ Object



18
# File 'lib/query_guard/publish.rb', line 18

def clear!; Thread.current[:qg_buf]  = []  end

.config ⇒ Object



56
57
58
# File 'lib/query_guard.rb', line 56

def config
  @config ||= Config.new
end

.configure {|config| ... } ⇒ Object

Yields:



60
61
62
63
64
65
66
67
68
69
# File 'lib/query_guard.rb', line 60

def configure
  yield(config)
  @client = Client.new(
    base_url: config.base_url,
    api_key:  config.api_key,
    project:  config.project,
    env:      config.env
  )
  self
end

.exporter ⇒ Object



85
86
87
# File 'lib/query_guard.rb', line 85

def exporter
  @exporter ||= QueryGuard::Exporter.new(config)
end

.flush_now! ⇒ Object



25
26
27
28
29
30
# File 'lib/query_guard/publish.rb', line 25

def flush_now!
  return if buffer.empty?
  client.post("/api/v1/events", { events: buffer.dup })
ensure
  clear!
end

.install!(app = nil) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/query_guard.rb', line 71

def install!(app = nil)
  config
  Subscriber.install!(config)
  ActionControllerSubscriber.install!(config)

  if defined?(Rails) && Rails.respond_to?(:application) && Rails.application
    Rails.application.config.middleware.use(QueryGuard::Middleware, config)
  elsif app
    app.use(QueryGuard::Middleware, config)
  end

  self
end

.trace(label, context: {}, &block) ⇒ Object

Trace a block of code and capture query stats. Returns [result, report] tuple.



91
92
93
# File 'lib/query_guard.rb', line 91

def trace(label, context: {}, &block)
  Trace.trace(label, context: context, &block)
end

.track!(attrs) ⇒ Object



20
21
22
23
# File 'lib/query_guard/publish.rb', line 20

def track!(attrs)
  return unless enabled?
  buffer << default_fields.merge(attrs)
end