Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Handle default arguments and argument number to avoid errors #121

Closed
wants to merge 3 commits into from

Conversation

carrieedwards
Copy link
Collaborator

This PR adds error handling to function arguments. If fewer arguments than the minimum required by that function are passed in, then a missing argument error is now returned. Additionally, some functions with default values for arguments were missing the default, so those have been updated. This will prevented unexpected out-of-index panics and other errors from occurring.

npazosmendez and others added 2 commits September 16, 2022 15:28
This commit adds the files that are specific to Grafana's fork
that are not intended to be included in the upstream. This
files are already present in the commit history (they were deleted),
but this is an attempt of a fresh start on top of the upstream's `main`.
At the moment, this should the only commit we expect to skip when
sending our changes.
* Fix exponentialMovingAverage panic

The panic was happening when the window size was greater than
the length of the values. Now if that happens no panics occur and
the average is returned. This matches graphiteweb.

* Add support for Graphite web toLowerCase function

* Add tests for toLowerCase function

* Update glue.go

* Update COMPATIBILITY.md to show support of toLowerCase

* Add support for Graphite web toUpperCase function

* Add tests for toUpperCase function

* Update glue.go

* Update COMPATIBILITY.md to include toUpperCase function

* Add support for Graphite web sumSeriesLists function

* Add tests for sumSeriesLists

* Update glue.go

* Update COMPATIBILITY.md to include sumSeriesLists

* Fix problems that I accidentally introduced while trying to resolve merge conflict

* Another attempt to fix previous problem

 Apparantly there is a directory that gen.go wasn't expecting and
 `go generate` in expr/functions produced `glue.go` file that didn't compile

 fix both generator and glue

* Adds Drone and Github workflow for Grafana's fork

This commit adds the files that are specific to Grafana's fork
that are not intended to be included in the upstream. This
files are already present in the commit history (they were deleted),
but this is an attempt of a fresh start on top of the upstream's `main`.
At the moment, this should the only commit we expect to skip when
sending our changes.

Co-authored-by: Nicolás Pazos <npazosmendez@gmail.com>
Co-authored-by: Vladimir Smirnov <civiloid@google.com>
@grafanabot

This comment has been minimized.

@carrieedwards carrieedwards marked this pull request as ready for review September 19, 2022 21:14
if err != nil {
return nil, err
}
callback, err := e.GetStringArgDefault(1, "average")
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what is the story behind this part of the change?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just replaced the switch statement with functions that will set the default argument, but I can see that there could be a bug here, so I'll revert that change

