[otel-tracing] vendor and go modules changes
This tracks all the vendor file changes and changes to go modules due to OpenTelemetry support Signed-off-by: Alakesh Haloi <alakeshh@amazon.com>
This commit is contained in:
		
							
								
								
									
										202
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										202
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,202 @@
 | 
			
		||||
# Created by .ignore support plugin (hsz.mobi)
 | 
			
		||||
### Go template
 | 
			
		||||
# Compiled Object files, Static and Dynamic libs (Shared Objects)
 | 
			
		||||
*.o
 | 
			
		||||
*.a
 | 
			
		||||
*.so
 | 
			
		||||
 | 
			
		||||
# Folders
 | 
			
		||||
_obj
 | 
			
		||||
_test
 | 
			
		||||
 | 
			
		||||
# Architecture specific extensions/prefixes
 | 
			
		||||
*.[568vq]
 | 
			
		||||
[568vq].out
 | 
			
		||||
 | 
			
		||||
*.cgo1.go
 | 
			
		||||
*.cgo2.c
 | 
			
		||||
_cgo_defun.c
 | 
			
		||||
_cgo_gotypes.go
 | 
			
		||||
_cgo_export.*
 | 
			
		||||
 | 
			
		||||
_testmain.go
 | 
			
		||||
 | 
			
		||||
*.exe
 | 
			
		||||
*.test
 | 
			
		||||
*.prof
 | 
			
		||||
### Windows template
 | 
			
		||||
# Windows image file caches
 | 
			
		||||
Thumbs.db
 | 
			
		||||
ehthumbs.db
 | 
			
		||||
 | 
			
		||||
# Folder config file
 | 
			
		||||
Desktop.ini
 | 
			
		||||
 | 
			
		||||
# Recycle Bin used on file shares
 | 
			
		||||
$RECYCLE.BIN/
 | 
			
		||||
 | 
			
		||||
# Windows Installer files
 | 
			
		||||
*.cab
 | 
			
		||||
*.msi
 | 
			
		||||
*.msm
 | 
			
		||||
*.msp
 | 
			
		||||
 | 
			
		||||
# Windows shortcuts
 | 
			
		||||
*.lnk
 | 
			
		||||
### Kate template
 | 
			
		||||
# Swap Files #
 | 
			
		||||
.*.kate-swp
 | 
			
		||||
.swp.*
 | 
			
		||||
### SublimeText template
 | 
			
		||||
# cache files for sublime text
 | 
			
		||||
*.tmlanguage.cache
 | 
			
		||||
*.tmPreferences.cache
 | 
			
		||||
*.stTheme.cache
 | 
			
		||||
 | 
			
		||||
# workspace files are user-specific
 | 
			
		||||
*.sublime-workspace
 | 
			
		||||
 | 
			
		||||
# project files should be checked into the repository, unless a significant
 | 
			
		||||
# proportion of contributors will probably not be using SublimeText
 | 
			
		||||
# *.sublime-project
 | 
			
		||||
 | 
			
		||||
# sftp configuration file
 | 
			
		||||
sftp-config.json
 | 
			
		||||
### Linux template
 | 
			
		||||
*~
 | 
			
		||||
 | 
			
		||||
# temporary files which can be created if a process still has a handle open of a deleted file
 | 
			
		||||
.fuse_hidden*
 | 
			
		||||
 | 
			
		||||
# KDE directory preferences
 | 
			
		||||
.directory
 | 
			
		||||
 | 
			
		||||
# Linux trash folder which might appear on any partition or disk
 | 
			
		||||
.Trash-*
 | 
			
		||||
### JetBrains template
 | 
			
		||||
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
 | 
			
		||||
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
 | 
			
		||||
 | 
			
		||||
# User-specific stuff:
 | 
			
		||||
.idea
 | 
			
		||||
.idea/tasks.xml
 | 
			
		||||
.idea/dictionaries
 | 
			
		||||
.idea/vcs.xml
 | 
			
		||||
.idea/jsLibraryMappings.xml
 | 
			
		||||
 | 
			
		||||
# Sensitive or high-churn files:
 | 
			
		||||
.idea/dataSources.ids
 | 
			
		||||
.idea/dataSources.xml
 | 
			
		||||
.idea/dataSources.local.xml
 | 
			
		||||
.idea/sqlDataSources.xml
 | 
			
		||||
.idea/dynamic.xml
 | 
			
		||||
.idea/uiDesigner.xml
 | 
			
		||||
 | 
			
		||||
# Gradle:
 | 
			
		||||
.idea/gradle.xml
 | 
			
		||||
.idea/libraries
 | 
			
		||||
 | 
			
		||||
# Mongo Explorer plugin:
 | 
			
		||||
.idea/mongoSettings.xml
 | 
			
		||||
 | 
			
		||||
## File-based project format:
 | 
			
		||||
*.iws
 | 
			
		||||
 | 
			
		||||
## Plugin-specific files:
 | 
			
		||||
 | 
			
		||||
# IntelliJ
 | 
			
		||||
/out/
 | 
			
		||||
 | 
			
		||||
# mpeltonen/sbt-idea plugin
 | 
			
		||||
.idea_modules/
 | 
			
		||||
 | 
			
		||||
# JIRA plugin
 | 
			
		||||
atlassian-ide-plugin.xml
 | 
			
		||||
 | 
			
		||||
# Crashlytics plugin (for Android Studio and IntelliJ)
 | 
			
		||||
com_crashlytics_export_strings.xml
 | 
			
		||||
crashlytics.properties
 | 
			
		||||
crashlytics-build.properties
 | 
			
		||||
fabric.properties
 | 
			
		||||
### Xcode template
 | 
			
		||||
# Xcode
 | 
			
		||||
#
 | 
			
		||||
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
 | 
			
		||||
 | 
			
		||||
## Build generated
 | 
			
		||||
build/
 | 
			
		||||
DerivedData/
 | 
			
		||||
 | 
			
		||||
## Various settings
 | 
			
		||||
*.pbxuser
 | 
			
		||||
!default.pbxuser
 | 
			
		||||
*.mode1v3
 | 
			
		||||
!default.mode1v3
 | 
			
		||||
*.mode2v3
 | 
			
		||||
!default.mode2v3
 | 
			
		||||
*.perspectivev3
 | 
			
		||||
!default.perspectivev3
 | 
			
		||||
xcuserdata/
 | 
			
		||||
 | 
			
		||||
## Other
 | 
			
		||||
*.moved-aside
 | 
			
		||||
*.xccheckout
 | 
			
		||||
*.xcscmblueprint
 | 
			
		||||
### Eclipse template
 | 
			
		||||
 | 
			
		||||
.metadata
 | 
			
		||||
bin/
 | 
			
		||||
tmp/
 | 
			
		||||
