Class: Solidstats::BundlerAuditService
- Inherits:
-
Object
- Object
- Solidstats::BundlerAuditService
- Defined in:
- app/services/solidstats/bundler_audit_service.rb
Overview
Service to collect and process bundler audit security vulnerability data
Constant Summary collapse
- CACHE_FILE =
Rails.root.join("solidstats", "bundler_audit.json")
- CACHE_HOURS =
Cache for 24 hours
24
Class Method Summary collapse
-
.fetch_vulnerabilities ⇒ Hash
Get cached vulnerabilities or scan if cache is stale.
-
.scan_and_cache ⇒ Hash
Force a fresh scan and update cache.
-
.summary ⇒ Hash
Get summary for dashboard display.
Class Method Details
.fetch_vulnerabilities ⇒ Hash
Get cached vulnerabilities or scan if cache is stale
12 13 14 15 16 17 18 |
# File 'app/services/solidstats/bundler_audit_service.rb', line 12 def fetch_vulnerabilities if cache_stale? scan_and_cache end load_cached_data end |
.scan_and_cache ⇒ Hash
Force a fresh scan and update cache
22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'app/services/solidstats/bundler_audit_service.rb', line 22 def scan_and_cache Rails.logger.info("Running bundler audit scan...") begin vulnerabilities_data = collect_bundler_audit_data save_to_cache(vulnerabilities_data) update_summary_json(vulnerabilities_data) vulnerabilities_data rescue => e Rails.logger.error("Error running bundler audit: #{e.message}") { "output" => { "results" => [], "error" => e. } } end end |
.summary ⇒ Hash
Get summary for dashboard display
38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'app/services/solidstats/bundler_audit_service.rb', line 38 def summary data = fetch_vulnerabilities results = data.dig("output", "results") || [] vuln_count = results.count { count: vuln_count, status: determine_status(vuln_count), message: (vuln_count), last_updated: data.dig("output", "created_at") || Time.current } end |