summaryrefslogtreecommitdiff
path: root/app/views/admin/runners/index.html.haml
blob: 2e23b748edbd243bbf785edf38745d2956800ccf (plain)
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
137
138
139
140
141
- breadcrumb_title _('Runners')
- @no_container = true

%div{ class: container_class }
  .row
    .col-sm-6
      .bs-callout
        %p
          = (_"A 'Runner' is a process which runs a job. You can set up as many Runners as you need.")
          %br
          = _('Runners can be placed on separate users, servers, even on your local machine.')
          %br

        %div
          %span= _('Each Runner can be in one of the following states:')
          %ul
            %li
              %span.badge.badge-success shared
              \-
              = _('Runner runs jobs from all unassigned projects')
            %li
              %span.badge.badge-success group
              \-
              = _('Runner runs jobs from all unassigned projects in its group')
            %li
              %span.badge.badge-info specific
              \-
              = _('Runner runs jobs from assigned projects')
            %li
              %span.badge.badge-warning locked
              \-
              = _('Runner cannot be assigned to other projects')
            %li
              %span.badge.badge-danger paused
              \-
              = _('Runner will not receive any new jobs')

    .col-sm-6
      .bs-callout
        = render partial: 'ci/runner/how_to_setup_runner',
                 locals: { registration_token: Gitlab::CurrentSettings.runners_registration_token,
                           type: 'shared',
                           reset_token_url: reset_registration_token_admin_application_settings_path }

  .row
    .col-sm-9
      = form_tag admin_runners_path, id: 'runners-search', method: :get, class: 'filter-form js-filter-form' do
        .filtered-search-wrapper
          .filtered-search-box
            = dropdown_tag(custom_icon('icon_history'),
              options: { wrapper_class: 'filtered-search-history-dropdown-wrapper',
              toggle_class: 'filtered-search-history-dropdown-toggle-button',
              dropdown_class: 'filtered-search-history-dropdown',
              content_class: 'filtered-search-history-dropdown-content',
              title: _('Recent searches') }) do
              .js-filtered-search-history-dropdown{ data: { full_path: admin_runners_path } }
            .filtered-search-box-input-container.droplab-dropdown
              .scroll-container
                %ul.tokens-container.list-unstyled
                  %li.input-token
                    %input.form-control.filtered-search{ { id: 'filtered-search-runners', placeholder: _('Search or filter results...') } }
              #js-dropdown-hint.filtered-search-input-dropdown-menu.dropdown-menu.hint-dropdown
                %ul{ data: { dropdown: true } }
                  %li.filter-dropdown-item{ data: { action: 'submit' } }
                    = button_tag class: %w[btn btn-link] do
                      = sprite_icon('search')
                      %span
                        = _('Press Enter or click to search')
                %ul.filter-dropdown{ data: { dynamic: true, dropdown: true } }
                  %li.filter-dropdown-item
                    = button_tag class: %w[btn btn-link] do
                      -# Encapsulate static class name `{{icon}}` inside #{} to bypass
                      -# haml lint's ClassAttributeWithStaticValue
                      %svg
                        %use{ 'xlink:href': "#{'{{icon}}'}" }
                      %span.js-filter-hint
                        {{hint}}
                      %span.js-filter-tag.dropdown-light-content
                        {{tag}}

              #js-dropdown-admin-runner-status.filtered-search-input-dropdown-menu.dropdown-menu
                %ul{ data: { dropdown: true } }
                  - Ci::Runner::AVAILABLE_STATUSES.each do |status|
                    %li.filter-dropdown-item{ data: { value: status } }
                      = button_tag class: %w[btn btn-link] do
                        = status.titleize

              #js-dropdown-admin-runner-type.filtered-search-input-dropdown-menu.dropdown-menu
                %ul{ data: { dropdown: true } }
                  - Ci::Runner::AVAILABLE_TYPES.each do |runner_type|
                    %li.filter-dropdown-item{ data: { value: runner_type } }
                      = button_tag class: %w[btn btn-link] do
                        = runner_type.titleize

            #js-dropdown-admin-runner-type.filtered-search-input-dropdown-menu.dropdown-menu
              %ul{ data: { dropdown: true } }
                - Ci::Runner::AVAILABLE_TYPES.each do |runner_type|
                  %li.filter-dropdown-item{ data: { value: runner_type } }
                    = button_tag class: %w[btn btn-link] do
                      = runner_type.titleize

            #js-dropdown-runner-tag.filtered-search-input-dropdown-menu.dropdown-menu
              %ul{ data: { dropdown: true } }
                %li.filter-dropdown-item{ data: { value: 'none' } }
                  %button.btn.btn-link
                    = _('No Tag')
                %li.divider.droplab-item-ignore
              %ul.filter-dropdown{ data: { dynamic: true, dropdown: true } }
                %li.filter-dropdown-item
                  %button.btn.btn-link.js-data-value
                    %span.dropdown-light-content
                      {{name}}

            = button_tag class: %w[clear-search hidden] do
              = icon('times')
          .filter-dropdown-container
            = render 'sort_dropdown'

    .col-sm-3.text-right-lg
      = _('Runners currently online: %{active_runners_count}') % { active_runners_count: @active_runners_count }

  - if @runners.any?
    .runners-content.content-list
      .table-holder
        .gl-responsive-table-row.table-row-header{ role: 'row' }
          .table-section.section-10{ role: 'rowheader' }= _('Type')
          .table-section.section-10{ role: 'rowheader' }= _('Runner token')
          .table-section.section-20{ role: 'rowheader' }= _('Description')
          .table-section.section-10{ role: 'rowheader' }= _('Version')
          .table-section.section-10{ role: 'rowheader' }= _('IP Address')
          .table-section.section-5{ role: 'rowheader' }= _('Projects')
          .table-section.section-5{ role: 'rowheader' }= _('Jobs')
          .table-section.section-10{ role: 'rowheader' }= _('Tags')
          .table-section.section-10{ role: 'rowheader' }= _('Last contact')
          .table-section.section-10{ role: 'rowheader' }

        - @runners.each do |runner|
          = render 'admin/runners/runner', runner: runner
      = paginate @runners, theme: 'gitlab'
  - else
    .nothing-here-block= _('No runners found')