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.