packages feed

freckle-app 1.9.0.0 → 1.9.0.1

raw patch · 5 files changed

+45/−16 lines, 5 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ Freckle.App.Ecs: EcsMetadataErrorInvalidJSON :: HttpDecodeError -> EcsMetadataError
+ Freckle.App.Ecs: EcsMetadataErrorInvalidURI :: String -> EcsMetadataError
+ Freckle.App.Ecs: data EcsMetadataError
+ Freckle.App.Ecs: instance GHC.Show.Show Freckle.App.Ecs.EcsMetadataError
- Freckle.App.Ecs: getEcsMetadata :: MonadIO m => m (Maybe EcsMetadata)
+ Freckle.App.Ecs: getEcsMetadata :: (MonadIO m, MonadError EcsMetadataError m) => m (Maybe EcsMetadata)

Files

CHANGELOG.md view
@@ -1,4 +1,11 @@-## [_Unreleased_](https://github.com/freckle/freckle-app/compare/v1.9.0.0...main)+## [_Unreleased_](https://github.com/freckle/freckle-app/compare/v1.9.0.1...main)++## [v1.9.0.1](https://github.com/freckle/freckle-app/compare/v1.9.0.0...v1.9.0.1)++- Report errors getting ECS Metadata during `withStatsClient` initialization++  This does change the type of `getEcsMetadata`, but we consider it a+  patch-level bump because that module is very unlikely to be used directly.  ## [v1.9.0.0](https://github.com/freckle/freckle-app/compare/v1.8.1.0...v1.9.0.0) 
freckle-app.cabal view
@@ -1,6 +1,6 @@ cabal-version:      1.18 name:               freckle-app-version:            1.9.0.0+version:            1.9.0.1 license:            MIT license-file:       LICENSE maintainer:         Freckle Education
library/Freckle/App/Ecs.hs view
@@ -1,5 +1,6 @@ module Freckle.App.Ecs   ( EcsMetadata(..)+  , EcsMetadataError(..)   , EcsContainerMetadata(..)   , EcsContainerTaskMetadata(..)   , getEcsMetadata@@ -7,17 +8,23 @@  import Freckle.App.Prelude -import Control.Error.Util (hush)+import Control.Monad.Except (MonadError(..)) import Data.Aeson import Data.List.Extra (dropPrefix) import Freckle.App.Http import System.Environment (lookupEnv)+import UnliftIO.Exception (Exception(..))  data EcsMetadata = EcsMetadata   { emContainerMetadata :: EcsContainerMetadata   , emContainerTaskMetadata :: EcsContainerTaskMetadata   } +data EcsMetadataError+  = EcsMetadataErrorInvalidURI String+  | EcsMetadataErrorInvalidJSON HttpDecodeError+  deriving stock Show+ data EcsContainerMetadata = EcsContainerMetadata   { ecmDockerId :: Text   , ecmDockerName :: Text@@ -43,15 +50,24 @@ aesonDropPrefix :: String -> Options aesonDropPrefix x = defaultOptions { fieldLabelModifier = dropPrefix x } -getEcsMetadata :: MonadIO m => m (Maybe EcsMetadata)-getEcsMetadata =-  liftA2 EcsMetadata-    <$> makeContainerMetadataRequest "/"-    <*> makeContainerMetadataRequest "/task"--makeContainerMetadataRequest :: (MonadIO m, FromJSON a) => Text -> m (Maybe a)-makeContainerMetadataRequest path = do+getEcsMetadata+  :: (MonadIO m, MonadError EcsMetadataError m) => m (Maybe EcsMetadata)+getEcsMetadata = do   mURI <- liftIO $ lookupEnv "ECS_CONTAINER_METADATA_URI"-  meMetadata <- for mURI $ \uri -> do-    httpJson $ parseRequest_ $ uri <> unpack path-  pure $ hush . getResponseBody =<< meMetadata++  for mURI $ \uri ->+    EcsMetadata+      <$> makeContainerMetadataRequest (uri <> "/")+      <*> makeContainerMetadataRequest (uri <> "/task")++makeContainerMetadataRequest+  :: (MonadIO m, MonadError EcsMetadataError m, FromJSON a) => String -> m a+makeContainerMetadataRequest =+  mapEither EcsMetadataErrorInvalidJSON+    . getResponseBody+    <=< httpJson+    <=< mapEither (EcsMetadataErrorInvalidURI . displayException)+    . parseRequest++mapEither :: MonadError e m => (x -> e) -> Either x a -> m a+mapEither f = either (throwError . f) pure
library/Freckle/App/Stats.hs view
@@ -36,6 +36,7 @@  import Blammo.Logging import Control.Lens (Lens', lens, to, view, (&), (.~), (<>~))+import Control.Monad.Except (runExceptT) import Control.Monad.Reader (local) import Data.Aeson (Value(..)) import Data.String@@ -43,6 +44,7 @@ import Freckle.App.Ecs import qualified Freckle.App.Env as Env import qualified Network.StatsD.Datadog as Datadog+import System.IO (hPutStrLn, stderr) import qualified System.Metrics.Gauge as EKG import UnliftIO.Exception (bracket_) import Yesod.Core.Lens@@ -264,8 +266,12 @@     & (Datadog.tags .~ map (uncurry Datadog.tag) scTags)  getEcsMetadataTags :: MonadIO m => m [(Text, Text)]-getEcsMetadataTags = maybe [] toTags <$> getEcsMetadata+getEcsMetadataTags = do+  emMetadata <- runExceptT getEcsMetadata+  either (([] <$) . err) (pure . maybe [] toTags) emMetadata  where+  err e = liftIO $ hPutStrLn stderr $ "Error reading ECS Metadata: " <> show e+   toTags (EcsMetadata EcsContainerMetadata {..} EcsContainerTaskMetadata {..})     = [ ("container_id", ecmDockerId)       , ("container_name", ecmDockerName)
package.yaml view
@@ -1,5 +1,5 @@ name: freckle-app-version: 1.9.0.0+version: 1.9.0.1 maintainer: Freckle Education category: Utils github: freckle/freckle-app