bugsnag-1.1.0.0: src/Network/Bugsnag/Device.hs
module Network.Bugsnag.Device
( bugsnagDeviceFromUserAgent
) where
import Prelude
import Data.Bugsnag
import Data.ByteString (ByteString)
import Data.Text (pack, unpack)
import Data.Version
import Text.Read (readMaybe)
import Web.UAParser
bugsnagDeviceFromUserAgent :: ByteString -> Device
bugsnagDeviceFromUserAgent userAgent =
defaultDevice
{ device_osName = osrFamily <$> osResult
, device_osVersion = do
result <- osResult
v1 <- readMaybe . unpack =<< osrV1 result
v2 <- readMaybe . unpack =<< osrV2 result
v3 <- readMaybe . unpack =<< osrV3 result
v4 <- readMaybe . unpack =<< osrV4 result
pure $ pack $ showVersion $ makeVersion [v1, v2, v3, v4]
, device_browserName = uarFamily <$> uaResult
, device_browserVersion = do
result <- uaResult
v1 <- readMaybe . unpack =<< uarV1 result
v2 <- readMaybe . unpack =<< uarV2 result
v3 <- readMaybe . unpack =<< uarV3 result
pure $ pack $ showVersion $ makeVersion [v1, v2, v3]
}
where
uaResult = parseUA userAgent
osResult = parseOS userAgent