Class: Henitai::Reporter::Dashboard
- Inherits:
-
Base
- Object
- Base
- Henitai::Reporter::Dashboard
show all
- Defined in:
- lib/henitai/reporter.rb,
sig/henitai.rbs
Overview
Dashboard reporter. Delegates project/version/api-key resolution to
DashboardMetadataProvider so it never touches real ENV or git itself.
Constant Summary
collapse
- DEFAULT_BASE_URL =
"https://dashboard.stryker-mutator.io"
- HTTP_TIMEOUT_SECONDS =
30
Instance Attribute Summary collapse
Attributes inherited from Base
#config, #history_store
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from Base
#authoritative?, #canonical_path
Constructor Details
#initialize(config:, history_store: nil, metadata_provider: nil) ⇒ Dashboard
Returns a new instance of Dashboard.
579
580
581
582
|
# File 'lib/henitai/reporter.rb', line 579
def initialize(config:, history_store: nil, metadata_provider: nil)
super(config:, history_store:)
@metadata_provider = metadata_provider || DashboardMetadataProvider.new(dashboard_config: config.dashboard)
end
|
Instance Attribute Details
Returns the value of attribute metadata_provider.
600
601
602
|
# File 'lib/henitai/reporter.rb', line 600
def metadata_provider
@metadata_provider
end
|
Class Method Details
.project_from_git_url(url) ⇒ String?
Instance Method Details
#api_key ⇒ String?
604
|
# File 'lib/henitai/reporter.rb', line 604
def api_key = metadata_provider.api_key
|
#base_url ⇒ String
647
648
649
|
# File 'lib/henitai/reporter.rb', line 647
def base_url
config.dashboard[:base_url] || DEFAULT_BASE_URL
end
|
#build_request(result, uri) ⇒ Object
610
611
612
613
614
|
# File 'lib/henitai/reporter.rb', line 610
def build_request(result, uri)
request = Net::HTTP::Put.new(uri.request_uri, )
request.body = JSON.generate(result.to_stryker_schema)
request
end
|
#dashboard_uri ⇒ Object
634
635
636
637
638
639
640
641
642
643
644
645
|
# File 'lib/henitai/reporter.rb', line 634
def dashboard_uri
uri = URI.parse(base_url)
base_path = uri.path.to_s.chomp("/").delete_prefix("/")
segments = []
segments << base_path unless base_path.empty?
segments += ["api", "reports", project_path, encoded_version]
uri.path = "/#{segments.join('/')}"
uri
rescue URI::InvalidURIError
URI.parse(DEFAULT_BASE_URL)
end
|
#encoded_version ⇒ String
655
656
657
|
# File 'lib/henitai/reporter.rb', line 655
def encoded_version
URI.encode_www_form_component(version.to_s)
end
|
#project ⇒ String?
602
|
# File 'lib/henitai/reporter.rb', line 602
def project = metadata_provider.project
|
#project_path ⇒ String
651
652
653
|
# File 'lib/henitai/reporter.rb', line 651
def project_path
project.to_s.split("/").map { |segment| URI.encode_www_form_component(segment) }.join("/")
end
|
#ready? ⇒ Boolean
606
607
608
|
# File 'lib/henitai/reporter.rb', line 606
def ready?
!project.nil? && !version.nil? && !api_key.nil?
end
|
#report(result) ⇒ void
This method returns an undefined value.
584
585
586
587
588
589
590
|
# File 'lib/henitai/reporter.rb', line 584
def report(result)
return unless ready?
uri = dashboard_uri
request = build_request(result, uri)
send_request(uri, request)
end
|
616
617
618
619
620
621
|
# File 'lib/henitai/reporter.rb', line 616
def
{
"Content-Type" => "application/json",
"X-Api-Key" => api_key.to_s
}
end
|
#send_request(uri, request) ⇒ Object
623
624
625
626
627
628
629
630
631
632
|
# File 'lib/henitai/reporter.rb', line 623
def send_request(uri, request)
Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https") do |http|
http.open_timeout = HTTP_TIMEOUT_SECONDS
http.read_timeout = HTTP_TIMEOUT_SECONDS
http.request(request)
end
rescue StandardError => e
warn("Dashboard reporter upload failed: #{e.message}")
nil
end
|
#version ⇒ String?
603
|
# File 'lib/henitai/reporter.rb', line 603
def version = metadata_provider.version
|