Chore: Remove legacydata package (#88790)

* Chore: Remove legacydata package

* remove unused dependency

* sdk v0.234.0
This commit is contained in:
Marcus Efraimsson
2024-06-05 22:31:06 +02:00
committed by GitHub
parent 08276bd8e7
commit 2403665998
23 changed files with 40 additions and 698 deletions

1
.github/CODEOWNERS vendored
View File

@@ -148,7 +148,6 @@
/pkg/tests/apis/ @grafana/grafana-app-platform-squad
/pkg/tests/api/correlations/ @grafana/explore-squad
/pkg/tsdb/grafanads/ @grafana/grafana-backend-group
/pkg/tsdb/legacydata/ @grafana/grafana-backend-group
/pkg/tsdb/opentsdb/ @grafana/grafana-backend-group
/pkg/util/ @grafana/grafana-backend-group
/pkg/web/ @grafana/grafana-backend-group

4
go.mod
View File

@@ -99,7 +99,7 @@ require (
github.com/grafana/grafana-azure-sdk-go/v2 v2.0.4 // @grafana/partner-datasources
github.com/grafana/grafana-google-sdk-go v0.1.0 // @grafana/partner-datasources
github.com/grafana/grafana-openapi-client-go v0.0.0-20231213163343-bd475d63fb79 // @grafana/grafana-backend-group
github.com/grafana/grafana-plugin-sdk-go v0.232.0 // @grafana/plugins-platform-backend
github.com/grafana/grafana-plugin-sdk-go v0.234.0 // @grafana/plugins-platform-backend
github.com/grafana/grafana/pkg/apimachinery v0.0.0-20240226124929-648abdbd0ea4 // @grafana/grafana-app-platform-squad
github.com/grafana/grafana/pkg/apiserver v0.0.0-20240226124929-648abdbd0ea4 // @grafana/grafana-app-platform-squad
// This needs to be here for other projects that import grafana/grafana
@@ -156,7 +156,6 @@ require (
github.com/ua-parser/uap-go v0.0.0-20211112212520-00c877edfe0f // @grafana/grafana-backend-group
github.com/urfave/cli v1.22.15 // @grafana/grafana-backend-group
github.com/urfave/cli/v2 v2.25.0 // @grafana/grafana-backend-group
github.com/vectordotdev/go-datemath v0.1.1-0.20220323213446-f3954d0b18ae // @grafana/grafana-backend-group
github.com/wk8/go-ordered-map v1.0.0 // @grafana/grafana-backend-group
github.com/xlab/treeprint v1.2.0 // @grafana/observability-traces-and-profiling
github.com/yudai/gojsondiff v1.0.0 // @grafana/grafana-backend-group
@@ -461,6 +460,7 @@ require (
require (
github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3 // indirect
github.com/facette/natsort v0.0.0-20181210072756-2cd4dd1e2dcb // indirect
github.com/jszwedko/go-datemath v0.1.1-0.20230526204004-640a500621d6 // indirect
)
// Use fork of crewjam/saml with fixes for some issues until changes get merged into upstream

8
go.sum
View File

@@ -2328,8 +2328,8 @@ github.com/grafana/grafana-google-sdk-go v0.1.0/go.mod h1:Vo2TKWfDVmNTELBUM+3lkr
github.com/grafana/grafana-openapi-client-go v0.0.0-20231213163343-bd475d63fb79 h1:r+mU5bGMzcXCRVAuOrTn54S80qbfVkvTdUJZfSfTNbs=
github.com/grafana/grafana-openapi-client-go v0.0.0-20231213163343-bd475d63fb79/go.mod h1:wc6Hbh3K2TgCUSfBC/BOzabItujtHMESZeFk5ZhdxhQ=
github.com/grafana/grafana-plugin-sdk-go v0.114.0/go.mod h1:D7x3ah+1d4phNXpbnOaxa/osSaZlwh9/ZUnGGzegRbk=
github.com/grafana/grafana-plugin-sdk-go v0.232.0 h1:RnaQwhAOxYdp9wwy0Yz5cJUGY5tpIXPxoFWmEKflfww=
github.com/grafana/grafana-plugin-sdk-go v0.232.0/go.mod h1:bNgmNmub1I7Mc8dzIncgNqHC5jTgSZPPHlZ3aG8HKJQ=
github.com/grafana/grafana-plugin-sdk-go v0.234.0 h1:p20XfGKB3Z/8aZ6jut+FIU/0cXw+dLkcGFnxJbyFd+k=
github.com/grafana/grafana-plugin-sdk-go v0.234.0/go.mod h1:FlXjmBESxaD6Hoi8ojWLkH007nyjtJM3XC8SpwzF/YE=
github.com/grafana/grafana/pkg/apimachinery v0.0.0-20240226124929-648abdbd0ea4 h1:hpyusz8c3yRFoJPlA0o34rWnsLbaOOBZleqRhFBi5Lg=
github.com/grafana/grafana/pkg/apimachinery v0.0.0-20240226124929-648abdbd0ea4/go.mod h1:vrRQJuNprTWqwm6JPxHf3BoTJhvO15QMEjQ7Q/YUOnI=
github.com/grafana/grafana/pkg/apiserver v0.0.0-20240226124929-648abdbd0ea4 h1:tIbI5zgos92vwJ8lV3zwHwuxkV03GR3FGLkFW9V5LxY=
@@ -2600,6 +2600,8 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/jszwedko/go-datemath v0.1.1-0.20230526204004-640a500621d6 h1:SwcnSwBR7X/5EHJQlXBockkJVIMRVt5yKaesBPMtyZQ=
github.com/jszwedko/go-datemath v0.1.1-0.20230526204004-640a500621d6/go.mod h1:WrYiIuiXUMIvTDAQw97C+9l0CnBmCcvosPjN3XDqS/o=
github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
@@ -3219,8 +3221,6 @@ github.com/urfave/cli/v2 v2.25.0/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6f
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
github.com/vburenin/ifacemaker v1.2.1/go.mod h1:5WqrzX2aD7/hi+okBjcaEQJMg4lDGrpuEX3B8L4Wgrs=
github.com/vectordotdev/go-datemath v0.1.1-0.20220323213446-f3954d0b18ae h1:oyiy3uBj1F4O3AaFh7hUGBrJjAssJhKyAbwxtkslxqo=
github.com/vectordotdev/go-datemath v0.1.1-0.20220323213446-f3954d0b18ae/go.mod h1:PnwzbSst7KD3vpBzzlntZU5gjVa455Uqa5QPiKSYJzQ=
github.com/vultr/govultr/v2 v2.17.2 h1:gej/rwr91Puc/tgh+j33p/BLR16UrIPnSr+AIwYWZQs=
github.com/vultr/govultr/v2 v2.17.2/go.mod h1:ZFOKGWmgjytfyjeyAdhQlSWwTjh2ig+X49cAp50dzXI=
github.com/wk8/go-ordered-map v1.0.0 h1:BV7z+2PaK8LTSd/mWgY12HyMAo5CEgkHqbkVq2thqr8=

View File

@@ -1,5 +1,4 @@
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.31.0-20230802163732-1c33ebd9ecfa.1 h1:tdpHgTbmbvEIARu+bixzmleMi14+3imnpoFXz+Qzjp4=
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.31.0-20230802163732-1c33ebd9ecfa.1/go.mod h1:xafc+XIsTxTy76GJQ1TKgvJWsSugFBqMaN27WhUblew=
buf.build/gen/go/grpc-ecosystem/grpc-gateway/bufbuild/connect-go v1.4.1-20221127060915-a1ecdc58eccd.1 h1:vp9EaPFSb75qe/793x58yE5fY1IJ/gdxb/kcDUzavtI=
buf.build/gen/go/grpc-ecosystem/grpc-gateway/bufbuild/connect-go v1.4.1-20221127060915-a1ecdc58eccd.1/go.mod h1:YDq2B5X5BChU0lxAG5MxHpDb8mx1fv9OGtF2mwOe7hY=
buf.build/gen/go/grpc-ecosystem/grpc-gateway/protocolbuffers/go v1.28.1-20221127060915-a1ecdc58eccd.4 h1:z3Xc9n8yZ5k/Xr4ZTuff76TAYP20dWy7ZBV4cGIpbkM=
@@ -59,7 +58,6 @@ cloud.google.com/go/cloudtasks v1.12.4 h1:5xXuFfAjg0Z5Wb81j2GAbB3e0bwroCeSF+5jBn
cloud.google.com/go/cloudtasks v1.12.6 h1:EUt1hIZ9bLv8Iz9yWaCrqgMnIU+Tdh0yXM1MMVGhjfE=
cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg=
cloud.google.com/go/compute v1.25.1 h1:ZRpHJedLtTpKgr3RV1Fx23NuaAEN1Zfx9hw1u4aJdjU=
cloud.google.com/go/compute v1.25.1/go.mod h1:oopOIR53ly6viBYxaDhBfJwzUAxf1zE//uf3IB011ls=
cloud.google.com/go/contactcenterinsights v1.12.1 h1:EiGBeejtDDtr3JXt9W7xlhXyZ+REB5k2tBgVPVtmNb0=
cloud.google.com/go/contactcenterinsights v1.13.0 h1:6Vs/YnDG5STGjlWMEjN/xtmft7MrOTOnOZYUZtGTx0w=
cloud.google.com/go/container v1.29.0 h1:jIltU529R2zBFvP8rhiG1mgeTcnT27KhU0H/1d6SQRg=
@@ -350,7 +348,6 @@ github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 h1:mXoPYz/Ul5HYE
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY=
github.com/boombuler/barcode v1.0.1 h1:NDBbPmhS+EqABEs5Kg3n/5ZNjy73Pz7SIV+KCeqyXcs=
github.com/bufbuild/protovalidate-go v0.2.1 h1:pJr07sYhliyfj/STAM7hU4J3FKpVeLVKvOBmOTN8j+s=
github.com/bufbuild/protovalidate-go v0.2.1/go.mod h1:e7XXDtlxj5vlEyAgsrxpzayp4cEMKCSSb8ZCkin+MVA=
github.com/bwesterb/go-ristretto v1.2.3 h1:1w53tCkGhCQ5djbat3+MH0BAQ5Kfgbt56UZQ/JMzngw=
github.com/bytedance/sonic v1.10.0-rc3 h1:uNSnscRapXTwUgTyOF0GVljYD08p9X/Lbr9MweSV3V0=
github.com/bytedance/sonic v1.10.0-rc3/go.mod h1:iZcSUejdk5aukTND/Eu/ivjQuEL0Cu9/rf50Hi0u/g4=
@@ -452,7 +449,6 @@ github.com/ettle/strcase v0.1.1 h1:htFueZyVeE1XNnMEfbqp5r67qAN/4r6ya1ysq8Q+Zcw=
github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072 h1:DddqAaWDpywytcG8w/qoQ5sAN8X12d3Z3koB0C3Rxsc=
github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw=
github.com/flosch/pongo2/v4 v4.0.2 h1:gv+5Pe3vaSVmiJvh/BZa82b7/00YUGm0PIyVVLop0Hw=
github.com/flosch/pongo2/v4 v4.0.2/go.mod h1:B5ObFANs/36VwxxlgKpdchIJHMvHB562PW+BWPhwZD8=
github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8=
@@ -575,7 +571,6 @@ github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw=
github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8=
github.com/hamba/avro/v2 v2.17.2 h1:6PKpEWzJfNnvBgn7m2/8WYaDOUASxfDU+Jyb4ojDgFY=
github.com/hamba/avro/v2 v2.17.2/go.mod h1:Q9YK+qxAhtVrNqOhwlZTATLgLA8qxG2vtvkhK8fJ7Jo=
github.com/hanwen/go-fuse v1.0.0 h1:GxS9Zrn6c35/BnfiVsZVWmsG803xwE7eVRDvcf/BEVc=
github.com/hanwen/go-fuse/v2 v2.1.0 h1:+32ffteETaLYClUj0a3aHjZ1hOPxxaNEHiZiujuDaek=
github.com/hashicorp/consul/sdk v0.15.0 h1:2qK9nDrr4tiJKRoxPGhm6B7xJjLVIQqkjiab2M4aKjU=
@@ -793,7 +788,6 @@ github.com/phpdave11/gofpdi v1.0.13 h1:o61duiW8M9sMlkVXWlvP92sZJtGKENvW3VExs6dZu
github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A=
github.com/pkg/profile v1.2.1 h1:F++O52m40owAmADcojzM+9gyjmMOY/T4oYJkgFDH8RE=
github.com/pkg/profile v1.7.0/go.mod h1:8Uer0jas47ZQMJ7VD+OHknK4YDY07LPUC6dEvqDjvNo=
github.com/pkg/sftp v1.13.1 h1:I2qBYMChEhIjOgazfJmV3/mZM256btk6wkCDRmW7JYs=
github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo=
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
@@ -857,13 +851,9 @@ github.com/tdewolff/minify/v2 v2.12.9/go.mod h1:qOqdlDfL+7v0/fyymB+OP497nIxJYSvX
github.com/tdewolff/parse/v2 v2.6.8 h1:mhNZXYCx//xG7Yq2e/kVLNZw4YfYmeHbhx+Zc0OvFMA=
github.com/tdewolff/parse/v2 v2.6.8/go.mod h1:XHDhaU6IBgsryfdnpzUXBlT6leW/l25yrFBTEb4eIyM=
github.com/tidwall/gjson v1.14.2 h1:6BBkirS0rAHjumnjHF6qgy5d2YAJ1TLIaFE2lzfOLqo=
github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY=
github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28=
github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw=
github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM=
github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI=
@@ -947,6 +937,7 @@ go.opentelemetry.io/collector/semconv v0.90.1 h1:2fkQZbefQBbIcNb9Rk1mRcWlFZgQOk7
go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
go.opentelemetry.io/contrib v0.18.0 h1:uqBh0brileIvG6luvBjdxzoFL8lxDGuhxJWsvK3BveI=
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.42.0/go.mod h1:5z+/ZWJQKXa9YT34fQNx5K8Hd1EoIhvtUygUQPqEOgQ=
go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.46.1/go.mod h1:GnOaBaFQ2we3b9AGWJpsBa7v1S5RlQzlC3O7dRMxZhM=
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.48.0/go.mod h1:tIKj3DbO8N9Y2xo52og3irLsPI4GW02DSMtrVgNMgxg=
go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.46.1/go.mod h1:GnOaBaFQ2we3b9AGWJpsBa7v1S5RlQzlC3O7dRMxZhM=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0/go.mod h1:rdENBZMT2OE6Ne/KLwpiXudnAsbdrdBaqBvTN8M8BgA=
@@ -978,6 +969,9 @@ golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/image v0.0.0-20220302094943-723b81ca9867 h1:TcHcE0vrmgzNH1v3ppjcMGbhG5+9fMuvOmUYwNEF4q4=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028 h1:4+4C/Iv2U4fMZBiMCc98MG1In4gJY5YRhtpDNeDeHWs=
golang.org/x/telemetry v0.0.0-20240208230135-b75ee8823808 h1:+Kc94D8UVEVxJnLXp/+FMfqQARZtWHfVrcRtcG8aT3g=
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0 h1:OE9mWmgKkjJyEmDAAtGMPjXu+YNeGvK9VTSHY6+Qihc=
gonum.org/v1/plot v0.10.1 h1:dnifSs43YJuNMDzB7v8wV64O4ABBHReuAVAoBxqBqS4=
google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2 h1:IRJeR9r1pYWsHKTRe/IInb7lYvbBVIqOgsX/u0mbOWY=
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0 h1:OE9mWmgKkjJyEmDAAtGMPjXu+YNeGvK9VTSHY6+Qihc=
gonum.org/v1/plot v0.10.1 h1:dnifSs43YJuNMDzB7v8wV64O4ABBHReuAVAoBxqBqS4=

View File

@@ -5,7 +5,7 @@ go 1.21.10
require (
github.com/bwmarrin/snowflake v0.3.0
github.com/gorilla/mux v1.8.1
github.com/grafana/grafana-plugin-sdk-go v0.232.0
github.com/grafana/grafana-plugin-sdk-go v0.234.0
github.com/grafana/grafana/pkg/apimachinery v0.0.0-20240409140820-518d3341d58f
github.com/prometheus/client_golang v1.19.0
github.com/stretchr/testify v1.9.0
@@ -74,6 +74,7 @@ require (
github.com/jonboulle/clockwork v0.4.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/jszwedko/go-datemath v0.1.1-0.20230526204004-640a500621d6 // indirect
github.com/klauspost/compress v1.17.8 // indirect
github.com/klauspost/cpuid/v2 v2.2.5 // indirect
github.com/magefile/mage v1.15.0 // indirect

View File

@@ -123,7 +123,7 @@ github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/grafana/grafana-plugin-sdk-go v0.232.0 h1:RnaQwhAOxYdp9wwy0Yz5cJUGY5tpIXPxoFWmEKflfww=
github.com/grafana/grafana-plugin-sdk-go v0.234.0 h1:p20XfGKB3Z/8aZ6jut+FIU/0cXw+dLkcGFnxJbyFd+k=
github.com/grafana/grafana/pkg/apimachinery v0.0.0-20240409140820-518d3341d58f h1:+CK3tH3XrAAqx5urmVqpgSxMrL2MlpTOnLVSU4w4IjY=
github.com/grafana/grafana/pkg/apimachinery v0.0.0-20240409140820-518d3341d58f/go.mod h1:ZxIaCOlDmFupiL55aLU+Qp7O1dgwkDMBAQBK7wnEVBg=
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI=
@@ -154,6 +154,7 @@ github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8Hm
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/jszwedko/go-datemath v0.1.1-0.20230526204004-640a500621d6 h1:SwcnSwBR7X/5EHJQlXBockkJVIMRVt5yKaesBPMtyZQ=
github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=

View File

@@ -4,13 +4,13 @@ import (
"fmt"
"strings"
"github.com/grafana/grafana-plugin-sdk-go/backend/gtime"
"github.com/grafana/grafana-plugin-sdk-go/data/utils/jsoniter"
data "github.com/grafana/grafana-plugin-sdk-go/experimental/apis/data/v0alpha1"
"github.com/grafana/grafana/pkg/expr/classic"
"github.com/grafana/grafana/pkg/expr/mathexp"
"github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/tsdb/legacydata"
)
// Once we are comfortable with the parsing logic, this struct will
@@ -101,7 +101,7 @@ func (h *ExpressionQueryReader) ReadQuery(
referenceVar, err = getReferenceVar(q.Expression, common.RefID)
}
if err == nil {
tr := legacydata.NewDataTimeRange(common.TimeRange.From, common.TimeRange.To)
tr := gtime.NewTimeRange(common.TimeRange.From, common.TimeRange.To)
eq.Properties = q
eq.Command, err = NewResampleCommand(common.RefID,
q.Window,

View File

@@ -28,7 +28,6 @@ import (
_ "github.com/robfig/cron/v3"
_ "github.com/russellhaering/goxmldsig"
_ "github.com/stretchr/testify/require"
_ "github.com/vectordotdev/go-datemath"
_ "golang.org/x/time/rate"
_ "xorm.io/builder"
)

View File

@@ -3,7 +3,7 @@ module github.com/grafana/grafana/pkg/promlib
go 1.21.10
require (
github.com/grafana/grafana-plugin-sdk-go v0.232.0
github.com/grafana/grafana-plugin-sdk-go v0.234.0
github.com/json-iterator/go v1.1.12
github.com/patrickmn/go-cache v2.1.0+incompatible
github.com/prometheus/client_golang v1.19.0
@@ -62,6 +62,7 @@ require (
github.com/invopop/jsonschema v0.12.0 // indirect
github.com/invopop/yaml v0.2.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/jszwedko/go-datemath v0.1.1-0.20230526204004-640a500621d6 // indirect
github.com/klauspost/compress v1.17.8 // indirect
github.com/klauspost/cpuid/v2 v2.2.5 // indirect
github.com/magefile/mage v1.15.0 // indirect

View File

@@ -86,7 +86,7 @@ github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e h1:JKmoR8x90Iww1
github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
github.com/grafana/grafana-plugin-sdk-go v0.232.0 h1:RnaQwhAOxYdp9wwy0Yz5cJUGY5tpIXPxoFWmEKflfww=
github.com/grafana/grafana-plugin-sdk-go v0.234.0 h1:p20XfGKB3Z/8aZ6jut+FIU/0cXw+dLkcGFnxJbyFd+k=
github.com/grafana/regexp v0.0.0-20221123153739-15dc172cd2db h1:7aN5cccjIqCLTzedH7MZzRZt5/lsAHch6Z3L2ZGn5FA=
github.com/grafana/regexp v0.0.0-20221123153739-15dc172cd2db/go.mod h1:M5qHK+eWfAv8VR/265dIuEpL3fNfeC21tXXp9itM24A=
github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 h1:qnpSQwGEnkcRpTqNOIR6bJbR0gAorgP9CSALpRcKoAA=
@@ -111,6 +111,7 @@ github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2E
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/jszwedko/go-datemath v0.1.1-0.20230526204004-640a500621d6 h1:SwcnSwBR7X/5EHJQlXBockkJVIMRVt5yKaesBPMtyZQ=
github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=

View File

@@ -11,7 +11,6 @@ import (
"k8s.io/apiserver/pkg/registry/rest"
query "github.com/grafana/grafana/pkg/apis/query/v0alpha1"
"github.com/grafana/grafana/pkg/tsdb/legacydata"
"github.com/grafana/grafana/pkg/web"
)
@@ -62,7 +61,7 @@ func (r *subQueryREST) Connect(ctx context.Context, name string, opts runtime.Ob
return
}
queries, dsRef, err := legacydata.ToDataSourceQueries(dqr)
queries, dsRef, err := data.ToDataSourceQueries(dqr)
if err != nil {
responder.Error(err)
return

View File

@@ -18,7 +18,6 @@ import (
"github.com/grafana/grafana/pkg/services/pluginsintegration/plugincontext"
"github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore"
"github.com/grafana/grafana/pkg/setting"
"github.com/grafana/grafana/pkg/tsdb/legacydata"
)
type pluginClient struct {
@@ -59,7 +58,7 @@ func NewDataSourceRegistryFromStore(pluginStore pluginstore.Store,
// ExecuteQueryData implements QueryHelper.
func (d *pluginClient) QueryData(ctx context.Context, req data.QueryDataRequest) (int, *backend.QueryDataResponse, error) {
queries, dsRef, err := legacydata.ToDataSourceQueries(req)
queries, dsRef, err := data.ToDataSourceQueries(req)
if err != nil {
return http.StatusBadRequest, nil, err
}

View File

@@ -13,7 +13,6 @@ import (
query "github.com/grafana/grafana/pkg/apis/query/v0alpha1"
testdata "github.com/grafana/grafana/pkg/tsdb/grafana-testdata-datasource"
"github.com/grafana/grafana/pkg/tsdb/legacydata"
)
type testdataDummy struct{}
@@ -33,7 +32,7 @@ func NewTestDataRegistry() query.DataSourceApiServerRegistry {
// ExecuteQueryData implements QueryHelper.
func (d *testdataDummy) QueryData(ctx context.Context, req data.QueryDataRequest) (int, *backend.QueryDataResponse, error) {
queries, _, err := legacydata.ToDataSourceQueries(req)
queries, _, err := data.ToDataSourceQueries(req)
if err != nil {
return http.StatusBadRequest, nil, err
}

View File

@@ -6,6 +6,7 @@ import (
"time"
"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/grafana/grafana-plugin-sdk-go/backend/gtime"
"github.com/grafana/grafana/pkg/api/dtos"
"github.com/grafana/grafana/pkg/components/simplejson"
"github.com/grafana/grafana/pkg/expr"
@@ -18,7 +19,6 @@ import (
"github.com/grafana/grafana/pkg/services/publicdashboards/validation"
"github.com/grafana/grafana/pkg/services/user"
"github.com/grafana/grafana/pkg/tsdb/grafanads"
"github.com/grafana/grafana/pkg/tsdb/legacydata"
)
// FindAnnotations returns annotations for a public dashboard
@@ -368,20 +368,20 @@ func sanitizeData(data *simplejson.Json) {
}
}
// NewDataTimeRange declared to be able to stub this function in tests
var NewDataTimeRange = legacydata.NewDataTimeRange
// NewTimeRange declared to be able to stub this function in tests
var NewTimeRange = gtime.NewTimeRange
// BuildTimeSettings build time settings object using selected values if enabled and are valid or dashboard default values
func buildTimeSettings(d *dashboards.Dashboard, reqDTO models.PublicDashboardQueryDTO, pd *models.PublicDashboard) models.TimeSettings {
from, to, timezone := getTimeRangeValuesOrDefault(reqDTO, d, pd.TimeSelectionEnabled)
timeRange := NewDataTimeRange(from, to)
timeRange := NewTimeRange(from, to)
timeFrom, _ := timeRange.ParseFrom(
legacydata.WithLocation(timezone),
gtime.WithLocation(timezone),
)
timeTo, _ := timeRange.ParseTo(
legacydata.WithLocation(timezone),
gtime.WithLocation(timezone),
)
timeToAsEpoch := timeTo.UnixMilli()
timeFromAsEpoch := timeFrom.UnixMilli()

View File

@@ -8,6 +8,7 @@ import (
"time"
"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/grafana/grafana-plugin-sdk-go/backend/gtime"
"github.com/grafana/grafana-plugin-sdk-go/data"
"github.com/grafana/grafana/pkg/components/simplejson"
@@ -23,7 +24,6 @@ import (
"github.com/grafana/grafana/pkg/services/query"
"github.com/grafana/grafana/pkg/services/quota/quotatest"
"github.com/grafana/grafana/pkg/services/tag/tagimpl"
"github.com/grafana/grafana/pkg/tsdb/legacydata"
"github.com/grafana/grafana/pkg/util"
"github.com/stretchr/testify/assert"
@@ -1616,8 +1616,8 @@ func TestBuildTimeSettings(t *testing.T) {
fakeNow := time.Date(2018, 12, 9, 20, 30, 0, 0, fakeTimezone)
// stub time range construction to have a fixed time.Now and be able to tests relative time ranges
NewDataTimeRange = func(from, to string) legacydata.DataTimeRange {
return legacydata.DataTimeRange{
NewTimeRange = func(from, to string) gtime.TimeRange {
return gtime.TimeRange{
From: from,
To: to,
Now: fakeNow,

View File

@@ -8,6 +8,7 @@ import (
"github.com/google/uuid"
"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/grafana/grafana-plugin-sdk-go/backend/gtime"
"github.com/grafana/grafana/pkg/api/dtos"
"github.com/grafana/grafana/pkg/infra/log"
@@ -24,7 +25,6 @@ import (
"github.com/grafana/grafana/pkg/services/query"
"github.com/grafana/grafana/pkg/services/user"
"github.com/grafana/grafana/pkg/setting"
"github.com/grafana/grafana/pkg/tsdb/legacydata"
"github.com/grafana/grafana/pkg/util"
)
@@ -420,7 +420,7 @@ func (pd *PublicDashboardServiceImpl) getSafeIntervalAndMaxDataPoints(reqDTO Pub
interval := time.Duration(reqDTO.IntervalMs) * time.Millisecond
// calculate a safe interval with time range from dashboard and safeResolution
dataTimeRange := legacydata.NewDataTimeRange(ts.From, ts.To)
dataTimeRange := gtime.NewTimeRange(ts.From, ts.To)
tr := backend.TimeRange{
From: dataTimeRange.GetFromAsTimeUTC(),
To: dataTimeRange.GetToAsTimeUTC(),

View File

@@ -2,8 +2,8 @@ package validation
import (
"github.com/google/uuid"
"github.com/grafana/grafana-plugin-sdk-go/backend/gtime"
. "github.com/grafana/grafana/pkg/services/publicdashboards/models"
"github.com/grafana/grafana/pkg/tsdb/legacydata"
"github.com/grafana/grafana/pkg/util"
)
@@ -26,7 +26,7 @@ func ValidateQueryPublicDashboardRequest(req PublicDashboardQueryDTO, pd *Public
}
if pd.TimeSelectionEnabled {
timeRange := legacydata.NewDataTimeRange(req.TimeRange.From, req.TimeRange.To)
timeRange := gtime.NewTimeRange(req.TimeRange.From, req.TimeRange.To)
_, err := timeRange.ParseFrom()
if err != nil {

View File

@@ -9,6 +9,7 @@ import (
"time"
"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/grafana/grafana-plugin-sdk-go/backend/gtime"
"golang.org/x/sync/errgroup"
"github.com/grafana/grafana/pkg/api/dtos"
@@ -23,7 +24,6 @@ import (
"github.com/grafana/grafana/pkg/services/validations"
"github.com/grafana/grafana/pkg/setting"
"github.com/grafana/grafana/pkg/tsdb/grafanads"
"github.com/grafana/grafana/pkg/tsdb/legacydata"
"github.com/grafana/grafana/pkg/util/errutil"
)
@@ -277,7 +277,7 @@ func (s *ServiceImpl) parseMetricRequest(ctx context.Context, user identity.Requ
return nil, ErrNoQueriesFound
}
timeRange := legacydata.NewDataTimeRange(reqDTO.From, reqDTO.To)
timeRange := gtime.NewTimeRange(reqDTO.From, reqDTO.To)
req := &parsedRequest{
hasExpression: false,
parsedQueries: make(map[string][]parsedQuery),

View File

@@ -3,11 +3,11 @@ package queryhistory
import (
"net/http"
"github.com/grafana/grafana-plugin-sdk-go/backend/gtime"
"github.com/grafana/grafana/pkg/api/response"
"github.com/grafana/grafana/pkg/api/routing"
"github.com/grafana/grafana/pkg/middleware"
contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model"
"github.com/grafana/grafana/pkg/tsdb/legacydata"
"github.com/grafana/grafana/pkg/util"
"github.com/grafana/grafana/pkg/web"
)
@@ -61,7 +61,7 @@ func (s *QueryHistoryService) createHandler(c *contextmodel.ReqContext) response
// 401: unauthorisedError
// 500: internalServerError
func (s *QueryHistoryService) searchHandler(c *contextmodel.ReqContext) response.Response {
timeRange := legacydata.NewDataTimeRange(c.Query("from"), c.Query("to"))
timeRange := gtime.NewTimeRange(c.Query("from"), c.Query("to"))
query := SearchInQueryHistoryQuery{
DatasourceUIDs: c.QueryStrings("datasourceUid"),

View File

@@ -1,84 +0,0 @@
package legacydata
import (
"encoding/json"
"fmt"
"time"
"github.com/grafana/grafana-plugin-sdk-go/backend"
data "github.com/grafana/grafana-plugin-sdk-go/experimental/apis/data/v0alpha1"
)
// ToDataSourceQueries returns queries that should be sent to a single datasource
// This will throw an error if the queries reference multiple instances
func ToDataSourceQueries(req data.QueryDataRequest) ([]backend.DataQuery, *data.DataSourceRef, error) {
var dsRef *data.DataSourceRef
var tr *backend.TimeRange
if req.From != "" {
val := NewDataTimeRange(req.From, req.To)
tr = &backend.TimeRange{
From: val.GetFromAsTimeUTC(),
To: val.GetToAsTimeUTC(),
}
}
queries := []backend.DataQuery{}
if len(req.Queries) > 0 {
dsRef := req.Queries[0].Datasource
for _, generic := range req.Queries {
if generic.Datasource != nil && dsRef != nil {
if dsRef.Type != generic.Datasource.Type {
return queries, dsRef, fmt.Errorf("expect same datasource types")
}
if dsRef.UID != generic.Datasource.UID {
return queries, dsRef, fmt.Errorf("expect same datasource UID")
}
}
q, err := toBackendDataQuery(generic, tr)
if err != nil {
return queries, dsRef, err
}
queries = append(queries, q)
}
return queries, dsRef, nil
}
return queries, dsRef, nil
}
// Converts a generic query to a backend one
func toBackendDataQuery(q data.DataQuery, defaultTimeRange *backend.TimeRange) (backend.DataQuery, error) {
var err error
bq := backend.DataQuery{
RefID: q.RefID,
QueryType: q.QueryType,
MaxDataPoints: q.MaxDataPoints,
}
// Set an explicit time range for the query
if q.TimeRange != nil {
tr := NewDataTimeRange(q.TimeRange.From, q.TimeRange.To)
bq.TimeRange = backend.TimeRange{
From: tr.GetFromAsTimeUTC(),
To: tr.GetToAsTimeUTC(),
}
} else if defaultTimeRange != nil {
bq.TimeRange = *defaultTimeRange
}
bq.JSON, err = json.Marshal(q)
if err != nil {
return bq, err
}
if bq.RefID == "" {
bq.RefID = "A"
}
if bq.MaxDataPoints == 0 {
bq.MaxDataPoints = 100
}
if q.IntervalMS > 0 {
bq.Interval = time.Millisecond * time.Duration(q.IntervalMS)
} else {
bq.Interval = time.Second
}
return bq, nil
}

View File

@@ -1,3 +0,0 @@
// Package legacydata contains old/legacy interfaces/contracts that uses a data format of series/tables.
// Deprecated: use github.com/grafana/grafana-plugin-sdk-go/backend instead.
package legacydata

View File

@@ -1,175 +0,0 @@
package legacydata
import (
"strconv"
"time"
"github.com/vectordotdev/go-datemath"
)
type DataTimeRange struct {
From string
To string
Now time.Time
}
func NewDataTimeRange(from, to string) DataTimeRange {
return DataTimeRange{
From: from,
To: to,
Now: time.Now(),
}
}
func (tr DataTimeRange) GetFromAsMsEpoch() int64 {
return tr.MustGetFrom().UnixNano() / int64(time.Millisecond)
}
func (tr DataTimeRange) GetFromAsSecondsEpoch() int64 {
return tr.GetFromAsMsEpoch() / 1000
}
func (tr DataTimeRange) GetFromAsTimeUTC() time.Time {
return tr.MustGetFrom().UTC()
}
func (tr DataTimeRange) GetToAsMsEpoch() int64 {
return tr.MustGetTo().UnixNano() / int64(time.Millisecond)
}
func (tr DataTimeRange) GetToAsSecondsEpoch() int64 {
return tr.GetToAsMsEpoch() / 1000
}
func (tr DataTimeRange) GetToAsTimeUTC() time.Time {
return tr.MustGetTo().UTC()
}
func (tr DataTimeRange) MustGetFrom() time.Time {
res, err := tr.ParseFrom()
if err != nil {
return time.Unix(0, 0)
}
return res
}
func (tr DataTimeRange) MustGetTo() time.Time {
res, err := tr.ParseTo()
if err != nil {
return time.Unix(0, 0)
}
return res
}
func (tr DataTimeRange) ParseFrom(options ...TimeRangeOption) (time.Time, error) {
options = append(options, WithNow(tr.Now))
pt := newParsableTime(tr.From, options...)
return pt.Parse()
}
func (tr DataTimeRange) ParseTo(options ...TimeRangeOption) (time.Time, error) {
options = append(options, WithRoundUp(), WithNow(tr.Now))
pt := newParsableTime(tr.To, options...)
return pt.Parse()
}
func WithWeekstart(weekday time.Weekday) TimeRangeOption {
return func(timeRange parsableTime) parsableTime {
timeRange.weekstart = &weekday
return timeRange
}
}
func WithLocation(loc *time.Location) TimeRangeOption {
return func(timeRange parsableTime) parsableTime {
timeRange.location = loc
return timeRange
}
}
func WithFiscalStartMonth(month time.Month) TimeRangeOption {
return func(timeRange parsableTime) parsableTime {
timeRange.fiscalStartMonth = &month
return timeRange
}
}
func WithNow(t time.Time) TimeRangeOption {
return func(timeRange parsableTime) parsableTime {
timeRange.now = t
return timeRange
}
}
func WithRoundUp() TimeRangeOption {
return func(timeRange parsableTime) parsableTime {
timeRange.roundUp = true
return timeRange
}
}
type parsableTime struct {
time string
now time.Time
location *time.Location
weekstart *time.Weekday
fiscalStartMonth *time.Month
roundUp bool
}
type TimeRangeOption func(timeRange parsableTime) parsableTime
func newParsableTime(t string, options ...TimeRangeOption) parsableTime {
p := parsableTime{
time: t,
now: time.Now(),
}
for _, opt := range options {
p = opt(p)
}
return p
}
func (t parsableTime) Parse() (time.Time, error) {
// Milliseconds since Unix epoch.
if val, err := strconv.ParseInt(t.time, 10, 64); err == nil {
return time.UnixMilli(val), nil
}
// Duration relative to current time.
if diff, err := time.ParseDuration("-" + t.time); err == nil {
return t.now.Add(diff), nil
}
// Advanced time string, mimics the frontend's datemath library.
return datemath.ParseAndEvaluate(t.time, t.datemathOptions()...)
}
func (t parsableTime) datemathOptions() []func(*datemath.Options) {
options := []func(*datemath.Options){
datemath.WithNow(t.now),
datemath.WithRoundUp(t.roundUp),
}
if t.location != nil {
options = append(options, datemath.WithLocation(t.location))
}
if t.weekstart != nil {
options = append(options, datemath.WithStartOfWeek(*t.weekstart))
}
if t.fiscalStartMonth != nil {
loc := time.UTC
if t.location != nil {
loc = t.location
}
options = append(options, datemath.WithStartOfFiscalYear(
// Year doesn't matter, and Grafana only supports setting the
// month that the fiscal year starts in.
time.Date(0, *t.fiscalStartMonth, 1, 0, 0, 0, 0, loc),
))
}
return options
}

View File

@@ -1,389 +0,0 @@
package legacydata
import (
"strconv"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestTimeRange(t *testing.T) {
now := time.Now()
t.Run("Can parse 5m, now", func(t *testing.T) {
tr := DataTimeRange{
From: "5m",
To: "now",
Now: now,
}
t.Run("5m ago ", func(t *testing.T) {
fiveMinAgo, err := time.ParseDuration("-5m")
require.Nil(t, err)
expected := now.Add(fiveMinAgo)
res, err := tr.ParseFrom()
require.Nil(t, err)
require.Equal(t, expected.Unix(), res.Unix())
})
t.Run("now ", func(t *testing.T) {
res, err := tr.ParseTo()
require.Nil(t, err)
require.Equal(t, now.Unix(), res.Unix())
})
})
t.Run("Can parse 5h, now-10m", func(t *testing.T) {
tr := DataTimeRange{
From: "5h",
To: "now-10m",
Now: now,
}
t.Run("5h ago ", func(t *testing.T) {
fiveHourAgo, err := time.ParseDuration("-5h")
require.Nil(t, err)
expected := now.Add(fiveHourAgo)
res, err := tr.ParseFrom()
require.Nil(t, err)
require.Equal(t, expected.Unix(), res.Unix())
})
t.Run("now-10m ", func(t *testing.T) {
tenMinAgo, err := time.ParseDuration("-10m")
require.Nil(t, err)
expected := now.Add(tenMinAgo)
res, err := tr.ParseTo()
require.Nil(t, err)
require.Equal(t, expected.Unix(), res.Unix())
})
})
now, err := time.Parse(time.RFC3339Nano, "2020-03-26T15:12:56.000Z")
require.Nil(t, err)
t.Run("Can parse now-1M/M, now-1M/M", func(t *testing.T) {
tr := DataTimeRange{
From: "now-1M/M",
To: "now-1M/M",
Now: now,
}
t.Run("from now-1M/M ", func(t *testing.T) {
expected, err := time.Parse(time.RFC3339Nano, "2020-02-01T00:00:00.000Z")
require.Nil(t, err)
res, err := tr.ParseFrom()
require.Nil(t, err)
require.Equal(t, expected, res)
})
t.Run("to now-1M/M ", func(t *testing.T) {
expected, err := time.Parse(time.RFC3339Nano, "2020-02-29T23:59:59.999Z")
require.Nil(t, err)
res, err := tr.ParseTo()
require.Nil(t, err)
require.Equal(t, expected, res)
})
})
t.Run("Can parse now-3d, now+3w", func(t *testing.T) {
tr := DataTimeRange{
From: "now-3d",
To: "now+3w",
Now: now,
}
t.Run("now-3d ", func(t *testing.T) {
expected, err := time.Parse(time.RFC3339Nano, "2020-03-23T15:12:56.000Z")
require.Nil(t, err)
res, err := tr.ParseFrom()
require.Nil(t, err)
require.Equal(t, expected, res)
})
t.Run("now+3w ", func(t *testing.T) {
expected, err := time.Parse(time.RFC3339Nano, "2020-04-16T15:12:56.000Z")
require.Nil(t, err)
res, err := tr.ParseTo()
require.Nil(t, err)
require.Equal(t, expected, res)
})
})
t.Run("Can parse now/fy, now/fQ for 1994-02-26T14:00:00.000Z with fiscal year starting in July", func(t *testing.T) {
tr := DataTimeRange{
From: "now/fy",
To: "now/fQ",
Now: time.Date(1994, time.February, 26, 14, 0, 0, 0, time.UTC),
}
start, err := tr.ParseFrom(WithFiscalStartMonth(time.July))
require.NoError(t, err)
assert.Equal(
t,
time.Date(1993, time.July, 1, 0, 0, 0, 0, time.UTC),
start,
)
end, err := tr.ParseTo(WithFiscalStartMonth(time.July))
require.NoError(t, err)
assert.Equal(
t,
time.Date(1994, time.April, 1, 0, 0, 0, 0, time.UTC).Add(-time.Millisecond),
end,
)
})
t.Run("Can parse 1960-02-01T07:00:00.000Z, 1965-02-03T08:00:00.000Z", func(t *testing.T) {
tr := DataTimeRange{
From: "1960-02-01T07:00:00.000Z",
To: "1965-02-03T08:00:00.000Z",
Now: now,
}
t.Run("1960-02-01T07:00:00.000Z ", func(t *testing.T) {
expected, err := time.Parse(time.RFC3339Nano, "1960-02-01T07:00:00.000Z")
require.Nil(t, err)
res, err := tr.ParseFrom()
require.Nil(t, err)
require.Equal(t, expected, res)
})
t.Run("1965-02-03T08:00:00.000Z ", func(t *testing.T) {
expected, err := time.Parse(time.RFC3339Nano, "1965-02-03T08:00:00.000Z")
require.Nil(t, err)
res, err := tr.ParseTo()
require.Nil(t, err)
require.Equal(t, expected, res)
})
})
t.Run("Can parse negative unix epochs", func(t *testing.T) {
from := time.Date(1960, 2, 1, 7, 0, 0, 0, time.UTC)
to := time.Date(1965, 2, 3, 8, 0, 0, 0, time.UTC)
tr := NewDataTimeRange(strconv.FormatInt(from.UnixNano()/int64(time.Millisecond), 10), strconv.FormatInt(to.UnixNano()/int64(time.Millisecond), 10))
res, err := tr.ParseFrom()
require.Nil(t, err)
require.True(t, from.Equal(res))
res, err = tr.ParseTo()
require.Nil(t, err)
require.True(t, to.Equal(res))
})
t.Run("can parse unix epochs", func(t *testing.T) {
var err error
tr := DataTimeRange{
From: "1474973725473",
To: "1474975757930",
Now: now,
}
res, err := tr.ParseFrom()
require.Nil(t, err)
require.Equal(t, int64(1474973725473), res.UnixNano()/int64(time.Millisecond))
res, err = tr.ParseTo()
require.Nil(t, err)
require.Equal(t, int64(1474975757930), res.UnixNano()/int64(time.Millisecond))
})
t.Run("Cannot parse asdf", func(t *testing.T) {
var err error
tr := DataTimeRange{
From: "asdf",
To: "asdf",
Now: now,
}
_, err = tr.ParseFrom()
require.Error(t, err)
_, err = tr.ParseTo()
require.Error(t, err)
})
now, err = time.Parse(time.RFC3339Nano, "2020-07-26T15:12:56.000Z")
require.Nil(t, err)
t.Run("Can parse now-1M/M, now-1M/M with America/Chicago timezone", func(t *testing.T) {
tr := DataTimeRange{
From: "now-1M/M",
To: "now-1M/M",
Now: now,
}
location, err := time.LoadLocation("America/Chicago")
require.Nil(t, err)
t.Run("from now-1M/M ", func(t *testing.T) {
expected, err := time.Parse(time.RFC3339Nano, "2020-06-01T00:00:00.000-05:00")
require.Nil(t, err)
res, err := tr.ParseFrom(WithLocation(location))
require.Nil(t, err)
require.True(t, expected.Equal(res))
})
t.Run("to now-1M/M ", func(t *testing.T) {
expected, err := time.Parse(time.RFC3339Nano, "2020-06-30T23:59:59.999-05:00")
require.Nil(t, err)
res, err := tr.ParseTo(WithLocation(location))
require.Nil(t, err)
require.True(t, expected.Equal(res))
})
})
t.Run("Can parse now-3h, now+2h with America/Chicago timezone", func(t *testing.T) {
tr := DataTimeRange{
From: "now-3h",
To: "now+2h",
Now: now,
}
location, err := time.LoadLocation("America/Chicago")
require.Nil(t, err)
t.Run("now-3h ", func(t *testing.T) {
expected, err := time.Parse(time.RFC3339Nano, "2020-07-26T07:12:56.000-05:00")
require.Nil(t, err)
res, err := tr.ParseFrom(WithLocation(location))
require.Nil(t, err)
require.True(t, expected.Equal(res))
})
t.Run("now+2h ", func(t *testing.T) {
expected, err := time.Parse(time.RFC3339Nano, "2020-07-26T12:12:56.000-05:00")
require.Nil(t, err)
res, err := tr.ParseTo(WithLocation(location))
require.Nil(t, err)
require.True(t, expected.Equal(res))
})
})
t.Run("Can parse now-1w/w, now-1w/w without timezone and week start on Monday", func(t *testing.T) {
tr := DataTimeRange{
From: "now-1w/w",
To: "now-1w/w",
Now: now,
}
weekstart := time.Monday
require.Nil(t, err)
t.Run("from now-1w/w ", func(t *testing.T) {
expected, err := time.Parse(time.RFC3339Nano, "2020-07-13T00:00:00.000Z")
require.Nil(t, err)
res, err := tr.ParseFrom(WithWeekstart(weekstart))
require.Nil(t, err)
require.True(t, expected.Equal(res))
})
t.Run("to now-1w/w ", func(t *testing.T) {
expected, err := time.Parse(time.RFC3339Nano, "2020-07-19T23:59:59.999Z")
require.Nil(t, err)
res, err := tr.ParseTo(WithWeekstart(weekstart))
require.Nil(t, err)
require.True(t, expected.Equal(res))
})
})
t.Run("Can parse now-1w/w, now-1w/w with America/Chicago timezone and week start on Monday", func(t *testing.T) {
tr := DataTimeRange{
From: "now-1w/w",
To: "now-1w/w",
Now: now,
}
weekstart := time.Monday
location, err := time.LoadLocation("America/Chicago")
require.Nil(t, err)
t.Run("from now-1w/w ", func(t *testing.T) {
expected, err := time.Parse(time.RFC3339Nano, "2020-07-13T00:00:00.000-05:00")
require.Nil(t, err)
res, err := tr.ParseFrom(WithLocation(location), WithWeekstart(weekstart))
require.Nil(t, err)
require.True(t, expected.Equal(res))
})
t.Run("to now-1w/w ", func(t *testing.T) {
expected, err := time.Parse(time.RFC3339Nano, "2020-07-19T23:59:59.999-05:00")
require.Nil(t, err)
res, err := tr.ParseTo(WithLocation(location), WithWeekstart(weekstart))
require.Nil(t, err)
require.True(t, expected.Equal(res))
})
})
t.Run("Can parse now-1w/w, now-1w/w with America/Chicago timezone and week start on Sunday", func(t *testing.T) {
tr := DataTimeRange{
From: "now-1w/w",
To: "now-1w/w",
Now: now,
}
weekstart := time.Sunday
location, err := time.LoadLocation("America/Chicago")
require.Nil(t, err)
t.Run("from now-1w/w ", func(t *testing.T) {
expected, err := time.Parse(time.RFC3339Nano, "2020-07-19T00:00:00.000-05:00")
require.Nil(t, err)
res, err := tr.ParseFrom(WithLocation(location), WithWeekstart(weekstart))
require.Nil(t, err)
require.True(t, expected.Equal(res))
})
t.Run("to now-1w/w ", func(t *testing.T) {
expected, err := time.Parse(time.RFC3339Nano, "2020-07-25T23:59:59.999-05:00")
require.Nil(t, err)
res, err := tr.ParseTo(WithLocation(location), WithWeekstart(weekstart))
require.Nil(t, err)
require.True(t, expected.Equal(res))
})
})
t.Run("Can parse now-1w/w, now-1w/w with America/Chicago timezone and week start on Saturday", func(t *testing.T) {
tr := DataTimeRange{
From: "now-1w/w",
To: "now-1w/w",
Now: now,
}
weekstart := time.Saturday
location, err := time.LoadLocation("America/Chicago")
require.Nil(t, err)
t.Run("from now-1w/w ", func(t *testing.T) {
expected, err := time.Parse(time.RFC3339Nano, "2020-07-18T00:00:00.000-05:00")
require.Nil(t, err)
res, err := tr.ParseFrom(WithLocation(location), WithWeekstart(weekstart))
require.Nil(t, err)
require.True(t, expected.Equal(res))
})
t.Run("to now-1w/w ", func(t *testing.T) {
expected, err := time.Parse(time.RFC3339Nano, "2020-07-24T23:59:59.999-05:00")
require.Nil(t, err)
res, err := tr.ParseTo(WithLocation(location), WithWeekstart(weekstart))
require.Nil(t, err)
require.True(t, expected.Equal(res))
})
})
}