*.tmp
 | 
			
		||||
*.bak
 | 
			
		||||
*.swp
 | 
			
		||||
*~.nib
 | 
			
		||||
local.properties
 | 
			
		||||
.settings/
 | 
			
		||||
.loadpath
 | 
			
		||||
.recommenders
 | 
			
		||||
 | 
			
		||||
# Eclipse Core
 | 
			
		||||
.project
 | 
			
		||||
 | 
			
		||||
# External tool builders
 | 
			
		||||
.externalToolBuilders/
 | 
			
		||||
 | 
			
		||||
# Locally stored "Eclipse launch configurations"
 | 
			
		||||
*.launch
 | 
			
		||||
 | 
			
		||||
# PyDev specific (Python IDE for Eclipse)
 | 
			
		||||
*.pydevproject
 | 
			
		||||
 | 
			
		||||
# CDT-specific (C/C++ Development Tooling)
 | 
			
		||||
.cproject
 | 
			
		||||
 | 
			
		||||
# JDT-specific (Eclipse Java Development Tools)
 | 
			
		||||
.classpath
 | 
			
		||||
 | 
			
		||||
# Java annotation processor (APT)
 | 
			
		||||
.factorypath
 | 
			
		||||
 | 
			
		||||
# PDT-specific (PHP Development Tools)
 | 
			
		||||
.buildpath
 | 
			
		||||
 | 
			
		||||
# sbteclipse plugin
 | 
			
		||||
.target
 | 
			
		||||
 | 
			
		||||
# Tern plugin
 | 
			
		||||
.tern-project
 | 
			
		||||
 | 
			
		||||
# TeXlipse plugin
 | 
			
		||||
.texlipse
 | 
			
		||||
 | 
			
		||||
# STS (Spring Tool Suite)
 | 
			
		||||
.springBeans
 | 
			
		||||
 | 
			
		||||
# Code Recommenders
 | 
			
		||||
.recommenders/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
coverage.txt
 | 
			
		||||
 | 
			
		||||
#vendor
 | 
			
		||||
vendor/
 | 
			
		||||
							
								
								
									
										21
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
sudo: false
 | 
			
		||||
language: go
 | 
			
		||||
go:
 | 
			
		||||
  - 1.8.x
 | 
			
		||||
env:
 | 
			
		||||
  - DEP_VERSION="0.3.2"
 | 
			
		||||
 | 
			
		||||
before_install:
 | 
			
		||||
  # Download the binary to bin folder in $GOPATH
 | 
			
		||||
  - curl -L -s https://github.com/golang/dep/releases/download/v${DEP_VERSION}/dep-linux-amd64 -o $GOPATH/bin/dep
 | 
			
		||||
  # Make the binary executable
 | 
			
		||||
  - chmod +x $GOPATH/bin/dep
 | 
			
		||||
 | 
			
		||||
install:
 | 
			
		||||
  - dep ensure
 | 
			
		||||
 | 
			
		||||
script:
 | 
			
		||||
 - make test
 | 
			
		||||
 
 | 
			
		||||
