diff --git a/.bingo/golangci-lint.sum b/.bingo/golangci-lint.sum index 25b439b816a..dea162a792e 100644 --- a/.bingo/golangci-lint.sum +++ b/.bingo/golangci-lint.sum @@ -335,6 +335,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jgautheron/goconst v1.5.1 h1:HxVbL1MhydKs8R8n/HE5NPvzfaYmQJA3o879lE4+WcM= github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs= diff --git a/.bingo/swagger.sum b/.bingo/swagger.sum index 82c813be8b1..a03ffd86341 100644 --- a/.bingo/swagger.sum +++ b/.bingo/swagger.sum @@ -1,3 +1,43 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= @@ -5,134 +45,662 @@ github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0 github.com/Masterminds/sprig/v3 v3.2.2 h1:17jRggJu518dr3QaafizSXOjKYp94wKfABxUmyxvxX8= github.com/Masterminds/sprig/v3 v3.2.2/go.mod h1:UoaO7Yp8KlPnJIYWTFkMaqPUYKTfGFPhxNuwnnxkKlk= github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d h1:Byv0BzEl3/e6D5CLfI0j/7hiIEtvGVFPCZ7Ei2oq8iQ= github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-openapi/analysis v0.21.2 h1:hXFrOYFHUAMQdu6zwAiKKJHJQ8kqZs1ux/ru1P1wLJU= +github.com/go-openapi/analysis v0.21.2/go.mod h1:HZwRk4RRisyG8vx2Oe6aqeSQcoxRp47Xkp3+K6q+LdY= github.com/go-openapi/analysis v0.21.4 h1:ZDFLvSNxpDaomuCueM0BlSXxpANBlFYiBvr+GXrvIHc= github.com/go-openapi/analysis v0.21.4/go.mod h1:4zQ35W4neeZTqh3ol0rv/O8JBbka9QyAgQRPp9y3pfo= +github.com/go-openapi/errors v0.19.8/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= +github.com/go-openapi/errors v0.19.9/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= github.com/go-openapi/errors v0.20.2 h1:dxy7PGTqEh94zj2E3h1cUmQQWiM1+aeCROfAr02EmK8= +github.com/go-openapi/errors v0.20.2/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= github.com/go-openapi/errors v0.20.3 h1:rz6kiC84sqNQoqrtulzaL/VERgkoCyB6WdEkc2ujzUc= github.com/go-openapi/errors v0.20.3/go.mod h1:Z3FlZ4I8jEGxjUK+bugx3on2mIAk4txuAOhlsB1FSgk= github.com/go-openapi/inflect v0.19.0 h1:9jCH9scKIbHeV9m12SmPilScz6krDxKRasNNSNPXu/4= github.com/go-openapi/inflect v0.19.0/go.mod h1:lHpZVlpIQqLyKwJ4N+YSc9hchQy/i12fJykb83CRBH4= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonreference v0.19.6 h1:UBIxjkht+AWIgYzCDSv2GN+E/togfwXUJFRTWhl2Jjs= +github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA= github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= github.com/go-openapi/loads v0.21.0 h1:jYtUO4wwP7psAweisP/MDoOpdzsYEESdoPcsWjHDR68= +github.com/go-openapi/loads v0.21.1/go.mod h1:/DtAMXXneXFjbQMGEtbamCZb+4x7eGwkvZCvBmwUG+g= github.com/go-openapi/loads v0.21.2 h1:r2a/xFIYeZ4Qd2TnGpWDIQNcP80dIaZgf704za8enro= github.com/go-openapi/loads v0.21.2/go.mod h1:Jq58Os6SSGz0rzh62ptiu8Z31I+OTHqmULx5e/gJbNw= github.com/go-openapi/runtime v0.21.1 h1:/KIG00BzA2x2HRStX2tnhbqbQdPcFlkgsYCiNY20FZs= github.com/go-openapi/runtime v0.24.1 h1:Sml5cgQKGYQHF+M7yYSHaH1eOjvTykrddTE/KtQVjqo= github.com/go-openapi/runtime v0.24.1/go.mod h1:AKurw9fNre+h3ELZfk6ILsfvPN+bvvlaU/M9q/r9hpk= github.com/go-openapi/spec v0.20.4 h1:O8hJrt0UMnhHcluhIdUgCLRWyM2x7QkBXRvOs7m+O1M= +github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= +github.com/go-openapi/spec v0.20.6/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= github.com/go-openapi/spec v0.20.7 h1:1Rlu/ZrOCCob0n+JKKJAWhNWMPW8bOZRg8FJaY+0SKI= github.com/go-openapi/spec v0.20.7/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= +github.com/go-openapi/strfmt v0.21.0/go.mod h1:ZRQ409bWMj+SOgXofQAGTIo2Ebu72Gs+WaRADcS5iNg= github.com/go-openapi/strfmt v0.21.1 h1:G6s2t5V5kGCHLVbSdZ/6lI8Wm4OzoPFkc3/cjAsKQrM= +github.com/go-openapi/strfmt v0.21.1/go.mod h1:I/XVKeLc5+MM5oPNN7P6urMOpuLXEcNrCX/rPGuWb0k= +github.com/go-openapi/strfmt v0.21.2/go.mod h1:I/XVKeLc5+MM5oPNN7P6urMOpuLXEcNrCX/rPGuWb0k= github.com/go-openapi/strfmt v0.21.3 h1:xwhj5X6CjXEZZHMWy1zKJxvW9AfHC9pkyUjLvHtKG7o= github.com/go-openapi/strfmt v0.21.3/go.mod h1:k+RzNO0Da+k3FrrynSNN8F7n/peCmQQqbbXjtDfvmGg= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM= +github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-openapi/validate v0.20.3 h1:GZPPhhKSZrE8HjB4eEkoYAZmoWA4+tCemSgINH1/vKw= +github.com/go-openapi/validate v0.21.0/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg= github.com/go-openapi/validate v0.22.0 h1:b0QecH6VslW/TxtpKgzpO1SNG7GU2FsaqKdP1E2T50Y= github.com/go-openapi/validate v0.22.0/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= +github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= github.com/go-swagger/go-swagger v0.29.0 h1:z3YoZtLvS1Y8TE/PCat1VypcZxM0IgKLt0NvZxQyNl8= github.com/go-swagger/go-swagger v0.29.0/go.mod h1:Z4GJzI+bHKKkGB2Ji1rawpi3/ldXX8CkzGIa9HAC5EE= github.com/go-swagger/go-swagger v0.30.2 h1:23odPUyQZdkNFZZSBJ3mqYYcdh+LnuReEbdWN18OMRo= github.com/go-swagger/go-swagger v0.30.2/go.mod h1:neDPes8r8PCz2JPvHRDj8BTULLh4VJUt7n6MpQqxhHM= +github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= +github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= +github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= +github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs= +github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= +github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28= +github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo= +github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk= +github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw= +github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= +github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= +github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= +github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= +github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= +github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= +github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/huandu/xstrings v1.3.2 h1:L18LIDzqlW6xN2rEkpdV8+oL/IXWJ1APd+vsdYy4Wdw= github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= +github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +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/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= +github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= +github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= +github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs= +github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= +github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml/v2 v2.0.1 h1:8e3L2cCQzLFi2CR4g7vGFuFxX7Jl1kKX8gW+iV0GUKU= github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/spf13/afero v1.8.0 h1:5MmtuhAgYeU6qpa7w7bP0dv6MBYuup0vekhSpSkoq60= github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo= github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA= github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.10.1 h1:nuJZuYpG7gTj/XqiUwg8bA0cp1+M2mC3J4g5luUYBKk= github.com/spf13/viper v1.12.0 h1:CZ7eSOd3kZoaYDLbXnmzgQI5RlciuXBMA+18HwHRfZQ= github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.3.0 h1:mjC+YW8QpAdXibNi+vNWgzmgBH4+5l5dCXv8cNysBLI= github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= +github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/toqueteos/webbrowser v1.2.0 h1:tVP/gpK69Fx+qMJKsLE7TD8LuGWPnEV71wBN9rrstGQ= github.com/toqueteos/webbrowser v1.2.0/go.mod h1:XWoZq4cyp9WeUeak7w7LXRUQf1F1ATJMir8RTqb4ayM= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= +github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= +github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= +github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.mongodb.org/mongo-driver v1.7.3/go.mod h1:NqaYOwnXWr5Pm7AOpO5QFxKJ503nbMse/R79oO62zWg= +go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4xhp5Zvxng= go.mongodb.org/mongo-driver v1.8.2 h1:8ssUXufb90ujcIvR6MyE1SchaNj0SFxsakiZgxIyrMk= +go.mongodb.org/mongo-driver v1.8.3/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY= +go.mongodb.org/mongo-driver v1.10.0/go.mod h1:wsihk0Kdgv8Kqu1Anit4sfK+22vSFbUrAVEYRhCXrA8= go.mongodb.org/mongo-driver v1.10.1 h1:NujsPveKwHaWuKUer/ceo9DzEe7HIj1SlJ6uvXZG0S4= go.mongodb.org/mongo-driver v1.10.1/go.mod h1:z4XpeoU6w+9Vht+jAFyLgVrD+jGSQQe0+CBWFHNiHt8= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 h1:Y/gsMcFOcR+6S6f3YeMKl5g+dZMEWqcz5Czj/GWYbkM= golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.5.1 h1:OJxoQ/rynoF0dcCdI7cLPktw/hR2cueqYfjm43oqK38= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220121210141-e204ce36a2ba h1:6u6sik+bn/y7vILcYkK3iwTBWN7WtBvB0+SZswQnbf8= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 h1:XfKQ4OlFl8okEOr5UvAqFRVj8pY/4yfcXrddB8qAbU0= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261 h1:v6hYoSR9T5oet+pMXwUWkbiVqx/63mlHjefrHmxwfeY= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.8 h1:P1HhGGuLW4aAclzjtmJdf0mJOjVUZUzOTqkAkWL+l6w= golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/ini.v1 v1.66.3 h1:jRskFVxYaMGAMUbN0UZ7niA9gzL9B49DOqE78vg0k3w= gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4= gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/.drone.yml b/.drone.yml index c58222e0fb9..6106130988c 100644 --- a/.drone.yml +++ b/.drone.yml @@ -441,7 +441,7 @@ steps: name: validate-modfile - commands: - apk add --update make - - make validate-api-spec + - make swagger-validate image: golang:1.20.8-alpine name: validate-openapi-spec trigger: @@ -1630,7 +1630,7 @@ steps: name: validate-modfile - commands: - apk add --update make - - make validate-api-spec + - make swagger-validate image: golang:1.20.8-alpine name: validate-openapi-spec - commands: @@ -4212,6 +4212,6 @@ kind: secret name: gcr_credentials --- kind: signature -hmac: f396274e4808957992b702206f675a2ff3385f67f7fce4ee8a883ceb853d5cca +hmac: da647c8f3b339a16dbf84f27abcd39b4ac50b303dc360a4ea5796243e6f7d035 ... diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ea3b6408666..a7f0b7c2eb3 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -467,6 +467,7 @@ cypress.config.js @grafana/grafana-frontend-platform /public/app/features/explore/TraceView/ @grafana/observability-traces-and-profiling /public/api-merged.json @grafana/backend-platform +/public/api-enterprise-spec.json @grafana/backend-platform /public/openapi3.json @grafana/backend-platform /public/app/angular/ @torkelo /public/app/app.ts @grafana/frontend-ops diff --git a/.gitignore b/.gitignore index a9abb5562f1..632a27c62e3 100644 --- a/.gitignore +++ b/.gitignore @@ -38,6 +38,9 @@ __debug_bin* # Enterprise reporting fonts /public/fonts/dejavu +# Swagger intermediate file +/public/api-spec.json + # Enterprise devenv /devenv/docker/blocks/grafana-enterprise /devenv/docker/blocks/saml-enterprise diff --git a/.prettierignore b/.prettierignore index 7721dfa85bd..9f95507f7b3 100644 --- a/.prettierignore +++ b/.prettierignore @@ -28,6 +28,7 @@ theme.dark.generated.json # Generated Swagger API specs public/api-merged.json +public/api-enterprise-spec.json public/openapi3.json # Generated Kinds report diff --git a/Makefile b/Makefile index 7b26be71192..a98ab7b3ef0 100644 --- a/Makefile +++ b/Makefile @@ -36,30 +36,50 @@ node_modules: package.json yarn.lock ## Install node modules. ##@ Swagger SPEC_TARGET = public/api-spec.json -MERGED_SPEC_TARGET := public/api-merged.json +ENTERPRISE_SPEC_TARGET = public/api-enterprise-spec.json +MERGED_SPEC_TARGET = public/api-merged.json NGALERT_SPEC_TARGET = pkg/services/ngalert/api/tooling/api.json $(NGALERT_SPEC_TARGET): +$(MAKE) -C pkg/services/ngalert/api/tooling api.json -$(MERGED_SPEC_TARGET): $(SPEC_TARGET) $(NGALERT_SPEC_TARGET) $(SWAGGER) ## Merge generated and ngalert API specs +$(MERGED_SPEC_TARGET): swagger-oss-gen swagger-enterprise-gen $(NGALERT_SPEC_TARGET) $(SWAGGER) ## Merge generated and ngalert API specs # known conflicts DsPermissionType, AddApiKeyCommand, Json, Duration (identical models referenced by both specs) - $(SWAGGER) mixin $(SPEC_TARGET) $(NGALERT_SPEC_TARGET) --ignore-conflicts -o $(MERGED_SPEC_TARGET) + $(SWAGGER) mixin $(SPEC_TARGET) $(ENTERPRISE_SPEC_TARGET) $(NGALERT_SPEC_TARGET) --ignore-conflicts -o $(MERGED_SPEC_TARGET) -$(SPEC_TARGET): $(SWAGGER) ## Generate API Swagger specification +swagger-oss-gen: $(SWAGGER) ## Generate API Swagger specification + @echo "re-generating swagger for OSS" + rm -f $(SPEC_TARGET) SWAGGER_GENERATE_EXTENSION=false $(SWAGGER) generate spec -m -w pkg/server -o $(SPEC_TARGET) \ -x "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions" \ -x "github.com/prometheus/alertmanager" \ -i pkg/api/swagger_tags.json \ - --exclude-tag=alpha - go run pkg/services/ngalert/api/tooling/cmd/clean-swagger/main.go -if $@ -of $@ + --exclude-tag=alpha \ + --exclude-tag=enterprise -swagger-api-spec: gen-go $(SPEC_TARGET) $(MERGED_SPEC_TARGET) validate-api-spec +# this file only exists if enterprise is enabled +ENTERPRISE_EXT_FILE = pkg/extensions/ext.go +ifeq ("$(wildcard $(ENTERPRISE_EXT_FILE))","") ## if enterprise is not enabled +swagger-enterprise-gen: + @echo "skipping re-generating swagger for enterprise: not enabled" +else +swagger-enterprise-gen: $(SWAGGER) ## Generate API Swagger specification + @echo "re-generating swagger for enterprise" + rm -f $(ENTERPRISE_SPEC_TARGET) + SWAGGER_GENERATE_EXTENSION=false $(SWAGGER) generate spec -m -w pkg/server -o $(ENTERPRISE_SPEC_TARGET) \ + -x "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions" \ + -x "github.com/prometheus/alertmanager" \ + -i pkg/api/swagger_tags.json \ + --exclude-tag=alpha \ + --include-tag=enterprise +endif -validate-api-spec: $(MERGED_SPEC_TARGET) $(SWAGGER) ## Validate API spec +swagger-gen: gen-go $(MERGED_SPEC_TARGET) swagger-validate + +swagger-validate: $(MERGED_SPEC_TARGET) $(SWAGGER) ## Validate API spec $(SWAGGER) validate $(<) -clean-api-spec: +swagger-clean: rm -f $(SPEC_TARGET) $(MERGED_SPEC_TARGET) $(OAPI_SPEC_TARGET) .PHONY: cleanup-old-git-hooks @@ -77,7 +97,7 @@ lefthook-uninstall: $(LEFTHOOK) ##@ OpenAPI 3 OAPI_SPEC_TARGET = public/openapi3.json -openapi3-gen: swagger-api-spec ## Generates OpenApi 3 specs from the Swagger 2 already generated +openapi3-gen: swagger-gen ## Generates OpenApi 3 specs from the Swagger 2 already generated $(GO) run scripts/openapi3/openapi3conv.go $(MERGED_SPEC_TARGET) $(OAPI_SPEC_TARGET) ##@ Building diff --git a/pkg/api/README.md b/pkg/api/README.md index 8769ab91dba..8a694bc377c 100644 --- a/pkg/api/README.md +++ b/pkg/api/README.md @@ -74,7 +74,7 @@ Developers can re-create the OpenAPI v2 and v3 specifications using the followin ```bash -make clean-api-spec && make openapi3-gen +make swagger-clean && make openapi3-gen ``` They can observe its output into the `public/api-merged.json` and `public/openapi3.json` files. diff --git a/public/api-enterprise-spec.json b/public/api-enterprise-spec.json new file mode 100644 index 00000000000..35db54f2227 --- /dev/null +++ b/public/api-enterprise-spec.json @@ -0,0 +1,8823 @@ +{ + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "schemes": [ + "http", + "https" + ], + "swagger": "2.0", + "info": { + "description": "The Grafana backend exposes an HTTP API, the same API is used by the frontend to do\neverything from saving dashboards, creating users and updating data sources.", + "title": "Grafana HTTP API.", + "contact": { + "name": "Grafana Labs", + "url": "https://grafana.com", + "email": "hello@grafana.com" + }, + "version": "0.0.1" + }, + "basePath": "/api", + "paths": { + "/access-control/assignments/search": { + "post": { + "description": "Returns the result of the search through access-control role assignments.\n\nYou need to have a permission with action `teams.roles:read` on scope `teams:*`\nand a permission with action `users.roles:read` on scope `users:*`.", + "tags": [ + "enterprise" + ], + "summary": "Debug permissions.", + "operationId": "searchResult", + "responses": { + "200": { + "$ref": "#/responses/searchResultResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/access-control/roles": { + "get": { + "description": "Gets all existing roles. The response contains all global and organization local roles, for the organization which user is signed in.\n\nYou need to have a permission with action `roles:read` and scope `roles:*`.", + "tags": [ + "access_control", + "enterprise" + ], + "summary": "Get all roles.", + "operationId": "listRoles", + "parameters": [ + { + "type": "boolean", + "name": "delegatable", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/listRolesResponse" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + }, + "post": { + "description": "Creates a new custom role and maps given permissions to that role. Note that roles with the same prefix as Fixed Roles can’t be created.\n\nYou need to have a permission with action `roles:write` and scope `permissions:type:delegate`. `permissions:type:delegate` scope ensures that users can only create custom roles with the same, or a subset of permissions which the user has.\nFor example, if a user does not have required permissions for creating users, they won’t be able to create a custom role which allows to do that. This is done to prevent escalation of privileges.", + "tags": [ + "access_control", + "enterprise" + ], + "summary": "Create a new custom role.", + "operationId": "createRole", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateRoleForm" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/createRoleResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/access-control/roles/{roleUID}": { + "get": { + "description": "Get a role for the given UID.\n\nYou need to have a permission with action `roles:read` and scope `roles:*`.", + "tags": [ + "access_control", + "enterprise" + ], + "summary": "Get a role.", + "operationId": "getRole", + "parameters": [ + { + "type": "string", + "name": "roleUID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/getRoleResponse" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + }, + "put": { + "description": "You need to have a permission with action `roles:write` and scope `permissions:type:delegate`. `permissions:type:delegate` scope ensures that users can only create custom roles with the same, or a subset of permissions which the user has.", + "tags": [ + "access_control", + "enterprise" + ], + "summary": "Update a custom role.", + "operationId": "updateRole", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateRoleCommand" + } + }, + { + "type": "string", + "name": "roleUID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/getRoleResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + }, + "delete": { + "description": "Delete a role with the given UID, and it’s permissions. If the role is assigned to a built-in role, the deletion operation will fail, unless force query param is set to true, and in that case all assignments will also be deleted.\n\nYou need to have a permission with action `roles:delete` and scope `permissions:type:delegate`. `permissions:type:delegate` scope ensures that users can only delete a custom role with the same, or a subset of permissions which the user has. For example, if a user does not have required permissions for creating users, they won’t be able to delete a custom role which allows to do that.", + "tags": [ + "access_control", + "enterprise" + ], + "summary": "Delete a custom role.", + "operationId": "deleteRole", + "parameters": [ + { + "type": "boolean", + "name": "force", + "in": "query" + }, + { + "type": "boolean", + "name": "global", + "in": "query" + }, + { + "type": "string", + "name": "roleUID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/okResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/access-control/roles/{roleUID}/assignments": { + "get": { + "description": "Get role assignments for the role with the given UID.\n\nYou need to have a permission with action `teams.roles:list` and scope `teams:id:*` and `users.roles:list` and scope `users:id:*`.", + "tags": [ + "access_control", + "enterprise" + ], + "summary": "Get role assignments.", + "operationId": "getRoleAssignments", + "parameters": [ + { + "type": "string", + "name": "roleUID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/getRoleAssignmentsResponse" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + }, + "put": { + "description": "Set role assignments for the role with the given UID.\n\nYou need to have a permission with action `teams.roles:add` and `teams.roles:remove` and scope `permissions:type:delegate`, and `users.roles:add` and `users.roles:remove` and scope `permissions:type:delegate`.", + "tags": [ + "access_control", + "enterprise" + ], + "summary": "Set role assignments.", + "operationId": "setRoleAssignments", + "parameters": [ + { + "type": "string", + "name": "roleUID", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/SetRoleAssignmentsCommand" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/setRoleAssignmentsResponse" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/access-control/status": { + "get": { + "description": "Returns an indicator to check if fine-grained access control is enabled or not.\n\nYou need to have a permission with action `status:accesscontrol` and scope `services:accesscontrol`.", + "tags": [ + "access_control", + "enterprise" + ], + "summary": "Get status.", + "operationId": "getAccessControlStatus", + "responses": { + "200": { + "$ref": "#/responses/getAccessControlStatusResponse" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/access-control/teams/{teamId}/roles": { + "get": { + "description": "You need to have a permission with action `teams.roles:read` and scope `teams:id:\u003cteam ID\u003e`.", + "tags": [ + "access_control", + "enterprise" + ], + "summary": "Get team roles.", + "operationId": "listTeamRoles", + "parameters": [ + { + "type": "integer", + "format": "int64", + "name": "teamId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/okResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + }, + "put": { + "description": "You need to have a permission with action `teams.roles:add` and `teams.roles:remove` and scope `permissions:type:delegate` for each.", + "tags": [ + "access_control", + "enterprise" + ], + "summary": "Update team role.", + "operationId": "setTeamRoles", + "parameters": [ + { + "type": "integer", + "format": "int64", + "name": "teamId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/okResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + }, + "post": { + "description": "You need to have a permission with action `teams.roles:add` and scope `permissions:type:delegate`.", + "tags": [ + "access_control", + "enterprise" + ], + "summary": "Add team role.", + "operationId": "addTeamRole", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/AddTeamRoleCommand" + } + }, + { + "type": "integer", + "format": "int64", + "name": "teamId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/okResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/access-control/teams/{teamId}/roles/{roleUID}": { + "delete": { + "description": "You need to have a permission with action `teams.roles:remove` and scope `permissions:type:delegate`.", + "tags": [ + "access_control", + "enterprise" + ], + "summary": "Remove team role.", + "operationId": "removeTeamRole", + "parameters": [ + { + "type": "string", + "name": "roleUID", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "name": "teamId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/okResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/access-control/users/{userId}/roles": { + "get": { + "description": "Lists the roles that have been directly assigned to a given user. The list does not include built-in roles (Viewer, Editor, Admin or Grafana Admin), and it does not include roles that have been inherited from a team.\n\nYou need to have a permission with action `users.roles:read` and scope `users:id:\u003cuser ID\u003e`.", + "tags": [ + "access_control", + "enterprise" + ], + "summary": "List roles assigned to a user.", + "operationId": "listUserRoles", + "parameters": [ + { + "type": "integer", + "format": "int64", + "name": "userId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/getAllRolesResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + }, + "put": { + "description": "Update the user’s role assignments to match the provided set of UIDs. This will remove any assigned roles that aren’t in the request and add roles that are in the set but are not already assigned to the user.\nIf you want to add or remove a single role, consider using Add a user role assignment or Remove a user role assignment instead.\n\nYou need to have a permission with action `users.roles:add` and `users.roles:remove` and scope `permissions:type:delegate` for each. `permissions:type:delegate` scope ensures that users can only assign or unassign roles which have same, or a subset of permissions which the user has. For example, if a user does not have required permissions for creating users, they won’t be able to assign or unassign a role which will allow to do that. This is done to prevent escalation of privileges.", + "tags": [ + "access_control", + "enterprise" + ], + "summary": "Set user role assignments.", + "operationId": "setUserRoles", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/SetUserRolesCommand" + } + }, + { + "type": "integer", + "format": "int64", + "name": "userId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/okResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + }, + "post": { + "description": "Assign a role to a specific user. For bulk updates consider Set user role assignments.\n\nYou need to have a permission with action `users.roles:add` and scope `permissions:type:delegate`. `permissions:type:delegate` scope ensures that users can only assign roles which have same, or a subset of permissions which the user has. For example, if a user does not have required permissions for creating users, they won’t be able to assign a role which will allow to do that. This is done to prevent escalation of privileges.", + "tags": [ + "access_control", + "enterprise" + ], + "summary": "Add a user role assignment.", + "operationId": "addUserRole", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/AddUserRoleCommand" + } + }, + { + "type": "integer", + "format": "int64", + "name": "userId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/okResponse" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/access-control/users/{userId}/roles/{roleUID}": { + "delete": { + "description": "Revoke a role from a user. For bulk updates consider Set user role assignments.\n\nYou need to have a permission with action `users.roles:remove` and scope `permissions:type:delegate`. `permissions:type:delegate` scope ensures that users can only unassign roles which have same, or a subset of permissions which the user has. For example, if a user does not have required permissions for creating users, they won’t be able to unassign a role which will allow to do that. This is done to prevent escalation of privileges.", + "tags": [ + "access_control", + "enterprise" + ], + "summary": "Remove a user role assignment.", + "operationId": "removeUserRole", + "parameters": [ + { + "type": "boolean", + "description": "A flag indicating if the assignment is global or not. If set to false, the default org ID of the authenticated user will be used from the request to remove assignment.", + "name": "global", + "in": "query" + }, + { + "type": "string", + "name": "roleUID", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "name": "userId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/okResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/admin/provisioning/access-control/reload": { + "post": { + "tags": [ + "access_control_provisioning", + "enterprise" + ], + "summary": "You need to have a permission with action `provisioning:reload` with scope `provisioners:accesscontrol`.", + "operationId": "adminProvisioningReloadAccessControl", + "responses": { + "202": { + "$ref": "#/responses/acceptedResponse" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + } + } + } + }, + "/datasources/{datasourceId}/disable-permissions": { + "post": { + "description": "Disables permissions for the data source with the given id. All existing permissions will be removed and anyone will be able to query the data source.\n\nYou need to have a permission with action `datasources.permissions:toggle` and scopes `datasources:*`, `datasources:id:*`, `datasources:id:1` (single data source).\n\nDeprecated: true.", + "tags": [ + "datasource_permissions", + "enterprise" + ], + "summary": "Disable permissions for a data source.", + "operationId": "disablePermissions", + "parameters": [ + { + "type": "string", + "name": "datasourceId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/createOrUpdateDatasourceResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/datasources/{datasourceId}/enable-permissions": { + "post": { + "description": "Enables permissions for the data source with the given id.\nNo one except Org Admins will be able to query the data source until permissions have been added\nwhich permit certain users or teams to query the data source.\n\nYou need to have a permission with action `datasources.permissions:toggle` and scopes `datasources:*`, `datasources:id:*`, `datasources:id:1` (single data source).\n\nDeprecated: true.", + "tags": [ + "datasource_permissions", + "enterprise" + ], + "summary": "Enable permissions for a data source.", + "operationId": "enablePermissions", + "parameters": [ + { + "type": "string", + "name": "datasourceId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/createOrUpdateDatasourceResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/datasources/{datasourceId}/permissions": { + "get": { + "description": "Gets all existing permissions for the data source with the given id.\n\nYou need to have a permission with action `datasources.permissions:read` and scopes `datasources:*`, `datasources:id:*`, `datasources:id:1` (single data source).\n\nDeprecated: true.\nDeprecated. Please use GET /api/access-control/datasources/:uid", + "tags": [ + "datasource_permissions", + "enterprise" + ], + "summary": "Get permissions for a data source.", + "operationId": "getAllPermissions", + "parameters": [ + { + "type": "string", + "name": "datasourceId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/getAllPermissionseResponse" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + }, + "post": { + "description": "You need to have a permission with action `datasources.permissions:read` and scopes `datasources:*`, `datasources:id:*`, `datasources:id:1` (single data source).\n\nDeprecated: true.\nDeprecated. Please use POST /api/access-control/datasources/:uid/users/:id, /api/access-control/datasources/:uid/teams/:id or /api/access-control/datasources/:uid/buildInRoles/:id", + "tags": [ + "datasource_permissions", + "enterprise" + ], + "summary": "Add permissions for a data source.", + "operationId": "addPermission", + "parameters": [ + { + "type": "integer", + "format": "int64", + "name": "userId", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "name": "teamId", + "in": "query" + }, + { + "type": "string", + "name": "builtinRole", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "name": "permission", + "in": "query" + }, + { + "type": "string", + "name": "datasourceId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/addPermissionResponse" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/datasources/{datasourceId}/permissions/{permissionId}": { + "delete": { + "description": "Removes the permission with the given permissionId for the data source with the given id.\n\nYou need to have a permission with action `datasources.permissions:delete` and scopes `datasources:*`, `datasources:id:*`, `datasources:id:1` (single data source).\n\nDeprecated: true.\nDeprecated. Please use POST /api/access-control/datasources/:uid/users/:id, /api/access-control/datasources/:uid/teams/:id or /api/access-control/datasources/:uid/buildInRoles/:id", + "tags": [ + "datasource_permissions", + "enterprise" + ], + "summary": "Remove permission for a data source.", + "operationId": "deletePermissions", + "parameters": [ + { + "type": "string", + "name": "datasourceId", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "permissionId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/okResponse" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + } + } + } + }, + "/licensing/check": { + "get": { + "tags": [ + "licensing", + "enterprise" + ], + "summary": "Check license availability.", + "operationId": "getStatus", + "responses": { + "200": { + "$ref": "#/responses/getStatusResponse" + } + } + } + }, + "/licensing/custom-permissions": { + "get": { + "description": "You need to have a permission with action `licensing.reports:read`.", + "tags": [ + "licensing", + "enterprise" + ], + "summary": "Get custom permissions report.", + "operationId": "getCustomPermissionsReport", + "responses": { + "200": { + "$ref": "#/responses/getCustomPermissionsReportResponse" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/licensing/custom-permissions-csv": { + "get": { + "description": "You need to have a permission with action `licensing.reports:read`.", + "produces": [ + "text/csv" + ], + "tags": [ + "licensing", + "enterprise" + ], + "summary": "Get custom permissions report in CSV format.", + "operationId": "getCustomPermissionsCSV", + "responses": { + "200": { + "$ref": "#/responses/getCustomPermissionsReportResponse" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/licensing/refresh-stats": { + "get": { + "description": "You need to have a permission with action `licensing:read`.", + "tags": [ + "licensing", + "enterprise" + ], + "summary": "Refresh license stats.", + "operationId": "refreshLicenseStats", + "responses": { + "200": { + "$ref": "#/responses/refreshLicenseStatsResponse" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/licensing/token": { + "get": { + "description": "You need to have a permission with action `licensing:read`.", + "tags": [ + "licensing", + "enterprise" + ], + "summary": "Get license token.", + "operationId": "getLicenseToken", + "responses": { + "200": { + "$ref": "#/responses/getLicenseTokenResponse" + } + } + }, + "post": { + "description": "You need to have a permission with action `licensing:update`.", + "tags": [ + "licensing", + "enterprise" + ], + "summary": "Create license token.", + "operationId": "postLicenseToken", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteTokenCommand" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/getLicenseTokenResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + } + } + }, + "delete": { + "description": "Removes the license stored in the Grafana database. Available in Grafana Enterprise v7.4+.\n\nYou need to have a permission with action `licensing:delete`.", + "tags": [ + "licensing", + "enterprise" + ], + "summary": "Remove license from database.", + "operationId": "deleteLicenseToken", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteTokenCommand" + } + } + ], + "responses": { + "202": { + "$ref": "#/responses/acceptedResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "422": { + "$ref": "#/responses/unprocessableEntityError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/licensing/token/renew": { + "post": { + "description": "Manually ask license issuer for a new token. Available in Grafana Enterprise v7.4+.\n\nYou need to have a permission with action `licensing:update`.", + "tags": [ + "licensing", + "enterprise" + ], + "summary": "Manually force license refresh.", + "operationId": "postRenewLicenseToken", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/postRenewLicenseTokenResponse" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "404": { + "$ref": "#/responses/notFoundError" + } + } + } + }, + "/logout/saml": { + "get": { + "tags": [ + "saml", + "enterprise" + ], + "summary": "GetLogout initiates single logout process.", + "operationId": "getSAMLLogout", + "responses": { + "302": { + "description": "" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/recording-rules": { + "get": { + "tags": [ + "recording_rules", + "enterprise" + ], + "summary": "Lists all rules in the database: active or deleted.", + "operationId": "listRecordingRules", + "responses": { + "200": { + "$ref": "#/responses/listRecordingRulesResponse" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + }, + "put": { + "tags": [ + "recording_rules", + "enterprise" + ], + "summary": "Update the active status of a rule.", + "operationId": "updateRecordingRule", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/RecordingRuleJSON" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/recordingRuleResponse" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + }, + "post": { + "tags": [ + "recording_rules", + "enterprise" + ], + "summary": "Create a recording rule that is then registered and started.", + "operationId": "createRecordingRule", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/RecordingRuleJSON" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/recordingRuleResponse" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/recording-rules/test": { + "post": { + "tags": [ + "recording_rules", + "enterprise" + ], + "summary": "Test a recording rule.", + "operationId": "testCreateRecordingRule", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/RecordingRuleJSON" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/okResponse" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "422": { + "$ref": "#/responses/unprocessableEntityError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/recording-rules/writer": { + "get": { + "tags": [ + "recording_rules", + "enterprise" + ], + "summary": "Return the prometheus remote write target.", + "operationId": "getRecordingRuleWriteTarget", + "responses": { + "200": { + "$ref": "#/responses/recordingRuleWriteTargetResponse" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + }, + "post": { + "description": "It returns a 422 if there is not an existing prometheus data source configured.", + "tags": [ + "recording_rules", + "enterprise" + ], + "summary": "Create a remote write target.", + "operationId": "createRecordingRuleWriteTarget", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/PrometheusRemoteWriteTargetJSON" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/recordingRuleWriteTargetResponse" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "422": { + "$ref": "#/responses/unprocessableEntityError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + }, + "delete": { + "tags": [ + "recording_rules", + "enterprise" + ], + "summary": "Delete the remote write target.", + "operationId": "deleteRecordingRuleWriteTarget", + "responses": { + "200": { + "$ref": "#/responses/okResponse" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/recording-rules/{recordingRuleID}": { + "delete": { + "tags": [ + "recording_rules", + "enterprise" + ], + "summary": "Delete removes the rule from the registry and stops it.", + "operationId": "deleteRecordingRule", + "parameters": [ + { + "type": "integer", + "format": "int64", + "name": "recordingRuleID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/okResponse" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/reports": { + "get": { + "description": "Available to org admins only and with a valid or expired license.\n\nYou need to have a permission with action `reports:read` with scope `reports:*`.", + "tags": [ + "reports", + "enterprise" + ], + "summary": "List reports.", + "operationId": "getReports", + "responses": { + "200": { + "$ref": "#/responses/getReportsResponse" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + }, + "post": { + "description": "Available to org admins only and with a valid license.\n\nYou need to have a permission with action `reports.admin:create`.", + "tags": [ + "reports", + "enterprise" + ], + "summary": "Create a report.", + "operationId": "createReport", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateOrUpdateConfigCmd" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/createReportResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/reports/email": { + "post": { + "description": "Generate and send a report. This API waits for the report to be generated before returning. We recommend that you set the client’s timeout to at least 60 seconds. Available to org admins only and with a valid license.\n\nOnly available in Grafana Enterprise v7.0+.\nThis API endpoint is experimental and may be deprecated in a future release. On deprecation, a migration strategy will be provided and the endpoint will remain functional until the next major release of Grafana.\n\nYou need to have a permission with action `reports:send`.", + "tags": [ + "reports", + "enterprise" + ], + "summary": "Send a report.", + "operationId": "sendReport", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ReportEmailDTO" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/okResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/reports/render/pdf/{dashboardID}": { + "get": { + "description": "Please refer to [reports enterprise](#/reports/renderReportPDFs) instead. This will be removed in Grafana 10.", + "produces": [ + "application/pdf" + ], + "tags": [ + "reports", + "enterprise" + ], + "summary": "Render report for dashboard.", + "operationId": "renderReportPDF", + "deprecated": true, + "parameters": [ + { + "type": "integer", + "format": "int64", + "name": "DashboardID", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "name": "dashboardID", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "title", + "in": "query" + }, + { + "type": "string", + "name": "variables", + "in": "query" + }, + { + "type": "string", + "name": "from", + "in": "query" + }, + { + "type": "string", + "name": "to", + "in": "query" + }, + { + "type": "string", + "name": "orientation", + "in": "query" + }, + { + "type": "string", + "name": "layout", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/contentResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/reports/render/pdfs": { + "get": { + "description": "Available to all users and with a valid license.", + "produces": [ + "application/pdf" + ], + "tags": [ + "reports", + "enterprise" + ], + "summary": "Render report for multiple dashboards.", + "operationId": "renderReportPDFs", + "parameters": [ + { + "type": "string", + "name": "dashboardID", + "in": "query" + }, + { + "type": "string", + "name": "orientation", + "in": "query" + }, + { + "type": "string", + "name": "layout", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/contentResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/reports/settings": { + "get": { + "description": "Available to org admins only and with a valid or expired license.\n\nYou need to have a permission with action `reports.settings:read`x.", + "tags": [ + "reports", + "enterprise" + ], + "summary": "Get settings.", + "operationId": "getReportSettings", + "responses": { + "200": { + "$ref": "#/responses/getReportSettingsResponse" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + }, + "post": { + "description": "Available to org admins only and with a valid or expired license.\n\nYou need to have a permission with action `reports.settings:write`xx.", + "tags": [ + "reports", + "enterprise" + ], + "summary": "Save settings.", + "operationId": "saveReportSettings", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/SettingsDTO" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/okResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/reports/test-email": { + "post": { + "description": "Available to org admins only and with a valid license.\n\nYou need to have a permission with action `reports:send`.", + "tags": [ + "reports", + "enterprise" + ], + "summary": "Send test report via email.", + "operationId": "sendTestEmail", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateOrUpdateConfigCmd" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/okResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/reports/{id}": { + "get": { + "description": "Available to org admins only and with a valid or expired license.\n\nYou need to have a permission with action `reports:read` with scope `reports:id:\u003creport ID\u003e`.", + "tags": [ + "reports", + "enterprise" + ], + "summary": "Get a report.", + "operationId": "getReport", + "parameters": [ + { + "type": "integer", + "format": "int64", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/getReportResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + }, + "put": { + "description": "Available to org admins only and with a valid or expired license.\n\nYou need to have a permission with action `reports.admin:write` with scope `reports:id:\u003creport ID\u003e`.", + "tags": [ + "reports", + "enterprise" + ], + "summary": "Update a report.", + "operationId": "updateReport", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateOrUpdateConfigCmd" + } + }, + { + "type": "integer", + "format": "int64", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/okResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + }, + "delete": { + "description": "Available to org admins only and with a valid or expired license.\n\nYou need to have a permission with action `reports.delete` with scope `reports:id:\u003creport ID\u003e`.", + "tags": [ + "reports", + "enterprise" + ], + "summary": "Delete a report.", + "operationId": "deleteReport", + "parameters": [ + { + "type": "integer", + "format": "int64", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/okResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/saml/acs": { + "post": { + "tags": [ + "saml", + "enterprise" + ], + "summary": "It performs Assertion Consumer Service (ACS).", + "operationId": "postACS", + "parameters": [ + { + "type": "string", + "name": "RelayState", + "in": "query" + } + ], + "responses": { + "302": { + "description": "" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/saml/metadata": { + "get": { + "produces": [ + "application/xml;application/samlmetadata+xml" + ], + "tags": [ + "saml", + "enterprise" + ], + "summary": "It exposes the SP (Grafana's) metadata for the IdP's consumption.", + "operationId": "getMetadata", + "responses": { + "200": { + "$ref": "#/responses/contentResponse" + } + } + } + }, + "/saml/slo": { + "get": { + "description": "There might be two possible requests:\n1. Logout response (callback) when Grafana initiates single logout and IdP returns response to logout request.\n2. Logout request when another SP initiates single logout and IdP sends logout request to the Grafana,\nor in case of IdP-initiated logout.", + "tags": [ + "saml", + "enterprise" + ], + "summary": "It performs Single Logout (SLO) callback.", + "operationId": "getSLO", + "responses": { + "302": { + "description": "" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + }, + "post": { + "description": "There might be two possible requests:\n1. Logout response (callback) when Grafana initiates single logout and IdP returns response to logout request.\n2. Logout request when another SP initiates single logout and IdP sends logout request to the Grafana,\nor in case of IdP-initiated logout.", + "tags": [ + "saml", + "enterprise" + ], + "summary": "It performs Single Logout (SLO) callback.", + "operationId": "postSLO", + "parameters": [ + { + "type": "string", + "name": "SAMLRequest", + "in": "query" + }, + { + "type": "string", + "name": "SAMLResponse", + "in": "query" + } + ], + "responses": { + "302": { + "description": "" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/teams/{teamId}/groups": { + "get": { + "tags": [ + "sync_team_groups", + "enterprise" + ], + "summary": "Get External Groups.", + "operationId": "getTeamGroupsApi", + "parameters": [ + { + "type": "integer", + "format": "int64", + "name": "teamId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/getTeamGroupsApiResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + }, + "post": { + "tags": [ + "sync_team_groups", + "enterprise" + ], + "summary": "Add External Group.", + "operationId": "addTeamGroupApi", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/TeamGroupMapping" + } + }, + { + "type": "integer", + "format": "int64", + "name": "teamId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/okResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + }, + "delete": { + "tags": [ + "sync_team_groups", + "enterprise" + ], + "summary": "Remove External Group.", + "operationId": "removeTeamGroupApiQuery", + "parameters": [ + { + "type": "string", + "name": "groupId", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "name": "teamId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/okResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + }, + "/teams/{teamId}/groups/{groupId}": { + "delete": { + "tags": [ + "sync_team_groups", + "enterprise" + ], + "summary": "Remove External Group.", + "operationId": "removeTeamGroupApi", + "deprecated": true, + "parameters": [ + { + "type": "string", + "name": "groupId", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "name": "teamId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/okResponse" + }, + "400": { + "$ref": "#/responses/badRequestError" + }, + "401": { + "$ref": "#/responses/unauthorisedError" + }, + "403": { + "$ref": "#/responses/forbiddenError" + }, + "404": { + "$ref": "#/responses/notFoundError" + }, + "500": { + "$ref": "#/responses/internalServerError" + } + } + } + } + }, + "definitions": { + "ActiveSyncStatusDTO": { + "description": "ActiveSyncStatusDTO holds the information for LDAP background Sync", + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "nextSync": { + "type": "string", + "format": "date-time" + }, + "prevSync": { + "$ref": "#/definitions/SyncResult" + }, + "schedule": { + "type": "string" + } + } + }, + "ActiveUserStats": { + "type": "object", + "properties": { + "active_admins_and_editors": { + "type": "integer", + "format": "int64" + }, + "active_users": { + "type": "integer", + "format": "int64" + }, + "active_viewers": { + "type": "integer", + "format": "int64" + } + } + }, + "AddCommand": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "role": { + "type": "string", + "enum": [ + "None", + "Viewer", + "Editor", + "Admin" + ] + }, + "secondsToLive": { + "type": "integer", + "format": "int64" + } + } + }, + "AddDataSourceCommand": { + "description": "Also acts as api DTO", + "type": "object", + "properties": { + "access": { + "$ref": "#/definitions/DsAccess" + }, + "basicAuth": { + "type": "boolean" + }, + "basicAuthUser": { + "type": "string" + }, + "database": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "jsonData": { + "$ref": "#/definitions/Json" + }, + "name": { + "type": "string" + }, + "secureJsonData": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "url": { + "type": "string" + }, + "user": { + "type": "string" + }, + "withCredentials": { + "type": "boolean" + } + } + }, + "AddInviteForm": { + "type": "object", + "properties": { + "loginOrEmail": { + "type": "string" + }, + "name": { + "type": "string" + }, + "role": { + "type": "string", + "enum": [ + "None", + "Viewer", + "Editor", + "Admin" + ] + }, + "sendEmail": { + "type": "boolean" + } + } + }, + "AddOrgUserCommand": { + "type": "object", + "properties": { + "loginOrEmail": { + "type": "string" + }, + "role": { + "type": "string", + "enum": [ + "None", + "Viewer", + "Editor", + "Admin" + ] + } + } + }, + "AddPermissionDTO": { + "type": "object", + "properties": { + "builtinRole": { + "type": "string" + }, + "permission": { + "$ref": "#/definitions/DsPermissionType" + }, + "teamId": { + "type": "integer", + "format": "int64" + }, + "userId": { + "type": "integer", + "format": "int64" + } + } + }, + "AddServiceAccountTokenCommand": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "secondsToLive": { + "type": "integer", + "format": "int64" + } + } + }, + "AddTeamMemberCommand": { + "type": "object", + "properties": { + "userId": { + "type": "integer", + "format": "int64" + } + } + }, + "AddTeamRoleCommand": { + "type": "object", + "properties": { + "roleUid": { + "type": "string" + } + } + }, + "AddUserRoleCommand": { + "type": "object", + "properties": { + "global": { + "type": "boolean" + }, + "roleUid": { + "type": "string" + } + } + }, + "Address": { + "type": "object", + "properties": { + "address1": { + "type": "string" + }, + "address2": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "state": { + "type": "string" + }, + "zipCode": { + "type": "string" + } + } + }, + "AdminCreateUserForm": { + "type": "object", + "properties": { + "email": { + "type": "string" + }, + "login": { + "type": "string" + }, + "name": { + "type": "string" + }, + "orgId": { + "type": "integer", + "format": "int64" + }, + "password": { + "type": "string" + } + } + }, + "AdminCreateUserResponse": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "message": { + "type": "string" + } + } + }, + "AdminStats": { + "type": "object", + "properties": { + "activeAdmins": { + "type": "integer", + "format": "int64" + }, + "activeEditors": { + "type": "integer", + "format": "int64" + }, + "activeSessions": { + "type": "integer", + "format": "int64" + }, + "activeUsers": { + "type": "integer", + "format": "int64" + }, + "activeViewers": { + "type": "integer", + "format": "int64" + }, + "admins": { + "type": "integer", + "format": "int64" + }, + "alerts": { + "type": "integer", + "format": "int64" + }, + "dailyActiveAdmins": { + "type": "integer", + "format": "int64" + }, + "dailyActiveEditors": { + "type": "integer", + "format": "int64" + }, + "dailyActiveSessions": { + "type": "integer", + "format": "int64" + }, + "dailyActiveUsers": { + "type": "integer", + "format": "int64" + }, + "dailyActiveViewers": { + "type": "integer", + "format": "int64" + }, + "dashboards": { + "type": "integer", + "format": "int64" + }, + "datasources": { + "type": "integer", + "format": "int64" + }, + "editors": { + "type": "integer", + "format": "int64" + }, + "monthlyActiveUsers": { + "type": "integer", + "format": "int64" + }, + "orgs": { + "type": "integer", + "format": "int64" + }, + "playlists": { + "type": "integer", + "format": "int64" + }, + "snapshots": { + "type": "integer", + "format": "int64" + }, + "stars": { + "type": "integer", + "format": "int64" + }, + "tags": { + "type": "integer", + "format": "int64" + }, + "users": { + "type": "integer", + "format": "int64" + }, + "viewers": { + "type": "integer", + "format": "int64" + } + } + }, + "AdminUpdateUserPasswordForm": { + "type": "object", + "properties": { + "password": { + "type": "string" + } + } + }, + "AdminUpdateUserPermissionsForm": { + "type": "object", + "properties": { + "isGrafanaAdmin": { + "type": "boolean" + } + } + }, + "AlertListItemDTO": { + "type": "object", + "properties": { + "dashboardId": { + "type": "integer", + "format": "int64" + }, + "dashboardSlug": { + "type": "string" + }, + "dashboardUid": { + "type": "string" + }, + "evalData": { + "$ref": "#/definitions/Json" + }, + "evalDate": { + "type": "string", + "format": "date-time" + }, + "executionError": { + "type": "string" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "newStateDate": { + "type": "string", + "format": "date-time" + }, + "panelId": { + "type": "integer", + "format": "int64" + }, + "state": { + "$ref": "#/definitions/AlertStateType" + }, + "url": { + "type": "string" + } + } + }, + "AlertNotification": { + "type": "object", + "properties": { + "created": { + "type": "string", + "format": "date-time" + }, + "disableResolveMessage": { + "type": "boolean" + }, + "frequency": { + "type": "string" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "isDefault": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "secureFields": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "sendReminder": { + "type": "boolean" + }, + "settings": { + "$ref": "#/definitions/Json" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "updated": { + "type": "string", + "format": "date-time" + } + } + }, + "AlertNotificationLookup": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "isDefault": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "AlertStateInfoDTO": { + "type": "object", + "properties": { + "dashboardId": { + "type": "integer", + "format": "int64" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "newStateDate": { + "type": "string", + "format": "date-time" + }, + "panelId": { + "type": "integer", + "format": "int64" + }, + "state": { + "$ref": "#/definitions/AlertStateType" + } + } + }, + "AlertStateType": { + "type": "string" + }, + "AlertTestCommand": { + "type": "object", + "properties": { + "dashboard": { + "$ref": "#/definitions/Json" + }, + "panelId": { + "type": "integer", + "format": "int64" + } + } + }, + "AlertTestResult": { + "type": "object", + "properties": { + "conditionEvals": { + "type": "string" + }, + "error": { + "type": "string" + }, + "firing": { + "type": "boolean" + }, + "logs": { + "type": "array", + "items": { + "$ref": "#/definitions/AlertTestResultLog" + } + }, + "matches": { + "type": "array", + "items": { + "$ref": "#/definitions/EvalMatch" + } + }, + "state": { + "$ref": "#/definitions/AlertStateType" + }, + "timeMs": { + "type": "string" + } + } + }, + "AlertTestResultLog": { + "type": "object", + "properties": { + "data": {}, + "message": { + "type": "string" + } + } + }, + "AnnotationActions": { + "type": "object", + "properties": { + "canAdd": { + "type": "boolean" + }, + "canDelete": { + "type": "boolean" + }, + "canEdit": { + "type": "boolean" + } + } + }, + "AnnotationPermission": { + "type": "object", + "properties": { + "dashboard": { + "$ref": "#/definitions/AnnotationActions" + }, + "organization": { + "$ref": "#/definitions/AnnotationActions" + } + } + }, + "ApiKeyDTO": { + "type": "object", + "properties": { + "accessControl": { + "$ref": "#/definitions/Metadata" + }, + "expiration": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "lastUsedAt": { + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "role": { + "type": "string", + "enum": [ + "None", + "Viewer", + "Editor", + "Admin" + ] + } + } + }, + "BrandingOptionsDTO": { + "type": "object", + "properties": { + "emailFooterLink": { + "type": "string" + }, + "emailFooterMode": { + "type": "string" + }, + "emailFooterText": { + "type": "string" + }, + "emailLogoUrl": { + "type": "string" + }, + "reportLogoUrl": { + "type": "string" + } + } + }, + "CalculateDiffTarget": { + "type": "object", + "properties": { + "dashboardId": { + "type": "integer", + "format": "int64" + }, + "unsavedDashboard": { + "$ref": "#/definitions/Json" + }, + "version": { + "type": "integer", + "format": "int64" + } + } + }, + "ChangeUserPasswordCommand": { + "type": "object", + "properties": { + "newPassword": { + "type": "string" + }, + "oldPassword": { + "type": "string" + } + } + }, + "ConfFloat64": { + "description": "ConfFloat64 is a float64. It Marshals float64 values of NaN of Inf\nto null.", + "type": "number", + "format": "double" + }, + "ConfigDTO": { + "description": "ConfigDTO is model representation in transfer", + "type": "object", + "properties": { + "created": { + "type": "string", + "format": "date-time" + }, + "dashboardId": { + "type": "integer", + "format": "int64" + }, + "dashboardName": { + "type": "string" + }, + "dashboardUid": { + "type": "string" + }, + "dashboards": { + "type": "array", + "items": { + "$ref": "#/definitions/DashboardDTO" + } + }, + "enableCsv": { + "type": "boolean" + }, + "enableDashboardUrl": { + "type": "boolean" + }, + "formats": { + "type": "array", + "items": { + "$ref": "#/definitions/Type" + } + }, + "id": { + "type": "integer", + "format": "int64" + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "options": { + "$ref": "#/definitions/ReportOptionsDTO" + }, + "orgId": { + "type": "integer", + "format": "int64" + }, + "recipients": { + "type": "string" + }, + "replyTo": { + "type": "string" + }, + "scaleFactor": { + "type": "integer", + "format": "int64" + }, + "schedule": { + "$ref": "#/definitions/ScheduleDTO" + }, + "state": { + "$ref": "#/definitions/State" + }, + "templateVars": { + "type": "object" + }, + "updated": { + "type": "string", + "format": "date-time" + }, + "userId": { + "type": "integer", + "format": "int64" + } + } + }, + "CookiePreferences": { + "type": "object", + "title": "CookiePreferences defines model for CookiePreferences.", + "properties": { + "analytics": { + "type": "object", + "additionalProperties": {} + }, + "functional": { + "type": "object", + "additionalProperties": {} + }, + "performance": { + "type": "object", + "additionalProperties": {} + } + } + }, + "CookieType": { + "type": "string" + }, + "Correlation": { + "description": "Correlation is the model for correlations definitions", + "type": "object", + "properties": { + "config": { + "$ref": "#/definitions/CorrelationConfig" + }, + "description": { + "description": "Description of the correlation", + "type": "string", + "example": "Logs to Traces" + }, + "label": { + "description": "Label identifying the correlation", + "type": "string", + "example": "My Label" + }, + "orgId": { + "description": "OrgID of the data source the correlation originates from", + "type": "integer", + "format": "int64", + "example": 1 + }, + "provisioned": { + "description": "Provisioned True if the correlation was created during provisioning", + "type": "boolean" + }, + "sourceUID": { + "description": "UID of the data source the correlation originates from", + "type": "string", + "example": "d0oxYRg4z" + }, + "targetUID": { + "description": "UID of the data source the correlation points to", + "type": "string", + "example": "PE1C5CBDA0504A6A3" + }, + "uid": { + "description": "Unique identifier of the correlation", + "type": "string", + "example": "50xhMlg9k" + } + } + }, + "CorrelationConfig": { + "type": "object", + "required": [ + "field", + "type", + "target" + ], + "properties": { + "field": { + "description": "Field used to attach the correlation link", + "type": "string", + "example": "message" + }, + "target": { + "description": "Target data query", + "type": "object", + "additionalProperties": {}, + "example": { + "prop1": "value1", + "prop2": "value" + } + }, + "transformations": { + "$ref": "#/definitions/Transformations" + }, + "type": { + "$ref": "#/definitions/CorrelationConfigType" + } + } + }, + "CorrelationConfigType": { + "type": "string" + }, + "CorrelationConfigUpdateDTO": { + "type": "object", + "properties": { + "field": { + "description": "Field used to attach the correlation link", + "type": "string", + "example": "message" + }, + "target": { + "description": "Target data query", + "type": "object", + "additionalProperties": {}, + "example": { + "prop1": "value1", + "prop2": "value" + } + }, + "transformations": { + "description": "Source data transformations", + "type": "array", + "items": { + "$ref": "#/definitions/Transformation" + }, + "example": [ + { + "type": "logfmt" + }, + { + "expression": "(Superman|Batman)", + "type": "regex", + "variable": "name" + } + ] + }, + "type": { + "$ref": "#/definitions/CorrelationConfigType" + } + } + }, + "CreateAlertNotificationCommand": { + "type": "object", + "properties": { + "disableResolveMessage": { + "type": "boolean" + }, + "frequency": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "secureSettings": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "sendReminder": { + "type": "boolean" + }, + "settings": { + "$ref": "#/definitions/Json" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "CreateCorrelationCommand": { + "description": "CreateCorrelationCommand is the command for creating a correlation", + "type": "object", + "properties": { + "config": { + "$ref": "#/definitions/CorrelationConfig" + }, + "description": { + "description": "Optional description of the correlation", + "type": "string", + "example": "Logs to Traces" + }, + "label": { + "description": "Optional label identifying the correlation", + "type": "string", + "example": "My label" + }, + "provisioned": { + "description": "True if correlation was created with provisioning. This makes it read-only.", + "type": "boolean" + }, + "targetUID": { + "description": "Target data source UID to which the correlation is created. required if config.type = query", + "type": "string", + "example": "PE1C5CBDA0504A6A3" + } + } + }, + "CreateCorrelationResponseBody": { + "description": "CreateCorrelationResponse is the response struct for CreateCorrelationCommand", + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "Correlation created" + }, + "result": { + "$ref": "#/definitions/Correlation" + } + } + }, + "CreateDashboardSnapshotCommand": { + "type": "object", + "required": [ + "dashboard" + ], + "properties": { + "dashboard": { + "$ref": "#/definitions/Json" + }, + "deleteKey": { + "description": "Unique key used to delete the snapshot. It is different from the `key` so that only the creator can delete the snapshot. Required if `external` is `true`.", + "type": "string" + }, + "expires": { + "description": "When the snapshot should expire in seconds in seconds. Default is never to expire.", + "type": "integer", + "format": "int64", + "default": 0 + }, + "external": { + "description": "these are passed when storing an external snapshot ref\nSave the snapshot on an external server rather than locally.", + "type": "boolean", + "default": false + }, + "key": { + "description": "Define the unique key. Required if `external` is `true`.", + "type": "string" + }, + "name": { + "description": "Snapshot name", + "type": "string" + } + } + }, + "CreateFolderCommand": { + "description": "CreateFolderCommand captures the information required by the folder service\nto create a folder.", + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "parentUid": { + "type": "string" + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "CreateLibraryElementCommand": { + "description": "CreateLibraryElementCommand is the command for adding a LibraryElement", + "type": "object", + "properties": { + "folderId": { + "description": "ID of the folder where the library element is stored.", + "type": "integer", + "format": "int64" + }, + "folderUid": { + "description": "UID of the folder where the library element is stored.", + "type": "string" + }, + "kind": { + "description": "Kind of element to create, Use 1 for library panels or 2 for c.\nDescription:\n1 - library panels\n2 - library variables", + "type": "integer", + "format": "int64", + "enum": [ + 1, + 2 + ] + }, + "model": { + "description": "The JSON model for the library element.", + "type": "object" + }, + "name": { + "description": "Name of the library element.", + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "CreateOrUpdateConfigCmd": { + "type": "object", + "properties": { + "dashboardId": { + "type": "integer", + "format": "int64" + }, + "dashboardUid": { + "type": "string" + }, + "dashboards": { + "type": "array", + "items": { + "$ref": "#/definitions/DashboardDTO" + } + }, + "enableCsv": { + "type": "boolean" + }, + "enableDashboardUrl": { + "type": "boolean" + }, + "formats": { + "type": "array", + "items": { + "$ref": "#/definitions/Type" + } + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "options": { + "$ref": "#/definitions/ReportOptionsDTO" + }, + "recipients": { + "type": "string" + }, + "replyTo": { + "type": "string" + }, + "scaleFactor": { + "type": "integer", + "format": "int64" + }, + "schedule": { + "$ref": "#/definitions/ScheduleDTO" + }, + "state": { + "$ref": "#/definitions/State" + }, + "templateVars": { + "type": "object" + } + } + }, + "CreateOrgCommand": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, + "CreatePlaylistCommand": { + "type": "object", + "properties": { + "interval": { + "type": "string" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/PlaylistItem" + } + }, + "name": { + "type": "string" + } + } + }, + "CreateQueryInQueryHistoryCommand": { + "description": "CreateQueryInQueryHistoryCommand is the command for adding query history", + "type": "object", + "required": [ + "queries" + ], + "properties": { + "datasourceUid": { + "description": "UID of the data source for which are queries stored.", + "type": "string", + "example": "PE1C5CBDA0504A6A3" + }, + "queries": { + "$ref": "#/definitions/Json" + } + } + }, + "CreateRoleForm": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "displayName": { + "type": "string" + }, + "global": { + "type": "boolean" + }, + "group": { + "type": "string" + }, + "hidden": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "permissions": { + "type": "array", + "items": { + "$ref": "#/definitions/Permission" + } + }, + "uid": { + "type": "string" + }, + "version": { + "type": "integer", + "format": "int64" + } + } + }, + "CreateServiceAccountForm": { + "type": "object", + "properties": { + "isDisabled": { + "type": "boolean", + "example": false + }, + "name": { + "type": "string", + "example": "grafana" + }, + "role": { + "type": "string", + "enum": [ + "None", + "Viewer", + "Editor", + "Admin" + ], + "example": "Admin" + } + } + }, + "CreateTeamCommand": { + "type": "object", + "properties": { + "email": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "CustomPermissionsRecordDTO": { + "type": "object", + "properties": { + "customPermissions": { + "type": "string" + }, + "granteeName": { + "type": "string" + }, + "granteeType": { + "type": "string" + }, + "granteeUrl": { + "type": "string" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "isFolder": { + "type": "boolean" + }, + "orgId": { + "type": "integer", + "format": "int64" + }, + "orgRole": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "url": { + "type": "string" + }, + "usersCount": { + "type": "integer", + "format": "int64" + } + } + }, + "DashboardACLInfoDTO": { + "type": "object", + "properties": { + "created": { + "type": "string", + "format": "date-time" + }, + "dashboardId": { + "type": "integer", + "format": "int64" + }, + "folderId": { + "type": "integer", + "format": "int64" + }, + "folderUid": { + "type": "string" + }, + "inherited": { + "type": "boolean" + }, + "isFolder": { + "type": "boolean" + }, + "permission": { + "$ref": "#/definitions/PermissionType" + }, + "permissionName": { + "type": "string" + }, + "role": { + "type": "string", + "enum": [ + "None", + "Viewer", + "Editor", + "Admin" + ] + }, + "slug": { + "type": "string" + }, + "team": { + "type": "string" + }, + "teamAvatarUrl": { + "type": "string" + }, + "teamEmail": { + "type": "string" + }, + "teamId": { + "type": "integer", + "format": "int64" + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "updated": { + "type": "string", + "format": "date-time" + }, + "url": { + "type": "string" + }, + "userAvatarUrl": { + "type": "string" + }, + "userEmail": { + "type": "string" + }, + "userId": { + "type": "integer", + "format": "int64" + }, + "userLogin": { + "type": "string" + } + } + }, + "DashboardACLUpdateItem": { + "type": "object", + "properties": { + "permission": { + "$ref": "#/definitions/PermissionType" + }, + "role": { + "type": "string", + "enum": [ + "None", + "Viewer", + "Editor", + "Admin" + ] + }, + "teamId": { + "type": "integer", + "format": "int64" + }, + "userId": { + "type": "integer", + "format": "int64" + } + } + }, + "DashboardDTO": { + "type": "object", + "properties": { + "dashboard": { + "$ref": "#/definitions/DashboardReportDTO" + }, + "reportVariables": { + "type": "object" + }, + "timeRange": { + "$ref": "#/definitions/TimeRangeDTO" + } + } + }, + "DashboardFullWithMeta": { + "type": "object", + "properties": { + "dashboard": { + "$ref": "#/definitions/Json" + }, + "meta": { + "$ref": "#/definitions/DashboardMeta" + } + } + }, + "DashboardMeta": { + "type": "object", + "properties": { + "annotationsPermissions": { + "$ref": "#/definitions/AnnotationPermission" + }, + "canAdmin": { + "type": "boolean" + }, + "canDelete": { + "type": "boolean" + }, + "canEdit": { + "type": "boolean" + }, + "canSave": { + "type": "boolean" + }, + "canStar": { + "type": "boolean" + }, + "created": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "string" + }, + "expires": { + "type": "string", + "format": "date-time" + }, + "folderId": { + "type": "integer", + "format": "int64" + }, + "folderTitle": { + "type": "string" + }, + "folderUid": { + "type": "string" + }, + "folderUrl": { + "type": "string" + }, + "hasAcl": { + "type": "boolean" + }, + "isFolder": { + "type": "boolean" + }, + "isSnapshot": { + "type": "boolean" + }, + "isStarred": { + "type": "boolean" + }, + "provisioned": { + "type": "boolean" + }, + "provisionedExternalId": { + "type": "string" + }, + "publicDashboardEnabled": { + "type": "boolean" + }, + "publicDashboardUid": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "type": { + "type": "string" + }, + "updated": { + "type": "string", + "format": "date-time" + }, + "updatedBy": { + "type": "string" + }, + "url": { + "type": "string" + }, + "version": { + "type": "integer", + "format": "int64" + } + } + }, + "DashboardRedirect": { + "type": "object", + "properties": { + "redirectUri": { + "type": "string" + } + } + }, + "DashboardReportDTO": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "DashboardSnapshotDTO": { + "description": "DashboardSnapshotDTO without dashboard map", + "type": "object", + "properties": { + "created": { + "type": "string", + "format": "date-time" + }, + "expires": { + "type": "string", + "format": "date-time" + }, + "external": { + "type": "boolean" + }, + "externalUrl": { + "type": "string" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "orgId": { + "type": "integer", + "format": "int64" + }, + "updated": { + "type": "string", + "format": "date-time" + }, + "userId": { + "type": "integer", + "format": "int64" + } + } + }, + "DashboardTagCloudItem": { + "type": "object", + "properties": { + "count": { + "type": "integer", + "format": "int64" + }, + "term": { + "type": "string" + } + } + }, + "DashboardVersionMeta": { + "description": "DashboardVersionMeta extends the DashboardVersionDTO with the names\nassociated with the UserIds, overriding the field with the same name from\nthe DashboardVersionDTO model.", + "type": "object", + "properties": { + "created": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "string" + }, + "dashboardId": { + "type": "integer", + "format": "int64" + }, + "data": { + "$ref": "#/definitions/Json" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "message": { + "type": "string" + }, + "parentVersion": { + "type": "integer", + "format": "int64" + }, + "restoredFrom": { + "type": "integer", + "format": "int64" + }, + "uid": { + "type": "string" + }, + "version": { + "type": "integer", + "format": "int64" + } + } + }, + "DataLink": { + "description": "DataLink define what", + "type": "object", + "properties": { + "internal": { + "$ref": "#/definitions/InternalDataLink" + }, + "targetBlank": { + "type": "boolean" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "DataResponse": { + "description": "A map of RefIDs (unique query identifiers) to this type makes up the Responses property of a QueryDataResponse.\nThe Error property is used to allow for partial success responses from the containing QueryDataResponse.", + "type": "object", + "title": "DataResponse contains the results from a DataQuery.", + "properties": { + "Error": { + "description": "Error is a property to be set if the corresponding DataQuery has an error.", + "type": "string" + }, + "Frames": { + "$ref": "#/definitions/Frames" + }, + "Status": { + "$ref": "#/definitions/Status" + } + } + }, + "DataSource": { + "type": "object", + "properties": { + "access": { + "$ref": "#/definitions/DsAccess" + }, + "accessControl": { + "$ref": "#/definitions/Metadata" + }, + "basicAuth": { + "type": "boolean" + }, + "basicAuthUser": { + "type": "string" + }, + "database": { + "type": "string" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "isDefault": { + "type": "boolean" + }, + "jsonData": { + "$ref": "#/definitions/Json" + }, + "name": { + "type": "string" + }, + "orgId": { + "type": "integer", + "format": "int64" + }, + "readOnly": { + "type": "boolean" + }, + "secureJsonFields": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "type": { + "type": "string" + }, + "typeLogoUrl": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "url": { + "type": "string" + }, + "user": { + "type": "string" + }, + "version": { + "type": "integer", + "format": "int64" + }, + "withCredentials": { + "type": "boolean" + } + } + }, + "DataSourceList": { + "type": "array", + "items": { + "$ref": "#/definitions/DataSourceListItemDTO" + } + }, + "DataSourceListItemDTO": { + "type": "object", + "properties": { + "access": { + "$ref": "#/definitions/DsAccess" + }, + "basicAuth": { + "type": "boolean" + }, + "database": { + "type": "string" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "isDefault": { + "type": "boolean" + }, + "jsonData": { + "$ref": "#/definitions/Json" + }, + "name": { + "type": "string" + }, + "orgId": { + "type": "integer", + "format": "int64" + }, + "readOnly": { + "type": "boolean" + }, + "type": { + "type": "string" + }, + "typeLogoUrl": { + "type": "string" + }, + "typeName": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "url": { + "type": "string" + }, + "user": { + "type": "string" + } + } + }, + "DataSourcePermissionRuleDTO": { + "type": "object", + "properties": { + "builtInRole": { + "type": "string" + }, + "created": { + "type": "string", + "format": "date-time" + }, + "datasourceId": { + "type": "integer", + "format": "int64" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "isManaged": { + "type": "boolean" + }, + "permission": { + "$ref": "#/definitions/DsPermissionType" + }, + "permissionName": { + "type": "string" + }, + "team": { + "type": "string" + }, + "teamAvatarUrl": { + "type": "string" + }, + "teamEmail": { + "type": "string" + }, + "teamId": { + "type": "integer", + "format": "int64" + }, + "updated": { + "type": "string", + "format": "date-time" + }, + "userAvatarUrl": { + "type": "string" + }, + "userEmail": { + "type": "string" + }, + "userId": { + "type": "integer", + "format": "int64" + }, + "userLogin": { + "type": "string" + } + } + }, + "DataSourcePermissionsDTO": { + "type": "object", + "properties": { + "datasourceId": { + "type": "integer", + "format": "int64" + }, + "enabled": { + "type": "boolean" + }, + "permissions": { + "type": "array", + "items": { + "$ref": "#/definitions/DataSourcePermissionRuleDTO" + } + } + } + }, + "DataTopic": { + "description": "nolint:revive", + "type": "string", + "title": "DataTopic is used to identify which topic the frame should be assigned to." + }, + "DeleteCorrelationResponseBody": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "Correlation deleted" + } + } + }, + "DeleteTokenCommand": { + "type": "object", + "properties": { + "instance": { + "type": "string" + } + } + }, + "DescendantCounts": { + "type": "object", + "additionalProperties": { + "type": "integer", + "format": "int64" + } + }, + "DsAccess": { + "type": "string" + }, + "DsPermissionType": { + "description": "Datasource permission\nDescription:\n`0` - No Access\n`1` - Query\n`2` - Edit\nEnum: 0,1,2", + "type": "integer", + "format": "int64" + }, + "Duration": { + "description": "A Duration represents the elapsed time between two instants\nas an int64 nanosecond count. The representation limits the\nlargest representable duration to approximately 290 years.", + "type": "integer", + "format": "int64" + }, + "EnumFieldConfig": { + "description": "Enum field config\nVector values are used as lookup keys into the enum fields", + "type": "object", + "properties": { + "color": { + "description": "Color is the color value for a given index (empty is undefined)", + "type": "array", + "items": { + "type": "string" + } + }, + "description": { + "description": "Description of the enum state", + "type": "array", + "items": { + "type": "string" + } + }, + "icon": { + "description": "Icon supports setting an icon for a given index value", + "type": "array", + "items": { + "type": "string" + } + }, + "text": { + "description": "Value is the string display value for a given index", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "ErrorResponseBody": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "error": { + "description": "Error An optional detailed description of the actual error. Only included if running in developer mode.", + "type": "string" + }, + "message": { + "description": "a human readable version of the error", + "type": "string" + }, + "status": { + "description": "Status An optional status to denote the cause of the error.\n\nFor example, a 412 Precondition Failed error may include additional information of why that error happened.", + "type": "string" + } + } + }, + "EvalMatch": { + "type": "object", + "properties": { + "metric": { + "type": "string" + }, + "tags": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "value": { + "type": "string" + } + } + }, + "ExplorePanelsState": { + "description": "This is an object constructed with the keys as the values of the enum VisType and the value being a bag of properties" + }, + "FailedUser": { + "description": "FailedUser holds the information of an user that failed", + "type": "object", + "properties": { + "Error": { + "type": "string" + }, + "Login": { + "type": "string" + } + } + }, + "Field": { + "description": "A Field is essentially a slice of various types with extra properties and methods.\nSee NewField() for supported types.\n\nThe slice data in the Field is a not exported, so methods on the Field are used to to manipulate its data.", + "type": "object", + "title": "Field represents a typed column of data within a Frame.", + "properties": { + "config": { + "$ref": "#/definitions/FieldConfig" + }, + "labels": { + "$ref": "#/definitions/FrameLabels" + }, + "name": { + "description": "Name is default identifier of the field. The name does not have to be unique, but the combination\nof name and Labels should be unique for proper behavior in all situations.", + "type": "string" + } + } + }, + "FieldConfig": { + "type": "object", + "title": "FieldConfig represents the display properties for a Field.", + "properties": { + "color": { + "description": "Map values to a display color\nNOTE: this interface is under development in the frontend... so simple map for now", + "type": "object", + "additionalProperties": {} + }, + "custom": { + "description": "Panel Specific Values", + "type": "object", + "additionalProperties": {} + }, + "decimals": { + "type": "integer", + "format": "uint16" + }, + "description": { + "description": "Description is human readable field metadata", + "type": "string" + }, + "displayName": { + "description": "DisplayName overrides Grafana default naming, should not be used from a data source", + "type": "string" + }, + "displayNameFromDS": { + "description": "DisplayNameFromDS overrides Grafana default naming strategy.", + "type": "string" + }, + "filterable": { + "description": "Filterable indicates if the Field's data can be filtered by additional calls.", + "type": "boolean" + }, + "interval": { + "description": "Interval indicates the expected regular step between values in the series.\nWhen an interval exists, consumers can identify \"missing\" values when the expected value is not present.\nThe grafana timeseries visualization will render disconnected values when missing values are found it the time field.\nThe interval uses the same units as the values. For time.Time, this is defined in milliseconds.", + "type": "number", + "format": "double" + }, + "links": { + "description": "The behavior when clicking on a result", + "type": "array", + "items": { + "$ref": "#/definitions/DataLink" + } + }, + "mappings": { + "$ref": "#/definitions/ValueMappings" + }, + "max": { + "$ref": "#/definitions/ConfFloat64" + }, + "min": { + "$ref": "#/definitions/ConfFloat64" + }, + "noValue": { + "description": "Alternative to empty string", + "type": "string" + }, + "path": { + "description": "Path is an explicit path to the field in the datasource. When the frame meta includes a path,\nthis will default to `${frame.meta.path}/${field.name}\n\nWhen defined, this value can be used as an identifier within the datasource scope, and\nmay be used as an identifier to update values in a subsequent request", + "type": "string" + }, + "thresholds": { + "$ref": "#/definitions/ThresholdsConfig" + }, + "type": { + "$ref": "#/definitions/FieldTypeConfig" + }, + "unit": { + "description": "Numeric Options", + "type": "string" + }, + "writeable": { + "description": "Writeable indicates that the datasource knows how to update this value", + "type": "boolean" + } + } + }, + "FieldTypeConfig": { + "description": "FieldTypeConfig has type specific configs, only one should be active at a time", + "type": "object", + "properties": { + "enum": { + "$ref": "#/definitions/EnumFieldConfig" + } + } + }, + "FindTagsResult": { + "type": "object", + "title": "FindTagsResult is the result of a tags search.", + "properties": { + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/TagsDTO" + } + } + } + }, + "Folder": { + "type": "object", + "properties": { + "accessControl": { + "$ref": "#/definitions/Metadata" + }, + "canAdmin": { + "type": "boolean" + }, + "canDelete": { + "type": "boolean" + }, + "canEdit": { + "type": "boolean" + }, + "canSave": { + "type": "boolean" + }, + "created": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "string" + }, + "hasAcl": { + "type": "boolean" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "parentUid": { + "description": "only used if nested folders are enabled", + "type": "string" + }, + "parents": { + "description": "the parent folders starting from the root going down", + "type": "array", + "items": { + "$ref": "#/definitions/Folder" + } + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "updated": { + "type": "string", + "format": "date-time" + }, + "updatedBy": { + "type": "string" + }, + "url": { + "type": "string" + }, + "version": { + "type": "integer", + "format": "int64" + } + } + }, + "FolderSearchHit": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "parentUid": { + "type": "string" + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "Frame": { + "description": "Each Field is well typed by its FieldType and supports optional Labels.\n\nA Frame is a general data container for Grafana. A Frame can be table data\nor time series data depending on its content and field types.", + "type": "object", + "title": "Frame is a columnar data structure where each column is a Field.", + "properties": { + "Fields": { + "description": "Fields are the columns of a frame.\nAll Fields must be of the same the length when marshalling the Frame for transmission.\nThere should be no `nil` entries in the Fields slice (making them pointers was a mistake).", + "type": "array", + "items": { + "$ref": "#/definitions/Field" + } + }, + "Meta": { + "$ref": "#/definitions/FrameMeta" + }, + "Name": { + "description": "Name is used in some Grafana visualizations.", + "type": "string" + }, + "RefID": { + "description": "RefID is a property that can be set to match a Frame to its originating query.", + "type": "string" + } + } + }, + "FrameLabels": { + "description": "Labels are used to add metadata to an object. The JSON will always be sorted keys", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "FrameMeta": { + "description": "https://github.com/grafana/grafana/blob/master/packages/grafana-data/src/types/data.ts#L11\nNOTE -- in javascript this can accept any `[key: string]: any;` however\nthis interface only exposes the values we want to be exposed", + "type": "object", + "title": "FrameMeta matches:", + "properties": { + "channel": { + "description": "Channel is the path to a stream in grafana live that has real-time updates for this data.", + "type": "string" + }, + "custom": { + "description": "Custom datasource specific values." + }, + "dataTopic": { + "$ref": "#/definitions/DataTopic" + }, + "executedQueryString": { + "description": "ExecutedQueryString is the raw query sent to the underlying system. All macros and templating\nhave been applied. When metadata contains this value, it will be shown in the query inspector.", + "type": "string" + }, + "notices": { + "description": "Notices provide additional information about the data in the Frame that\nGrafana can display to the user in the user interface.", + "type": "array", + "items": { + "$ref": "#/definitions/Notice" + } + }, + "path": { + "description": "Path is a browsable path on the datasource.", + "type": "string" + }, + "pathSeparator": { + "description": "PathSeparator defines the separator pattern to decode a hierarchy. The default separator is '/'.", + "type": "string" + }, + "preferredVisualisationPluginId": { + "description": "PreferredVisualizationPluginId sets the panel plugin id to use to render the data when using Explore. If\nthe plugin cannot be found will fall back to PreferredVisualization.", + "type": "string" + }, + "preferredVisualisationType": { + "$ref": "#/definitions/VisType" + }, + "stats": { + "description": "Stats is an array of query result statistics.", + "type": "array", + "items": { + "$ref": "#/definitions/QueryStat" + } + }, + "type": { + "$ref": "#/definitions/FrameType" + }, + "typeVersion": { + "$ref": "#/definitions/FrameTypeVersion" + } + } + }, + "FrameType": { + "description": "A FrameType string, when present in a frame's metadata, asserts that the\nframe's structure conforms to the FrameType's specification.\nThis property is currently optional, so FrameType may be FrameTypeUnknown even if the properties of\nthe Frame correspond to a defined FrameType.", + "type": "string" + }, + "FrameTypeVersion": { + "type": "array", + "title": "FrameType is a 2 number version (Major / Minor).", + "items": { + "type": "integer", + "format": "uint64" + } + }, + "Frames": { + "description": "It is the main data container within a backend.DataResponse.\nThere should be no `nil` entries in the Frames slice (making them pointers was a mistake).", + "type": "array", + "title": "Frames is a slice of Frame pointers.", + "items": { + "$ref": "#/definitions/Frame" + } + }, + "GetAnnotationTagsResponse": { + "type": "object", + "title": "GetAnnotationTagsResponse is a response struct for FindTagsResult.", + "properties": { + "result": { + "$ref": "#/definitions/FindTagsResult" + } + } + }, + "GetHomeDashboardResponse": { + "title": "Get home dashboard response.", + "allOf": [ + { + "type": "object", + "properties": { + "dashboard": { + "$ref": "#/definitions/Json" + }, + "meta": { + "$ref": "#/definitions/DashboardMeta" + } + } + }, + { + "type": "object", + "properties": { + "redirectUri": { + "type": "string" + } + } + } + ] + }, + "Hit": { + "type": "object", + "properties": { + "folderId": { + "type": "integer", + "format": "int64" + }, + "folderTitle": { + "type": "string" + }, + "folderUid": { + "type": "string" + }, + "folderUrl": { + "type": "string" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "isStarred": { + "type": "boolean" + }, + "slug": { + "type": "string" + }, + "sortMeta": { + "type": "integer", + "format": "int64" + }, + "sortMetaName": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "title": { + "type": "string" + }, + "type": { + "$ref": "#/definitions/HitType" + }, + "uid": { + "type": "string" + }, + "uri": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "HitList": { + "type": "array", + "items": { + "$ref": "#/definitions/Hit" + } + }, + "HitType": { + "type": "string" + }, + "ImportDashboardInput": { + "type": "object", + "title": "ImportDashboardInput definition of input parameters when importing a dashboard.", + "properties": { + "name": { + "type": "string" + }, + "pluginId": { + "type": "string" + }, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "ImportDashboardRequest": { + "type": "object", + "title": "ImportDashboardRequest request object for importing a dashboard.", + "properties": { + "dashboard": { + "$ref": "#/definitions/Json" + }, + "folderId": { + "type": "integer", + "format": "int64" + }, + "folderUid": { + "type": "string" + }, + "inputs": { + "type": "array", + "items": { + "$ref": "#/definitions/ImportDashboardInput" + } + }, + "overwrite": { + "type": "boolean" + }, + "path": { + "type": "string" + }, + "pluginId": { + "type": "string" + } + } + }, + "ImportDashboardResponse": { + "type": "object", + "title": "ImportDashboardResponse response object returned when importing a dashboard.", + "properties": { + "dashboardId": { + "type": "integer", + "format": "int64" + }, + "description": { + "type": "string" + }, + "folderId": { + "type": "integer", + "format": "int64" + }, + "folderUid": { + "type": "string" + }, + "imported": { + "type": "boolean" + }, + "importedRevision": { + "type": "integer", + "format": "int64" + }, + "importedUri": { + "type": "string" + }, + "importedUrl": { + "type": "string" + }, + "path": { + "type": "string" + }, + "pluginId": { + "type": "string" + }, + "removed": { + "type": "boolean" + }, + "revision": { + "type": "integer", + "format": "int64" + }, + "slug": { + "type": "string" + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "InspectType": { + "type": "integer", + "format": "int64", + "title": "InspectType is a type for the Inspect property of a Notice." + }, + "InternalDataLink": { + "description": "InternalDataLink definition to allow Explore links to be constructed in the backend", + "type": "object", + "properties": { + "datasourceName": { + "type": "string" + }, + "datasourceUid": { + "type": "string" + }, + "panelsState": { + "$ref": "#/definitions/ExplorePanelsState" + }, + "query": {}, + "timeRange": { + "$ref": "#/definitions/TimeRange" + }, + "transformations": { + "type": "array", + "items": { + "$ref": "#/definitions/LinkTransformationConfig" + } + } + } + }, + "Item": { + "type": "object", + "title": "Item defines model for Item.", + "properties": { + "title": { + "description": "Title is an unused property -- it will be removed in the future", + "type": "string" + }, + "type": { + "$ref": "#/definitions/ItemType" + }, + "value": { + "description": "Value depends on type and describes the playlist item.\n\ndashboard_by_id: The value is an internal numerical identifier set by Grafana. This\nis not portable as the numerical identifier is non-deterministic between different instances.\nWill be replaced by dashboard_by_uid in the future. (deprecated)\ndashboard_by_tag: The value is a tag which is set on any number of dashboards. All\ndashboards behind the tag will be added to the playlist.\ndashboard_by_uid: The value is the dashboard UID", + "type": "string" + } + } + }, + "ItemDTO": { + "type": "object", + "properties": { + "alertId": { + "type": "integer", + "format": "int64" + }, + "alertName": { + "type": "string" + }, + "avatarUrl": { + "type": "string" + }, + "created": { + "type": "integer", + "format": "int64" + }, + "dashboardId": { + "type": "integer", + "format": "int64" + }, + "dashboardUID": { + "type": "string" + }, + "data": { + "$ref": "#/definitions/Json" + }, + "email": { + "type": "string" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "login": { + "type": "string" + }, + "newState": { + "type": "string" + }, + "panelId": { + "type": "integer", + "format": "int64" + }, + "prevState": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "text": { + "type": "string" + }, + "time": { + "type": "integer", + "format": "int64" + }, + "timeEnd": { + "type": "integer", + "format": "int64" + }, + "updated": { + "type": "integer", + "format": "int64" + }, + "userId": { + "type": "integer", + "format": "int64" + } + } + }, + "ItemType": { + "type": "string", + "title": "Type of the item." + }, + "Json": { + "type": "object" + }, + "LegacyAlert": { + "type": "object", + "properties": { + "Created": { + "type": "string", + "format": "date-time" + }, + "DashboardID": { + "type": "integer", + "format": "int64" + }, + "EvalData": { + "$ref": "#/definitions/Json" + }, + "ExecutionError": { + "type": "string" + }, + "For": { + "$ref": "#/definitions/Duration" + }, + "Frequency": { + "type": "integer", + "format": "int64" + }, + "Handler": { + "type": "integer", + "format": "int64" + }, + "ID": { + "type": "integer", + "format": "int64" + }, + "Message": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "NewStateDate": { + "type": "string", + "format": "date-time" + }, + "OrgID": { + "type": "integer", + "format": "int64" + }, + "PanelID": { + "type": "integer", + "format": "int64" + }, + "Settings": { + "$ref": "#/definitions/Json" + }, + "Severity": { + "type": "string" + }, + "Silenced": { + "type": "boolean" + }, + "State": { + "$ref": "#/definitions/AlertStateType" + }, + "StateChanges": { + "type": "integer", + "format": "int64" + }, + "Updated": { + "type": "string", + "format": "date-time" + }, + "Version": { + "type": "integer", + "format": "int64" + } + } + }, + "LibraryElementConnectionDTO": { + "type": "object", + "title": "LibraryElementConnectionDTO is the frontend DTO for element connections.", + "properties": { + "connectionId": { + "type": "integer", + "format": "int64" + }, + "connectionUid": { + "type": "string" + }, + "created": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "$ref": "#/definitions/LibraryElementDTOMetaUser" + }, + "elementId": { + "type": "integer", + "format": "int64" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "kind": { + "type": "integer", + "format": "int64" + } + } + }, + "LibraryElementConnectionsResponse": { + "type": "object", + "title": "LibraryElementConnectionsResponse is a response struct for an array of LibraryElementConnectionDTO.", + "properties": { + "result": { + "type": "array", + "items": { + "$ref": "#/definitions/LibraryElementConnectionDTO" + } + } + } + }, + "LibraryElementDTO": { + "type": "object", + "title": "LibraryElementDTO is the frontend DTO for entities.", + "properties": { + "description": { + "type": "string" + }, + "folderId": { + "type": "integer", + "format": "int64" + }, + "folderUid": { + "type": "string" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "kind": { + "type": "integer", + "format": "int64" + }, + "meta": { + "$ref": "#/definitions/LibraryElementDTOMeta" + }, + "model": { + "type": "object" + }, + "name": { + "type": "string" + }, + "orgId": { + "type": "integer", + "format": "int64" + }, + "schemaVersion": { + "type": "integer", + "format": "int64" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "type": "integer", + "format": "int64" + } + } + }, + "LibraryElementDTOMeta": { + "type": "object", + "title": "LibraryElementDTOMeta is the meta information for LibraryElementDTO.", + "properties": { + "connectedDashboards": { + "type": "integer", + "format": "int64" + }, + "created": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "$ref": "#/definitions/LibraryElementDTOMetaUser" + }, + "folderName": { + "type": "string" + }, + "folderUid": { + "type": "string" + }, + "updated": { + "type": "string", + "format": "date-time" + }, + "updatedBy": { + "$ref": "#/definitions/LibraryElementDTOMetaUser" + } + } + }, + "LibraryElementDTOMetaUser": { + "type": "object", + "title": "LibraryElementDTOMetaUser defines model for LibraryElementDTOMetaUser.", + "properties": { + "avatarUrl": { + "type": "string" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + } + }, + "LibraryElementResponse": { + "type": "object", + "title": "LibraryElementResponse is a response struct for LibraryElementDTO.", + "properties": { + "result": { + "$ref": "#/definitions/LibraryElementDTO" + } + } + }, + "LibraryElementSearchResponse": { + "type": "object", + "title": "LibraryElementSearchResponse is a response struct for LibraryElementSearchResult.", + "properties": { + "result": { + "$ref": "#/definitions/LibraryElementSearchResult" + } + } + }, + "LibraryElementSearchResult": { + "type": "object", + "title": "LibraryElementSearchResult is the search result for entities.", + "properties": { + "elements": { + "type": "array", + "items": { + "$ref": "#/definitions/LibraryElementDTO" + } + }, + "page": { + "type": "integer", + "format": "int64" + }, + "perPage": { + "type": "integer", + "format": "int64" + }, + "totalCount": { + "type": "integer", + "format": "int64" + } + } + }, + "LinkTransformationConfig": { + "type": "object", + "properties": { + "expression": { + "type": "string" + }, + "field": { + "type": "string" + }, + "mapValue": { + "type": "string" + }, + "type": { + "$ref": "#/definitions/SupportedTransformationTypes" + } + } + }, + "MassDeleteAnnotationsCmd": { + "type": "object", + "properties": { + "annotationId": { + "type": "integer", + "format": "int64" + }, + "dashboardId": { + "type": "integer", + "format": "int64" + }, + "dashboardUID": { + "type": "string" + }, + "panelId": { + "type": "integer", + "format": "int64" + } + } + }, + "Metadata": { + "description": "Metadata contains user accesses for a given resource\nEx: map[string]bool{\"create\":true, \"delete\": true}", + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "MetricRequest": { + "type": "object", + "required": [ + "from", + "to", + "queries" + ], + "properties": { + "debug": { + "type": "boolean" + }, + "from": { + "description": "From Start time in epoch timestamps in milliseconds or relative using Grafana time units.", + "type": "string", + "example": "now-1h" + }, + "queries": { + "description": "queries.refId – Specifies an identifier of the query. Is optional and default to “A”.\nqueries.datasourceId – Specifies the data source to be queried. Each query in the request must have an unique datasourceId.\nqueries.maxDataPoints - Species maximum amount of data points that dashboard panel can render. Is optional and default to 100.\nqueries.intervalMs - Specifies the time interval in milliseconds of time series. Is optional and defaults to 1000.", + "type": "array", + "items": { + "$ref": "#/definitions/Json" + }, + "example": [ + { + "datasource": { + "uid": "PD8C576611E62080A" + }, + "format": "table", + "intervalMs": 86400000, + "maxDataPoints": 1092, + "rawSql": "SELECT 1 as valueOne, 2 as valueTwo", + "refId": "A" + } + ] + }, + "to": { + "description": "To End time in epoch timestamps in milliseconds or relative using Grafana time units.", + "type": "string", + "example": "now" + } + } + }, + "MoveFolderCommand": { + "description": "MoveFolderCommand captures the information required by the folder service\nto move a folder.", + "type": "object", + "properties": { + "parentUid": { + "type": "string" + } + } + }, + "NewApiKeyResult": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "key": { + "type": "string", + "example": "glsa_yscW25imSKJIuav8zF37RZmnbiDvB05G_fcaaf58a" + }, + "name": { + "type": "string", + "example": "grafana" + } + } + }, + "Notice": { + "type": "object", + "title": "Notice provides a structure for presenting notifications in Grafana's user interface.", + "properties": { + "inspect": { + "$ref": "#/definitions/InspectType" + }, + "link": { + "description": "Link is an optional link for display in the user interface and can be an\nabsolute URL or a path relative to Grafana's root url.", + "type": "string" + }, + "severity": { + "$ref": "#/definitions/NoticeSeverity" + }, + "text": { + "description": "Text is freeform descriptive text for the notice.", + "type": "string" + } + } + }, + "NoticeSeverity": { + "type": "integer", + "format": "int64", + "title": "NoticeSeverity is a type for the Severity property of a Notice." + }, + "NotificationTestCommand": { + "type": "object", + "properties": { + "disableResolveMessage": { + "type": "boolean" + }, + "frequency": { + "type": "string" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "secureSettings": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "sendReminder": { + "type": "boolean" + }, + "settings": { + "$ref": "#/definitions/Json" + }, + "type": { + "type": "string" + } + } + }, + "OrgDTO": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + } + }, + "OrgDetailsDTO": { + "type": "object", + "properties": { + "address": { + "$ref": "#/definitions/Address" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + } + }, + "OrgUserDTO": { + "type": "object", + "properties": { + "accessControl": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "authLabels": { + "type": "array", + "items": { + "type": "string" + } + }, + "avatarUrl": { + "type": "string" + }, + "email": { + "type": "string" + }, + "isDisabled": { + "type": "boolean" + }, + "isExternallySynced": { + "type": "boolean" + }, + "lastSeenAt": { + "type": "string", + "format": "date-time" + }, + "lastSeenAtAge": { + "type": "string" + }, + "login": { + "type": "string" + }, + "name": { + "type": "string" + }, + "orgId": { + "type": "integer", + "format": "int64" + }, + "role": { + "type": "string" + }, + "userId": { + "type": "integer", + "format": "int64" + } + } + }, + "PatchAnnotationsCmd": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/Json" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "text": { + "type": "string" + }, + "time": { + "type": "integer", + "format": "int64" + }, + "timeEnd": { + "type": "integer", + "format": "int64" + } + } + }, + "PatchLibraryElementCommand": { + "description": "PatchLibraryElementCommand is the command for patching a LibraryElement", + "type": "object", + "properties": { + "folderId": { + "description": "ID of the folder where the library element is stored.", + "type": "integer", + "format": "int64" + }, + "folderUid": { + "description": "UID of the folder where the library element is stored.", + "type": "string" + }, + "kind": { + "description": "Kind of element to create, Use 1 for library panels or 2 for c.\nDescription:\n1 - library panels\n2 - library variables", + "type": "integer", + "format": "int64", + "enum": [ + 1, + 2 + ] + }, + "model": { + "description": "The JSON model for the library element.", + "type": "object" + }, + "name": { + "description": "Name of the library element.", + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Version of the library element you are updating.", + "type": "integer", + "format": "int64" + } + } + }, + "PatchPrefsCmd": { + "type": "object", + "properties": { + "cookies": { + "type": "array", + "items": { + "$ref": "#/definitions/CookieType" + } + }, + "homeDashboardId": { + "description": "The numerical :id of a favorited dashboard", + "type": "integer", + "format": "int64", + "default": 0 + }, + "homeDashboardUID": { + "type": "string" + }, + "language": { + "type": "string" + }, + "queryHistory": { + "$ref": "#/definitions/QueryHistoryPreference" + }, + "theme": { + "type": "string", + "enum": [ + "light", + "dark" + ] + }, + "timezone": { + "type": "string", + "enum": [ + "utc", + "browser" + ] + }, + "weekStart": { + "type": "string" + } + } + }, + "PatchQueryCommentInQueryHistoryCommand": { + "description": "PatchQueryCommentInQueryHistoryCommand is the command for updating comment for query in query history", + "type": "object", + "properties": { + "comment": { + "description": "Updated comment", + "type": "string" + } + } + }, + "PauseAlertCommand": { + "type": "object", + "properties": { + "alertId": { + "type": "integer", + "format": "int64" + }, + "paused": { + "type": "boolean" + } + } + }, + "PauseAllAlertsCommand": { + "type": "object", + "properties": { + "paused": { + "type": "boolean" + } + } + }, + "Permission": { + "type": "object", + "title": "Permission is the model for access control permissions.", + "properties": { + "action": { + "type": "string" + }, + "created": { + "type": "string", + "format": "date-time" + }, + "scope": { + "type": "string" + }, + "updated": { + "type": "string", + "format": "date-time" + } + } + }, + "PermissionType": { + "type": "integer", + "format": "int64" + }, + "Playlist": { + "description": "Playlist model", + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "interval": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "PlaylistDashboard": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "order": { + "type": "integer", + "format": "int64" + }, + "slug": { + "type": "string" + }, + "title": { + "type": "string" + }, + "uri": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "PlaylistDashboardsSlice": { + "type": "array", + "items": { + "$ref": "#/definitions/PlaylistDashboard" + } + }, + "PlaylistItem": { + "type": "object", + "properties": { + "Id": { + "type": "integer", + "format": "int64" + }, + "PlaylistId": { + "type": "integer", + "format": "int64" + }, + "order": { + "type": "integer", + "format": "int64" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "Playlists": { + "type": "array", + "items": { + "$ref": "#/definitions/Playlist" + } + }, + "PostAnnotationsCmd": { + "type": "object", + "required": [ + "text" + ], + "properties": { + "dashboardId": { + "type": "integer", + "format": "int64" + }, + "dashboardUID": { + "type": "string" + }, + "data": { + "$ref": "#/definitions/Json" + }, + "panelId": { + "type": "integer", + "format": "int64" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "text": { + "type": "string" + }, + "time": { + "type": "integer", + "format": "int64" + }, + "timeEnd": { + "type": "integer", + "format": "int64" + } + } + }, + "PostGraphiteAnnotationsCmd": { + "type": "object", + "properties": { + "data": { + "type": "string" + }, + "tags": {}, + "what": { + "type": "string" + }, + "when": { + "type": "integer", + "format": "int64" + } + } + }, + "PrometheusRemoteWriteTargetJSON": { + "type": "object", + "properties": { + "data_source_uid": { + "type": "string" + }, + "id": { + "type": "string" + }, + "remote_write_path": { + "type": "string" + } + } + }, + "QueryDataResponse": { + "description": "It is the return type of a QueryData call.", + "type": "object", + "title": "QueryDataResponse contains the results from a QueryDataRequest.", + "properties": { + "Responses": { + "$ref": "#/definitions/Responses" + } + } + }, + "QueryHistoryDTO": { + "type": "object", + "properties": { + "comment": { + "type": "string" + }, + "createdAt": { + "type": "integer", + "format": "int64" + }, + "createdBy": { + "type": "integer", + "format": "int64" + }, + "datasourceUid": { + "type": "string" + }, + "queries": { + "$ref": "#/definitions/Json" + }, + "starred": { + "type": "boolean" + }, + "uid": { + "type": "string" + } + } + }, + "QueryHistoryDeleteQueryResponse": { + "description": "QueryHistoryDeleteQueryResponse is the response struct for deleting a query from query history", + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "message": { + "type": "string" + } + } + }, + "QueryHistoryPreference": { + "type": "object", + "properties": { + "homeTab": { + "type": "string" + } + } + }, + "QueryHistoryResponse": { + "description": "QueryHistoryResponse is a response struct for QueryHistoryDTO", + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/QueryHistoryDTO" + } + } + }, + "QueryHistorySearchResponse": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/QueryHistorySearchResult" + } + } + }, + "QueryHistorySearchResult": { + "type": "object", + "properties": { + "page": { + "type": "integer", + "format": "int64" + }, + "perPage": { + "type": "integer", + "format": "int64" + }, + "queryHistory": { + "type": "array", + "items": { + "$ref": "#/definitions/QueryHistoryDTO" + } + }, + "totalCount": { + "type": "integer", + "format": "int64" + } + } + }, + "QueryStat": { + "description": "The embedded FieldConfig's display name must be set.\nIt corresponds to the QueryResultMetaStat on the frontend (https://github.com/grafana/grafana/blob/master/packages/grafana-data/src/types/data.ts#L53).", + "type": "object", + "title": "QueryStat is used for storing arbitrary statistics metadata related to a query and its result, e.g. total request time, data processing time.", + "properties": { + "color": { + "description": "Map values to a display color\nNOTE: this interface is under development in the frontend... so simple map for now", + "type": "object", + "additionalProperties": {} + }, + "custom": { + "description": "Panel Specific Values", + "type": "object", + "additionalProperties": {} + }, + "decimals": { + "type": "integer", + "format": "uint16" + }, + "description": { + "description": "Description is human readable field metadata", + "type": "string" + }, + "displayName": { + "description": "DisplayName overrides Grafana default naming, should not be used from a data source", + "type": "string" + }, + "displayNameFromDS": { + "description": "DisplayNameFromDS overrides Grafana default naming strategy.", + "type": "string" + }, + "filterable": { + "description": "Filterable indicates if the Field's data can be filtered by additional calls.", + "type": "boolean" + }, + "interval": { + "description": "Interval indicates the expected regular step between values in the series.\nWhen an interval exists, consumers can identify \"missing\" values when the expected value is not present.\nThe grafana timeseries visualization will render disconnected values when missing values are found it the time field.\nThe interval uses the same units as the values. For time.Time, this is defined in milliseconds.", + "type": "number", + "format": "double" + }, + "links": { + "description": "The behavior when clicking on a result", + "type": "array", + "items": { + "$ref": "#/definitions/DataLink" + } + }, + "mappings": { + "$ref": "#/definitions/ValueMappings" + }, + "max": { + "$ref": "#/definitions/ConfFloat64" + }, + "min": { + "$ref": "#/definitions/ConfFloat64" + }, + "noValue": { + "description": "Alternative to empty string", + "type": "string" + }, + "path": { + "description": "Path is an explicit path to the field in the datasource. When the frame meta includes a path,\nthis will default to `${frame.meta.path}/${field.name}\n\nWhen defined, this value can be used as an identifier within the datasource scope, and\nmay be used as an identifier to update values in a subsequent request", + "type": "string" + }, + "thresholds": { + "$ref": "#/definitions/ThresholdsConfig" + }, + "type": { + "$ref": "#/definitions/FieldTypeConfig" + }, + "unit": { + "description": "Numeric Options", + "type": "string" + }, + "value": { + "type": "number", + "format": "double" + }, + "writeable": { + "description": "Writeable indicates that the datasource knows how to update this value", + "type": "boolean" + } + } + }, + "QuotaDTO": { + "type": "object", + "properties": { + "limit": { + "type": "integer", + "format": "int64" + }, + "org_id": { + "type": "integer", + "format": "int64" + }, + "target": { + "type": "string" + }, + "used": { + "type": "integer", + "format": "int64" + }, + "user_id": { + "type": "integer", + "format": "int64" + } + } + }, + "RecordingRuleJSON": { + "description": "RecordingRuleJSON is the external representation of a recording rule", + "type": "object", + "properties": { + "active": { + "type": "boolean" + }, + "count": { + "type": "boolean" + }, + "description": { + "type": "string" + }, + "dest_data_source_uid": { + "type": "string" + }, + "id": { + "type": "string" + }, + "interval": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "prom_name": { + "type": "string" + }, + "queries": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": {} + } + }, + "range": { + "type": "integer", + "format": "int64" + }, + "target_ref_id": { + "type": "string" + } + } + }, + "ReportEmailDTO": { + "type": "object", + "properties": { + "email": { + "type": "string" + }, + "emails": { + "description": "Comma-separated list of emails to which to send the report to.", + "type": "string" + }, + "id": { + "description": "Send the report to the emails specified in the report. Required if emails is not present.", + "type": "string", + "format": "int64" + }, + "useEmailsFromReport": { + "description": "Send the report to the emails specified in the report. Required if emails is not present.", + "type": "boolean" + } + } + }, + "ReportOptionsDTO": { + "type": "object", + "properties": { + "layout": { + "type": "string" + }, + "orientation": { + "type": "string" + }, + "timeRange": { + "$ref": "#/definitions/TimeRangeDTO" + } + } + }, + "Responses": { + "description": "The QueryData method the QueryDataHandler method will set the RefId\nproperty on the DataResponses' frames based on these RefIDs.", + "type": "object", + "title": "Responses is a map of RefIDs (Unique Query ID) to DataResponses.", + "additionalProperties": { + "$ref": "#/definitions/DataResponse" + } + }, + "RestoreDashboardVersionCommand": { + "type": "object", + "properties": { + "version": { + "type": "integer", + "format": "int64" + } + } + }, + "RevokeAuthTokenCmd": { + "type": "object", + "properties": { + "authTokenId": { + "type": "integer", + "format": "int64" + } + } + }, + "RoleAssignmentsDTO": { + "type": "object", + "properties": { + "role_uid": { + "type": "string" + }, + "service_accounts": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + }, + "teams": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + }, + "users": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + } + } + }, + "RoleDTO": { + "type": "object", + "properties": { + "created": { + "type": "string", + "format": "date-time" + }, + "delegatable": { + "type": "boolean" + }, + "description": { + "type": "string" + }, + "displayName": { + "type": "string" + }, + "group": { + "type": "string" + }, + "hidden": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "permissions": { + "type": "array", + "items": { + "$ref": "#/definitions/Permission" + } + }, + "uid": { + "type": "string" + }, + "updated": { + "type": "string", + "format": "date-time" + }, + "version": { + "type": "integer", + "format": "int64" + } + } + }, + "SaveDashboardCommand": { + "type": "object", + "properties": { + "UpdatedAt": { + "type": "string", + "format": "date-time" + }, + "dashboard": { + "$ref": "#/definitions/Json" + }, + "folderId": { + "type": "integer", + "format": "int64" + }, + "folderUid": { + "type": "string" + }, + "isFolder": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "overwrite": { + "type": "boolean" + }, + "userId": { + "type": "integer", + "format": "int64" + } + } + }, + "ScheduleDTO": { + "type": "object", + "properties": { + "day": { + "type": "string" + }, + "dayOfMonth": { + "type": "string" + }, + "endDate": { + "type": "string", + "format": "date-time" + }, + "frequency": { + "type": "string" + }, + "hour": { + "type": "integer", + "format": "int64" + }, + "intervalAmount": { + "type": "integer", + "format": "int64" + }, + "intervalFrequency": { + "type": "string" + }, + "minute": { + "type": "integer", + "format": "int64" + }, + "startDate": { + "type": "string", + "format": "date-time" + }, + "timeZone": { + "type": "string" + }, + "workdaysOnly": { + "type": "boolean" + } + } + }, + "SearchOrgServiceAccountsResult": { + "description": "swagger: model", + "type": "object", + "properties": { + "page": { + "type": "integer", + "format": "int64" + }, + "perPage": { + "type": "integer", + "format": "int64" + }, + "serviceAccounts": { + "type": "array", + "items": { + "$ref": "#/definitions/ServiceAccountDTO" + } + }, + "totalCount": { + "description": "It can be used for pagination of the user list\nE.g. if totalCount is equal to 100 users and\nthe perpage parameter is set to 10 then there are 10 pages of users.", + "type": "integer", + "format": "int64" + } + } + }, + "SearchOrgUsersQueryResult": { + "type": "object", + "properties": { + "orgUsers": { + "type": "array", + "items": { + "$ref": "#/definitions/OrgUserDTO" + } + }, + "page": { + "type": "integer", + "format": "int64" + }, + "perPage": { + "type": "integer", + "format": "int64" + }, + "totalCount": { + "type": "integer", + "format": "int64" + } + } + }, + "SearchResult": { + "type": "object", + "properties": { + "result": { + "type": "array", + "items": { + "$ref": "#/definitions/SearchResultItem" + } + } + } + }, + "SearchResultItem": { + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "basicRole": { + "type": "string" + }, + "orgId": { + "type": "integer", + "format": "int64" + }, + "roleName": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "teamId": { + "type": "integer", + "format": "int64" + }, + "userId": { + "type": "integer", + "format": "int64" + }, + "version": { + "type": "integer", + "format": "int64" + } + } + }, + "SearchTeamQueryResult": { + "type": "object", + "properties": { + "page": { + "type": "integer", + "format": "int64" + }, + "perPage": { + "type": "integer", + "format": "int64" + }, + "teams": { + "type": "array", + "items": { + "$ref": "#/definitions/TeamDTO" + } + }, + "totalCount": { + "type": "integer", + "format": "int64" + } + } + }, + "SearchUserQueryResult": { + "type": "object", + "properties": { + "page": { + "type": "integer", + "format": "int64" + }, + "perPage": { + "type": "integer", + "format": "int64" + }, + "totalCount": { + "type": "integer", + "format": "int64" + }, + "users": { + "type": "array", + "items": { + "$ref": "#/definitions/UserSearchHitDTO" + } + } + } + }, + "ServiceAccountDTO": { + "description": "swagger: model", + "type": "object", + "properties": { + "accessControl": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "example": { + "serviceaccounts:delete": true, + "serviceaccounts:read": true, + "serviceaccounts:write": true + } + }, + "avatarUrl": { + "type": "string", + "example": "/avatar/85ec38023d90823d3e5b43ef35646af9" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "isDisabled": { + "type": "boolean", + "example": false + }, + "login": { + "type": "string", + "example": "sa-grafana" + }, + "name": { + "type": "string", + "example": "grafana" + }, + "orgId": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "role": { + "type": "string", + "example": "Viewer" + }, + "tokens": { + "type": "integer", + "format": "int64", + "example": 0 + } + } + }, + "ServiceAccountProfileDTO": { + "type": "object", + "properties": { + "accessControl": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "avatarUrl": { + "type": "string", + "example": "/avatar/8ea890a677d6a223c591a1beea6ea9d2" + }, + "createdAt": { + "type": "string", + "format": "date-time", + "example": "2022-03-21T14:35:33Z" + }, + "id": { + "type": "integer", + "format": "int64", + "example": 2 + }, + "isDisabled": { + "type": "boolean", + "example": false + }, + "login": { + "type": "string", + "example": "sa-grafana" + }, + "name": { + "type": "string", + "example": "test" + }, + "orgId": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "role": { + "type": "string", + "example": "Editor" + }, + "teams": { + "type": "array", + "items": { + "type": "string" + }, + "example": [] + }, + "tokens": { + "type": "integer", + "format": "int64" + }, + "updatedAt": { + "type": "string", + "format": "date-time", + "example": "2022-03-21T14:35:33Z" + } + } + }, + "SetRoleAssignmentsCommand": { + "type": "object", + "properties": { + "service_accounts": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + }, + "teams": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + }, + "users": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + } + } + }, + "SetUserRolesCommand": { + "type": "object", + "properties": { + "global": { + "type": "boolean" + }, + "includeHidden": { + "type": "boolean" + }, + "roleUids": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "SettingsBag": { + "type": "object", + "additionalProperties": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "SettingsDTO": { + "type": "object", + "properties": { + "branding": { + "$ref": "#/definitions/BrandingOptionsDTO" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "orgId": { + "type": "integer", + "format": "int64" + }, + "userId": { + "type": "integer", + "format": "int64" + } + } + }, + "Spec": { + "type": "object", + "title": "Spec defines model for Spec.", + "properties": { + "cookiePreferences": { + "$ref": "#/definitions/CookiePreferences" + }, + "homeDashboardUID": { + "description": "UID for the home dashboard", + "type": "string" + }, + "language": { + "description": "Selected language (beta)", + "type": "string" + }, + "queryHistory": { + "$ref": "#/definitions/QueryHistoryPreference" + }, + "theme": { + "description": "Theme light, dark, empty is default", + "type": "string" + }, + "timezone": { + "description": "The timezone selection\nTODO: this should use the timezone defined in common", + "type": "string" + }, + "weekStart": { + "description": "WeekStart day of the week (sunday, monday, etc)", + "type": "string" + } + } + }, + "State": { + "type": "string" + }, + "Status": { + "type": "integer", + "format": "int64" + }, + "SuccessResponseBody": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "SupportedTransformationTypes": { + "type": "string" + }, + "SyncResult": { + "type": "object", + "title": "SyncResult holds the result of a sync with LDAP. This gives us information on which users were updated and how.", + "properties": { + "Elapsed": { + "$ref": "#/definitions/Duration" + }, + "FailedUsers": { + "type": "array", + "items": { + "$ref": "#/definitions/FailedUser" + } + }, + "MissingUserIds": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + }, + "Started": { + "type": "string", + "format": "date-time" + }, + "UpdatedUserIds": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + } + } + }, + "TagsDTO": { + "type": "object", + "title": "TagsDTO is the frontend DTO for Tag.", + "properties": { + "count": { + "type": "integer", + "format": "int64" + }, + "tag": { + "type": "string" + } + } + }, + "TeamDTO": { + "type": "object", + "properties": { + "accessControl": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "avatarUrl": { + "type": "string" + }, + "email": { + "type": "string" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "memberCount": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "orgId": { + "type": "integer", + "format": "int64" + }, + "permission": { + "$ref": "#/definitions/PermissionType" + }, + "uid": { + "type": "string" + } + } + }, + "TeamGroupDTO": { + "type": "object", + "properties": { + "groupId": { + "type": "string" + }, + "orgId": { + "type": "integer", + "format": "int64" + }, + "teamId": { + "type": "integer", + "format": "int64" + } + } + }, + "TeamGroupMapping": { + "type": "object", + "properties": { + "groupId": { + "type": "string" + } + } + }, + "TeamMemberDTO": { + "type": "object", + "properties": { + "auth_module": { + "type": "string" + }, + "avatarUrl": { + "type": "string" + }, + "email": { + "type": "string" + }, + "labels": { + "type": "array", + "items": { + "type": "string" + } + }, + "login": { + "type": "string" + }, + "name": { + "type": "string" + }, + "orgId": { + "type": "integer", + "format": "int64" + }, + "permission": { + "$ref": "#/definitions/PermissionType" + }, + "teamId": { + "type": "integer", + "format": "int64" + }, + "teamUID": { + "type": "string" + }, + "userId": { + "type": "integer", + "format": "int64" + } + } + }, + "TempUserDTO": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "createdOn": { + "type": "string", + "format": "date-time" + }, + "email": { + "type": "string" + }, + "emailSent": { + "type": "boolean" + }, + "emailSentOn": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "invitedByEmail": { + "type": "string" + }, + "invitedByLogin": { + "type": "string" + }, + "invitedByName": { + "type": "string" + }, + "name": { + "type": "string" + }, + "orgId": { + "type": "integer", + "format": "int64" + }, + "role": { + "type": "string", + "enum": [ + "None", + "Viewer", + "Editor", + "Admin" + ] + }, + "status": { + "$ref": "#/definitions/TempUserStatus" + }, + "url": { + "type": "string" + } + } + }, + "TempUserStatus": { + "type": "string" + }, + "Threshold": { + "description": "Threshold a single step on the threshold list", + "type": "object", + "properties": { + "color": { + "type": "string" + }, + "state": { + "type": "string" + }, + "value": { + "$ref": "#/definitions/ConfFloat64" + } + } + }, + "ThresholdsConfig": { + "description": "ThresholdsConfig setup thresholds", + "type": "object", + "properties": { + "mode": { + "$ref": "#/definitions/ThresholdsMode" + }, + "steps": { + "description": "Must be sorted by 'value', first value is always -Infinity", + "type": "array", + "items": { + "$ref": "#/definitions/Threshold" + } + } + } + }, + "ThresholdsMode": { + "description": "ThresholdsMode absolute or percentage", + "type": "string" + }, + "TimeRange": { + "description": "Redefining this to avoid an import cycle", + "type": "object", + "properties": { + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + }, + "TimeRangeDTO": { + "type": "object", + "properties": { + "from": { + "type": "string" + }, + "to": { + "type": "string" + } + } + }, + "Token": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "company": { + "type": "string" + }, + "details_url": { + "type": "string" + }, + "exp": { + "type": "integer", + "format": "int64" + }, + "iat": { + "type": "integer", + "format": "int64" + }, + "included_users": { + "type": "integer", + "format": "int64" + }, + "iss": { + "type": "string" + }, + "jti": { + "type": "string" + }, + "lexp": { + "type": "integer", + "format": "int64" + }, + "lic_exp_warn_days": { + "type": "integer", + "format": "int64" + }, + "lid": { + "type": "string" + }, + "limit_by": { + "type": "string" + }, + "max_concurrent_user_sessions": { + "type": "integer", + "format": "int64" + }, + "nbf": { + "type": "integer", + "format": "int64" + }, + "prod": { + "type": "array", + "items": { + "type": "string" + } + }, + "slug": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/TokenStatus" + }, + "sub": { + "type": "string" + }, + "tok_exp_warn_days": { + "type": "integer", + "format": "int64" + }, + "trial": { + "type": "boolean" + }, + "trial_exp": { + "type": "integer", + "format": "int64" + }, + "update_days": { + "type": "integer", + "format": "int64" + }, + "usage_billing": { + "type": "boolean" + } + } + }, + "TokenDTO": { + "type": "object", + "properties": { + "created": { + "type": "string", + "format": "date-time", + "example": "2022-03-23T10:31:02Z" + }, + "expiration": { + "type": "string", + "format": "date-time", + "example": "2022-03-23T10:31:02Z" + }, + "hasExpired": { + "type": "boolean", + "example": false + }, + "id": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "isRevoked": { + "type": "boolean", + "example": false + }, + "lastUsedAt": { + "type": "string", + "format": "date-time", + "example": "2022-03-23T10:31:02Z" + }, + "name": { + "type": "string", + "example": "grafana" + }, + "secondsUntilExpiration": { + "type": "number", + "format": "double", + "example": 0 + } + } + }, + "TokenStatus": { + "type": "integer", + "format": "int64" + }, + "Transformation": { + "type": "object", + "properties": { + "expression": { + "type": "string" + }, + "field": { + "type": "string" + }, + "mapValue": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "regex", + "logfmt" + ] + } + } + }, + "Transformations": { + "type": "array", + "items": { + "$ref": "#/definitions/Transformation" + } + }, + "TrimDashboardCommand": { + "type": "object", + "properties": { + "dashboard": { + "$ref": "#/definitions/Json" + }, + "meta": { + "$ref": "#/definitions/Json" + } + } + }, + "TrimDashboardFullWithMeta": { + "type": "object", + "properties": { + "dashboard": { + "$ref": "#/definitions/Json" + }, + "meta": { + "$ref": "#/definitions/Json" + } + } + }, + "Type": { + "type": "string" + }, + "UpdateAlertNotificationCommand": { + "type": "object", + "properties": { + "disableResolveMessage": { + "type": "boolean" + }, + "frequency": { + "type": "string" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "isDefault": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "secureSettings": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "sendReminder": { + "type": "boolean" + }, + "settings": { + "$ref": "#/definitions/Json" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "UpdateAlertNotificationWithUidCommand": { + "type": "object", + "properties": { + "disableResolveMessage": { + "type": "boolean" + }, + "frequency": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "secureSettings": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "sendReminder": { + "type": "boolean" + }, + "settings": { + "$ref": "#/definitions/Json" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "UpdateAnnotationsCmd": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/Json" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "text": { + "type": "string" + }, + "time": { + "type": "integer", + "format": "int64" + }, + "timeEnd": { + "type": "integer", + "format": "int64" + } + } + }, + "UpdateCorrelationCommand": { + "description": "UpdateCorrelationCommand is the command for updating a correlation", + "type": "object", + "properties": { + "config": { + "$ref": "#/definitions/CorrelationConfigUpdateDTO" + }, + "description": { + "description": "Optional description of the correlation", + "type": "string", + "example": "Logs to Traces" + }, + "label": { + "description": "Optional label identifying the correlation", + "type": "string", + "example": "My label" + } + } + }, + "UpdateCorrelationResponseBody": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "Correlation updated" + }, + "result": { + "$ref": "#/definitions/Correlation" + } + } + }, + "UpdateDashboardACLCommand": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/DashboardACLUpdateItem" + } + } + } + }, + "UpdateDataSourceCommand": { + "description": "Also acts as api DTO", + "type": "object", + "properties": { + "access": { + "$ref": "#/definitions/DsAccess" + }, + "basicAuth": { + "type": "boolean" + }, + "basicAuthUser": { + "type": "string" + }, + "database": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "jsonData": { + "$ref": "#/definitions/Json" + }, + "name": { + "type": "string" + }, + "secureJsonData": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "url": { + "type": "string" + }, + "user": { + "type": "string" + }, + "version": { + "type": "integer", + "format": "int64" + }, + "withCredentials": { + "type": "boolean" + } + } + }, + "UpdateFolderCommand": { + "description": "UpdateFolderCommand captures the information required by the folder service\nto update a folder. Use Move to update a folder's parent folder.", + "type": "object", + "properties": { + "description": { + "description": "NewDescription it's an optional parameter used for overriding the existing folder description", + "type": "string" + }, + "overwrite": { + "description": "Overwrite only used by the legacy folder implementation", + "type": "boolean" + }, + "title": { + "description": "NewTitle it's an optional parameter used for overriding the existing folder title", + "type": "string" + }, + "version": { + "description": "Version only used by the legacy folder implementation", + "type": "integer", + "format": "int64" + } + } + }, + "UpdateOrgAddressForm": { + "type": "object", + "properties": { + "address1": { + "type": "string" + }, + "address2": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "state": { + "type": "string" + }, + "zipcode": { + "type": "string" + } + } + }, + "UpdateOrgForm": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, + "UpdateOrgUserCommand": { + "type": "object", + "properties": { + "role": { + "type": "string", + "enum": [ + "None", + "Viewer", + "Editor", + "Admin" + ] + } + } + }, + "UpdatePlaylistCommand": { + "type": "object", + "properties": { + "interval": { + "type": "string" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/PlaylistItem" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "UpdatePrefsCmd": { + "type": "object", + "properties": { + "cookies": { + "type": "array", + "items": { + "$ref": "#/definitions/CookieType" + } + }, + "homeDashboardId": { + "description": "The numerical :id of a favorited dashboard", + "type": "integer", + "format": "int64", + "default": 0 + }, + "homeDashboardUID": { + "type": "string" + }, + "language": { + "type": "string" + }, + "queryHistory": { + "$ref": "#/definitions/QueryHistoryPreference" + }, + "theme": { + "type": "string", + "enum": [ + "light", + "dark", + "system" + ] + }, + "timezone": { + "type": "string", + "enum": [ + "utc", + "browser" + ] + }, + "weekStart": { + "type": "string" + } + } + }, + "UpdateQuotaCmd": { + "type": "object", + "properties": { + "limit": { + "type": "integer", + "format": "int64" + }, + "target": { + "type": "string" + } + } + }, + "UpdateRoleCommand": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "displayName": { + "type": "string" + }, + "global": { + "type": "boolean" + }, + "group": { + "type": "string" + }, + "hidden": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "permissions": { + "type": "array", + "items": { + "$ref": "#/definitions/Permission" + } + }, + "version": { + "type": "integer", + "format": "int64" + } + } + }, + "UpdateServiceAccountForm": { + "type": "object", + "properties": { + "isDisabled": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "role": { + "type": "string", + "enum": [ + "None", + "Viewer", + "Editor", + "Admin" + ] + }, + "serviceAccountId": { + "type": "integer", + "format": "int64" + } + } + }, + "UpdateTeamCommand": { + "type": "object", + "properties": { + "Email": { + "type": "string" + }, + "ID": { + "type": "integer", + "format": "int64" + }, + "Name": { + "type": "string" + } + } + }, + "UpdateTeamMemberCommand": { + "type": "object", + "properties": { + "permission": { + "$ref": "#/definitions/PermissionType" + } + } + }, + "UpdateUserCommand": { + "type": "object", + "properties": { + "email": { + "type": "string" + }, + "login": { + "type": "string" + }, + "name": { + "type": "string" + }, + "theme": { + "type": "string" + } + } + }, + "UserLookupDTO": { + "type": "object", + "properties": { + "avatarUrl": { + "type": "string" + }, + "login": { + "type": "string" + }, + "userId": { + "type": "integer", + "format": "int64" + } + } + }, + "UserOrgDTO": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "orgId": { + "type": "integer", + "format": "int64" + }, + "role": { + "type": "string", + "enum": [ + "None", + "Viewer", + "Editor", + "Admin" + ] + } + } + }, + "UserProfileDTO": { + "type": "object", + "properties": { + "accessControl": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "authLabels": { + "type": "array", + "items": { + "type": "string" + } + }, + "avatarUrl": { + "type": "string" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "email": { + "type": "string" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "isDisabled": { + "type": "boolean" + }, + "isExternal": { + "type": "boolean" + }, + "isExternallySynced": { + "type": "boolean" + }, + "isGrafanaAdmin": { + "type": "boolean" + }, + "isGrafanaAdminExternallySynced": { + "type": "boolean" + }, + "login": { + "type": "string" + }, + "name": { + "type": "string" + }, + "orgId": { + "type": "integer", + "format": "int64" + }, + "theme": { + "type": "string" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + } + } + }, + "UserSearchHitDTO": { + "type": "object", + "properties": { + "authLabels": { + "type": "array", + "items": { + "type": "string" + } + }, + "avatarUrl": { + "type": "string" + }, + "email": { + "type": "string" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "isAdmin": { + "type": "boolean" + }, + "isDisabled": { + "type": "boolean" + }, + "lastSeenAt": { + "type": "string", + "format": "date-time" + }, + "lastSeenAtAge": { + "type": "string" + }, + "login": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "UserToken": { + "description": "UserToken represents a user token", + "type": "object", + "properties": { + "AuthToken": { + "type": "string" + }, + "AuthTokenSeen": { + "type": "boolean" + }, + "ClientIp": { + "type": "string" + }, + "CreatedAt": { + "type": "integer", + "format": "int64" + }, + "Id": { + "type": "integer", + "format": "int64" + }, + "PrevAuthToken": { + "type": "string" + }, + "RevokedAt": { + "type": "integer", + "format": "int64" + }, + "RotatedAt": { + "type": "integer", + "format": "int64" + }, + "SeenAt": { + "type": "integer", + "format": "int64" + }, + "UnhashedToken": { + "type": "string" + }, + "UpdatedAt": { + "type": "integer", + "format": "int64" + }, + "UserAgent": { + "type": "string" + }, + "UserId": { + "type": "integer", + "format": "int64" + } + } + }, + "ValueMapping": { + "description": "ValueMapping allows mapping input values to text and color", + "type": "object" + }, + "ValueMappings": { + "type": "array", + "items": { + "$ref": "#/definitions/ValueMapping" + } + }, + "VisType": { + "type": "string", + "title": "VisType is used to indicate how the data should be visualized in explore." + } + }, + "responses": { + "SMTPNotEnabledError": { + "description": "" + }, + "acceptedResponse": { + "description": "AcceptedResponse", + "schema": { + "$ref": "#/definitions/ErrorResponseBody" + } + }, + "addPermissionResponse": { + "description": "", + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "permissionId": { + "type": "integer", + "format": "int64" + } + } + } + }, + "adminCreateUserResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/AdminCreateUserResponse" + } + }, + "adminGetSettingsResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/SettingsBag" + } + }, + "adminGetStatsResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/AdminStats" + } + }, + "adminGetUserAuthTokensResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/UserToken" + } + } + }, + "badRequestError": { + "description": "BadRequestError is returned when the request is invalid and it cannot be processed.", + "schema": { + "$ref": "#/definitions/ErrorResponseBody" + } + }, + "calculateDashboardDiffResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8" + } + } + }, + "conflictError": { + "description": "ConflictError", + "schema": { + "$ref": "#/definitions/ErrorResponseBody" + } + }, + "contentResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8" + } + } + }, + "createCorrelationResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/CreateCorrelationResponseBody" + } + }, + "createDashboardSnapshotResponse": { + "description": "", + "schema": { + "type": "object", + "properties": { + "deleteKey": { + "description": "Unique key used to delete the snapshot. It is different from the key so that only the creator can delete the snapshot.", + "type": "string" + }, + "deleteUrl": { + "type": "string" + }, + "id": { + "description": "Snapshot id", + "type": "integer", + "format": "int64" + }, + "key": { + "description": "Unique key", + "type": "string" + }, + "url": { + "type": "string" + } + } + } + }, + "createOrUpdateDatasourceResponse": { + "description": "", + "schema": { + "type": "object", + "required": [ + "id", + "name", + "message", + "datasource" + ], + "properties": { + "datasource": { + "$ref": "#/definitions/DataSource" + }, + "id": { + "description": "ID Identifier of the new data source.", + "type": "integer", + "format": "int64", + "example": 65 + }, + "message": { + "description": "Message Message of the deleted dashboard.", + "type": "string", + "example": "Data source added" + }, + "name": { + "description": "Name of the new data source.", + "type": "string", + "example": "My Data source" + } + } + } + }, + "createOrgResponse": { + "description": "", + "schema": { + "type": "object", + "required": [ + "orgId", + "message" + ], + "properties": { + "message": { + "description": "Message Message of the created org.", + "type": "string", + "example": "Data source added" + }, + "orgId": { + "description": "ID Identifier of the created org.", + "type": "integer", + "format": "int64", + "example": 65 + } + } + } + }, + "createPlaylistResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/Playlist" + } + }, + "createReportResponse": { + "description": "", + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "message": { + "type": "string" + } + } + } + }, + "createRoleResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/RoleDTO" + } + }, + "createServiceAccountResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/ServiceAccountDTO" + } + }, + "createTeamResponse": { + "description": "", + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "teamId": { + "type": "integer", + "format": "int64" + } + } + } + }, + "createTokenResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/NewApiKeyResult" + } + }, + "dashboardResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/DashboardFullWithMeta" + } + }, + "dashboardVersionResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/DashboardVersionMeta" + } + }, + "dashboardVersionsResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/DashboardVersionMeta" + } + } + }, + "deleteAlertNotificationChannelResponse": { + "description": "", + "schema": { + "type": "object", + "required": [ + "id", + "message" + ], + "properties": { + "id": { + "description": "ID Identifier of the deleted notification channel.", + "type": "integer", + "format": "int64", + "example": 65 + }, + "message": { + "description": "Message Message of the deleted notificatiton channel.", + "type": "string" + } + } + } + }, + "deleteCorrelationResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/DeleteCorrelationResponseBody" + } + }, + "deleteDashboardResponse": { + "description": "", + "schema": { + "type": "object", + "required": [ + "id", + "title", + "message" + ], + "properties": { + "id": { + "description": "ID Identifier of the deleted dashboard.", + "type": "integer", + "format": "int64", + "example": 65 + }, + "message": { + "description": "Message Message of the deleted dashboard.", + "type": "string", + "example": "Dashboard My Dashboard deleted" + }, + "title": { + "description": "Title Title of the deleted dashboard.", + "type": "string", + "example": "My Dashboard" + } + } + } + }, + "deleteDataSourceByNameResponse": { + "description": "", + "schema": { + "type": "object", + "required": [ + "id", + "message" + ], + "properties": { + "id": { + "description": "ID Identifier of the deleted data source.", + "type": "integer", + "format": "int64", + "example": 65 + }, + "message": { + "description": "Message Message of the deleted dashboard.", + "type": "string", + "example": "Dashboard My Dashboard deleted" + } + } + } + }, + "deleteFolderResponse": { + "description": "", + "schema": { + "type": "object", + "required": [ + "id", + "title", + "message" + ], + "properties": { + "id": { + "description": "ID Identifier of the deleted folder.", + "type": "integer", + "format": "int64", + "example": 65 + }, + "message": { + "description": "Message Message of the deleted folder.", + "type": "string", + "example": "Folder My Folder deleted" + }, + "title": { + "description": "Title of the deleted folder.", + "type": "string", + "example": "My Folder" + } + } + } + }, + "folderResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/Folder" + } + }, + "forbiddenError": { + "description": "ForbiddenError is returned if the user/token has insufficient permissions to access the requested resource.", + "schema": { + "$ref": "#/definitions/ErrorResponseBody" + } + }, + "genericError": { + "description": "A GenericError is the default error message that is generated.\nFor certain status codes there are more appropriate error structures.", + "schema": { + "$ref": "#/definitions/ErrorResponseBody" + } + }, + "getAPIkeyResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/ApiKeyDTO" + } + } + }, + "getAccessControlStatusResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/Status" + } + }, + "getAlertNotificationChannelResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/AlertNotification" + } + }, + "getAlertNotificationChannelsResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/AlertNotification" + } + } + }, + "getAlertNotificationLookupResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/AlertNotificationLookup" + } + } + }, + "getAlertResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/LegacyAlert" + } + }, + "getAlertsResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/AlertListItemDTO" + } + } + }, + "getAllPermissionseResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/DataSourcePermissionsDTO" + } + }, + "getAllRolesResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/RoleDTO" + } + } + }, + "getAnnotationByIDResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/ItemDTO" + } + }, + "getAnnotationTagsResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/GetAnnotationTagsResponse" + } + }, + "getAnnotationsResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/ItemDTO" + } + } + }, + "getCorrelationResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/Correlation" + } + }, + "getCorrelationsBySourceUIDResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Correlation" + } + } + }, + "getCorrelationsResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Correlation" + } + } + }, + "getCurrentOrgResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/OrgDetailsDTO" + } + }, + "getCustomPermissionsReportResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/CustomPermissionsRecordDTO" + } + } + }, + "getDashboardPermissionsListResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/DashboardACLInfoDTO" + } + } + }, + "getDashboardSnapshotResponse": { + "description": "" + }, + "getDashboardStatesResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/AlertStateInfoDTO" + } + } + }, + "getDashboardsTagsResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/DashboardTagCloudItem" + } + } + }, + "getDataSourceIDResponse": { + "description": "", + "schema": { + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "description": "ID Identifier of the data source.", + "type": "integer", + "format": "int64", + "example": 65 + } + } + } + }, + "getDataSourceResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/DataSource" + } + }, + "getDataSourcesResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/DataSourceList" + } + }, + "getFolderDescendantCountsResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/DescendantCounts" + } + }, + "getFolderPermissionListResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/DashboardACLInfoDTO" + } + } + }, + "getFoldersResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/FolderSearchHit" + } + } + }, + "getHomeDashboardResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/GetHomeDashboardResponse" + } + }, + "getLibraryElementConnectionsResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/LibraryElementConnectionsResponse" + } + }, + "getLibraryElementResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/LibraryElementResponse" + } + }, + "getLibraryElementsResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/LibraryElementSearchResponse" + } + }, + "getLicenseTokenResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/Token" + } + }, + "getOrgByIDResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/OrgDetailsDTO" + } + }, + "getOrgByNameResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/OrgDetailsDTO" + } + }, + "getOrgUsersForCurrentOrgLookupResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/UserLookupDTO" + } + } + }, + "getOrgUsersForCurrentOrgResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/OrgUserDTO" + } + } + }, + "getOrgUsersResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/OrgUserDTO" + } + } + }, + "getPendingOrgInvitesResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/TempUserDTO" + } + } + }, + "getPlaylistDashboardsResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/PlaylistDashboardsSlice" + } + }, + "getPlaylistItemsResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Item" + } + } + }, + "getPlaylistResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/Spec" + } + }, + "getPreferencesResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/Spec" + } + }, + "getQueryHistoryDeleteQueryResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/QueryHistoryDeleteQueryResponse" + } + }, + "getQueryHistoryResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/QueryHistoryResponse" + } + }, + "getQueryHistorySearchResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/QueryHistorySearchResponse" + } + }, + "getQuotaResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/QuotaDTO" + } + } + }, + "getReportResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/ConfigDTO" + } + }, + "getReportSettingsResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/SettingsDTO" + } + }, + "getReportsResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/ConfigDTO" + } + } + }, + "getRoleAssignmentsResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/RoleAssignmentsDTO" + } + }, + "getRoleResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/RoleDTO" + } + }, + "getSharingOptionsResponse": { + "description": "", + "schema": { + "type": "object", + "properties": { + "externalEnabled": { + "type": "boolean" + }, + "externalSnapshotName": { + "type": "string" + }, + "externalSnapshotURL": { + "type": "string" + } + } + } + }, + "getSignedInUserOrgListResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/UserOrgDTO" + } + } + }, + "getSignedInUserTeamListResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/TeamDTO" + } + } + }, + "getStatusResponse": { + "description": "" + }, + "getSyncStatusResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/ActiveSyncStatusDTO" + } + }, + "getTeamByIDResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/TeamDTO" + } + }, + "getTeamGroupsApiResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/TeamGroupDTO" + } + } + }, + "getTeamMembersResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/TeamMemberDTO" + } + } + }, + "getUserAuthTokensResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/UserToken" + } + } + }, + "getUserOrgListResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/UserOrgDTO" + } + } + }, + "getUserTeamsResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/TeamDTO" + } + } + }, + "helpFlagResponse": { + "description": "", + "schema": { + "type": "object", + "properties": { + "helpFlags1": { + "type": "integer", + "format": "int64" + }, + "message": { + "type": "string" + } + } + } + }, + "importDashboardResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/ImportDashboardResponse" + } + }, + "internalServerError": { + "description": "InternalServerError is a general error indicating something went wrong internally.", + "schema": { + "$ref": "#/definitions/ErrorResponseBody" + } + }, + "listBuiltinRolesResponse": { + "description": "", + "schema": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/definitions/RoleDTO" + } + } + } + }, + "listRecordingRulesResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/RecordingRuleJSON" + } + } + }, + "listRolesResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/RoleDTO" + } + } + }, + "listSortOptionsResponse": { + "description": "", + "schema": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "displayName": { + "type": "string" + }, + "meta": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + }, + "listTokensResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/TokenDTO" + } + }, + "notFoundError": { + "description": "NotFoundError is returned when the requested resource was not found.", + "schema": { + "$ref": "#/definitions/ErrorResponseBody" + } + }, + "okResponse": { + "description": "An OKResponse is returned if the request was successful.", + "schema": { + "$ref": "#/definitions/SuccessResponseBody" + } + }, + "pauseAlertResponse": { + "description": "", + "schema": { + "type": "object", + "required": [ + "alertId", + "message" + ], + "properties": { + "alertId": { + "type": "integer", + "format": "int64" + }, + "message": { + "type": "string" + }, + "state": { + "description": "Alert result state\nrequired true", + "type": "string" + } + } + } + }, + "pauseAlertsResponse": { + "description": "", + "schema": { + "type": "object", + "required": [ + "alertsAffected", + "message" + ], + "properties": { + "alertsAffected": { + "description": "AlertsAffected is the number of the affected alerts.", + "type": "integer", + "format": "int64" + }, + "message": { + "type": "string" + }, + "state": { + "description": "Alert result state\nrequired true", + "type": "string" + } + } + } + }, + "postAPIkeyResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/NewApiKeyResult" + } + }, + "postAnnotationResponse": { + "description": "", + "schema": { + "type": "object", + "required": [ + "id", + "message" + ], + "properties": { + "id": { + "description": "ID Identifier of the created annotation.", + "type": "integer", + "format": "int64", + "example": 65 + }, + "message": { + "description": "Message Message of the created annotation.", + "type": "string" + } + } + } + }, + "postDashboardResponse": { + "description": "", + "schema": { + "type": "object", + "required": [ + "status", + "title", + "version", + "id", + "uid", + "url" + ], + "properties": { + "id": { + "description": "ID The unique identifier (id) of the created/updated dashboard.", + "type": "string", + "example": "1" + }, + "status": { + "description": "Status status of the response.", + "type": "string", + "example": "success" + }, + "title": { + "description": "Slug The slug of the dashboard.", + "type": "string", + "example": "my-dashboard" + }, + "uid": { + "description": "UID The unique identifier (uid) of the created/updated dashboard.", + "type": "string", + "example": "nHz3SXiiz" + }, + "url": { + "description": "URL The relative URL for accessing the created/updated dashboard.", + "type": "string", + "example": "/d/nHz3SXiiz/my-dashboard" + }, + "version": { + "description": "Version The version of the dashboard.", + "type": "integer", + "format": "int64", + "example": 2 + } + } + } + }, + "postRenewLicenseTokenResponse": { + "description": "" + }, + "preconditionFailedError": { + "description": "PreconditionFailedError", + "schema": { + "$ref": "#/definitions/ErrorResponseBody" + } + }, + "queryMetricsWithExpressionsRespons": { + "description": "", + "schema": { + "$ref": "#/definitions/QueryDataResponse" + } + }, + "recordingRuleResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/RecordingRuleJSON" + } + }, + "recordingRuleWriteTargetResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/PrometheusRemoteWriteTargetJSON" + } + }, + "refreshLicenseStatsResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/ActiveUserStats" + } + }, + "retrieveServiceAccountResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/ServiceAccountDTO" + } + }, + "searchDashboardSnapshotsResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/DashboardSnapshotDTO" + } + } + }, + "searchOrgServiceAccountsWithPagingResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/SearchOrgServiceAccountsResult" + } + }, + "searchOrgUsersResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/SearchOrgUsersQueryResult" + } + }, + "searchOrgsResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/OrgDTO" + } + } + }, + "searchPlaylistsResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/Playlists" + } + }, + "searchResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/HitList" + } + }, + "searchResultResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/SearchResult" + } + }, + "searchTeamsResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/SearchTeamQueryResult" + } + }, + "searchUsersResponse": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/UserSearchHitDTO" + } + } + }, + "searchUsersWithPagingResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/SearchUserQueryResult" + } + }, + "setRoleAssignmentsResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/RoleAssignmentsDTO" + } + }, + "testAlertResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/AlertTestResult" + } + }, + "trimDashboardResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/TrimDashboardFullWithMeta" + } + }, + "unauthorisedError": { + "description": "UnauthorizedError is returned when the request is not authenticated.", + "schema": { + "$ref": "#/definitions/ErrorResponseBody" + } + }, + "unprocessableEntityError": { + "description": "UnprocessableEntityError", + "schema": { + "$ref": "#/definitions/ErrorResponseBody" + } + }, + "updateCorrelationResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/UpdateCorrelationResponseBody" + } + }, + "updatePlaylistResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/Spec" + } + }, + "updateServiceAccountResponse": { + "description": "", + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "serviceaccount": { + "$ref": "#/definitions/ServiceAccountProfileDTO" + } + } + } + }, + "userResponse": { + "description": "", + "schema": { + "$ref": "#/definitions/UserProfileDTO" + } + }, + "validateDashboardResponse": { + "description": "", + "headers": { + "isValid": { + "type": "boolean" + }, + "message": { + "type": "string" + } + } + } + }, + "securityDefinitions": { + "api_key": { + "type": "apiKey", + "name": "Authorization", + "in": "header" + }, + "basic": { + "type": "basic" + } + }, + "security": [ + { + "basic": [] + }, + { + "api_key": [] + } + ], + "tags": [ + { + "description": "If you are running Grafana Enterprise and have Fine-grained access control enabled, for some endpoints you would need to have relevant permissions. Refer to specific resources to understand what permissions are required.", + "name": "datasources" + }, + { + "description": "Folders are identified by the identifier (id) and the unique identifier (uid).\nThe identifier (id) of a folder is an auto-incrementing numeric value and is only unique per Grafana install.\nThe unique identifier (uid) of a folder can be used for uniquely identify folders between multiple Grafana installs. It’s automatically generated if not provided when creating a folder. The uid allows having consistent URLs for accessing folders and when syncing folders between multiple Grafana installs. This means that changing the title of a folder will not break any bookmarked links to that folder.\nThe uid can have a maximum length of 40 characters.", + "name": "folders" + }, + { + "description": "Permissions with `folderId=-1` are the default permissions for users with the Viewer and Editor roles. Permissions can be set for a user, a team or a role (Viewer or Editor). Permissions cannot be set for Admins - they always have access to everything.", + "name": "folder_permissions" + }, + { + "description": "The Admin HTTP API does not currently work with an API Token. API Tokens are currently only linked to an organization and an organization role. They cannot be given the permission of server admin, only users can be given that permission. So in order to use these API calls you will have to use Basic Auth and the Grafana user must have the Grafana Admin permission. (The default admin user is called admin and has permission to use this API.)", + "name": "admin" + }, + { + "description": "You can use the Alerting API to get information about legacy dashboard alerts and their states but this API cannot be used to modify the alert. To create new alerts or modify them you need to update the dashboard JSON that contains the alerts.\nThis topic is relevant for the legacy dashboard alerts only.\nYou can find Grafana 8 alerts API specification details [here](https://editor.swagger.io/?url=https://raw.githubusercontent.com/grafana/grafana/main/pkg/services/ngalert/api/tooling/post.json).", + "name": "legacy_alerts" + }, + { + "description": "The identifier (id) of a notification channel is an auto-incrementing numeric value and is only unique per Grafana install.\nThe unique identifier (uid) of a notification channel can be used for uniquely identify a notification channel between multiple Grafana installs. It’s automatically generated if not provided when creating a notification channel. The uid allows having consistent URLs for accessing notification channels and when syncing notification channels between multiple Grafana installations, refer to alert notification channel provisioning.\nThe uid can have a maximum length of 40 characters.", + "name": "legacy_alerts_notification_channels" + }, + { + "description": "Grafana Annotations feature released in Grafana 4.6. Annotations are saved in the Grafana database (sqlite, mysql or postgres). Annotations can be organization annotations that can be shown on any dashboard by configuring an annotation data source - they are filtered by tags. Or they can be tied to a panel on a dashboard and are then only shown on that panel.", + "name": "annotations" + }, + { + "description": "The identifier (ID) of a library element is an auto-incrementing numeric value that is unique per Grafana install.\nThe unique identifier (UID) of a library element uniquely identifies library elements between multiple Grafana installs. It’s automatically generated unless you specify it during library element creation. The UID provides consistent URLs for accessing library elements and when syncing library elements between multiple Grafana installs.\nThe maximum length of a UID is 40 characters.", + "name": "library_elements" + }, + { + "description": "The identifier (ID) of a query in query history is an auto-incrementing numeric value that is unique per Grafana install.\nThe unique identifier (UID) of a query history uniquely identifies queries in query history between multiple Grafana installs. It’s automatically generated. The UID provides consistent URLs for accessing queries in query history.", + "name": "query_history" + }, + { + "description": "The Admin Organizations HTTP API does not currently work with an API Token. API Tokens are currently only linked to an organization and an organization role. They cannot be given the permission of server admin, only users can be given that permission. So in order to use these API calls you will have to use Basic Auth and the Grafana user must have the Grafana Admin permission (The default admin user is called `admin` and has permission to use this API).", + "name": "orgs" + }, + { + "description": "If you are running Grafana Enterprise and have Fine-grained access control enabled, for some endpoints you would need to have relevant permissions. Refer to specific resources to understand what permissions are required.", + "name": "org" + }, + { + "description": "This API can be used to create/update/delete Teams and to add/remove users to Teams. All actions require that the user has the Admin role for the organization.", + "name": "teams" + }, + { + "description": "This API can be used to enable, disable, list, add and remove permissions for a data source.\nPermissions can be set for a user or a team. Permissions cannot be set for Admins - they always have access to everything.\nThis is only available in Grafana Enterprise\nIf you are running Grafana Enterprise and have Fine-grained access control enabled, for some endpoints you would need to have relevant permissions. Refer to specific resources to understand what permissions are required.", + "name": "datasource_permissions" + }, + { + "description": "These are only available in Grafana Enterprise", + "name": "enterprise" + }, + { + "description": "The API can be used to create, update, get and list roles, and create or remove built-in role assignments. To use the API, you would need to enable fine-grained access control.\nThis only available in Grafana Enterprise.\nThe API does not currently work with an API Token. So in order to use these API endpoints you will have to use Basic auth.", + "name": "access_control" + }, + { + "description": "Licensing is only available in Grafana Enterprise. Read more about Grafana Enterprise.\nIf you are running Grafana Enterprise and have Fine-grained access control enabled, for some endpoints you would need to have relevant permissions. Refer to specific resources to understand what permissions are required.", + "name": "licensing" + }, + { + "description": "This API allows you to interact programmatically with the Reporting feature.\nReporting is only available in Grafana Enterprise. Read more about Grafana Enterprise.\nIf you have Fine-grained access Control enabled, for some endpoints you would need to have relevant permissions. Refer to specific resources to understand what permissions are required.", + "name": "reports" + }, + { + "description": "Grafana Alerting Alertmanager-compatible endpoints", + "name": "alertmanager" + }, + { + "description": "Grafana Alerting endpoints for managing rules", + "name": "ruler" + }, + { + "description": "Grafana Alerting testing endpoints", + "name": "testing" + }, + { + "description": "Grafana Alerting Prometheus-compatible endpoints", + "name": "prometheus" + }, + { + "description": "If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions](https://grafana.com/docs/grafana/latest/administration/roles-and-permissions/access-control/custom-role-actions-scopes/) for more information.", + "name": "service_accounts" + } + ] +} \ No newline at end of file diff --git a/public/api-merged.json b/public/api-merged.json index 5d45caf2b53..25228fd5a18 100644 --- a/public/api-merged.json +++ b/public/api-merged.json @@ -2543,16 +2543,25 @@ "in": "query" }, { - "type": "string", - "description": "UID of folder from which export rules", + "type": "array", + "items": { + "type": "string" + }, + "description": "UIDs of folders from which to export rules", "name": "folderUid", "in": "query" }, { "type": "string", - "description": "Name of group of rules to export. Must be specified only together with folder UID", + "description": "Name of group of rules to export. Must be specified only together with a single folder UID", "name": "group", "in": "query" + }, + { + "type": "string", + "description": "UID of alert rule to export. If specified, parameters folderUid and group must be empty.", + "name": "ruleUid", + "in": "query" } ], "responses": { @@ -12196,6 +12205,10 @@ "format": "int64", "example": 1 }, + "provisioned": { + "description": "Provisioned True if the correlation was created during provisioning", + "type": "boolean" + }, "sourceUID": { "description": "UID of the data source the correlation originates from", "type": "string", @@ -12343,6 +12356,10 @@ "type": "string", "example": "My label" }, + "provisioned": { + "description": "True if correlation was created with provisioning. This makes it read-only.", + "type": "boolean" + }, "targetUID": { "description": "Target data source UID to which the correlation is created. required if config.type = query", "type": "string", @@ -13434,6 +13451,9 @@ "uid": { "description": "UID is the unique identifier of the contact point. The UID can be\nset by the user.", "type": "string", + "maxLength": 40, + "minLength": 1, + "pattern": "^[a-zA-Z0-9\\-\\_]+$", "example": "my_external_reference" } } @@ -18888,9 +18908,8 @@ "type": "string" }, "URL": { - "description": "The general form represented is:\n\n[scheme:][//[userinfo@]host][/]path[?query][#fragment]\n\nURLs that do not start with a slash after the scheme are interpreted as:\n\nscheme:opaque[?query][#fragment]\n\nNote that the Path field is stored in decoded form: /%47%6f%2f becomes /Go/.\nA consequence is that it is impossible to tell which slashes in the Path were\nslashes in the raw URL and which were %2f. This distinction is rarely important,\nbut when it is, the code should use the EscapedPath method, which preserves\nthe original encoding of Path.\n\nThe RawPath field is an optional field which is only set when the default\nencoding of Path is different from the escaped path. See the EscapedPath method\nfor more details.\n\nURL's String method uses the EscapedPath method to obtain the path.", "type": "object", - "title": "A URL represents a parsed URL (technically, a URI reference).", + "title": "URL is a custom URL type that allows validation at configuration load time.", "properties": { "ForceQuery": { "type": "boolean" @@ -19733,6 +19752,7 @@ } }, "alertGroup": { + "description": "AlertGroup alert group", "type": "object", "required": [ "alerts", @@ -19756,7 +19776,6 @@ } }, "alertGroups": { - "description": "AlertGroups alert groups", "type": "array", "items": { "$ref": "#/definitions/alertGroup" @@ -19861,6 +19880,7 @@ } }, "gettableAlert": { + "description": "GettableAlert gettable alert", "type": "object", "required": [ "labels", @@ -19916,6 +19936,7 @@ } }, "gettableAlerts": { + "description": "GettableAlerts gettable alerts", "type": "array", "items": { "$ref": "#/definitions/gettableAlert" @@ -19971,14 +19992,12 @@ } }, "gettableSilences": { - "description": "GettableSilences gettable silences", "type": "array", "items": { "$ref": "#/definitions/gettableSilence" } }, "integration": { - "description": "Integration integration", "type": "object", "required": [ "name", @@ -20160,7 +20179,6 @@ } }, "receiver": { - "description": "Receiver receiver", "type": "object", "required": [ "active", diff --git a/public/openapi3.json b/public/openapi3.json index 88c242d4684..d01cd4911ce 100644 --- a/public/openapi3.json +++ b/public/openapi3.json @@ -3197,6 +3197,10 @@ "format": "int64", "type": "integer" }, + "provisioned": { + "description": "Provisioned True if the correlation was created during provisioning", + "type": "boolean" + }, "sourceUID": { "description": "UID of the data source the correlation originates from", "example": "d0oxYRg4z", @@ -3344,6 +3348,10 @@ "example": "My label", "type": "string" }, + "provisioned": { + "description": "True if correlation was created with provisioning. This makes it read-only.", + "type": "boolean" + }, "targetUID": { "description": "Target data source UID to which the correlation is created. required if config.type = query", "example": "PE1C5CBDA0504A6A3", @@ -4431,6 +4439,9 @@ "uid": { "description": "UID is the unique identifier of the contact point. The UID can be\nset by the user.", "example": "my_external_reference", + "maxLength": 40, + "minLength": 1, + "pattern": "^[a-zA-Z0-9\\-\\_]+$", "type": "string" } }, @@ -9888,7 +9899,6 @@ "type": "string" }, "URL": { - "description": "The general form represented is:\n\n[scheme:][//[userinfo@]host][/]path[?query][#fragment]\n\nURLs that do not start with a slash after the scheme are interpreted as:\n\nscheme:opaque[?query][#fragment]\n\nNote that the Path field is stored in decoded form: /%47%6f%2f becomes /Go/.\nA consequence is that it is impossible to tell which slashes in the Path were\nslashes in the raw URL and which were %2f. This distinction is rarely important,\nbut when it is, the code should use the EscapedPath method, which preserves\nthe original encoding of Path.\n\nThe RawPath field is an optional field which is only set when the default\nencoding of Path is different from the escaped path. See the EscapedPath method\nfor more details.\n\nURL's String method uses the EscapedPath method to obtain the path.", "properties": { "ForceQuery": { "type": "boolean" @@ -9924,7 +9934,7 @@ "$ref": "#/components/schemas/Userinfo" } }, - "title": "A URL represents a parsed URL (technically, a URI reference).", + "title": "URL is a custom URL type that allows validation at configuration load time.", "type": "object" }, "UpdateAlertNotificationCommand": { @@ -10733,6 +10743,7 @@ "type": "object" }, "alertGroup": { + "description": "AlertGroup alert group", "properties": { "alerts": { "description": "alerts", @@ -10756,7 +10767,6 @@ "type": "object" }, "alertGroups": { - "description": "AlertGroups alert groups", "items": { "$ref": "#/components/schemas/alertGroup" }, @@ -10861,6 +10871,7 @@ "type": "object" }, "gettableAlert": { + "description": "GettableAlert gettable alert", "properties": { "annotations": { "$ref": "#/components/schemas/labelSet" @@ -10916,6 +10927,7 @@ "type": "object" }, "gettableAlerts": { + "description": "GettableAlerts gettable alerts", "items": { "$ref": "#/components/schemas/gettableAlert" }, @@ -10971,14 +10983,12 @@ "type": "object" }, "gettableSilences": { - "description": "GettableSilences gettable silences", "items": { "$ref": "#/components/schemas/gettableSilence" }, "type": "array" }, "integration": { - "description": "Integration integration", "properties": { "lastNotifyAttempt": { "description": "A timestamp indicating the last attempt to deliver a notification regardless of the outcome.\nFormat: date-time", @@ -11160,7 +11170,6 @@ "type": "object" }, "receiver": { - "description": "Receiver receiver", "properties": { "active": { "description": "active", @@ -14013,17 +14022,28 @@ } }, { - "description": "UID of folder from which export rules", + "description": "UIDs of folders from which to export rules", "in": "query", "name": "folderUid", + "schema": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + { + "description": "Name of group of rules to export. Must be specified only together with a single folder UID", + "in": "query", + "name": "group", "schema": { "type": "string" } }, { - "description": "Name of group of rules to export. Must be specified only together with folder UID", + "description": "UID of alert rule to export. If specified, parameters folderUid and group must be empty.", "in": "query", - "name": "group", + "name": "ruleUid", "schema": { "type": "string" } diff --git a/scripts/drone/steps/lib.star b/scripts/drone/steps/lib.star index c30de36c6d4..80f15770d46 100644 --- a/scripts/drone/steps/lib.star +++ b/scripts/drone/steps/lib.star @@ -232,7 +232,7 @@ def validate_openapi_spec_step(): "image": images["go"], "commands": [ "apk add --update make", - "make validate-api-spec", + "make swagger-validate", ], }