Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge benmanns/goworker#85 #89

Closed
wants to merge 32 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
c41c8e2
CHANGELOG: Stareted the CHANGELOG
xescugc Jun 7, 2021
34db7bf
Merge pull request #1 from cycloidio/fg-changelog
xescugc Jun 7, 2021
aa76b65
goworker: replace redigo with go-redis
Dec 21, 2020
95f69c9
modules: tidy
Dec 21, 2020
3bb4981
CHANGELOG: Add entry for Redis client migration
xescugc Jun 7, 2021
859069f
Merge pull request #2 from cycloidio/redigo-to-goredis
xescugc Jun 7, 2021
966f648
worker: Add logic for heatbeat and prune
xescugc Jun 4, 2021
3869042
Merge pull request #3 from cycloidio/fg-5-go-redis
xescugc Jun 8, 2021
4076eb1
CHANGELOG: Bump version 0.1.5
xescugc Jun 8, 2021
1c4403a
Merge pull request #1 from cycloidio/fg-0.1.5
xescugc Jun 8, 2021
645bea9
mod: Update the module definition
xescugc Jun 8, 2021
6103971
Merge pull request #2 from cycloidio/fg-mod
xescugc Jun 8, 2021
e9f34a4
CHANGELOG: Quick release to change the module definition
xescugc Jun 8, 2021
012fe19
Merge pull request #3 from cycloidio/fg-0.1.6
xescugc Jun 8, 2021
c6ac9a9
worker: Fix issue with go-redis syntax
xescugc Jun 9, 2021
8930375
Merge pull request #4 from cycloidio/fg-fix-prune
xescugc Jun 9, 2021
1672e6d
CHANGELOG: Bump release
xescugc Jun 9, 2021
d4866ce
Merge pull request #5 from cycloidio/fg-0.1.7
xescugc Jun 9, 2021
6739e0f
goworker: Added a function 'Closed()' that will return when the proce…
xescugc Jun 11, 2021
f4497af
Merge pull request #6 from cycloidio/fg-closed
xescugc Jun 11, 2021
2959ab8
CHANGELOG: Bumped to 0.1.8
xescugc Jun 11, 2021
7835396
Merge pull request #7 from cycloidio/fg-bump-0.1.8
xescugc Jun 11, 2021
f213a0e
goworker: Added 'MaxAgeRetries' option to the Goworker
xescugc Jul 1, 2021
46e3911
Merge pull request #9 from cycloidio/fg-retries-clean
xescugc Jul 19, 2021
92b4071
worker: New option ForcePrune to clean workers not on the heartbeat
xescugc Jun 30, 2021
df57256
Merge pull request #8 from cycloidio/fg-new-flags
xescugc Jul 30, 2021
bfc257d
CHANGELOG: Bump version
xescugc Jul 30, 2021
1604a9b
Merge pull request #10 from cycloidio/fg-0.1.9
xescugc Jul 30, 2021
d17932c
goworker: Fixed null pointer exception when running prune
xescugc Aug 26, 2021
b5b774a
Merge pull request #11 from cycloidio/fg-fix-prune
xescugc Aug 26, 2021
1c672b4
chore: usual cleanup after fork
skaurus Jul 25, 2022
cc3b4a6
chore: go mod tidy
skaurus Jul 26, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
*.a
*.so

# Folders
_obj
_test
.idea

# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out

*.cgo1.go
*.cgo2.c
_cgo_defun.c
_cgo_gotypes.go
_cgo_export.*

_testmain.go

*.exe

.DS_Store
pkg/
src/
12 changes: 12 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
sudo: false

language: go

go:
- 1.17
- 1.18
- tip

matrix:
allow_failures:
- go: tip
54 changes: 54 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
## [Unreleased]

## [0.1.10] _2021-08-26_

### Fixed

- Nil pointer fixed when executing the workers
([PR #11](https://github.com/cycloidio/goworker/pull/11))

## [0.1.9] _2021-07-30_

### Added

- Flag `-max-age-retries` to remove retried failed jobs after that duration
([PR #9](https://github.com/cycloidio/goworker/pull/9))
- New flag `-force-prune` to remove workers not on the heartbeat list
([PR #8](https://github.com/cycloidio/goworker/pull/8))

## [0.1.8] _2021-06-11_

### Added

- Closed function to be able to wait for the workers to fully finish
([PR #6](https://github.com/cycloidio/goworker/pull/6))

## [0.1.7] _2021-06-09_

### Fixed

- Solved error when trying to prune workers with `go-redis`
([PR #4](https://github.com/cycloidio/goworker/pull/4))

## [0.1.6] _2021-06-08_

### Changed

- Change the module definition from `github.com/benmanns/goworker` to `github.com/cycloidio/goworker`
([PR #3](https://github.com/cycloidio/goworker/pull/3))

## [0.1.5] _2021-06-08_

### Added

- Added heartbeat and prune functions to clean stuck workers
([Issue benmanns/goworker#65](https://github.com/benmanns/goworker/issues/65))

### Changed

- Moved from `redigo` to `go-redis`
([Issue benmanns/goworker#69](https://github.com/benmanns/goworker/issues/69))

## [0.1.4] _2021-06-07_

Fork from https://github.com/benmanns/goworker from master beeing https://github.com/benmanns/goworker/commit/d28a4f34a4d183f3ea2e51b4b8268807e0984942
19 changes: 12 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
# goworker

![Build](https://github.com/benmanns/goworker/workflows/Go/badge.svg)
![Build](https://github.com/skaurus/goworker/workflows/Go/badge.svg)
[![GoDoc](https://godoc.org/github.com/benmanns/goworker?status.svg)](https://godoc.org/github.com/benmanns/goworker)
[![Build Status](https://app.travis-ci.com/skaurus/goworker.svg?branch=master)](https://app.travis-ci.com/skaurus/goworker)
[![Go Report Card](https://goreportcard.com/badge/github.com/skaurus/goworker)](https://goreportcard.com/report/github.com/skaurus/goworker)

goworker is a Resque-compatible, Go-based background worker. It allows you to push jobs into a queue using an expressive language like Ruby while harnessing the efficiency and concurrency of Go to minimize job latency and cost.

Expand All @@ -12,13 +14,13 @@ goworker workers can run alongside Ruby Resque clients so that you can keep all
To install goworker, use

```sh
go get github.com/benmanns/goworker
go get github.com/skaurus/goworker
```

to install the package, and then from your worker

```go
import "github.com/benmanns/goworker"
import "github.com/skaurus/goworker"
```

## Getting Started
Expand All @@ -42,7 +44,8 @@ package main

import (
"fmt"
"github.com/benmanns/goworker"

"github.com/skaurus/goworker"
)

func myFunc(queue string, args ...interface{}) error {
Expand All @@ -68,7 +71,8 @@ package main

import (
"fmt"
"github.com/benmanns/goworker"

"github.com/skaurus/goworker"
)

func newMyFunc(uri string) (func(queue string, args ...interface{}) error) {
Expand Down Expand Up @@ -97,7 +101,8 @@ package main

import (
"fmt"
"github.com/benmanns/goworker"

"github.com/skaurus/goworker"
)

func myFunc(queue string, args ...interface{}) error {
Expand Down Expand Up @@ -221,7 +226,7 @@ as a JSON object with keys `queue`, `run_at`, and `payload`, but the process is

## Contributing

1. [Fork it](https://github.com/benmanns/goworker/fork)
1. [Fork it](https://github.com/skaurus/goworker/fork)
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
Expand Down
11 changes: 11 additions & 0 deletions dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates

version: 2
updates:
- package-ecosystem: "gomod" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "weekly"
4 changes: 2 additions & 2 deletions doc.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
//
// import (
// "fmt"
// "github.com/benmanns/goworker"
// "github.com/skaurus/goworker"
// )
//
// func myFunc(queue string, args ...interface{}) error {
Expand All @@ -48,7 +48,7 @@
//
// import (
// "fmt"
// "github.com/benmanns/goworker"
// "github.com/skaurus/goworker"
// )
//
// func newMyFunc(uri string) (func(queue string, args ...interface{}) error) {
Expand Down
39 changes: 30 additions & 9 deletions failure.go
Original file line number Diff line number Diff line change
@@ -1,15 +1,36 @@
package goworker

import (
"time"
import "time"

const (
retriedAtLayout = "2006/01/02 15:04:05"
failedAtLayout = "2006/01/02 15:04:05 -07:00"
)

type failure struct {
FailedAt time.Time `json:"failed_at"`
Payload Payload `json:"payload"`
Exception string `json:"exception"`
Error string `json:"error"`
Backtrace []string `json:"backtrace"`
Worker *worker `json:"worker"`
Queue string `json:"queue"`
FailedAt string `json:"failed_at"`
Payload Payload `json:"payload"`
Exception string `json:"exception"`
Error string `json:"error"`
Backtrace []string `json:"backtrace"`
Worker *worker `json:"worker"`
Queue string `json:"queue"`
RetriedAt string `json:"retried_at"`
}

// GetRetriedAtTime returns the RetriedAt as a time.Time
// converting it from the string. If it's not set it'll return
// an empty time.Time
func (f *failure) GetRetriedAtTime() (time.Time, error) {
if f.RetriedAt == "" {
return time.Time{}, nil
}

return time.Parse(retriedAtLayout, f.RetriedAt)
}

// SetFailedAt will set the FailedAt value with t with
// the right format
func (f *failure) SetFailedAt(t time.Time) {
f.FailedAt = t.Format(failedAtLayout)
}
18 changes: 18 additions & 0 deletions flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,20 @@
// encoded in scientific notation, losing
// pecision. This will default to true soon.
//
// -max-age-retries=1s
// — This flag will enable a feature to automatically
// clean the retried failed jobs older than the
// specified max age/duration (time.Duration).
// By default is disabled if enabled it'll
// check every 1m for old retries.
// -force-prune=false
// — Will prune all workers that are not inside
// of the heartbeat set, not just the expired ones.
// This option is not compatible with older
// versions of Resque (any port) as older versions
// may not have heartbeat so this would delete
// real working workers.
//
// You can also configure your own flags for use
// within your workers. Be sure to set them
// before calling goworker.Main(). It is okay to
Expand Down Expand Up @@ -128,6 +142,10 @@ func init() {
flag.BoolVar(&workerSettings.UseNumber, "use-number", false, "use json.Number instead of float64 when decoding numbers in JSON. will default to true soon")

flag.BoolVar(&workerSettings.SkipTLSVerify, "insecure-tls", false, "skip TLS validation")

flag.DurationVar(&workerSettings.MaxAgeRetries, "max-age-retries", 0, "max age of the retried failed jobs before cleaning them")

flag.BoolVar(&workerSettings.ForcePrune, "force-prune", false, "Forced the deletion of workers that are not present on the heartbeat set. WARNING: This is not compatible with older versions of Resque (any port) that do not have heartbeat as it'll then delete working workers.")
}

func flags() error {
Expand Down
11 changes: 5 additions & 6 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
module github.com/benmanns/goworker
module github.com/skaurus/goworker

go 1.14
go 1.18

require (
github.com/cihub/seelog v0.0.0-20140730094913-72ae425987bc
github.com/gomodule/redigo v1.8.2
golang.org/x/net v0.0.0-20200822124328-c89045814202
vitess.io/vitess v3.0.0-rc.3.0.20181212200900-e2c5239f54d1+incompatible
github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575
github.com/go-redis/redis/v7 v7.4.0
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b
)
59 changes: 38 additions & 21 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,28 +1,45 @@
github.com/cihub/seelog v0.0.0-20140730094913-72ae425987bc h1:HSZdsOzV0MO6cEcf31hZoT6KJGI806Z523bkYPDwkQs=
github.com/cihub/seelog v0.0.0-20140730094913-72ae425987bc/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/gomodule/redigo v1.8.2 h1:H5XSIre1MB5NbPYFp+i1NBbb5qN1W8Y8YAQoAYbkm8k=
github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 h1:kHaBemcxl8o/pQ5VM1c8PVE1PubbNx3mjUr09OqWGCs=
github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/go-redis/redis/v7 v7.4.0 h1:7obg6wUoj05T0EpY0o8B59S9w5yeMWql7sw2kwNW1x4=
github.com/go-redis/redis/v7 v7.4.0/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo=
github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME=
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b h1:uwuIcX0g4Yl1NC5XAz37xsr2lTtcqevgzYNVt49waME=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
vitess.io/vitess v3.0.0-rc.3.0.20181212200900-e2c5239f54d1+incompatible h1:TCG4ZGCiFNr7XGP8nhT++5Wwi1jRC6Xk9IPxZiBQXB0=
vitess.io/vitess v3.0.0-rc.3.0.20181212200900-e2c5239f54d1+incompatible/go.mod h1:h4qvkyNYTOC0xI+vcidSWoka0gQAZc9ZPHbkHo48gP0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/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=
Loading