Commit d023bbb5 authored by Vladimir Barsukov's avatar Vladimir Barsukov
Browse files

zchronos

parent 287bee75
...@@ -3,7 +3,7 @@ module git.barsukov.pro/barsukov/zgo ...@@ -3,7 +3,7 @@ module git.barsukov.pro/barsukov/zgo
go 1.24 go 1.24
require ( require (
github.com/aws/aws-sdk-go v1.55.7 github.com/aws/aws-sdk-go v1.55.8
github.com/georgysavva/scany/v2 v2.1.4 github.com/georgysavva/scany/v2 v2.1.4
github.com/gin-gonic/gin v1.10.1 github.com/gin-gonic/gin v1.10.1
github.com/go-co-op/gocron v1.37.0 github.com/go-co-op/gocron v1.37.0
...@@ -18,7 +18,7 @@ require ( ...@@ -18,7 +18,7 @@ require (
require ( require (
github.com/bytedance/sonic v1.14.0 // indirect github.com/bytedance/sonic v1.14.0 // indirect
github.com/bytedance/sonic/loader v0.3.0 // indirect github.com/bytedance/sonic/loader v0.3.0 // indirect
github.com/cloudwego/base64x v0.1.5 // indirect github.com/cloudwego/base64x v0.1.6 // indirect
github.com/gabriel-vasile/mimetype v1.4.9 // indirect github.com/gabriel-vasile/mimetype v1.4.9 // indirect
github.com/gin-contrib/sse v1.1.0 // indirect github.com/gin-contrib/sse v1.1.0 // indirect
github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/locales v0.14.1 // indirect
......
github.com/aws/aws-sdk-go v1.55.7 h1:UJrkFq7es5CShfBwlWAC8DA077vp8PyVbQd3lqLiztE= github.com/aws/aws-sdk-go v1.55.8 h1:JRmEUbU52aJQZ2AjX4q4Wu7t4uZjOu71uyNmaWlUkJQ=
github.com/aws/aws-sdk-go v1.55.7/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= github.com/aws/aws-sdk-go v1.55.8/go.mod h1:ZkViS9AqA6otK+JBBNH2++sx1sgxrPKcSzPPvQkUtXk=
github.com/bytedance/sonic v1.14.0 h1:/OfKt8HFw0kh2rj8N0F6C/qPGRESq0BbaNZgcNXXzQQ= github.com/bytedance/sonic v1.14.0 h1:/OfKt8HFw0kh2rj8N0F6C/qPGRESq0BbaNZgcNXXzQQ=
github.com/bytedance/sonic v1.14.0/go.mod h1:WoEbx8WTcFJfzCe0hbmyTGrfjt8PzNEBdxlNUO24NhA= github.com/bytedance/sonic v1.14.0/go.mod h1:WoEbx8WTcFJfzCe0hbmyTGrfjt8PzNEBdxlNUO24NhA=
github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
github.com/bytedance/sonic/loader v0.3.0 h1:dskwH8edlzNMctoruo8FPTJDF3vLtDT0sXZwvZJyqeA= github.com/bytedance/sonic/loader v0.3.0 h1:dskwH8edlzNMctoruo8FPTJDF3vLtDT0sXZwvZJyqeA=
github.com/bytedance/sonic/loader v0.3.0/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI= github.com/bytedance/sonic/loader v0.3.0/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI=
github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4= github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M=
github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= github.com/cloudwego/base64x v0.1.6/go.mod h1:OFcloc187FXDaYHvrNIjxSe8ncn0OOM8gEHfghB2IPU=
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
github.com/cockroachdb/cockroach-go/v2 v2.2.0 h1:/5znzg5n373N/3ESjHF5SMLxiW4RKB05Ql//KWfeTFs= github.com/cockroachdb/cockroach-go/v2 v2.2.0 h1:/5znzg5n373N/3ESjHF5SMLxiW4RKB05Ql//KWfeTFs=
github.com/cockroachdb/cockroach-go/v2 v2.2.0/go.mod h1:u3MiKYGupPPjkn3ozknpMUpxPaNLTFWAya419/zv6eI= github.com/cockroachdb/cockroach-go/v2 v2.2.0/go.mod h1:u3MiKYGupPPjkn3ozknpMUpxPaNLTFWAya419/zv6eI=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
...@@ -56,10 +54,8 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGw ...@@ -56,10 +54,8 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGw
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y=
github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
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/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
...@@ -140,4 +136,3 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= ...@@ -140,4 +136,3 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
package zchronos
import (
"fmt"
"log"
"time"
)
type ZChronos struct {
Prefix string
StartTime time.Time
TruncateDur time.Duration
}
func New(prefix string, dur time.Duration) *ZChronos {
return &ZChronos{
Prefix: prefix,
StartTime: time.Now(),
TruncateDur: dur,
}
}
func Default(prefix string) *ZChronos {
return New(prefix, time.Millisecond*10)
}
func DefaultMillis(prefix string) *ZChronos {
return New(prefix, time.Millisecond)
}
func DefaultSecond(prefix string) *ZChronos {
return New(prefix, time.Second)
}
func (z *ZChronos) CopyWithReset() *ZChronos {
return New(z.Prefix, z.TruncateDur)
}
func (z *ZChronos) Printf(format string, v ...any) {
log.Printf("%v: %v; %v", z.Prefix, fmt.Sprintf(format, v...), time.Since(z.StartTime).Truncate(z.TruncateDur))
}
func (z *ZChronos) Errf(err error, format string, v ...any) {
log.Printf("%vErr: %v; %v", z.Prefix, fmt.Sprintf(format, v...), err)
}
func (z *ZChronos) Err(err error) {
log.Printf("%vErr: %v", z.Prefix, err)
}
func (z *ZChronos) Finish() {
log.Println(z.FinishStr())
}
func (z *ZChronos) FinishStr() string {
return fmt.Sprintf("%v: finish at %v", z.Prefix, time.Since(z.StartTime).Truncate(z.TruncateDur))
}
func (z *ZChronos) Since() time.Duration {
return time.Since(z.StartTime).Truncate(z.TruncateDur)
}
...@@ -4,6 +4,7 @@ import ( ...@@ -4,6 +4,7 @@ import (
_ "git.barsukov.pro/barsukov/zgo/zatomic" _ "git.barsukov.pro/barsukov/zgo/zatomic"
_ "git.barsukov.pro/barsukov/zgo/zbytes" _ "git.barsukov.pro/barsukov/zgo/zbytes"
_ "git.barsukov.pro/barsukov/zgo/zcache" _ "git.barsukov.pro/barsukov/zgo/zcache"
_ "git.barsukov.pro/barsukov/zgo/zchronos"
_ "git.barsukov.pro/barsukov/zgo/zcron" _ "git.barsukov.pro/barsukov/zgo/zcron"
_ "git.barsukov.pro/barsukov/zgo/zdb" _ "git.barsukov.pro/barsukov/zgo/zdb"
_ "git.barsukov.pro/barsukov/zgo/zdebug" _ "git.barsukov.pro/barsukov/zgo/zdebug"
......
...@@ -27,10 +27,15 @@ func (s *ZSem) AcquireN(n int) { ...@@ -27,10 +27,15 @@ func (s *ZSem) AcquireN(n int) {
func (s *ZSem) Acquire() { func (s *ZSem) Acquire() {
s.AcquireN(1) s.AcquireN(1)
} }
func (s *ZSem) AcquireErr() error { func (s *ZSem) AcquireErr() error {
return s.AcquireNErr(1) return s.AcquireNErr(1)
} }
func (s *ZSem) AcquireAll() {
s.AcquireN(s.qty)
}
func (s *ZSem) Release() { func (s *ZSem) Release() {
s.Sem.Release(1) s.Sem.Release(1)
} }
...@@ -39,8 +44,13 @@ func (s *ZSem) ReleaseN(n int) { ...@@ -39,8 +44,13 @@ func (s *ZSem) ReleaseN(n int) {
s.Sem.Release(int64(n)) s.Sem.Release(int64(n))
} }
func (s *ZSem) ReleaseAll() {
s.ReleaseN(s.qty)
}
func (s *ZSem) Wait() { func (s *ZSem) Wait() {
s.AcquireN(s.qty) s.AcquireAll()
s.ReleaseAll()
} }
func New(n int) *ZSem { func New(n int) *ZSem {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment