### 1.2.13
- Module *NgxExport.Tools.Prometheus*.
+ Reimplement handler *statusLayout* without using a mutable array.
- Module *NgxExport.Tools.EDE*.
+ Drop all CPP macros.
- Drop Cabal flag *EDEUsePrettyprinter*.
- Require *time ≥ 1.9.1*, *base64 ≥ 1.0*, *prettyprinter ≥ 1.7.0*.
- Drop dependency on packages *array* and *safe*.
### 1.2.12.3
- Require *http-client-brread-timeout ≥ 0.3.0.0*.
### 1.2.12.2
- Use type synonym *LazyByteString* from *bytestring ≥ 0.11.2.0*.
### 1.2.12.1
- Group Template Haskell declarations to fix Haddock out-of-scope errors.
### 1.2.12
- Module *NgxExport.Tools.Resolve*.
+ Resolve non-canonical names in *collectA*. Alias records chains of depth up
to 12 are supported.
### 1.2.11
- Module *NgxExport.Tools.Resolve*.
+ A smarter implementation of the internal hashable data *HashUQuery*.
- Module *NgxExport.Tools.PCRE*.
+ Replace *rareService* mode declaration in service *declareRegexes* by
*restartPromptly* declaration from *ngx-export-tools ≥ 1.2.6*.
### 1.2.10
- Module *NgxExport.Tools.Resolve*.
+ Parameterize collected server data by query data to avoid getting wrong
values when multiple instances of the resolve service are running.
+ Use exporters from *ngx-export-tools ≥ 1.2.5* which do not share
configurations between multiple instances of the resolve service.
+ Append port numbers to values of collected host names as Nginx directive
*server* accepts such a notation.
- Module *NgxExport.Tools.PCRE*.
+ Replace *SingleShotService* mode declaration in service *declareRegexes* by
*rareService* declaration from *ngx-export-tools ≥ 1.2.5*.
### 1.2.9.1
- Module *NgxExport.Tools.Resolve*.
+ By mistake, servers with less weights had higher priorities in *A* queries.
+ If the number of upstreams in the priority list is less than the number of
variations of priorities collected in *SRV* queries or weights set in
*QueryA* data, then remaining servers with the lowest priorities or weights
won't be used in the upstreams.
+ With the *PriorityList* policy, weights of servers in the collected data are
deliberately not specified in *A* queries. In *SRV* queries, conversely,
weights are not specified with the *SinglePriority* policy as it is not
clear how to choose them correctly from the two parameters *priority* and
*weight* of the *SRV* record.
### 1.2.9
- Module *NgxExport.Tools.Resolve*.
+ Correctly print IP addresses in the server data collected in *A* queries.
+ Allow setting weights to names in *QueryA* data.
+ Allow priority policies in *QueryA* data.
+ If the number of upstreams in the priority list is greater than the number
of variations of priorities collected in *SRV* queries or weights set in
*QueryA* data, then remaining upstreams will contain the same servers with
the lowest priority or weight rather than not being specified at all in the
collected data.
+ With the *PriorityList* policy, weights of servers in the collected data are
deliberately not specified.
+ Names in the *QueryA* name list may contain suffix *:port* where *port* is
a port number, this suffix is ignored at resolving step in *collectA* and
only appended to values of the collected server addresses.
### 1.2.8.1
- Module *NgxExport.Tools.PCRE*.
+ Use *voidServer* from *ngx-export-tools ≥ 1.2.3*.
- Module *NgxExport.Tools.ServiceHookAdaptor*.
+ The test example was improved and extended.
### 1.2.8
- Module *NgxExport.Tools.Subrequest*.
+ Allow setting custom HTTP managers in subrequest configurations.
+ In subrequest configurations, field *useUDS* / *srUseUDS* is no longer
accepted, use *"manager": "uds"* / *srManager = UDS* instead.
### 1.2.7
- Support package *base64* *1.0*.
### 1.2.6
- Refactored to avoid using *head* and *tail* as it triggers *x-partial*
warnings in GHC *9.8.1*.
- Use declarations *voidHandler*, *voidHandler'*, and *NgxExportService* from
package *ngx-export-tools* *1.2.2*.
### 1.2.5
- Module *NgxExport.Tools.Resolve*.
+ Function *collectSrv* now returns a *TTL* with a list of pairs
*(Domain name, IP address)* wrapped in an *SRV* container.
+ Collection *ServerData* now contains the host name.
+ Allow multiple *upconf* endpoints, secure and insecure.
+ Removed *instance FromJSON ServerData*.
- Module *NgxExport.Tools.PCRE*.
+ Removed internal implementation of function *compile* which now requires
*pcre-light ≥ 0.4.1.2*.
### 1.2.4
- Added support for *https* connections in module *NgxExport.Tools.Subrequest*.
### 1.2.3
- In module *NgxExport.Tools.EDE*, custom EDE filters are now passed into
function *renderEDETemplateWith*. The collection of custom EDE filters with
*b64* and *uenc* filters is now exported from the module by name
*extraEDEFilters*.
### 1.2.2
- Added Cabal constraint *resolv ≥ 0.2.0.1* to fix memory leaks in module
*NgxExport.Tools.Resolve*.
### 1.2.1
- Improvements and bug fixes in module *NgxExport.Tools.Resolve*.
+ Added ability to set response timeout in service *collectUpstreams*.
+ Use *handleAny* from *safe-exceptions* in service *collectUpstreams*.
+ Improved type declarations and documentation.
### 1.2.0
- Added module *NgxExport.Tools.Resolve* which can be used to manage service
discovery in Nginx dynamic upstreams.
### 1.1.0
- Using *Network.HTTP.Client.BrReadWithTimeout* in module
*NgxExport.Tools.Subrequest* to ensure that a request won't stall on a bad
response from a buggy server.
- In module *NgxExport.Tools.Subrequest*, *srBody* was reimplemented using lazy
bytestrings.
### 1.0
- Module *NgxExport.Tools.Aggregate* can now be built without support from the
*Snap framework* (flag *SnapAggregateServer* replaces flag *Aggregate*). The
module now allows building native Nginx-based aggregate services (see updated
docs).
- In module *NgxExport.Tools.Aggregate*, getting current time with *ngxNow* was
replaced by *getCurrentTime* because the former is not safe in the async
context.
- Removed upper bound restriction in the Cabal constraint on the version of
package *aeson*.
- Package stability tag was promoted to stable.
### 0.8.2.0
- In module *NgxExport.Tools.Subrequest*, bridged HTTP subrequests return status
code of the source end of the bridge when it returns a *non-2xx* response.
### 0.8.1.0
- In module *NgxExport.Tools.Subrequest*, bridged HTTP subrequests were added.
- In module *NgxExport.Tools.Subrequest*, configured subrequest headers now get
merged with originally set request headers.
- Added Cabal constraint *aeson < 2.0.0.0* for building EDE module.
### 0.8.0.0
- Added module *NgxExport.Tools.PCRE*, this requires *nginx-haskell-module*
*2.8.4* or newer.
### 0.7.0.0
- Added module *NgxExport.Tools.ServiceHookAdaptor* to maintain custom global
data in all the worker processes in run-time.
### 0.6.2.0
- Added Cabal flag *Aggregate* to build module *NgxExport.Tools.Aggregate*
conditionally.
### 0.6.1.0
- Handler *extractRequestStatusFromFullResponse* was replaced with handler
*extractExceptionFromFullResponse*. The new handler extracts the error message
if the subrequest was terminated by an exception.
### 0.6.0.0
- Build EDE module with *prettyprinter* automatically.
### 0.5.9.0
- Allow Unix domain sockets in configurations of internal HTTP subrequests.
### 0.5.8.0
- Using *Data.HashSet* for *pcGauges* and *pcScale1000* in Prometheus metrics.
### 0.5.7.0
- Show histogram *error* counters in parameterized Prometheus metrics.
### 0.5.6.2
- Fixed wrong partitioning of gauges and counters from *special* counters.
### 0.5.6.0
- Added labeled parameterization for all supported types of metrics by using
annotated counters from
[*nginx-custom-counters-module*](https://github.com/lyokha/nginx-custom-counters-module).
### 0.5.5.0
- Added content handler *prometheusMetrics*.
- Using lazy text for encoding Prometheus metrics.
### 0.5.4.0
- Added handler *extractRequestStatusFromFullResponse* to retrieve completion
status of a subrequest.
### 0.5.3.0
- Handlers *makeSubrequestFull* and *makeSubrequestFullWithRead* no longer throw
errors on responses with HTTP statuses other than *2xx*.
- Implemented forwarding responses downstream to the client with function
*contentFromFullResponse* and content handler *fromFullResponse*.
### 0.5.2.0
- Added handlers to extract data from lists of values in the Prometheus module.
### 0.5.1.0
- Added gauge metrics type to Prometheus counters.
### 0.5.0.0
- Added module *NgxExport.Tools.Prometheus* to convert custom counters from
[*nginx-custom-counters-module*](https://github.com/lyokha/nginx-custom-counters-module)
to Prometheus metrics.
### 0.4.1.0
- Handler *renderEDETemplateFromFreeValue* was moved from the example to the
module.
### 0.4.0.0
- Implemented adjustable response timeouts.
- Implemented subrequest handlers with ability to extract full response data.
### 0.3.2.0
- Functions and handlers *subrequest* and *subrequestWithRead* were renamed to
*makeSubrequest* and *makeSubrequestWithRead* respectively.
### 0.3.1.0
- Added function *subrequestWithRead* and an asynchronous variable handler of
the same name.
### 0.3.0.0
- Added module *NgxExport.Tools.Subrequest* for making HTTP (sub)requests
easily.
### 0.2.2.0
- Added Cabal flag *EDE* to detect automatically if EDE module can be built.
- Added manual Cabal flag *ExperimentalEDE* to compile against patched *ede*
package where package *ansi-wl-pprint* was replaced with *prettyprinter*.
- The EDE example was enhanced to show how to parse free JSON values.
### 0.2.1.0
- Improved treatment of quoted string values in *b64* and *uenc* EDE filters.
- Added function *renderEDETemplateWith* for templating from any configuration
language which is translatable to *Aeson*'s *Value*.
### 0.2.0.0
- Added module *NgxExport.Tools.EDE* for parsing JSON values.
### 0.1.0.1
- Docs improved (using *strict variable handlers* from the latest
*nginx-haskell-module* in the example).
### 0.1.0.0
- Initial version.