File: record_user_last_activity.rb

package info (click to toggle)
gitlab 17.6.5-19
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 629,368 kB
  • sloc: ruby: 1,915,304; javascript: 557,307; sql: 60,639; xml: 6,509; sh: 4,567; makefile: 1,239; python: 406
file content (41 lines) | stat: -rw-r--r-- 1,315 bytes parent folder | download
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
# frozen_string_literal: true

# == RecordUserLastActivity
#
# Controller concern that updates the `last_activity_on` field of `users`
# for any authenticated GET request. The DB update will only happen once per day.
#
# In order to determine if you should include this concern or not, please check the
# description and discussion on this issue: https://gitlab.com/gitlab-org/gitlab-foss/issues/54947
module RecordUserLastActivity
  include CookiesHelper
  extend ActiveSupport::Concern

  included do
    before_action :set_user_last_activity
    after_action :set_member_last_activity
  end

  def set_user_last_activity
    return unless request.get?
    return if Gitlab::Database.read_only?
    return unless current_user

    # TODO: add namespace & project - https://gitlab.com/gitlab-org/gitlab/-/issues/387952
    Users::ActivityService.new(author: current_user).execute
  end

  def set_member_last_activity
    context = @group || @project # rubocop:disable Gitlab/ModuleWithInstanceVariables -- This is a controller concern
    return unless current_user && context && context.persisted?

    Gitlab::EventStore.publish(
      Users::ActivityEvent.new(data: {
        user_id: current_user.id,
        namespace_id: context.root_ancestor.id
      })
    )
  end
end

RecordUserLastActivity.prepend_mod