238 lines
4.9 KiB
Ruby
238 lines
4.9 KiB
Ruby
class Analytics
|
|
def initialize(user, account, backend = AnalyticsRuby)
|
|
@user = user || Guest.new
|
|
@account = account
|
|
@backend = backend
|
|
end
|
|
|
|
def track_user_sign_in(user_agent:, user_ip:)
|
|
if analytics_enabled?
|
|
identify
|
|
track(
|
|
{
|
|
user_id: user.id,
|
|
event: "Sign In User",
|
|
properties: {
|
|
account: account.try(:name),
|
|
account_id: account.try(:id),
|
|
user_agent: user_agent,
|
|
ip: user_ip,
|
|
},
|
|
}
|
|
)
|
|
end
|
|
end
|
|
|
|
def track_guest_sign_up(user_agent:, user_ip:)
|
|
if analytics_enabled?
|
|
identify
|
|
track(
|
|
{
|
|
user_id: user.id,
|
|
event: "Guest User Sign Up",
|
|
properties: {
|
|
account: account.try(:name),
|
|
account_id: account.try(:id),
|
|
user_agent: user_agent,
|
|
ip: user_ip,
|
|
},
|
|
}
|
|
)
|
|
end
|
|
end
|
|
|
|
def track_create_native_release(release_type:, account:, user_agent:, user_ip:, application: "web")
|
|
if analytics_enabled?
|
|
identify
|
|
track(
|
|
{
|
|
anonymous_id: user.id,
|
|
event: "Release Signed",
|
|
properties: {
|
|
release_type: release_type,
|
|
account: account.try(:name),
|
|
account_id: account.try(:id),
|
|
user_agent: user_agent,
|
|
ip: user_ip,
|
|
application: application
|
|
},
|
|
}
|
|
)
|
|
end
|
|
end
|
|
|
|
def track_create_non_native_release(release_type:, user_agent:, user_ip:)
|
|
if analytics_enabled?
|
|
identify
|
|
track(
|
|
{
|
|
user_id: user.id,
|
|
event: "Release Imported",
|
|
properties: {
|
|
release_type: release_type,
|
|
account: account.try(:name),
|
|
account_id: account.try(:id),
|
|
user_agent: user_agent,
|
|
ip: user_ip,
|
|
},
|
|
}
|
|
)
|
|
end
|
|
end
|
|
|
|
def track_video_upload(user_agent:, user_ip:)
|
|
if analytics_enabled?
|
|
identify
|
|
track(
|
|
{
|
|
user_id: user.id,
|
|
event: "Video Uploaded",
|
|
properties: {
|
|
account: account.try(:name),
|
|
account_id: account.try(:id),
|
|
user_agent: user_agent,
|
|
ip: user_ip,
|
|
},
|
|
}
|
|
)
|
|
end
|
|
end
|
|
|
|
def track_create_project(user_agent:, user_ip:)
|
|
if analytics_enabled?
|
|
identify
|
|
track(
|
|
{
|
|
user_id: user.id,
|
|
event: "Project Created",
|
|
properties: {
|
|
account: account.try(:name),
|
|
account_id: account.try(:id),
|
|
user_agent: user_agent,
|
|
ip: user_ip,
|
|
},
|
|
}
|
|
)
|
|
end
|
|
end
|
|
|
|
def track_create_custom_folder(user_agent:, user_ip:)
|
|
if analytics_enabled?
|
|
identify
|
|
track(
|
|
{
|
|
user_id: user.id,
|
|
event: "Custom folder created",
|
|
properties: {
|
|
account: account.try(:name),
|
|
account_id: account.try(:id),
|
|
user_agent: user_agent,
|
|
ip: user_ip,
|
|
},
|
|
}
|
|
)
|
|
end
|
|
end
|
|
|
|
def track_create_live_stream(user_agent:, user_ip:)
|
|
if analytics_enabled?
|
|
identify
|
|
track(
|
|
{
|
|
user_id: user.id,
|
|
event: "Live stream created",
|
|
properties: {
|
|
account: account.try(:name),
|
|
account_id: account.try(:id),
|
|
user_agent: user_agent,
|
|
ip: user_ip,
|
|
},
|
|
}
|
|
)
|
|
end
|
|
end
|
|
|
|
def track_create_task_request(user_agent:, user_ip:)
|
|
if analytics_enabled?
|
|
identify
|
|
track(
|
|
{
|
|
user_id: user.id,
|
|
event: "Task request created",
|
|
properties: {
|
|
account: account.try(:name),
|
|
account_id: account.try(:id),
|
|
user_agent: user_agent,
|
|
ip: user_ip,
|
|
},
|
|
}
|
|
)
|
|
end
|
|
end
|
|
|
|
def track_create_contract_template(user_agent:, user_ip:)
|
|
if analytics_enabled?
|
|
identify
|
|
track(
|
|
{
|
|
user_id: user.id,
|
|
event: "Contract Template Created",
|
|
properties: {
|
|
account: account.try(:name),
|
|
account_id: account.try(:id),
|
|
user_agent: user_agent,
|
|
ip: user_ip,
|
|
},
|
|
}
|
|
)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :user, :account, :backend
|
|
|
|
def analytics_enabled?
|
|
ENV["ENABLE_ANALYTICS"] == "true"
|
|
end
|
|
|
|
def identify
|
|
backend.identify(identify_params)
|
|
end
|
|
|
|
def identify_params
|
|
if user.anonymous?
|
|
{
|
|
anonymous_id: user.id
|
|
}
|
|
else
|
|
{
|
|
user_id: user.id,
|
|
traits: traits
|
|
}
|
|
end
|
|
end
|
|
|
|
def traits
|
|
{
|
|
email: user.email,
|
|
}.reject { |_key, value| value.blank? }
|
|
end
|
|
|
|
def track(options)
|
|
backend.track(options)
|
|
end
|
|
|
|
class Guest
|
|
attr_reader :id
|
|
|
|
def initialize
|
|
@id = SecureRandom.uuid
|
|
end
|
|
|
|
def anonymous?
|
|
true
|
|
end
|
|
end
|
|
end
|