Fix crash when bots request, also fix one crash when no url is given
Fixes #1
This commit is contained in:
parent
094bec17c9
commit
9c62b9927f
3 changed files with 47 additions and 10 deletions
|
@ -45,6 +45,9 @@ defmodule Tilastokeskus.Archive.Schemas.PageView do
|
||||||
# GeoIP calculated information
|
# GeoIP calculated information
|
||||||
field(:loc_city, :string)
|
field(:loc_city, :string)
|
||||||
field(:loc_country, :string)
|
field(:loc_country, :string)
|
||||||
|
|
||||||
|
# Was the hit from a bot
|
||||||
|
field(:is_bot, :boolean)
|
||||||
end
|
end
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
|
@ -73,7 +76,8 @@ defmodule Tilastokeskus.Archive.Schemas.PageView do
|
||||||
:screen_h,
|
:screen_h,
|
||||||
:tz_offset,
|
:tz_offset,
|
||||||
:loc_city,
|
:loc_city,
|
||||||
:loc_country
|
:loc_country,
|
||||||
|
:is_bot
|
||||||
])
|
])
|
||||||
|> put_change(:type, event_type())
|
|> put_change(:type, event_type())
|
||||||
end
|
end
|
||||||
|
|
|
@ -16,7 +16,7 @@ defmodule Tilastokeskus.Reception.Routes.PageView do
|
||||||
at = DateTime.utc_now()
|
at = DateTime.utc_now()
|
||||||
|
|
||||||
addr = get_addr(req)
|
addr = get_addr(req)
|
||||||
ua = parse_ua(req)
|
{ua, ua_name, ua_version, os_name, os_version, device_type, is_bot} = parse_ua(req)
|
||||||
{referrer, referrer_noq, referrer_domain} = parse_referrer(body)
|
{referrer, referrer_noq, referrer_domain} = parse_referrer(body)
|
||||||
|
|
||||||
screen_w = Map.get(body, "screen_width")
|
screen_w = Map.get(body, "screen_width")
|
||||||
|
@ -43,17 +43,18 @@ defmodule Tilastokeskus.Reception.Routes.PageView do
|
||||||
referrer: referrer,
|
referrer: referrer,
|
||||||
referrer_noq: referrer_noq,
|
referrer_noq: referrer_noq,
|
||||||
referrer_domain: referrer_domain,
|
referrer_domain: referrer_domain,
|
||||||
ua: unknown_2_str(ua.user_agent),
|
ua: ua,
|
||||||
ua_name: unknown_2_str(ua.client.name),
|
ua_name: ua_name,
|
||||||
ua_version: unknown_2_str(ua.client.version),
|
ua_version: ua_version,
|
||||||
os_name: unknown_2_str(ua.os.name),
|
os_name: os_name,
|
||||||
os_version: unknown_2_str(ua.os.version),
|
os_version: os_version,
|
||||||
device_type: unknown_2_str(ua.device.type),
|
device_type: device_type,
|
||||||
screen_w: screen_w,
|
screen_w: screen_w,
|
||||||
screen_h: screen_h,
|
screen_h: screen_h,
|
||||||
tz_offset: tz_offset,
|
tz_offset: tz_offset,
|
||||||
loc_city: city,
|
loc_city: city,
|
||||||
loc_country: country
|
loc_country: country,
|
||||||
|
is_bot: is_bot
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -143,6 +144,29 @@ defmodule Tilastokeskus.Reception.Routes.PageView do
|
||||||
defp parse_ua(req) do
|
defp parse_ua(req) do
|
||||||
Raxx.get_header(req, "user-agent", nil)
|
Raxx.get_header(req, "user-agent", nil)
|
||||||
|> UAInspector.parse()
|
|> UAInspector.parse()
|
||||||
|
|> case do
|
||||||
|
%UAInspector.Result{} = ua ->
|
||||||
|
{
|
||||||
|
ua.user_agent,
|
||||||
|
unknown_2_str(ua.client.name),
|
||||||
|
unknown_2_str(ua.client.version),
|
||||||
|
unknown_2_str(ua.os.name),
|
||||||
|
unknown_2_str(ua.os.version),
|
||||||
|
unknown_2_str(ua.device.type),
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
%UAInspector.Result.Bot{} = ua ->
|
||||||
|
{
|
||||||
|
ua.user_agent,
|
||||||
|
unknown_2_str(ua.name),
|
||||||
|
"n/a",
|
||||||
|
"n/a",
|
||||||
|
"n/a",
|
||||||
|
"n/a",
|
||||||
|
true
|
||||||
|
}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp parse_referrer(body) do
|
defp parse_referrer(body) do
|
||||||
|
@ -172,7 +196,7 @@ defmodule Tilastokeskus.Reception.Routes.PageView do
|
||||||
defp parse_url(%{} = body) do
|
defp parse_url(%{} = body) do
|
||||||
case Map.get(body, "url") do
|
case Map.get(body, "url") do
|
||||||
nil ->
|
nil ->
|
||||||
{nil, nil, nil}
|
{nil, nil, nil, nil}
|
||||||
|
|
||||||
url ->
|
url ->
|
||||||
parsed = URI.parse(url)
|
parsed = URI.parse(url)
|
||||||
|
|
9
priv/repo/migrations/20180704035123_is_bot.exs
Normal file
9
priv/repo/migrations/20180704035123_is_bot.exs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
defmodule Tilastokeskus.Archive.Repo.Migrations.IsBot do
|
||||||
|
use Ecto.Migration
|
||||||
|
|
||||||
|
def change do
|
||||||
|
alter table(:events) do
|
||||||
|
add(:is_bot, :boolean, default: false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue