Changelog for freckle-app-1.11.0.0
Unreleased
v1.11.0.0
- Add
MonadUnliftIOsuperclass toMonadSqlBackend - Use
checkpointCallStackinliftSqlto help grab more stack frames
v1.10.8.0
- Reduce logged caching errors to
WARNand adderror.stackto them - Add
Freckle.App.ExceptionwithannotatedExceptionMessagehelpers - Use
withFrozenCallStackon more exception utilities to reduce noise in call stacks
v1.10.7.0
-
Any Bugsnag
MetaDatain anAnnotatedException's annotations will now be copied into the Bugsnag event. This means you can use thecheckpointfunction to add context to an action, and this information will be visible in the bug report for any unhandled exception thrown from that action.e.g.
checkpoint (metaData "tab name" ["key" .= _value]) $ _action
v1.10.6.0
- The Bugsnag settings created by
envParseBugsnagSettingsnow has aBeforeNotifythat appropriately handlesAnnotatedException. Its special handling ofSqlErrorandHttpExceptionnow works in the presence of annotations. If aCallStackannotation is present, that will be used as the stacktrace for reported events.
v1.10.5.1
- Fix decoding bug when caching non-UTF-8 values
v1.10.5.0
-
Add
Freckle.App.Exception...modules with exception utilities based on theannotated-exceptionpackage. -
The Prelude module is expanded to reexport from
Freckle.App.Exception.MonadUnliftIOthe following:throwM,throwString,fromJustNoteM,catch,catchJust,catches,try,tryJust,impossible,ExceptionHandler,Exception,SomeException. These should be used in place of their relevant counterparts from packagesbase,exceptions,safe-exceptions, orunliftio. -
Add
Freckle.App.Random
v1.10.4.0
- Use JUnit formatting for test output when
JUNIT_ENABLEDenvironment variable is set. - Use environment variables to configure JUnit; always prefix
source paths with test suite
nameand output tests to/tmp/junit. - Remove using
CIRCLECIenvironment variable.
v1.10.3.0
- Add classes
MonadSqlBackendandMonadSqlTxfor being quite nonspecific about the context in which you interact with a SQL database.
v1.10.2.0
- Add module
Freckle.App.Memcached.MD5 - Add
fiveMinuteTTLto moduleFreckle.App.Memcached.CacheTTL - Add
cachingAsCBORto moduleFreckle.App.Memcached
v1.10.1.1
- Use
withTraceIdContextinFreckle.App.Kafka.Consumer.runConsumer, ensuring all logging contains thetrace_idin context. - Add
getCurrentTraceIdAsDatadogandwithTraceIdContexttoFreckle.App.OpenTelemetry.
v1.10.0.0
-
Full support for OpenTelemetry tracing, use it instead of XRay in
runDBThis replaces our bespoke, XRay-based
MonadTracerclass to be that ofhs-opentelemetry.This meansFreckle.App.Database.runDBnow traces using OpenTelemetry instead of XRay. A compilation error will indicate a missingHasTracerinstance, which you should implement based on theFreckle.App.OpenTelemetrymodule documentation.Clients who wish to remain on XRay can still upgrade, but must adjust their imports so they use
Freckle.App.Database.XRay, notFreckle.App.Database.
v1.9.5.1
- Fixed mistake in
Freckle.App.Test.Yesod.getResponseproducing nontermination
v1.9.5.0
- Add module
Freckle.App.Test.Yesod
v1.9.4.0
- Add
Freckle.App.Async(primarily) for correctly managing thread context when spawning new threads.
v1.9.3.0
- Auto-commit offset when consuming Kafka events.
v1.9.2.1
- Fixed segfault bug in
Freckle.App.Kafka.Consumer.
v1.9.2.0
- Add
Freckle.App.Kafka.Consumerfor consuming Kafka events. - Move producer to
Freckle.App.Kafka.Producer. - Re-export both modules in
Freckle.App.Kafka.
v1.9.1.1
- Add
KafkaProducerPoolConfigfor controlling Kafka producer pool parameters
v1.9.1.0
- Add
Freckle.App.Kafkafor producing kafka events
v1.9.0.3
- Use option
PGSCHEMAenvironment variable to set schema at connection start.
v1.9.0.2
- Fix for not setting ECS Metadata tags in
StatsClient
v1.9.0.1
-
Report errors getting ECS Metadata during
withStatsClientinitializationThis 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
- Refactor
Freckle.App.Waiinterface - Add
addThreadContextFromStatsTags - Replace
HasXRayVaultDatawithMonadTracer - Introduce
AppT
v1.8.1.0
- Add
runDBSimplefor use cases where instrumentation is not valuable.
v1.8.0.0
- Fix bug: gauges not being published.
- Add HasVaultData type class to remove the dependency on Yesod's MonadHandler
v1.7.1.0
- Add Incremental CSV parsing
v1.7.0.0
-
Add XRay and EKG support to freckle-app's runDB.
This involves an breaking change in
runDB's constraints, thus the major version bump.
v1.6.0.3
-
Revert regrouping of
SqlErrorbyurlConsider
/foos/1vs/foos/2: grouping naively byurlmakes these two errors when we wanted them to be one. This can't be solved without knowledge of the routing system, so we can't do it from within this library as-is. Therefore, we've reverted the feature for now.
v1.6.0.2
- Strip query string from URLs used to group timeout exceptions in Bugsnag.
v1.6.0.1
- The built-in Bugsnag
BeforeNotifywill further groupSqlErrors that are timeouts (57014) by Request URL (when request info is present in theEvent)
v1.6.0.0
-
Remove
AppVersionThis also removes the
test-gitflag.This was over-engineered, in our opinion. If you're making use of the conventional
DD_variables that theStatsmodule expects, you should be able to:- Replace any
appVersion :: AppVersionwithappVersion :: Text - Replace
appVersion <- getAppVersionwithappVersion <- maybe "unknown" pack <$> lookupEnv "DD_VERSION" - Replace
avName appVersionwithappVersion - Remove uses of
avCreatedAt
- Replace any
-
Add
Freckle.App.Dotenv, wrappingdotenvAnd move
Freckle.App.Test.withAppto use it instead ofLoadEnv. This is behavior-neutral except:-
We no longer load
.envafter.env.test, we only load.env.testMissing variables should generate errors prompting you to copy values from the former to the latter as required.
-
We will verify the
.envfile against an.env.exampleif present.
-
-
Add
Freckle.App.Bugsnag.Metadata
v1.5.0.1
- Export
Freckle.App.Stats.tagsL
v1.5.0.1
- Relax lower bound on
primitive
v1.5.0.0
-
Remove
Freckle.App.Datadogmodules forFreckle.App.StatsequivalentsIt's not a drop-in, but the required changes should be mechanical:
- Instead of
HasDogStats{Client,Tags}, implement a singleHasStatsClient - Instead of
mkStatsClientusewithStatsClient(the new style ofrunApphad will enable that) - Use
taggedinstead of extra arguments to metric sends - Move to the new
Rts,Gauge, andMiddleware.Statsmodules
- Instead of
-
Change signature of
runAppandwithAppInstead of passing a loaded
App(or a function that loads anApp) torunAppandwithApp, you should now pass a function that takes a function and calls it on the loadedApp.This is necessary for apps that hold onto values that require cleanup, like
withStatsClient.-- This doesn't work loadApp :: IO App loadApp = do -- ... withStatsClient $ \appStatsClient -> do -- ??? -- This does loadApp :: (App -> IO a) -> IO a loadApp f = do -- ... withStatsClient $ \appStatsClient -> do f App { .. }The old form can be trivially converted to the new form like so,
loadApp :: (App -> IO a) -> IO a loadApp f = f =<< loadApp' loadApp' :: IO App loadApp' = -- old code -
Add functions that check properties that we like to commonly test.
v1.4.0.0
-
Remove
runCapturedLoggingTWe can use
Blammo.Logging.Logger.newTestLoggerinstead. SeeMemcachedSpecas an example. -
Compatibility down to LTS 12.26 / GHC 8.4
v1.3.0.0
- Adjust
Freckle.App.Testinterface- Remove
runAppTest - Add
appExamplefor making a expectation concretelyAppExample - Add
expectationFailure, andpending(With)helpers inMonadIO
- Remove
v1.2.0.2
Env.keptcompatibility with envparse-0.5
v1.2.0.1
-
Use
Env.keptwith parsing that occurs inmakePostgresPoolThis ensure all
PGvariables are kept in the environment after parsing, to again match pre-v1.1 behavior.If you would prefer not to keep these variables, parse them yourself (e.g. with
envParseDatabaseConf) and usemakePostgresPoolWith. -
Add
Freckle.App.Env.keptto re-define aParserso that all variables are kept after reading. Not doing this can break tests if you are re-parsing the environment for each example.Replace
Env.parse fwithEnv.parse f $ Env.keptto recover how this module behaved prior to v1.1.
v1.2.0.0
-
Remove
Freckle.App.Logging, integrate with blammo instead.This will require the following end-user changes:
-
Remove
HasLogginginstance and addHasLoggerThis will require storing a
Loggeron your runtimeApptype, instead of aLogLevel(et al) in your staticAppSettingstype. (Or move torunSimpleLoggingT.) -
Replace WAI middleware with Blammo integration
-
Replace Yesod functions with [Blammo integration][blammo-yesod]
And changes to environment variable values:
- If using
LOG_OUTPUT=std(out|err), useLOG_DESTINATION=std(out|err)(note thatstdoutis the default) - If using
LOG_OUTPUT=file, useLOG_DESTINATION=@fancy.log(yes, that's this option did) - If using
LOG_FORMAT=terminal, useLOG_FORMAT=tty(note that this is the defualt)
-
v1.1.0.0
-
Require
MonadLoggerIOinmakePostgresPool(and so respect that logging context from DB activities).Previous behavior can be recovered by using
runNoLoggingT makePostgresPool. -
Re-implement
FronRow.App.Envvia external library,envparseSome conversions will be required:
-
Reader ashould now beReader Error a -
Parser ashould now beParser Error a -
parseshould now beparse id -
var x X nonEmptyshould now bevar (x <=< nonempty) X memptyNote that
(str <=< nonempty)is redundant. -
var (f <$> g) X mshould now bef <$> var g X mNote that
defwill now need a value the same type asg, notf. -
switchandflagno longer acceptdef(the non-active value is an implicit default; the previous behavior was kind of surprising and ambiguous). -
handleEitherhas been removed. Users will have to parse a complete value and then further validate/throw externally. -
Previously, we always behaved as if
keepwas applied. Add that explicitly if you need that behavior.
-
v1.0.4.0
- Add
Freckle.App.Bugsnagfor Bugsnag logging in applications. - Increased default PG poolsize to 10.
v1.0.3.0
-
Add
Freckle.App.Memcachefor using memcached in Apps -
Add
Freckle.App.Scientistfor using scientist in Apps
v1.0.2.10
-
Support GHC 9.0 and 9.2
-
Change
Waifunction arguments for producingRouteNameandTraceIdto tagsTo maintain the same behavior, replace
makeLoggingMiddleware app getRouteName getTraceId ...With
makeLoggingMiddleware app getTags ... where getTags req = catMaybes [ ("route", ) <$> getRouteName req , ("trace_id", ) <$> getTraceId req ]And similar for
makeRequestMetricsMiddleware.
v1.0.2.9
- Add some common textual encoding functions to prelude
v1.0.2.8
- Don't allow
aeson-2.0
v1.0.2.7
- Remove explicit
--regionin IAM DB token call - Relax lower-bounds throughout
v1.0.2.6
- Add a looser lower-bound on
containers
v1.0.2.5
- Add a looser lower-bound on
bytestring - Add a looser lower-bound on
template-haskell
v1.0.2.4
- Add a looser lower-bound on
base
v1.0.2.3
- Add Freckle-specific prelude.
v1.0.2.2
- Target
hspec-junit-formatter-1.0.3.0(use1.1.0.0in development)
v1.0.2.1
- Add
denyFrameEmbeddingMiddlewarefor denying HTML frame embedding.
v1.0.2.0
- Add 'Freckle.App.Yesod.Route' to allow printing route names.
v1.0.1.0
- Added
Freckle.App.Datadog.Gaugefor client side stateful gauges. - Added
Freckle.App.Datadog.Rtsfor sending RTS statistics to DataDog.
v1.0.0.4
-
Support seconds or milliseconds in
PGSTATEMENTTIMEOUTNOTE: We consider this a non-breaking change because the environment variable interface is backwards-compatible. By normal Haskell rules, it would be major since it's changing the type of something exported.
-
Add
respondQueryCanceledYesod Middlewares -
Add
makeRequestMetricsMiddleware
v1.0.0.3
- Add
package.yamltoextra-source-files.
v1.0.0.2
- Extract tests that require
gitinto a new suite.
v1.0.0.1
- Ensure
releaseGitHub Action completes properly.
v1.0.0.0
First tagged release.