after_success:
 | 
			
		||||
  - bash <(curl -s https://codecov.io/bash)
 | 
			
		||||
							
								
								
									
										30
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/CHANGELOG.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/CHANGELOG.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
# Changelog
 | 
			
		||||
All notable changes to this project will be documented in this file.
 | 
			
		||||
 | 
			
		||||
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
 | 
			
		||||
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
 | 
			
		||||
 | 
			
		||||
Types of changes:
 | 
			
		||||
- `Added` for new features.
 | 
			
		||||
- `Changed` for changes in existing functionality.
 | 
			
		||||
- `Deprecated` for soon-to-be removed features.
 | 
			
		||||
- `Removed` for now removed features.
 | 
			
		||||
- `Fixed` for any bug fixes.
 | 
			
		||||
- `Security` in case of vulnerabilities.
 | 
			
		||||
 | 
			
		||||
## [Unreleased]
 | 
			
		||||
### Added
 | 
			
		||||
- This CHANGELOG file to keep track of changes.
 | 
			
		||||
 | 
			
		||||
## 1.0.0 - 2018-05-08
 | 
			
		||||
### Added
 | 
			
		||||
- grpc_auth 
 | 
			
		||||
- grpc_ctxtags
 | 
			
		||||
- grpc_zap
 | 
			
		||||
- grpc_logrus
 | 
			
		||||
- grpc_opentracing
 | 
			
		||||
- grpc_retry
 | 
			
		||||
- grpc_validator
 | 
			
		||||
- grpc_recovery
 | 
			
		||||
 | 
			
		||||
[Unreleased]: https://github.com/grpc-ecosystem/go-grpc-middleware/compare/v1.0.0...HEAD 
 | 
			
		||||
							
								
								
									
										20
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/CONTRIBUTING.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/CONTRIBUTING.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
# Contributing
 | 
			
		||||
 | 
			
		||||
We would love to have people submit pull requests and help make `grpc-ecosystem/go-grpc-middleware` even better 👍.
 | 
			
		||||
 | 
			
		||||
Fork, then clone the repo:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
git clone git@github.com:your-username/go-grpc-middleware.git
 | 
			
		||||
```    
 | 
			
		||||
 | 
			
		||||
Before checking in please run the following:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
make all
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
This will `vet`, `fmt`, regenerate documentation and run all tests.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Push to your fork and open a pull request.
 | 
			
		||||
							
								
								
									
										123
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/Gopkg.lock
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/Gopkg.lock
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,123 @@
 | 
			
		||||
# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  name = "cloud.google.com/go"
 | 
			
		||||
  packages = ["compute/metadata"]
 | 
			
		||||
  revision = "2d3a6656c17a60b0815b7e06ab0be04eacb6e613"
 | 
			
		||||
  version = "v0.16.0"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  name = "github.com/davecgh/go-spew"
 | 
			
		||||
  packages = ["spew"]
 | 
			
		||||
  revision = "346938d642f2ec3594ed81d874461961cd0faa76"
 | 
			
		||||
  version = "v1.1.0"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  name = "github.com/gogo/protobuf"
 | 
			
		||||
  packages = ["gogoproto","proto","protoc-gen-gogo/descriptor"]
 | 
			
		||||
  revision = "342cbe0a04158f6dcb03ca0079991a51a4248c02"
 | 
			
		||||
  version = "v0.5"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  name = "github.com/golang/protobuf"
 | 
			
		||||
  packages = ["jsonpb","proto","ptypes","ptypes/any","ptypes/duration","ptypes/struct","ptypes/timestamp"]
 | 
			
		||||
  revision = "1e59b77b52bf8e4b449a57e6f79f21226d571845"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  name = "github.com/opentracing/opentracing-go"
 | 
			
		||||
  packages = [".","ext","log","mocktracer"]
 | 
			
		||||
  revision = "1949ddbfd147afd4d964a9f00b24eb291e0e7c38"
 | 
			
		||||
  version = "v1.0.2"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  name = "github.com/pmezard/go-difflib"
 | 
			
		||||
  packages = ["difflib"]
 | 
			
		||||
  revision = "792786c7400a136282c1664665ae0a8db921c6c2"
 | 
			
		||||
  version = "v1.0.0"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  name = "github.com/sirupsen/logrus"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  revision = "f006c2ac4710855cf0f916dd6b77acf6b048dc6e"
 | 
			
		||||
  version = "v1.0.3"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  name = "github.com/stretchr/testify"
 | 
			
		||||
  packages = ["assert","require","suite"]
 | 
			
		||||
  revision = "69483b4bd14f5845b5a1e55bca19e954e827f1d0"
 | 
			
		||||
  version = "v1.1.4"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  name = "go.uber.org/atomic"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  revision = "8474b86a5a6f79c443ce4b2992817ff32cf208b8"
 | 
			
		||||
  version = "v1.3.1"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  name = "go.uber.org/multierr"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  revision = "3c4937480c32f4c13a875a1829af76c98ca3d40a"
 | 
			
		||||
  version = "v1.1.0"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  name = "go.uber.org/zap"
 | 
			
		||||
  packages = [".","buffer","internal/bufferpool","internal/color","internal/exit","zapcore"]
 | 
			
		||||
  revision = "35aad584952c3e7020db7b839f6b102de6271f89"
 | 
			
		||||
  version = "v1.7.1"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  name = "golang.org/x/crypto"
 | 
			
		||||
  packages = ["ssh/terminal"]
 | 
			
		||||
  revision = "94eea52f7b742c7cbe0b03b22f0c4c8631ece122"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  name = "golang.org/x/net"
 | 
			
		||||
  packages = ["context","context/ctxhttp","http2","http2/hpack","idna","internal/timeseries","lex/httplex","trace"]
 | 
			
		||||
  revision = "a8b9294777976932365dabb6640cf1468d95c70f"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  name = "golang.org/x/oauth2"
 | 
			
		||||
  packages = [".","google","internal","jws","jwt"]
 | 
			
		||||
  revision = "f95fa95eaa936d9d87489b15d1d18b97c1ba9c28"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  name = "golang.org/x/sys"
 | 
			
		||||
  packages = ["unix","windows"]
 | 
			
		||||
  revision = "13fcbd661c8ececa8807a29b48407d674b1d8ed8"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  name = "golang.org/x/text"
 | 
			
		||||
  packages = ["collate","collate/build","internal/colltab","internal/gen","internal/tag","internal/triegen","internal/ucd","language","secure/bidirule","transform","unicode/bidi","unicode/cldr","unicode/norm","unicode/rangetable"]
 | 
			
		||||
  revision = "75cc3cad82b5f47d3fb229ddda8c5167da14f294"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  name = "google.golang.org/appengine"
 | 
			
		||||
  packages = [".","internal","internal/app_identity","internal/base","internal/datastore","internal/log","internal/modules","internal/remote_api","internal/urlfetch","urlfetch"]
 | 
			
		||||
  revision = "150dc57a1b433e64154302bdc40b6bb8aefa313a"
 | 
			
		||||
  version = "v1.0.0"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  name = "google.golang.org/genproto"
 | 
			
		||||
  packages = ["googleapis/rpc/status"]
 | 
			
		||||
  revision = "7f0da29060c682909f650ad8ed4e515bd74fa12a"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  name = "google.golang.org/grpc"
 | 
			
		||||
  packages = [".","balancer","balancer/roundrobin","codes","connectivity","credentials","credentials/oauth","encoding","grpclb/grpc_lb_v1/messages","grpclog","internal","keepalive","metadata","naming","peer","resolver","resolver/dns","resolver/passthrough","stats","status","tap","transport"]
 | 
			
		||||
  revision = "5a9f7b402fe85096d2e1d0383435ee1876e863d0"
 | 
			
		||||
  version = "v1.8.0"
 | 
			
		||||
 | 
			
		||||
[solve-meta]
 | 
			
		||||
  analyzer-name = "dep"
 | 
			
		||||
  analyzer-version = 1
 | 
			
		||||
  inputs-digest = "b24c6670412eb0bc44ed1db77fecc52333f8725f3e3272bdc568f5683a63031f"
 | 
			
		||||
  solver-name = "gps-cdcl"
 | 
			
		||||
  solver-version = 1
 | 
			
		||||
							
								
								
									
										35
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/Gopkg.toml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/Gopkg.toml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
[[constraint]]
 | 
			
		||||
  name = "github.com/gogo/protobuf"
 | 
			
		||||
  version = "0.5.0"
 | 
			
		||||
 | 
			
		||||
[[constraint]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  name = "github.com/golang/protobuf"
 | 
			
		||||
 | 
			
		||||
[[constraint]]
 | 
			
		||||
  name = "github.com/opentracing/opentracing-go"
 | 
			
		||||
  version = "1.0.2"
 | 
			
		||||
 | 
			
		||||
[[constraint]]
 | 
			
		||||
  name = "github.com/sirupsen/logrus"
 | 
			
		||||
  version = "1.0.3"
 | 
			
		||||
 | 
			
		||||
[[constraint]]
 | 
			
		||||
  name = "github.com/stretchr/testify"
 | 
			
		||||
  version = "1.1.4"
 | 
			
		||||
 | 
			
		||||
[[constraint]]
 | 
			
		||||
  name = "go.uber.org/zap"
 | 
			
		||||
  version = "1.7.1"
 | 
			
		||||
 | 
			
		||||
[[constraint]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  name = "golang.org/x/net"
 | 
			
		||||
 | 
			
		||||
[[constraint]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  name = "golang.org/x/oauth2"
 | 
			
		||||
 | 
			
		||||
[[constraint]]
 | 
			
		||||
  name = "google.golang.org/grpc"
 | 
			
		||||
  version = "1.8.0"
 | 
			
		||||
							
								
								
									
										201
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										201
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,201 @@
 | 
			
		||||
                 Apache License
 | 
			
		||||
                           Version 2.0, January 2004
 | 
			
		||||
                        http://www.apache.org/licenses/
 | 
			
		||||
 | 
			
		||||
   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
 | 
			
		||||
 | 
			
		||||
   1. Definitions.
 | 
			
		||||
 | 
			
		||||
      "License" shall mean the terms and conditions for use, reproduction,
 | 
			
		||||
      and distribution as defined by Sections 1 through 9 of this document.
 | 
			
		||||
 | 
			
		||||
      "Licensor" shall mean the copyright owner or entity authorized by
 | 
			
		||||
      the copyright owner that is granting the License.
 | 
			
		||||
 | 
			
		||||
      "Legal Entity" shall mean the union of the acting entity and all
 | 
			
		||||
      other entities that control, are controlled by, or are under common
 | 
			
		||||
      control with that entity. For the purposes of this definition,
 | 
			
		||||
      "control" means (i) the power, direct or indirect, to cause the
 | 
			
		||||
      direction or management of such entity, whether by contract or
 | 
			
		||||
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
 | 
			
		||||
      outstanding shares, or (iii) beneficial ownership of such entity.
 | 
			
		||||
 | 
			
		||||
      "You" (or "Your") shall mean an individual or Legal Entity
 | 
			
		||||
      exercising permissions granted by this License.
 | 
			
		||||
 | 
			
		||||
      "Source" form shall mean the preferred form for making modifications,
 | 
			
		||||
      including but not limited to software source code, documentation
 | 
			
		||||
      source, and configuration files.
 | 
			
		||||
 | 
			
		||||
      "Object" form shall mean any form resulting from mechanical
 | 
			
		||||
      transformation or translation of a Source form, including but
 | 
			
		||||
      not limited to compiled object code, generated documentation,
 | 
			
		||||
      and conversions to other media types.
 | 
			
		||||
 | 
			
		||||
      "Work" shall mean the work of authorship, whether in Source or
 | 
			
		||||
      Object form, made available under the License, as indicated by a
 | 
			
		||||
      copyright notice that is included in or attached to the work
 | 
			
		||||
      (an example is provided in the Appendix below).
 | 
			
		||||
 | 
			
		||||
      "Derivative Works" shall mean any work, whether in Source or Object
 | 
			
		||||
      form, that is based on (or derived from) the Work and for which the
 | 
			
		||||
      editorial revisions, annotations, elaborations, or other modifications
 | 
			
		||||
      represent, as a whole, an original work of authorship. For the purposes
 | 
			
		||||
      of this License, Derivative Works shall not include works that remain
 | 
			
		||||
      separable from, or merely link (or bind by name) to the interfaces of,
 | 
			
		||||
      the Work and Derivative Works thereof.
 | 
			
		||||
 | 
			
		||||
      "Contribution" shall mean any work of authorship, including
 | 
			
		||||
      the original version of the Work and any modifications or additions
 | 
			
		||||
      to that Work or Derivative Works thereof, that is intentionally
 | 
			
		||||
      submitted to Licensor for inclusion in the Work by the copyright owner
 | 
			
		||||
      or by an individual or Legal Entity authorized to submit on behalf of
 | 
			
		||||
      the copyright owner. For the purposes of this definition, "submitted"
 | 
			
		||||
      means any form of electronic, verbal, or written communication sent
 | 
			
		||||
      to the Licensor or its representatives, including but not limited to
 | 
			
		||||
      communication on electronic mailing lists, source code control systems,
 | 
			
		||||
      and issue tracking systems that are managed by, or on behalf of, the
 | 
			
		||||
      Licensor for the purpose of discussing and improving the Work, but
 | 
			
		||||
      excluding communication that is conspicuously marked or otherwise
 | 
			
		||||
      designated in writing by the copyright owner as "Not a Contribution."
 | 
			
		||||
 | 
			
		||||
      "Contributor" shall mean Licensor and any individual or Legal Entity
 | 
			
		||||
      on behalf of whom a Contribution has been received by Licensor and
 | 
			
		||||
      subsequently incorporated within the Work.
 | 
			
		||||
 | 
			
		||||
   2. Grant of Copyright License. Subject to the terms and conditions of
 | 
			
		||||
      this License, each Contributor hereby grants to You a perpetual,
 | 
			
		||||
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
 | 
			
		||||
      copyright license to reproduce, prepare Derivative Works of,
 | 
			
		||||
      publicly display, publicly perform, sublicense, and distribute the
 | 
			
		||||
      Work and such Derivative Works in Source or Object form.
 | 
			
		||||
 | 
			
		||||
   3. Grant of Patent License. Subject to the terms and conditions of
 | 
			
		||||
      this License, each Contributor hereby grants to You a perpetual,
 | 
			
		||||
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
 | 
			
		||||
      (except as stated in this section) patent license to make, have made,
 | 
			
		||||
      use, offer to sell, sell, import, and otherwise transfer the Work,
 | 
			
		||||
      where such license applies only to those patent claims licensable
 | 
			
		||||
      by such Contributor that are necessarily infringed by their
 | 
			
		||||
      Contribution(s) alone or by combination of their Contribution(s)
 | 
			
		||||
      with the Work to which such Contribution(s) was submitted. If You
 | 
			
		||||
      institute patent litigation against any entity (including a
 | 
			
		||||
      cross-claim or counterclaim in a lawsuit) alleging that the Work
 | 
			
		||||
      or a Contribution incorporated within the Work constitutes direct
 | 
			
		||||
      or contributory patent infringement, then any patent licenses
 | 
			
		||||
      granted to You under this License for that Work shall terminate
 | 
			
		||||
      as of the date such litigation is filed.
 | 
			
		||||
 | 
			
		||||
   4. Redistribution. You may reproduce and distribute copies of the
 | 
			
		||||
      Work or Derivative Works thereof in any medium, with or without
 | 
			
		||||
      modifications, and in Source or Object form, provided that You
 | 
			
		||||
      meet the following conditions:
 | 
			
		||||
 | 
			
		||||
      (a) You must give any other recipients of the Work or
 | 
			
		||||
          Derivative Works a copy of this License; and
 | 
			
		||||
 | 
			
		||||
      (b) You must cause any modified files to carry prominent notices
 | 
			
		||||
          stating that You changed the files; and
 | 
			
		||||
 | 
			
		||||
      (c) You must retain, in the Source form of any Derivative Works
 | 
			
		||||
          that You distribute, all copyright, patent, trademark, and
 | 
			
		||||
          attribution notices from the Source form of the Work,
 | 
			
		||||
          excluding those notices that do not pertain to any part of
 | 
			
		||||
          the Derivative Works; and
 | 
			
		||||
 | 
			
		||||
      (d) If the Work includes a "NOTICE" text file as part of its
 | 
			
		||||
          distribution, then any Derivative Works that You distribute must
 | 
			
		||||
          include a readable copy of the attribution notices contained
 | 
			
		||||
          within such NOTICE file, excluding those notices that do not
 | 
			
		||||
          pertain to any part of the Derivative Works, in at least one
 | 
			
		||||
          of the following places: within a NOTICE text file distributed
 | 
			
		||||
          as part of the Derivative Works; within the Source form or
 | 
			
		||||
          documentation, if provided along with the Derivative Works; or,
 | 
			
		||||
          within a display generated by the Derivative Works, if and
 | 
			
		||||
          wherever such third-party notices normally appear. The contents
 | 
			
		||||
          of the NOTICE file are for informational purposes only and
 | 
			
		||||
          do not modify the License. You may add Your own attribution
 | 
			
		||||
          notices within Derivative Works that You distribute, alongside
 | 
			
		||||
          or as an addendum to the NOTICE text from the Work, provided
 | 
			
		||||
          that such additional attribution notices cannot be construed
 | 
			
		||||
          as modifying the License.
 | 
			
		||||
 | 
			
		||||
      You may add Your own copyright statement to Your modifications and
 | 
			
		||||
      may provide additional or different license terms and conditions
 | 
			
		||||
      for use, reproduction, or distribution of Your modifications, or
 | 
			
		||||
      for any such Derivative Works as a whole, provided Your use,
 | 
			
		||||
      reproduction, and distribution of the Work otherwise complies with
 | 
			
		||||
      the conditions stated in this License.
 | 
			
		||||
 | 
			
		||||
   5. Submission of Contributions. Unless You explicitly state otherwise,
 | 
			
		||||
      any Contribution intentionally submitted for inclusion in the Work
 | 
			
		||||
      by You to the Licensor shall be under the terms and conditions of
 | 
			
		||||
      this License, without any additional terms or conditions.
 | 
			
		||||
      Notwithstanding the above, nothing herein shall supersede or modify
 | 
			
		||||
      the terms of any separate license agreement you may have executed
 | 
			
		||||
      with Licensor regarding such Contributions.
 | 
			
		||||
 | 
			
		||||
   6. Trademarks. This License does not grant permission to use the trade
 | 
			
		||||
      names, trademarks, service marks, or product names of the Licensor,
 | 
			
		||||
      except as required for reasonable and customary use in describing the
 | 
			
		||||
      origin of the Work and reproducing the content of the NOTICE file.
 | 
			
		||||
 | 
			
		||||
   7. Disclaimer of Warranty. Unless required by applicable law or
 | 
			
		||||
      agreed to in writing, Licensor provides the Work (and each
 | 
			
		||||
      Contributor provides its Contributions) on an "AS IS" BASIS,
 | 
			
		||||
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 | 
			
		||||
      implied, including, without limitation, any warranties or conditions
 | 
			
		||||
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
 | 
			
		||||
      PARTICULAR PURPOSE. You are solely responsible for determining the
 | 
			
		||||
      appropriateness of using or redistributing the Work and assume any
 | 
			
		||||
      risks associated with Your exercise of permissions under this License.
 | 
			
		||||
 | 
			
		||||
   8. Limitation of Liability. In no event and under no legal theory,
 | 
			
		||||
      whether in tort (including negligence), contract, or otherwise,
 | 
			
		||||
      unless required by applicable law (such as deliberate and grossly
 | 
			
		||||
      negligent acts) or agreed to in writing, shall any Contributor be
 | 
			
		||||
      liable to You for damages, including any direct, indirect, special,
 | 
			
		||||
      incidental, or consequential damages of any character arising as a
 | 
			
		||||
      result of this License or out of the use or inability to use the
 | 
			
		||||
      Work (including but not limited to damages for loss of goodwill,
 | 
			
		||||
      work stoppage, computer failure or malfunction, or any and all
 | 
			
		||||
      other commercial damages or losses), even if such Contributor
 | 
			
		||||
      has been advised of the possibility of such damages.
 | 
			
		||||
 | 
			
		||||
   9. Accepting Warranty or Additional Liability. While redistributing
 | 
			
		||||
      the Work or Derivative Works thereof, You may choose to offer,
 | 
			
		||||
      and charge a fee for, acceptance of support, warranty, indemnity,
 | 
			
		||||
      or other liability obligations and/or rights consistent with this
 | 
			
		||||
      License. However, in accepting such obligations, You may act only
 | 
			
		||||
      on Your own behalf and on Your sole responsibility, not on behalf
 | 
			
		||||
      of any other Contributor, and only if You agree to indemnify,
 | 
			
		||||
      defend, and hold each Contributor harmless for any liability
 | 
			
		||||
      incurred by, or claims asserted against, such Contributor by reason
 | 
			
		||||
      of your accepting any such warranty or additional liability.
 | 
			
		||||
 | 
			
		||||
   END OF TERMS AND CONDITIONS
 | 
			
		||||
 | 
			
		||||
   APPENDIX: How to apply the Apache License to your work.
 | 
			
		||||
 | 
			
		||||
      To apply the Apache License to your work, attach the following
 | 
			
		||||
      boilerplate notice, with the fields enclosed by brackets "[]"
 | 
			
		||||
      replaced with your own identifying information. (Don't include
 | 
			
		||||
      the brackets!)  The text should be enclosed in the appropriate
 | 
			
		||||
      comment syntax for the file format. We also recommend that a
 | 
			
		||||
      file or class name and description of purpose be included on the
 | 
			
		||||
      same "printed page" as the copyright notice for easier
 | 
			
		||||
      identification within third-party archives.
 | 
			
		||||
 | 
			
		||||
   Copyright [yyyy] [name of copyright owner]
 | 
			
		||||
 | 
			
		||||
   Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
   you may not use this file except in compliance with the License.
 | 
			
		||||
   You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
       http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
   Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
   distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
   See the License for the specific language governing permissions and
 | 
			
		||||
   limitations under the License.
 | 
			
		||||
							
								
								
									
										84
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,84 @@
 | 
			
		||||
# Go gRPC Middleware
 | 
			
		||||
 | 
			
		||||
[](https://travis-ci.org/grpc-ecosystem/go-grpc-middleware)
 | 
			
		||||
[](https://goreportcard.com/report/github.com/grpc-ecosystem/go-grpc-middleware)
 | 
			
		||||
[](https://godoc.org/github.com/grpc-ecosystem/go-grpc-middleware)
 | 
			
		||||
[](https://sourcegraph.com/github.com/grpc-ecosystem/go-grpc-middleware/?badge)
 | 
			
		||||
[](https://codecov.io/gh/grpc-ecosystem/go-grpc-middleware)
 | 
			
		||||
[](LICENSE)
 | 
			
		||||
[](#status)
 | 
			
		||||
[](https://join.slack.com/t/improbable-eng/shared_invite/enQtMzQ1ODcyMzQ5MjM4LWY5ZWZmNGM2ODc5MmViNmQ3ZTA3ZTY3NzQwOTBlMTkzZmIxZTIxODk0OWU3YjZhNWVlNDU3MDlkZGViZjhkMjc)
 | 
			
		||||
 | 
			
		||||
[gRPC Go](https://github.com/grpc/grpc-go) Middleware: interceptors, helpers, utilities.
 | 
			
		||||
 | 
			
		||||
## Middleware
 | 
			
		||||
 | 
			
		||||
[gRPC Go](https://github.com/grpc/grpc-go) recently acquired support for
 | 
			
		||||
Interceptors, i.e. [middleware](https://medium.com/@matryer/writing-middleware-in-golang-and-how-go-makes-it-so-much-fun-4375c1246e81#.gv7tdlghs) 
 | 
			
		||||
that is executed either on the gRPC Server before the request is passed onto the user's application logic, or on the gRPC client either around the user call. It is a perfect way to implement
 | 
			
		||||
common patterns: auth, logging, message, validation, retries or monitoring.
 | 
			
		||||
 | 
			
		||||
These are generic building blocks that make it easy to build multiple microservices easily.
 | 
			
		||||
The purpose of this repository is to act as a go-to point for such reusable functionality. It contains
 | 
			
		||||
some of them itself, but also will link to useful external repos.
 | 
			
		||||
 | 
			
		||||
`grpc_middleware` itself provides support for chaining interceptors, here's an example:
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
import "github.com/grpc-ecosystem/go-grpc-middleware"
 | 
			
		||||
 | 
			
		||||
myServer := grpc.NewServer(
 | 
			
		||||
    grpc.StreamInterceptor(grpc_middleware.ChainStreamServer(
 | 
			
		||||
        grpc_ctxtags.StreamServerInterceptor(),
 | 
			
		||||
        grpc_opentracing.StreamServerInterceptor(),
 | 
			
		||||
        grpc_prometheus.StreamServerInterceptor,
 | 
			
		||||
        grpc_zap.StreamServerInterceptor(zapLogger),
 | 
			
		||||
        grpc_auth.StreamServerInterceptor(myAuthFunction),
 | 
			
		||||
        grpc_recovery.StreamServerInterceptor(),
 | 
			
		||||
    )),
 | 
			
		||||
    grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer(
 | 
			
		||||
        grpc_ctxtags.UnaryServerInterceptor(),
 | 
			
		||||
        grpc_opentracing.UnaryServerInterceptor(),
 | 
			
		||||
        grpc_prometheus.UnaryServerInterceptor,
 | 
			
		||||
        grpc_zap.UnaryServerInterceptor(zapLogger),
 | 
			
		||||
        grpc_auth.UnaryServerInterceptor(myAuthFunction),
 | 
			
		||||
        grpc_recovery.UnaryServerInterceptor(),
 | 
			
		||||
    )),
 | 
			
		||||
)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Interceptors
 | 
			
		||||
 | 
			
		||||
*Please send a PR to add new interceptors or middleware to this list*
 | 
			
		||||
 | 
			
		||||
#### Auth
 | 
			
		||||
   * [`grpc_auth`](auth) - a customizable (via `AuthFunc`) piece of auth middleware 
 | 
			
		||||
 | 
			
		||||
#### Logging
 | 
			
		||||
   * [`grpc_ctxtags`](tags/) - a library that adds a `Tag` map to context, with data populated from request body
 | 
			
		||||
   * [`grpc_zap`](logging/zap/) - integration of [zap](https://github.com/uber-go/zap) logging library into gRPC handlers.
 | 
			
		||||
   * [`grpc_logrus`](logging/logrus/) - integration of [logrus](https://github.com/sirupsen/logrus) logging library into gRPC handlers.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#### Monitoring
 | 
			
		||||
   * [`grpc_prometheus`⚡](https://github.com/grpc-ecosystem/go-grpc-prometheus) - Prometheus client-side and server-side monitoring middleware
 | 
			
		||||
   * [`otgrpc`⚡](https://github.com/grpc-ecosystem/grpc-opentracing/tree/master/go/otgrpc) - [OpenTracing](http://opentracing.io/) client-side and server-side interceptors
 | 
			
		||||
   * [`grpc_opentracing`](tracing/opentracing) - [OpenTracing](http://opentracing.io/) client-side and server-side interceptors with support for streaming and handler-returned tags
 | 
			
		||||
 | 
			
		||||
#### Client
 | 
			
		||||
   * [`grpc_retry`](retry/) - a generic gRPC response code retry mechanism, client-side middleware
 | 
			
		||||
 | 
			
		||||
#### Server
 | 
			
		||||
   * [`grpc_validator`](validator/) - codegen inbound message validation from `.proto` options
 | 
			
		||||
   * [`grpc_recovery`](recovery/) - turn panics into gRPC errors
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Status
 | 
			
		||||
 | 
			
		||||
This code has been running in *production* since May 2016 as the basis of the gRPC micro services stack at [Improbable](https://improbable.io).
 | 
			
		||||
 | 
			
		||||
Additional tooling will be added, and contributions are welcome.
 | 
			
		||||
 | 
			
		||||
## License
 | 
			
		||||
 | 
			
		||||
`go-grpc-middleware` is released under the Apache 2.0 license. See the [LICENSE](LICENSE) file for details.
 | 
			
		||||
							
								
								
									
										183
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/chain.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										183
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/chain.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,183 @@
 | 
			
		||||
// Copyright 2016 Michal Witkowski. All Rights Reserved.
 | 
			
		||||
// See LICENSE for licensing terms.
 | 
			
		||||
 | 
			
		||||
// gRPC Server Interceptor chaining middleware.
 | 
			
		||||
 | 
			
		||||
package grpc_middleware
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"golang.org/x/net/context"
 | 
			
		||||
	"google.golang.org/grpc"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// ChainUnaryServer creates a single interceptor out of a chain of many interceptors.
 | 
			
		||||
//
 | 
			
		||||
// Execution is done in left-to-right order, including passing of context.
 | 
			
		||||
// For example ChainUnaryServer(one, two, three) will execute one before two before three, and three
 | 
			
		||||
// will see context changes of one and two.
 | 
			
		||||
func ChainUnaryServer(interceptors ...grpc.UnaryServerInterceptor) grpc.UnaryServerInterceptor {
 | 
			
		||||
	n := len(interceptors)
 | 
			
		||||
 | 
			
		||||
	if n > 1 {
 | 
			
		||||
		lastI := n - 1
 | 
			
		||||
		return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
 | 
			
		||||
			var (
 | 
			
		||||
				chainHandler grpc.UnaryHandler
 | 
			
		||||
				curI         int
 | 
			
		||||
			)
 | 
			
		||||
 | 
			
		||||
			chainHandler = func(currentCtx context.Context, currentReq interface{}) (interface{}, error) {
 | 
			
		||||
				if curI == lastI {
 | 
			
		||||
					return handler(currentCtx, currentReq)
 | 
			
		||||
				}
 | 
			
		||||
				curI++
 | 
			
		||||
				resp, err := interceptors[curI](currentCtx, currentReq, info, chainHandler)
 | 
			
		||||
				curI--
 | 
			
		||||
				return resp, err
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			return interceptors[0](ctx, req, info, chainHandler)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if n == 1 {
 | 
			
		||||
		return interceptors[0]
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// n == 0; Dummy interceptor maintained for backward compatibility to avoid returning nil.
 | 
			
		||||
	return func(ctx context.Context, req interface{}, _ *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
 | 
			
		||||
		return handler(ctx, req)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ChainStreamServer creates a single interceptor out of a chain of many interceptors.
 | 
			
		||||
//
 | 
			
		||||
// Execution is done in left-to-right order, including passing of context.
 | 
			
		||||
// For example ChainUnaryServer(one, two, three) will execute one before two before three.
 | 
			
		||||
// If you want to pass context between interceptors, use WrapServerStream.
 | 
			
		||||
func ChainStreamServer(interceptors ...grpc.StreamServerInterceptor) grpc.StreamServerInterceptor {
 | 
			
		||||
	n := len(interceptors)
 | 
			
		||||
 | 
			
		||||
	if n > 1 {
 | 
			
		||||
		lastI := n - 1
 | 
			
		||||
		return func(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error {
 | 
			
		||||
			var (
 | 
			
		||||
				chainHandler grpc.StreamHandler
 | 
			
		||||
				curI         int
 | 
			
		||||
			)
 | 
			
		||||
 | 
			
		||||
			chainHandler = func(currentSrv interface{}, currentStream grpc.ServerStream) error {
 | 
			
		||||
				if curI == lastI {
 | 
			
		||||
					return handler(currentSrv, currentStream)
 | 
			
		||||
				}
 | 
			
		||||
				curI++
 | 
			
		||||
				err := interceptors[curI](currentSrv, currentStream, info, chainHandler)
 | 
			
		||||
				curI--
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			return interceptors[0](srv, stream, info, chainHandler)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if n == 1 {
 | 
			
		||||
		return interceptors[0]
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// n == 0; Dummy interceptor maintained for backward compatibility to avoid returning nil.
 | 
			
		||||
	return func(srv interface{}, stream grpc.ServerStream, _ *grpc.StreamServerInfo, handler grpc.StreamHandler) error {
 | 
			
		||||
		return handler(srv, stream)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ChainUnaryClient creates a single interceptor out of a chain of many interceptors.
 | 
			
		||||
//
 | 
			
		||||
// Execution is done in left-to-right order, including passing of context.
 | 
			
		||||
// For example ChainUnaryClient(one, two, three) will execute one before two before three.
 | 
			
		||||
func ChainUnaryClient(interceptors ...grpc.UnaryClientInterceptor) grpc.UnaryClientInterceptor {
 | 
			
		||||
	n := len(interceptors)
 | 
			
		||||
 | 
			
		||||
	if n > 1 {
 | 
			
		||||
		lastI := n - 1
 | 
			
		||||
		return func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {
 | 
			
		||||
			var (
 | 
			
		||||
				chainHandler grpc.UnaryInvoker
 | 
			
		||||
				curI         int
 | 
			
		||||
			)
 | 
			
		||||
 | 
			
		||||
			chainHandler = func(currentCtx context.Context, currentMethod string, currentReq, currentRepl interface{}, currentConn *grpc.ClientConn, currentOpts ...grpc.CallOption) error {
 | 
			
		||||
				if curI == lastI {
 | 
			
		||||
					return invoker(currentCtx, currentMethod, currentReq, currentRepl, currentConn, currentOpts...)
 | 
			
		||||
				}
 | 
			
		||||
				curI++
 | 
			
		||||
				err := interceptors[curI](currentCtx, currentMethod, currentReq, currentRepl, currentConn, chainHandler, currentOpts...)
 | 
			
		||||
				curI--
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			return interceptors[0](ctx, method, req, reply, cc, chainHandler, opts...)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if n == 1 {
 | 
			
		||||
		return interceptors[0]
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// n == 0; Dummy interceptor maintained for backward compatibility to avoid returning nil.
 | 
			
		||||
	return func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {
 | 
			
		||||
		return invoker(ctx, method, req, reply, cc, opts...)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ChainStreamClient creates a single interceptor out of a chain of many interceptors.
 | 
			
		||||
//
 | 
			
		||||
// Execution is done in left-to-right order, including passing of context.
 | 
			
		||||
// For example ChainStreamClient(one, two, three) will execute one before two before three.
 | 
			
		||||
func ChainStreamClient(interceptors ...grpc.StreamClientInterceptor) grpc.StreamClientInterceptor {
 | 
			
		||||
	n := len(interceptors)
 | 
			
		||||
 | 
			
		||||
	if n > 1 {
 | 
			
		||||
		lastI := n - 1
 | 
			
		||||
		return func(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, streamer grpc.Streamer, opts ...grpc.CallOption) (grpc.ClientStream, error) {
 | 
			
		||||
			var (
 | 
			
		||||
				chainHandler grpc.Streamer
 | 
			
		||||
				curI         int
 | 
			
		||||
			)
 | 
			
		||||
 | 
			
		||||
			chainHandler = func(currentCtx context.Context, currentDesc *grpc.StreamDesc, currentConn *grpc.ClientConn, currentMethod string, currentOpts ...grpc.CallOption) (grpc.ClientStream, error) {
 | 
			
		||||
				if curI == lastI {
 | 
			
		||||
					return streamer(currentCtx, currentDesc, currentConn, currentMethod, currentOpts...)
 | 
			
		||||
				}
 | 
			
		||||
				curI++
 | 
			
		||||
				stream, err := interceptors[curI](currentCtx, currentDesc, currentConn, currentMethod, chainHandler, currentOpts...)
 | 
			
		||||
				curI--
 | 
			
		||||
				return stream, err
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			return interceptors[0](ctx, desc, cc, method, chainHandler, opts...)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if n == 1 {
 | 
			
		||||
		return interceptors[0]
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// n == 0; Dummy interceptor maintained for backward compatibility to avoid returning nil.
 | 
			
		||||
	return func(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, streamer grpc.Streamer, opts ...grpc.CallOption) (grpc.ClientStream, error) {
 | 
			
		||||
		return streamer(ctx, desc, cc, method, opts...)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Chain creates a single interceptor out of a chain of many interceptors.
 | 
			
		||||
//
 | 
			
		||||
// WithUnaryServerChain is a grpc.Server config option that accepts multiple unary interceptors.
 | 
			
		||||
// Basically syntactic sugar.
 | 
			
		||||
func WithUnaryServerChain(interceptors ...grpc.UnaryServerInterceptor) grpc.ServerOption {
 | 
			
		||||
	return grpc.UnaryInterceptor(ChainUnaryServer(interceptors...))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// WithStreamServerChain is a grpc.Server config option that accepts multiple stream interceptors.
 | 
			
		||||
// Basically syntactic sugar.
 | 
			
		||||
func WithStreamServerChain(interceptors ...grpc.StreamServerInterceptor) grpc.ServerOption {
 | 
			
		||||
	return grpc.StreamInterceptor(ChainStreamServer(interceptors...))
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										69
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,69 @@
 | 
			
		||||
// Copyright 2016 Michal Witkowski. All Rights Reserved.
 | 
			
		||||
// See LICENSE for licensing terms.
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
`grpc_middleware` is a collection of gRPC middleware packages: interceptors, helpers and tools.
 | 
			
		||||
 | 
			
		||||
Middleware
 | 
			
		||||
 | 
			
		||||
gRPC is a fantastic RPC middleware, which sees a lot of adoption in the Golang world. However, the
 | 
			
		||||
upstream gRPC codebase is relatively bare bones.
 | 
			
		||||
 | 
			
		||||
This package, and most of its child packages provides commonly needed middleware for gRPC:
 | 
			
		||||
client-side interceptors for retires, server-side interceptors for input validation and auth,
 | 
			
		||||
functions for chaining said interceptors, metadata convenience methods and more.
 | 
			
		||||
 | 
			
		||||
Chaining
 | 
			
		||||
 | 
			
		||||
By default, gRPC doesn't allow one to have more than one interceptor either on the client nor on
 | 
			
		||||
the server side. `grpc_middleware` provides convenient chaining methods
 | 
			
		||||
 | 
			
		||||
Simple way of turning a multiple interceptors into a single interceptor. Here's an example for
 | 
			
		||||
server chaining:
 | 
			
		||||
 | 
			
		||||
	myServer := grpc.NewServer(
 | 
			
		||||
	    grpc.StreamInterceptor(grpc_middleware.ChainStreamServer(loggingStream, monitoringStream, authStream)),
 | 
			
		||||
	    grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer(loggingUnary, monitoringUnary, authUnary),
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
These interceptors will be executed from left to right: logging, monitoring and auth.
 | 
			
		||||
 | 
			
		||||
Here's an example for client side chaining:
 | 
			
		||||
 | 
			
		||||
	clientConn, err = grpc.Dial(
 | 
			
		||||
	    address,
 | 
			
		||||
	        grpc.WithUnaryInterceptor(grpc_middleware.ChainUnaryClient(monitoringClientUnary, retryUnary)),
 | 
			
		||||
	        grpc.WithStreamInterceptor(grpc_middleware.ChainStreamClient(monitoringClientStream, retryStream)),
 | 
			
		||||
	)
 | 
			
		||||
	client = pb_testproto.NewTestServiceClient(clientConn)
 | 
			
		||||
	resp, err := client.PingEmpty(s.ctx, &myservice.Request{Msg: "hello"})
 | 
			
		||||
 | 
			
		||||
These interceptors will be executed from left to right: monitoring and then retry logic.
 | 
			
		||||
 | 
			
		||||
The retry interceptor will call every interceptor that follows it whenever when a retry happens.
 | 
			
		||||
 | 
			
		||||
Writing Your Own
 | 
			
		||||
 | 
			
		||||
Implementing your own interceptor is pretty trivial: there are interfaces for that. But the interesting
 | 
			
		||||
bit exposing common data to handlers (and other middleware), similarly to HTTP Middleware design.
 | 
			
		||||
For example, you may want to pass the identity of the caller from the auth interceptor all the way
 | 
			
		||||
to the handling function.
 | 
			
		||||
 | 
			
		||||
For example, a client side interceptor example for auth looks like:
 | 
			
		||||
 | 
			
		||||
	func FakeAuthUnaryInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
 | 
			
		||||
	   newCtx := context.WithValue(ctx, "user_id", "john@example.com")
 | 
			
		||||
	   return handler(newCtx, req)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
Unfortunately, it's not as easy for streaming RPCs. These have the `context.Context` embedded within
 | 
			
		||||
the `grpc.ServerStream` object. To pass values through context, a wrapper (`WrappedServerStream`) is
 | 
			
		||||
needed. For example:
 | 
			
		||||
 | 
			
		||||
	func FakeAuthStreamingInterceptor(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error {
 | 
			
		||||
	   newStream := grpc_middleware.WrapServerStream(stream)
 | 
			
		||||
	   newStream.WrappedContext = context.WithValue(ctx, "user_id", "john@example.com")
 | 
			
		||||
	   return handler(srv, stream)
 | 
			
		||||
	}
 | 
			
		||||
*/
 | 
			
		||||
package grpc_middleware
 | 
			
		||||
							
								
								
									
										16
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/makefile
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/makefile
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
SHELL=/bin/bash
 | 
			
		||||
 | 
			
		||||
GOFILES_NOVENDOR = $(shell go list ./... | grep -v /vendor/)
 | 
			
		||||
 | 
			
		||||
all: vet fmt test
 | 
			
		||||
 | 
			
		||||
fmt:
 | 
			
		||||
	go fmt $(GOFILES_NOVENDOR)
 | 
			
		||||
 | 
			
		||||
vet:
 | 
			
		||||
	go vet $(GOFILES_NOVENDOR)
 | 
			
		||||
 | 
			
		||||
test: vet
 | 
			
		||||
	./scripts/test_all.sh
 | 
			
		||||
 | 
			
		||||
.PHONY: all test
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/slack.png
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/slack.png
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 5.0 KiB  | 
							
								
								
									
										29
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/wrappers.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/wrappers.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
// Copyright 2016 Michal Witkowski. All Rights Reserved.
 | 
			
		||||
// See LICENSE for licensing terms.
 | 
			
		||||
 | 
			
		||||
package grpc_middleware
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"golang.org/x/net/context"
 | 
			
		||||
	"google.golang.org/grpc"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// WrappedServerStream is a thin wrapper around grpc.ServerStream that allows modifying context.
 | 
			
		||||
type WrappedServerStream struct {
 | 
			
		||||
	grpc.ServerStream
 | 
			
		||||
	// WrappedContext is the wrapper's own Context. You can assign it.
 | 
			
		||||
	WrappedContext context.Context
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Context returns the wrapper's WrappedContext, overwriting the nested grpc.ServerStream.Context()
 | 
			
		||||
func (w *WrappedServerStream) Context() context.Context {
 | 
			
		||||
	return w.WrappedContext
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// WrapServerStream returns a ServerStream that has the ability to overwrite context.
 | 
			
		||||
func WrapServerStream(stream grpc.ServerStream) *WrappedServerStream {
 | 
			
		||||
	if existing, ok := stream.(*WrappedServerStream); ok {
 | 
			
		||||
		return existing
 | 
			
		||||
	}
 | 
			
		||||
	return &WrappedServerStream{ServerStream: stream, WrappedContext: stream.Context()}
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user