1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
# frozen_string_literal: true
module Ci
module RunnersHelper
include IconsHelper
def runner_status_icon(runner, size: 16, icon_class: '')
status = runner.status
contacted_at = runner.contacted_at
title = ''
icon = 'warning-solid'
span_class = ''
case status
when :online
title = s_("Runners|Runner is online; last contact was %{runner_contact} ago") % { runner_contact: time_ago_in_words(contacted_at) }
icon = 'status-active'
span_class = 'gl-text-green-500'
when :never_contacted
title = s_("Runners|Runner has never contacted this instance")
icon = 'warning-solid'
when :offline
title = s_("Runners|Runner is offline; last contact was %{runner_contact} ago") % { runner_contact: time_ago_in_words(contacted_at) }
icon = 'status-waiting'
span_class = 'gl-text-gray-500'
when :stale
# runner may have contacted (or not) and be stale: consider both cases.
title = contacted_at ? s_("Runners|Runner is stale; last contact was %{runner_contact} ago") % { runner_contact: time_ago_in_words(contacted_at) } : s_("Runners|Runner is stale; it has never contacted this instance")
icon = 'time-out'
span_class = 'gl-text-orange-500'
end
content_tag(:span, class: span_class, title: title, data: { toggle: 'tooltip', container: 'body', testid: 'runner_status_icon', qa_selector: "runner_status_#{status}_content" }) do
sprite_icon(icon, size: size, css_class: icon_class)
end
end
def runner_short_name(runner)
"##{runner.id} (#{runner.short_sha})"
end
def runner_link(runner)
display_name = truncate(runner.display_name, length: 15)
id = "\##{runner.id}"
if current_user && current_user.admin
link_to admin_runner_path(runner) do
display_name + id
end
else
display_name + id
end
end
# Due to inability of performing sorting of runners by cached "contacted_at" values we have to show uncached values if sorting by "contacted_asc" is requested.
# Please refer to the following issue for more details: https://gitlab.com/gitlab-org/gitlab-foss/issues/55920
def runner_contacted_at(runner)
if params[:sort] == 'contacted_asc'
runner.uncached_contacted_at
else
runner.contacted_at
end
end
def admin_runners_data_attributes
{
# Runner install help page is external, located at
# https://gitlab.com/gitlab-org/gitlab-runner
runner_install_help_page: 'https://docs.gitlab.com/runner/install/',
new_runner_path: new_admin_runner_path,
registration_token: Gitlab::CurrentSettings.runners_registration_token,
online_contact_timeout_secs: ::Ci::Runner::ONLINE_CONTACT_TIMEOUT.to_i,
stale_timeout_secs: ::Ci::Runner::STALE_TIMEOUT.to_i,
tag_suggestions_path: tag_list_admin_runners_path(format: :json)
}
end
def group_shared_runners_settings_data(group)
data = {
group_id: group.id,
group_name: group.name,
group_is_empty: (group.projects.empty? && group.children.empty?).to_s,
shared_runners_setting: group.shared_runners_setting,
runner_enabled_value: Namespace::SR_ENABLED,
runner_disabled_value: Namespace::SR_DISABLED_AND_UNOVERRIDABLE,
runner_allow_override_value: Namespace::SR_DISABLED_AND_OVERRIDABLE,
parent_shared_runners_setting: group.parent&.shared_runners_setting,
parent_name: nil,
parent_settings_path: nil
}
if group.parent && can?(current_user, :admin_group, group.parent)
data.merge!({
parent_name: group.parent.name,
parent_settings_path: group_settings_ci_cd_path(group.parent, anchor: 'runners-settings')
})
end
data
end
def group_runners_data_attributes(group)
{
group_id: group.id,
group_full_path: group.full_path,
runner_install_help_page: 'https://docs.gitlab.com/runner/install/',
online_contact_timeout_secs: ::Ci::Runner::ONLINE_CONTACT_TIMEOUT.to_i,
stale_timeout_secs: ::Ci::Runner::STALE_TIMEOUT.to_i
}
end
def toggle_shared_runners_settings_data(project)
data = {
is_enabled: project.shared_runners_enabled?.to_s,
is_disabled_and_unoverridable: (project.group&.shared_runners_setting == Namespace::SR_DISABLED_AND_UNOVERRIDABLE).to_s,
update_path: toggle_shared_runners_project_runners_path(project),
group_name: nil,
group_settings_path: nil
}
if project.group && can?(current_user, :admin_group, project.group)
data.merge!({
group_name: project.group.name,
group_settings_path: group_settings_ci_cd_path(project.group, anchor: 'runners-settings')
})
end
data
end
end
end
Ci::RunnersHelper.prepend_mod_with('Ci::RunnersHelper')
|