{-# LANGUAGE OverloadedStrings #-}

module OpenTelemetry.Lightstep.Exporter where

import Control.Monad.IO.Class
import OpenTelemetry.Common
import OpenTelemetry.Lightstep.Config
import OpenTelemetry.ZipkinExporter
import Text.Printf

createLightstepSpanExporter :: MonadIO m => LightstepConfig -> m (Exporter Span)
createLightstepSpanExporter LightstepConfig {..} = liftIO do
  let zcfg =
        ZipkinConfig
          { zEndpoint = printf "https://%s:%d/api/v2/spans" lsHostName (fromIntegral lsPort :: Int),
            zServiceName = lsServiceName,
            zGlobalTags =
              [ ("lightstep.component", lsServiceName),
                ("lightstep.access_token", lsToken)
              ],
            zSpanQueueSize = lsSpanQueueSize,
            zGracefulShutdownTimeoutSeconds = lsGracefulShutdownTimeoutSeconds
          }
  createZipkinSpanExporter zcfg