Comment on lines 73 to 74
n = 1
consolidation, err = e.GetStringArg(1)
if err != nil {
return nil, err
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why was this deleted?

@@ -28,7 +28,7 @@ func New(configFile string) []interfaces.FunctionMetadata {
return res
}

// squareRoot(seriesList)
// randomWalk(seriesList, step=60)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: this hould be randomWalk(name, step=60)

@grafanabot

This comment has been minimized.

@grafanabot

This comment has been minimized.

@grafanabot
Copy link

Go coverage report:

Click to expand.
File %
github.com/go-graphite/carbonapi/cmd/carbonapi/http/capability.go 0.0%
github.com/go-graphite/carbonapi/cmd/carbonapi/http/enrichcontext.go 6.7%
github.com/go-graphite/carbonapi/cmd/carbonapi/http/find_handlers.go 33.5%
github.com/go-graphite/carbonapi/cmd/carbonapi/http/functions_handler.go 0.0%
github.com/go-graphite/carbonapi/cmd/carbonapi/http/helper.go 27.3%
github.com/go-graphite/carbonapi/cmd/carbonapi/http/info_handlers.go 53.8%
github.com/go-graphite/carbonapi/cmd/carbonapi/http/init.go 84.6%
github.com/go-graphite/carbonapi/cmd/carbonapi/http/lbcheck_handler.go 0.0%
github.com/go-graphite/carbonapi/cmd/carbonapi/http/metrics.go 0.0%
github.com/go-graphite/carbonapi/cmd/carbonapi/http/render_handler.go 50.0%
github.com/go-graphite/carbonapi/cmd/carbonapi/http/tags_handler.go 0.0%
github.com/go-graphite/carbonapi/cmd/carbonapi/http/usage_handler.go 0.0%
github.com/go-graphite/carbonapi/cmd/carbonapi/http/version_handler.go 0.0%
github.com/go-graphite/carbonapi/date/date.go 78.9%
github.com/go-graphite/carbonapi/expr/consolidations/consolidations.go 45.6%
github.com/go-graphite/carbonapi/expr/expr.go 30.0%
github.com/go-graphite/carbonapi/expr/functions/absolute/function.go 80.0%
github.com/go-graphite/carbonapi/expr/functions/aggregate/function.go 82.2%
github.com/go-graphite/carbonapi/expr/functions/aggregateLine/function.go 81.0%
github.com/go-graphite/carbonapi/expr/functions/aggregateSeriesLists/function.go 72.2%
github.com/go-graphite/carbonapi/expr/functions/aggregateWithWildcards/function.go 85.1%
github.com/go-graphite/carbonapi/expr/functions/alias/function.go 80.8%
github.com/go-graphite/carbonapi/expr/functions/aliasByBase64/function.go 88.6%
github.com/go-graphite/carbonapi/expr/functions/aliasByMetric/function.go 92.9%
github.com/go-graphite/carbonapi/expr/functions/aliasByNode/function.go 81.0%
github.com/go-graphite/carbonapi/expr/functions/aliasByRedis/function.go 72.1%
github.com/go-graphite/carbonapi/expr/functions/aliasSub/function.go 75.8%
github.com/go-graphite/carbonapi/expr/functions/asPercent/function.go 77.4%
github.com/go-graphite/carbonapi/expr/functions/averageOutsidePercentile/function.go 86.7%
github.com/go-graphite/carbonapi/expr/functions/averageSeriesWithWildcards/function.go 87.8%
github.com/go-graphite/carbonapi/expr/functions/below/function.go 89.5%
github.com/go-graphite/carbonapi/expr/functions/cactiStyle/function.go 88.7%
github.com/go-graphite/carbonapi/expr/functions/changed/function.go 92.3%
github.com/go-graphite/carbonapi/expr/functions/constantLine/function.go 88.2%
github.com/go-graphite/carbonapi/expr/functions/delay/function.go 88.2%
github.com/go-graphite/carbonapi/expr/functions/derivative/function.go 93.8%
github.com/go-graphite/carbonapi/expr/functions/divideSeries/function.go 88.9%
github.com/go-graphite/carbonapi/expr/functions/ewma/function.go 87.5%
github.com/go-graphite/carbonapi/expr/functions/exclude/function.go 79.2%
github.com/go-graphite/carbonapi/expr/functions/exp/function.go 90.9%
github.com/go-graphite/carbonapi/expr/functions/exponentialMovingAverage/function.go 72.9%
github.com/go-graphite/carbonapi/expr/functions/fallbackSeries/function.go 88.2%
github.com/go-graphite/carbonapi/expr/functions/filter/function.go 83.0%
github.com/go-graphite/carbonapi/expr/functions/grep/function.go 79.2%
github.com/go-graphite/carbonapi/expr/functions/groupByNode/function.go 83.9%
github.com/go-graphite/carbonapi/expr/functions/groupByTags/function.go 88.9%
github.com/go-graphite/carbonapi/expr/functions/heatMap/function.go 86.4%
github.com/go-graphite/carbonapi/expr/functions/heatMap/helpers.go 84.6%
github.com/go-graphite/carbonapi/expr/functions/highestLowest/function.go 87.1%
github.com/go-graphite/carbonapi/expr/functions/hitcount/function.go 92.5%
github.com/go-graphite/carbonapi/expr/functions/identity/function.go 89.5%
github.com/go-graphite/carbonapi/expr/functions/integral/function.go 94.4%
github.com/go-graphite/carbonapi/expr/functions/integralByInterval/function.go 83.7%
github.com/go-graphite/carbonapi/expr/functions/integralWithReset/function.go 86.1%
github.com/go-graphite/carbonapi/expr/functions/interpolate/function.go 92.1%
github.com/go-graphite/carbonapi/expr/functions/invert/function.go 93.3%
github.com/go-graphite/carbonapi/expr/functions/isNotNull/function.go 93.8%
github.com/go-graphite/carbonapi/expr/functions/join/function.go 89.5%
github.com/go-graphite/carbonapi/expr/functions/keepLastValue/function.go 93.2%
github.com/go-graphite/carbonapi/expr/functions/legendValue/function.go 87.5%
github.com/go-graphite/carbonapi/expr/functions/limit/function.go 78.9%
github.com/go-graphite/carbonapi/expr/functions/linearRegression/function.go 80.0%
github.com/go-graphite/carbonapi/expr/functions/logarithm/function.go 90.9%
github.com/go-graphite/carbonapi/expr/functions/logit/function.go 91.3%
github.com/go-graphite/carbonapi/expr/functions/lowPass/function.go 89.3%
github.com/go-graphite/carbonapi/expr/functions/mapSeries/function.go 85.2%
github.com/go-graphite/carbonapi/expr/functions/minMax/function.go 86.7%
github.com/go-graphite/carbonapi/expr/functions/mostDeviant/function.go 86.5%
github.com/go-graphite/carbonapi/expr/functions/moving/function.go 82.1%
github.com/go-graphite/carbonapi/expr/functions/movingMedian/function.go 85.1%
github.com/go-graphite/carbonapi/expr/functions/multiplySeriesWithWildcards/function.go 88.9%
github.com/go-graphite/carbonapi/expr/functions/nPercentile/function.go 87.5%
github.com/go-graphite/carbonapi/expr/functions/nonNegativeDerivative/function.go 90.5%
github.com/go-graphite/carbonapi/expr/functions/offset/function.go 85.2%
github.com/go-graphite/carbonapi/expr/functions/offsetToZero/function.go 94.1%
github.com/go-graphite/carbonapi/expr/functions/pearson/function.go 86.1%
github.com/go-graphite/carbonapi/expr/functions/pearsonClosest/function.go 75.0%
github.com/go-graphite/carbonapi/expr/functions/perSecond/function.go 90.5%
github.com/go-graphite/carbonapi/expr/functions/percentileOfSeries/function.go 76.0%
github.com/go-graphite/carbonapi/expr/functions/polyfit/function.go 87.3%
github.com/go-graphite/carbonapi/expr/functions/pow/function.go 86.2%
github.com/go-graphite/carbonapi/expr/functions/powSeries/function.go 95.0%
github.com/go-graphite/carbonapi/expr/functions/rangeOfSeries/function.go 94.4%
github.com/go-graphite/carbonapi/expr/functions/removeBelowSeries/function.go 90.2%
github.com/go-graphite/carbonapi/expr/functions/removeBetweenPercentile/function.go 87.5%
github.com/go-graphite/carbonapi/expr/functions/removeEmptySeries/function.go 90.6%
github.com/go-graphite/carbonapi/expr/functions/round/function.go 89.7%
github.com/go-graphite/carbonapi/expr/functions/scale/function.go 86.1%
github.com/go-graphite/carbonapi/expr/functions/scaleToSeconds/function.go 85.7%
github.com/go-graphite/carbonapi/expr/functions/seriesList/function.go 66.1%
github.com/go-graphite/carbonapi/expr/functions/sigmoid/function.go 91.3%
github.com/go-graphite/carbonapi/expr/functions/sinFunction/function.go 86.2%
github.com/go-graphite/carbonapi/expr/functions/slo/function.go 84.0%
github.com/go-graphite/carbonapi/expr/functions/slo/helpers.go 72.0%
github.com/go-graphite/carbonapi/expr/functions/smartSummarize/function.go 88.4%
github.com/go-graphite/carbonapi/expr/functions/sortBy/function.go 86.5%
github.com/go-graphite/carbonapi/expr/functions/sortByName/function.go 85.2%
github.com/go-graphite/carbonapi/expr/functions/squareRoot/function.go 90.5%
github.com/go-graphite/carbonapi/expr/functions/substr/function.go 85.4%
github.com/go-graphite/carbonapi/expr/functions/sumSeriesWithWildcards/function.go 87.5%
github.com/go-graphite/carbonapi/expr/functions/summarize/function.go 90.5%
github.com/go-graphite/carbonapi/expr/functions/timeShift/function.go 76.9%
github.com/go-graphite/carbonapi/expr/functions/timeShiftByMetric/function.go 89.7%
github.com/go-graphite/carbonapi/expr/functions/timeShiftByMetric/misc.go 93.8%
github.com/go-graphite/carbonapi/expr/functions/toLowerCase/function.go 89.3%
github.com/go-graphite/carbonapi/expr/functions/toUpperCase/function.go 89.3%
github.com/go-graphite/carbonapi/expr/functions/transformNull/function.go 88.5%
github.com/go-graphite/carbonapi/expr/functions/tukey/function.go 80.8%
github.com/go-graphite/carbonapi/expr/functions/unique/function.go 88.9%
github.com/go-graphite/carbonapi/expr/functions/weightedAverage/function.go 84.6%
github.com/go-graphite/carbonapi/expr/helper/align.go 58.6%
github.com/go-graphite/carbonapi/expr/helper/helper.go 9.2%
github.com/go-graphite/carbonapi/expr/helper/metric/extract.go 72.7%
github.com/go-graphite/carbonapi/expr/helper/sort.go 0.0%
github.com/go-graphite/carbonapi/expr/rewrite/aboveSeries/function.go 79.3%
github.com/go-graphite/carbonapi/expr/sort.go 96.1%
github.com/go-graphite/carbonapi/expr/tags/helper.go 93.6%
github.com/go-graphite/carbonapi/expr/types/extract.go 87.5%
github.com/go-graphite/carbonapi/expr/types/list.go 0.0%
github.com/go-graphite/carbonapi/expr/types/metricheap.go 0.0%
github.com/go-graphite/carbonapi/expr/types/types.go 31.5%
github.com/go-graphite/carbonapi/expr/types/windowed.go 0.0%
github.com/go-graphite/carbonapi/pkg/parser/define.go 76.9%
github.com/go-graphite/carbonapi/pkg/parser/interface.go 0.0%
github.com/go-graphite/carbonapi/pkg/parser/internal.go 32.2%
github.com/go-graphite/carbonapi/pkg/parser/interval.go 83.8%
github.com/go-graphite/carbonapi/pkg/parser/parser.go 46.5%
github.com/go-graphite/carbonapi/util/pidfile/pidfile.go 100.0%
github.com/go-graphite/carbonapi/zipper/broadcast/broadcast_group.go 38.5%
github.com/go-graphite/carbonapi/zipper/helper/requests.go 13.3%
github.com/go-graphite/carbonapi/zipper/protocols/graphite/msgpack/type_gen.go 57.2%
github.com/go-graphite/carbonapi/zipper/protocols/irondb/irondb_group.go 2.5%
github.com/go-graphite/carbonapi/zipper/protocols/irondb/irondb_helpers.go 81.1%
github.com/go-graphite/carbonapi/zipper/protocols/prometheus/helpers/helpers.go 17.1%
github.com/go-graphite/carbonapi/zipper/protocols/victoriametrics/feature_set.go 19.7%
github.com/go-graphite/carbonapi/zipper/protocols/victoriametrics/fetch.go 0.0%
github.com/go-graphite/carbonapi/zipper/protocols/victoriametrics/find.go 0.0%
github.com/go-graphite/carbonapi/zipper/protocols/victoriametrics/tags.go 0.0%
github.com/go-graphite/carbonapi/zipper/protocols/victoriametrics/victoriametrics_group.go 7.8%
github.com/go-graphite/carbonapi/zipper/types/backend.go 0.0%
github.com/go-graphite/carbonapi/zipper/types/errors.go 0.0%
github.com/go-graphite/carbonapi/zipper/types/lbmethod.go 0.0%
github.com/go-graphite/carbonapi/zipper/types/requests.go 0.0%
github.com/go-graphite/carbonapi/zipper/types/response.go 6.4%
github.com/go-graphite/carbonapi/zipper/types/stats.go 0.0%
github.com/go-graphite/carbonapi/zipper/zipper.go 0.0%
github.com/go-graphite/carbonapi/zipper/zipper_pb3.go 0.0%
total 56.4%

Go lint report:

No issues found. 😎

@carrieedwards
Copy link
Collaborator Author

Closing in favor of go-graphite#712

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants