diff options
Diffstat (limited to 'app/graphql/types/ci/runner_type.rb')
-rw-r--r-- | app/graphql/types/ci/runner_type.rb | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/app/graphql/types/ci/runner_type.rb b/app/graphql/types/ci/runner_type.rb index e2c8070af0c..9bf98aa7e86 100644 --- a/app/graphql/types/ci/runner_type.rb +++ b/app/graphql/types/ci/runner_type.rb @@ -3,10 +3,13 @@ module Types module Ci class RunnerType < BaseObject + edge_type_class(RunnerWebUrlEdge) graphql_name 'CiRunner' authorize :read_runner present_using ::Ci::RunnerPresenter + expose_permissions Types::PermissionTypes::Ci::Runner + JOB_COUNT_LIMIT = 1000 alias_method :runner, :object @@ -46,12 +49,18 @@ module Types description: 'Number of projects that the runner is associated with.' field :job_count, GraphQL::Types::Int, null: true, description: "Number of jobs processed by the runner (limited to #{JOB_COUNT_LIMIT}, plus one to indicate that more items exist)." + field :admin_url, GraphQL::Types::String, null: true, + description: 'Admin URL of the runner. Only available for adminstrators.' def job_count # We limit to 1 above the JOB_COUNT_LIMIT to indicate that more items exist after JOB_COUNT_LIMIT runner.builds.limit(JOB_COUNT_LIMIT + 1).count end + def admin_url + Gitlab::Routing.url_helpers.admin_runner_url(runner) if can_admin_runners? + end + # rubocop: disable CodeReuse/ActiveRecord def project_count BatchLoader::GraphQL.for(runner.id).batch(key: :runner_project_count) do |ids, loader, args| @@ -68,6 +77,12 @@ module Types end end # rubocop: enable CodeReuse/ActiveRecord + + private + + def can_admin_runners? + context[:current_user]&.can_admin_all_resources? + end end end end |