planetscale 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.github/workflows/ci.yml +24 -0
- data/.github/workflows/gem-push.yml +38 -0
- data/.github/workflows/licensed.yml +43 -0
- data/.gitignore +10 -0
- data/.licensed.yml +9 -0
- data/.licenses/go/github.com/armon/circbuf.dep.yml +31 -0
- data/.licenses/go/github.com/gorilla/mux.dep.yml +41 -0
- data/.licenses/go/github.com/hashicorp/go-cleanhttp.dep.yml +375 -0
- data/.licenses/go/github.com/mitchellh/go-homedir.dep.yml +32 -0
- data/.licenses/go/github.com/pkg/errors.dep.yml +36 -0
- data/.licenses/go/github.com/planetscale/planetscale-go/planetscale.dep.yml +160 -0
- data/.licenses/go/github.com/planetscale/sql-proxy/proxy.dep.yml +180 -0
- data/.licenses/go/go.uber.org/atomic.dep.yml +31 -0
- data/.licenses/go/go.uber.org/multierr.dep.yml +30 -0
- data/.licenses/go/go.uber.org/zap.dep.yml +30 -0
- data/.licenses/go/go.uber.org/zap/buffer.dep.yml +30 -0
- data/.licenses/go/go.uber.org/zap/internal/bufferpool.dep.yml +30 -0
- data/.licenses/go/go.uber.org/zap/internal/color.dep.yml +30 -0
- data/.licenses/go/go.uber.org/zap/internal/exit.dep.yml +31 -0
- data/.licenses/go/go.uber.org/zap/zapcore.dep.yml +31 -0
- data/.licenses/go/golang.org/x/net/context/ctxhttp.dep.yml +63 -0
- data/.licenses/go/golang.org/x/oauth2.dep.yml +44 -0
- data/.licenses/go/golang.org/x/oauth2/internal.dep.yml +38 -0
- data/.ruby_version +1 -0
- data/Gemfile +8 -0
- data/LICENSE +201 -0
- data/README.md +88 -0
- data/Rakefile +10 -0
- data/bin/console +15 -0
- data/bin/setup +17 -0
- data/controller.go +255 -0
- data/go.mod +16 -0
- data/go.sum +428 -0
- data/lib/generators/planetscale/install_generator.rb +58 -0
- data/lib/planetscale.rb +137 -0
- data/lib/planetscale/version.rb +5 -0
- data/planetscale.gemspec +44 -0
- data/proxy.go +128 -0
- data/vendor/github.com/armon/circbuf/.gitignore +22 -0
- data/vendor/github.com/armon/circbuf/LICENSE +20 -0
- data/vendor/github.com/armon/circbuf/README.md +28 -0
- data/vendor/github.com/armon/circbuf/circbuf.go +92 -0
- data/vendor/github.com/armon/circbuf/go.mod +1 -0
- data/vendor/github.com/golang/protobuf/AUTHORS +3 -0
- data/vendor/github.com/golang/protobuf/CONTRIBUTORS +3 -0
- data/vendor/github.com/golang/protobuf/LICENSE +28 -0
- data/vendor/github.com/golang/protobuf/proto/buffer.go +324 -0
- data/vendor/github.com/golang/protobuf/proto/defaults.go +63 -0
- data/vendor/github.com/golang/protobuf/proto/deprecated.go +113 -0
- data/vendor/github.com/golang/protobuf/proto/discard.go +58 -0
- data/vendor/github.com/golang/protobuf/proto/extensions.go +356 -0
- data/vendor/github.com/golang/protobuf/proto/properties.go +306 -0
- data/vendor/github.com/golang/protobuf/proto/proto.go +167 -0
- data/vendor/github.com/golang/protobuf/proto/registry.go +317 -0
- data/vendor/github.com/golang/protobuf/proto/text_decode.go +801 -0
- data/vendor/github.com/golang/protobuf/proto/text_encode.go +560 -0
- data/vendor/github.com/golang/protobuf/proto/wire.go +78 -0
- data/vendor/github.com/golang/protobuf/proto/wrappers.go +34 -0
- data/vendor/github.com/gorilla/mux/AUTHORS +8 -0
- data/vendor/github.com/gorilla/mux/LICENSE +27 -0
- data/vendor/github.com/gorilla/mux/README.md +805 -0
- data/vendor/github.com/gorilla/mux/doc.go +306 -0
- data/vendor/github.com/gorilla/mux/go.mod +3 -0
- data/vendor/github.com/gorilla/mux/middleware.go +74 -0
- data/vendor/github.com/gorilla/mux/mux.go +606 -0
- data/vendor/github.com/gorilla/mux/regexp.go +388 -0
- data/vendor/github.com/gorilla/mux/route.go +736 -0
- data/vendor/github.com/gorilla/mux/test_helpers.go +19 -0
- data/vendor/github.com/hashicorp/go-cleanhttp/LICENSE +363 -0
- data/vendor/github.com/hashicorp/go-cleanhttp/README.md +30 -0
- data/vendor/github.com/hashicorp/go-cleanhttp/cleanhttp.go +58 -0
- data/vendor/github.com/hashicorp/go-cleanhttp/doc.go +20 -0
- data/vendor/github.com/hashicorp/go-cleanhttp/go.mod +3 -0
- data/vendor/github.com/hashicorp/go-cleanhttp/handlers.go +48 -0
- data/vendor/github.com/mitchellh/go-homedir/LICENSE +21 -0
- data/vendor/github.com/mitchellh/go-homedir/README.md +14 -0
- data/vendor/github.com/mitchellh/go-homedir/go.mod +1 -0
- data/vendor/github.com/mitchellh/go-homedir/homedir.go +167 -0
- data/vendor/github.com/pkg/errors/.gitignore +24 -0
- data/vendor/github.com/pkg/errors/.travis.yml +10 -0
- data/vendor/github.com/pkg/errors/LICENSE +23 -0
- data/vendor/github.com/pkg/errors/Makefile +44 -0
- data/vendor/github.com/pkg/errors/README.md +59 -0
- data/vendor/github.com/pkg/errors/appveyor.yml +32 -0
- data/vendor/github.com/pkg/errors/errors.go +288 -0
- data/vendor/github.com/pkg/errors/go113.go +38 -0
- data/vendor/github.com/pkg/errors/stack.go +177 -0
- data/vendor/github.com/planetscale/planetscale-go/planetscale/backups.go +139 -0
- data/vendor/github.com/planetscale/planetscale-go/planetscale/branches.go +258 -0
- data/vendor/github.com/planetscale/planetscale-go/planetscale/certs.go +142 -0
- data/vendor/github.com/planetscale/planetscale-go/planetscale/client.go +305 -0
- data/vendor/github.com/planetscale/planetscale-go/planetscale/databases.go +131 -0
- data/vendor/github.com/planetscale/planetscale-go/planetscale/deploy_requests.go +368 -0
- data/vendor/github.com/planetscale/planetscale-go/planetscale/organizations.go +78 -0
- data/vendor/github.com/planetscale/planetscale-go/planetscale/service_tokens.go +163 -0
- data/vendor/github.com/planetscale/sql-proxy/proxy/client.go +467 -0
- data/vendor/github.com/planetscale/sql-proxy/proxy/tls_cache.go +73 -0
- data/vendor/go.uber.org/atomic/.codecov.yml +19 -0
- data/vendor/go.uber.org/atomic/.gitignore +12 -0
- data/vendor/go.uber.org/atomic/.travis.yml +27 -0
- data/vendor/go.uber.org/atomic/CHANGELOG.md +76 -0
- data/vendor/go.uber.org/atomic/LICENSE.txt +19 -0
- data/vendor/go.uber.org/atomic/Makefile +78 -0
- data/vendor/go.uber.org/atomic/README.md +63 -0
- data/vendor/go.uber.org/atomic/bool.go +81 -0
- data/vendor/go.uber.org/atomic/bool_ext.go +53 -0
- data/vendor/go.uber.org/atomic/doc.go +23 -0
- data/vendor/go.uber.org/atomic/duration.go +82 -0
- data/vendor/go.uber.org/atomic/duration_ext.go +40 -0
- data/vendor/go.uber.org/atomic/error.go +51 -0
- data/vendor/go.uber.org/atomic/error_ext.go +39 -0
- data/vendor/go.uber.org/atomic/float64.go +76 -0
- data/vendor/go.uber.org/atomic/float64_ext.go +47 -0
- data/vendor/go.uber.org/atomic/gen.go +26 -0
- data/vendor/go.uber.org/atomic/go.mod +8 -0
- data/vendor/go.uber.org/atomic/go.sum +9 -0
- data/vendor/go.uber.org/atomic/int32.go +102 -0
- data/vendor/go.uber.org/atomic/int64.go +102 -0
- data/vendor/go.uber.org/atomic/nocmp.go +35 -0
- data/vendor/go.uber.org/atomic/string.go +54 -0
- data/vendor/go.uber.org/atomic/string_ext.go +43 -0
- data/vendor/go.uber.org/atomic/uint32.go +102 -0
- data/vendor/go.uber.org/atomic/uint64.go +102 -0
- data/vendor/go.uber.org/atomic/value.go +31 -0
- data/vendor/go.uber.org/multierr/.codecov.yml +15 -0
- data/vendor/go.uber.org/multierr/.gitignore +4 -0
- data/vendor/go.uber.org/multierr/.travis.yml +23 -0
- data/vendor/go.uber.org/multierr/CHANGELOG.md +60 -0
- data/vendor/go.uber.org/multierr/LICENSE.txt +19 -0
- data/vendor/go.uber.org/multierr/Makefile +42 -0
- data/vendor/go.uber.org/multierr/README.md +23 -0
- data/vendor/go.uber.org/multierr/error.go +449 -0
- data/vendor/go.uber.org/multierr/glide.yaml +8 -0
- data/vendor/go.uber.org/multierr/go.mod +8 -0
- data/vendor/go.uber.org/multierr/go.sum +11 -0
- data/vendor/go.uber.org/multierr/go113.go +52 -0
- data/vendor/go.uber.org/zap/.codecov.yml +17 -0
- data/vendor/go.uber.org/zap/.gitignore +32 -0
- data/vendor/go.uber.org/zap/.readme.tmpl +109 -0
- data/vendor/go.uber.org/zap/.travis.yml +23 -0
- data/vendor/go.uber.org/zap/CHANGELOG.md +432 -0
- data/vendor/go.uber.org/zap/CODE_OF_CONDUCT.md +75 -0
- data/vendor/go.uber.org/zap/CONTRIBUTING.md +81 -0
- data/vendor/go.uber.org/zap/FAQ.md +156 -0
- data/vendor/go.uber.org/zap/LICENSE.txt +19 -0
- data/vendor/go.uber.org/zap/Makefile +63 -0
- data/vendor/go.uber.org/zap/README.md +134 -0
- data/vendor/go.uber.org/zap/array.go +320 -0
- data/vendor/go.uber.org/zap/buffer/buffer.go +123 -0
- data/vendor/go.uber.org/zap/buffer/pool.go +49 -0
- data/vendor/go.uber.org/zap/checklicense.sh +17 -0
- data/vendor/go.uber.org/zap/config.go +264 -0
- data/vendor/go.uber.org/zap/doc.go +113 -0
- data/vendor/go.uber.org/zap/encoder.go +79 -0
- data/vendor/go.uber.org/zap/error.go +80 -0
- data/vendor/go.uber.org/zap/field.go +539 -0
- data/vendor/go.uber.org/zap/flag.go +39 -0
- data/vendor/go.uber.org/zap/glide.yaml +34 -0
- data/vendor/go.uber.org/zap/global.go +168 -0
- data/vendor/go.uber.org/zap/global_go112.go +26 -0
- data/vendor/go.uber.org/zap/global_prego112.go +26 -0
- data/vendor/go.uber.org/zap/go.mod +13 -0
- data/vendor/go.uber.org/zap/go.sum +56 -0
- data/vendor/go.uber.org/zap/http_handler.go +81 -0
- data/vendor/go.uber.org/zap/internal/bufferpool/bufferpool.go +31 -0
- data/vendor/go.uber.org/zap/internal/color/color.go +44 -0
- data/vendor/go.uber.org/zap/internal/exit/exit.go +64 -0
- data/vendor/go.uber.org/zap/level.go +132 -0
- data/vendor/go.uber.org/zap/logger.go +344 -0
- data/vendor/go.uber.org/zap/options.go +140 -0
- data/vendor/go.uber.org/zap/sink.go +161 -0
- data/vendor/go.uber.org/zap/stacktrace.go +85 -0
- data/vendor/go.uber.org/zap/sugar.go +304 -0
- data/vendor/go.uber.org/zap/time.go +27 -0
- data/vendor/go.uber.org/zap/writer.go +99 -0
- data/vendor/go.uber.org/zap/zapcore/console_encoder.go +161 -0
- data/vendor/go.uber.org/zap/zapcore/core.go +113 -0
- data/vendor/go.uber.org/zap/zapcore/doc.go +24 -0
- data/vendor/go.uber.org/zap/zapcore/encoder.go +443 -0
- data/vendor/go.uber.org/zap/zapcore/entry.go +264 -0
- data/vendor/go.uber.org/zap/zapcore/error.go +115 -0
- data/vendor/go.uber.org/zap/zapcore/field.go +227 -0
- data/vendor/go.uber.org/zap/zapcore/hook.go +68 -0
- data/vendor/go.uber.org/zap/zapcore/increase_level.go +66 -0
- data/vendor/go.uber.org/zap/zapcore/json_encoder.go +534 -0
- data/vendor/go.uber.org/zap/zapcore/level.go +175 -0
- data/vendor/go.uber.org/zap/zapcore/level_strings.go +46 -0
- data/vendor/go.uber.org/zap/zapcore/marshaler.go +61 -0
- data/vendor/go.uber.org/zap/zapcore/memory_encoder.go +179 -0
- data/vendor/go.uber.org/zap/zapcore/sampler.go +208 -0
- data/vendor/go.uber.org/zap/zapcore/tee.go +81 -0
- data/vendor/go.uber.org/zap/zapcore/write_syncer.go +123 -0
- data/vendor/golang.org/x/net/AUTHORS +3 -0
- data/vendor/golang.org/x/net/CONTRIBUTORS +3 -0
- data/vendor/golang.org/x/net/LICENSE +27 -0
- data/vendor/golang.org/x/net/PATENTS +22 -0
- data/vendor/golang.org/x/net/context/context.go +56 -0
- data/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go +71 -0
- data/vendor/golang.org/x/net/context/go17.go +73 -0
- data/vendor/golang.org/x/net/context/go19.go +21 -0
- data/vendor/golang.org/x/net/context/pre_go17.go +301 -0
- data/vendor/golang.org/x/net/context/pre_go19.go +110 -0
- data/vendor/golang.org/x/oauth2/.travis.yml +13 -0
- data/vendor/golang.org/x/oauth2/AUTHORS +3 -0
- data/vendor/golang.org/x/oauth2/CONTRIBUTING.md +26 -0
- data/vendor/golang.org/x/oauth2/CONTRIBUTORS +3 -0
- data/vendor/golang.org/x/oauth2/LICENSE +27 -0
- data/vendor/golang.org/x/oauth2/README.md +36 -0
- data/vendor/golang.org/x/oauth2/go.mod +9 -0
- data/vendor/golang.org/x/oauth2/go.sum +361 -0
- data/vendor/golang.org/x/oauth2/internal/client_appengine.go +14 -0
- data/vendor/golang.org/x/oauth2/internal/doc.go +6 -0
- data/vendor/golang.org/x/oauth2/internal/oauth2.go +37 -0
- data/vendor/golang.org/x/oauth2/internal/token.go +294 -0
- data/vendor/golang.org/x/oauth2/internal/transport.go +33 -0
- data/vendor/golang.org/x/oauth2/oauth2.go +381 -0
- data/vendor/golang.org/x/oauth2/token.go +178 -0
- data/vendor/golang.org/x/oauth2/transport.go +89 -0
- data/vendor/google.golang.org/appengine/LICENSE +202 -0
- data/vendor/google.golang.org/appengine/internal/api.go +678 -0
- data/vendor/google.golang.org/appengine/internal/api_classic.go +169 -0
- data/vendor/google.golang.org/appengine/internal/api_common.go +123 -0
- data/vendor/google.golang.org/appengine/internal/app_id.go +28 -0
- data/vendor/google.golang.org/appengine/internal/base/api_base.pb.go +308 -0
- data/vendor/google.golang.org/appengine/internal/base/api_base.proto +33 -0
- data/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.pb.go +4367 -0
- data/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto +551 -0
- data/vendor/google.golang.org/appengine/internal/identity.go +55 -0
- data/vendor/google.golang.org/appengine/internal/identity_classic.go +61 -0
- data/vendor/google.golang.org/appengine/internal/identity_flex.go +11 -0
- data/vendor/google.golang.org/appengine/internal/identity_vm.go +134 -0
- data/vendor/google.golang.org/appengine/internal/internal.go +110 -0
- data/vendor/google.golang.org/appengine/internal/log/log_service.pb.go +1313 -0
- data/vendor/google.golang.org/appengine/internal/log/log_service.proto +150 -0
- data/vendor/google.golang.org/appengine/internal/main.go +16 -0
- data/vendor/google.golang.org/appengine/internal/main_common.go +7 -0
- data/vendor/google.golang.org/appengine/internal/main_vm.go +69 -0
- data/vendor/google.golang.org/appengine/internal/metadata.go +60 -0
- data/vendor/google.golang.org/appengine/internal/net.go +56 -0
- data/vendor/google.golang.org/appengine/internal/regen.sh +40 -0
- data/vendor/google.golang.org/appengine/internal/remote_api/remote_api.pb.go +361 -0
- data/vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto +44 -0
- data/vendor/google.golang.org/appengine/internal/transaction.go +115 -0
- data/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.pb.go +527 -0
- data/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto +64 -0
- data/vendor/google.golang.org/appengine/urlfetch/urlfetch.go +210 -0
- data/vendor/google.golang.org/protobuf/AUTHORS +3 -0
- data/vendor/google.golang.org/protobuf/CONTRIBUTORS +3 -0
- data/vendor/google.golang.org/protobuf/LICENSE +27 -0
- data/vendor/google.golang.org/protobuf/PATENTS +22 -0
- data/vendor/google.golang.org/protobuf/encoding/prototext/decode.go +773 -0
- data/vendor/google.golang.org/protobuf/encoding/prototext/doc.go +7 -0
- data/vendor/google.golang.org/protobuf/encoding/prototext/encode.go +371 -0
- data/vendor/google.golang.org/protobuf/encoding/protowire/wire.go +538 -0
- data/vendor/google.golang.org/protobuf/internal/descfmt/stringer.go +318 -0
- data/vendor/google.golang.org/protobuf/internal/descopts/options.go +29 -0
- data/vendor/google.golang.org/protobuf/internal/detrand/rand.go +69 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/defval/default.go +213 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/messageset/messageset.go +241 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go +207 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go +665 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go +190 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_string.go +161 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_token.go +373 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/text/doc.go +29 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go +265 -0
- data/vendor/google.golang.org/protobuf/internal/errors/errors.go +89 -0
- data/vendor/google.golang.org/protobuf/internal/errors/is_go112.go +39 -0
- data/vendor/google.golang.org/protobuf/internal/errors/is_go113.go +12 -0
- data/vendor/google.golang.org/protobuf/internal/filedesc/build.go +158 -0
- data/vendor/google.golang.org/protobuf/internal/filedesc/desc.go +631 -0
- data/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go +471 -0
- data/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go +704 -0
- data/vendor/google.golang.org/protobuf/internal/filedesc/desc_list.go +450 -0
- data/vendor/google.golang.org/protobuf/internal/filedesc/desc_list_gen.go +356 -0
- data/vendor/google.golang.org/protobuf/internal/filedesc/placeholder.go +107 -0
- data/vendor/google.golang.org/protobuf/internal/filetype/build.go +297 -0
- data/vendor/google.golang.org/protobuf/internal/flags/flags.go +24 -0
- data/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go +9 -0
- data/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go +9 -0
- data/vendor/google.golang.org/protobuf/internal/genid/any_gen.go +34 -0
- data/vendor/google.golang.org/protobuf/internal/genid/api_gen.go +106 -0
- data/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go +829 -0
- data/vendor/google.golang.org/protobuf/internal/genid/doc.go +11 -0
- data/vendor/google.golang.org/protobuf/internal/genid/duration_gen.go +34 -0
- data/vendor/google.golang.org/protobuf/internal/genid/empty_gen.go +19 -0
- data/vendor/google.golang.org/protobuf/internal/genid/field_mask_gen.go +31 -0
- data/vendor/google.golang.org/protobuf/internal/genid/goname.go +25 -0
- data/vendor/google.golang.org/protobuf/internal/genid/map_entry.go +16 -0
- data/vendor/google.golang.org/protobuf/internal/genid/source_context_gen.go +31 -0
- data/vendor/google.golang.org/protobuf/internal/genid/struct_gen.go +116 -0
- data/vendor/google.golang.org/protobuf/internal/genid/timestamp_gen.go +34 -0
- data/vendor/google.golang.org/protobuf/internal/genid/type_gen.go +184 -0
- data/vendor/google.golang.org/protobuf/internal/genid/wrappers.go +13 -0
- data/vendor/google.golang.org/protobuf/internal/genid/wrappers_gen.go +175 -0
- data/vendor/google.golang.org/protobuf/internal/impl/api_export.go +177 -0
- data/vendor/google.golang.org/protobuf/internal/impl/checkinit.go +141 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go +223 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_field.go +830 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_gen.go +5637 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_map.go +388 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go +37 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go +11 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_message.go +217 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_messageset.go +123 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go +209 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_tables.go +557 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go +17 -0
- data/vendor/google.golang.org/protobuf/internal/impl/convert.go +496 -0
- data/vendor/google.golang.org/protobuf/internal/impl/convert_list.go +141 -0
- data/vendor/google.golang.org/protobuf/internal/impl/convert_map.go +121 -0
- data/vendor/google.golang.org/protobuf/internal/impl/decode.go +276 -0
- data/vendor/google.golang.org/protobuf/internal/impl/encode.go +201 -0
- data/vendor/google.golang.org/protobuf/internal/impl/enum.go +21 -0
- data/vendor/google.golang.org/protobuf/internal/impl/extension.go +156 -0
- data/vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go +219 -0
- data/vendor/google.golang.org/protobuf/internal/impl/legacy_export.go +92 -0
- data/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go +176 -0
- data/vendor/google.golang.org/protobuf/internal/impl/legacy_file.go +81 -0
- data/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go +558 -0
- data/vendor/google.golang.org/protobuf/internal/impl/merge.go +176 -0
- data/vendor/google.golang.org/protobuf/internal/impl/merge_gen.go +209 -0
- data/vendor/google.golang.org/protobuf/internal/impl/message.go +276 -0
- data/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go +465 -0
- data/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go +543 -0
- data/vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go +249 -0
- data/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go +178 -0
- data/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go +174 -0
- data/vendor/google.golang.org/protobuf/internal/impl/validate.go +576 -0
- data/vendor/google.golang.org/protobuf/internal/impl/weak.go +74 -0
- data/vendor/google.golang.org/protobuf/internal/order/order.go +89 -0
- data/vendor/google.golang.org/protobuf/internal/order/range.go +115 -0
- data/vendor/google.golang.org/protobuf/internal/pragma/pragma.go +29 -0
- data/vendor/google.golang.org/protobuf/internal/set/ints.go +58 -0
- data/vendor/google.golang.org/protobuf/internal/strs/strings.go +196 -0
- data/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go +27 -0
- data/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go +94 -0
- data/vendor/google.golang.org/protobuf/internal/version/version.go +79 -0
- data/vendor/google.golang.org/protobuf/proto/checkinit.go +71 -0
- data/vendor/google.golang.org/protobuf/proto/decode.go +278 -0
- data/vendor/google.golang.org/protobuf/proto/decode_gen.go +603 -0
- data/vendor/google.golang.org/protobuf/proto/doc.go +94 -0
- data/vendor/google.golang.org/protobuf/proto/encode.go +319 -0
- data/vendor/google.golang.org/protobuf/proto/encode_gen.go +97 -0
- data/vendor/google.golang.org/protobuf/proto/equal.go +167 -0
- data/vendor/google.golang.org/protobuf/proto/extension.go +92 -0
- data/vendor/google.golang.org/protobuf/proto/merge.go +139 -0
- data/vendor/google.golang.org/protobuf/proto/messageset.go +93 -0
- data/vendor/google.golang.org/protobuf/proto/proto.go +43 -0
- data/vendor/google.golang.org/protobuf/proto/proto_methods.go +19 -0
- data/vendor/google.golang.org/protobuf/proto/proto_reflect.go +19 -0
- data/vendor/google.golang.org/protobuf/proto/reset.go +43 -0
- data/vendor/google.golang.org/protobuf/proto/size.go +97 -0
- data/vendor/google.golang.org/protobuf/proto/size_gen.go +55 -0
- data/vendor/google.golang.org/protobuf/proto/wrappers.go +29 -0
- data/vendor/google.golang.org/protobuf/reflect/protodesc/desc.go +276 -0
- data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go +248 -0
- data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_resolve.go +286 -0
- data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_validate.go +374 -0
- data/vendor/google.golang.org/protobuf/reflect/protodesc/proto.go +252 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go +77 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go +504 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/source.go +128 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go +461 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/type.go +665 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go +285 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go +59 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go +411 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go +98 -0
- data/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go +869 -0
- data/vendor/google.golang.org/protobuf/runtime/protoiface/legacy.go +15 -0
- data/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go +167 -0
- data/vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go +44 -0
- data/vendor/google.golang.org/protobuf/runtime/protoimpl/version.go +56 -0
- data/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go +4039 -0
- data/vendor/modules.txt +79 -0
- metadata +495 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Contributor Covenant Code of Conduct
|
|
2
|
+
|
|
3
|
+
## Our Pledge
|
|
4
|
+
|
|
5
|
+
In the interest of fostering an open and welcoming environment, we as
|
|
6
|
+
contributors and maintainers pledge to making participation in our project and
|
|
7
|
+
our community a harassment-free experience for everyone, regardless of age,
|
|
8
|
+
body size, disability, ethnicity, gender identity and expression, level of
|
|
9
|
+
experience, nationality, personal appearance, race, religion, or sexual
|
|
10
|
+
identity and orientation.
|
|
11
|
+
|
|
12
|
+
## Our Standards
|
|
13
|
+
|
|
14
|
+
Examples of behavior that contributes to creating a positive environment
|
|
15
|
+
include:
|
|
16
|
+
|
|
17
|
+
* Using welcoming and inclusive language
|
|
18
|
+
* Being respectful of differing viewpoints and experiences
|
|
19
|
+
* Gracefully accepting constructive criticism
|
|
20
|
+
* Focusing on what is best for the community
|
|
21
|
+
* Showing empathy towards other community members
|
|
22
|
+
|
|
23
|
+
Examples of unacceptable behavior by participants include:
|
|
24
|
+
|
|
25
|
+
* The use of sexualized language or imagery and unwelcome sexual attention or
|
|
26
|
+
advances
|
|
27
|
+
* Trolling, insulting/derogatory comments, and personal or political attacks
|
|
28
|
+
* Public or private harassment
|
|
29
|
+
* Publishing others' private information, such as a physical or electronic
|
|
30
|
+
address, without explicit permission
|
|
31
|
+
* Other conduct which could reasonably be considered inappropriate in a
|
|
32
|
+
professional setting
|
|
33
|
+
|
|
34
|
+
## Our Responsibilities
|
|
35
|
+
|
|
36
|
+
Project maintainers are responsible for clarifying the standards of acceptable
|
|
37
|
+
behavior and are expected to take appropriate and fair corrective action in
|
|
38
|
+
response to any instances of unacceptable behavior.
|
|
39
|
+
|
|
40
|
+
Project maintainers have the right and responsibility to remove, edit, or
|
|
41
|
+
reject comments, commits, code, wiki edits, issues, and other contributions
|
|
42
|
+
that are not aligned to this Code of Conduct, or to ban temporarily or
|
|
43
|
+
permanently any contributor for other behaviors that they deem inappropriate,
|
|
44
|
+
threatening, offensive, or harmful.
|
|
45
|
+
|
|
46
|
+
## Scope
|
|
47
|
+
|
|
48
|
+
This Code of Conduct applies both within project spaces and in public spaces
|
|
49
|
+
when an individual is representing the project or its community. Examples of
|
|
50
|
+
representing a project or community include using an official project e-mail
|
|
51
|
+
address, posting via an official social media account, or acting as an
|
|
52
|
+
appointed representative at an online or offline event. Representation of a
|
|
53
|
+
project may be further defined and clarified by project maintainers.
|
|
54
|
+
|
|
55
|
+
## Enforcement
|
|
56
|
+
|
|
57
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
|
58
|
+
reported by contacting the project team at oss-conduct@uber.com. The project
|
|
59
|
+
team will review and investigate all complaints, and will respond in a way
|
|
60
|
+
that it deems appropriate to the circumstances. The project team is obligated
|
|
61
|
+
to maintain confidentiality with regard to the reporter of an incident.
|
|
62
|
+
Further details of specific enforcement policies may be posted separately.
|
|
63
|
+
|
|
64
|
+
Project maintainers who do not follow or enforce the Code of Conduct in good
|
|
65
|
+
faith may face temporary or permanent repercussions as determined by other
|
|
66
|
+
members of the project's leadership.
|
|
67
|
+
|
|
68
|
+
## Attribution
|
|
69
|
+
|
|
70
|
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
|
71
|
+
version 1.4, available at
|
|
72
|
+
[http://contributor-covenant.org/version/1/4][version].
|
|
73
|
+
|
|
74
|
+
[homepage]: http://contributor-covenant.org
|
|
75
|
+
[version]: http://contributor-covenant.org/version/1/4/
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
We'd love your help making zap the very best structured logging library in Go!
|
|
4
|
+
|
|
5
|
+
If you'd like to add new exported APIs, please [open an issue][open-issue]
|
|
6
|
+
describing your proposal — discussing API changes ahead of time makes
|
|
7
|
+
pull request review much smoother. In your issue, pull request, and any other
|
|
8
|
+
communications, please remember to treat your fellow contributors with
|
|
9
|
+
respect! We take our [code of conduct](CODE_OF_CONDUCT.md) seriously.
|
|
10
|
+
|
|
11
|
+
Note that you'll need to sign [Uber's Contributor License Agreement][cla]
|
|
12
|
+
before we can accept any of your contributions. If necessary, a bot will remind
|
|
13
|
+
you to accept the CLA when you open your pull request.
|
|
14
|
+
|
|
15
|
+
## Setup
|
|
16
|
+
|
|
17
|
+
[Fork][fork], then clone the repository:
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
mkdir -p $GOPATH/src/go.uber.org
|
|
21
|
+
cd $GOPATH/src/go.uber.org
|
|
22
|
+
git clone git@github.com:your_github_username/zap.git
|
|
23
|
+
cd zap
|
|
24
|
+
git remote add upstream https://github.com/uber-go/zap.git
|
|
25
|
+
git fetch upstream
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Install zap's dependencies:
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
make dependencies
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Make sure that the tests and the linters pass:
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
make test
|
|
38
|
+
make lint
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
If you're not using the minor version of Go specified in the Makefile's
|
|
42
|
+
`LINTABLE_MINOR_VERSIONS` variable, `make lint` doesn't do anything. This is
|
|
43
|
+
fine, but it means that you'll only discover lint failures after you open your
|
|
44
|
+
pull request.
|
|
45
|
+
|
|
46
|
+
## Making Changes
|
|
47
|
+
|
|
48
|
+
Start by creating a new branch for your changes:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
cd $GOPATH/src/go.uber.org/zap
|
|
52
|
+
git checkout master
|
|
53
|
+
git fetch upstream
|
|
54
|
+
git rebase upstream/master
|
|
55
|
+
git checkout -b cool_new_feature
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Make your changes, then ensure that `make lint` and `make test` still pass. If
|
|
59
|
+
you're satisfied with your changes, push them to your fork.
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
git push origin cool_new_feature
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Then use the GitHub UI to open a pull request.
|
|
66
|
+
|
|
67
|
+
At this point, you're waiting on us to review your changes. We *try* to respond
|
|
68
|
+
to issues and pull requests within a few business days, and we may suggest some
|
|
69
|
+
improvements or alternatives. Once your changes are approved, one of the
|
|
70
|
+
project maintainers will merge them.
|
|
71
|
+
|
|
72
|
+
We're much more likely to approve your changes if you:
|
|
73
|
+
|
|
74
|
+
* Add tests for new functionality.
|
|
75
|
+
* Write a [good commit message][commit-message].
|
|
76
|
+
* Maintain backward compatibility.
|
|
77
|
+
|
|
78
|
+
[fork]: https://github.com/uber-go/zap/fork
|
|
79
|
+
[open-issue]: https://github.com/uber-go/zap/issues/new
|
|
80
|
+
[cla]: https://cla-assistant.io/uber-go/zap
|
|
81
|
+
[commit-message]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# Frequently Asked Questions
|
|
2
|
+
|
|
3
|
+
## Design
|
|
4
|
+
|
|
5
|
+
### Why spend so much effort on logger performance?
|
|
6
|
+
|
|
7
|
+
Of course, most applications won't notice the impact of a slow logger: they
|
|
8
|
+
already take tens or hundreds of milliseconds for each operation, so an extra
|
|
9
|
+
millisecond doesn't matter.
|
|
10
|
+
|
|
11
|
+
On the other hand, why *not* make structured logging fast? The `SugaredLogger`
|
|
12
|
+
isn't any harder to use than other logging packages, and the `Logger` makes
|
|
13
|
+
structured logging possible in performance-sensitive contexts. Across a fleet
|
|
14
|
+
of Go microservices, making each application even slightly more efficient adds
|
|
15
|
+
up quickly.
|
|
16
|
+
|
|
17
|
+
### Why aren't `Logger` and `SugaredLogger` interfaces?
|
|
18
|
+
|
|
19
|
+
Unlike the familiar `io.Writer` and `http.Handler`, `Logger` and
|
|
20
|
+
`SugaredLogger` interfaces would include *many* methods. As [Rob Pike points
|
|
21
|
+
out][go-proverbs], "The bigger the interface, the weaker the abstraction."
|
|
22
|
+
Interfaces are also rigid — *any* change requires releasing a new major
|
|
23
|
+
version, since it breaks all third-party implementations.
|
|
24
|
+
|
|
25
|
+
Making the `Logger` and `SugaredLogger` concrete types doesn't sacrifice much
|
|
26
|
+
abstraction, and it lets us add methods without introducing breaking changes.
|
|
27
|
+
Your applications should define and depend upon an interface that includes
|
|
28
|
+
just the methods you use.
|
|
29
|
+
|
|
30
|
+
### Why sample application logs?
|
|
31
|
+
|
|
32
|
+
Applications often experience runs of errors, either because of a bug or
|
|
33
|
+
because of a misbehaving user. Logging errors is usually a good idea, but it
|
|
34
|
+
can easily make this bad situation worse: not only is your application coping
|
|
35
|
+
with a flood of errors, it's also spending extra CPU cycles and I/O logging
|
|
36
|
+
those errors. Since writes are typically serialized, logging limits throughput
|
|
37
|
+
when you need it most.
|
|
38
|
+
|
|
39
|
+
Sampling fixes this problem by dropping repetitive log entries. Under normal
|
|
40
|
+
conditions, your application writes out every entry. When similar entries are
|
|
41
|
+
logged hundreds or thousands of times each second, though, zap begins dropping
|
|
42
|
+
duplicates to preserve throughput.
|
|
43
|
+
|
|
44
|
+
### Why do the structured logging APIs take a message in addition to fields?
|
|
45
|
+
|
|
46
|
+
Subjectively, we find it helpful to accompany structured context with a brief
|
|
47
|
+
description. This isn't critical during development, but it makes debugging
|
|
48
|
+
and operating unfamiliar systems much easier.
|
|
49
|
+
|
|
50
|
+
More concretely, zap's sampling algorithm uses the message to identify
|
|
51
|
+
duplicate entries. In our experience, this is a practical middle ground
|
|
52
|
+
between random sampling (which often drops the exact entry that you need while
|
|
53
|
+
debugging) and hashing the complete entry (which is prohibitively expensive).
|
|
54
|
+
|
|
55
|
+
### Why include package-global loggers?
|
|
56
|
+
|
|
57
|
+
Since so many other logging packages include a global logger, many
|
|
58
|
+
applications aren't designed to accept loggers as explicit parameters.
|
|
59
|
+
Changing function signatures is often a breaking change, so zap includes
|
|
60
|
+
global loggers to simplify migration.
|
|
61
|
+
|
|
62
|
+
Avoid them where possible.
|
|
63
|
+
|
|
64
|
+
### Why include dedicated Panic and Fatal log levels?
|
|
65
|
+
|
|
66
|
+
In general, application code should handle errors gracefully instead of using
|
|
67
|
+
`panic` or `os.Exit`. However, every rule has exceptions, and it's common to
|
|
68
|
+
crash when an error is truly unrecoverable. To avoid losing any information
|
|
69
|
+
— especially the reason for the crash — the logger must flush any
|
|
70
|
+
buffered entries before the process exits.
|
|
71
|
+
|
|
72
|
+
Zap makes this easy by offering `Panic` and `Fatal` logging methods that
|
|
73
|
+
automatically flush before exiting. Of course, this doesn't guarantee that
|
|
74
|
+
logs will never be lost, but it eliminates a common error.
|
|
75
|
+
|
|
76
|
+
See the discussion in uber-go/zap#207 for more details.
|
|
77
|
+
|
|
78
|
+
### What's `DPanic`?
|
|
79
|
+
|
|
80
|
+
`DPanic` stands for "panic in development." In development, it logs at
|
|
81
|
+
`PanicLevel`; otherwise, it logs at `ErrorLevel`. `DPanic` makes it easier to
|
|
82
|
+
catch errors that are theoretically possible, but shouldn't actually happen,
|
|
83
|
+
*without* crashing in production.
|
|
84
|
+
|
|
85
|
+
If you've ever written code like this, you need `DPanic`:
|
|
86
|
+
|
|
87
|
+
```go
|
|
88
|
+
if err != nil {
|
|
89
|
+
panic(fmt.Sprintf("shouldn't ever get here: %v", err))
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Installation
|
|
94
|
+
|
|
95
|
+
### What does the error `expects import "go.uber.org/zap"` mean?
|
|
96
|
+
|
|
97
|
+
Either zap was installed incorrectly or you're referencing the wrong package
|
|
98
|
+
name in your code.
|
|
99
|
+
|
|
100
|
+
Zap's source code happens to be hosted on GitHub, but the [import
|
|
101
|
+
path][import-path] is `go.uber.org/zap`. This gives us, the project
|
|
102
|
+
maintainers, the freedom to move the source code if necessary. However, it
|
|
103
|
+
means that you need to take a little care when installing and using the
|
|
104
|
+
package.
|
|
105
|
+
|
|
106
|
+
If you follow two simple rules, everything should work: install zap with `go
|
|
107
|
+
get -u go.uber.org/zap`, and always import it in your code with `import
|
|
108
|
+
"go.uber.org/zap"`. Your code shouldn't contain *any* references to
|
|
109
|
+
`github.com/uber-go/zap`.
|
|
110
|
+
|
|
111
|
+
## Usage
|
|
112
|
+
|
|
113
|
+
### Does zap support log rotation?
|
|
114
|
+
|
|
115
|
+
Zap doesn't natively support rotating log files, since we prefer to leave this
|
|
116
|
+
to an external program like `logrotate`.
|
|
117
|
+
|
|
118
|
+
However, it's easy to integrate a log rotation package like
|
|
119
|
+
[`gopkg.in/natefinch/lumberjack.v2`][lumberjack] as a `zapcore.WriteSyncer`.
|
|
120
|
+
|
|
121
|
+
```go
|
|
122
|
+
// lumberjack.Logger is already safe for concurrent use, so we don't need to
|
|
123
|
+
// lock it.
|
|
124
|
+
w := zapcore.AddSync(&lumberjack.Logger{
|
|
125
|
+
Filename: "/var/log/myapp/foo.log",
|
|
126
|
+
MaxSize: 500, // megabytes
|
|
127
|
+
MaxBackups: 3,
|
|
128
|
+
MaxAge: 28, // days
|
|
129
|
+
})
|
|
130
|
+
core := zapcore.NewCore(
|
|
131
|
+
zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
|
|
132
|
+
w,
|
|
133
|
+
zap.InfoLevel,
|
|
134
|
+
)
|
|
135
|
+
logger := zap.New(core)
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Extensions
|
|
139
|
+
|
|
140
|
+
We'd love to support every logging need within zap itself, but we're only
|
|
141
|
+
familiar with a handful of log ingestion systems, flag-parsing packages, and
|
|
142
|
+
the like. Rather than merging code that we can't effectively debug and
|
|
143
|
+
support, we'd rather grow an ecosystem of zap extensions.
|
|
144
|
+
|
|
145
|
+
We're aware of the following extensions, but haven't used them ourselves:
|
|
146
|
+
|
|
147
|
+
| Package | Integration |
|
|
148
|
+
| --- | --- |
|
|
149
|
+
| `github.com/tchap/zapext` | Sentry, syslog |
|
|
150
|
+
| `github.com/fgrosse/zaptest` | Ginkgo |
|
|
151
|
+
| `github.com/blendle/zapdriver` | Stackdriver |
|
|
152
|
+
| `github.com/moul/zapgorm` | Gorm |
|
|
153
|
+
|
|
154
|
+
[go-proverbs]: https://go-proverbs.github.io/
|
|
155
|
+
[import-path]: https://golang.org/cmd/go/#hdr-Remote_import_paths
|
|
156
|
+
[lumberjack]: https://godoc.org/gopkg.in/natefinch/lumberjack.v2
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
Copyright (c) 2016-2017 Uber Technologies, Inc.
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
5
|
+
in the Software without restriction, including without limitation the rights
|
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
8
|
+
furnished to do so, subject to the following conditions:
|
|
9
|
+
|
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
|
11
|
+
all copies or substantial portions of the Software.
|
|
12
|
+
|
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
19
|
+
THE SOFTWARE.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export GOBIN ?= $(shell pwd)/bin
|
|
2
|
+
|
|
3
|
+
GOLINT = $(GOBIN)/golint
|
|
4
|
+
STATICCHECK = $(GOBIN)/staticcheck
|
|
5
|
+
BENCH_FLAGS ?= -cpuprofile=cpu.pprof -memprofile=mem.pprof -benchmem
|
|
6
|
+
|
|
7
|
+
# Directories containing independent Go modules.
|
|
8
|
+
#
|
|
9
|
+
# We track coverage only for the main module.
|
|
10
|
+
MODULE_DIRS = . ./benchmarks
|
|
11
|
+
|
|
12
|
+
# Many Go tools take file globs or directories as arguments instead of packages.
|
|
13
|
+
GO_FILES := $(shell \
|
|
14
|
+
find . '(' -path '*/.*' -o -path './vendor' ')' -prune \
|
|
15
|
+
-o -name '*.go' -print | cut -b3-)
|
|
16
|
+
|
|
17
|
+
.PHONY: all
|
|
18
|
+
all: lint test
|
|
19
|
+
|
|
20
|
+
.PHONY: lint
|
|
21
|
+
lint: $(GOLINT) $(STATICCHECK)
|
|
22
|
+
@rm -rf lint.log
|
|
23
|
+
@echo "Checking formatting..."
|
|
24
|
+
@gofmt -d -s $(GO_FILES) 2>&1 | tee lint.log
|
|
25
|
+
@echo "Checking vet..."
|
|
26
|
+
@$(foreach dir,$(MODULE_DIRS),(cd $(dir) && go vet ./... 2>&1) &&) true | tee -a lint.log
|
|
27
|
+
@echo "Checking lint..."
|
|
28
|
+
@$(foreach dir,$(MODULE_DIRS),(cd $(dir) && $(GOLINT) ./... 2>&1) &&) true | tee -a lint.log
|
|
29
|
+
@echo "Checking staticcheck..."
|
|
30
|
+
@$(foreach dir,$(MODULE_DIRS),(cd $(dir) && $(STATICCHECK) ./... 2>&1) &&) true | tee -a lint.log
|
|
31
|
+
@echo "Checking for unresolved FIXMEs..."
|
|
32
|
+
@git grep -i fixme | grep -v -e Makefile | tee -a lint.log
|
|
33
|
+
@echo "Checking for license headers..."
|
|
34
|
+
@./checklicense.sh | tee -a lint.log
|
|
35
|
+
@[ ! -s lint.log ]
|
|
36
|
+
|
|
37
|
+
$(GOLINT):
|
|
38
|
+
go install golang.org/x/lint/golint
|
|
39
|
+
|
|
40
|
+
$(STATICCHECK):
|
|
41
|
+
go install honnef.co/go/tools/cmd/staticcheck
|
|
42
|
+
|
|
43
|
+
.PHONY: test
|
|
44
|
+
test:
|
|
45
|
+
@$(foreach dir,$(MODULE_DIRS),(cd $(dir) && go test -race ./...) &&) true
|
|
46
|
+
|
|
47
|
+
.PHONY: cover
|
|
48
|
+
cover:
|
|
49
|
+
go test -race -coverprofile=cover.out -coverpkg=./... ./...
|
|
50
|
+
go tool cover -html=cover.out -o cover.html
|
|
51
|
+
|
|
52
|
+
.PHONY: bench
|
|
53
|
+
BENCH ?= .
|
|
54
|
+
bench:
|
|
55
|
+
@$(foreach dir,$(MODULE_DIRS), ( \
|
|
56
|
+
cd $(dir) && \
|
|
57
|
+
go list ./... | xargs -n1 go test -bench=$(BENCH) -run="^$$" $(BENCH_FLAGS) \
|
|
58
|
+
) &&) true
|
|
59
|
+
|
|
60
|
+
.PHONY: updatereadme
|
|
61
|
+
updatereadme:
|
|
62
|
+
rm -f README.md
|
|
63
|
+
cat .readme.tmpl | go run internal/readme/readme.go > README.md
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# :zap: zap [![GoDoc][doc-img]][doc] [![Build Status][ci-img]][ci] [![Coverage Status][cov-img]][cov]
|
|
2
|
+
|
|
3
|
+
Blazing fast, structured, leveled logging in Go.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
`go get -u go.uber.org/zap`
|
|
8
|
+
|
|
9
|
+
Note that zap only supports the two most recent minor versions of Go.
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
In contexts where performance is nice, but not critical, use the
|
|
14
|
+
`SugaredLogger`. It's 4-10x faster than other structured logging
|
|
15
|
+
packages and includes both structured and `printf`-style APIs.
|
|
16
|
+
|
|
17
|
+
```go
|
|
18
|
+
logger, _ := zap.NewProduction()
|
|
19
|
+
defer logger.Sync() // flushes buffer, if any
|
|
20
|
+
sugar := logger.Sugar()
|
|
21
|
+
sugar.Infow("failed to fetch URL",
|
|
22
|
+
// Structured context as loosely typed key-value pairs.
|
|
23
|
+
"url", url,
|
|
24
|
+
"attempt", 3,
|
|
25
|
+
"backoff", time.Second,
|
|
26
|
+
)
|
|
27
|
+
sugar.Infof("Failed to fetch URL: %s", url)
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
When performance and type safety are critical, use the `Logger`. It's even
|
|
31
|
+
faster than the `SugaredLogger` and allocates far less, but it only supports
|
|
32
|
+
structured logging.
|
|
33
|
+
|
|
34
|
+
```go
|
|
35
|
+
logger, _ := zap.NewProduction()
|
|
36
|
+
defer logger.Sync()
|
|
37
|
+
logger.Info("failed to fetch URL",
|
|
38
|
+
// Structured context as strongly typed Field values.
|
|
39
|
+
zap.String("url", url),
|
|
40
|
+
zap.Int("attempt", 3),
|
|
41
|
+
zap.Duration("backoff", time.Second),
|
|
42
|
+
)
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
See the [documentation][doc] and [FAQ](FAQ.md) for more details.
|
|
46
|
+
|
|
47
|
+
## Performance
|
|
48
|
+
|
|
49
|
+
For applications that log in the hot path, reflection-based serialization and
|
|
50
|
+
string formatting are prohibitively expensive — they're CPU-intensive
|
|
51
|
+
and make many small allocations. Put differently, using `encoding/json` and
|
|
52
|
+
`fmt.Fprintf` to log tons of `interface{}`s makes your application slow.
|
|
53
|
+
|
|
54
|
+
Zap takes a different approach. It includes a reflection-free, zero-allocation
|
|
55
|
+
JSON encoder, and the base `Logger` strives to avoid serialization overhead
|
|
56
|
+
and allocations wherever possible. By building the high-level `SugaredLogger`
|
|
57
|
+
on that foundation, zap lets users *choose* when they need to count every
|
|
58
|
+
allocation and when they'd prefer a more familiar, loosely typed API.
|
|
59
|
+
|
|
60
|
+
As measured by its own [benchmarking suite][], not only is zap more performant
|
|
61
|
+
than comparable structured logging packages — it's also faster than the
|
|
62
|
+
standard library. Like all benchmarks, take these with a grain of salt.<sup
|
|
63
|
+
id="anchor-versions">[1](#footnote-versions)</sup>
|
|
64
|
+
|
|
65
|
+
Log a message and 10 fields:
|
|
66
|
+
|
|
67
|
+
| Package | Time | Time % to zap | Objects Allocated |
|
|
68
|
+
| :------ | :--: | :-----------: | :---------------: |
|
|
69
|
+
| :zap: zap | 862 ns/op | +0% | 5 allocs/op
|
|
70
|
+
| :zap: zap (sugared) | 1250 ns/op | +45% | 11 allocs/op
|
|
71
|
+
| zerolog | 4021 ns/op | +366% | 76 allocs/op
|
|
72
|
+
| go-kit | 4542 ns/op | +427% | 105 allocs/op
|
|
73
|
+
| apex/log | 26785 ns/op | +3007% | 115 allocs/op
|
|
74
|
+
| logrus | 29501 ns/op | +3322% | 125 allocs/op
|
|
75
|
+
| log15 | 29906 ns/op | +3369% | 122 allocs/op
|
|
76
|
+
|
|
77
|
+
Log a message with a logger that already has 10 fields of context:
|
|
78
|
+
|
|
79
|
+
| Package | Time | Time % to zap | Objects Allocated |
|
|
80
|
+
| :------ | :--: | :-----------: | :---------------: |
|
|
81
|
+
| :zap: zap | 126 ns/op | +0% | 0 allocs/op
|
|
82
|
+
| :zap: zap (sugared) | 187 ns/op | +48% | 2 allocs/op
|
|
83
|
+
| zerolog | 88 ns/op | -30% | 0 allocs/op
|
|
84
|
+
| go-kit | 5087 ns/op | +3937% | 103 allocs/op
|
|
85
|
+
| log15 | 18548 ns/op | +14621% | 73 allocs/op
|
|
86
|
+
| apex/log | 26012 ns/op | +20544% | 104 allocs/op
|
|
87
|
+
| logrus | 27236 ns/op | +21516% | 113 allocs/op
|
|
88
|
+
|
|
89
|
+
Log a static string, without any context or `printf`-style templating:
|
|
90
|
+
|
|
91
|
+
| Package | Time | Time % to zap | Objects Allocated |
|
|
92
|
+
| :------ | :--: | :-----------: | :---------------: |
|
|
93
|
+
| :zap: zap | 118 ns/op | +0% | 0 allocs/op
|
|
94
|
+
| :zap: zap (sugared) | 191 ns/op | +62% | 2 allocs/op
|
|
95
|
+
| zerolog | 93 ns/op | -21% | 0 allocs/op
|
|
96
|
+
| go-kit | 280 ns/op | +137% | 11 allocs/op
|
|
97
|
+
| standard library | 499 ns/op | +323% | 2 allocs/op
|
|
98
|
+
| apex/log | 1990 ns/op | +1586% | 10 allocs/op
|
|
99
|
+
| logrus | 3129 ns/op | +2552% | 24 allocs/op
|
|
100
|
+
| log15 | 3887 ns/op | +3194% | 23 allocs/op
|
|
101
|
+
|
|
102
|
+
## Development Status: Stable
|
|
103
|
+
|
|
104
|
+
All APIs are finalized, and no breaking changes will be made in the 1.x series
|
|
105
|
+
of releases. Users of semver-aware dependency management systems should pin
|
|
106
|
+
zap to `^1`.
|
|
107
|
+
|
|
108
|
+
## Contributing
|
|
109
|
+
|
|
110
|
+
We encourage and support an active, healthy community of contributors —
|
|
111
|
+
including you! Details are in the [contribution guide](CONTRIBUTING.md) and
|
|
112
|
+
the [code of conduct](CODE_OF_CONDUCT.md). The zap maintainers keep an eye on
|
|
113
|
+
issues and pull requests, but you can also report any negative conduct to
|
|
114
|
+
oss-conduct@uber.com. That email list is a private, safe space; even the zap
|
|
115
|
+
maintainers don't have access, so don't hesitate to hold us to a high
|
|
116
|
+
standard.
|
|
117
|
+
|
|
118
|
+
<hr>
|
|
119
|
+
|
|
120
|
+
Released under the [MIT License](LICENSE.txt).
|
|
121
|
+
|
|
122
|
+
<sup id="footnote-versions">1</sup> In particular, keep in mind that we may be
|
|
123
|
+
benchmarking against slightly older versions of other packages. Versions are
|
|
124
|
+
pinned in the [benchmarks/go.mod][] file. [↩](#anchor-versions)
|
|
125
|
+
|
|
126
|
+
[doc-img]: https://godoc.org/go.uber.org/zap?status.svg
|
|
127
|
+
[doc]: https://godoc.org/go.uber.org/zap
|
|
128
|
+
[ci-img]: https://travis-ci.com/uber-go/zap.svg?branch=master
|
|
129
|
+
[ci]: https://travis-ci.com/uber-go/zap
|
|
130
|
+
[cov-img]: https://codecov.io/gh/uber-go/zap/branch/master/graph/badge.svg
|
|
131
|
+
[cov]: https://codecov.io/gh/uber-go/zap
|
|
132
|
+
[benchmarking suite]: https://github.com/uber-go/zap/tree/master/benchmarks
|
|
133
|
+
[benchmarks/go.mod]: https://github.com/uber-go/zap/blob/master/benchmarks/go.mod
|
|
134
|
+
|