mirror of
https://github.com/Fishwaldo/go-taskmanager.git
synced 2025-03-15 19:31:40 +00:00
Port to https://github.com/go-logr/logr
This commit is contained in:
parent
1ed25dc708
commit
dbcaba8b40
16 changed files with 124 additions and 522 deletions
|
@ -3,7 +3,6 @@ package main
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
_ "net/http/pprof"
|
_ "net/http/pprof"
|
||||||
"os"
|
"os"
|
||||||
|
@ -13,12 +12,12 @@ import (
|
||||||
|
|
||||||
"github.com/Fishwaldo/go-taskmanager"
|
"github.com/Fishwaldo/go-taskmanager"
|
||||||
"github.com/Fishwaldo/go-taskmanager/job"
|
"github.com/Fishwaldo/go-taskmanager/job"
|
||||||
logruslog "github.com/Fishwaldo/go-taskmanager/loggers/logrus"
|
|
||||||
prometheusConfig "github.com/Fishwaldo/go-taskmanager/metrics/prometheus"
|
prometheusConfig "github.com/Fishwaldo/go-taskmanager/metrics/prometheus"
|
||||||
executionmiddleware "github.com/Fishwaldo/go-taskmanager/middleware/executation"
|
executionmiddleware "github.com/Fishwaldo/go-taskmanager/middleware/executation"
|
||||||
retrymiddleware "github.com/Fishwaldo/go-taskmanager/middleware/retry"
|
retrymiddleware "github.com/Fishwaldo/go-taskmanager/middleware/retry"
|
||||||
|
|
||||||
//"github.com/armon/go-metrics"
|
"github.com/bombsimon/logrusr/v2"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/armon/go-metrics"
|
"github.com/armon/go-metrics"
|
||||||
"github.com/armon/go-metrics/prometheus"
|
"github.com/armon/go-metrics/prometheus"
|
||||||
prom "github.com/prometheus/client_golang/prometheus"
|
prom "github.com/prometheus/client_golang/prometheus"
|
||||||
|
@ -26,6 +25,9 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
logrusLog := logrus.New()
|
||||||
|
log := logrusr.New(logrusLog)
|
||||||
|
|
||||||
cfg := prometheus.PrometheusOpts{
|
cfg := prometheus.PrometheusOpts{
|
||||||
GaugeDefinitions: prometheusConfig.GetPrometicsGaugeConfig(),
|
GaugeDefinitions: prometheusConfig.GetPrometicsGaugeConfig(),
|
||||||
CounterDefinitions: prometheusConfig.GetPrometicsCounterConfig(),
|
CounterDefinitions: prometheusConfig.GetPrometicsCounterConfig(),
|
||||||
|
@ -34,7 +36,7 @@ func main() {
|
||||||
|
|
||||||
sink, err := prometheus.NewPrometheusSinkFrom(cfg)
|
sink, err := prometheus.NewPrometheusSinkFrom(cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Cant Create Prometheus Sink")
|
log.Error(err, "Cant Create Prometheus Sink")
|
||||||
}
|
}
|
||||||
defer prom.Unregister(sink)
|
defer prom.Unregister(sink)
|
||||||
|
|
||||||
|
@ -42,7 +44,7 @@ func main() {
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
http.Handle("/metrics", promhttp.Handler())
|
http.Handle("/metrics", promhttp.Handler())
|
||||||
log.Println(http.ListenAndServe("localhost:6060", nil))
|
log.Info(http.ListenAndServe("localhost:6060", nil).Error())
|
||||||
}()
|
}()
|
||||||
|
|
||||||
exbomw := retrymiddleware.NewDefaultRetryExponentialBackoff()
|
exbomw := retrymiddleware.NewDefaultRetryExponentialBackoff()
|
||||||
|
@ -56,7 +58,7 @@ func main() {
|
||||||
job1 := func(seconds time.Duration) func(context.Context) {
|
job1 := func(seconds time.Duration) func(context.Context) {
|
||||||
return func(ctx context.Context) {
|
return func(ctx context.Context) {
|
||||||
jobrunner, _ := ctx.Value(job.JobCtxValue{}).(*job.Job)
|
jobrunner, _ := ctx.Value(job.JobCtxValue{}).(*job.Job)
|
||||||
log.Println("Job ", jobrunner.ID(), " Duration: ", seconds*time.Second, "\t Doing some work...")
|
log.Info("Job Running", "Job", jobrunner.ID(), "Duration", seconds*time.Second)
|
||||||
if thmw.IsHaveTag("Hello") {
|
if thmw.IsHaveTag("Hello") {
|
||||||
thmw.DelHaveTags("Hello")
|
thmw.DelHaveTags("Hello")
|
||||||
} else {
|
} else {
|
||||||
|
@ -64,12 +66,12 @@ func main() {
|
||||||
}
|
}
|
||||||
select {
|
select {
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
log.Println("Job ", jobrunner.ID(), " Context Cancelled Job")
|
log.Info("Job Context Cancelled Job", "jobid", jobrunner.ID())
|
||||||
case <-time.After(time.Second * seconds):
|
case <-time.After(time.Second * seconds):
|
||||||
log.Println("Job ", jobrunner.ID(), " Work Done")
|
log.Info("Job Work Done", "jobid", jobrunner.ID())
|
||||||
}
|
}
|
||||||
//log.Panic("Job ", jobrunner.ID(), "Pannic Test")
|
//log.Panic("Job ", jobrunner.ID(), "Pannic Test")
|
||||||
log.Println("Job ", jobrunner.ID(), "Duration: ", seconds*time.Second, "\t Finished Work.")
|
log.Info("Job Finished" , "jobid", jobrunner.ID(), "duration", seconds*time.Second)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,9 +80,9 @@ func main() {
|
||||||
jobrunner, _ := ctx.Value(job.JobCtxValue{}).(*job.Job)
|
jobrunner, _ := ctx.Value(job.JobCtxValue{}).(*job.Job)
|
||||||
select {
|
select {
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
log.Println("NeedTagsJob ", jobrunner.ID(), " Context Cancelled Job")
|
log.Info("NeedTagsJob Context Cancelled Job", "jobid", jobrunner.ID())
|
||||||
default:
|
default:
|
||||||
log.Println("NeedTagsJob ", jobrunner.ID(), "Is Running")
|
log.Info("NeedTagsJob Is Running", "jobid", jobrunner.ID())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -105,14 +107,10 @@ func main() {
|
||||||
panic(fmt.Sprintf("invalid delay: %s", err.Error()))
|
panic(fmt.Sprintf("invalid delay: %s", err.Error()))
|
||||||
}
|
}
|
||||||
|
|
||||||
// logger := sched.DefaultLogger()
|
|
||||||
// logger.SetLevel(sched.LOG_TRACE)
|
|
||||||
|
|
||||||
logger := logruslog.LogrusDefaultLogger()
|
|
||||||
|
|
||||||
// Create Schedule
|
// Create Schedule
|
||||||
scheduler := taskmanager.NewScheduler(
|
scheduler := taskmanager.NewScheduler(
|
||||||
taskmanager.WithLogger(logger),
|
taskmanager.WithLogger(log.WithName("scheduler")),
|
||||||
)
|
)
|
||||||
|
|
||||||
//ctx1, cancel1 := context.WithCancel(context.Background())
|
//ctx1, cancel1 := context.WithCancel(context.Background())
|
||||||
|
|
17
go.mod
17
go.mod
|
@ -4,21 +4,16 @@ go 1.13
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/armon/go-metrics v0.3.9
|
github.com/armon/go-metrics v0.3.9
|
||||||
|
github.com/bombsimon/logrusr/v2 v2.0.1
|
||||||
github.com/cenkalti/backoff/v4 v4.1.0
|
github.com/cenkalti/backoff/v4 v4.1.0
|
||||||
|
github.com/go-logr/logr v1.2.3
|
||||||
|
github.com/go-logr/stdr v1.2.2
|
||||||
github.com/golang/protobuf v1.5.2 // indirect
|
github.com/golang/protobuf v1.5.2 // indirect
|
||||||
github.com/google/uuid v1.2.0
|
github.com/google/uuid v1.2.0
|
||||||
github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75
|
github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75
|
||||||
github.com/m3db/prometheus_client_golang v0.8.1 // indirect
|
|
||||||
github.com/m3db/prometheus_client_model v0.1.0 // indirect
|
|
||||||
github.com/m3db/prometheus_common v0.1.0 // indirect
|
|
||||||
github.com/m3db/prometheus_procfs v0.8.1 // indirect
|
|
||||||
github.com/prometheus/client_golang v1.4.0
|
github.com/prometheus/client_golang v1.4.0
|
||||||
github.com/sasha-s/go-deadlock v0.3.1 // indirect
|
github.com/sasha-s/go-deadlock v0.3.1
|
||||||
github.com/sirupsen/logrus v1.8.1
|
github.com/sirupsen/logrus v1.8.1
|
||||||
github.com/stretchr/testify v1.5.1
|
github.com/stretchr/testify v1.7.0
|
||||||
github.com/uber-go/tally v3.3.17+incompatible
|
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
|
||||||
go.uber.org/zap v1.16.0
|
|
||||||
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5 // indirect
|
|
||||||
golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4 // indirect
|
|
||||||
golang.org/x/tools v0.1.0 // indirect
|
|
||||||
)
|
)
|
||||||
|
|
95
go.sum
95
go.sum
|
@ -1,11 +1,7 @@
|
||||||
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
|
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
|
||||||
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
|
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
|
||||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||||
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM=
|
|
||||||
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||||
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4 h1:Hs82Z41s6SdL1CELW+XaDYmOH4hkBN4/N9og/AsOv7E=
|
|
||||||
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||||
github.com/armon/go-metrics v0.3.9 h1:O2sNqxBdvq8Eq5xmzljcYzAORli6RWCvEym4cJf9m18=
|
github.com/armon/go-metrics v0.3.9 h1:O2sNqxBdvq8Eq5xmzljcYzAORli6RWCvEym4cJf9m18=
|
||||||
github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc=
|
github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc=
|
||||||
|
@ -13,12 +9,15 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24
|
||||||
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
|
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
|
||||||
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
||||||
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||||
|
github.com/bombsimon/logrusr/v2 v2.0.1 h1:1VgxVNQMCvjirZIYaT9JYn6sAVGVEcNtRE0y4mvaOAM=
|
||||||
|
github.com/bombsimon/logrusr/v2 v2.0.1/go.mod h1:ByVAX+vHdLGAfdroiMg6q0zgq2FODY2lc5YJvzmOJio=
|
||||||
github.com/cenkalti/backoff/v4 v4.1.0 h1:c8LkOFQTzuO0WBM/ae5HdGQuZPfPxp7lqBRwQRm4fSc=
|
github.com/cenkalti/backoff/v4 v4.1.0 h1:c8LkOFQTzuO0WBM/ae5HdGQuZPfPxp7lqBRwQRm4fSc=
|
||||||
github.com/cenkalti/backoff/v4 v4.1.0/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
|
github.com/cenkalti/backoff/v4 v4.1.0/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
|
||||||
github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
|
github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
|
||||||
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||||
github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag=
|
github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag=
|
||||||
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
|
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
|
||||||
|
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
@ -26,6 +25,12 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2
|
||||||
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
github.com/go-kit/kit v0.9.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.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||||
|
github.com/go-logr/logr v1.0.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||||
|
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||||
|
github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
|
||||||
|
github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||||
|
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
||||||
|
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
||||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
|
@ -39,7 +44,6 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
|
||||||
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
|
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
|
||||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
|
||||||
github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs=
|
github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs=
|
||||||
github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75 h1:f0n1xnMSmBLzVfsMMvriDyA75NB/oBgILX2GcHXIQzY=
|
github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75 h1:f0n1xnMSmBLzVfsMMvriDyA75NB/oBgILX2GcHXIQzY=
|
||||||
|
@ -55,22 +59,16 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ
|
||||||
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
||||||
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||||
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
||||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
|
||||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||||
|
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
|
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.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||||
|
github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
|
||||||
|
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
|
||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
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=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
github.com/m3db/prometheus_client_golang v0.8.1 h1:t7w/tcFws81JL1j5sqmpqcOyQOpH4RDOmIe3A3fdN3w=
|
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||||
github.com/m3db/prometheus_client_golang v0.8.1/go.mod h1:8R/f1xYhXWq59KD/mbRqoBulXejss7vYtYzWmruNUwI=
|
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||||
github.com/m3db/prometheus_client_model v0.1.0 h1:cg1+DiuyT6x8h9voibtarkH1KT6CmsewBSaBhe8wzLo=
|
|
||||||
github.com/m3db/prometheus_client_model v0.1.0/go.mod h1:Qfsxn+LypxzF+lNhak7cF7k0zxK7uB/ynGYoj80zcD4=
|
|
||||||
github.com/m3db/prometheus_common v0.1.0 h1:YJu6eCIV6MQlcwND24cRG/aRkZDX1jvYbsNNs1ZYr0w=
|
|
||||||
github.com/m3db/prometheus_common v0.1.0/go.mod h1:EBmDQaMAy4B8i+qsg1wMXAelLNVbp49i/JOeVszQ/rs=
|
|
||||||
github.com/m3db/prometheus_procfs v0.8.1 h1:LsxWzVELhDU9sLsZTaFLCeAwCn7bC7qecZcK4zobs/g=
|
|
||||||
github.com/m3db/prometheus_procfs v0.8.1/go.mod h1:N8lv8fLh3U3koZx1Bnisj60GYUMDpWb09x1R+dmMOJo=
|
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
|
github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
|
@ -83,7 +81,6 @@ github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144T
|
||||||
github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ=
|
github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ=
|
||||||
github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o=
|
github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o=
|
||||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
|
|
||||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
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/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
@ -102,7 +99,6 @@ github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R
|
||||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||||
github.com/prometheus/procfs v0.0.8 h1:+fpWZdT24pJBiqJdAwYBjPSk+5YmQzYNPYzQsdzLkt8=
|
github.com/prometheus/procfs v0.0.8 h1:+fpWZdT24pJBiqJdAwYBjPSk+5YmQzYNPYzQsdzLkt8=
|
||||||
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
|
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
|
||||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
|
||||||
github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0=
|
github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0=
|
||||||
github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM=
|
github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM=
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||||
|
@ -114,84 +110,41 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
|
||||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||||
github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
|
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
|
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
|
||||||
github.com/uber-go/tally v3.3.17+incompatible h1:nFHIuW3VQ22wItiE9kPXic8dEgExWOsVOHwpmoIvsMw=
|
|
||||||
github.com/uber-go/tally v3.3.17+incompatible/go.mod h1:YDTIBxdXyOU/sCWilKB4bgyufu1cEi0jdVnRdxvjnmU=
|
|
||||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
|
||||||
go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk=
|
|
||||||
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
|
||||||
go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A=
|
|
||||||
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
|
|
||||||
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4=
|
|
||||||
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
|
|
||||||
go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM=
|
|
||||||
go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
|
|
||||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
|
||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
|
||||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
|
||||||
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
|
||||||
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5 h1:2M3HP5CCK1Si9FQhwnzYhXdG6DXeebvUHFpre8QvbyI=
|
|
||||||
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
|
||||||
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
|
|
||||||
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
|
||||||
golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
|
|
||||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
|
||||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
|
||||||
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
|
||||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
|
||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/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-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-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210608053332-aa57babbf139 h1:C+AwYEtBp/VQwoLntUmQ/yx3MS9vmZaKNdw5eOpoQe8=
|
||||||
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210608053332-aa57babbf139/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4 h1:EZ2mChiOa8udjfp6rRmswTbtZN/QzUQp4ptM4rnjHvc=
|
|
||||||
golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
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=
|
|
||||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
|
||||||
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
|
||||||
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
|
||||||
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
|
||||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
|
||||||
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
|
||||||
golang.org/x/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY=
|
|
||||||
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
|
|
||||||
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/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
|
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
|
||||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||||
google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
|
google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
|
||||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=
|
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
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/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/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||||
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
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.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v2 v2.2.5 h1:ymVxjfMaHvXD8RqPRmzHHsB3VvucivSkIAvJFDI5O3c=
|
|
||||||
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM=
|
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
|
||||||
|
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
|
121
log.go
121
log.go
|
@ -1,121 +0,0 @@
|
||||||
package taskmanager
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
"sync"
|
|
||||||
"os"
|
|
||||||
|
|
||||||
"github.com/Fishwaldo/go-taskmanager/utils"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Logger interface {
|
|
||||||
Trace(message string, params ...interface{})
|
|
||||||
Debug(message string, params ...interface{})
|
|
||||||
Info(message string, params ...interface{})
|
|
||||||
Warn(message string, params ...interface{})
|
|
||||||
Error(message string, params ...interface{})
|
|
||||||
Fatal(message string, params ...interface{})
|
|
||||||
Panic(message string, params ...interface{})
|
|
||||||
New(name string) (l Logger)
|
|
||||||
With(key string, value interface{}) (l Logger)
|
|
||||||
Sync()
|
|
||||||
}
|
|
||||||
|
|
||||||
//DefaultLogger uses Golang Standard Logging Libary
|
|
||||||
func DefaultLogger() (l *StdLogger) {
|
|
||||||
stdlogger := log.New(os.Stderr, "sched - ", log.LstdFlags)
|
|
||||||
stdlog := &StdLogger{Log: *stdlogger, keys: make(map[string]interface{})}
|
|
||||||
return stdlog
|
|
||||||
}
|
|
||||||
|
|
||||||
type StdLogger struct {
|
|
||||||
Log log.Logger
|
|
||||||
keys map[string]interface{}
|
|
||||||
mx sync.Mutex
|
|
||||||
level Log_Level
|
|
||||||
}
|
|
||||||
|
|
||||||
type Log_Level int
|
|
||||||
|
|
||||||
const (
|
|
||||||
LOG_TRACE Log_Level = iota
|
|
||||||
LOG_DEBUG
|
|
||||||
LOG_INFO
|
|
||||||
LOG_WARN
|
|
||||||
LOG_ERROR
|
|
||||||
LOG_FATAL
|
|
||||||
LOG_PANIC
|
|
||||||
)
|
|
||||||
|
|
||||||
func (l *StdLogger) Trace(message string, params ...interface{}) {
|
|
||||||
if l.level <= LOG_TRACE {
|
|
||||||
l.Log.Printf("TRACE: %s - %s", fmt.Sprintf(message, params...), l.getKeys())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func (l *StdLogger) Debug(message string, params ...interface{}) {
|
|
||||||
if l.level <= LOG_DEBUG {
|
|
||||||
l.Log.Printf("DEBUG: %s - %s", fmt.Sprintf(message, params...), l.getKeys())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func (l *StdLogger) Info(message string, params ...interface{}) {
|
|
||||||
if l.level <= LOG_INFO {
|
|
||||||
l.Log.Printf("INFO: %s - %s", fmt.Sprintf(message, params...), l.getKeys())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func (l *StdLogger) Warn(message string, params ...interface{}) {
|
|
||||||
if l.level <= LOG_WARN {
|
|
||||||
l.Log.Printf("WARN: %s - %s", fmt.Sprintf(message, params...), l.getKeys())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func (l *StdLogger) Error(message string, params ...interface{}) {
|
|
||||||
if l.level <= LOG_ERROR {
|
|
||||||
l.Log.Printf("ERROR: %s - %s", fmt.Sprintf(message, params...), l.getKeys())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func (l *StdLogger) Fatal(message string, params ...interface{}) {
|
|
||||||
l.Log.Fatal(fmt.Printf("FATAL: %s - %s", fmt.Sprintf(message, params...), l.getKeys()))
|
|
||||||
}
|
|
||||||
func (l *StdLogger) Panic(message string, params ...interface{}) {
|
|
||||||
l.Log.Panic(fmt.Printf("PANIC: %s - %s", fmt.Sprintf(message, params...), l.getKeys()))
|
|
||||||
}
|
|
||||||
func (l *StdLogger) New(name string) Logger {
|
|
||||||
//nl := &StdLogger{keys: l.keys}
|
|
||||||
nl := &StdLogger{level: l.level}
|
|
||||||
nl.Log.SetPrefix(fmt.Sprintf("%s.%s", l.Log.Prefix(), name))
|
|
||||||
nl.Log.SetFlags(l.Log.Flags())
|
|
||||||
nl.Log.SetOutput(l.Log.Writer())
|
|
||||||
return nl
|
|
||||||
}
|
|
||||||
func (l *StdLogger) With(key string, value interface{}) Logger {
|
|
||||||
l.mx.Lock()
|
|
||||||
defer l.mx.Unlock()
|
|
||||||
stdlog := &StdLogger{level: l.level, keys: utils.CopyableMap(l.keys).DeepCopy()}
|
|
||||||
stdlog.Log.SetPrefix(l.Log.Prefix())
|
|
||||||
stdlog.Log.SetFlags(l.Log.Flags())
|
|
||||||
stdlog.Log.SetOutput(l.Log.Writer())
|
|
||||||
stdlog.keys[key] = value
|
|
||||||
return stdlog
|
|
||||||
}
|
|
||||||
func (l *StdLogger) Sync() {
|
|
||||||
// do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *StdLogger) getKeys() (message string) {
|
|
||||||
l.mx.Lock()
|
|
||||||
defer l.mx.Unlock()
|
|
||||||
msg, err := json.Marshal(l.keys)
|
|
||||||
if err == nil {
|
|
||||||
return string(msg)
|
|
||||||
}
|
|
||||||
return err.Error()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *StdLogger) SetLevel(level Log_Level) {
|
|
||||||
l.level = level
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *StdLogger) GetLevel() (level Log_Level) {
|
|
||||||
return l.level
|
|
||||||
}
|
|
115
log_test.go
115
log_test.go
|
@ -1,115 +0,0 @@
|
||||||
package taskmanager
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"os"
|
|
||||||
"regexp"
|
|
||||||
"testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestDefaultLogger(t *testing.T) {
|
|
||||||
logger := DefaultLogger()
|
|
||||||
logger.SetLevel(LOG_TRACE)
|
|
||||||
if logger.level != LOG_TRACE {
|
|
||||||
t.Errorf("Can't Set Logging Level")
|
|
||||||
}
|
|
||||||
if logger.GetLevel() != LOG_TRACE {
|
|
||||||
t.Error("GetLevel Didn't return Correct Logging Level")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func captureOutput(l *StdLogger, f func()) string {
|
|
||||||
var buf bytes.Buffer
|
|
||||||
l.Log.SetOutput(&buf)
|
|
||||||
f()
|
|
||||||
l.Log.SetOutput(os.Stderr)
|
|
||||||
return buf.String()
|
|
||||||
}
|
|
||||||
func TestLogTrace(t *testing.T) {
|
|
||||||
logger := DefaultLogger()
|
|
||||||
logger.SetLevel(LOG_TRACE)
|
|
||||||
output := captureOutput(logger, func() {
|
|
||||||
logger.Trace("Hello %s", "world")
|
|
||||||
})
|
|
||||||
validmsg := regexp.MustCompile(`^.* TRACE: Hello world \- {}`)
|
|
||||||
if !validmsg.MatchString(output) {
|
|
||||||
t.Errorf("Log Trace Failed: %s", output)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func TestLogDebug(t *testing.T) {
|
|
||||||
logger := DefaultLogger()
|
|
||||||
logger.SetLevel(LOG_TRACE)
|
|
||||||
output := captureOutput(logger, func() {
|
|
||||||
logger.Debug("Hello %s", "world")
|
|
||||||
})
|
|
||||||
validmsg := regexp.MustCompile(`^.* DEBUG: Hello world \- {}`)
|
|
||||||
if !validmsg.MatchString(output) {
|
|
||||||
t.Errorf("Log Debug Failed: %s", output)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestLogInfo(t *testing.T) {
|
|
||||||
logger := DefaultLogger()
|
|
||||||
logger.SetLevel(LOG_TRACE)
|
|
||||||
output := captureOutput(logger, func() {
|
|
||||||
logger.Info("Hello %s", "world")
|
|
||||||
})
|
|
||||||
validmsg := regexp.MustCompile(`^.* INFO: Hello world \- {}`)
|
|
||||||
if !validmsg.MatchString(output) {
|
|
||||||
t.Errorf("Log Info Failed: %s", output)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestLogWarn(t *testing.T) {
|
|
||||||
logger := DefaultLogger()
|
|
||||||
logger.SetLevel(LOG_TRACE)
|
|
||||||
output := captureOutput(logger, func() {
|
|
||||||
logger.Warn("Hello %s", "world")
|
|
||||||
})
|
|
||||||
validmsg := regexp.MustCompile(`^.* WARN: Hello world \- {}`)
|
|
||||||
if !validmsg.MatchString(output) {
|
|
||||||
t.Errorf("Log Warn Failed: %s", output)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestLogError(t *testing.T) {
|
|
||||||
logger := DefaultLogger()
|
|
||||||
logger.SetLevel(LOG_TRACE)
|
|
||||||
output := captureOutput(logger, func() {
|
|
||||||
logger.Error("Hello %s", "world")
|
|
||||||
})
|
|
||||||
validmsg := regexp.MustCompile(`^.* ERROR: Hello world \- {}`)
|
|
||||||
if !validmsg.MatchString(output) {
|
|
||||||
t.Errorf("Log Error Failed: %s", output)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestLogFatal(t *testing.T) {
|
|
||||||
//logger := DefaultLogger()
|
|
||||||
//logger.SetLevel(LOG_TRACE)
|
|
||||||
//output := captureOutput(logger, func() {
|
|
||||||
// logger.Fatal("Hello %s", "world")
|
|
||||||
//})
|
|
||||||
//validmsg := regexp.MustCompile(`^.* FATAL: Hello world \- {}`)
|
|
||||||
//if !validmsg.MatchString(output) {
|
|
||||||
// t.Errorf("Log Fatal Failed: %s", output)
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestLogPanic(t *testing.T) {
|
|
||||||
logger := DefaultLogger()
|
|
||||||
logger.SetLevel(LOG_TRACE)
|
|
||||||
defer func() {
|
|
||||||
if err := recover(); err == nil {
|
|
||||||
t.Errorf("Log Panic Recovery Failed")
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
output := captureOutput(logger, func() {
|
|
||||||
logger.Panic("Hello %s", "world")
|
|
||||||
})
|
|
||||||
|
|
||||||
validmsg := regexp.MustCompile(`^.* PANIC: Hello world \- {}`)
|
|
||||||
if !validmsg.MatchString(output) {
|
|
||||||
t.Errorf("Log Panic Failed: %s", output)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,52 +0,0 @@
|
||||||
package logruslog
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/Fishwaldo/go-taskmanager"
|
|
||||||
"github.com/sirupsen/logrus"
|
|
||||||
)
|
|
||||||
|
|
||||||
var _ taskmanager.Logger = (*LruLogger)(nil)
|
|
||||||
|
|
||||||
type LruLogger struct {
|
|
||||||
Lru *logrus.Entry
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l LruLogger) Debug(msg string, keysAndValues ...interface{}) {
|
|
||||||
l.Lru.Debugf(msg, keysAndValues...)
|
|
||||||
}
|
|
||||||
func (l LruLogger) Error(msg string, keysAndValues ...interface{}) {
|
|
||||||
l.Lru.Errorf(msg, keysAndValues...)
|
|
||||||
}
|
|
||||||
func (l LruLogger) Fatal(msg string, keysAndValues ...interface{}) {
|
|
||||||
l.Lru.Fatalf(msg, keysAndValues...)
|
|
||||||
}
|
|
||||||
func (l LruLogger) Info(msg string, keysAndValues ...interface{}) {
|
|
||||||
l.Lru.Infof(msg, keysAndValues...)
|
|
||||||
}
|
|
||||||
func (l LruLogger) Panic(msg string, keysAndValues ...interface{}) {
|
|
||||||
l.Lru.Panicf(msg, keysAndValues...)
|
|
||||||
}
|
|
||||||
func (l LruLogger) Warn(msg string, keysAndValues ...interface{}) {
|
|
||||||
l.Lru.Warnf(msg, keysAndValues...)
|
|
||||||
}
|
|
||||||
func (l *LruLogger) With(key string, value interface{}) taskmanager.Logger {
|
|
||||||
nl := &LruLogger{Lru: logrus.NewEntry(l.Lru.Logger)}
|
|
||||||
nl.Lru = l.Lru.WithField(key, value)
|
|
||||||
return nl
|
|
||||||
}
|
|
||||||
func (l *LruLogger) Trace(key string, args ...interface{}) {
|
|
||||||
l.Lru.Tracef(key, args...)
|
|
||||||
}
|
|
||||||
func (l *LruLogger) Sync() {
|
|
||||||
}
|
|
||||||
func (l *LruLogger) New(name string) taskmanager.Logger {
|
|
||||||
nl := &LruLogger{Lru: logrus.NewEntry(l.Lru.Logger)}
|
|
||||||
return nl
|
|
||||||
}
|
|
||||||
|
|
||||||
//LogrusDefaultLogger Return Logger based on logrus with new instance
|
|
||||||
func LogrusDefaultLogger() taskmanager.Logger {
|
|
||||||
// TODO control verbosity
|
|
||||||
l := &LruLogger{Lru: logrus.NewEntry(logrus.New())}
|
|
||||||
return l
|
|
||||||
}
|
|
|
@ -1,58 +0,0 @@
|
||||||
package zaplog
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/Fishwaldo/go-taskmanager"
|
|
||||||
"go.uber.org/zap"
|
|
||||||
)
|
|
||||||
|
|
||||||
var _ taskmanager.Logger = (*ZapLogger)(nil)
|
|
||||||
|
|
||||||
type ZapLogger struct {
|
|
||||||
Zap *zap.SugaredLogger
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *ZapLogger) With(key string, value interface{}) taskmanager.Logger {
|
|
||||||
nl := &ZapLogger{Zap: l.Zap.With(key, value)}
|
|
||||||
return nl
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *ZapLogger) Trace(message string, params ...interface{}) {
|
|
||||||
l.Zap.Debugf(message, params...)
|
|
||||||
}
|
|
||||||
func (l *ZapLogger) Debug(message string, params ...interface{}) {
|
|
||||||
l.Zap.Debugf(message, params...)
|
|
||||||
}
|
|
||||||
func (l *ZapLogger) Info(message string, params ...interface{}) {
|
|
||||||
l.Zap.Infof(message, params...)
|
|
||||||
}
|
|
||||||
func (l *ZapLogger) Warn(message string, params ...interface{}) {
|
|
||||||
l.Zap.Warnf(message, params...)
|
|
||||||
}
|
|
||||||
func (l *ZapLogger) Error(message string, params ...interface{}) {
|
|
||||||
l.Zap.Errorf(message, params...)
|
|
||||||
}
|
|
||||||
func (l *ZapLogger) Fatal(message string, params ...interface{}) {
|
|
||||||
l.Zap.Fatalf(message, params...)
|
|
||||||
}
|
|
||||||
func (l *ZapLogger) Panic(message string, params ...interface{}) {
|
|
||||||
l.Zap.Panicf(message, params...)
|
|
||||||
}
|
|
||||||
func (l *ZapLogger) New(name string) (nl taskmanager.Logger) {
|
|
||||||
zl := &ZapLogger{Zap: l.Zap}
|
|
||||||
zl.Zap.Named(name)
|
|
||||||
return zl
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *ZapLogger) Sync() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//DefaultLogger Return Default Sched Logger based on Zap's sugared logger
|
|
||||||
func NewZapLogger() *ZapLogger {
|
|
||||||
// TODO control verbosity
|
|
||||||
loggerBase, _ := zap.NewDevelopment(zap.AddCallerSkip(1), zap.AddStacktrace(zap.ErrorLevel))
|
|
||||||
sugarLogger := loggerBase.Sugar()
|
|
||||||
return &ZapLogger{
|
|
||||||
Zap: sugarLogger,
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -40,7 +40,7 @@ func (hth *ConcurrentJobBlocker) PreHandler(s *taskmanager.Task) (taskmanager.MW
|
||||||
defer hth.mx.Unlock()
|
defer hth.mx.Unlock()
|
||||||
cjl := hth.getTagCtx(s)
|
cjl := hth.getTagCtx(s)
|
||||||
if cjl != nil {
|
if cjl != nil {
|
||||||
s.Logger.Debug("Concurrent Job Lock is %t", cjl.running)
|
s.Logger.V(1).Info("Concurrent Job Lock", "locked", cjl.running)
|
||||||
if cjl.running {
|
if cjl.running {
|
||||||
metrics.IncrCounterWithLabels(schedmetrics.GetMetricsCounterKey(schedmetrics.Metrics_Counter_MW_ConcurrentJob_Blocked), 1, []metrics.Label{{Name: "id", Value: s.GetID()}})
|
metrics.IncrCounterWithLabels(schedmetrics.GetMetricsCounterKey(schedmetrics.Metrics_Counter_MW_ConcurrentJob_Blocked), 1, []metrics.Label{{Name: "id", Value: s.GetID()}})
|
||||||
return taskmanager.MWResult{Result: taskmanager.MWResult_Defer}, joberrors.FailedJobError{Message: "Job Already Running", ErrorType: joberrors.Error_ConcurrentJob}
|
return taskmanager.MWResult{Result: taskmanager.MWResult_Defer}, joberrors.FailedJobError{Message: "Job Already Running", ErrorType: joberrors.Error_ConcurrentJob}
|
||||||
|
@ -57,9 +57,9 @@ func (hth *ConcurrentJobBlocker) PostHandler(s *taskmanager.Task, err error) tas
|
||||||
defer hth.mx.Unlock()
|
defer hth.mx.Unlock()
|
||||||
cjl := hth.getTagCtx(s)
|
cjl := hth.getTagCtx(s)
|
||||||
if cjl != nil {
|
if cjl != nil {
|
||||||
s.Logger.Debug("Concurrent Job Lock is %t", cjl.running)
|
s.Logger.V(1).Info("Concurrent Job Lock", "locked", cjl.running)
|
||||||
if !cjl.running {
|
if !cjl.running {
|
||||||
s.Logger.Warn("Job Was Not Locked")
|
s.Logger.Info("Job Was Not Locked")
|
||||||
return taskmanager.MWResult{Result: taskmanager.MWResult_NextMW}
|
return taskmanager.MWResult{Result: taskmanager.MWResult_NextMW}
|
||||||
} else {
|
} else {
|
||||||
cjl.running = false
|
cjl.running = false
|
||||||
|
|
|
@ -72,19 +72,20 @@ func (hth *HasTagHandler) IsRequiredTag(tag string) bool {
|
||||||
// Handler Runs the Tag Handler before a job is dispatched.
|
// Handler Runs the Tag Handler before a job is dispatched.
|
||||||
func (hth *HasTagHandler) PreHandler(s *taskmanager.Task) (taskmanager.MWResult, error) {
|
func (hth *HasTagHandler) PreHandler(s *taskmanager.Task) (taskmanager.MWResult, error) {
|
||||||
s.Logger.
|
s.Logger.
|
||||||
With("Present", hth.haveTags).
|
WithValues("present", hth.haveTags).
|
||||||
With("Required", hth.requiredTags).
|
WithValues("required", hth.requiredTags).
|
||||||
Debug("Checking Tags")
|
V(1).
|
||||||
|
Info("Checking Tags")
|
||||||
for k := range hth.requiredTags {
|
for k := range hth.requiredTags {
|
||||||
if !(hth.IsHaveTag(k)) {
|
if !(hth.IsHaveTag(k)) {
|
||||||
s.Logger.
|
s.Logger.
|
||||||
With("Tag", k).
|
WithValues("tag", k).
|
||||||
Warn("Missing Tag")
|
Info("Missing Tag")
|
||||||
metrics.IncrCounterWithLabels(schedmetrics.GetMetricsCounterKey(schedmetrics.Metrics_Counter_MW_HasTags_Blocked), 1, []metrics.Label{{Name: "id", Value: s.GetID()}})
|
metrics.IncrCounterWithLabels(schedmetrics.GetMetricsCounterKey(schedmetrics.Metrics_Counter_MW_HasTags_Blocked), 1, []metrics.Label{{Name: "id", Value: s.GetID()}})
|
||||||
return taskmanager.MWResult{Result: taskmanager.MWResult_Defer}, joberrors.FailedJobError{Message: "Missing Tag", ErrorType: joberrors.Error_DeferedJob}
|
return taskmanager.MWResult{Result: taskmanager.MWResult_Defer}, joberrors.FailedJobError{Message: "Missing Tag", ErrorType: joberrors.Error_DeferedJob}
|
||||||
} else {
|
} else {
|
||||||
s.Logger.
|
s.Logger.
|
||||||
With("Tag", k).
|
WithValues("tag", k).
|
||||||
Info("Tag Present")
|
Info("Tag Present")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ func (ebh *RetryConstantBackoff) Handler(s *taskmanager.Task, prerun bool, e err
|
||||||
defer ebh.mx.Unlock()
|
defer ebh.mx.Unlock()
|
||||||
bo, ok := ebh.getCtx(s)
|
bo, ok := ebh.getCtx(s)
|
||||||
if !ok {
|
if !ok {
|
||||||
s.Logger.Error("RetryConstantBackoff Not Reset/Initialzied")
|
s.Logger.Error(nil, "RetryConstantBackoff Not Reset/Initialzied")
|
||||||
return taskmanager.RetryResult{Result: taskmanager.RetryResult_NextMW}, joberrors.FailedJobError{ErrorType: joberrors.Error_Middleware, Message: "RetryConstantBackoff Not Reset/Initialzied"}
|
return taskmanager.RetryResult{Result: taskmanager.RetryResult_NextMW}, joberrors.FailedJobError{ErrorType: joberrors.Error_Middleware, Message: "RetryConstantBackoff Not Reset/Initialzied"}
|
||||||
}
|
}
|
||||||
if ebh.shouldHandleState(e) {
|
if ebh.shouldHandleState(e) {
|
||||||
|
|
|
@ -39,7 +39,7 @@ func (ebh *RetryExponentialBackoff) Handler(s *taskmanager.Task, prerun bool, e
|
||||||
defer ebh.mx.Unlock()
|
defer ebh.mx.Unlock()
|
||||||
bo, ok := ebh.getCtx(s)
|
bo, ok := ebh.getCtx(s)
|
||||||
if !ok {
|
if !ok {
|
||||||
s.Logger.Error("RetryExponentialBackoff Not Reset/Initialzied")
|
s.Logger.Error(nil, "RetryExponentialBackoff Not Reset/Initialzied")
|
||||||
return taskmanager.RetryResult{Result: taskmanager.RetryResult_NextMW}, joberrors.FailedJobError{ErrorType: joberrors.Error_Middleware, Message: "RetryExponentialBackoff Not Reset/Initialzied"}
|
return taskmanager.RetryResult{Result: taskmanager.RetryResult_NextMW}, joberrors.FailedJobError{ErrorType: joberrors.Error_Middleware, Message: "RetryExponentialBackoff Not Reset/Initialzied"}
|
||||||
}
|
}
|
||||||
if ebh.shouldHandleState(e) {
|
if ebh.shouldHandleState(e) {
|
||||||
|
|
|
@ -42,17 +42,17 @@ func (ebh *RetryCountLimit) Handler(s *taskmanager.Task, prerun bool, e error) (
|
||||||
defer ebh.mx.Unlock()
|
defer ebh.mx.Unlock()
|
||||||
bo, ok := ebh.getCtx(s)
|
bo, ok := ebh.getCtx(s)
|
||||||
if !ok {
|
if !ok {
|
||||||
s.Logger.Error("RetryCountLimit Not Reset/Initialzied")
|
s.Logger.Error(nil, "RetryCountLimit Not Reset/Initialzied")
|
||||||
return taskmanager.RetryResult{Result: taskmanager.RetryResult_NextMW}, joberrors.FailedJobError{ErrorType: joberrors.Error_Middleware, Message: "RetryCountLimit Not Reset/Initialzied"}
|
return taskmanager.RetryResult{Result: taskmanager.RetryResult_NextMW}, joberrors.FailedJobError{ErrorType: joberrors.Error_Middleware, Message: "RetryCountLimit Not Reset/Initialzied"}
|
||||||
}
|
}
|
||||||
if ebh.shouldHandleState(e) {
|
if ebh.shouldHandleState(e) {
|
||||||
bo.attempts++
|
bo.attempts++
|
||||||
if bo.attempts > ebh.max {
|
if bo.attempts > ebh.max {
|
||||||
s.Logger.Warn("Exceeded Max Number of Attempts: %d (%d limit)", bo.attempts, ebh.max)
|
s.Logger.Info("Exceeded Max Number of Attempts", "attempts", bo.attempts, "limit", ebh.max)
|
||||||
metrics.IncrCounterWithLabels(schedmetrics.GetMetricsCounterKey(schedmetrics.Metrics_Counter_MW_RetryLimit_Hit), 1, []metrics.Label{{Name: "id", Value: s.GetID()}})
|
metrics.IncrCounterWithLabels(schedmetrics.GetMetricsCounterKey(schedmetrics.Metrics_Counter_MW_RetryLimit_Hit), 1, []metrics.Label{{Name: "id", Value: s.GetID()}})
|
||||||
return taskmanager.RetryResult{Result: taskmanager.RetryResult_NoRetry}, nil
|
return taskmanager.RetryResult{Result: taskmanager.RetryResult_NoRetry}, nil
|
||||||
} else {
|
} else {
|
||||||
s.Logger.Info("Retrying Job: Attempt %d - %d limit", bo.attempts, ebh.max)
|
s.Logger.Info("Retrying Job", "attempts", bo.attempts, "limit", ebh.max)
|
||||||
return taskmanager.RetryResult{Result: taskmanager.RetryResult_NextMW}, nil
|
return taskmanager.RetryResult{Result: taskmanager.RetryResult_NextMW}, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
19
options.go
19
options.go
|
@ -1,27 +1,30 @@
|
||||||
package taskmanager
|
package taskmanager
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"github.com/go-logr/logr"
|
||||||
|
"github.com/go-logr/stdr"
|
||||||
)
|
)
|
||||||
|
|
||||||
type taskoptions struct {
|
type taskoptions struct {
|
||||||
logger Logger
|
logger logr.Logger
|
||||||
executationmiddlewares []ExecutionMiddleWare
|
executationmiddlewares []ExecutionMiddleWare
|
||||||
retryMiddlewares []RetryMiddleware
|
retryMiddlewares []RetryMiddleware
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func defaultTaskOptions() *taskoptions {
|
func defaultTaskOptions() *taskoptions {
|
||||||
logger := DefaultLogger()
|
logsink := log.New(os.Stdout, "", 0);
|
||||||
return &taskoptions{
|
return &taskoptions{
|
||||||
logger: logger,
|
logger: stdr.New(logsink),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func defaultSchedOptions() *taskoptions {
|
func defaultSchedOptions() *taskoptions {
|
||||||
logger := DefaultLogger()
|
logsink := log.New(os.Stdout, "", 0);
|
||||||
return &taskoptions {
|
return &taskoptions {
|
||||||
logger: logger,
|
logger: stdr.New(logsink),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,7 +35,7 @@ type Option interface {
|
||||||
}
|
}
|
||||||
|
|
||||||
type loggerOption struct {
|
type loggerOption struct {
|
||||||
Logger Logger
|
Logger logr.Logger
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l loggerOption) apply(opts *taskoptions) {
|
func (l loggerOption) apply(opts *taskoptions) {
|
||||||
|
@ -40,7 +43,7 @@ func (l loggerOption) apply(opts *taskoptions) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//WithLogger Use the supplied Logger as the logger.
|
//WithLogger Use the supplied Logger as the logger.
|
||||||
func WithLogger(logger Logger) Option {
|
func WithLogger(logger logr.Logger) Option {
|
||||||
return loggerOption{Logger: logger}
|
return loggerOption{Logger: logger}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,20 +2,19 @@ package taskmanager
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestOptionsLogger(t *testing.T) {
|
// func TestOptionsLogger(t *testing.T) {
|
||||||
options := defaultTaskOptions()
|
// options := defaultTaskOptions()
|
||||||
log := DefaultLogger()
|
// log := DefaultLogger()
|
||||||
logop := WithLogger(log)
|
// logop := WithLogger(log)
|
||||||
logop.apply(options)
|
// logop.apply(options)
|
||||||
switch options.logger.(type) {
|
// switch options.logger.(type) {
|
||||||
case *StdLogger:
|
// case *StdLogger:
|
||||||
default:
|
// default:
|
||||||
t.Errorf("WithLogger Options Apply Failed")
|
// t.Errorf("WithLogger Options Apply Failed")
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
type testemw struct {
|
type testemw struct {
|
||||||
}
|
}
|
||||||
|
|
26
scheduler.go
26
scheduler.go
|
@ -7,7 +7,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/sasha-s/go-deadlock"
|
"github.com/sasha-s/go-deadlock"
|
||||||
|
"github.com/go-logr/logr"
|
||||||
"github.com/Fishwaldo/go-taskmanager/joberrors"
|
"github.com/Fishwaldo/go-taskmanager/joberrors"
|
||||||
schedmetrics "github.com/Fishwaldo/go-taskmanager/metrics"
|
schedmetrics "github.com/Fishwaldo/go-taskmanager/metrics"
|
||||||
"github.com/armon/go-metrics"
|
"github.com/armon/go-metrics"
|
||||||
|
@ -20,7 +20,7 @@ type Scheduler struct {
|
||||||
nextRun timeSlice
|
nextRun timeSlice
|
||||||
mx deadlock.RWMutex
|
mx deadlock.RWMutex
|
||||||
tsmx deadlock.RWMutex
|
tsmx deadlock.RWMutex
|
||||||
log Logger
|
log logr.Logger
|
||||||
updateScheduleChan chan updateSignalOp
|
updateScheduleChan chan updateSignalOp
|
||||||
scheduleOpts []Option
|
scheduleOpts []Option
|
||||||
}
|
}
|
||||||
|
@ -91,7 +91,7 @@ func (s *Scheduler) Add(ctx context.Context, id string, timer Timer, job func(co
|
||||||
s.tasks[id] = schedule
|
s.tasks[id] = schedule
|
||||||
metrics.SetGauge(schedmetrics.GetMetricsGaugeKey(schedmetrics.Metrics_Guage_Jobs), float32(len(s.tasks)))
|
metrics.SetGauge(schedmetrics.GetMetricsGaugeKey(schedmetrics.Metrics_Guage_Jobs), float32(len(s.tasks)))
|
||||||
|
|
||||||
s.log.Info("Added New Job %s", schedule.GetID())
|
s.log.Info("Added New Job", "jobid", schedule.GetID())
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,7 +109,7 @@ func (s *Scheduler) Start(id string) error {
|
||||||
schedule.Start()
|
schedule.Start()
|
||||||
s.mx.Unlock()
|
s.mx.Unlock()
|
||||||
s.addScheduletoRunQueue(schedule)
|
s.addScheduletoRunQueue(schedule)
|
||||||
s.log.Info("Start Job %s", schedule.GetID())
|
s.log.Info("Start Job", "jobid", schedule.GetID())
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,7 +185,7 @@ func (s *Scheduler) getNextJob() *Task {
|
||||||
}
|
}
|
||||||
for _, sched := range s.nextRun {
|
for _, sched := range s.nextRun {
|
||||||
if sched.nextRun.Get().IsZero() {
|
if sched.nextRun.Get().IsZero() {
|
||||||
s.log.Info("NextRun for %s is Zero", sched.id)
|
s.log.Info("NextRun is Zero", "jobid", sched.GetID())
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
return sched
|
return sched
|
||||||
|
@ -200,7 +200,7 @@ func (s *Scheduler) scheduleLoop() {
|
||||||
nextjob := s.getNextJob()
|
nextjob := s.getNextJob()
|
||||||
if nextjob != nil {
|
if nextjob != nil {
|
||||||
nextRun = nextjob.GetNextRun()
|
nextRun = nextjob.GetNextRun()
|
||||||
s.log.Info("Next Scheduler Run is at %s for %s", time.Until(nextRun), nextjob.GetID())
|
s.log.Info("Next Scheduler Run", "next", time.Until(nextRun), "jobid", nextjob.GetID())
|
||||||
nextRunChan = time.After(time.Until(nextRun))
|
nextRunChan = time.After(time.Until(nextRun))
|
||||||
} else {
|
} else {
|
||||||
s.log.Info("No Jobs Scheduled")
|
s.log.Info("No Jobs Scheduled")
|
||||||
|
@ -209,19 +209,19 @@ func (s *Scheduler) scheduleLoop() {
|
||||||
select {
|
select {
|
||||||
case <-nextRunChan:
|
case <-nextRunChan:
|
||||||
if nextjob != nil {
|
if nextjob != nil {
|
||||||
s.log.Info("Dispatching Job %s", nextjob.id)
|
s.log.Info("Dispatching Job", "jobid", nextjob.id)
|
||||||
nextjob.nextRun.Set(time.Time{})
|
nextjob.nextRun.Set(time.Time{})
|
||||||
go nextjob.Run()
|
go nextjob.Run()
|
||||||
} else {
|
} else {
|
||||||
s.log.Error("nextjob is Nil")
|
s.log.Error(nil, "nextjob is Nil")
|
||||||
}
|
}
|
||||||
case op := <-s.updateScheduleChan:
|
case op := <-s.updateScheduleChan:
|
||||||
switch op.operation {
|
switch op.operation {
|
||||||
case updateSignalOp_Reschedule:
|
case updateSignalOp_Reschedule:
|
||||||
s.log.Info("recalcSchedule Triggered from %s", op.id)
|
s.log.Info("recalcSchedule Triggered", "operation", op.id)
|
||||||
s.updateNextRun()
|
s.updateNextRun()
|
||||||
default:
|
default:
|
||||||
s.log.Warn("Unhandled updateSignalOp Recieved")
|
s.log.Error(nil, "Unhandled updateSignalOp Recieved")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -233,7 +233,7 @@ func (s *Scheduler) updateNextRun() {
|
||||||
defer s.tsmx.Unlock()
|
defer s.tsmx.Unlock()
|
||||||
sort.Sort(s.nextRun)
|
sort.Sort(s.nextRun)
|
||||||
for _, job := range s.nextRun {
|
for _, job := range s.nextRun {
|
||||||
s.log.Info("Next Run %s: %s", job.GetID(), job.GetNextRun().Format(time.RFC1123))
|
s.log.Info("Next Run", "jobid", job.GetID(), "when", job.GetNextRun().Format(time.RFC1123))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -241,9 +241,9 @@ func (s *Scheduler) addScheduletoRunQueue(schedule *Task) {
|
||||||
s.tsmx.Lock()
|
s.tsmx.Lock()
|
||||||
defer s.tsmx.Unlock()
|
defer s.tsmx.Unlock()
|
||||||
s.nextRun = append(s.nextRun, schedule)
|
s.nextRun = append(s.nextRun, schedule)
|
||||||
s.log.Info("addScheduletoRunQueue %s", schedule.GetID())
|
s.log.Info("addScheduletoRunQueue", "jobid", schedule.GetID())
|
||||||
for _, job := range s.nextRun {
|
for _, job := range s.nextRun {
|
||||||
s.log.Info("Job Run Queue: %s: %s", job.GetID(), job.GetNextRun().Format(time.RFC1123))
|
s.log.Info("Job Run Queue", "jobid", job.GetID(), "when", job.GetNextRun().Format(time.RFC1123))
|
||||||
}
|
}
|
||||||
s.updateScheduleChan <- updateSignalOp{operation: updateSignalOp_Reschedule, id: schedule.id}
|
s.updateScheduleChan <- updateSignalOp{operation: updateSignalOp_Reschedule, id: schedule.id}
|
||||||
}
|
}
|
||||||
|
|
61
task.go
61
task.go
|
@ -10,7 +10,7 @@ import (
|
||||||
|
|
||||||
"github.com/armon/go-metrics"
|
"github.com/armon/go-metrics"
|
||||||
"github.com/sasha-s/go-deadlock"
|
"github.com/sasha-s/go-deadlock"
|
||||||
|
"github.com/go-logr/logr"
|
||||||
"github.com/Fishwaldo/go-taskmanager/job"
|
"github.com/Fishwaldo/go-taskmanager/job"
|
||||||
"github.com/Fishwaldo/go-taskmanager/joberrors"
|
"github.com/Fishwaldo/go-taskmanager/joberrors"
|
||||||
schedmetrics "github.com/Fishwaldo/go-taskmanager/metrics"
|
schedmetrics "github.com/Fishwaldo/go-taskmanager/metrics"
|
||||||
|
@ -102,7 +102,7 @@ type Task struct {
|
||||||
wg sync.WaitGroup
|
wg sync.WaitGroup
|
||||||
|
|
||||||
// Logging Interface
|
// Logging Interface
|
||||||
Logger Logger
|
Logger logr.Logger
|
||||||
|
|
||||||
// Lock the Schedule Structure for Modifications
|
// Lock the Schedule Structure for Modifications
|
||||||
mx deadlock.RWMutex
|
mx deadlock.RWMutex
|
||||||
|
@ -131,7 +131,7 @@ func NewSchedule(ctx context.Context, id string, timer Timer, jobFunc func(conte
|
||||||
jobSrcFunc: jobFunc,
|
jobSrcFunc: jobFunc,
|
||||||
timer: timer,
|
timer: timer,
|
||||||
activeJobs: *newJobMap(),
|
activeJobs: *newJobMap(),
|
||||||
Logger: options.logger.With("id", id),
|
Logger: options.logger.WithValues("taskid", id),
|
||||||
executationMiddleWares: options.executationmiddlewares,
|
executationMiddleWares: options.executationmiddlewares,
|
||||||
retryMiddlewares: options.retryMiddlewares,
|
retryMiddlewares: options.retryMiddlewares,
|
||||||
Ctx: ctx,
|
Ctx: ctx,
|
||||||
|
@ -164,11 +164,11 @@ func (s *Task) Start() {
|
||||||
s.stopScheduleSignal = make(chan interface{}, 1)
|
s.stopScheduleSignal = make(chan interface{}, 1)
|
||||||
|
|
||||||
for _, mw := range s.executationMiddleWares {
|
for _, mw := range s.executationMiddleWares {
|
||||||
s.Logger.Trace("Initilized %T Executation Middleware", mw)
|
s.Logger.V(1).Info("Initilized Executation Middleware", "middleware", mw)
|
||||||
mw.Initilize(s)
|
mw.Initilize(s)
|
||||||
}
|
}
|
||||||
for _, mw := range s.retryMiddlewares {
|
for _, mw := range s.retryMiddlewares {
|
||||||
s.Logger.Trace("Initilized %T Retry Middleware", mw)
|
s.Logger.V(1).Info("Initilized Retry Middleware", "middleware", mw)
|
||||||
mw.Initilize(s)
|
mw.Initilize(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,25 +194,24 @@ func (s *Task) Stop() {
|
||||||
|
|
||||||
// Print No. of Active Jobs
|
// Print No. of Active Jobs
|
||||||
if noOfActiveJobs := s.activeJobs.len(); s.activeJobs.len() > 0 {
|
if noOfActiveJobs := s.activeJobs.len(); s.activeJobs.len() > 0 {
|
||||||
s.Logger.Info("Waiting for '%d' active jobs still running...", noOfActiveJobs)
|
s.Logger.Info("Waiting for active jobs still running...", "jobs", noOfActiveJobs)
|
||||||
}
|
}
|
||||||
|
|
||||||
s.wg.Wait()
|
s.wg.Wait()
|
||||||
s.Logger.Info("Job Schedule Stopped")
|
s.Logger.Info("Job Schedule Stopped")
|
||||||
metrics.SetGaugeWithLabels(schedmetrics.GetMetricsGaugeKey(schedmetrics.Metrics_Guage_Up), 0, []metrics.Label{{Name: "id", Value: s.id}})
|
metrics.SetGaugeWithLabels(schedmetrics.GetMetricsGaugeKey(schedmetrics.Metrics_Guage_Up), 0, []metrics.Label{{Name: "id", Value: s.id}})
|
||||||
s.Logger.Sync()
|
|
||||||
close(s.stopScheduleSignal)
|
close(s.stopScheduleSignal)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Task) runPreExecutationMiddlware() (MWResult, error) {
|
func (s *Task) runPreExecutationMiddlware() (MWResult, error) {
|
||||||
for _, middleware := range s.executationMiddleWares {
|
for _, middleware := range s.executationMiddleWares {
|
||||||
s.Logger.Trace("Running Handler %T", middleware)
|
s.Logger.V(1).Info("Running Handler", "middleware", middleware)
|
||||||
metrics.IncrCounterWithLabels(schedmetrics.GetMetricsCounterKey(schedmetrics.Metrics_Counter_PreExecutationRuns), 1, []metrics.Label{{Name: "id", Value: s.id}, {Name: "middleware", Value: fmt.Sprintf("%T", middleware)}})
|
metrics.IncrCounterWithLabels(schedmetrics.GetMetricsCounterKey(schedmetrics.Metrics_Counter_PreExecutationRuns), 1, []metrics.Label{{Name: "id", Value: s.id}, {Name: "middleware", Value: fmt.Sprintf("%T", middleware)}})
|
||||||
result, err := middleware.PreHandler(s)
|
result, err := middleware.PreHandler(s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.Logger.With("Result", result).Warn("Middleware %T Returned Error: %s", middleware, err.Error())
|
s.Logger.Error(err, "Middleware Returned Error", "middleware", middleware, "result", result)
|
||||||
} else {
|
} else {
|
||||||
s.Logger.With("Result", result).Info("Middleware %T Returned No Error", middleware)
|
s.Logger.Info("Middleware Returned No Error", "middleware", middleware, "result", result)
|
||||||
}
|
}
|
||||||
|
|
||||||
switch result.Result {
|
switch result.Result {
|
||||||
|
@ -230,21 +229,21 @@ func (s *Task) runPreExecutationMiddlware() (MWResult, error) {
|
||||||
|
|
||||||
func (s *Task) runRetryMiddleware(prerun bool, err error) {
|
func (s *Task) runRetryMiddleware(prerun bool, err error) {
|
||||||
for _, retrymiddleware := range s.retryMiddlewares {
|
for _, retrymiddleware := range s.retryMiddlewares {
|
||||||
s.Logger.Trace("Running Retry Middleware %T", retrymiddleware)
|
s.Logger.V(1).Info("Running Retry Middleware", "middleware", retrymiddleware)
|
||||||
metrics.IncrCounterWithLabels(schedmetrics.GetMetricsCounterKey(schedmetrics.Metrics_Counter_PreRetryRuns), 1, []metrics.Label{{Name: "id", Value: s.id}, {Name: "middleware", Value: fmt.Sprintf("%T", retrymiddleware)}, {Name: "Prerun", Value: strconv.FormatBool(prerun)}})
|
metrics.IncrCounterWithLabels(schedmetrics.GetMetricsCounterKey(schedmetrics.Metrics_Counter_PreRetryRuns), 1, []metrics.Label{{Name: "id", Value: s.id}, {Name: "middleware", Value: fmt.Sprintf("%T", retrymiddleware)}, {Name: "Prerun", Value: strconv.FormatBool(prerun)}})
|
||||||
|
|
||||||
retryops, _ := retrymiddleware.Handler(s, prerun, err)
|
retryops, _ := retrymiddleware.Handler(s, prerun, err)
|
||||||
|
|
||||||
switch retryops.Result {
|
switch retryops.Result {
|
||||||
case RetryResult_Retry:
|
case RetryResult_Retry:
|
||||||
s.Logger.Debug("Retry Middleware %T Delayed Job %d", retrymiddleware, retryops.Delay)
|
s.Logger.V(1).Info("Retry Middleware Delayed Job", "middleware", retrymiddleware, "duration", retryops.Delay)
|
||||||
metrics.IncrCounterWithLabels(schedmetrics.GetMetricsCounterKey(schedmetrics.Metrics_Counter_PreRetryRetries), 1, []metrics.Label{{Name: "id", Value: s.id}, {Name: "middleware", Value: fmt.Sprintf("%T", retrymiddleware)}, {Name: "Prerun", Value: strconv.FormatBool(prerun)}})
|
metrics.IncrCounterWithLabels(schedmetrics.GetMetricsCounterKey(schedmetrics.Metrics_Counter_PreRetryRetries), 1, []metrics.Label{{Name: "id", Value: s.id}, {Name: "middleware", Value: fmt.Sprintf("%T", retrymiddleware)}, {Name: "Prerun", Value: strconv.FormatBool(prerun)}})
|
||||||
s.retryJob(retryops.Delay)
|
s.retryJob(retryops.Delay)
|
||||||
case RetryResult_NoRetry:
|
case RetryResult_NoRetry:
|
||||||
s.Logger.Debug("Retry Middleware %T Canceled Retries", retrymiddleware)
|
s.Logger.V(1).Info("Retry Middleware Canceled Retries", "middleware", retrymiddleware)
|
||||||
metrics.IncrCounterWithLabels(schedmetrics.GetMetricsCounterKey(schedmetrics.Metrics_Counter_PreRetryResets), 1, []metrics.Label{{Name: "id", Value: s.id}, {Name: "middleware", Value: fmt.Sprintf("%T", retrymiddleware)}, {Name: "Prerun", Value: strconv.FormatBool(prerun)}})
|
metrics.IncrCounterWithLabels(schedmetrics.GetMetricsCounterKey(schedmetrics.Metrics_Counter_PreRetryResets), 1, []metrics.Label{{Name: "id", Value: s.id}, {Name: "middleware", Value: fmt.Sprintf("%T", retrymiddleware)}, {Name: "Prerun", Value: strconv.FormatBool(prerun)}})
|
||||||
case RetryResult_NextMW:
|
case RetryResult_NextMW:
|
||||||
s.Logger.Debug("Retry Middleware %T Skipped", retrymiddleware)
|
s.Logger.V(1).Info("Retry Middleware Skipped", "middleware", retrymiddleware)
|
||||||
metrics.IncrCounterWithLabels(schedmetrics.GetMetricsCounterKey(schedmetrics.Metrics_Counter_PreRetrySkips), 1, []metrics.Label{{Name: "id", Value: s.id}, {Name: "middleware", Value: fmt.Sprintf("%T", retrymiddleware)}, {Name: "Prerun", Value: strconv.FormatBool(prerun)}})
|
metrics.IncrCounterWithLabels(schedmetrics.GetMetricsCounterKey(schedmetrics.Metrics_Counter_PreRetrySkips), 1, []metrics.Label{{Name: "id", Value: s.id}, {Name: "middleware", Value: fmt.Sprintf("%T", retrymiddleware)}, {Name: "Prerun", Value: strconv.FormatBool(prerun)}})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -252,7 +251,7 @@ func (s *Task) runRetryMiddleware(prerun bool, err error) {
|
||||||
|
|
||||||
func (s *Task) runPostExecutionHandler(err error) MWResult {
|
func (s *Task) runPostExecutionHandler(err error) MWResult {
|
||||||
for _, postmiddleware := range s.executationMiddleWares {
|
for _, postmiddleware := range s.executationMiddleWares {
|
||||||
s.Logger.Trace("Running PostHandler Middlware %T", postmiddleware)
|
s.Logger.V(1).Info("Running PostHandler Middlware", "middleware", postmiddleware)
|
||||||
metrics.IncrCounterWithLabels(schedmetrics.GetMetricsCounterKey(schedmetrics.Metrics_Counter_PostExecutationFailedRuns), 1, []metrics.Label{{Name: "id", Value: s.id}, {Name: "middleware", Value: fmt.Sprintf("%T", postmiddleware)}})
|
metrics.IncrCounterWithLabels(schedmetrics.GetMetricsCounterKey(schedmetrics.Metrics_Counter_PostExecutationFailedRuns), 1, []metrics.Label{{Name: "id", Value: s.id}, {Name: "middleware", Value: fmt.Sprintf("%T", postmiddleware)}})
|
||||||
result := postmiddleware.PostHandler(s, err)
|
result := postmiddleware.PostHandler(s, err)
|
||||||
switch result.Result {
|
switch result.Result {
|
||||||
|
@ -275,8 +274,8 @@ func (s *Task) runJobInstance(result chan interface{}) {
|
||||||
// Create a new instance of s.jobSrcFunc
|
// Create a new instance of s.jobSrcFunc
|
||||||
jobInstance := job.NewJob(s.Ctx, s.jobSrcFunc)
|
jobInstance := job.NewJob(s.Ctx, s.jobSrcFunc)
|
||||||
|
|
||||||
joblog := s.Logger.With("Instance", jobInstance.ID())
|
joblog := s.Logger.WithValues("instance", jobInstance.ID())
|
||||||
joblog.Debug("Job Run Starting")
|
joblog.V(1).Info("Job Run Starting")
|
||||||
|
|
||||||
// Add to active jobs map
|
// Add to active jobs map
|
||||||
s.activeJobs.add(jobInstance)
|
s.activeJobs.add(jobInstance)
|
||||||
|
@ -298,16 +297,16 @@ func (s *Task) runJobInstance(result chan interface{}) {
|
||||||
// Logs and Metrics --------------------------------------
|
// Logs and Metrics --------------------------------------
|
||||||
if lastError != nil {
|
if lastError != nil {
|
||||||
joblog.
|
joblog.
|
||||||
With("Duration", jobInstance.ActualElapsed().Round(1*time.Millisecond)).
|
WithValues("duration", jobInstance.ActualElapsed().Round(1*time.Millisecond)).
|
||||||
With("State", jobInstance.State().String()).
|
WithValues("state", jobInstance.State().String()).
|
||||||
With("Error", lastError.Error()).
|
WithValues("error", lastError.Error()).
|
||||||
Error("Job Error")
|
Error(lastError, "Job Error")
|
||||||
metrics.IncrCounterWithLabels([]string{"sched", "runerrors"}, 1, labels)
|
metrics.IncrCounterWithLabels([]string{"sched", "runerrors"}, 1, labels)
|
||||||
result <- lastError
|
result <- lastError
|
||||||
} else {
|
} else {
|
||||||
joblog.
|
joblog.
|
||||||
With("Duration", jobInstance.ActualElapsed().Round(1*time.Millisecond)).
|
WithValues("duration", jobInstance.ActualElapsed().Round(1*time.Millisecond)).
|
||||||
With("State", jobInstance.State().String()).
|
WithValues("state", jobInstance.State().String()).
|
||||||
Info("Job Finished")
|
Info("Job Finished")
|
||||||
result <- nil
|
result <- nil
|
||||||
}
|
}
|
||||||
|
@ -322,8 +321,8 @@ func negativeToZero(nextRunDuration time.Duration) time.Duration {
|
||||||
|
|
||||||
func (s *Task) retryJob(in time.Duration) {
|
func (s *Task) retryJob(in time.Duration) {
|
||||||
s.Logger.
|
s.Logger.
|
||||||
With("Duration", in).
|
WithValues("duration", in).
|
||||||
Debug("Rescheduling Job")
|
V(1).Info("Rescheduling Job")
|
||||||
s.timer.Reschedule(in)
|
s.timer.Reschedule(in)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -338,7 +337,7 @@ func (s *Task) Run() {
|
||||||
result, err := s.runPreExecutationMiddlware()
|
result, err := s.runPreExecutationMiddlware()
|
||||||
switch result.Result {
|
switch result.Result {
|
||||||
case MWResult_Cancel:
|
case MWResult_Cancel:
|
||||||
s.Logger.Warn("Scheduled Job run is Canceled")
|
s.Logger.Info("Scheduled Job run is Canceled")
|
||||||
t, _ := s.timer.Next()
|
t, _ := s.timer.Next()
|
||||||
s.nextRun.Set(t)
|
s.nextRun.Set(t)
|
||||||
s.sendUpdateSignal(updateSignalOp_Reschedule)
|
s.sendUpdateSignal(updateSignalOp_Reschedule)
|
||||||
|
@ -360,11 +359,11 @@ func (s *Task) Run() {
|
||||||
select {
|
select {
|
||||||
case result := <-jobResultSignal:
|
case result := <-jobResultSignal:
|
||||||
s.Logger.
|
s.Logger.
|
||||||
With("Result", result).
|
WithValues("result", result).
|
||||||
Info("Got Job Result", "result", result)
|
Info("Got Job Result", "result", result)
|
||||||
err, ok := result.(joberrors.FailedJobError)
|
err, ok := result.(joberrors.FailedJobError)
|
||||||
if ok {
|
if ok {
|
||||||
s.Logger.Warn("Job Failed with %s", err.Error())
|
s.Logger.Error(err, "Job Failed")
|
||||||
|
|
||||||
metrics.IncrCounterWithLabels(schedmetrics.GetMetricsCounterKey(schedmetrics.Metrics_Counter_FailedJobs), 1, []metrics.Label{{Name: "id", Value: s.id}})
|
metrics.IncrCounterWithLabels(schedmetrics.GetMetricsCounterKey(schedmetrics.Metrics_Counter_FailedJobs), 1, []metrics.Label{{Name: "id", Value: s.id}})
|
||||||
|
|
||||||
|
@ -372,7 +371,7 @@ func (s *Task) Run() {
|
||||||
|
|
||||||
if mwresult.Result == MWResult_Defer {
|
if mwresult.Result == MWResult_Defer {
|
||||||
/* run Retry Framework */
|
/* run Retry Framework */
|
||||||
s.Logger.Debug("Post Executation Middleware Retry Request")
|
s.Logger.V(1).Info("Post Executation Middleware Retry Request")
|
||||||
s.runRetryMiddleware(false, err)
|
s.runRetryMiddleware(false, err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -386,7 +385,7 @@ func (s *Task) Run() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Task) sendUpdateSignal(op UpdateSignalOp_Type) {
|
func (s *Task) sendUpdateSignal(op UpdateSignalOp_Type) {
|
||||||
s.Logger.Trace("Sending Update Signal")
|
s.Logger.V(1).Info("Sending Update Signal")
|
||||||
s.updateSignal <- updateSignalOp{id: s.id, operation: op}
|
s.updateSignal <- updateSignalOp{id: s.id, operation: op}
|
||||||
s.Logger.Trace("Sent Update Signal")
|
s.Logger.V(1).Info("Sent Update Signal")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue