mirror of https://github.com/grafana/grafana.git
				
				
				
			Grafana Indexing PoC: Adds feature flag and gRPC endpoint (#93356)
* adds Filter gRPC and make protobuf * adds route for querying the filter gRPC * wires up Filter gRPC call * [WIP] index from start * renames gRPC endpoint to "Search" * adds /apis/search route into k8s routes. Hacky for now. * updates readme - wrong casing * adds feature toggle for unified storage search * hides US search behind feature flag. Clean up print statements. * removes indexer - will be added in another PR * Search: Add API Builder * adds required method * implementing UpdateAPIGroupInfo (WIP) * adds groupversion * commenting out for now * remove unneeded code from experimenting and update register.go to match interface required * namespaces search route --------- Co-authored-by: leonorfmartins <leonorfmartins@gmail.com> Co-authored-by: Todd Treece <todd.treece@grafana.com>
This commit is contained in:
		
							parent
							
								
									cebcb38df2
								
							
						
					
					
						commit
						6a3eb276ef
					
				
							
								
								
									
										8
									
								
								go.mod
								
								
								
								
							
							
						
						
									
										8
									
								
								go.mod
								
								
								
								
							|  | @ -225,7 +225,7 @@ require ( | |||
| 	github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c // indirect | ||||
| 	github.com/Masterminds/goutils v1.1.1 // indirect | ||||
| 	github.com/NYTimes/gziphandler v1.1.1 // indirect | ||||
| 	github.com/RoaringBitmap/roaring v0.9.4 // indirect | ||||
| 	github.com/RoaringBitmap/roaring v1.9.3 // indirect | ||||
| 	github.com/agext/levenshtein v1.2.1 // indirect | ||||
| 	github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 // indirect | ||||
| 	github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a // indirect | ||||
|  | @ -239,12 +239,12 @@ require ( | |||
| 	github.com/bahlo/generic-list-go v0.2.0 // indirect | ||||
| 	github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3 // indirect | ||||
| 	github.com/beorn7/perks v1.0.1 // indirect | ||||
| 	github.com/bits-and-blooms/bitset v1.2.0 // indirect | ||||
| 	github.com/bits-and-blooms/bitset v1.12.0 // indirect | ||||
| 	github.com/blevesearch/go-porterstemmer v1.0.3 // indirect | ||||
| 	github.com/blevesearch/mmap-go v1.0.4 // indirect | ||||
| 	github.com/blevesearch/segment v0.9.0 // indirect | ||||
| 	github.com/blevesearch/segment v0.9.1 // indirect | ||||
| 	github.com/blevesearch/snowballstem v0.9.0 // indirect | ||||
| 	github.com/blevesearch/vellum v1.0.7 // indirect | ||||
| 	github.com/blevesearch/vellum v1.0.10 // indirect | ||||
| 	github.com/blugelabs/ice v1.0.0 // indirect | ||||
| 	github.com/bufbuild/protocompile v0.4.0 // indirect | ||||
| 	github.com/buger/jsonparser v1.1.1 // indirect | ||||
|  |  | |||
							
								
								
									
										15
									
								
								go.sum
								
								
								
								
							
							
						
						
									
										15
									
								
								go.sum
								
								
								
								
							|  | @ -1466,8 +1466,8 @@ github.com/RaveNoX/go-jsoncommentstrip v1.0.0/go.mod h1:78ihd09MekBnJnxpICcwzCMz | |||
| github.com/RoaringBitmap/gocroaring v0.4.0/go.mod h1:NieMwz7ZqwU2DD73/vvYwv7r4eWBKuPVSXZIpsaMwCI= | ||||
| github.com/RoaringBitmap/real-roaring-datasets v0.0.0-20190726190000-eb7c87156f76/go.mod h1:oM0MHmQ3nDsq609SS36p+oYbRi16+oVvU2Bw4Ipv0SE= | ||||
| github.com/RoaringBitmap/roaring v0.9.1/go.mod h1:h1B7iIUOmnAeb5ytYMvnHJwxMc6LUrwBnzXWRuqTQUc= | ||||
| github.com/RoaringBitmap/roaring v0.9.4 h1:ckvZSX5gwCRaJYBNe7syNawCU5oruY9gQmjXlp4riwo= | ||||
| github.com/RoaringBitmap/roaring v0.9.4/go.mod h1:icnadbWcNyfEHlYdr+tDlOTih1Bf/h+rzPpv4sbomAA= | ||||
| github.com/RoaringBitmap/roaring v1.9.3 h1:t4EbC5qQwnisr5PrP9nt0IRhRTb9gMUgQF4t4S2OByM= | ||||
| github.com/RoaringBitmap/roaring v1.9.3/go.mod h1:6AXUsoIEzDTFFQCe1RbGA6uFONMhvejWj5rqITANK90= | ||||
| github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= | ||||
| github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= | ||||
| github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= | ||||
|  | @ -1614,23 +1614,24 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= | |||
| github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= | ||||
| github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= | ||||
| github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= | ||||
| github.com/bits-and-blooms/bitset v1.2.0 h1:Kn4yilvwNtMACtf1eYDlG8H77R07mZSPbMjLyS07ChA= | ||||
| github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= | ||||
| github.com/bits-and-blooms/bitset v1.12.0 h1:U/q1fAF7xXRhFCrhROzIfffYnu+dlS38vCZtmFVPHmA= | ||||
| github.com/bits-and-blooms/bitset v1.12.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= | ||||
| github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= | ||||
| github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= | ||||
| github.com/blevesearch/go-porterstemmer v1.0.3 h1:GtmsqID0aZdCSNiY8SkuPJ12pD4jI+DdXTAn4YRcHCo= | ||||
| github.com/blevesearch/go-porterstemmer v1.0.3/go.mod h1:angGc5Ht+k2xhJdZi511LtmxuEf0OVpvUUNrwmM1P7M= | ||||
| github.com/blevesearch/mmap-go v1.0.2/go.mod h1:ol2qBqYaOUsGdm7aRMRrYGgPvnwLe6Y+7LMvAB5IbSA= | ||||
| github.com/blevesearch/mmap-go v1.0.3/go.mod h1:pYvKl/grLQrBxuaRYgoTssa4rVujYYeenDp++2E+yvs= | ||||
| github.com/blevesearch/mmap-go v1.0.4 h1:OVhDhT5B/M1HNPpYPBKIEJaD0F3Si+CrEKULGCDPWmc= | ||||
| github.com/blevesearch/mmap-go v1.0.4/go.mod h1:EWmEAOmdAS9z/pi/+Toxu99DnsbhG1TIxUoRmJw/pSs= | ||||
| github.com/blevesearch/segment v0.9.0 h1:5lG7yBCx98or7gK2cHMKPukPZ/31Kag7nONpoBt22Ac= | ||||
| github.com/blevesearch/segment v0.9.0/go.mod h1:9PfHYUdQCgHktBgvtUOF4x+pc4/l8rdH0u5spnW85UQ= | ||||
| github.com/blevesearch/segment v0.9.1 h1:+dThDy+Lvgj5JMxhmOVlgFfkUtZV2kw49xax4+jTfSU= | ||||
| github.com/blevesearch/segment v0.9.1/go.mod h1:zN21iLm7+GnBHWTao9I+Au/7MBiL8pPFtJBJTsk6kQw= | ||||
| github.com/blevesearch/snowballstem v0.9.0 h1:lMQ189YspGP6sXvZQ4WZ+MLawfV8wOmPoD/iWeNXm8s= | ||||
| github.com/blevesearch/snowballstem v0.9.0/go.mod h1:PivSj3JMc8WuaFkTSRDW2SlrulNWPl4ABg1tC/hlgLs= | ||||
| github.com/blevesearch/vellum v1.0.5/go.mod h1:atE0EH3fvk43zzS7t1YNdNC7DbmcC3uz+eMD5xZ2OyQ= | ||||
| github.com/blevesearch/vellum v1.0.7 h1:+vn8rfyCRHxKVRgDLeR0FAXej2+6mEb5Q15aQE/XESQ= | ||||
| github.com/blevesearch/vellum v1.0.7/go.mod h1:doBZpmRhwTsASB4QdUZANlJvqVAUdUyX0ZK7QJCTeBE= | ||||
| github.com/blevesearch/vellum v1.0.10 h1:HGPJDT2bTva12hrHepVT3rOyIKFFF4t7Gf6yMxyMIPI= | ||||
| github.com/blevesearch/vellum v1.0.10/go.mod h1:ul1oT0FhSMDIExNjIxHqJoGpVrBpKCdgDQNxfqgJt7k= | ||||
| github.com/blugelabs/bluge v0.1.9 h1:bPgXlcsWugrXNjzeoLdOnvfJpHsyODKpYaAndayl/SM= | ||||
| github.com/blugelabs/bluge v0.1.9/go.mod h1:5d7LktUkQgvbh5Bmi6tPWtvo4+6uRTm6gAwP+5z6FqQ= | ||||
| github.com/blugelabs/bluge_segment_api v0.2.0 h1:cCX1Y2y8v0LZ7+EEJ6gH7dW6TtVTW4RhG0vp3R+N2Lo= | ||||
|  |  | |||
							
								
								
									
										33
									
								
								go.work.sum
								
								
								
								
							
							
						
						
									
										33
									
								
								go.work.sum
								
								
								
								
							|  | @ -308,6 +308,8 @@ github.com/PuerkitoBio/goquery v1.8.1/go.mod h1:Q8ICL1kNUJ2sXGoAhPGUdYDJvgQgHzJs | |||
| github.com/RaveNoX/go-jsoncommentstrip v1.0.0 h1:t527LHHE3HmiHrq74QMpNPZpGCIJzTx+apLkMKt4HC0= | ||||
| github.com/RoaringBitmap/gocroaring v0.4.0 h1:5nufXUgWpBEUNEJXw7926YAA58ZAQRpWPrQV1xCoSjc= | ||||
| github.com/RoaringBitmap/real-roaring-datasets v0.0.0-20190726190000-eb7c87156f76 h1:ZYlhPbqQFU+AHfgtCdHGDTtRW1a8geZyiE8c6Q+Sl1s= | ||||
| github.com/RoaringBitmap/roaring v0.9.4 h1:ckvZSX5gwCRaJYBNe7syNawCU5oruY9gQmjXlp4riwo= | ||||
| github.com/RoaringBitmap/roaring v0.9.4/go.mod h1:icnadbWcNyfEHlYdr+tDlOTih1Bf/h+rzPpv4sbomAA= | ||||
| github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06 h1:KkH3I3sJuOLP3TjA/dfr4NAY8bghDwnXiU7cTKxQqo0= | ||||
| github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06/go.mod h1:7erjKLwalezA0k99cWs5L11HWOAPNjdUZ6RxH1BXbbM= | ||||
| github.com/Shopify/sarama v1.19.0 h1:9oksLxC6uxVPHPVYUmq6xhr1BOF/hHobWH2UzO67z1s= | ||||
|  | @ -333,6 +335,8 @@ github.com/alexflint/go-scalar v1.0.0 h1:NGupf1XV/Xb04wXskDFzS0KWOLH632W/EO4fAFi | |||
| github.com/alexflint/go-scalar v1.0.0/go.mod h1:GpHzbCOZXEKMEcygYQ5n/aa4Aq84zbxjy3MxYW0gjYw= | ||||
| github.com/alicebob/miniredis v2.5.0+incompatible h1:yBHoLpsyjupjz3NL3MhKMVkR41j82Yjf3KFv7ApYzUI= | ||||
| github.com/alicebob/miniredis v2.5.0+incompatible/go.mod h1:8HZjEj4yU0dwhYHky+DxYx+6BMjkBbe5ONFIF1MXffk= | ||||
| github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= | ||||
| github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= | ||||
| github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c= | ||||
| github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA= | ||||
| github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg= | ||||
|  | @ -368,6 +372,19 @@ github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuP | |||
| github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= | ||||
| github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= | ||||
| github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 h1:mXoPYz/Ul5HYEDvkta6I8/rnYM5gSdSV2tJ6XbZuEtY= | ||||
| github.com/bits-and-blooms/bitset v1.2.0 h1:Kn4yilvwNtMACtf1eYDlG8H77R07mZSPbMjLyS07ChA= | ||||
| github.com/blevesearch/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:kDy+zgJFJJoJYBvdfBSiZYBbdsUL0XcjHYWezpQBGPA= | ||||
| github.com/blevesearch/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:9eJDeqxJ3E7WnLebQUlPD7ZjSce7AnDb9vjGmMCbD0A= | ||||
| github.com/blevesearch/goleveldb v1.0.1 h1:iAtV2Cu5s0GD1lwUiekkFHe2gTMCCNVj2foPclDLIFI= | ||||
| github.com/blevesearch/goleveldb v1.0.1/go.mod h1:WrU8ltZbIp0wAoig/MHbrPCXSOLpe79nz5lv5nqfYrQ= | ||||
| github.com/blevesearch/mmap-go v1.0.3/go.mod h1:pYvKl/grLQrBxuaRYgoTssa4rVujYYeenDp++2E+yvs= | ||||
| github.com/blevesearch/segment v0.9.0 h1:5lG7yBCx98or7gK2cHMKPukPZ/31Kag7nONpoBt22Ac= | ||||
| github.com/blevesearch/snowball v0.6.1 h1:cDYjn/NCH+wwt2UdehaLpr2e4BwLIjN4V/TdLsL+B5A= | ||||
| github.com/blevesearch/snowball v0.6.1/go.mod h1:ZF0IBg5vgpeoUhnMza2v0A/z8m1cWPlwhke08LpNusg= | ||||
| github.com/blevesearch/stempel v0.2.0 h1:CYzVPaScODMvgE9o+kf6D4RJ/VRomyi9uHF+PtB+Afc= | ||||
| github.com/blevesearch/stempel v0.2.0/go.mod h1:wjeTHqQv+nQdbPuJ/YcvOjTInA2EIc6Ks1FoSUzSLvc= | ||||
| github.com/blevesearch/vellum v1.0.7 h1:+vn8rfyCRHxKVRgDLeR0FAXej2+6mEb5Q15aQE/XESQ= | ||||
| github.com/blevesearch/vellum v1.0.7/go.mod h1:doBZpmRhwTsASB4QdUZANlJvqVAUdUyX0ZK7QJCTeBE= | ||||
| github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= | ||||
| github.com/boombuler/barcode v1.0.1 h1:NDBbPmhS+EqABEs5Kg3n/5ZNjy73Pz7SIV+KCeqyXcs= | ||||
| github.com/bradleyjkemp/cupaloy/v2 v2.6.0 h1:knToPYa2xtfg42U3I6punFEjaGFKWQRXJwj0JTv4mTs= | ||||
|  | @ -417,6 +434,10 @@ github.com/coreos/go-oidc v2.2.1+incompatible h1:mh48q/BqXqgjVHpy2ZY7WnWAbenxRjs | |||
| github.com/coreos/go-oidc v2.2.1+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= | ||||
| github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7 h1:u9SHYsPQNyt5tgDm3YN7+9dYrpK96E5wFilTFWIDZOM= | ||||
| github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf h1:CAKfRE2YtTUIjjh1bkBtyYFaUT/WmOqsJjgtihT0vMI= | ||||
| github.com/couchbase/ghistogram v0.1.0 h1:b95QcQTCzjTUocDXp/uMgSNQi8oj1tGwnJ4bODWZnps= | ||||
| github.com/couchbase/ghistogram v0.1.0/go.mod h1:s1Jhy76zqfEecpNWJfWUiKZookAFaiGOEoyzgHt9i7k= | ||||
| github.com/couchbase/moss v0.2.0 h1:VCYrMzFwEryyhRSeI+/b3tRBSeTpi/8gn5Kf6dxqn+o= | ||||
| github.com/couchbase/moss v0.2.0/go.mod h1:9MaHIaRuy9pvLPUJxB8sh8OrLfyDczECVL37grCIubs= | ||||
| github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= | ||||
| github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= | ||||
| github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= | ||||
|  | @ -474,6 +495,8 @@ github.com/elazarl/goproxy/ext v0.0.0-20190711103511-473e67f1d7d2/go.mod h1:gNh8 | |||
| github.com/ettle/strcase v0.1.1 h1:htFueZyVeE1XNnMEfbqp5r67qAN/4r6ya1ysq8Q+Zcw= | ||||
| github.com/expr-lang/expr v1.16.2 h1:JvMnzUs3LeVHBvGFcXYmXo+Q6DPDmzrlcSBO6Wy3w4s= | ||||
| github.com/expr-lang/expr v1.16.2/go.mod h1:uCkhfG+x7fcZ5A5sXHKuQ07jGZRl6J0FCAaf2k4PtVQ= | ||||
| github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= | ||||
| github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= | ||||
| github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= | ||||
| github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= | ||||
| github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g= | ||||
|  | @ -527,6 +550,8 @@ github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og= | |||
| github.com/gobwas/ws v1.2.1 h1:F2aeBZrm2NDsc7vbovKrWSogd4wvfAxg0FQ89/iqOTk= | ||||
| github.com/goccmack/gocc v0.0.0-20230228185258-2292f9e40198 h1:FSii2UQeSLngl3jFoR4tUKZLprO7qUlh/TKKticc0BM= | ||||
| github.com/goccmack/gocc v0.0.0-20230228185258-2292f9e40198/go.mod h1:DTh/Y2+NbnOVVoypCCQrovMPDKUGp4yZpSbWg5D0XIM= | ||||
| github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= | ||||
| github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= | ||||
| github.com/goccy/go-yaml v1.11.0 h1:n7Z+zx8S9f9KgzG6KtQKf+kwqXZlLNR2F6018Dgau54= | ||||
| github.com/gocql/gocql v0.0.0-20190301043612-f6df8288f9b4 h1:vF83LI8tAakwEwvWZtrIEx7pOySacl2TOxx6eXk4ePo= | ||||
| github.com/godbus/dbus/v5 v5.0.4 h1:9349emZab16e7zQvpmsbtjc18ykshndd8y2PG3sgJbA= | ||||
|  | @ -648,6 +673,8 @@ github.com/kisielk/sqlstruct v0.0.0-20201105191214-5f3e10d3ab46 h1:veS9QfglfvqAw | |||
| github.com/klauspost/compress v1.17.3/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= | ||||
| github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s= | ||||
| github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4= | ||||
| github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM= | ||||
| github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= | ||||
| github.com/knadh/koanf v1.5.0 h1:q2TSd/3Pyc/5yP9ldIrSdIz26MCcyNQzW0pEAugLPNs= | ||||
| github.com/knadh/koanf v1.5.0/go.mod h1:Hgyjp4y8v44hpZtPzs7JZfRAW5AhN7KfZcwv1RYggDs= | ||||
| github.com/knadh/koanf/v2 v2.1.0 h1:eh4QmHHBuU8BybfIJ8mB8K8gsGCD/AUQTdwGq/GzId8= | ||||
|  | @ -681,6 +708,8 @@ github.com/matryer/moq v0.3.3 h1:pScMH9VyrdT4S93yiLpVyU8rCDqGQr24uOyBxmktG5Q= | |||
| github.com/matryer/moq v0.3.3/go.mod h1:RJ75ZZZD71hejp39j4crZLsEDszGk6iH4v4YsWFKH4s= | ||||
| github.com/matryer/moq v0.5.0 h1:h2PJUYjZSiyEahzVogDRmrgL9Bsx9xYAl8l+LPfmwL8= | ||||
| github.com/matryer/moq v0.5.0/go.mod h1:39GTnrD0mVWHPvWdYj5ki/lxfhLQEtHcLh+tWoYF/iE= | ||||
| github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= | ||||
| github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= | ||||
| github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= | ||||
| github.com/maxatome/go-testdeep v1.12.0 h1:Ql7Go8Tg0C1D/uMMX59LAoYK7LffeJQ6X2T04nTH68g= | ||||
| github.com/microcosm-cc/bluemonday v1.0.25 h1:4NEwSfiJ+Wva0VxN5B8OwMicaJvD8r9tlJWm9rtloEg= | ||||
|  | @ -809,6 +838,8 @@ github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da h1:p3Vo3i64TCL | |||
| github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= | ||||
| github.com/schollz/closestmatch v2.1.0+incompatible h1:Uel2GXEpJqOWBrlyI+oY9LTiyyjYS17cCYRqP13/SHk= | ||||
| github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= | ||||
| github.com/scottlepp/go-duck v0.3.1 h1:UDm7AepGq7urXUAtF/Nxbrth6Te+k42pz/6jdpC3gp8= | ||||
| github.com/scottlepp/go-duck v0.3.1/go.mod h1:cQRP0clf3eX6QUizCDTNMqShtW8Ek7ovnURCGOrJgyU= | ||||
| github.com/segmentio/fasthash v0.0.0-20180216231524-a72b379d632e h1:uO75wNGioszjmIzcY/tvdDYKRLVvzggtAmmJkn9j4GQ= | ||||
| github.com/segmentio/fasthash v0.0.0-20180216231524-a72b379d632e/go.mod h1:tm/wZFQ8e24NYaBGIlnO2WGCAi67re4HHuOm0sftE/M= | ||||
| github.com/sercand/kuberesolver/v5 v5.1.1 h1:CYH+d67G0sGBj7q5wLK61yzqJJ8gLLC8aeprPTHb6yY= | ||||
|  | @ -896,6 +927,8 @@ github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wK | |||
| gitlab.com/nyarla/go-crypt v0.0.0-20160106005555-d9a5dc2b789b h1:7gd+rd8P3bqcn/96gOZa3F5dpJr/vEiDQYlNb/y2uNs= | ||||
| go.einride.tech/aip v0.67.1 h1:d/4TW92OxXBngkSOwWS2CH5rez869KpKMaN44mdxkFI= | ||||
| go.einride.tech/aip v0.67.1/go.mod h1:ZGX4/zKw8dcgzdLsrvpOOGxfxI2QSk12SlP7d6c0/XI= | ||||
| go.etcd.io/gofail v0.1.0 h1:XItAMIhOojXFQMgrxjnd2EIIHun/d5qL0Pf7FzVTkFg= | ||||
| go.etcd.io/gofail v0.1.0/go.mod h1:VZBCXYGZhHAinaBiiqYvuDynvahNsAyLFwB3kEHKz1M= | ||||
| go.opentelemetry.io/collector v0.97.0 h1:qyOju13byHIKEK/JehmTiGMj4pFLa4kDyrOCtTmjHU0= | ||||
| go.opentelemetry.io/collector v0.97.0/go.mod h1:V6xquYAaO2VHVu4DBK28JYuikRdZajh7DH5Vl/Y8NiA= | ||||
| go.opentelemetry.io/collector/component v0.97.0 h1:vanKhXl5nptN8igRH4PqVYHOILif653vaPIKv6LCZCI= | ||||
|  |  | |||
|  | @ -217,4 +217,5 @@ export interface FeatureToggles { | |||
|   improvedExternalSessionHandling?: boolean; | ||||
|   useSessionStorageForRedirection?: boolean; | ||||
|   rolePickerDrawer?: boolean; | ||||
|   unifiedStorageSearch?: boolean; | ||||
| } | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ import ( | |||
| 	"github.com/grafana/grafana/pkg/registry/apis/playlist" | ||||
| 	"github.com/grafana/grafana/pkg/registry/apis/query" | ||||
| 	"github.com/grafana/grafana/pkg/registry/apis/scope" | ||||
| 	"github.com/grafana/grafana/pkg/registry/apis/search" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
|  | @ -37,6 +38,7 @@ func ProvideRegistryServiceSink( | |||
| 	_ *scope.ScopeAPIBuilder, | ||||
| 	_ *query.QueryAPIBuilder, | ||||
| 	_ *notifications.NotificationsAPIBuilder, | ||||
| 	_ *search.SearchAPIBuilder, | ||||
| ) *Service { | ||||
| 	return &Service{} | ||||
| } | ||||
|  |  | |||
|  | @ -246,6 +246,10 @@ func (a *dashboardSqlAccess) Read(ctx context.Context, req *resource.ReadRequest | |||
| 	return a.ReadResource(ctx, req), nil | ||||
| } | ||||
| 
 | ||||
| func (a *dashboardSqlAccess) Search(ctx context.Context, req *resource.SearchRequest) (*resource.SearchResponse, error) { | ||||
| 	return nil, fmt.Errorf("not yet (filter)") | ||||
| } | ||||
| 
 | ||||
| func (a *dashboardSqlAccess) History(ctx context.Context, req *resource.HistoryRequest) (*resource.HistoryResponse, error) { | ||||
| 	info, err := claims.ParseNamespace(req.Key.Namespace) | ||||
| 	if err == nil { | ||||
|  |  | |||
|  | @ -0,0 +1,103 @@ | |||
| package search | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"net/http" | ||||
| 
 | ||||
| 	"k8s.io/apimachinery/pkg/runtime" | ||||
| 	"k8s.io/apimachinery/pkg/runtime/schema" | ||||
| 	"k8s.io/apiserver/pkg/authorization/authorizer" | ||||
| 	"k8s.io/apiserver/pkg/registry/generic" | ||||
| 	genericapiserver "k8s.io/apiserver/pkg/server" | ||||
| 	common "k8s.io/kube-openapi/pkg/common" | ||||
| 	"k8s.io/kube-openapi/pkg/spec3" | ||||
| 
 | ||||
| 	grafanarest "github.com/grafana/grafana/pkg/apiserver/rest" | ||||
| 	"github.com/grafana/grafana/pkg/services/apiserver/builder" | ||||
| 	"github.com/grafana/grafana/pkg/services/featuremgmt" | ||||
| 	"github.com/grafana/grafana/pkg/storage/unified/resource" | ||||
| ) | ||||
| 
 | ||||
| var _ builder.APIGroupBuilder = (*SearchAPIBuilder)(nil) | ||||
| 
 | ||||
| type SearchAPIBuilder struct { | ||||
| 	unified resource.ResourceClient | ||||
| } | ||||
| 
 | ||||
| func NewSearchAPIBuilder( | ||||
| 	unified resource.ResourceClient, | ||||
| ) (*SearchAPIBuilder, error) { | ||||
| 	return &SearchAPIBuilder{ | ||||
| 		unified: unified, | ||||
| 	}, nil | ||||
| } | ||||
| 
 | ||||
| func RegisterAPIService( | ||||
| 	features featuremgmt.FeatureToggles, | ||||
| 	apiregistration builder.APIRegistrar, | ||||
| 	unified resource.ResourceClient, | ||||
| ) (*SearchAPIBuilder, error) { | ||||
| 	if !(features.IsEnabledGlobally(featuremgmt.FlagUnifiedStorageSearch) || features.IsEnabledGlobally(featuremgmt.FlagGrafanaAPIServerWithExperimentalAPIs)) { | ||||
| 		return nil, nil | ||||
| 	} | ||||
| 	builder, err := NewSearchAPIBuilder(unified) | ||||
| 	apiregistration.RegisterAPI(builder) | ||||
| 	return builder, err | ||||
| } | ||||
| 
 | ||||
| func (b *SearchAPIBuilder) GetGroupVersion() schema.GroupVersion { | ||||
| 	return schema.GroupVersion{Group: "search.grafana.app", Version: "v0alpha1"} | ||||
| } | ||||
| 
 | ||||
| func (b *SearchAPIBuilder) InstallSchema(scheme *runtime.Scheme) error { | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b *SearchAPIBuilder) GetOpenAPIDefinitions() common.GetOpenAPIDefinitions { | ||||
| 	return func(ref common.ReferenceCallback) map[string]common.OpenAPIDefinition { | ||||
| 		return map[string]common.OpenAPIDefinition{} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (b *SearchAPIBuilder) GetAPIRoutes() *builder.APIRoutes { | ||||
| 	return &builder.APIRoutes{ | ||||
| 		Namespace: []builder.APIRouteHandler{ | ||||
| 			{ | ||||
| 				Path: "search", | ||||
| 				Spec: &spec3.PathProps{ | ||||
| 					Get: &spec3.Operation{ | ||||
| 						OperationProps: spec3.OperationProps{ | ||||
| 							Tags:        []string{"Search"}, | ||||
| 							Summary:     "Search", | ||||
| 							Description: "Search for resources", | ||||
| 						}, | ||||
| 					}, | ||||
| 				}, | ||||
| 				Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { | ||||
| 					urlQuery := r.URL.Query().Get("query") | ||||
| 					searchRequest := &resource.SearchRequest{Query: urlQuery} | ||||
| 					res, err := b.unified.Search(r.Context(), searchRequest) | ||||
| 					if err != nil { | ||||
| 						panic(err) | ||||
| 					} | ||||
| 					if err := json.NewEncoder(w).Encode(res); err != nil { | ||||
| 						panic(err) | ||||
| 					} | ||||
| 				}), | ||||
| 			}, | ||||
| 		}, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (b *SearchAPIBuilder) GetAuthorizer() authorizer.Authorizer { | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b *SearchAPIBuilder) PostProcessOpenAPI(oas *spec3.OpenAPI) (*spec3.OpenAPI, error) { | ||||
| 	return oas, nil | ||||
| } | ||||
| 
 | ||||
| func (b *SearchAPIBuilder) UpdateAPIGroupInfo(apiGroupInfo *genericapiserver.APIGroupInfo, scheme *runtime.Scheme, optsGetter generic.RESTOptionsGetter, dualWriteBuilder grafanarest.DualWriteBuilder) error { | ||||
| 	apiGroupInfo.PrioritizedVersions = []schema.GroupVersion{b.GetGroupVersion()} | ||||
| 	return nil | ||||
| } | ||||
|  | @ -14,6 +14,7 @@ import ( | |||
| 	"github.com/grafana/grafana/pkg/registry/apis/playlist" | ||||
| 	"github.com/grafana/grafana/pkg/registry/apis/query" | ||||
| 	"github.com/grafana/grafana/pkg/registry/apis/scope" | ||||
| 	"github.com/grafana/grafana/pkg/registry/apis/search" | ||||
| 	"github.com/grafana/grafana/pkg/registry/apis/service" | ||||
| 	"github.com/grafana/grafana/pkg/services/pluginsintegration/plugincontext" | ||||
| ) | ||||
|  | @ -40,4 +41,5 @@ var WireSet = wire.NewSet( | |||
| 	scope.RegisterAPIService, | ||||
| 	notifications.RegisterAPIService, | ||||
| 	//sso.RegisterAPIService,
 | ||||
| 	search.RegisterAPIService, | ||||
| ) | ||||
|  |  | |||
|  | @ -1497,6 +1497,14 @@ var ( | |||
| 			Stage:       FeatureStageExperimental, | ||||
| 			Owner:       identityAccessTeam, | ||||
| 		}, | ||||
| 		{ | ||||
| 			Name:              "unifiedStorageSearch", | ||||
| 			Description:       "Enable unified storage search", | ||||
| 			Stage:             FeatureStageExperimental, | ||||
| 			Owner:             grafanaSearchAndStorageSquad, | ||||
| 			HideFromDocs:      true, | ||||
| 			HideFromAdminPage: true, | ||||
| 		}, | ||||
| 	} | ||||
| ) | ||||
| 
 | ||||
|  |  | |||
|  | @ -198,3 +198,4 @@ alertingQueryAndExpressionsStepMode,experimental,@grafana/alerting-squad,false,f | |||
| improvedExternalSessionHandling,experimental,@grafana/identity-access-team,false,false,false | ||||
| useSessionStorageForRedirection,preview,@grafana/identity-access-team,false,false,false | ||||
| rolePickerDrawer,experimental,@grafana/identity-access-team,false,false,false | ||||
| unifiedStorageSearch,experimental,@grafana/search-and-storage,false,false,false | ||||
|  |  | |||
| 
 | 
|  | @ -802,4 +802,8 @@ const ( | |||
| 	// FlagRolePickerDrawer
 | ||||
| 	// Enables the new role picker drawer design
 | ||||
| 	FlagRolePickerDrawer = "rolePickerDrawer" | ||||
| 
 | ||||
| 	// FlagUnifiedStorageSearch
 | ||||
| 	// Enable unified storage search
 | ||||
| 	FlagUnifiedStorageSearch = "unifiedStorageSearch" | ||||
| ) | ||||
|  |  | |||
|  | @ -3024,6 +3024,20 @@ | |||
|         "codeowner": "@grafana/identity-access-team" | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "metadata": { | ||||
|         "name": "unifiedStorageSearch", | ||||
|         "resourceVersion": "1726771421439", | ||||
|         "creationTimestamp": "2024-09-19T18:43:41Z" | ||||
|       }, | ||||
|       "spec": { | ||||
|         "description": "Enable unified storage search", | ||||
|         "stage": "experimental", | ||||
|         "codeowner": "@grafana/search-and-storage", | ||||
|         "hideFromAdminPage": true, | ||||
|         "hideFromDocs": true | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "metadata": { | ||||
|         "name": "vizActions", | ||||
|  | @ -3078,4 +3092,4 @@ | |||
|       } | ||||
|     } | ||||
|   ] | ||||
| } | ||||
| } | ||||
|  |  | |||
|  | @ -35,6 +35,10 @@ func (n *noopService) Read(context.Context, *ReadRequest) (*ReadResponse, error) | |||
| 	return nil, ErrNotImplementedYet | ||||
| } | ||||
| 
 | ||||
| func (n *noopService) Search(context.Context, *SearchRequest) (*SearchResponse, error) { | ||||
| 	return nil, ErrNotImplementedYet | ||||
| } | ||||
| 
 | ||||
| func (n *noopService) History(context.Context, *HistoryRequest) (*HistoryResponse, error) { | ||||
| 	return nil, ErrNotImplementedYet | ||||
| } | ||||
|  |  | |||
|  | @ -173,7 +173,7 @@ func (x HealthCheckResponse_ServingStatus) Number() protoreflect.EnumNumber { | |||
| 
 | ||||
| // Deprecated: Use HealthCheckResponse_ServingStatus.Descriptor instead.
 | ||||
| func (HealthCheckResponse_ServingStatus) EnumDescriptor() ([]byte, []int) { | ||||
| 	return file_resource_proto_rawDescGZIP(), []int{26, 0} | ||||
| 	return file_resource_proto_rawDescGZIP(), []int{28, 0} | ||||
| } | ||||
| 
 | ||||
| type ResourceKey struct { | ||||
|  | @ -1614,6 +1614,100 @@ func (x *WatchEvent) GetPrevious() *WatchEvent_Resource { | |||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| type SearchRequest struct { | ||||
| 	state         protoimpl.MessageState | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
| 	unknownFields protoimpl.UnknownFields | ||||
| 
 | ||||
| 	Query string `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (x *SearchRequest) Reset() { | ||||
| 	*x = SearchRequest{} | ||||
| 	if protoimpl.UnsafeEnabled { | ||||
| 		mi := &file_resource_proto_msgTypes[20] | ||||
| 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||
| 		ms.StoreMessageInfo(mi) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (x *SearchRequest) String() string { | ||||
| 	return protoimpl.X.MessageStringOf(x) | ||||
| } | ||||
| 
 | ||||
| func (*SearchRequest) ProtoMessage() {} | ||||
| 
 | ||||
| func (x *SearchRequest) ProtoReflect() protoreflect.Message { | ||||
| 	mi := &file_resource_proto_msgTypes[20] | ||||
| 	if protoimpl.UnsafeEnabled && x != nil { | ||||
| 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||
| 		if ms.LoadMessageInfo() == nil { | ||||
| 			ms.StoreMessageInfo(mi) | ||||
| 		} | ||||
| 		return ms | ||||
| 	} | ||||
| 	return mi.MessageOf(x) | ||||
| } | ||||
| 
 | ||||
| // Deprecated: Use SearchRequest.ProtoReflect.Descriptor instead.
 | ||||
| func (*SearchRequest) Descriptor() ([]byte, []int) { | ||||
| 	return file_resource_proto_rawDescGZIP(), []int{20} | ||||
| } | ||||
| 
 | ||||
| func (x *SearchRequest) GetQuery() string { | ||||
| 	if x != nil { | ||||
| 		return x.Query | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
| 
 | ||||
| type SearchResponse struct { | ||||
| 	state         protoimpl.MessageState | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
| 	unknownFields protoimpl.UnknownFields | ||||
| 
 | ||||
| 	Items []*ResourceWrapper `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (x *SearchResponse) Reset() { | ||||
| 	*x = SearchResponse{} | ||||
| 	if protoimpl.UnsafeEnabled { | ||||
| 		mi := &file_resource_proto_msgTypes[21] | ||||
| 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||
| 		ms.StoreMessageInfo(mi) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (x *SearchResponse) String() string { | ||||
| 	return protoimpl.X.MessageStringOf(x) | ||||
| } | ||||
| 
 | ||||
| func (*SearchResponse) ProtoMessage() {} | ||||
| 
 | ||||
| func (x *SearchResponse) ProtoReflect() protoreflect.Message { | ||||
| 	mi := &file_resource_proto_msgTypes[21] | ||||
| 	if protoimpl.UnsafeEnabled && x != nil { | ||||
| 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||
| 		if ms.LoadMessageInfo() == nil { | ||||
| 			ms.StoreMessageInfo(mi) | ||||
| 		} | ||||
| 		return ms | ||||
| 	} | ||||
| 	return mi.MessageOf(x) | ||||
| } | ||||
| 
 | ||||
| // Deprecated: Use SearchResponse.ProtoReflect.Descriptor instead.
 | ||||
| func (*SearchResponse) Descriptor() ([]byte, []int) { | ||||
| 	return file_resource_proto_rawDescGZIP(), []int{21} | ||||
| } | ||||
| 
 | ||||
| func (x *SearchResponse) GetItems() []*ResourceWrapper { | ||||
| 	if x != nil { | ||||
| 		return x.Items | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| type HistoryRequest struct { | ||||
| 	state         protoimpl.MessageState | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
|  | @ -1632,7 +1726,7 @@ type HistoryRequest struct { | |||
| func (x *HistoryRequest) Reset() { | ||||
| 	*x = HistoryRequest{} | ||||
| 	if protoimpl.UnsafeEnabled { | ||||
| 		mi := &file_resource_proto_msgTypes[20] | ||||
| 		mi := &file_resource_proto_msgTypes[22] | ||||
| 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||
| 		ms.StoreMessageInfo(mi) | ||||
| 	} | ||||
|  | @ -1645,7 +1739,7 @@ func (x *HistoryRequest) String() string { | |||
| func (*HistoryRequest) ProtoMessage() {} | ||||
| 
 | ||||
| func (x *HistoryRequest) ProtoReflect() protoreflect.Message { | ||||
| 	mi := &file_resource_proto_msgTypes[20] | ||||
| 	mi := &file_resource_proto_msgTypes[22] | ||||
| 	if protoimpl.UnsafeEnabled && x != nil { | ||||
| 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||
| 		if ms.LoadMessageInfo() == nil { | ||||
|  | @ -1658,7 +1752,7 @@ func (x *HistoryRequest) ProtoReflect() protoreflect.Message { | |||
| 
 | ||||
| // Deprecated: Use HistoryRequest.ProtoReflect.Descriptor instead.
 | ||||
| func (*HistoryRequest) Descriptor() ([]byte, []int) { | ||||
| 	return file_resource_proto_rawDescGZIP(), []int{20} | ||||
| 	return file_resource_proto_rawDescGZIP(), []int{22} | ||||
| } | ||||
| 
 | ||||
| func (x *HistoryRequest) GetNextPageToken() string { | ||||
|  | @ -1706,7 +1800,7 @@ type HistoryResponse struct { | |||
| func (x *HistoryResponse) Reset() { | ||||
| 	*x = HistoryResponse{} | ||||
| 	if protoimpl.UnsafeEnabled { | ||||
| 		mi := &file_resource_proto_msgTypes[21] | ||||
| 		mi := &file_resource_proto_msgTypes[23] | ||||
| 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||
| 		ms.StoreMessageInfo(mi) | ||||
| 	} | ||||
|  | @ -1719,7 +1813,7 @@ func (x *HistoryResponse) String() string { | |||
| func (*HistoryResponse) ProtoMessage() {} | ||||
| 
 | ||||
| func (x *HistoryResponse) ProtoReflect() protoreflect.Message { | ||||
| 	mi := &file_resource_proto_msgTypes[21] | ||||
| 	mi := &file_resource_proto_msgTypes[23] | ||||
| 	if protoimpl.UnsafeEnabled && x != nil { | ||||
| 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||
| 		if ms.LoadMessageInfo() == nil { | ||||
|  | @ -1732,7 +1826,7 @@ func (x *HistoryResponse) ProtoReflect() protoreflect.Message { | |||
| 
 | ||||
| // Deprecated: Use HistoryResponse.ProtoReflect.Descriptor instead.
 | ||||
| func (*HistoryResponse) Descriptor() ([]byte, []int) { | ||||
| 	return file_resource_proto_rawDescGZIP(), []int{21} | ||||
| 	return file_resource_proto_rawDescGZIP(), []int{23} | ||||
| } | ||||
| 
 | ||||
| func (x *HistoryResponse) GetItems() []*ResourceMeta { | ||||
|  | @ -1781,7 +1875,7 @@ type OriginRequest struct { | |||
| func (x *OriginRequest) Reset() { | ||||
| 	*x = OriginRequest{} | ||||
| 	if protoimpl.UnsafeEnabled { | ||||
| 		mi := &file_resource_proto_msgTypes[22] | ||||
| 		mi := &file_resource_proto_msgTypes[24] | ||||
| 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||
| 		ms.StoreMessageInfo(mi) | ||||
| 	} | ||||
|  | @ -1794,7 +1888,7 @@ func (x *OriginRequest) String() string { | |||
| func (*OriginRequest) ProtoMessage() {} | ||||
| 
 | ||||
| func (x *OriginRequest) ProtoReflect() protoreflect.Message { | ||||
| 	mi := &file_resource_proto_msgTypes[22] | ||||
| 	mi := &file_resource_proto_msgTypes[24] | ||||
| 	if protoimpl.UnsafeEnabled && x != nil { | ||||
| 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||
| 		if ms.LoadMessageInfo() == nil { | ||||
|  | @ -1807,7 +1901,7 @@ func (x *OriginRequest) ProtoReflect() protoreflect.Message { | |||
| 
 | ||||
| // Deprecated: Use OriginRequest.ProtoReflect.Descriptor instead.
 | ||||
| func (*OriginRequest) Descriptor() ([]byte, []int) { | ||||
| 	return file_resource_proto_rawDescGZIP(), []int{22} | ||||
| 	return file_resource_proto_rawDescGZIP(), []int{24} | ||||
| } | ||||
| 
 | ||||
| func (x *OriginRequest) GetNextPageToken() string { | ||||
|  | @ -1862,7 +1956,7 @@ type ResourceOriginInfo struct { | |||
| func (x *ResourceOriginInfo) Reset() { | ||||
| 	*x = ResourceOriginInfo{} | ||||
| 	if protoimpl.UnsafeEnabled { | ||||
| 		mi := &file_resource_proto_msgTypes[23] | ||||
| 		mi := &file_resource_proto_msgTypes[25] | ||||
| 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||
| 		ms.StoreMessageInfo(mi) | ||||
| 	} | ||||
|  | @ -1875,7 +1969,7 @@ func (x *ResourceOriginInfo) String() string { | |||
| func (*ResourceOriginInfo) ProtoMessage() {} | ||||
| 
 | ||||
| func (x *ResourceOriginInfo) ProtoReflect() protoreflect.Message { | ||||
| 	mi := &file_resource_proto_msgTypes[23] | ||||
| 	mi := &file_resource_proto_msgTypes[25] | ||||
| 	if protoimpl.UnsafeEnabled && x != nil { | ||||
| 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||
| 		if ms.LoadMessageInfo() == nil { | ||||
|  | @ -1888,7 +1982,7 @@ func (x *ResourceOriginInfo) ProtoReflect() protoreflect.Message { | |||
| 
 | ||||
| // Deprecated: Use ResourceOriginInfo.ProtoReflect.Descriptor instead.
 | ||||
| func (*ResourceOriginInfo) Descriptor() ([]byte, []int) { | ||||
| 	return file_resource_proto_rawDescGZIP(), []int{23} | ||||
| 	return file_resource_proto_rawDescGZIP(), []int{25} | ||||
| } | ||||
| 
 | ||||
| func (x *ResourceOriginInfo) GetKey() *ResourceKey { | ||||
|  | @ -1957,7 +2051,7 @@ type OriginResponse struct { | |||
| func (x *OriginResponse) Reset() { | ||||
| 	*x = OriginResponse{} | ||||
| 	if protoimpl.UnsafeEnabled { | ||||
| 		mi := &file_resource_proto_msgTypes[24] | ||||
| 		mi := &file_resource_proto_msgTypes[26] | ||||
| 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||
| 		ms.StoreMessageInfo(mi) | ||||
| 	} | ||||
|  | @ -1970,7 +2064,7 @@ func (x *OriginResponse) String() string { | |||
| func (*OriginResponse) ProtoMessage() {} | ||||
| 
 | ||||
| func (x *OriginResponse) ProtoReflect() protoreflect.Message { | ||||
| 	mi := &file_resource_proto_msgTypes[24] | ||||
| 	mi := &file_resource_proto_msgTypes[26] | ||||
| 	if protoimpl.UnsafeEnabled && x != nil { | ||||
| 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||
| 		if ms.LoadMessageInfo() == nil { | ||||
|  | @ -1983,7 +2077,7 @@ func (x *OriginResponse) ProtoReflect() protoreflect.Message { | |||
| 
 | ||||
| // Deprecated: Use OriginResponse.ProtoReflect.Descriptor instead.
 | ||||
| func (*OriginResponse) Descriptor() ([]byte, []int) { | ||||
| 	return file_resource_proto_rawDescGZIP(), []int{24} | ||||
| 	return file_resource_proto_rawDescGZIP(), []int{26} | ||||
| } | ||||
| 
 | ||||
| func (x *OriginResponse) GetItems() []*ResourceOriginInfo { | ||||
|  | @ -2025,7 +2119,7 @@ type HealthCheckRequest struct { | |||
| func (x *HealthCheckRequest) Reset() { | ||||
| 	*x = HealthCheckRequest{} | ||||
| 	if protoimpl.UnsafeEnabled { | ||||
| 		mi := &file_resource_proto_msgTypes[25] | ||||
| 		mi := &file_resource_proto_msgTypes[27] | ||||
| 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||
| 		ms.StoreMessageInfo(mi) | ||||
| 	} | ||||
|  | @ -2038,7 +2132,7 @@ func (x *HealthCheckRequest) String() string { | |||
| func (*HealthCheckRequest) ProtoMessage() {} | ||||
| 
 | ||||
| func (x *HealthCheckRequest) ProtoReflect() protoreflect.Message { | ||||
| 	mi := &file_resource_proto_msgTypes[25] | ||||
| 	mi := &file_resource_proto_msgTypes[27] | ||||
| 	if protoimpl.UnsafeEnabled && x != nil { | ||||
| 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||
| 		if ms.LoadMessageInfo() == nil { | ||||
|  | @ -2051,7 +2145,7 @@ func (x *HealthCheckRequest) ProtoReflect() protoreflect.Message { | |||
| 
 | ||||
| // Deprecated: Use HealthCheckRequest.ProtoReflect.Descriptor instead.
 | ||||
| func (*HealthCheckRequest) Descriptor() ([]byte, []int) { | ||||
| 	return file_resource_proto_rawDescGZIP(), []int{25} | ||||
| 	return file_resource_proto_rawDescGZIP(), []int{27} | ||||
| } | ||||
| 
 | ||||
| func (x *HealthCheckRequest) GetService() string { | ||||
|  | @ -2072,7 +2166,7 @@ type HealthCheckResponse struct { | |||
| func (x *HealthCheckResponse) Reset() { | ||||
| 	*x = HealthCheckResponse{} | ||||
| 	if protoimpl.UnsafeEnabled { | ||||
| 		mi := &file_resource_proto_msgTypes[26] | ||||
| 		mi := &file_resource_proto_msgTypes[28] | ||||
| 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||
| 		ms.StoreMessageInfo(mi) | ||||
| 	} | ||||
|  | @ -2085,7 +2179,7 @@ func (x *HealthCheckResponse) String() string { | |||
| func (*HealthCheckResponse) ProtoMessage() {} | ||||
| 
 | ||||
| func (x *HealthCheckResponse) ProtoReflect() protoreflect.Message { | ||||
| 	mi := &file_resource_proto_msgTypes[26] | ||||
| 	mi := &file_resource_proto_msgTypes[28] | ||||
| 	if protoimpl.UnsafeEnabled && x != nil { | ||||
| 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||
| 		if ms.LoadMessageInfo() == nil { | ||||
|  | @ -2098,7 +2192,7 @@ func (x *HealthCheckResponse) ProtoReflect() protoreflect.Message { | |||
| 
 | ||||
| // Deprecated: Use HealthCheckResponse.ProtoReflect.Descriptor instead.
 | ||||
| func (*HealthCheckResponse) Descriptor() ([]byte, []int) { | ||||
| 	return file_resource_proto_rawDescGZIP(), []int{26} | ||||
| 	return file_resource_proto_rawDescGZIP(), []int{28} | ||||
| } | ||||
| 
 | ||||
| func (x *HealthCheckResponse) GetStatus() HealthCheckResponse_ServingStatus { | ||||
|  | @ -2120,7 +2214,7 @@ type WatchEvent_Resource struct { | |||
| func (x *WatchEvent_Resource) Reset() { | ||||
| 	*x = WatchEvent_Resource{} | ||||
| 	if protoimpl.UnsafeEnabled { | ||||
| 		mi := &file_resource_proto_msgTypes[27] | ||||
| 		mi := &file_resource_proto_msgTypes[29] | ||||
| 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||
| 		ms.StoreMessageInfo(mi) | ||||
| 	} | ||||
|  | @ -2133,7 +2227,7 @@ func (x *WatchEvent_Resource) String() string { | |||
| func (*WatchEvent_Resource) ProtoMessage() {} | ||||
| 
 | ||||
| func (x *WatchEvent_Resource) ProtoReflect() protoreflect.Message { | ||||
| 	mi := &file_resource_proto_msgTypes[27] | ||||
| 	mi := &file_resource_proto_msgTypes[29] | ||||
| 	if protoimpl.UnsafeEnabled && x != nil { | ||||
| 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||
| 		if ms.LoadMessageInfo() == nil { | ||||
|  | @ -2347,124 +2441,135 @@ var file_resource_proto_rawDesc = []byte{ | |||
| 	0x09, 0x0a, 0x05, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x4d, 0x4f, | ||||
| 	0x44, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x4c, 0x45, | ||||
| 	0x54, 0x45, 0x44, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x4f, 0x4f, 0x4b, 0x4d, 0x41, 0x52, | ||||
| 	0x4b, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x05, 0x22, 0x9a, | ||||
| 	0x01, 0x0a, 0x0e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, | ||||
| 	0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, | ||||
| 	0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, | ||||
| 	0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, | ||||
| 	0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, | ||||
| 	0x27, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x72, | ||||
| 	0x4b, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x05, 0x22, 0x25, | ||||
| 	0x0a, 0x0d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, | ||||
| 	0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, | ||||
| 	0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x41, 0x0a, 0x0e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, | ||||
| 	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, | ||||
| 	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, | ||||
| 	0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, | ||||
| 	0x72, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x9a, 0x01, 0x0a, 0x0e, 0x48, 0x69, 0x73, | ||||
| 	0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6e, | ||||
| 	0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, | ||||
| 	0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, | ||||
| 	0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, | ||||
| 	0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x27, 0x0a, 0x03, 0x6b, 0x65, 0x79, | ||||
| 	0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, | ||||
| 	0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, | ||||
| 	0x65, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, | ||||
| 	0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x73, 0x68, 0x6f, 0x77, 0x44, 0x65, | ||||
| 	0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0xbf, 0x01, 0x0a, 0x0f, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, | ||||
| 	0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x05, 0x69, 0x74, 0x65, | ||||
| 	0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, | ||||
| 	0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, | ||||
| 	0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, | ||||
| 	0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, | ||||
| 	0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, | ||||
| 	0x29, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, | ||||
| 	0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, | ||||
| 	0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x05, 0x65, 0x72, | ||||
| 	0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x72, 0x65, 0x73, 0x6f, | ||||
| 	0x75, 0x72, 0x63, 0x65, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, | ||||
| 	0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x8e, 0x01, 0x0a, 0x0d, 0x4f, 0x72, 0x69, 0x67, | ||||
| 	0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, | ||||
| 	0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, | ||||
| 	0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, | ||||
| 	0x6e, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, | ||||
| 	0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x27, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, | ||||
| 	0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, | ||||
| 	0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, | ||||
| 	0x12, 0x16, 0x0a, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, | ||||
| 	0x52, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x22, 0xe5, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x73, | ||||
| 	0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, | ||||
| 	0x27, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x72, | ||||
| 	0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, | ||||
| 	0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x68, 0x6f, 0x77, | ||||
| 	0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, | ||||
| 	0x73, 0x68, 0x6f, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0xbf, 0x01, 0x0a, 0x0f, | ||||
| 	0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, | ||||
| 	0x2c, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, | ||||
| 	0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, | ||||
| 	0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x26, 0x0a, | ||||
| 	0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, | ||||
| 	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, | ||||
| 	0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, | ||||
| 	0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, | ||||
| 	0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, | ||||
| 	0x12, 0x2b, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, | ||||
| 	0x15, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, | ||||
| 	0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x8e, 0x01, | ||||
| 	0x0a, 0x0d, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, | ||||
| 	0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, | ||||
| 	0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, | ||||
| 	0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, | ||||
| 	0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x27, 0x0a, | ||||
| 	0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x72, 0x65, 0x73, | ||||
| 	0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x65, | ||||
| 	0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, | ||||
| 	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x22, 0xe5, | ||||
| 	0x01, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x72, 0x69, 0x67, 0x69, | ||||
| 	0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x27, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, | ||||
| 	0x28, 0x0b, 0x32, 0x15, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, | ||||
| 	0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x23, | ||||
| 	0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, | ||||
| 	0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, | ||||
| 	0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, | ||||
| 	0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, | ||||
| 	0x75, 0x72, 0x63, 0x65, 0x48, 0x61, 0x73, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x72, 0x69, 0x67, | ||||
| 	0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, | ||||
| 	0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, | ||||
| 	0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x06, 0x20, 0x01, | ||||
| 	0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, | ||||
| 	0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, | ||||
| 	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xc4, 0x01, 0x0a, 0x0e, 0x4f, 0x72, 0x69, 0x67, 0x69, | ||||
| 	0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x05, 0x69, 0x74, 0x65, | ||||
| 	0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, | ||||
| 	0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x72, 0x69, 0x67, | ||||
| 	0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x26, 0x0a, | ||||
| 	0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, | ||||
| 	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, | ||||
| 	0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, | ||||
| 	0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, | ||||
| 	0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, | ||||
| 	0x12, 0x2b, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, | ||||
| 	0x15, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, | ||||
| 	0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x2e, 0x0a, | ||||
| 	0x12, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, | ||||
| 	0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, | ||||
| 	0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0xab, 0x01, | ||||
| 	0x0a, 0x13, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, | ||||
| 	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, | ||||
| 	0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, | ||||
| 	0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, | ||||
| 	0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, | ||||
| 	0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x4f, 0x0a, 0x0d, 0x53, 0x65, | ||||
| 	0x72, 0x76, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, | ||||
| 	0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x45, 0x52, 0x56, | ||||
| 	0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x45, 0x52, | ||||
| 	0x56, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, | ||||
| 	0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x03, 0x2a, 0x33, 0x0a, 0x14, 0x52, | ||||
| 	0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x61, | ||||
| 	0x74, 0x63, 0x68, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x6f, 0x74, 0x4f, 0x6c, 0x64, 0x65, 0x72, 0x54, | ||||
| 	0x68, 0x61, 0x6e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x78, 0x61, 0x63, 0x74, 0x10, 0x01, | ||||
| 	0x32, 0xed, 0x02, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x6f, | ||||
| 	0x72, 0x65, 0x12, 0x35, 0x0a, 0x04, 0x52, 0x65, 0x61, 0x64, 0x12, 0x15, 0x2e, 0x72, 0x65, 0x73, | ||||
| 	0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, | ||||
| 	0x74, 0x1a, 0x16, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x61, | ||||
| 	0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x43, 0x72, 0x65, | ||||
| 	0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x43, | ||||
| 	0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x72, | ||||
| 	0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, | ||||
| 	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, | ||||
| 	0x12, 0x17, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, | ||||
| 	0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x72, 0x65, 0x73, 0x6f, | ||||
| 	0x75, 0x72, 0x63, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, | ||||
| 	0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x17, 0x2e, | ||||
| 	0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, | ||||
| 	0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, | ||||
| 	0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, | ||||
| 	0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, | ||||
| 	0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, | ||||
| 	0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x61, | ||||
| 	0x73, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, | ||||
| 	0x28, 0x09, 0x52, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, | ||||
| 	0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, | ||||
| 	0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, | ||||
| 	0x73, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, | ||||
| 	0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, | ||||
| 	0x22, 0xc4, 0x01, 0x0a, 0x0e, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, | ||||
| 	0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, | ||||
| 	0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, | ||||
| 	0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, | ||||
| 	0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, | ||||
| 	0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, | ||||
| 	0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, | ||||
| 	0x29, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, | ||||
| 	0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, | ||||
| 	0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x05, 0x65, 0x72, | ||||
| 	0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x72, 0x65, 0x73, 0x6f, | ||||
| 	0x75, 0x72, 0x63, 0x65, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, | ||||
| 	0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x2e, 0x0a, 0x12, 0x48, 0x65, 0x61, 0x6c, 0x74, | ||||
| 	0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, | ||||
| 	0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, | ||||
| 	0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0xab, 0x01, 0x0a, 0x13, 0x48, 0x65, 0x61, 0x6c, | ||||
| 	0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, | ||||
| 	0x43, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, | ||||
| 	0x2b, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, | ||||
| 	0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, | ||||
| 	0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, | ||||
| 	0x61, 0x74, 0x75, 0x73, 0x22, 0x4f, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x53, | ||||
| 	0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, | ||||
| 	0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x45, 0x52, 0x56, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, | ||||
| 	0x0f, 0x0a, 0x0b, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x4e, 0x47, 0x10, 0x02, | ||||
| 	0x12, 0x13, 0x0a, 0x0f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, | ||||
| 	0x4f, 0x57, 0x4e, 0x10, 0x03, 0x2a, 0x33, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, | ||||
| 	0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x10, 0x0a, | ||||
| 	0x0c, 0x4e, 0x6f, 0x74, 0x4f, 0x6c, 0x64, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x10, 0x00, 0x12, | ||||
| 	0x09, 0x0a, 0x05, 0x45, 0x78, 0x61, 0x63, 0x74, 0x10, 0x01, 0x32, 0xed, 0x02, 0x0a, 0x0d, 0x52, | ||||
| 	0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x35, 0x0a, 0x04, | ||||
| 	0x52, 0x65, 0x61, 0x64, 0x12, 0x15, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, | ||||
| 	0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x72, 0x65, | ||||
| 	0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, | ||||
| 	0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, | ||||
| 	0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, | ||||
| 	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, | ||||
| 	0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, | ||||
| 	0x12, 0x35, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x15, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, | ||||
| 	0x72, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, | ||||
| 	0x16, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, | ||||
| 	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x57, 0x61, 0x74, 0x63, 0x68, | ||||
| 	0x12, 0x16, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x57, 0x61, 0x74, 0x63, | ||||
| 	0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, | ||||
| 	0x72, 0x63, 0x65, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, | ||||
| 	0x32, 0x8c, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x64, | ||||
| 	0x65, 0x78, 0x12, 0x3e, 0x0a, 0x07, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x2e, | ||||
| 	0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, | ||||
| 	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, | ||||
| 	0x63, 0x65, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, | ||||
| 	0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x12, 0x17, 0x2e, 0x72, | ||||
| 	0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, | ||||
| 	0x12, 0x3b, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x72, 0x65, 0x73, | ||||
| 	0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, | ||||
| 	0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x55, | ||||
| 	0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, | ||||
| 	0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, | ||||
| 	0x63, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, | ||||
| 	0x1a, 0x18, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, | ||||
| 	0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x04, 0x4c, 0x69, | ||||
| 	0x73, 0x74, 0x12, 0x15, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x4c, 0x69, | ||||
| 	0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x72, 0x65, 0x73, 0x6f, | ||||
| 	0x75, 0x72, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, | ||||
| 	0x65, 0x12, 0x37, 0x0a, 0x05, 0x57, 0x61, 0x74, 0x63, 0x68, 0x12, 0x16, 0x2e, 0x72, 0x65, 0x73, | ||||
| 	0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, | ||||
| 	0x73, 0x74, 0x1a, 0x14, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x57, 0x61, | ||||
| 	0x74, 0x63, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x32, 0xc9, 0x01, 0x0a, 0x0d, 0x52, | ||||
| 	0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x3b, 0x0a, 0x06, | ||||
| 	0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x17, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, | ||||
| 	0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, | ||||
| 	0x18, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, | ||||
| 	0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x07, 0x48, 0x69, 0x73, | ||||
| 	0x74, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, | ||||
| 	0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, | ||||
| 	0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, | ||||
| 	0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x4f, 0x72, 0x69, | ||||
| 	0x67, 0x69, 0x6e, 0x12, 0x17, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x4f, | ||||
| 	0x72, 0x69, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x72, | ||||
| 	0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x52, 0x65, | ||||
| 	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, | ||||
| 	0x2e, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, | ||||
| 	0x57, 0x0a, 0x0b, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x48, | ||||
| 	0x0a, 0x09, 0x49, 0x73, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x12, 0x1c, 0x2e, 0x72, 0x65, | ||||
| 	0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, | ||||
| 	0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x72, 0x65, 0x73, 0x6f, | ||||
| 	0x75, 0x72, 0x63, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, | ||||
| 	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x39, 0x5a, 0x37, 0x67, 0x69, 0x74, 0x68, | ||||
| 	0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x66, 0x61, 0x6e, 0x61, 0x2f, 0x67, | ||||
| 	0x72, 0x61, 0x66, 0x61, 0x6e, 0x61, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, | ||||
| 	0x67, 0x65, 0x2f, 0x75, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, | ||||
| 	0x72, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | ||||
| 	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x57, 0x0a, 0x0b, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, | ||||
| 	0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x48, 0x0a, 0x09, 0x49, 0x73, 0x48, 0x65, 0x61, 0x6c, 0x74, | ||||
| 	0x68, 0x79, 0x12, 0x1c, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x48, 0x65, | ||||
| 	0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, | ||||
| 	0x1a, 0x1d, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x6c, | ||||
| 	0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, | ||||
| 	0x39, 0x5a, 0x37, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, | ||||
| 	0x61, 0x66, 0x61, 0x6e, 0x61, 0x2f, 0x67, 0x72, 0x61, 0x66, 0x61, 0x6e, 0x61, 0x2f, 0x70, 0x6b, | ||||
| 	0x67, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2f, 0x75, 0x6e, 0x69, 0x66, 0x69, 0x65, | ||||
| 	0x64, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, | ||||
| 	0x6f, 0x33, | ||||
| } | ||||
| 
 | ||||
| var ( | ||||
|  | @ -2480,7 +2585,7 @@ func file_resource_proto_rawDescGZIP() []byte { | |||
| } | ||||
| 
 | ||||
| var file_resource_proto_enumTypes = make([]protoimpl.EnumInfo, 3) | ||||
| var file_resource_proto_msgTypes = make([]protoimpl.MessageInfo, 28) | ||||
| var file_resource_proto_msgTypes = make([]protoimpl.MessageInfo, 30) | ||||
| var file_resource_proto_goTypes = []any{ | ||||
| 	(ResourceVersionMatch)(0),              // 0: resource.ResourceVersionMatch
 | ||||
| 	(WatchEvent_Type)(0),                   // 1: resource.WatchEvent.Type
 | ||||
|  | @ -2505,14 +2610,16 @@ var file_resource_proto_goTypes = []any{ | |||
| 	(*ListResponse)(nil),                   // 20: resource.ListResponse
 | ||||
| 	(*WatchRequest)(nil),                   // 21: resource.WatchRequest
 | ||||
| 	(*WatchEvent)(nil),                     // 22: resource.WatchEvent
 | ||||
| 	(*HistoryRequest)(nil),                 // 23: resource.HistoryRequest
 | ||||
| 	(*HistoryResponse)(nil),                // 24: resource.HistoryResponse
 | ||||
| 	(*OriginRequest)(nil),                  // 25: resource.OriginRequest
 | ||||
| 	(*ResourceOriginInfo)(nil),             // 26: resource.ResourceOriginInfo
 | ||||
| 	(*OriginResponse)(nil),                 // 27: resource.OriginResponse
 | ||||
| 	(*HealthCheckRequest)(nil),             // 28: resource.HealthCheckRequest
 | ||||
| 	(*HealthCheckResponse)(nil),            // 29: resource.HealthCheckResponse
 | ||||
| 	(*WatchEvent_Resource)(nil),            // 30: resource.WatchEvent.Resource
 | ||||
| 	(*SearchRequest)(nil),                  // 23: resource.SearchRequest
 | ||||
| 	(*SearchResponse)(nil),                 // 24: resource.SearchResponse
 | ||||
| 	(*HistoryRequest)(nil),                 // 25: resource.HistoryRequest
 | ||||
| 	(*HistoryResponse)(nil),                // 26: resource.HistoryResponse
 | ||||
| 	(*OriginRequest)(nil),                  // 27: resource.OriginRequest
 | ||||
| 	(*ResourceOriginInfo)(nil),             // 28: resource.ResourceOriginInfo
 | ||||
| 	(*OriginResponse)(nil),                 // 29: resource.OriginResponse
 | ||||
| 	(*HealthCheckRequest)(nil),             // 30: resource.HealthCheckRequest
 | ||||
| 	(*HealthCheckResponse)(nil),            // 31: resource.HealthCheckResponse
 | ||||
| 	(*WatchEvent_Resource)(nil),            // 32: resource.WatchEvent.Resource
 | ||||
| } | ||||
| var file_resource_proto_depIdxs = []int32{ | ||||
| 	7,  // 0: resource.ErrorResult.details:type_name -> resource.ErrorDetails
 | ||||
|  | @ -2534,39 +2641,42 @@ var file_resource_proto_depIdxs = []int32{ | |||
| 	6,  // 16: resource.ListResponse.error:type_name -> resource.ErrorResult
 | ||||
| 	18, // 17: resource.WatchRequest.options:type_name -> resource.ListOptions
 | ||||
| 	1,  // 18: resource.WatchEvent.type:type_name -> resource.WatchEvent.Type
 | ||||
| 	30, // 19: resource.WatchEvent.resource:type_name -> resource.WatchEvent.Resource
 | ||||
| 	30, // 20: resource.WatchEvent.previous:type_name -> resource.WatchEvent.Resource
 | ||||
| 	3,  // 21: resource.HistoryRequest.key:type_name -> resource.ResourceKey
 | ||||
| 	5,  // 22: resource.HistoryResponse.items:type_name -> resource.ResourceMeta
 | ||||
| 	6,  // 23: resource.HistoryResponse.error:type_name -> resource.ErrorResult
 | ||||
| 	3,  // 24: resource.OriginRequest.key:type_name -> resource.ResourceKey
 | ||||
| 	3,  // 25: resource.ResourceOriginInfo.key:type_name -> resource.ResourceKey
 | ||||
| 	26, // 26: resource.OriginResponse.items:type_name -> resource.ResourceOriginInfo
 | ||||
| 	6,  // 27: resource.OriginResponse.error:type_name -> resource.ErrorResult
 | ||||
| 	2,  // 28: resource.HealthCheckResponse.status:type_name -> resource.HealthCheckResponse.ServingStatus
 | ||||
| 	15, // 29: resource.ResourceStore.Read:input_type -> resource.ReadRequest
 | ||||
| 	9,  // 30: resource.ResourceStore.Create:input_type -> resource.CreateRequest
 | ||||
| 	11, // 31: resource.ResourceStore.Update:input_type -> resource.UpdateRequest
 | ||||
| 	13, // 32: resource.ResourceStore.Delete:input_type -> resource.DeleteRequest
 | ||||
| 	19, // 33: resource.ResourceStore.List:input_type -> resource.ListRequest
 | ||||
| 	21, // 34: resource.ResourceStore.Watch:input_type -> resource.WatchRequest
 | ||||
| 	23, // 35: resource.ResourceIndex.History:input_type -> resource.HistoryRequest
 | ||||
| 	25, // 36: resource.ResourceIndex.Origin:input_type -> resource.OriginRequest
 | ||||
| 	28, // 37: resource.Diagnostics.IsHealthy:input_type -> resource.HealthCheckRequest
 | ||||
| 	16, // 38: resource.ResourceStore.Read:output_type -> resource.ReadResponse
 | ||||
| 	10, // 39: resource.ResourceStore.Create:output_type -> resource.CreateResponse
 | ||||
| 	12, // 40: resource.ResourceStore.Update:output_type -> resource.UpdateResponse
 | ||||
| 	14, // 41: resource.ResourceStore.Delete:output_type -> resource.DeleteResponse
 | ||||
| 	20, // 42: resource.ResourceStore.List:output_type -> resource.ListResponse
 | ||||
| 	22, // 43: resource.ResourceStore.Watch:output_type -> resource.WatchEvent
 | ||||
| 	24, // 44: resource.ResourceIndex.History:output_type -> resource.HistoryResponse
 | ||||
| 	27, // 45: resource.ResourceIndex.Origin:output_type -> resource.OriginResponse
 | ||||
| 	29, // 46: resource.Diagnostics.IsHealthy:output_type -> resource.HealthCheckResponse
 | ||||
| 	38, // [38:47] is the sub-list for method output_type
 | ||||
| 	29, // [29:38] is the sub-list for method input_type
 | ||||
| 	29, // [29:29] is the sub-list for extension type_name
 | ||||
| 	29, // [29:29] is the sub-list for extension extendee
 | ||||
| 	0,  // [0:29] is the sub-list for field type_name
 | ||||
| 	32, // 19: resource.WatchEvent.resource:type_name -> resource.WatchEvent.Resource
 | ||||
| 	32, // 20: resource.WatchEvent.previous:type_name -> resource.WatchEvent.Resource
 | ||||
| 	4,  // 21: resource.SearchResponse.items:type_name -> resource.ResourceWrapper
 | ||||
| 	3,  // 22: resource.HistoryRequest.key:type_name -> resource.ResourceKey
 | ||||
| 	5,  // 23: resource.HistoryResponse.items:type_name -> resource.ResourceMeta
 | ||||
| 	6,  // 24: resource.HistoryResponse.error:type_name -> resource.ErrorResult
 | ||||
| 	3,  // 25: resource.OriginRequest.key:type_name -> resource.ResourceKey
 | ||||
| 	3,  // 26: resource.ResourceOriginInfo.key:type_name -> resource.ResourceKey
 | ||||
| 	28, // 27: resource.OriginResponse.items:type_name -> resource.ResourceOriginInfo
 | ||||
| 	6,  // 28: resource.OriginResponse.error:type_name -> resource.ErrorResult
 | ||||
| 	2,  // 29: resource.HealthCheckResponse.status:type_name -> resource.HealthCheckResponse.ServingStatus
 | ||||
| 	15, // 30: resource.ResourceStore.Read:input_type -> resource.ReadRequest
 | ||||
| 	9,  // 31: resource.ResourceStore.Create:input_type -> resource.CreateRequest
 | ||||
| 	11, // 32: resource.ResourceStore.Update:input_type -> resource.UpdateRequest
 | ||||
| 	13, // 33: resource.ResourceStore.Delete:input_type -> resource.DeleteRequest
 | ||||
| 	19, // 34: resource.ResourceStore.List:input_type -> resource.ListRequest
 | ||||
| 	21, // 35: resource.ResourceStore.Watch:input_type -> resource.WatchRequest
 | ||||
| 	23, // 36: resource.ResourceIndex.Search:input_type -> resource.SearchRequest
 | ||||
| 	25, // 37: resource.ResourceIndex.History:input_type -> resource.HistoryRequest
 | ||||
| 	27, // 38: resource.ResourceIndex.Origin:input_type -> resource.OriginRequest
 | ||||
| 	30, // 39: resource.Diagnostics.IsHealthy:input_type -> resource.HealthCheckRequest
 | ||||
| 	16, // 40: resource.ResourceStore.Read:output_type -> resource.ReadResponse
 | ||||
| 	10, // 41: resource.ResourceStore.Create:output_type -> resource.CreateResponse
 | ||||
| 	12, // 42: resource.ResourceStore.Update:output_type -> resource.UpdateResponse
 | ||||
| 	14, // 43: resource.ResourceStore.Delete:output_type -> resource.DeleteResponse
 | ||||
| 	20, // 44: resource.ResourceStore.List:output_type -> resource.ListResponse
 | ||||
| 	22, // 45: resource.ResourceStore.Watch:output_type -> resource.WatchEvent
 | ||||
| 	24, // 46: resource.ResourceIndex.Search:output_type -> resource.SearchResponse
 | ||||
| 	26, // 47: resource.ResourceIndex.History:output_type -> resource.HistoryResponse
 | ||||
| 	29, // 48: resource.ResourceIndex.Origin:output_type -> resource.OriginResponse
 | ||||
| 	31, // 49: resource.Diagnostics.IsHealthy:output_type -> resource.HealthCheckResponse
 | ||||
| 	40, // [40:50] is the sub-list for method output_type
 | ||||
| 	30, // [30:40] is the sub-list for method input_type
 | ||||
| 	30, // [30:30] is the sub-list for extension type_name
 | ||||
| 	30, // [30:30] is the sub-list for extension extendee
 | ||||
| 	0,  // [0:30] is the sub-list for field type_name
 | ||||
| } | ||||
| 
 | ||||
| func init() { file_resource_proto_init() } | ||||
|  | @ -2816,7 +2926,7 @@ func file_resource_proto_init() { | |||
| 			} | ||||
| 		} | ||||
| 		file_resource_proto_msgTypes[20].Exporter = func(v any, i int) any { | ||||
| 			switch v := v.(*HistoryRequest); i { | ||||
| 			switch v := v.(*SearchRequest); i { | ||||
| 			case 0: | ||||
| 				return &v.state | ||||
| 			case 1: | ||||
|  | @ -2828,7 +2938,7 @@ func file_resource_proto_init() { | |||
| 			} | ||||
| 		} | ||||
| 		file_resource_proto_msgTypes[21].Exporter = func(v any, i int) any { | ||||
| 			switch v := v.(*HistoryResponse); i { | ||||
| 			switch v := v.(*SearchResponse); i { | ||||
| 			case 0: | ||||
| 				return &v.state | ||||
| 			case 1: | ||||
|  | @ -2840,7 +2950,7 @@ func file_resource_proto_init() { | |||
| 			} | ||||
| 		} | ||||
| 		file_resource_proto_msgTypes[22].Exporter = func(v any, i int) any { | ||||
| 			switch v := v.(*OriginRequest); i { | ||||
| 			switch v := v.(*HistoryRequest); i { | ||||
| 			case 0: | ||||
| 				return &v.state | ||||
| 			case 1: | ||||
|  | @ -2852,7 +2962,7 @@ func file_resource_proto_init() { | |||
| 			} | ||||
| 		} | ||||
| 		file_resource_proto_msgTypes[23].Exporter = func(v any, i int) any { | ||||
| 			switch v := v.(*ResourceOriginInfo); i { | ||||
| 			switch v := v.(*HistoryResponse); i { | ||||
| 			case 0: | ||||
| 				return &v.state | ||||
| 			case 1: | ||||
|  | @ -2864,7 +2974,7 @@ func file_resource_proto_init() { | |||
| 			} | ||||
| 		} | ||||
| 		file_resource_proto_msgTypes[24].Exporter = func(v any, i int) any { | ||||
| 			switch v := v.(*OriginResponse); i { | ||||
| 			switch v := v.(*OriginRequest); i { | ||||
| 			case 0: | ||||
| 				return &v.state | ||||
| 			case 1: | ||||
|  | @ -2876,7 +2986,7 @@ func file_resource_proto_init() { | |||
| 			} | ||||
| 		} | ||||
| 		file_resource_proto_msgTypes[25].Exporter = func(v any, i int) any { | ||||
| 			switch v := v.(*HealthCheckRequest); i { | ||||
| 			switch v := v.(*ResourceOriginInfo); i { | ||||
| 			case 0: | ||||
| 				return &v.state | ||||
| 			case 1: | ||||
|  | @ -2888,7 +2998,7 @@ func file_resource_proto_init() { | |||
| 			} | ||||
| 		} | ||||
| 		file_resource_proto_msgTypes[26].Exporter = func(v any, i int) any { | ||||
| 			switch v := v.(*HealthCheckResponse); i { | ||||
| 			switch v := v.(*OriginResponse); i { | ||||
| 			case 0: | ||||
| 				return &v.state | ||||
| 			case 1: | ||||
|  | @ -2900,6 +3010,30 @@ func file_resource_proto_init() { | |||
| 			} | ||||
| 		} | ||||
| 		file_resource_proto_msgTypes[27].Exporter = func(v any, i int) any { | ||||
| 			switch v := v.(*HealthCheckRequest); i { | ||||
| 			case 0: | ||||
| 				return &v.state | ||||
| 			case 1: | ||||
| 				return &v.sizeCache | ||||
| 			case 2: | ||||
| 				return &v.unknownFields | ||||
| 			default: | ||||
| 				return nil | ||||
| 			} | ||||
| 		} | ||||
| 		file_resource_proto_msgTypes[28].Exporter = func(v any, i int) any { | ||||
| 			switch v := v.(*HealthCheckResponse); i { | ||||
| 			case 0: | ||||
| 				return &v.state | ||||
| 			case 1: | ||||
| 				return &v.sizeCache | ||||
| 			case 2: | ||||
| 				return &v.unknownFields | ||||
| 			default: | ||||
| 				return nil | ||||
| 			} | ||||
| 		} | ||||
| 		file_resource_proto_msgTypes[29].Exporter = func(v any, i int) any { | ||||
| 			switch v := v.(*WatchEvent_Resource); i { | ||||
| 			case 0: | ||||
| 				return &v.state | ||||
|  | @ -2918,7 +3052,7 @@ func file_resource_proto_init() { | |||
| 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(), | ||||
| 			RawDescriptor: file_resource_proto_rawDesc, | ||||
| 			NumEnums:      3, | ||||
| 			NumMessages:   28, | ||||
| 			NumMessages:   30, | ||||
| 			NumExtensions: 0, | ||||
| 			NumServices:   3, | ||||
| 		}, | ||||
|  |  | |||
|  | @ -137,8 +137,8 @@ message CreateRequest { | |||
|   // If name is not set, a unique name will be generated | ||||
|   // The resourceVersion should not be set | ||||
|   ResourceKey key = 1; | ||||
|    | ||||
|   // The resource JSON.   | ||||
| 
 | ||||
|   // The resource JSON. | ||||
|   bytes value = 2; | ||||
| } | ||||
| 
 | ||||
|  | @ -157,7 +157,7 @@ message UpdateRequest { | |||
|   // The current resource version | ||||
|   int64 resource_version = 2; | ||||
| 
 | ||||
|   // The resource JSON.   | ||||
|   // The resource JSON. | ||||
|   bytes value = 3; | ||||
| } | ||||
| 
 | ||||
|  | @ -245,7 +245,7 @@ message ListRequest { | |||
| 
 | ||||
|   // The resource version | ||||
|   int64 resource_version = 2; | ||||
|    | ||||
| 
 | ||||
|   // List options | ||||
|   ResourceVersionMatch version_match = 3; | ||||
| 
 | ||||
|  | @ -302,8 +302,8 @@ message WatchEvent { | |||
|     ADDED = 1; | ||||
|     MODIFIED = 2; | ||||
|     DELETED = 3; | ||||
|     BOOKMARK = 4;   | ||||
|     ERROR = 5;   | ||||
|     BOOKMARK = 4; | ||||
|     ERROR = 5; | ||||
|   } | ||||
| 
 | ||||
|   message Resource { | ||||
|  | @ -324,6 +324,14 @@ message WatchEvent { | |||
|   Resource previous = 4; | ||||
| } | ||||
| 
 | ||||
| message SearchRequest { | ||||
|   string query = 1; | ||||
| } | ||||
| 
 | ||||
| message SearchResponse { | ||||
|   repeated ResourceWrapper items = 1; | ||||
| } | ||||
| 
 | ||||
| message HistoryRequest { | ||||
|   // Starting from the requested page (other query parameters must match!) | ||||
|   string next_page_token = 1; | ||||
|  | @ -418,7 +426,7 @@ message HealthCheckResponse { | |||
| 
 | ||||
| // This provides the CRUD+List+Watch support needed for a k8s apiserver | ||||
| // The semantics and behaviors of this service are constrained by kubernetes | ||||
| // This does not understand the resource schemas, only deals with json bytes  | ||||
| // This does not understand the resource schemas, only deals with json bytes | ||||
| // Clients should not use this interface directly; it is for use in API Servers | ||||
| service ResourceStore { | ||||
|   rpc Read(ReadRequest) returns (ReadResponse); | ||||
|  | @ -427,12 +435,12 @@ service ResourceStore { | |||
|   rpc Delete(DeleteRequest) returns (DeleteResponse); | ||||
| 
 | ||||
|   // The results *may* include values that should not be returned to the user | ||||
|   // This will perform best-effort filtering to increase performace.  | ||||
|   // This will perform best-effort filtering to increase performace. | ||||
|   // NOTE: storage.Interface is ultimatly responsible for the final filtering | ||||
|   rpc List(ListRequest) returns (ListResponse); | ||||
| 
 | ||||
|   // The results *may* include values that should not be returned to the user | ||||
|   // This will perform best-effort filtering to increase performace.  | ||||
|   // This will perform best-effort filtering to increase performace. | ||||
|   // NOTE: storage.Interface is ultimatly responsible for the final filtering | ||||
|   rpc Watch(WatchRequest) returns (stream WatchEvent); | ||||
| } | ||||
|  | @ -440,7 +448,7 @@ service ResourceStore { | |||
| // Unlike the ResourceStore, this service can be exposed to clients directly | ||||
| // It should be implemented with efficient indexes and does not need read-after-write semantics | ||||
| service ResourceIndex { | ||||
|   // TODO: rpc Search(...) ... eventually a typed response | ||||
|    rpc Search(SearchRequest) returns (SearchResponse); | ||||
| 
 | ||||
|   // Show resource history (and trash) | ||||
|   rpc History(HistoryRequest) returns (HistoryResponse); | ||||
|  |  | |||
|  | @ -348,6 +348,7 @@ var ResourceStore_ServiceDesc = grpc.ServiceDesc{ | |||
| } | ||||
| 
 | ||||
| const ( | ||||
| 	ResourceIndex_Search_FullMethodName  = "/resource.ResourceIndex/Search" | ||||
| 	ResourceIndex_History_FullMethodName = "/resource.ResourceIndex/History" | ||||
| 	ResourceIndex_Origin_FullMethodName  = "/resource.ResourceIndex/Origin" | ||||
| ) | ||||
|  | @ -359,6 +360,7 @@ const ( | |||
| // Unlike the ResourceStore, this service can be exposed to clients directly
 | ||||
| // It should be implemented with efficient indexes and does not need read-after-write semantics
 | ||||
| type ResourceIndexClient interface { | ||||
| 	Search(ctx context.Context, in *SearchRequest, opts ...grpc.CallOption) (*SearchResponse, error) | ||||
| 	// Show resource history (and trash)
 | ||||
| 	History(ctx context.Context, in *HistoryRequest, opts ...grpc.CallOption) (*HistoryResponse, error) | ||||
| 	// Used for efficient provisioning
 | ||||
|  | @ -373,6 +375,16 @@ func NewResourceIndexClient(cc grpc.ClientConnInterface) ResourceIndexClient { | |||
| 	return &resourceIndexClient{cc} | ||||
| } | ||||
| 
 | ||||
| func (c *resourceIndexClient) Search(ctx context.Context, in *SearchRequest, opts ...grpc.CallOption) (*SearchResponse, error) { | ||||
| 	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) | ||||
| 	out := new(SearchResponse) | ||||
| 	err := c.cc.Invoke(ctx, ResourceIndex_Search_FullMethodName, in, out, cOpts...) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return out, nil | ||||
| } | ||||
| 
 | ||||
| func (c *resourceIndexClient) History(ctx context.Context, in *HistoryRequest, opts ...grpc.CallOption) (*HistoryResponse, error) { | ||||
| 	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) | ||||
| 	out := new(HistoryResponse) | ||||
|  | @ -400,6 +412,7 @@ func (c *resourceIndexClient) Origin(ctx context.Context, in *OriginRequest, opt | |||
| // Unlike the ResourceStore, this service can be exposed to clients directly
 | ||||
| // It should be implemented with efficient indexes and does not need read-after-write semantics
 | ||||
| type ResourceIndexServer interface { | ||||
| 	Search(context.Context, *SearchRequest) (*SearchResponse, error) | ||||
| 	// Show resource history (and trash)
 | ||||
| 	History(context.Context, *HistoryRequest) (*HistoryResponse, error) | ||||
| 	// Used for efficient provisioning
 | ||||
|  | @ -410,6 +423,9 @@ type ResourceIndexServer interface { | |||
| type UnimplementedResourceIndexServer struct { | ||||
| } | ||||
| 
 | ||||
| func (UnimplementedResourceIndexServer) Search(context.Context, *SearchRequest) (*SearchResponse, error) { | ||||
| 	return nil, status.Errorf(codes.Unimplemented, "method Search not implemented") | ||||
| } | ||||
| func (UnimplementedResourceIndexServer) History(context.Context, *HistoryRequest) (*HistoryResponse, error) { | ||||
| 	return nil, status.Errorf(codes.Unimplemented, "method History not implemented") | ||||
| } | ||||
|  | @ -428,6 +444,24 @@ func RegisterResourceIndexServer(s grpc.ServiceRegistrar, srv ResourceIndexServe | |||
| 	s.RegisterService(&ResourceIndex_ServiceDesc, srv) | ||||
| } | ||||
| 
 | ||||
| func _ResourceIndex_Search_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { | ||||
| 	in := new(SearchRequest) | ||||
| 	if err := dec(in); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if interceptor == nil { | ||||
| 		return srv.(ResourceIndexServer).Search(ctx, in) | ||||
| 	} | ||||
| 	info := &grpc.UnaryServerInfo{ | ||||
| 		Server:     srv, | ||||
| 		FullMethod: ResourceIndex_Search_FullMethodName, | ||||
| 	} | ||||
| 	handler := func(ctx context.Context, req interface{}) (interface{}, error) { | ||||
| 		return srv.(ResourceIndexServer).Search(ctx, req.(*SearchRequest)) | ||||
| 	} | ||||
| 	return interceptor(ctx, in, info, handler) | ||||
| } | ||||
| 
 | ||||
| func _ResourceIndex_History_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { | ||||
| 	in := new(HistoryRequest) | ||||
| 	if err := dec(in); err != nil { | ||||
|  | @ -471,6 +505,10 @@ var ResourceIndex_ServiceDesc = grpc.ServiceDesc{ | |||
| 	ServiceName: "resource.ResourceIndex", | ||||
| 	HandlerType: (*ResourceIndexServer)(nil), | ||||
| 	Methods: []grpc.MethodDesc{ | ||||
| 		{ | ||||
| 			MethodName: "Search", | ||||
| 			Handler:    _ResourceIndex_Search_Handler, | ||||
| 		}, | ||||
| 		{ | ||||
| 			MethodName: "History", | ||||
| 			Handler:    _ResourceIndex_History_Handler, | ||||
|  |  | |||
|  | @ -100,6 +100,25 @@ type ResourceServerOptions struct { | |||
| 	Now func() int64 | ||||
| } | ||||
| 
 | ||||
| type indexServer struct{} | ||||
| 
 | ||||
| func (s indexServer) Search(ctx context.Context, req *SearchRequest) (*SearchResponse, error) { | ||||
| 	res := &SearchResponse{} | ||||
| 	return res, nil | ||||
| } | ||||
| 
 | ||||
| func (s indexServer) History(ctx context.Context, req *HistoryRequest) (*HistoryResponse, error) { | ||||
| 	return nil, nil | ||||
| } | ||||
| 
 | ||||
| func (s indexServer) Origin(ctx context.Context, req *OriginRequest) (*OriginResponse, error) { | ||||
| 	return nil, nil | ||||
| } | ||||
| 
 | ||||
| func NewResourceIndexServer() ResourceIndexServer { | ||||
| 	return indexServer{} | ||||
| } | ||||
| 
 | ||||
| func NewResourceServer(opts ResourceServerOptions) (ResourceServer, error) { | ||||
| 	if opts.Tracer == nil { | ||||
| 		opts.Tracer = noop.NewTracerProvider().Tracer("resource-server") | ||||
|  | @ -108,9 +127,7 @@ func NewResourceServer(opts ResourceServerOptions) (ResourceServer, error) { | |||
| 	if opts.Backend == nil { | ||||
| 		return nil, fmt.Errorf("missing Backend implementation") | ||||
| 	} | ||||
| 	if opts.Index == nil { | ||||
| 		opts.Index = &noopService{} | ||||
| 	} | ||||
| 
 | ||||
| 	if opts.Diagnostics == nil { | ||||
| 		opts.Diagnostics = &noopService{} | ||||
| 	} | ||||
|  | @ -667,6 +684,13 @@ func (s *server) Watch(req *WatchRequest, srv ResourceStore_WatchServer) error { | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (s *server) Search(ctx context.Context, req *SearchRequest) (*SearchResponse, error) { | ||||
| 	if err := s.Init(ctx); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return s.index.Search(ctx, req) | ||||
| } | ||||
| 
 | ||||
| // History implements ResourceServer.
 | ||||
| func (s *server) History(ctx context.Context, req *HistoryRequest) (*HistoryResponse, error) { | ||||
| 	if err := s.Init(ctx); err != nil { | ||||
|  |  | |||
|  | @ -27,5 +27,9 @@ func NewResourceServer(db infraDB.DB, cfg *setting.Cfg, features featuremgmt.Fea | |||
| 	opts.Diagnostics = store | ||||
| 	opts.Lifecycle = store | ||||
| 
 | ||||
| 	if features.IsEnabledGlobally(featuremgmt.FlagUnifiedStorageSearch) { | ||||
| 		opts.Index = resource.NewResourceIndexServer() | ||||
| 	} | ||||
| 
 | ||||
| 	return resource.NewResourceServer(opts) | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue