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.
569
570
571
572
|
# File 'lib/henitai/reporter.rb', line 569
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.
590
591
592
|
# File 'lib/henitai/reporter.rb', line 590
def metadata_provider
@metadata_provider
end
|
Class Method Details
.project_from_git_url(url) ⇒ String?
Instance Method Details
#api_key ⇒ String?
594
|
# File 'lib/henitai/reporter.rb', line 594
def api_key = metadata_provider.api_key
|
#base_url ⇒ String
637
638
639
|
# File 'lib/henitai/reporter.rb', line 637
def base_url
config.dashboard[:base_url] || DEFAULT_BASE_URL
end
|
#build_request(result, uri) ⇒ Object
600
601
602
603
604
|
# File 'lib/henitai/reporter.rb', line 600
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
624
625
626
627
628
629
630
631
632
633
634
635
|
# File 'lib/henitai/reporter.rb', line 624
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
645
646
647
|
# File 'lib/henitai/reporter.rb', line 645
def encoded_version
URI.encode_www_form_component(version.to_s)
end
|
#project ⇒ String?
592
|
# File 'lib/henitai/reporter.rb', line 592
def project = metadata_provider.project
|
#project_path ⇒ String
641
642
643
|
# File 'lib/henitai/reporter.rb', line 641
def project_path
project.to_s.split("/").map { |segment| URI.encode_www_form_component(segment) }.join("/")
end
|
#ready? ⇒ Boolean
596
597
598
|
# File 'lib/henitai/reporter.rb', line 596
def ready?
!project.nil? && !version.nil? && !api_key.nil?
end
|
#report(result) ⇒ void
This method returns an undefined value.
574
575
576
577
578
579
580
|
# File 'lib/henitai/reporter.rb', line 574
def report(result)
return unless ready?
uri = dashboard_uri
request = build_request(result, uri)
send_request(uri, request)
end
|
606
607
608
609
610
611
|
# File 'lib/henitai/reporter.rb', line 606
def
{
"Content-Type" => "application/json",
"X-Api-Key" => api_key.to_s
}
end
|
#send_request(uri, request) ⇒ Object
613
614
615
616
617
618
619
620
621
622
|
# File 'lib/henitai/reporter.rb', line 613
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?
593
|
# File 'lib/henitai/reporter.rb', line 593
def version = metadata_provider.version
|