Class: GitlabChecks::Checks::Members
- Inherits:
-
Object
- Object
- GitlabChecks::Checks::Members
- Defined in:
- lib/gitlab_checks/checks/members.rb
Constant Summary collapse
- LAST_GITLAB_ACTIVITY_THRESHOLD_DAYS =
90
- LAST_GITLAB_LOGON_THRESHOLD_DAYS =
60
Instance Method Summary collapse
- #audit(gitlab_org) ⇒ Object
-
#initialize ⇒ Members
constructor
A new instance of Members.
- #output_result ⇒ Object
- #output_statistics ⇒ Object
Constructor Details
#initialize ⇒ Members
Returns a new instance of Members.
11 12 13 14 15 16 |
# File 'lib/gitlab_checks/checks/members.rb', line 11 def initialize @all_members = nil @billable_members = nil @members_last_activity_exceeded = nil @members_last_logon_exceeded = nil end |
Instance Method Details
#audit(gitlab_org) ⇒ Object
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 |
# File 'lib/gitlab_checks/checks/members.rb', line 18 def audit(gitlab_org) findings = [] @all_members = Gitlab.all_group_members(gitlab_org.root_group, { per_page: 1000 }).lazy_paginate @billable_members = Gitlab.group_billable_members(gitlab_org.root_group, { per_page: 1000, sort: "last_activity_on_asc" }).lazy_paginate @members_last_activity_exceeded = @billable_members.select do |m| m["last_activity_on"].nil? || Date.parse(m["last_activity_on"]) < (Date.today - LAST_GITLAB_ACTIVITY_THRESHOLD_DAYS) end if @members_last_activity_exceeded.count.positive? findings << GitlabChecks::Findings::Finding.new(GitlabChecks::Findings::SEVERITY[:MEDIUM], "#{@members_last_activity_exceeded.count} users have had no activity within #{LAST_GITLAB_ACTIVITY_THRESHOLD_DAYS} days", "Users who have not performed recent activity on the organisation may no longer be involved with the project and continued access should be validated (see output file)") end @members_last_logon_exceeded = @billable_members.select do |m| m["last_login_at"].nil? || Date.parse(m["last_login_at"]) < (Date.today - LAST_GITLAB_LOGON_THRESHOLD_DAYS) end if @members_last_logon_exceeded.count.positive? findings << GitlabChecks::Findings::Finding.new(GitlabChecks::Findings::SEVERITY[:MEDIUM], "#{@members_last_logon_exceeded.count} users have not logged into Gitlab within #{LAST_GITLAB_LOGON_THRESHOLD_DAYS} days", "Users who have not performed recent activity on the organisation may no longer be involved with the project and continued access should be validated (see output file)") end findings end |
#output_result ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/gitlab_checks/checks/members.rb', line 48 def output_result headers = %w[username name created_at last_activity_at last_login_at] CSV.open("users-no-recent-activity.csv", "w") do |csv| csv << headers @members_last_activity_exceeded.each do |member_exceeded| csv << [member_exceeded.username, member_exceeded.name, member_exceeded.created_at, member_exceeded.last_login_at, member_exceeded.last_activity_on] end end print "Wrote users-no-recent-activity.csv..." headers = %w[username name created_at last_activity_at last_login_at] CSV.open("users-no-recent-login.csv", "w") do |csv| csv << headers @members_last_logon_exceeded.each do |member_exceeded| csv << [member_exceeded.username, member_exceeded.name, member_exceeded.created_at, member_exceeded.last_login_at, member_exceeded.last_activity_on] end end print "Wrote users-no-recent-login.csv..." end |
#output_statistics ⇒ Object
70 71 72 73 |
# File 'lib/gitlab_checks/checks/members.rb', line 70 def output_statistics print "Number of root group members: #{@all_members.count}" print "Number of billable members: #{@billable_members.count}" end |