module OpenTelemetry.Resource.Service.Detector where

import qualified Data.Text as T
import OpenTelemetry.Resource.Service
import System.Environment (lookupEnv, getProgName)

-- | Detect a service name using the 'OTEL_SERVICE_NAME' environment
-- variable. Otherwise, populates the name with 'unknown_service:process_name'.
detectService :: IO Service
detectService :: IO Service
detectService = do
  Maybe String
mSvcName <- String -> IO (Maybe String)
lookupEnv String
"OTEL_SERVICE_NAME"
  Text
svcName <- case Maybe String
mSvcName of
    Maybe String
Nothing -> String -> Text
T.pack (String -> Text) -> (String -> String) -> String -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String
"unknown_service:" String -> String -> String
forall a. Semigroup a => a -> a -> a
<>) (String -> Text) -> IO String -> IO Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO String
getProgName
    Just String
svcName -> Text -> IO Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Text -> IO Text) -> Text -> IO Text
forall a b. (a -> b) -> a -> b
$ String -> Text
T.pack String
svcName
  Service -> IO Service
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Service -> IO Service) -> Service -> IO Service
forall a b. (a -> b) -> a -> b
$ Service :: Text -> Maybe Text -> Maybe Text -> Maybe Text -> Service
Service
    { serviceName :: Text
serviceName = Text
svcName
    , serviceNamespace :: Maybe Text
serviceNamespace = Maybe Text
forall a. Maybe a
Nothing
    , serviceInstanceId :: Maybe Text
serviceInstanceId = Maybe Text
forall a. Maybe a
Nothing
    , serviceVersion :: Maybe Text
serviceVersion = Maybe Text
forall a. Maybe a
Nothing
    }