github.com/go-graphite/carbonapi@v0.17.0/CHANGES.md (about)

     1  Changes
     2  =================================================
     3  
     4  [Fix] - bugfix
     5  
     6  **[Breaking]** - breaking change
     7  
     8  [Feature] - new feature
     9  
    10  [Improvement] - non-breaking improvement
    11  
    12  [Code] - code quality related change that shouldn't make any significant difference for end-user
    13  
    14  [Config] - related to config options or default parameters
    15  
    16  [Build] - only related to ways how someone can build application
    17  
    18  CHANGELOG
    19  ---------
    20  **0.16.1**
    21   - [Build] Update build version of golang to 1.21.0
    22   - [Improvement] Better error messages
    23   - [Improvement] Implement /metrics/expand API
    24   - [Improvement] Implement aliasQuery
    25   - [Fix] aliasByNode/Tag should not disacrd tags anymore
    26   - [Fix] VicotriaMetrics cluster now should support autocomplete for tags
    27   - [Fix] ConstantSeries should now work as in graphite-web
    28   - [Fix] Fix logic of hitcount function (should behave like in graphite-web)
    29   - [Fix] alignToInterval should work well in hitcount function
    30   - [Fix] smartSummarize should handle stop time properly
    31   - [Fix] smartSummarize should now handle alignTo properly
    32   - [Fix] smartSummarize should handle consolidation functiosn better
    33   - [Fix] summarize should work as in graphite-web for functions that have only NaN values
    34   - [Fix] toUpper and toLower now should work correctly with function names
    35   - [Fix] Skip all whitespace during expression parsing
    36   - [Fix] time units now case insensitive
    37   - [Fix] use specified bootstrapInterval to adjust start time in holtWinters* class of functions
    38   - [Fix] groupByNode should return exepcted amount of series
    39   - [Fix] multiple fixes for exponentialMovingAverage
    40   - [Fix] holtWinters supports seasonality argument
    41   - [Fix] fix holtWintersAbberation behavior
    42   - [Fix] fix behavior of Below function
    43   - [Fix] fix sin and exp functions (description was not accurate or correct)
    44  
    45  **0.16.0.1**
    46   - [Build] Fix automation that builds docker images
    47   - [Build] Add rockylinux-9 packages (RHEL 9)
    48   - [Build] Update build version of golang to 1.19.4
    49  
    50  **0.16.0**
    51   - [Improvement] Deprecate and remove carbonzipper binary (thx to @msaf1980)
    52   - [Improvement] Remove deprecated carbonsearch support
    53   - [Improvement] Refactor HTTP client (used to talk to databases) to properly do keepAlive and respect specified amount of connections
    54   - [Improvement] HTTP client should now support mTLS checking
    55   - [Improvement] Listeners now support TLS (including mTLS)
    56   - [Improvement] Update all vendored libraries to their latest stable version
    57   - [Code] fix various panics in tags and use copy tags to avoid mutating input (thx to @npazosmendez)
    58   - [Feature] Port `join` function from Avito carbonapi fork (https://github.com/el-yurchito/carbonapi/commit/bccdb90a90492314c18696eb4f064b818c5fff70 and https://github.com/el-yurchito/carbonapi/commit/47177771d60b7af0f5ac865634ecf3d1c3aa2802)
    59   - [Feature] Implement exp() function (thx to @carrieedwards)
    60   - [Feature] Implement logit() function (thx to @carrieedwards)
    61   - [Feature] Implement unique() function (thx to @carrieedwards)
    62   - [Feature] Implement sinFunction() function (thx to @carrieedwards)
    63   - [Feature] Implement legendValue() function (thx to @carrieedwards)
    64   - [Feature] Implement aggregateWithWildcards() function (thx to @carrieedwards)
    65   - [Feature] Implement powSeries() function (thx to @leizor)
    66   - [Feature] Implement averageOutsidePercentile() function (thx to @carrieedwards)
    67   - [Feature] Implement sigmoid() function (thx to @carrieedwards)
    68   - [Feature] Support for xFilesFactor and setXFilesFactor (thx to @carrieedwards)
    69   - [Feature] Implement removeBetweenPercentile() function (thx to @carrieedwards)
    70   - [Feature] Implement identity() function (thx to @carrieedwards)
    71   - [Feature] Implement minMax() function (thx to @carrieedwards)
    72   - [Feature] Implement aggregateSeriesLists() function (thx to @leizor)
    73   - [Feature] Implement movingWindow() function (thx to @carrieedwards)
    74   - [Feature] Implement exponentialMovingAverage() function (thx to @carrieedwards)
    75   - [Feature] Implement verticalLine() function (thx to @leizor)
    76   - [Feature] Implement toLowerCase() function (thx to @carrieedwards)
    77   - [Feature] Implement toUpperCase() function (thx to @carrieedwards)
    78   - [Feature] Implement sumSeriesLists() function (thx to @carrieedwards)
    79   - [Feature] Implement compressPeriodicGaps() function (thx to @carrieedwards)
    80   - [Feature] Implement holtWintersConfidenceArea() function (thx to @carrieedwards)
    81   - [Fix] Numerous compatibility fixes for functions, mostly for graphite-web compatibility (thx to @carrieedwards and @npazosmendez, @msaf1980)
    82   - [Fix] Refactor scaling and re-aligning series (thx to @msaf1980)
    83   - [Fix] Fix logic that extracts names when metric name contains non-ascii characters (thx to @msaf1980)
    84   - [Fix] Parser now accepts escaped characters
    85   - [Fix] IronDB adjuststep logic now works properly
    86   - [Fix] Fix tag extractions in seriesByTag (thx to @msaf1980)
    87   - [Fix] Fix tag handling in nested functions (thx to @carrieedwards)
    88  
    89  **0.15.6**
    90   - [Improvement] Significant improvement in sorting metrics from backends (thx to @Felixoid)
    91   - [Fix] Get rid of bashism in postinst script (thx to @Glandos)
    92  
    93  **0.15.5**
    94   - **[Security]** Update vendored dependency for GoGo Proto that should fix improper index validation (CVE-2021-3121)
    95   - [Feature] carbonapi supports `-check-config` flag just to run config validation (thx to @msaf1980)
    96   - [Feature] 2-level cache lifetime support (see docs for more information) (thx to @msaf1980)
    97   - [Feature] Support IronDB backend (thx to @deniszh)
    98   - [Improvement] Debug logs should now log a bit more information about metrics
    99   - [Improvement] Better performance for metrics/find on relatively new VictoriaMetrics (thx to @iklfst)
   100   - [Improvement] Add support for Cluster Tenant ID for VictoriaMetrics backend (thx to @iklfst)
   101   - [Fix] asPercent handles empty values correctly (thx to @msaf1980)
   102   - [Fix] Cairo functions supports context passing now (thx to @faceair)
   103   - [Fix] Handling multi-fetch request parameters for VictoriaMetrics backend respects start & stop Time as well as step for every metric (thx to @alexey-mylnkov)
   104   - [Fix] Fix a bug in removeEmptySeries
   105   - [Fix] Properly pass step to VictoriaMetrics (thx to @tantra35)
   106   - [Fix] Fix substr function to behave in a way like graphite-web
   107   - [Fix] timeShift properly hanldes resetEnd parameter (thx to @msaf1980)
   108   - [Fix] Fix `moving*` to work properly when step is greater than window size (thx to @jonasbleyl)
   109   - [Fix] Pass request UUID as header (thx to @msaf1980)
   110   - [Fix] `groupByNode(s)` supports negative node indecies (thx to @Felixoid)
   111  
   112  **0.15.4**
   113   - [Fix] zipper requests net error (encapsulated) (thx to @msaf1980)
   114   - [Fix] preserve original points for some functions (thx to @msaf1980)
   115   - [Fix] aliasByNode: strip function in name (thx to @msaf1980)
   116   - [Improvement] build: allow to replace fpm with cli-compability program (thx to @msaf1980)
   117   - [Improvement] build: equal version for carbonapi/carbonzipper package (thx to @msaf1980)
   118  
   119  **0.15.3**
   120   - [Fix] Time parsing is now closer to how graphite do it
   121   - [Fix] Aggregation functions now scale input to common step (thx to @Felixoid)
   122   - [Fix] Fix the way how partialy retrived requests that had globs were handled
   123   - [Fix] Fix resolver to accept `0.0.0.0` and `[::]` as valid addresses for listeners
   124   - [Fix] Handling of unicode characters when common table is added.
   125   - [Fix] AlignVluaes in Prometheus and VictoriaMetrics backends shouldn't drop last value (thx to @limpasha)
   126   - [Fix] maxDataPoints should be passed to Prometheus and VictoriaMetrics\
   127   - [Fix] Various packaging problems (e.x. logrotate) (thx to @deniszh)
   128   - [Improvement] xFilesFactor support in SUmmarizeValues
   129   - [Improvement] Port functions that were implemented in avito's fork of carbonapi (aliasByHash, lowestMin, highestMin, integralWithReset and much more): https://github.com/go-graphite/carbonapi/commit/322dae560e1f4c79aa4b410cf3701c9c677c386b for the diff for COMPATIBILITY.md file
   130   - [Improvement] Refactor error handling (thx to @msaf1980)
   131   - [Improvement] Default systemd unit should drop privileges (thx to @deniszh)
   132   - [Improvement] Enable cairo support for docker images (thx to @deniszh)
   133  
   134  **0.15.2**
   135   - [Fix] Honor isLeaf attribute in replies (makes possible to have metric called "metric.foo" and metric called "metric.foo.bar" and see both in find queries (thx to @tantra35)
   136   - [Fix] Fix bootstrapInterval paramter handling in holtWinters functions
   137   - [Fix] Fix potential panics when metirc do not have required amount of data for `holtWinters` functions
   138   - [Fix] Fix panics with several functions if they are applied before `alias` function (mostly `holtWinter` functions)
   139  
   140  **0.15.1**
   141   - [Fix] Fix back compatibility for default listen on `localhost:8081` (thx to @Felixoid)
   142  
   143  **0.15.0**
   144   - **[Breaking]** - cache (including memcache) now uses sha256 for a hash function for keys. This might break existing setup
   145   - **[Breaking]** - new config variable `slowLogThreshold` under `upstreams` section controls what request time would be required for request to be logged in `slow` logger.
   146   - **[Breaking]** - remove semi-broken support for graceful restarts (See #552)
   147   - [Fix] Fix parsing tags from backend replies (adds support of `=` in tag values, make them more compatible with graphite-web)
   148   - [Fix] Fix how request splitting worked for maxBatchSize != 0 (thx to @tantra35)
   149   - [Improvement] Bad requests will return error 400 instead of 500 (thx to @Felixoid)
   150   - [Improvement] VictoriaMetrics >= 1.53.1 backend should work a bit faster for find queries
   151   - [Improvement] Do not apply tag-deduplication for VictoriaMetrics >= 1.50.0 (less memory consumption, faster queries)
   152   - [Improvement] Use VictoriaMetrics's graphite-compatibe API to query for tags (less memory consumption, faster queres)
   153   - [Feature] Support `add` function (thx to @Felixoid)
   154   - [Feature] removeEmptySeries supports xFilesFactor parameter (thx to @faceair)
   155   - [Feature] Allow to specify multiple listen addresses
   156   - [Feature] Optional caching DNS resolver
   157  
   158  **0.14.2.1**
   159   - [Fix] Fix test for timeShift function. This doesn't affect the way how carbonapi works, just makes CI happy
   160  
   161  **0.14.2**
   162   - [Feature] Separate backend protocol for VictoriaMetrics. Based on prometheus protocol (and share some of it's code), but uses some of VM-specific features to improve performance for /metrics/find queries (Related to #521)
   163   - [Feature] timeShift function supports `resetEnd` parameter (thx to @faceair). Current default is set to `false` to match carbonapi behavior, however in 0.15.0 it will be changed to `true`.
   164   - [Feature] Resepct pixelRatio parameter from referer if not specified in request. (thx to @lomik)
   165   - [Fix] Handling of maxBatchSize (maxGlobs) in config file. Respect overrides on backend level.
   166   - [Fix] Warnings about duplicate functions when carbonapi starts.
   167   - [Fix] Resulting tags in groupByTags are now correct (thx to @Felixoid)
   168   - [Fix] Fix handling of requests that fetches data with different start/end times (thx to @Felixoid). Related to #526
   169   - [Fix] Fix the way how `pow` function works with NaN in values (thx to @zhelyabuzhsky)
   170   - [Fix] CSV format now produce dates in UTC (like in graphite-web) (thx to @jonasbleyl)
   171   - [Fix] Fix from/util timestamp aligning in all `moving*` functions (thx to @Felixoid)
   172  
   173  **0.14.1**
   174   - [Feature] Implement `doMultipleRequestsIfSplit` config option which could be useful for go-carbon and huge requests (See #509)
   175   - [Improvement] Return stacktrace on panic (thx to @Felixoid)
   176   - [Fix] Fix case where some metrics passed to functions like group or sumSeries were missing. Fixes #438
   177   - [Fix] Accept `1` and `0` as bool arguments for `True` and `False`. (thx to @Felixoid)
   178   - [Fix] Align precision of multiple metrics (thx to @Felixoid, see #500 and #501)
   179   - [Fix] fallbackSeries now works properly (thx to @Egor Redozubov)
   180   - [Fix] Panic when trying to render png/svg of an empty response (Fixes #503)
   181   - [Fix] Fix Error 500 when sendGlobsAsIs is false (Fixes #506)
   182   - [Fix] prometheus backend: carbonapi should send 'end' instead of 'stop' in queries (thx to Alexandre Vincent)
   183   - [Fix] change metrics resulting tags to match graphite-web in some cases (thx to @Felixoid)
   184   - [Fix] Prometheus backend: trust timestamps from the backend (Fixes #504, Fixes #514)
   185   - [Fix] percentileOfSeries: return first of filtered datapoints in case only one series have valid data (Fixes #516)
   186   - [Code] merge aliasByNode and aliasByTags (thx to @Felixoid)
   187  
   188  **0.14.0**
   189   - **[Breaking]**[Code] expr library and all functions now requires caller to pass context. See #485
   190   - **[Breaking]**[Config] for protocol `auto` there is now no default implied concurrency limit of `100` as it was before.
   191   - **[Breaking]**[Config] Changed default value for `notFoundStatusCode` to 200 to match graphite-web behavior
   192   - [Feature] Add a `backendCache` option that implements dedicated cache for backend responses. See #480 (thx to @jaroslawr)
   193   - [Feature] For Prometheus backend it is now possible to specify max\_points\_per\_query
   194   - [Feature] weightedAverage function (thx to @Felixoid)
   195   - [Improvement] carbonapi now pass maxDataPoints to backends that support carbonapi\_v3\_pb format. Previously 0 was passed.
   196   - [Fix] metric find requests to backend now pass start and end time (thx to @faceair)
   197   - [Fix] Fix 404 status code if backend have errors (thx to @lexx-bright)
   198   - [Fix] Fix sorting in \*seriesLists functions (thx to Egor Redozubov)
   199   - [Fix] Potential panic during groupByNode evaluation if callback is invalid expression
   200   - [Fix] Partially overlapping backend groups caused some queries to return empty result
   201   - [Fix] Sorting metrics should work now in the same way as in graphite-web (thx to @Felixoid)
   202   - [Fix] Time of the first timestamp was wrong if multiplySeries was applied (it matched request `from`)
   203  
   204  
   205  **0.13.0**
   206   - [Fix] smartSummarize now supports wildcards in the metric names (thx to @Peter-Sh)
   207   - [Fix] json format correctly distinguishes between +-inf and nan (thx to @faceair)
   208   - [Fix] prometheus backend: fix a bunch of problems related to globs and regex escaping (thx to @rodio)
   209  
   210  **0.13.0.rc.3**
   211   - [Fix] Proper fix for prometheus backend and non-taged render requests with groupByNodes function
   212   - [Fix] Align timestamps in prometheus backend (thx to @rodio, #467)
   213  
   214  **0.13.0-rc.2**
   215   - [Fix] Prometheus backend wasn't working correctly for non-taged render requests (#465, thx to @menai34 for proposed fix)
   216   - [Fix] Fix panic when using prometheus tagged response for non-tagged queries in groupByTags function (and maybe more)
   217   - [Fix] Add proper aliases for `aggregate` functions - that would make groupByTags properly usable with functions like `diff` and `total`.
   218  
   219  **0.13.0-rc.1**
   220   - [Improvement] Redesign error handling and logging. Logging should be now less noisy and all error messages should contain better reasoning about error cause
   221   - [Improvement] Move some of the logging messages to Debug level - that should make logs less noisy and still preserve ability to see detailed errors on Debug level
   222   - [Improvement] Add a config parameter to disable tldCache (useful for clickhouse-based backends)
   223   - [Improvement] Implement noNullPoints query parameter. Works only with JSON as in graphite-web
   224   - [Improvement] For all SeriesLists functions, allow to specify default argument (thx to kolobaev@)
   225   - [Improvement] Add support for `round` function (thx to kolobaev@)
   226   - [Improvement] Add integralByInterval function (thx to faceair@)
   227   - [Improvement] Add sortBy function (thx to misiek08@)
   228   - [Improvement] Add smartSummarize function (thx to misiek08@)
   229   - [Fix] /render and /metrics/find URLs now works correctly for format=carbonapi\_v2\_pb (protov3) and for new format (carbonapi as a carbonapi's backend)
   230   - [Fix] Allow '%' in metric names
   231   - [Fix] zipper metrics now exported again
   232   - [Fix] applyByNode - fix various incompatibilities with graphite-web (node starts with 1, some rewrite related issues, etc) (thx to faceair@)
   233   - [Fix] Honor SendGlobAsIs and AlwaysSendGlobAsIs (important for pre-0.12 configs)
   234   - [Fix] Fix panic in some cases when one of the metrics is missing
   235   - [Fix] Compatbility fixes to useAboveSeries (now it's behavior matches graphite-web's)
   236   - [Fix] Fix seriesList functions in case of unsorted responses (\*seriesList sorts denomniators and numerators first of all)
   237   - [Fix] Fix pprof endpoint routing (thx to faceair@)
   238   - [Fix] Various fixes around error handling (thx to faceair@)
   239   - [Fix] Avoid multiple requests for time moving based functions (thx to faceair@)
   240   - [Code] Make linters much more happier about the code (thx to faceair@ for contribution)
   241   - **[Breaking]** [Code] Comment out support for gRPC backend type. It was never properly tested and likely need complete rework before it will be usable
   242   - **[Breaking]** [Build] Minimum Supported golang version is 1.13.0
   243  
   244  **0.12.6**
   245  
   246   - [Fix] Fix aliasByTags to work correclty with other functions
   247   - [Fix] panic when using protov2 and backend that doesn't support tags (thx to @gekmihesg)
   248  
   249  **0.12.5**
   250   - [Feature] Implement 'highest' function
   251   - [Feature] Implement 'lowest' function
   252   - [Feature] Implement 'aggregateLine' function
   253   - [Feature] Implement 'filterSeries' function
   254  
   255  **0.12.4**
   256   - [Feature] Function Defines - allows to do custom metric aliases (thx to @lomik). See [doc/configuration.md](https://github.com/go-graphite/carbonapi/blob/master/doc/configuration.md#define) for config format
   257   - [Improvement] New config options that allows to prefix all URLs and to enable /debug/vars on a separate address:port. See [docs/configuration.md](https://github.com/go-graphite/carbonapi/blob/master/doc/configuration.md#expvar) for more information
   258   - [Improvement] `/render` queries now returns tags in json (as graphite-web do)
   259   - [Improvement] groupByTags should now support all available aggregation functions (#410)
   260   - [Fix] Fix panic when using carbonapi\_proto\_v3 and doing tag-related queries (#407)
   261   - [Fix] Add missing alias for averageSeries (thx to @msaf1980)
   262  
   263  **0.12.3**
   264   - [Fix] Fix graphiteWeb proxy function (thx. to @sylvain-beugin)
   265   - [Fix] Prometheus Backend: correctly handle groups, fixes #405
   266   - [Fix] Prometheus Backend: convert target that doesn't contain seriesByTags in a same way that's used for /metrics/find
   267   - [Fix] change behavior of aliasSub to match graphite-web (fixes #290)
   268   - [Improvement] Prometheus backend: Allow to specify "start" parameter (via backendOptions)
   269  
   270  **0.12.2**
   271   - [Fix] Fix stacked cairo-based graphs (doesn't affect json or grafana rendering)
   272   - [Fix] Correctly deduplicate requests for cases where same metric fetched in the same expression and cache is disabled. Fixes #401
   273   - [Fix] Make all zipper's errors non-fatal (carbonapi will try to fetch construct full response no matter what error it was)
   274   - [Fix] Make zipper less noisy
   275  
   276  **0.12.1**
   277   - [Improvement] Port 'minValue' parameter handling for nonNegativeDerivative and perSecond: https://github.com/bookingcom/carbonapi/commit/5bfda0d24 and https://github.com/bookingcom/carbonapi/commit/790c05d8
   278   - [Improvement] Config option "headersToPass" to control what request headers will be passed to backend (default: none). Fixes #398
   279   - [Improvement] Config option "headersToLog" to control what request headers will be logged by carbonapi (default: none).
   280   - [Fix] Cherry-pick https://github.com/bookingcom/carbonapi/commit/946ca8b (fixes small png render issues)
   281   - [Fix] #260 - parsing of bool values as Names.
   282   - [Fix] Fix limiter waiting for a wrong server in some cases
   283   - [Code] Cherry-pick https://github.com/bookingcom/carbonapi/pull/172/commits/9f0b3f611 to simplify tests (author: @gksinghjsr)
   284  
   285  **0.12.0**
   286   - Add support for Prometheus as Backend. This allows to use Prometheus-compatible software as carbonapi's backends (e.x. Prometheus and VictoriaMetrics)
   287   - Add support for querying msgpack-compatible backends. This should make carbonapi compatible with graphite-web 1.1 and [grafana/metrictank](https://github.com/grafana/metrictank)
   288   - **[Breaking][Code]** Migrate all internal structures to `github.com/go-graphite/protocol/carbonapi_v3_pb`. This removes redundant IsAbsent slice and changes all timestamps to int64 (they are still expected to have uint32 timestamps there)
   289   - **[Breaking][Improvement]** Integrate carbonzipper 1.0.0. This introduces better loadbalancing support, but significantly changes config file format. It might behave differently with the same settings. It also removes carbonzipper dependency.
   290   - [Improvement] seriesByTag Support (thx. to Vladimir Kolobaev)
   291   - [Improvement] aliasByTag Support (thx. to Vladimir Kolobaev)
   292   - [Improvement] Added support for more aggregation functions (thx. to Oleg Matrokhin)
   293   - [Improvement] Add 'aggregate' function.
   294   - [Improvement] pixelRatio for png render (thx. to Roman Lomonosov)
   295   - [Fix] Supported functions were updated to be more compatible with graphtie-web 1.1.0+
   296   - [Fix] fix movingXyz error on intervals greater than 30 days (thx. to Safronov Michail)
   297   - [Fix] Fix timeShift function (thx. to Gunnar Þór Magnússon)
   298  
   299  **0.12.0-rc.1**
   300   - Fix panic when using Prometheus backend and query /tags/autoComplete/tags without parameters
   301   - Fix long going issue with stuck requests towards backend.
   302  
   303  **0.12.0-rc.0**
   304   - Add experimental support for Prometheus as Backend.
   305   - Add experimental support for querying msgpack-compatible backends. This should make carbonapi compatible with graphite-web 1.1 and [grafana/metrictank](https://github.com/grafana/metrictank)
   306   - **[Breaking][Code]** Migrate all internal structures to `github.com/go-graphite/protocol/carbonapi_v3_pb`. This removes redundant IsAbsent slice and changes all timestamps to int64 (they are still expected to have uint32 timestamps there)
   307   - **[Breaking][Improvement]** Migrate to carbonzipper 1.0.0. This introduces better loadbalancing support, but significantly changes config file format. It might behave differently with the same settings.
   308   - seriesByTag Support (thx. to Vladimir Kolobaev)
   309   - aliasByTag Support (thx. to Vladimir Kolobaev)
   310   - Supported functions were updated to be more compatible with graphite-web 1.1.0+
   311   - Added support for more aggregation functions (thx. to Oleg Matrokhin)
   312  
   313  **0.11.0**
   314   - **[Breaking][Fix] Allow to specify prefix for environment variables through `-envprefix` command line parameter. Default now is "CARBONAPI_" which might break some environments**
   315   - [Improvement] graphiteWeb function that implements force-fallback to graphiteWeb
   316   - [Improvement] graphiteWeb can query graphite-web 1.1.0+ for a list of supported functions and automatically do fallback to graphite in case user calls unimplemented function
   317   - [Improvement] New config switch to disable find request before render. This is helpful for graphite-clickhouse backends
   318   - [Fix] Fix typo in polyfit function description
   319   - [Fix] Skip metrics without pairs in reduceSeries (thx. to @errx)
   320   - [Fix] Fix config file parsing (thx. to @errx)
   321   - [Code] Move MakeResponse to expr/types and rename it to MakeMetricData. This is sometimes useful outside of tests. Thx. to @borovskyav
   322   - [Code] Add helper package that will ease doing per-function tests. See `expr/functions/absolute/function_test.go` for an example
   323  
   324  **0.10.0.1**
   325   - [Fix] Autobuild scripts. Version bump to avoid retagging.
   326  
   327  **0.10.0**
   328   - [Fix] `lineWidth` param is not working
   329   - [Fix] Support `&` in metric name
   330   - [Fix] default colors for png and svg are now defined as in graphite-web in 1.1.0, but add example of how to set them to new colors
   331   - [Improvement] You can override default colors through config
   332   - [Improvement] It's now possible to specify 'template=' option to png or svg renders. It will use templates that's specified by 'graphTemplates' option in config. Template config format is not compatible with graphite-web though and uses either toml or yaml. Options naming is also different and follows URL override style.
   333   - [Code] Minor API changes in expr/png: MarshalPNGRequest and MarshalSVGRequest now requires to specify template.
   334  
   335  **0.9.2**
   336   - [Improvement] "pipe" function chaining syntax. Same way as in https://github.com/graphite-project/graphite-web/pull/2042 (thx. to @lomik)
   337  
   338  **0.9.1**
   339   - [Code] Refactor expr. Split it into pkg/parser. Simplify tests.
   340   - [Code] Refactor expr. Split functions into directories.
   341   - [Code] Simple docs about how to add a new function.
   342   - [Fix] All aggregating functions (e.x. summarize) now adds math.NaN() to begin and end of value list to make them same size.
   343   - [Fix] Experimental option `ExtrapolateExperiment` that allows aggregating functions to extrapolate data. Function is not tested properly yet and might be buggy, disabled by default
   344   - [Improvement] API to get list of functions (graphite-web 1.1 compatibility)
   345   - [Improvement] Add 'first' and 'last' as consolidateBy options
   346  
   347  **0.9.0**
   348   - [Improvement] Merge carbonzipper into carbonapi. Please migrate to new 'upstreams' in the config file.
   349   - [Improvement] Make default cache timeout configurable.
   350   - [Improvement] Add divideSeriesLists (thx. to Oleg Matrokhin)
   351   - [Improvement] Add groupByNodes (thx to @errx)
   352   - [Improvement] Add cumulative(thx to Oleg Matrokhin)
   353   - [Improvement] Add diffSeriesLists and multiplySeriesLists functions (works the same way as divideSeriesLists vs divideSeries)
   354   - [Improvement] Add linearRegression function (thx. to Oleg Matrokhin)
   355   - [Improvement] Allow applyByNode to generate new targets
   356   - [Improvement] Allow diffSeries to substract series with different Steps
   357   - [Improvement] Make cache timeouts configurable
   358   - [Improvement] Make batch size configurable for sendGlobAsIs
   359   - [Improvement] Export GoVersion through expvars
   360   - [Improvement] Allow overriding config variables through ENV
   361   - [Improvement] Allow to use .toml in addition to .yaml as config file (determined by extension)
   362   - [Improvement] Add fallbackSeries (thx to @gksinghjsr)
   363   - [Improvement] Implement areaMode in cairo rendering (thx. to @ibuclaw)
   364   - [Improvement] Implement lineWidth, rightWidth, leftWidth (for cairo rendering) (thx. to @ibuclaw)
   365   - [Improvement] Add Unicode support for series names (thx. to @korservick)
   366   - [Improvement] Add multiplySeriesWithWildcards (thx. to @kamaev)
   367   - [Improvement] Add stddevSeries (thx. to @kamaev)
   368   - [Improvement] Add mapSeries (thx. to @kipwoker)
   369   - [Improvement] Add reduceSeries (thx. to @kipwoker)
   370   - [Improvement] Add delay() function (thx. to @kipwoker)
   371   - [Improvement] Update asPercent to graphite-web 1.1 (thx. to @kipwoker)
   372   - [Fix] Fix rounding errors when generating yLables for Cairo-based renders (thx. to @ibuclaw)
   373   - [Fix] Fix integer overflow when building for 32bit systems
   374   - [Fix] Don't set path in treejson if '.' not found in name (thx. to @ibuclaw)
   375   - [Fix] Fix derivative() if first arg is missing (thx. to Oleg Matrokhin)
   376   - [Fix] Fix calculation of yTop when using log base (thx. to @ibuclaw)
   377   - [Fix] Fix asPercent() to handle multiple series (thx. to @ibuclaw)
   378   - [Fix] Swap red and darkred colors (thx to @ibuclaw)
   379   - [Fix] Make asPercent graphite-compatible #213
   380   - [Fix] Fix summarize for cases when bucketSize < stepTime
   381   - [Fix] Fixed #90 - carbonapi shouldn't fail if one of the series doesn't exist
   382   - [Fix] Make PNG rendering looks like graphite-web (thx. to @lomik)
   383   - [Fix] Don't fail if argument is empty series (graphite-web compatibility, thx. to @gksinghjsr)
   384   - [Fix] Fix group() function #225 (thx. to @gksinghjsr)
   385   - [Code] Small refactor of PictureParams structs. Makes GetPictureParams and DefaultColorList public.
   386  
   387  **0.8.0**
   388   - **[Breaking]** Most of the configuration options moved to a config file
   389   - **[Breaking]** Logging migrated to zap (structured logging). Log format changed significantly. Old command line options removed. Please consult carbonapi.example.yaml for a new config options and explanations
   390   - [Improvement] CarbonAPI now passes extra headers to keep track of requests
   391   - [Improvement] Allow '^' and '$' as name characters. Required for carbonsearch text-match pattern anchoring
   392   - [Improvement] Allow to bind to arbitrary IP:Port. (thx to @zdykstra, #194), Fixes #176
   393   - [Improvement] Extend legendValues to append multiple values
   394   - [Improvement] Add a switch to turn off propagating globbed requests to carbonzipper (was introduced in 0.7.0)
   395   - [Improvement] Add `{find,render}_cache_overhead_ns` metrics that shows cache query overhead in nanoseconds
   396   - [Improvement] Use dep as a vendoring tool
   397   - [Improvement] Add a Makefile that will hide some magic from user.
   398   - [Improvement] Send glob heruistic -- if request with globs is relatively small (<100 metrics) carbonapi will send it as is.
   399   - [Improvement] divideSeries support seriesList in dividents (#203, thx @cldellow)
   400   - [Improvement] added movingMin/movingMax/movingSum (#206, thx @cldellow)
   401   - [Feature] Implement following functions from graphite-web: linewidth, areaBetween, applyByNode
   402   - [Feature] Add fft, ifft, LowPass functions. See COMPATIBILITY.md for more information
   403   - [Feature] Publish current configuration as an expvar (GET /debug/vars)
   404   - [Feature] Make prefix configurable (thx to @StephenPCG, #189)
   405   - [Fix] Fix issue with missing labels on graphs > 14d
   406   - [Fix] Allow expressions to use 'total' instead of 'sum'. Required for graphite compatibility
   407   - **[Fix]** Fix incompatibility between carbonapi and older versions of carbonzipper/carbonserver/go-carbon (protobuf2-only)
   408  
   409  Notes on upgrading:
   410  
   411  Even though there are several changes that's marked as breaking, it only breaks local config parsing and changes logging format.
   412  
   413  **This release fixes the incompatibility introduced in 0.6.0 and can work with both new and old versions of carbonserver, carbonzipper, go-carbon**
   414  
   415  **0.7.0**
   416   - [Improvement] Render requests with globs now sent as-is.
   417   - [Improvement] Added ProxyHeaders handler to get real client's ip address from X-Real-IP or X-Forwarded-For headers.
   418   - [Improvement] Highest\* and Lowest\* now assumes '1' if no second argument was passed
   419   - [Feature] Implement legendValue expression (see http://graphite.readthedocs.io/en/latest/functions.html#graphite.render.functions.legendValue for more information)
   420  
   421  Notes on upgrading to 0.7.0:
   422  
   423  It's highly recommended, if you use carbonzipper to also upgrade it to version 0.62
   424  
   425  **0.6.0**
   426   - **[Breaking]** Migrate to protobuf3
   427  
   428  Notes on upgrading to 0.6.0:
   429  
   430  You need to upgrade carbonzipper or go-carbon to the version that supports protobuf3
   431  
   432  **<=0.5.0**
   433  There is no dedicated changelog for older versions of carbonapi. Please see commit log for more information about what changed for each commit.