Module: LesliAudit::LoggerInterface

Defined in:
app/interfaces/lesli_audit/logger_interface.rb

Instance Method Summary collapse

Instance Method Details

#get_user_agent(as_string = true) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'app/interfaces/lesli_audit/logger_interface.rb', line 35

def get_user_agent(as_string=true)

    # parse user agent
    user_agent = DeviceDetector.new(request.env["HTTP_USER_AGENT"])

    #user_agent_version = user_agent.version.to_a.first(2).join(".")

    # return user agent as object
    {
        platform: user_agent.os_name,
        browser: user_agent.name,
        device: user_agent.device_type
    }
end

#log_account_activity(system_module, system_process, title = nil, payload = nil, description = nil) ⇒ Object

Track specific account activity this is disabled by default in the settings file



146
147
148
149
150
151
152
153
154
155
156
157
158
# File 'app/interfaces/lesli_audit/logger_interface.rb', line 146

def (system_module, system_process, title = nil, payload = nil, description = nil)
    # return unless Rails.application.config.lesli.dig(:security, :enable_analytics)

    # account = Account.first

    # account.activities.create({
    #     system_module:,
    #     system_process:,
    #     description:,
    #     payload:,
    #     title:
    # })
end

#log_account_requestsObject



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'app/interfaces/lesli_audit/logger_interface.rb', line 56

def 
    return unless Lesli.config.audit.dig(:enable_analytics)
    return unless current_user

    # Try to save a unique record for this request configuration
    current_user..audit..upsert(
        {
            request_controller: controller_path,
            request_action: action_name,
            request_count: 1,
            created_at: Date2.new.date.to_s
        },
        
        # group of columns to consider a request as unique
        unique_by: %i[request_controller request_action created_at account_id],

        # if request id is not unique, increase the counter for this configuration
        on_duplicate: Arel.sql("request_count = lesli_audit_account_requests.request_count + 1")
    )
end

#log_devicesObject



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
142
# File 'app/interfaces/lesli_audit/logger_interface.rb', line 116

def log_devices
    return unless Lesli.config.audit.dig(:enable_analytics)
    return unless current_user
    
    user_agent = get_user_agent(false)
    
    # Try to save a unique record for this request configuration
    current_user..audit..upsert(
        {
            :created_at => Date2.new.date.to_s,
            :agent_platform => user_agent&.dig(:platform) || "unknown",
            :agent_browser => user_agent&.dig(:browser) || "unknown",
            :agent_device => user_agent&.dig(:device) || "unknown",
            :agent_count => 1
        },

        # group of columns to consider a request as unique
        unique_by: %i[agent_platform agent_browser agent_device created_at account_id],

        # if request id is not unique
        #   - increase the counter for this configuration
        #   - update the datetime of the last request
        on_duplicate: Arel.sql(
            'agent_count = lesli_audit_account_devices.agent_count + 1'
        )
    )
end

#log_requestsObject



50
51
52
53
54
# File 'app/interfaces/lesli_audit/logger_interface.rb', line 50

def log_requests
    
    log_user_requests
    log_devices
end

#log_user_requestsObject

Track all user activity this is disabled by default in the settings file



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
# File 'app/interfaces/lesli_audit/logger_interface.rb', line 79

def log_user_requests
    return unless current_user
    return unless session[:user_session_id]
    return unless Lesli.config.audit.dig(:enable_analytics)

    # Try to save a unique record for this request configuration
    current_user..audit.user_requests.upsert(
        {
            request_controller: controller_path,
            request_action: action_name,
            session_id: session[:user_session_id],
            user_id: current_user.id,
            date: Date2.new.date.to_s,
            request_count: 1
        },
                
        # group of columns to consider a request as unique
        unique_by: %i[request_controller request_action date user_id session_id],

        # if request id is not unique
        #   - increase the counter for this configuration
        #   - update the datetime of the last request
        on_duplicate: Arel.sql(
            "request_count = lesli_audit_user_requests.request_count + 1,updated_at = #{LesliDate::Compatibility.db_now}"
        )
    ) 

    return unless Lesli.config.audit.dig(:enable_journals)
    current_user..audit.user_journals.create({
        request_controller: controller_path,
        request_action: action_name,
        session_id: session[:user_session_id],
        user_id: current_user.id,
        date: Date2.new.date.to_s
    }) 
end