transfer support kafka (#227)

* 修改:     etc/transfer.yml
	修改:     go.mod
	修改:     go.sum
	修改:     src/modules/transfer/backend/init.go
	新文件:   src/modules/transfer/backend/kafka.go
	修改:     src/modules/transfer/backend/sender.go
	修改:     src/modules/transfer/http/routes/push_router.go
	修改:     src/modules/transfer/rpc/push.go
	新文件:   vendor/github.com/Shopify/sarama/.gitignore
	新文件:   vendor/github.com/Shopify/sarama/.golangci.yml
	新文件:   vendor/github.com/Shopify/sarama/CHANGELOG.md
	新文件:   vendor/github.com/Shopify/sarama/LICENSE
	新文件:   vendor/github.com/Shopify/sarama/Makefile
	新文件:   vendor/github.com/Shopify/sarama/README.md
	新文件:   vendor/github.com/Shopify/sarama/Vagrantfile
	新文件:   vendor/github.com/Shopify/sarama/acl_bindings.go
	新文件:   vendor/github.com/Shopify/sarama/acl_create_request.go
	新文件:   vendor/github.com/Shopify/sarama/acl_create_response.go
	新文件:   vendor/github.com/Shopify/sarama/acl_delete_request.go
	新文件:   vendor/github.com/Shopify/sarama/acl_delete_response.go
	新文件:   vendor/github.com/Shopify/sarama/acl_describe_request.go
	新文件:   vendor/github.com/Shopify/sarama/acl_describe_response.go
	新文件:   vendor/github.com/Shopify/sarama/acl_filter.go
	新文件:   vendor/github.com/Shopify/sarama/acl_types.go
	新文件:   vendor/github.com/Shopify/sarama/add_offsets_to_txn_request.go
	新文件:   vendor/github.com/Shopify/sarama/add_offsets_to_txn_response.go
	新文件:   vendor/github.com/Shopify/sarama/add_partitions_to_txn_request.go
	新文件:   vendor/github.com/Shopify/sarama/add_partitions_to_txn_response.go
	新文件:   vendor/github.com/Shopify/sarama/admin.go
	新文件:   vendor/github.com/Shopify/sarama/alter_configs_request.go
	新文件:   vendor/github.com/Shopify/sarama/alter_configs_response.go
	新文件:   vendor/github.com/Shopify/sarama/alter_partition_reassignments_request.go
	新文件:   vendor/github.com/Shopify/sarama/alter_partition_reassignments_response.go
	新文件:   vendor/github.com/Shopify/sarama/api_versions_request.go
	新文件:   vendor/github.com/Shopify/sarama/api_versions_response.go
	新文件:   vendor/github.com/Shopify/sarama/async_producer.go
	新文件:   vendor/github.com/Shopify/sarama/balance_strategy.go
	新文件:   vendor/github.com/Shopify/sarama/broker.go
	新文件:   vendor/github.com/Shopify/sarama/client.go
	新文件:   vendor/github.com/Shopify/sarama/compress.go
	新文件:   vendor/github.com/Shopify/sarama/config.go
	新文件:   vendor/github.com/Shopify/sarama/config_resource_type.go
	新文件:   vendor/github.com/Shopify/sarama/consumer.go
	新文件:   vendor/github.com/Shopify/sarama/consumer_group.go
	新文件:   vendor/github.com/Shopify/sarama/consumer_group_members.go
	新文件:   vendor/github.com/Shopify/sarama/consumer_metadata_request.go
	新文件:   vendor/github.com/Shopify/sarama/consumer_metadata_response.go
	新文件:   vendor/github.com/Shopify/sarama/control_record.go
	新文件:   vendor/github.com/Shopify/sarama/crc32_field.go
	新文件:   vendor/github.com/Shopify/sarama/create_partitions_request.go
	新文件:   vendor/github.com/Shopify/sarama/create_partitions_response.go
	新文件:   vendor/github.com/Shopify/sarama/create_topics_request.go
	新文件:   vendor/github.com/Shopify/sarama/create_topics_response.go
	新文件:   vendor/github.com/Shopify/sarama/decompress.go
	新文件:   vendor/github.com/Shopify/sarama/delete_groups_request.go
	新文件:   vendor/github.com/Shopify/sarama/delete_groups_response.go
	新文件:   vendor/github.com/Shopify/sarama/delete_records_request.go
	新文件:   vendor/github.com/Shopify/sarama/delete_records_response.go
	新文件:   vendor/github.com/Shopify/sarama/delete_topics_request.go
	新文件:   vendor/github.com/Shopify/sarama/delete_topics_response.go
	新文件:   vendor/github.com/Shopify/sarama/describe_configs_request.go
	新文件:   vendor/github.com/Shopify/sarama/describe_configs_response.go
	新文件:   vendor/github.com/Shopify/sarama/describe_groups_request.go
	新文件:   vendor/github.com/Shopify/sarama/describe_groups_response.go
	新文件:   vendor/github.com/Shopify/sarama/describe_log_dirs_request.go
	新文件:   vendor/github.com/Shopify/sarama/describe_log_dirs_response.go
	新文件:   vendor/github.com/Shopify/sarama/dev.yml
	新文件:   vendor/github.com/Shopify/sarama/encoder_decoder.go
	新文件:   vendor/github.com/Shopify/sarama/end_txn_request.go
	新文件:   vendor/github.com/Shopify/sarama/end_txn_response.go
	新文件:   vendor/github.com/Shopify/sarama/errors.go
	新文件:   vendor/github.com/Shopify/sarama/fetch_request.go
	新文件:   vendor/github.com/Shopify/sarama/fetch_response.go
	新文件:   vendor/github.com/Shopify/sarama/find_coordinator_request.go
	新文件:   vendor/github.com/Shopify/sarama/find_coordinator_response.go
	新文件:   vendor/github.com/Shopify/sarama/go.mod
	新文件:   vendor/github.com/Shopify/sarama/go.sum
	新文件:   vendor/github.com/Shopify/sarama/gssapi_kerberos.go
	新文件:   vendor/github.com/Shopify/sarama/heartbeat_request.go
	新文件:   vendor/github.com/Shopify/sarama/heartbeat_response.go
	新文件:   vendor/github.com/Shopify/sarama/init_producer_id_request.go
	新文件:   vendor/github.com/Shopify/sarama/init_producer_id_response.go
	新文件:   vendor/github.com/Shopify/sarama/join_group_request.go
	新文件:   vendor/github.com/Shopify/sarama/join_group_response.go
	新文件:   vendor/github.com/Shopify/sarama/kerberos_client.go
	新文件:   vendor/github.com/Shopify/sarama/leave_group_request.go
	新文件:   vendor/github.com/Shopify/sarama/leave_group_response.go
	新文件:   vendor/github.com/Shopify/sarama/length_field.go
	新文件:   vendor/github.com/Shopify/sarama/list_groups_request.go
	新文件:   vendor/github.com/Shopify/sarama/list_groups_response.go
	新文件:   vendor/github.com/Shopify/sarama/list_partition_reassignments_request.go
	新文件:   vendor/github.com/Shopify/sarama/list_partition_reassignments_response.go
	新文件:   vendor/github.com/Shopify/sarama/message.go
	新文件:   vendor/github.com/Shopify/sarama/message_set.go
	新文件:   vendor/github.com/Shopify/sarama/metadata_request.go
	新文件:   vendor/github.com/Shopify/sarama/metadata_response.go
	新文件:   vendor/github.com/Shopify/sarama/metrics.go
	新文件:   vendor/github.com/Shopify/sarama/mockbroker.go
	新文件:   vendor/github.com/Shopify/sarama/mockkerberos.go
	新文件:   vendor/github.com/Shopify/sarama/mockresponses.go
	新文件:   vendor/github.com/Shopify/sarama/offset_commit_request.go
	新文件:   vendor/github.com/Shopify/sarama/offset_commit_response.go
	新文件:   vendor/github.com/Shopify/sarama/offset_fetch_request.go
	新文件:   vendor/github.com/Shopify/sarama/offset_fetch_response.go
	新文件:   vendor/github.com/Shopify/sarama/offset_manager.go
	新文件:   vendor/github.com/Shopify/sarama/offset_request.go
	新文件:   vendor/github.com/Shopify/sarama/offset_response.go
	新文件:   vendor/github.com/Shopify/sarama/packet_decoder.go
	新文件:   vendor/github.com/Shopify/sarama/packet_encoder.go
	新文件:   vendor/github.com/Shopify/sarama/partitioner.go
	新文件:   vendor/github.com/Shopify/sarama/prep_encoder.go
	新文件:   vendor/github.com/Shopify/sarama/produce_request.go
	新文件:   vendor/github.com/Shopify/sarama/produce_response.go
	新文件:   vendor/github.com/Shopify/sarama/produce_set.go
	新文件:   vendor/github.com/Shopify/sarama/real_decoder.go
	新文件:   vendor/github.com/Shopify/sarama/real_encoder.go
	新文件:   vendor/github.com/Shopify/sarama/record.go
	新文件:   vendor/github.com/Shopify/sarama/record_batch.go
	新文件:   vendor/github.com/Shopify/sarama/records.go
	新文件:   vendor/github.com/Shopify/sarama/request.go
	新文件:   vendor/github.com/Shopify/sarama/response_header.go
	新文件:   vendor/github.com/Shopify/sarama/sarama.go
	新文件:   vendor/github.com/Shopify/sarama/sasl_authenticate_request.go
	新文件:   vendor/github.com/Shopify/sarama/sasl_authenticate_response.go
	新文件:   vendor/github.com/Shopify/sarama/sasl_handshake_request.go
	新文件:   vendor/github.com/Shopify/sarama/sasl_handshake_response.go
	新文件:   vendor/github.com/Shopify/sarama/sticky_assignor_user_data.go
	新文件:   vendor/github.com/Shopify/sarama/sync_group_request.go
	新文件:   vendor/github.com/Shopify/sarama/sync_group_response.go
	新文件:   vendor/github.com/Shopify/sarama/sync_producer.go
	新文件:   vendor/github.com/Shopify/sarama/timestamp.go
	新文件:   vendor/github.com/Shopify/sarama/txn_offset_commit_request.go
	新文件:   vendor/github.com/Shopify/sarama/txn_offset_commit_response.go
	新文件:   vendor/github.com/Shopify/sarama/utils.go
	新文件:   vendor/github.com/Shopify/sarama/zstd.go
	新文件:   vendor/github.com/eapache/go-resiliency/LICENSE
	新文件:   vendor/github.com/eapache/go-resiliency/breaker/README.md
	新文件:   vendor/github.com/eapache/go-resiliency/breaker/breaker.go
	新文件:   vendor/github.com/eapache/go-xerial-snappy/.gitignore
	新文件:   vendor/github.com/eapache/go-xerial-snappy/.travis.yml
	新文件:   vendor/github.com/eapache/go-xerial-snappy/LICENSE
	新文件:   vendor/github.com/eapache/go-xerial-snappy/README.md
	新文件:   vendor/github.com/eapache/go-xerial-snappy/fuzz.go
	新文件:   vendor/github.com/eapache/go-xerial-snappy/snappy.go
	新文件:   vendor/github.com/eapache/queue/.gitignore
	新文件:   vendor/github.com/eapache/queue/.travis.yml
	新文件:   vendor/github.com/eapache/queue/LICENSE
	新文件:   vendor/github.com/eapache/queue/README.md
	新文件:   vendor/github.com/eapache/queue/queue.go
	新文件:   vendor/github.com/golang/snappy/.gitignore
	新文件:   vendor/github.com/golang/snappy/AUTHORS
	新文件:   vendor/github.com/golang/snappy/CONTRIBUTORS
	新文件:   vendor/github.com/golang/snappy/LICENSE
	新文件:   vendor/github.com/golang/snappy/README
	新文件:   vendor/github.com/golang/snappy/decode.go
	新文件:   vendor/github.com/golang/snappy/decode_amd64.go
	新文件:   vendor/github.com/golang/snappy/decode_amd64.s
	新文件:   vendor/github.com/golang/snappy/decode_other.go
	新文件:   vendor/github.com/golang/snappy/encode.go
	新文件:   vendor/github.com/golang/snappy/encode_amd64.go
	新文件:   vendor/github.com/golang/snappy/encode_amd64.s
	新文件:   vendor/github.com/golang/snappy/encode_other.go
	新文件:   vendor/github.com/golang/snappy/go.mod
	新文件:   vendor/github.com/golang/snappy/snappy.go
	新文件:   vendor/github.com/hashicorp/go-uuid/.travis.yml
	新文件:   vendor/github.com/hashicorp/go-uuid/LICENSE
	新文件:   vendor/github.com/hashicorp/go-uuid/README.md
	新文件:   vendor/github.com/hashicorp/go-uuid/go.mod
	新文件:   vendor/github.com/hashicorp/go-uuid/uuid.go
	新文件:   vendor/github.com/jcmturner/gofork/LICENSE
	新文件:   vendor/github.com/jcmturner/gofork/encoding/asn1/README.md
	新文件:   vendor/github.com/jcmturner/gofork/encoding/asn1/asn1.go
	新文件:   vendor/github.com/jcmturner/gofork/encoding/asn1/common.go
	新文件:   vendor/github.com/jcmturner/gofork/encoding/asn1/marshal.go
	新文件:   vendor/github.com/jcmturner/gofork/x/crypto/pbkdf2/pbkdf2.go
	新文件:   vendor/github.com/klauspost/compress/LICENSE
	新文件:   vendor/github.com/klauspost/compress/fse/README.md
	新文件:   vendor/github.com/klauspost/compress/fse/bitreader.go
	新文件:   vendor/github.com/klauspost/compress/fse/bitwriter.go
	新文件:   vendor/github.com/klauspost/compress/fse/bytereader.go
	新文件:   vendor/github.com/klauspost/compress/fse/compress.go
	新文件:   vendor/github.com/klauspost/compress/fse/decompress.go
	新文件:   vendor/github.com/klauspost/compress/fse/fse.go
	新文件:   vendor/github.com/klauspost/compress/huff0/.gitignore
	新文件:   vendor/github.com/klauspost/compress/huff0/README.md
	新文件:   vendor/github.com/klauspost/compress/huff0/bitreader.go
	新文件:   vendor/github.com/klauspost/compress/huff0/bitwriter.go
	新文件:   vendor/github.com/klauspost/compress/huff0/bytereader.go
	新文件:   vendor/github.com/klauspost/compress/huff0/compress.go
	新文件:   vendor/github.com/klauspost/compress/huff0/decompress.go
	新文件:   vendor/github.com/klauspost/compress/huff0/huff0.go
	新文件:   vendor/github.com/klauspost/compress/snappy/.gitignore
	新文件:   vendor/github.com/klauspost/compress/snappy/AUTHORS
	新文件:   vendor/github.com/klauspost/compress/snappy/CONTRIBUTORS
	新文件:   vendor/github.com/klauspost/compress/snappy/LICENSE
	新文件:   vendor/github.com/klauspost/compress/snappy/README
	新文件:   vendor/github.com/klauspost/compress/snappy/decode.go
	新文件:   vendor/github.com/klauspost/compress/snappy/decode_amd64.go
	新文件:   vendor/github.com/klauspost/compress/snappy/decode_amd64.s
	新文件:   vendor/github.com/klauspost/compress/snappy/decode_other.go
	新文件:   vendor/github.com/klauspost/compress/snappy/encode.go
	新文件:   vendor/github.com/klauspost/compress/snappy/encode_amd64.go
	新文件:   vendor/github.com/klauspost/compress/snappy/encode_amd64.s
	新文件:   vendor/github.com/klauspost/compress/snappy/encode_other.go
	新文件:   vendor/github.com/klauspost/compress/snappy/runbench.cmd
	新文件:   vendor/github.com/klauspost/compress/snappy/snappy.go
	新文件:   vendor/github.com/klauspost/compress/zstd/README.md
	新文件:   vendor/github.com/klauspost/compress/zstd/bitreader.go
	新文件:   vendor/github.com/klauspost/compress/zstd/bitwriter.go
	新文件:   vendor/github.com/klauspost/compress/zstd/blockdec.go
	新文件:   vendor/github.com/klauspost/compress/zstd/blockenc.go
	新文件:   vendor/github.com/klauspost/compress/zstd/blocktype_string.go
	新文件:   vendor/github.com/klauspost/compress/zstd/bytebuf.go
	新文件:   vendor/github.com/klauspost/compress/zstd/bytereader.go
	新文件:   vendor/github.com/klauspost/compress/zstd/decoder.go
	新文件:   vendor/github.com/klauspost/compress/zstd/decoder_options.go
	新文件:   vendor/github.com/klauspost/compress/zstd/enc_dfast.go
	新文件:   vendor/github.com/klauspost/compress/zstd/enc_fast.go
	新文件:   vendor/github.com/klauspost/compress/zstd/enc_params.go
	新文件:   vendor/github.com/klauspost/compress/zstd/encoder.go
	新文件:   vendor/github.com/klauspost/compress/zstd/encoder_options.go
	新文件:   vendor/github.com/klauspost/compress/zstd/framedec.go
	新文件:   vendor/github.com/klauspost/compress/zstd/frameenc.go
	新文件:   vendor/github.com/klauspost/compress/zstd/fse_decoder.go
	新文件:   vendor/github.com/klauspost/compress/zstd/fse_encoder.go
	新文件:   vendor/github.com/klauspost/compress/zstd/fse_predefined.go
	新文件:   vendor/github.com/klauspost/compress/zstd/hash.go
	新文件:   vendor/github.com/klauspost/compress/zstd/history.go
	新文件:   vendor/github.com/klauspost/compress/zstd/internal/xxhash/LICENSE.txt
	新文件:   vendor/github.com/klauspost/compress/zstd/internal/xxhash/README.md
	新文件:   vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash.go
	新文件:   vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_amd64.go
	新文件:   vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_amd64.s
	新文件:   vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_other.go
	新文件:   vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_safe.go
	新文件:   vendor/github.com/klauspost/compress/zstd/seqdec.go
	新文件:   vendor/github.com/klauspost/compress/zstd/seqenc.go
	新文件:   vendor/github.com/klauspost/compress/zstd/snappy.go
	新文件:   vendor/github.com/klauspost/compress/zstd/zstd.go
	新文件:   vendor/github.com/pierrec/lz4/.gitignore
	新文件:   vendor/github.com/pierrec/lz4/.travis.yml
	新文件:   vendor/github.com/pierrec/lz4/LICENSE
	新文件:   vendor/github.com/pierrec/lz4/README.md
	新文件:   vendor/github.com/pierrec/lz4/block.go
	新文件:   vendor/github.com/pierrec/lz4/debug.go
	新文件:   vendor/github.com/pierrec/lz4/debug_stub.go
	新文件:   vendor/github.com/pierrec/lz4/decode_amd64.go
	新文件:   vendor/github.com/pierrec/lz4/decode_amd64.s
	新文件:   vendor/github.com/pierrec/lz4/decode_other.go
	新文件:   vendor/github.com/pierrec/lz4/errors.go
	新文件:   vendor/github.com/pierrec/lz4/internal/xxh32/xxh32zero.go
	新文件:   vendor/github.com/pierrec/lz4/lz4.go
	新文件:   vendor/github.com/pierrec/lz4/lz4_go1.10.go
	新文件:   vendor/github.com/pierrec/lz4/lz4_notgo1.10.go
	新文件:   vendor/github.com/pierrec/lz4/reader.go
	新文件:   vendor/github.com/pierrec/lz4/writer.go
	新文件:   vendor/github.com/rcrowley/go-metrics/.gitignore
	新文件:   vendor/github.com/rcrowley/go-metrics/.travis.yml
	新文件:   vendor/github.com/rcrowley/go-metrics/LICENSE
	新文件:   vendor/github.com/rcrowley/go-metrics/README.md
	新文件:   vendor/github.com/rcrowley/go-metrics/counter.go
	新文件:   vendor/github.com/rcrowley/go-metrics/debug.go
	新文件:   vendor/github.com/rcrowley/go-metrics/ewma.go
	新文件:   vendor/github.com/rcrowley/go-metrics/gauge.go
	新文件:   vendor/github.com/rcrowley/go-metrics/gauge_float64.go
	新文件:   vendor/github.com/rcrowley/go-metrics/graphite.go
	新文件:   vendor/github.com/rcrowley/go-metrics/healthcheck.go
	新文件:   vendor/github.com/rcrowley/go-metrics/histogram.go
	新文件:   vendor/github.com/rcrowley/go-metrics/json.go
	新文件:   vendor/github.com/rcrowley/go-metrics/log.go
	新文件:   vendor/github.com/rcrowley/go-metrics/memory.md
	新文件:   vendor/github.com/rcrowley/go-metrics/meter.go
	新文件:   vendor/github.com/rcrowley/go-metrics/metrics.go
	新文件:   vendor/github.com/rcrowley/go-metrics/opentsdb.go
	新文件:   vendor/github.com/rcrowley/go-metrics/registry.go
	新文件:   vendor/github.com/rcrowley/go-metrics/runtime.go
	新文件:   vendor/github.com/rcrowley/go-metrics/runtime_cgo.go
	新文件:   vendor/github.com/rcrowley/go-metrics/runtime_gccpufraction.go
	新文件:   vendor/github.com/rcrowley/go-metrics/runtime_no_cgo.go
	新文件:   vendor/github.com/rcrowley/go-metrics/runtime_no_gccpufraction.go
	新文件:   vendor/github.com/rcrowley/go-metrics/sample.go
	新文件:   vendor/github.com/rcrowley/go-metrics/syslog.go
	新文件:   vendor/github.com/rcrowley/go-metrics/timer.go
	新文件:   vendor/github.com/rcrowley/go-metrics/validate.sh
	新文件:   vendor/github.com/rcrowley/go-metrics/writer.go
	删除:     vendor/github.com/shirou/gopsutil/mem/types_openbsd.go
	删除:     vendor/github.com/shirou/gopsutil/process/types_darwin.go
	删除:     vendor/github.com/shirou/gopsutil/process/types_freebsd.go
	删除:     vendor/github.com/shirou/gopsutil/process/types_openbsd.go
	删除:     vendor/github.com/ugorji/go/codec/xml.go
	新文件:   vendor/golang.org/x/crypto/AUTHORS
	新文件:   vendor/golang.org/x/crypto/CONTRIBUTORS
	新文件:   vendor/golang.org/x/crypto/LICENSE
	新文件:   vendor/golang.org/x/crypto/PATENTS
	新文件:   vendor/golang.org/x/crypto/md4/md4.go
	新文件:   vendor/golang.org/x/crypto/md4/md4block.go
	新文件:   vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go
	新文件:   vendor/golang.org/x/net/AUTHORS
	新文件:   vendor/golang.org/x/net/CONTRIBUTORS
	新文件:   vendor/golang.org/x/net/LICENSE
	新文件:   vendor/golang.org/x/net/PATENTS
	新文件:   vendor/golang.org/x/net/internal/socks/client.go
	新文件:   vendor/golang.org/x/net/internal/socks/socks.go
	新文件:   vendor/golang.org/x/net/proxy/dial.go
	新文件:   vendor/golang.org/x/net/proxy/direct.go
	新文件:   vendor/golang.org/x/net/proxy/per_host.go
	新文件:   vendor/golang.org/x/net/proxy/proxy.go
	新文件:   vendor/golang.org/x/net/proxy/socks5.go
	删除:     vendor/golang.org/x/sys/unix/mkasm_darwin.go
	删除:     vendor/golang.org/x/sys/unix/mkpost.go
	删除:     vendor/golang.org/x/sys/unix/mksyscall.go
	删除:     vendor/golang.org/x/sys/unix/mksyscall_aix_ppc.go
	删除:     vendor/golang.org/x/sys/unix/mksyscall_aix_ppc64.go
	删除:     vendor/golang.org/x/sys/unix/mksyscall_solaris.go
	删除:     vendor/golang.org/x/sys/unix/mksysctl_openbsd.go
	删除:     vendor/golang.org/x/sys/unix/mksysnum.go
	删除:     vendor/golang.org/x/sys/unix/types_aix.go
	删除:     vendor/golang.org/x/sys/unix/types_darwin.go
	删除:     vendor/golang.org/x/sys/unix/types_dragonfly.go
	删除:     vendor/golang.org/x/sys/unix/types_freebsd.go
	删除:     vendor/golang.org/x/sys/unix/types_netbsd.go
	删除:     vendor/golang.org/x/sys/unix/types_openbsd.go
	删除:     vendor/golang.org/x/sys/unix/types_solaris.go
	删除:     vendor/golang.org/x/text/unicode/norm/maketables.go
	删除:     vendor/golang.org/x/text/unicode/norm/triegen.go
	删除:     vendor/golang.org/x/tools/go/gcexportdata/main.go
	新文件:   vendor/gopkg.in/jcmturner/aescts.v1/.gitignore
	新文件:   vendor/gopkg.in/jcmturner/aescts.v1/LICENSE
	新文件:   vendor/gopkg.in/jcmturner/aescts.v1/README.md
	新文件:   vendor/gopkg.in/jcmturner/aescts.v1/aescts.go
	新文件:   vendor/gopkg.in/jcmturner/dnsutils.v1/.gitignore
	新文件:   vendor/gopkg.in/jcmturner/dnsutils.v1/.travis.yml
	新文件:   vendor/gopkg.in/jcmturner/dnsutils.v1/LICENSE
	新文件:   vendor/gopkg.in/jcmturner/dnsutils.v1/srv.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/LICENSE
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/asn1tools/tools.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/client/ASExchange.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/client/TGSExchange.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/client/cache.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/client/client.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/client/network.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/client/passwd.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/client/session.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/client/settings.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/config/error.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/config/hosts.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/config/krb5conf.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/credentials/ccache.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/credentials/credentials.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/crypto/aes128-cts-hmac-sha1-96.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/crypto/aes128-cts-hmac-sha256-128.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/crypto/aes256-cts-hmac-sha1-96.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/crypto/aes256-cts-hmac-sha384-192.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/crypto/common/common.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/crypto/crypto.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/crypto/des3-cbc-sha1-kd.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/crypto/etype/etype.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/crypto/rc4-hmac.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/crypto/rfc3961/encryption.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/crypto/rfc3961/keyDerivation.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/crypto/rfc3961/nfold.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/crypto/rfc3962/encryption.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/crypto/rfc3962/keyDerivation.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/crypto/rfc4757/checksum.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/crypto/rfc4757/encryption.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/crypto/rfc4757/keyDerivation.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/crypto/rfc4757/msgtype.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/crypto/rfc8009/encryption.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/crypto/rfc8009/keyDerivation.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/gssapi/MICToken.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/gssapi/README.md
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/gssapi/contextFlags.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/gssapi/gssapi.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/gssapi/wrapToken.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/iana/addrtype/constants.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/iana/adtype/constants.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/iana/asnAppTag/constants.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/iana/chksumtype/constants.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/iana/constants.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/iana/errorcode/constants.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/iana/etypeID/constants.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/iana/flags/constants.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/iana/keyusage/constants.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/iana/msgtype/constants.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/iana/nametype/constants.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/iana/patype/constants.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/kadmin/changepasswddata.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/kadmin/message.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/kadmin/passwd.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/keytab/keytab.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/krberror/error.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/messages/APRep.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/messages/APReq.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/messages/KDCRep.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/messages/KDCReq.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/messages/KRBCred.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/messages/KRBError.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/messages/KRBPriv.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/messages/KRBSafe.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/messages/Ticket.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/pac/client_claims.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/pac/client_info.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/pac/credentials_info.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/pac/device_claims.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/pac/device_info.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/pac/kerb_validation_info.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/pac/pac_type.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/pac/s4u_delegation_info.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/pac/signature_data.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/pac/supplemental_cred.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/pac/upn_dns_info.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/types/Authenticator.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/types/AuthorizationData.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/types/Cryptosystem.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/types/HostAddress.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/types/KerberosFlags.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/types/PAData.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/types/PrincipalName.go
	新文件:   vendor/gopkg.in/jcmturner/gokrb5.v7/types/TypedData.go
	新文件:   vendor/gopkg.in/jcmturner/rpc.v1/LICENSE
	新文件:   vendor/gopkg.in/jcmturner/rpc.v1/mstypes/claims.go
	新文件:   vendor/gopkg.in/jcmturner/rpc.v1/mstypes/common.go
	新文件:   vendor/gopkg.in/jcmturner/rpc.v1/mstypes/filetime.go
	新文件:   vendor/gopkg.in/jcmturner/rpc.v1/mstypes/group_membership.go
	新文件:   vendor/gopkg.in/jcmturner/rpc.v1/mstypes/kerb_sid_and_attributes.go
	新文件:   vendor/gopkg.in/jcmturner/rpc.v1/mstypes/reader.go
	新文件:   vendor/gopkg.in/jcmturner/rpc.v1/mstypes/rpc_unicode_string.go
	新文件:   vendor/gopkg.in/jcmturner/rpc.v1/mstypes/sid.go
	新文件:   vendor/gopkg.in/jcmturner/rpc.v1/mstypes/user_session_key.go
	新文件:   vendor/gopkg.in/jcmturner/rpc.v1/ndr/arrays.go
	新文件:   vendor/gopkg.in/jcmturner/rpc.v1/ndr/decoder.go
	新文件:   vendor/gopkg.in/jcmturner/rpc.v1/ndr/error.go
	新文件:   vendor/gopkg.in/jcmturner/rpc.v1/ndr/header.go
	新文件:   vendor/gopkg.in/jcmturner/rpc.v1/ndr/pipe.go
	新文件:   vendor/gopkg.in/jcmturner/rpc.v1/ndr/primitives.go
	新文件:   vendor/gopkg.in/jcmturner/rpc.v1/ndr/rawbytes.go
	新文件:   vendor/gopkg.in/jcmturner/rpc.v1/ndr/strings.go
	新文件:   vendor/gopkg.in/jcmturner/rpc.v1/ndr/tags.go
	新文件:   vendor/gopkg.in/jcmturner/rpc.v1/ndr/union.go
	修改:     vendor/gopkg.in/yaml.v2/.travis.yml
	修改:     vendor/gopkg.in/yaml.v2/decode.go
	修改:     vendor/gopkg.in/yaml.v2/scannerc.go
	修改:     vendor/gopkg.in/yaml.v2/yaml.go
	修改:     vendor/gopkg.in/yaml.v2/yamlh.go
	修改:     vendor/modules.txt

* Update sender.go

* Update sender.go

* Update kafka.go

* Update kafka.go

Co-authored-by: 马涛 <matao@staff.sina.com.cn>
master
mt 5 years ago committed by GitHub
parent 7d5d791376
commit 163c116871
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -16,8 +16,12 @@ backend:
opentsdb:
enabled: false
address: "127.0.0.1:4242"
kafka:
enabled: false
brokersPeers: "192.168.1.1:9092,192.168.1.2:9092"
topic: "n9e"
logger:
dir: logs/transfer
level: WARNING
keepHours: 2
keepHours: 2

@ -3,6 +3,8 @@ module github.com/didi/nightingale
go 1.12
require (
github.com/Shopify/sarama v1.26.4
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect
github.com/cespare/xxhash v1.1.0
github.com/codegangsta/negroni v1.0.0
github.com/dgryski/go-tsz v0.0.0-20180227144327-03b7d791f4fe
@ -10,6 +12,7 @@ require (
github.com/gin-contrib/pprof v1.2.1
github.com/gin-contrib/sessions v0.0.3
github.com/gin-gonic/gin v1.5.0
github.com/go-ole/go-ole v1.2.4 // indirect
github.com/go-sql-driver/mysql v1.4.1
github.com/gorilla/mux v1.6.2
github.com/hpcloud/tail v1.0.0

@ -9,6 +9,7 @@ cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxK
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
cloud.google.com/go v0.51.0 h1:PvKAVQWCtlGUSlZkGW3QLelKaWq7KYv/MW1EboG8bfM=
cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
@ -26,8 +27,14 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym
github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/Shopify/sarama v1.19.0 h1:9oksLxC6uxVPHPVYUmq6xhr1BOF/hHobWH2UzO67z1s=
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
github.com/Shopify/sarama v1.26.4 h1:+17TxUq/PJEAfZAll0T7XJjSgQWCpaQSoki/x5yN8o8=
github.com/Shopify/sarama v1.26.4/go.mod h1:NbSGBSSndYaIhRcBtY9V0U7AyH+x71bG668AuWys/yU=
github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc=
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk=
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
@ -68,8 +75,13 @@ github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMa
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
github.com/dgryski/go-tsz v0.0.0-20180227144327-03b7d791f4fe h1:VOrqop9SqFzqwZpROEOZpIufuLEUoJ3reNhdOdC9Zzw=
github.com/dgryski/go-tsz v0.0.0-20180227144327-03b7d791f4fe/go.mod h1:ft6P746mYUFQBCsH3OkFBG8FtjLx1XclLMo+9Jh1Yts=
github.com/eapache/go-resiliency v1.1.0 h1:1NtRmCAqadE2FN4ZcN6g90TP3uk8cg9rn9eNK2197aU=
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
github.com/eapache/go-resiliency v1.2.0 h1:v7g92e/KSN71Rq7vSThKaWIq68fL4YHvWyiUKorFR1Q=
github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw=
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc=
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts=
github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385 h1:clC1lXBpe2kTj2VHdaIu9ajZQe4kcEY9j0NsnDDBZ3o=
@ -77,6 +89,10 @@ github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZi
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
github.com/frankban/quicktest v1.7.2 h1:2QxQoC1TS09S7fhCPsrvqYdvP1H5M1P1ih5ABm3BTYk=
github.com/frankban/quicktest v1.7.2/go.mod h1:jaStnuzAqU1AJdCO0l53JDCJrVDKcS03DbaAcR7Ks/o=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/garyburd/redigo v1.6.0 h1:0VruCpn7yAIIu7pWVClQC8wxCJEcG3nyzpMSHKi1PQc=
@ -100,6 +116,8 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI=
github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM=
github.com/go-playground/locales v0.12.1 h1:2FITxuFt/xuCNP1Acdhv62OzaCiviiE4kotfhkmOqEc=
github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=
github.com/go-playground/universal-translator v0.16.0 h1:X++omBR/4cE2MNg91AoC3rmGrCjJ8eAeUP/K/EKx4DM=
@ -127,6 +145,8 @@ github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0=
github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
@ -136,6 +156,7 @@ github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
@ -160,6 +181,8 @@ github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoA
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE=
github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
@ -177,6 +200,8 @@ github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19y
github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE=
github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0=
github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po=
github.com/jcmturner/gofork v1.0.0 h1:J7uCkflzTEhUZ64xqKnkDxq3kzc96ajM1Gli5ktUem8=
github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o=
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
@ -194,6 +219,8 @@ github.com/kidstuff/mongostore v0.0.0-20181113001930-e650cd85ee4b/go.mod h1:g2nV
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
github.com/klauspost/compress v1.9.8 h1:VMAMUUOh+gaxKTMk+zqbjsSjsIcUcL/LF4o63i82QyA=
github.com/klauspost/compress v1.9.8/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg=
github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
@ -201,6 +228,8 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs=
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
@ -219,6 +248,7 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky
github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-sqlite3 v1.10.0 h1:jbhqpg7tQe4SupckyijYiy0mJJ/pRyHvXf7JdWK860o=
github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/mattn/go-sqlite3 v1.11.0 h1:LDdKkqtYlom37fkvqs8rMPFKAMe8+SgjbwZ6ex1/A/Q=
github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
@ -247,7 +277,10 @@ github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc=
github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I=
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
github.com/pierrec/lz4 v2.4.1+incompatible h1:mFe7ttWaflA46Mhqh+jUfjp2qTbPYxLB2/OyBppH9dg=
github.com/pierrec/lz4 v2.4.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ=
@ -272,7 +305,10 @@ github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7z
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
github.com/quasoft/memstore v0.0.0-20180925164028-84a050167438/go.mod h1:wTPjTepVu7uJBYgZ0SdWHQlIas582j6cn2jgk4DDdlg=
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a h1:9ZKAASQSHhDYGoxY8uLVpewe1GDZ2vu2Tr/vTdVAkFQ=
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563 h1:dY6ETXrvDG7Sa4vE8ZQG4yqWg6UnOcbqTAahkV813vQ=
github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc=
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
@ -322,6 +358,8 @@ github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLY
github.com/unrolled/render v1.0.2 h1:dGS3EmChQP3yOi1YeFNO/Dx+MbWZhdvhQJTXochM5bs=
github.com/unrolled/render v1.0.2/go.mod h1:gN9T0NhL4Bfbwu8ann7Ry/TGHYfosul+J0obPf6NBdM=
github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I=
github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg=
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
@ -345,7 +383,10 @@ golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACk
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529 h1:iMGN4xG0cnqj3t+zOM8wUB0BiPKHEwSxEZCvzcbZuvk=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200204104054-c9f3fb736b72 h1:+ELyKg6m8UBf0nPFSqD0mi7zUfwPyXo23HNjMnXPz7w=
golang.org/x/crypto v0.0.0-20200204104054-c9f3fb736b72/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@ -391,6 +432,8 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@ -460,6 +503,7 @@ golang.org/x/tools v0.0.0-20200108203644-89082a384178 h1:f5gMxb6FbpY48csegk9UPd7
golang.org/x/tools v0.0.0-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
@ -511,6 +555,8 @@ gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUy
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
@ -521,6 +567,16 @@ gopkg.in/go-playground/validator.v9 v9.29.1 h1:SvGtYmN60a5CVKTOzMSyfzWDeZRxRuGvR
gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno=
gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/jcmturner/aescts.v1 v1.0.1 h1:cVVZBK2b1zY26haWB4vbBiZrfFQnfbTVrE3xZq6hrEw=
gopkg.in/jcmturner/aescts.v1 v1.0.1/go.mod h1:nsR8qBOg+OucoIW+WMhB3GspUQXq9XorLnQb9XtvcOo=
gopkg.in/jcmturner/dnsutils.v1 v1.0.1 h1:cIuC1OLRGZrld+16ZJvvZxVJeKPsvd5eUIvxfoN5hSM=
gopkg.in/jcmturner/dnsutils.v1 v1.0.1/go.mod h1:m3v+5svpVOhtFAP/wSz+yzh4Mc0Fg7eRhxkJMWSIz9Q=
gopkg.in/jcmturner/goidentity.v3 v3.0.0 h1:1duIyWiTaYvVx3YX2CYtpJbUFd7/UuPYCfgXtQ3VTbI=
gopkg.in/jcmturner/goidentity.v3 v3.0.0/go.mod h1:oG2kH0IvSYNIu80dVAyu/yoefjq1mNfM5bm88whjWx4=
gopkg.in/jcmturner/gokrb5.v7 v7.5.0 h1:a9tsXlIDD9SKxotJMK3niV7rPZAJeX2aD/0yg3qlIrg=
gopkg.in/jcmturner/gokrb5.v7 v7.5.0/go.mod h1:l8VISx+WGYp+Fp7KRbsiUuXTTOnxIc3Tuvyavf11/WM=
gopkg.in/jcmturner/rpc.v1 v1.1.0 h1:QHIUxTX1ISuAv9dD2wJ9HWQVuWDX/Zc0PfeC2tjc4rU=
gopkg.in/jcmturner/rpc.v1 v1.1.0/go.mod h1:YIdkC4XfD6GXbzje11McwsDuOlZQSb9W4vfLvuNnlv8=
gopkg.in/ldap.v3 v3.1.0 h1:DIDWEjI7vQWREh0S8X5/NFPCZ3MCVd55LmXKPW4XLGE=
gopkg.in/ldap.v3 v3.1.0/go.mod h1:dQjCc0R0kfyFjIlWNMH1DORwUASZyDxo2Ry1B51dXaQ=
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
@ -531,6 +587,8 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

@ -36,6 +36,16 @@ type OpenTsdbSection struct {
Address string `yaml:"address"`
}
type KafkaSection struct {
Enabled bool `yaml:"enabled"`
Topic string `yaml:"topic"`
BrokersPeers string `yaml:"brokersPeers"`
SaslUser string `yaml:"saslUser"`
SaslPasswd string `yaml:"saslPasswd"`
Retry int `yaml:"retry"`
KeepAlive int64 `yaml:"keepAlive"`
}
type BackendSection struct {
Enabled bool `yaml:"enabled"`
Batch int `yaml:"batch"`
@ -53,6 +63,7 @@ type BackendSection struct {
ClusterList map[string]*ClusterNode `json:"clusterList"`
Influxdb InfluxdbSection `yaml:"influxdb"`
OpenTsdb OpenTsdbSection `yaml:"opentsdb"`
Kafka KafkaSection `yaml:"kafka"`
}
const DefaultSendQueueMaxSize = 102400 //10.24w
@ -71,6 +82,7 @@ var (
JudgeQueues = cache.SafeJudgeQueue{}
InfluxdbQueue *list.SafeListLimited
OpenTsdbQueue *list.SafeListLimited
KafkaQueue = make(chan KafkaData, 10)
// 连接池 node_address -> connection_pool
TsdbConnPools *pools.ConnPools

@ -0,0 +1,119 @@
package backend
import (
"encoding/json"
"errors"
"fmt"
"github.com/Shopify/sarama"
"github.com/toolkits/pkg/logger"
"os"
"strings"
"time"
)
type KafkaData map[string]interface{}
type KfClient struct {
producer sarama.AsyncProducer
cfg *sarama.Config
Topic string
BrokersPeers []string
ticker *time.Ticker
}
func NewKfClient(c KafkaSection) (kafkaSender *KfClient, err error) {
topic := c.Topic
if len(topic) == 0 {
err = errors.New("topic is nil")
return
}
brokers := strings.Split(c.BrokersPeers, ",")
if len(brokers) == 0 {
err = errors.New("brokers is nil")
return
}
hostName, _ := os.Hostname()
cfg := sarama.NewConfig()
cfg.Producer.Return.Successes = true
cfg.Producer.Return.Errors = true
if len(hostName) > 0 {
cfg.ClientID = hostName
}
cfg.Producer.Partitioner = func(topic string) sarama.Partitioner { return sarama.NewRoundRobinPartitioner(topic) }
if len(c.SaslUser) > 0 && len(c.SaslPasswd) > 0 {
cfg.Net.SASL.Enable = true
cfg.Net.SASL.User = c.SaslUser
cfg.Net.SASL.Password = c.SaslPasswd
}
if c.Retry > 0 {
cfg.Producer.Retry.Max = c.Retry
}
cfg.Net.DialTimeout = time.Duration(connTimeout) * time.Millisecond
if c.KeepAlive > 0 {
cfg.Net.KeepAlive = time.Duration(c.KeepAlive) * time.Millisecond
}
producer, err := sarama.NewAsyncProducer(brokers, cfg)
if err != nil {
return
}
kafkaSender = newSender(brokers, topic, cfg, producer)
return
}
func newSender(brokers []string, topic string, cfg *sarama.Config, producer sarama.AsyncProducer) (kf *KfClient) {
kf = &KfClient{
producer: producer,
Topic: topic,
BrokersPeers: brokers,
ticker: time.NewTicker(time.Millisecond * time.Duration(callTimeout)),
}
go kf.readMessageToErrorChan()
return
}
func (kf *KfClient) readMessageToErrorChan() {
var producer = kf.producer
for {
select {
case <-producer.Successes():
case errMsg := <-producer.Errors():
msg, _ := errMsg.Msg.Value.Encode()
logger.Errorf("ReadMessageToErrorChan err:%v %v", errMsg.Error(), string(msg))
}
}
}
func (kf *KfClient) Send(data KafkaData) error {
var producer = kf.producer
message, err := kf.getEventMessage(data)
if err != nil {
logger.Errorf("Dropping event: %v", err)
return err
}
select {
case producer.Input() <- message:
case <-kf.ticker.C:
return fmt.Errorf("send kafka failed:%v[%v]", kf.Topic, kf.BrokersPeers)
}
return nil
}
func (kf *KfClient) Close() error {
logger.Infof("kafka sender(%s) was closed", kf.Topic, kf.BrokersPeers)
_ = kf.producer.Close()
kf.producer = nil
return nil
}
func (kf *KfClient) getEventMessage(event map[string]interface{}) (pm *sarama.ProducerMessage, err error) {
value, err := json.Marshal(event)
if err != nil {
return
}
pm = &sarama.ProducerMessage{
Topic: kf.Topic,
Value: sarama.StringEncoder(string(value)),
}
return
}

@ -74,6 +74,9 @@ func startSendTasks() {
}
if Config.Kafka.Enabled {
go send2KafkaTask()
}
}
func Send2TsdbTask(Q *list.SafeListLimited, node, addr string, concurrent int) {
@ -495,3 +498,38 @@ func convert2OpenTsdbItem(d *dataobj.MetricValue) *dataobj.OpenTsdbItem {
t.Value = d.Value
return &t
}
func Push2KafkaSendQueue(items []*dataobj.MetricValue) {
for _, item := range items {
KafkaQueue <- convert2KafkaItem(item)
}
}
func convert2KafkaItem(d *dataobj.MetricValue) KafkaData {
m := make(KafkaData)
m["metric"] = d.Metric
m["value"] = d.Value
m["timestamp"] = d.Timestamp
m["value"] = d.Value
m["step"] = d.Step
m["endpoint"] = d.Endpoint
m["tags"] = d.Tags
return m
}
func send2KafkaTask() {
kf, err := NewKfClient(Config.Kafka)
if err != nil {
logger.Errorf("init kafka client fail: %v", err)
return
}
defer kf.Close()
for {
kafkaItem := <-KafkaQueue
stats.Counter.Set("points.out.kafka", 1)
err = kf.Send(kafkaItem)
if err != nil {
stats.Counter.Set("points.out.kafka.err", 1)
logger.Errorf("send %v to kafka %s fail: %v", kafkaItem, Config.Kafka.BrokersPeers, err)
}
}
}

@ -48,6 +48,18 @@ func PushData(c *gin.Context) {
backend.Push2JudgeSendQueue(metricValues)
}
if backend.Config.Influxdb.Enabled {
backend.Push2InfluxdbSendQueue(metricValues)
}
if backend.Config.OpenTsdb.Enabled {
backend.Push2OpenTsdbSendQueue(metricValues)
}
if backend.Config.Kafka.Enabled {
backend.Push2KafkaSendQueue(metricValues)
}
if msg != "" {
render.Message(c, msg)
return

@ -52,6 +52,9 @@ func (t *Transfer) Push(args []*dataobj.MetricValue, reply *dataobj.TransferResp
backend.Push2OpenTsdbSendQueue(items)
}
if backend.Config.Kafka.Enabled {
backend.Push2KafkaSendQueue(items)
}
if reply.Invalid == 0 {
reply.Msg = "ok"
}

@ -0,0 +1,27 @@
# Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
*.a
*.so
*.test
# Folders
_obj
_test
.vagrant
# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out
*.cgo1.go
*.cgo2.c
_cgo_defun.c
_cgo_gotypes.go
_cgo_export.*
_testmain.go
*.exe
coverage.txt
profile.out

@ -0,0 +1,74 @@
run:
timeout: 5m
deadline: 10m
linters-settings:
govet:
check-shadowing: false
golint:
min-confidence: 0
gocyclo:
min-complexity: 99
maligned:
suggest-new: true
dupl:
threshold: 100
goconst:
min-len: 2
min-occurrences: 3
misspell:
locale: US
goimports:
local-prefixes: github.com/Shopify/sarama
gocritic:
enabled-tags:
- diagnostic
- experimental
- opinionated
- performance
- style
disabled-checks:
- wrapperFunc
- ifElseChain
funlen:
lines: 300
statements: 300
linters:
disable-all: true
enable:
- bodyclose
- deadcode
- depguard
- dogsled
# - dupl
- errcheck
- funlen
# - gocritic
- gocyclo
- gofmt
- goimports
# - golint
- gosec
# - gosimple
- govet
# - ineffassign
- interfacer
# - misspell
# - nakedret
# - scopelint
# - staticcheck
- structcheck
# - stylecheck
- typecheck
- unconvert
- unused
- varcheck
- whitespace
# - goconst
# - gochecknoinits
issues:
exclude:
- consider giving a name to these results
- include an explanation for nolint directive

File diff suppressed because it is too large Load Diff

@ -0,0 +1,20 @@
Copyright (c) 2013 Shopify
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

@ -0,0 +1,27 @@
default: fmt get update test lint
GO := GO111MODULE=on GOPRIVATE=github.com/linkedin GOSUMDB=off go
GOBUILD := CGO_ENABLED=0 $(GO) build $(BUILD_FLAG)
GOTEST := $(GO) test -gcflags='-l' -p 3 -v -race -timeout 6m -coverprofile=profile.out -covermode=atomic
FILES := $(shell find . -name '*.go' -type f -not -name '*.pb.go' -not -name '*_generated.go' -not -name '*_test.go')
TESTS := $(shell find . -name '*.go' -type f -not -name '*.pb.go' -not -name '*_generated.go' -name '*_test.go')
get:
$(GO) get ./...
$(GO) mod verify
$(GO) mod tidy
update:
$(GO) get -u -v all
$(GO) mod verify
$(GO) mod tidy
fmt:
gofmt -s -l -w $(FILES) $(TESTS)
lint:
golangci-lint run
test:
$(GOTEST) ./...

@ -0,0 +1,36 @@
# sarama
[![GoDoc](https://godoc.org/github.com/Shopify/sarama?status.svg)](https://godoc.org/github.com/Shopify/sarama)
[![Build Status](https://travis-ci.org/Shopify/sarama.svg?branch=master)](https://travis-ci.org/Shopify/sarama)
[![Coverage](https://codecov.io/gh/Shopify/sarama/branch/master/graph/badge.svg)](https://codecov.io/gh/Shopify/sarama)
Sarama is an MIT-licensed Go client library for [Apache Kafka](https://kafka.apache.org/) version 0.8 (and later).
## Getting started
- API documentation and examples are available via [godoc](https://godoc.org/github.com/Shopify/sarama).
- Mocks for testing are available in the [mocks](./mocks) subpackage.
- The [examples](./examples) directory contains more elaborate example applications.
- The [tools](./tools) directory contains command line tools that can be useful for testing, diagnostics, and instrumentation.
You might also want to look at the [Frequently Asked Questions](https://github.com/Shopify/sarama/wiki/Frequently-Asked-Questions).
## Compatibility and API stability
Sarama provides a "2 releases + 2 months" compatibility guarantee: we support
the two latest stable releases of Kafka and Go, and we provide a two month
grace period for older releases. This means we currently officially support
Go 1.12 through 1.14, and Kafka 2.1 through 2.4, although older releases are
still likely to work.
Sarama follows semantic versioning and provides API stability via the gopkg.in service.
You can import a version with a guaranteed stable API via http://gopkg.in/Shopify/sarama.v1.
A changelog is available [here](CHANGELOG.md).
## Contributing
- Get started by checking our [contribution guidelines](https://github.com/Shopify/sarama/blob/master/.github/CONTRIBUTING.md).
- Read the [Sarama wiki](https://github.com/Shopify/sarama/wiki) for more technical and design details.
- The [Kafka Protocol Specification](https://cwiki.apache.org/confluence/display/KAFKA/A+Guide+To+The+Kafka+Protocol) contains a wealth of useful information.
- For more general issues, there is [a google group](https://groups.google.com/forum/#!forum/kafka-clients) for Kafka client developers.
- If you have any questions, just ask!

@ -0,0 +1,14 @@
# We have 5 * 192MB ZK processes and 5 * 320MB Kafka processes => 2560MB
MEMORY = 3072
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/bionic64"
config.vm.provision :shell, path: "vagrant/provision.sh"
config.vm.network "private_network", ip: "192.168.100.67"
config.vm.provider "virtualbox" do |v|
v.memory = MEMORY
end
end

@ -0,0 +1,138 @@
package sarama
//Resource holds information about acl resource type
type Resource struct {
ResourceType AclResourceType
ResourceName string
ResourcePatternType AclResourcePatternType
}
func (r *Resource) encode(pe packetEncoder, version int16) error {
pe.putInt8(int8(r.ResourceType))
if err := pe.putString(r.ResourceName); err != nil {
return err
}
if version == 1 {
if r.ResourcePatternType == AclPatternUnknown {
Logger.Print("Cannot encode an unknown resource pattern type, using Literal instead")
r.ResourcePatternType = AclPatternLiteral
}
pe.putInt8(int8(r.ResourcePatternType))
}
return nil
}
func (r *Resource) decode(pd packetDecoder, version int16) (err error) {
resourceType, err := pd.getInt8()
if err != nil {
return err
}
r.ResourceType = AclResourceType(resourceType)
if r.ResourceName, err = pd.getString(); err != nil {
return err
}
if version == 1 {
pattern, err := pd.getInt8()
if err != nil {
return err
}
r.ResourcePatternType = AclResourcePatternType(pattern)
}
return nil
}
//Acl holds information about acl type
type Acl struct {
Principal string
Host string
Operation AclOperation
PermissionType AclPermissionType
}
func (a *Acl) encode(pe packetEncoder) error {
if err := pe.putString(a.Principal); err != nil {
return err
}
if err := pe.putString(a.Host); err != nil {
return err
}
pe.putInt8(int8(a.Operation))
pe.putInt8(int8(a.PermissionType))
return nil
}
func (a *Acl) decode(pd packetDecoder, version int16) (err error) {
if a.Principal, err = pd.getString(); err != nil {
return err
}
if a.Host, err = pd.getString(); err != nil {
return err
}
operation, err := pd.getInt8()
if err != nil {
return err
}
a.Operation = AclOperation(operation)
permissionType, err := pd.getInt8()
if err != nil {
return err
}
a.PermissionType = AclPermissionType(permissionType)
return nil
}
//ResourceAcls is an acl resource type
type ResourceAcls struct {
Resource
Acls []*Acl
}
func (r *ResourceAcls) encode(pe packetEncoder, version int16) error {
if err := r.Resource.encode(pe, version); err != nil {
return err
}
if err := pe.putArrayLength(len(r.Acls)); err != nil {
return err
}
for _, acl := range r.Acls {
if err := acl.encode(pe); err != nil {
return err
}
}
return nil
}
func (r *ResourceAcls) decode(pd packetDecoder, version int16) error {
if err := r.Resource.decode(pd, version); err != nil {
return err
}
n, err := pd.getArrayLength()
if err != nil {
return err
}
r.Acls = make([]*Acl, n)
for i := 0; i < n; i++ {
r.Acls[i] = new(Acl)
if err := r.Acls[i].decode(pd, version); err != nil {
return err
}
}
return nil
}

@ -0,0 +1,89 @@
package sarama
//CreateAclsRequest is an acl creation request
type CreateAclsRequest struct {
Version int16
AclCreations []*AclCreation
}
func (c *CreateAclsRequest) encode(pe packetEncoder) error {
if err := pe.putArrayLength(len(c.AclCreations)); err != nil {
return err
}
for _, aclCreation := range c.AclCreations {
if err := aclCreation.encode(pe, c.Version); err != nil {
return err
}
}
return nil
}
func (c *CreateAclsRequest) decode(pd packetDecoder, version int16) (err error) {
c.Version = version
n, err := pd.getArrayLength()
if err != nil {
return err
}
c.AclCreations = make([]*AclCreation, n)
for i := 0; i < n; i++ {
c.AclCreations[i] = new(AclCreation)
if err := c.AclCreations[i].decode(pd, version); err != nil {
return err
}
}
return nil
}
func (c *CreateAclsRequest) key() int16 {
return 30
}
func (c *CreateAclsRequest) version() int16 {
return c.Version
}
func (c *CreateAclsRequest) headerVersion() int16 {
return 1
}
func (c *CreateAclsRequest) requiredVersion() KafkaVersion {
switch c.Version {
case 1:
return V2_0_0_0
default:
return V0_11_0_0
}
}
//AclCreation is a wrapper around Resource and Acl type
type AclCreation struct {
Resource
Acl
}
func (a *AclCreation) encode(pe packetEncoder, version int16) error {
if err := a.Resource.encode(pe, version); err != nil {
return err
}
if err := a.Acl.encode(pe); err != nil {
return err
}
return nil
}
func (a *AclCreation) decode(pd packetDecoder, version int16) (err error) {
if err := a.Resource.decode(pd, version); err != nil {
return err
}
if err := a.Acl.decode(pd, version); err != nil {
return err
}
return nil
}

@ -0,0 +1,94 @@
package sarama
import "time"
//CreateAclsResponse is a an acl response creation type
type CreateAclsResponse struct {
ThrottleTime time.Duration
AclCreationResponses []*AclCreationResponse
}
func (c *CreateAclsResponse) encode(pe packetEncoder) error {
pe.putInt32(int32(c.ThrottleTime / time.Millisecond))
if err := pe.putArrayLength(len(c.AclCreationResponses)); err != nil {
return err
}
for _, aclCreationResponse := range c.AclCreationResponses {
if err := aclCreationResponse.encode(pe); err != nil {
return err
}
}
return nil
}
func (c *CreateAclsResponse) decode(pd packetDecoder, version int16) (err error) {
throttleTime, err := pd.getInt32()
if err != nil {
return err
}
c.ThrottleTime = time.Duration(throttleTime) * time.Millisecond
n, err := pd.getArrayLength()
if err != nil {
return err
}
c.AclCreationResponses = make([]*AclCreationResponse, n)
for i := 0; i < n; i++ {
c.AclCreationResponses[i] = new(AclCreationResponse)
if err := c.AclCreationResponses[i].decode(pd, version); err != nil {
return err
}
}
return nil
}
func (c *CreateAclsResponse) key() int16 {
return 30
}
func (c *CreateAclsResponse) version() int16 {
return 0
}
func (c *CreateAclsResponse) headerVersion() int16 {
return 0
}
func (c *CreateAclsResponse) requiredVersion() KafkaVersion {
return V0_11_0_0
}
//AclCreationResponse is an acl creation response type
type AclCreationResponse struct {
Err KError
ErrMsg *string
}
func (a *AclCreationResponse) encode(pe packetEncoder) error {
pe.putInt16(int16(a.Err))
if err := pe.putNullableString(a.ErrMsg); err != nil {
return err
}
return nil
}
func (a *AclCreationResponse) decode(pd packetDecoder, version int16) (err error) {
kerr, err := pd.getInt16()
if err != nil {
return err
}
a.Err = KError(kerr)
if a.ErrMsg, err = pd.getNullableString(); err != nil {
return err
}
return nil
}

@ -0,0 +1,62 @@
package sarama
//DeleteAclsRequest is a delete acl request
type DeleteAclsRequest struct {
Version int
Filters []*AclFilter
}
func (d *DeleteAclsRequest) encode(pe packetEncoder) error {
if err := pe.putArrayLength(len(d.Filters)); err != nil {
return err
}
for _, filter := range d.Filters {
filter.Version = d.Version
if err := filter.encode(pe); err != nil {
return err
}
}
return nil
}
func (d *DeleteAclsRequest) decode(pd packetDecoder, version int16) (err error) {
d.Version = int(version)
n, err := pd.getArrayLength()
if err != nil {
return err
}
d.Filters = make([]*AclFilter, n)
for i := 0; i < n; i++ {
d.Filters[i] = new(AclFilter)
d.Filters[i].Version = int(version)
if err := d.Filters[i].decode(pd, version); err != nil {
return err
}
}
return nil
}
func (d *DeleteAclsRequest) key() int16 {
return 31
}
func (d *DeleteAclsRequest) version() int16 {
return int16(d.Version)
}
func (c *DeleteAclsRequest) headerVersion() int16 {
return 1
}
func (d *DeleteAclsRequest) requiredVersion() KafkaVersion {
switch d.Version {
case 1:
return V2_0_0_0
default:
return V0_11_0_0
}
}

@ -0,0 +1,163 @@
package sarama
import "time"
//DeleteAclsResponse is a delete acl response
type DeleteAclsResponse struct {
Version int16
ThrottleTime time.Duration
FilterResponses []*FilterResponse
}
func (d *DeleteAclsResponse) encode(pe packetEncoder) error {
pe.putInt32(int32(d.ThrottleTime / time.Millisecond))
if err := pe.putArrayLength(len(d.FilterResponses)); err != nil {
return err
}
for _, filterResponse := range d.FilterResponses {
if err := filterResponse.encode(pe, d.Version); err != nil {
return err
}
}
return nil
}
func (d *DeleteAclsResponse) decode(pd packetDecoder, version int16) (err error) {
throttleTime, err := pd.getInt32()
if err != nil {
return err
}
d.ThrottleTime = time.Duration(throttleTime) * time.Millisecond
n, err := pd.getArrayLength()
if err != nil {
return err
}
d.FilterResponses = make([]*FilterResponse, n)
for i := 0; i < n; i++ {
d.FilterResponses[i] = new(FilterResponse)
if err := d.FilterResponses[i].decode(pd, version); err != nil {
return err
}
}
return nil
}
func (d *DeleteAclsResponse) key() int16 {
return 31
}
func (d *DeleteAclsResponse) version() int16 {
return d.Version
}
func (d *DeleteAclsResponse) headerVersion() int16 {
return 0
}
func (d *DeleteAclsResponse) requiredVersion() KafkaVersion {
return V0_11_0_0
}
//FilterResponse is a filter response type
type FilterResponse struct {
Err KError
ErrMsg *string
MatchingAcls []*MatchingAcl
}
func (f *FilterResponse) encode(pe packetEncoder, version int16) error {
pe.putInt16(int16(f.Err))
if err := pe.putNullableString(f.ErrMsg); err != nil {
return err
}
if err := pe.putArrayLength(len(f.MatchingAcls)); err != nil {
return err
}
for _, matchingAcl := range f.MatchingAcls {
if err := matchingAcl.encode(pe, version); err != nil {
return err
}
}
return nil
}
func (f *FilterResponse) decode(pd packetDecoder, version int16) (err error) {
kerr, err := pd.getInt16()
if err != nil {
return err
}
f.Err = KError(kerr)
if f.ErrMsg, err = pd.getNullableString(); err != nil {
return err
}
n, err := pd.getArrayLength()
if err != nil {
return err
}
f.MatchingAcls = make([]*MatchingAcl, n)
for i := 0; i < n; i++ {
f.MatchingAcls[i] = new(MatchingAcl)
if err := f.MatchingAcls[i].decode(pd, version); err != nil {
return err
}
}
return nil
}
//MatchingAcl is a matching acl type
type MatchingAcl struct {
Err KError
ErrMsg *string
Resource
Acl
}
func (m *MatchingAcl) encode(pe packetEncoder, version int16) error {
pe.putInt16(int16(m.Err))
if err := pe.putNullableString(m.ErrMsg); err != nil {
return err
}
if err := m.Resource.encode(pe, version); err != nil {
return err
}
if err := m.Acl.encode(pe); err != nil {
return err
}
return nil
}
func (m *MatchingAcl) decode(pd packetDecoder, version int16) (err error) {
kerr, err := pd.getInt16()
if err != nil {
return err
}
m.Err = KError(kerr)
if m.ErrMsg, err = pd.getNullableString(); err != nil {
return err
}
if err := m.Resource.decode(pd, version); err != nil {
return err
}
if err := m.Acl.decode(pd, version); err != nil {
return err
}
return nil
}

@ -0,0 +1,39 @@
package sarama
//DescribeAclsRequest is a secribe acl request type
type DescribeAclsRequest struct {
Version int
AclFilter
}
func (d *DescribeAclsRequest) encode(pe packetEncoder) error {
d.AclFilter.Version = d.Version
return d.AclFilter.encode(pe)
}
func (d *DescribeAclsRequest) decode(pd packetDecoder, version int16) (err error) {
d.Version = int(version)
d.AclFilter.Version = int(version)
return d.AclFilter.decode(pd, version)
}
func (d *DescribeAclsRequest) key() int16 {
return 29
}
func (d *DescribeAclsRequest) version() int16 {
return int16(d.Version)
}
func (d *DescribeAclsRequest) headerVersion() int16 {
return 1
}
func (d *DescribeAclsRequest) requiredVersion() KafkaVersion {
switch d.Version {
case 1:
return V2_0_0_0
default:
return V0_11_0_0
}
}

@ -0,0 +1,91 @@
package sarama
import "time"
//DescribeAclsResponse is a describe acl response type
type DescribeAclsResponse struct {
Version int16
ThrottleTime time.Duration
Err KError
ErrMsg *string
ResourceAcls []*ResourceAcls
}
func (d *DescribeAclsResponse) encode(pe packetEncoder) error {
pe.putInt32(int32(d.ThrottleTime / time.Millisecond))
pe.putInt16(int16(d.Err))
if err := pe.putNullableString(d.ErrMsg); err != nil {
return err
}
if err := pe.putArrayLength(len(d.ResourceAcls)); err != nil {
return err
}
for _, resourceAcl := range d.ResourceAcls {
if err := resourceAcl.encode(pe, d.Version); err != nil {
return err
}
}
return nil
}
func (d *DescribeAclsResponse) decode(pd packetDecoder, version int16) (err error) {
throttleTime, err := pd.getInt32()
if err != nil {
return err
}
d.ThrottleTime = time.Duration(throttleTime) * time.Millisecond
kerr, err := pd.getInt16()
if err != nil {
return err
}
d.Err = KError(kerr)
errmsg, err := pd.getString()
if err != nil {
return err
}
if errmsg != "" {
d.ErrMsg = &errmsg
}
n, err := pd.getArrayLength()
if err != nil {
return err
}
d.ResourceAcls = make([]*ResourceAcls, n)
for i := 0; i < n; i++ {
d.ResourceAcls[i] = new(ResourceAcls)
if err := d.ResourceAcls[i].decode(pd, version); err != nil {
return err
}
}
return nil
}
func (d *DescribeAclsResponse) key() int16 {
return 29
}
func (d *DescribeAclsResponse) version() int16 {
return d.Version
}
func (d *DescribeAclsResponse) headerVersion() int16 {
return 0
}
func (d *DescribeAclsResponse) requiredVersion() KafkaVersion {
switch d.Version {
case 1:
return V2_0_0_0
default:
return V0_11_0_0
}
}

@ -0,0 +1,78 @@
package sarama
type AclFilter struct {
Version int
ResourceType AclResourceType
ResourceName *string
ResourcePatternTypeFilter AclResourcePatternType
Principal *string
Host *string
Operation AclOperation
PermissionType AclPermissionType
}
func (a *AclFilter) encode(pe packetEncoder) error {
pe.putInt8(int8(a.ResourceType))
if err := pe.putNullableString(a.ResourceName); err != nil {
return err
}
if a.Version == 1 {
pe.putInt8(int8(a.ResourcePatternTypeFilter))
}
if err := pe.putNullableString(a.Principal); err != nil {
return err
}
if err := pe.putNullableString(a.Host); err != nil {
return err
}
pe.putInt8(int8(a.Operation))
pe.putInt8(int8(a.PermissionType))
return nil
}
func (a *AclFilter) decode(pd packetDecoder, version int16) (err error) {
resourceType, err := pd.getInt8()
if err != nil {
return err
}
a.ResourceType = AclResourceType(resourceType)
if a.ResourceName, err = pd.getNullableString(); err != nil {
return err
}
if a.Version == 1 {
pattern, err := pd.getInt8()
if err != nil {
return err
}
a.ResourcePatternTypeFilter = AclResourcePatternType(pattern)
}
if a.Principal, err = pd.getNullableString(); err != nil {
return err
}
if a.Host, err = pd.getNullableString(); err != nil {
return err
}
operation, err := pd.getInt8()
if err != nil {
return err
}
a.Operation = AclOperation(operation)
permissionType, err := pd.getInt8()
if err != nil {
return err
}
a.PermissionType = AclPermissionType(permissionType)
return nil
}

@ -0,0 +1,55 @@
package sarama
type (
AclOperation int
AclPermissionType int
AclResourceType int
AclResourcePatternType int
)
// ref: https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/acl/AclOperation.java
const (
AclOperationUnknown AclOperation = iota
AclOperationAny
AclOperationAll
AclOperationRead
AclOperationWrite
AclOperationCreate
AclOperationDelete
AclOperationAlter
AclOperationDescribe
AclOperationClusterAction
AclOperationDescribeConfigs
AclOperationAlterConfigs
AclOperationIdempotentWrite
)
// ref: https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/acl/AclPermissionType.java
const (
AclPermissionUnknown AclPermissionType = iota
AclPermissionAny
AclPermissionDeny
AclPermissionAllow
)
// ref: https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/resource/ResourceType.java
const (
AclResourceUnknown AclResourceType = iota
AclResourceAny
AclResourceTopic
AclResourceGroup
AclResourceCluster
AclResourceTransactionalID
)
// ref: https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/resource/PatternType.java
const (
AclPatternUnknown AclResourcePatternType = iota
AclPatternAny
AclPatternMatch
AclPatternLiteral
AclPatternPrefixed
)

@ -0,0 +1,57 @@
package sarama
//AddOffsetsToTxnRequest adds offsets to a transaction request
type AddOffsetsToTxnRequest struct {
TransactionalID string
ProducerID int64
ProducerEpoch int16
GroupID string
}
func (a *AddOffsetsToTxnRequest) encode(pe packetEncoder) error {
if err := pe.putString(a.TransactionalID); err != nil {
return err
}
pe.putInt64(a.ProducerID)
pe.putInt16(a.ProducerEpoch)
if err := pe.putString(a.GroupID); err != nil {
return err
}
return nil
}
func (a *AddOffsetsToTxnRequest) decode(pd packetDecoder, version int16) (err error) {
if a.TransactionalID, err = pd.getString(); err != nil {
return err
}
if a.ProducerID, err = pd.getInt64(); err != nil {
return err
}
if a.ProducerEpoch, err = pd.getInt16(); err != nil {
return err
}
if a.GroupID, err = pd.getString(); err != nil {
return err
}
return nil
}
func (a *AddOffsetsToTxnRequest) key() int16 {
return 25
}
func (a *AddOffsetsToTxnRequest) version() int16 {
return 0
}
func (a *AddOffsetsToTxnRequest) headerVersion() int16 {
return 1
}
func (a *AddOffsetsToTxnRequest) requiredVersion() KafkaVersion {
return V0_11_0_0
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save