80 lines
1.7 KiB
Ruby
80 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module DevOpsReportHelper
|
|
def devops_score_metrics(metric)
|
|
return {} if metric.blank?
|
|
|
|
{
|
|
averageScore: average_score_data(metric),
|
|
cards: devops_score_card_data(metric),
|
|
createdAt: metric.created_at.strftime('%Y-%m-%d %H:%M')
|
|
}
|
|
end
|
|
|
|
private
|
|
|
|
def format_score(score)
|
|
precision = score < 1 ? 2 : 1
|
|
number_with_precision(score, precision: precision)
|
|
end
|
|
|
|
def score_level(score)
|
|
if score < 33.33
|
|
{
|
|
label: s_('DevopsReport|Low'),
|
|
variant: 'muted'
|
|
}
|
|
elsif score < 66.66
|
|
{
|
|
label: s_('DevopsReport|Moderate'),
|
|
variant: 'neutral'
|
|
}
|
|
else
|
|
{
|
|
label: s_('DevopsReport|High'),
|
|
variant: 'success'
|
|
}
|
|
end
|
|
end
|
|
|
|
def average_score_level(score)
|
|
if score < 33.33
|
|
{
|
|
label: s_('DevopsReport|Low'),
|
|
variant: 'danger',
|
|
icon: 'status-failed'
|
|
}
|
|
elsif score < 66.66
|
|
{
|
|
label: s_('DevopsReport|Moderate'),
|
|
variant: 'warning',
|
|
icon: 'status-alert'
|
|
}
|
|
else
|
|
{
|
|
label: s_('DevopsReport|High'),
|
|
variant: 'success',
|
|
icon: 'status_success_solid'
|
|
}
|
|
end
|
|
end
|
|
|
|
def average_score_data(metric)
|
|
{
|
|
value: format_score(metric.average_percentage_score),
|
|
scoreLevel: average_score_level(metric.average_percentage_score)
|
|
}
|
|
end
|
|
|
|
def devops_score_card_data(metric)
|
|
metric.cards.map do |card|
|
|
{
|
|
title: "#{card.title} #{card.description}",
|
|
usage: format_score(card.instance_score),
|
|
leadInstance: format_score(card.leader_score),
|
|
score: format_score(card.percentage_score),
|
|
scoreLevel: score_level(card.percentage_score)
|
|
}
|
|
end
|
|
end
|
|
end
|