Class: GitlabChecks::Checks::Members

Inherits:
Object
  • Object
show all
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

Constructor Details

#initializeMembers

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_resultObject



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., 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., member_exceeded.last_activity_on]
     end
  end

  print "Wrote users-no-recent-login.csv..."
end

#output_statisticsObject



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