Skip to content

Commit

Permalink
Merge pull request #164 from nabbar/fix_2307
Browse files Browse the repository at this point in the history
Fix Logger & Status
  • Loading branch information
nabbar authored Jul 5, 2023
2 parents 33f9fe3 + 7eda9db commit bb2f7f5
Show file tree
Hide file tree
Showing 7 changed files with 159 additions and 35 deletions.
28 changes: 13 additions & 15 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ require (
github.com/aws/aws-sdk-go-v2 v1.18.1
github.com/aws/aws-sdk-go-v2/config v1.18.27
github.com/aws/aws-sdk-go-v2/credentials v1.13.26
github.com/aws/aws-sdk-go-v2/service/iam v1.20.3
github.com/aws/aws-sdk-go-v2/service/s3 v1.35.0
github.com/aws/aws-sdk-go-v2/service/iam v1.21.0
github.com/aws/aws-sdk-go-v2/service/s3 v1.36.0
github.com/bits-and-blooms/bitset v1.8.0
github.com/c-bata/go-prompt v0.2.6
github.com/fatih/color v1.15.0
Expand Down Expand Up @@ -45,26 +45,25 @@ require (
github.com/xanzy/go-gitlab v0.86.0
github.com/xhit/go-simple-mail v2.2.2+incompatible
github.com/xujiajun/utils v0.0.0-20220904132955-5f7c5b914235
golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1
golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df
golang.org/x/net v0.11.0
golang.org/x/oauth2 v0.9.0
golang.org/x/sync v0.3.0
golang.org/x/sys v0.9.0
golang.org/x/sys v0.10.0
golang.org/x/term v0.9.0
gopkg.in/yaml.v3 v3.0.1
gorm.io/driver/clickhouse v0.5.1
gorm.io/driver/mysql v1.5.1
gorm.io/driver/postgres v1.5.2
gorm.io/driver/sqlite v1.5.1
gorm.io/driver/sqlite v1.5.2
gorm.io/driver/sqlserver v1.5.1
gorm.io/gorm v1.25.1
gorm.io/gorm v1.25.2
)

require (
github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 // indirect
github.com/ClickHouse/ch-go v0.57.0 // indirect
github.com/ClickHouse/clickhouse-go/v2 v2.10.1 // indirect
github.com/DataDog/zstd v1.5.6-0.20230622172052-ea68dcab66c0 // indirect
github.com/Masterminds/goutils v1.1.1 // indirect
github.com/Masterminds/semver v1.5.0 // indirect
github.com/Masterminds/sprig v2.22.0+incompatible // indirect
Expand Down Expand Up @@ -98,7 +97,6 @@ require (
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect
github.com/cockroachdb/pebble v0.0.0-20210331181633-27fc006b8bfb // indirect
github.com/cockroachdb/redact v1.1.5 // indirect
github.com/cockroachdb/tokenbucket v0.0.0-20230613231145-182959a1fad6 // indirect
github.com/gabriel-vasile/mimetype v1.4.2 // indirect
github.com/getsentry/sentry-go v0.22.0 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
Expand Down Expand Up @@ -143,7 +141,7 @@ require (
github.com/jinzhu/now v1.1.5 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/juju/ratelimit v1.0.2 // indirect
github.com/klauspost/compress v1.16.6 // indirect
github.com/klauspost/compress v1.16.7 // indirect
github.com/klauspost/cpuid/v2 v2.2.5 // indirect
github.com/kr/pretty v0.3.1 // indirect
github.com/kr/text v0.2.0 // indirect
Expand All @@ -155,7 +153,7 @@ require (
github.com/mattn/go-sqlite3 v1.14.17 // indirect
github.com/mattn/go-tty v0.0.5 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
github.com/microsoft/go-mssqldb v1.1.0 // indirect
github.com/microsoft/go-mssqldb v1.3.0 // indirect
github.com/miekg/dns v1.1.55 // indirect
github.com/minio/highwayhash v1.0.2 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
Expand All @@ -174,7 +172,7 @@ require (
github.com/prometheus/common v0.44.0 // indirect
github.com/prometheus/procfs v0.11.0 // indirect
github.com/rivo/uniseg v0.4.4 // indirect
github.com/rogpeppe/go-internal v1.10.0 // indirect
github.com/rogpeppe/go-internal v1.11.0 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 // indirect
github.com/segmentio/asm v1.2.0 // indirect
Expand All @@ -194,13 +192,13 @@ require (
github.com/yusufpapurcu/wmi v1.2.2 // indirect
go.opentelemetry.io/otel v1.16.0 // indirect
go.opentelemetry.io/otel/trace v1.16.0 // indirect
golang.org/x/arch v0.3.0 // indirect
golang.org/x/arch v0.4.0 // indirect
golang.org/x/crypto v0.10.0 // indirect
golang.org/x/mod v0.11.0 // indirect
golang.org/x/text v0.10.0 // indirect
golang.org/x/mod v0.12.0 // indirect
golang.org/x/text v0.11.0 // indirect
golang.org/x/time v0.3.0 // indirect
golang.org/x/tools v0.10.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/protobuf v1.30.0 // indirect
google.golang.org/protobuf v1.31.0 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
)
47 changes: 33 additions & 14 deletions logger/hookfile/system.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,14 @@ import (

const sizeBuffer = 32 * 1024

func (o *hkf) newBuffer(size int) *bytes.Buffer {
if size > 0 {
return bytes.NewBuffer(make([]byte, 0, size))
}

return bytes.NewBuffer(make([]byte, 0, sizeBuffer))
}

func (o *hkf) writeBuffer(buf *bytes.Buffer) error {
var (
e error
Expand All @@ -48,6 +56,7 @@ func (o *hkf) writeBuffer(buf *bytes.Buffer) error {
m = o.getFileMode()
n = o.getPathMode()
f = o.getFlags()
b = o.newBuffer(0)
)

if o.getCreatePath() {
Expand All @@ -57,6 +66,9 @@ func (o *hkf) writeBuffer(buf *bytes.Buffer) error {
}

defer func() {
if rec := recover(); rec != nil {
_, _ = fmt.Fprintf(os.Stderr, "recovering panic thread.\n%v\n", rec)
}
if h != nil {
_ = h.Close()
}
Expand All @@ -68,32 +80,37 @@ func (o *hkf) writeBuffer(buf *bytes.Buffer) error {
return e
} else if _, e = h.Write(buf.Bytes()); e != nil {
return e
} else if e = h.Close(); e != nil {
h = nil
buf.Reset()
return e
} else {
h = nil
}

buf.Reset()
return nil
*buf = *b
e = h.Close()
h = nil

return e
}

func (o *hkf) freeBuffer(buf *bytes.Buffer, size int) *bytes.Buffer {
var a = bytes.NewBuffer(buf.Bytes()[size:])
a.Grow(size)
defer func() {
if rec := recover(); rec != nil {
_, _ = fmt.Fprintf(os.Stderr, "recovering panic thread.\n%v\n", rec)
}
}()
var a = o.newBuffer(buf.Cap())
a.WriteString(buf.String()[size:])
return a
}

func (o *hkf) Run(ctx context.Context) {
var (
b = bytes.NewBuffer(make([]byte, sizeBuffer))
b = o.newBuffer(0)
t = time.NewTicker(time.Second)
e error
)

defer func() {
if rec := recover(); rec != nil {
_, _ = fmt.Fprintf(os.Stderr, "recovering panic thread.\n%v\n", rec)
}
//flush buffer before exit function
if b.Len() > 0 {
if e = o.writeBuffer(b); e != nil {
Expand Down Expand Up @@ -123,9 +140,11 @@ func (o *hkf) Run(ctx context.Context) {

case p := <-o.Data():
// prevent buffer overflow
if b.Len()+len(p) >= sizeBuffer {
b = o.freeBuffer(b, len(p))
b.Write(p)
if b.Len()+len(p) >= b.Cap() {
if a := o.freeBuffer(b, len(p)); a != nil {
b = a
b.Write(p)
}
} else {
_, _ = b.Write(p)
}
Expand Down
11 changes: 10 additions & 1 deletion logger/hooksyslog/system.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ package hooksyslog
import (
"context"
"fmt"
"os"
"sync"
"time"
)
Expand All @@ -42,6 +43,9 @@ func (o *hks) Run(ctx context.Context) {
)

defer func() {
if rec := recover(); rec != nil {
_, _ = fmt.Fprintf(os.Stderr, "recovering panic thread.\n%v\n", rec)
}
if s != nil {
w.Wait()
_ = s.Close()
Expand Down Expand Up @@ -78,7 +82,12 @@ func (o *hks) Run(ctx context.Context) {
func (o *hks) writeWrapper(w Wrapper, d data, done func()) {
var err error

defer done()
defer func() {
if rec := recover(); rec != nil {
_, _ = fmt.Fprintf(os.Stderr, "recovering panic thread.\n%v\n", rec)
}
done()
}()

if w == nil {
return
Expand Down
15 changes: 14 additions & 1 deletion server/runner/ticker/model.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ package ticker
import (
"context"
"errors"
"fmt"
"os"
"sync"
"time"
)
Expand Down Expand Up @@ -98,6 +100,9 @@ func (o *run) Start(ctx context.Context) error {
)

defer func() {
if rec := recover(); rec != nil {
_, _ = fmt.Fprintf(os.Stderr, "recovering panic thread.\n%v\n", rec)
}
if n != nil {
n()
}
Expand All @@ -113,7 +118,15 @@ func (o *run) Start(ctx context.Context) error {
for {
select {
case <-tck.C:
if e := fct(x, tck); e != nil {
f := func(ctx context.Context, tck *time.Ticker) error {
defer func() {
if rec := recover(); rec != nil {
_, _ = fmt.Fprintf(os.Stderr, "recovering panic calling function.\n%v\n", rec)
}
}()
return fct(ctx, tck)
}
if e := f(x, tck); e != nil {
o.errorsAdd(e)
}
case <-con.Done():
Expand Down
66 changes: 66 additions & 0 deletions status/cache.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
/*
* MIT License
*
* Copyright (c) 2022 Nicolas JUHEL
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
*
*/

package status

import (
"sync/atomic"
"time"
)

const timeCache = 3 * time.Second

type ch struct {
t *atomic.Value
c *atomic.Bool
f func() bool
}

func (o *ch) Time() time.Time {
if t := o.t.Load(); t != nil {
return t.(time.Time)
} else {
return time.Time{}
}
}

func (o *ch) IsCache() bool {
if t := o.Time(); !t.IsZero() && time.Since(t) < timeCache {
return o.c.Load()
}

if o.f != nil {
c := o.f()
o.c.Store(c)

t := time.Now()
o.t.Store(t)

return c
}

return false
}
22 changes: 18 additions & 4 deletions status/interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ package status
import (
"context"
"sync"
"sync/atomic"

liberr "github.com/nabbar/golib/errors"

Expand Down Expand Up @@ -64,16 +65,29 @@ type Status interface {

SetConfig(cfg Config)
IsHealthy(name ...string) bool
IsCacheHealthy() bool
}

func New(ctx libctx.FuncContext) Status {
return &sts{
m: sync.RWMutex{},
p: nil,
x: libctx.NewConfig[string](ctx),
s := &sts{
m: sync.RWMutex{},
p: nil,
r: nil,
x: libctx.NewConfig[string](ctx),
c: ch{
t: new(atomic.Value),
c: new(atomic.Bool),
f: nil,
},
fn: nil,
fr: nil,
fh: nil,
fd: nil,
}

s.c.f = func() bool {
return s.IsHealthy()
}

return s
}
5 changes: 5 additions & 0 deletions status/model.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ type sts struct {
p montps.FuncPool
r func() liberr.ReturnGin
x libctx.Config[string]
c ch

fn fctGetName
fr fctGetRelease
Expand All @@ -63,6 +64,10 @@ func (o *sts) checkFunc() bool {
return o.fn != nil && o.fr != nil && o.fh != nil && o.fd != nil
}

func (o *sts) IsCacheHealthy() bool {
return o.c.IsCache()
}

func (o *sts) IsHealthy(name ...string) bool {
s, _ := o.getStatus(name...)
return s == monsts.OK
Expand Down

0 comments on commit bb2f7f5

Please sign in to comment.