Compare commits
	
		
			10 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| d9afc9ce4f | |||
| 7a325e2c9e | |||
| 7daa927e70 | |||
|  | 54bb7f7acb | ||
| 9eaab95519 | |||
|  | 9219dc6b2a | ||
| 52607b38f1 | |||
|  | 886f046409 | ||
| 4d6d469d40 | |||
|  | 4a944274f4 | 
							
								
								
									
										2
									
								
								.github/workflows/job_sync.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/job_sync.yml
									
									
									
									
										vendored
									
									
								
							| @@ -25,7 +25,7 @@ jobs: | ||||
|         dst_hash=$(git ls-remote ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY} refs/heads/master | cut -f1) | ||||
|         echo "src_hash=$src_hash" | ||||
|         echo "dst_hash=$dst_hash" | ||||
|         if [ "$src_hash" != "$dst_hash" ]; then | ||||
|         if [ "$src_hash" != "$dst_hash" -a "$src_hash" != "" -a "$dst_hash" != "" ]; then | ||||
|           echo "sync_needed=true" >> $GITHUB_OUTPUT | ||||
|         else | ||||
|           echo "sync_needed=false" >> $GITHUB_OUTPUT | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| # Micro | ||||
|  | ||||
|  | ||||
| [](https://opensource.org/licenses/Apache-2.0) | ||||
| [](https://pkg.go.dev/go.unistack.org/micro/v4?tab=overview) | ||||
| [](https://git.unistack.org/unistack-org/micro/actions?query=workflow%3Abuild+branch%3Av4+event%3Apush) | ||||
|   | ||||
| @@ -15,11 +15,6 @@ import ( | ||||
| 	"go.unistack.org/micro/v4/tracer" | ||||
| ) | ||||
|  | ||||
| // DefaultCodecs will be used to encode/decode data | ||||
| var DefaultCodecs = map[string]codec.Codec{ | ||||
| 	"application/octet-stream": codec.NewCodec(), | ||||
| } | ||||
|  | ||||
| type noopClient struct { | ||||
| 	funcCall   FuncCall | ||||
| 	funcStream FuncStream | ||||
|   | ||||
| @@ -161,7 +161,7 @@ func NewOptions(opts ...Option) Options { | ||||
| 	options := Options{ | ||||
| 		Context:     context.Background(), | ||||
| 		ContentType: DefaultContentType, | ||||
| 		Codecs:      DefaultCodecs, | ||||
| 		Codecs:      make(map[string]codec.Codec), | ||||
| 		CallOptions: CallOptions{ | ||||
| 			Context:        context.Background(), | ||||
| 			Backoff:        DefaultBackoff, | ||||
|   | ||||
							
								
								
									
										30
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								go.mod
									
									
									
									
									
								
							| @@ -1,35 +1,33 @@ | ||||
| module go.unistack.org/micro/v4 | ||||
|  | ||||
| go 1.24 | ||||
| go 1.25 | ||||
|  | ||||
| require ( | ||||
| 	dario.cat/mergo v1.0.1 | ||||
| 	dario.cat/mergo v1.0.2 | ||||
| 	github.com/DATA-DOG/go-sqlmock v1.5.2 | ||||
| 	github.com/KimMachineGun/automemlimit v0.7.0 | ||||
| 	github.com/goccy/go-yaml v1.17.1 | ||||
| 	github.com/KimMachineGun/automemlimit v0.7.5 | ||||
| 	github.com/goccy/go-yaml v1.18.0 | ||||
| 	github.com/google/uuid v1.6.0 | ||||
| 	github.com/matoous/go-nanoid v1.5.1 | ||||
| 	github.com/patrickmn/go-cache v2.1.0+incompatible | ||||
| 	github.com/silas/dag v0.0.0-20220518035006-a7e85ada93c5 | ||||
| 	github.com/spf13/cast v1.7.1 | ||||
| 	github.com/stretchr/testify v1.10.0 | ||||
| 	github.com/spf13/cast v1.10.0 | ||||
| 	github.com/stretchr/testify v1.11.1 | ||||
| 	go.uber.org/atomic v1.11.0 | ||||
| 	go.uber.org/automaxprocs v1.6.0 | ||||
| 	go.unistack.org/micro-proto/v4 v4.1.0 | ||||
| 	golang.org/x/sync v0.10.0 | ||||
| 	golang.org/x/sync v0.17.0 | ||||
| 	golang.yandex/hasql/v2 v2.1.0 | ||||
| 	google.golang.org/grpc v1.69.4 | ||||
| 	google.golang.org/protobuf v1.36.3 | ||||
| 	google.golang.org/grpc v1.76.0 | ||||
| 	google.golang.org/protobuf v1.36.10 | ||||
| ) | ||||
|  | ||||
| require ( | ||||
| 	github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect | ||||
| 	github.com/davecgh/go-spew v1.1.1 // indirect | ||||
| 	github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect | ||||
| 	github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect | ||||
| 	github.com/rogpeppe/go-internal v1.13.1 // indirect | ||||
| 	golang.org/x/net v0.34.0 // indirect | ||||
| 	golang.org/x/sys v0.29.0 // indirect | ||||
| 	google.golang.org/genproto/googleapis/rpc v0.0.0-20241216192217-9240e9c98484 // indirect | ||||
| 	github.com/pmezard/go-difflib v1.0.0 // indirect | ||||
| 	github.com/rogpeppe/go-internal v1.14.1 // indirect | ||||
| 	golang.org/x/sys v0.37.0 // indirect | ||||
| 	google.golang.org/genproto/googleapis/rpc v0.0.0-20251029180050-ab9386a59fda // indirect | ||||
| 	gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect | ||||
| 	gopkg.in/yaml.v3 v3.0.1 // indirect | ||||
| ) | ||||
|   | ||||
							
								
								
									
										68
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										68
									
								
								go.sum
									
									
									
									
									
								
							| @@ -1,19 +1,19 @@ | ||||
| dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= | ||||
| dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= | ||||
| dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= | ||||
| dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA= | ||||
| github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= | ||||
| github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= | ||||
| github.com/KimMachineGun/automemlimit v0.7.0 h1:7G06p/dMSf7G8E6oq+f2uOPuVncFyIlDI/pBWK49u88= | ||||
| github.com/KimMachineGun/automemlimit v0.7.0/go.mod h1:QZxpHaGOQoYvFhv/r4u3U0JTC2ZcOwbSr11UZF46UBM= | ||||
| github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= | ||||
| github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||
| github.com/KimMachineGun/automemlimit v0.7.5 h1:RkbaC0MwhjL1ZuBKunGDjE/ggwAX43DwZrJqVwyveTk= | ||||
| github.com/KimMachineGun/automemlimit v0.7.5/go.mod h1:QZxpHaGOQoYvFhv/r4u3U0JTC2ZcOwbSr11UZF46UBM= | ||||
| 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/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= | ||||
| github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= | ||||
| github.com/goccy/go-yaml v1.17.1 h1:LI34wktB2xEE3ONG/2Ar54+/HJVBriAGJ55PHls4YuY= | ||||
| github.com/goccy/go-yaml v1.17.1/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= | ||||
| github.com/goccy/go-yaml v1.18.0 h1:8W7wMFS12Pcas7KU+VVkaiCng+kG8QiFeFwzFb+rwuw= | ||||
| github.com/goccy/go-yaml v1.18.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= | ||||
| github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= | ||||
| github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= | ||||
| github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= | ||||
| github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||||
| github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= | ||||
| github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= | ||||
| github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= | ||||
| github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | ||||
| github.com/kisielk/sqlstruct v0.0.0-20201105191214-5f3e10d3ab46/go.mod h1:yyMNCyc/Ib3bDTKd379tNMpB/7/H5TjM2Y9QJ5THLbE= | ||||
| @@ -30,40 +30,36 @@ github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaR | ||||
| github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= | ||||
| github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= | ||||
| github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= | ||||
| github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= | ||||
| github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||||
| github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= | ||||
| github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= | ||||
| github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= | ||||
| github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= | ||||
| 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/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= | ||||
| github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= | ||||
| github.com/silas/dag v0.0.0-20220518035006-a7e85ada93c5 h1:G/FZtUu7a6NTWl3KUHMV9jkLAh/Rvtf03NWMHaEDl+E= | ||||
| github.com/silas/dag v0.0.0-20220518035006-a7e85ada93c5/go.mod h1:7RTUFBdIRC9nZ7/3RyRNH1bdqIShrDejd1YbLwgPS+I= | ||||
| github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= | ||||
| github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= | ||||
| github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= | ||||
| github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= | ||||
| github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY= | ||||
| github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= | ||||
| github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= | ||||
| github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= | ||||
| go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= | ||||
| go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= | ||||
| go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= | ||||
| go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= | ||||
| go.unistack.org/micro-proto/v4 v4.1.0 h1:qPwL2n/oqh9RE3RTTDgt28XK3QzV597VugQPaw9lKUk= | ||||
| go.unistack.org/micro-proto/v4 v4.1.0/go.mod h1:ArmK7o+uFvxSY3dbJhKBBX4Pm1rhWdLEFf3LxBrMtec= | ||||
| golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= | ||||
| golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= | ||||
| golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= | ||||
| golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= | ||||
| golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= | ||||
| golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= | ||||
| golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= | ||||
| golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= | ||||
| golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs= | ||||
| golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= | ||||
| golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= | ||||
| golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= | ||||
| golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ= | ||||
| golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= | ||||
| golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4= | ||||
| golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU= | ||||
| golang.yandex/hasql/v2 v2.1.0 h1:7CaFFWeHoK5TvA+QvZzlKHlIN5sqNpqM8NSrXskZD/k= | ||||
| golang.yandex/hasql/v2 v2.1.0/go.mod h1:3Au1AxuJDCTXmS117BpbI6e+70kGWeyLR1qJAH6HdtA= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20241216192217-9240e9c98484 h1:Z7FRVJPSMaHQxD0uXU8WdgFh8PseLM8Q8NzhnpMrBhQ= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20241216192217-9240e9c98484/go.mod h1:lcTa1sDdWEIHMWlITnIczmw5w60CF9ffkb8Z+DVmmjA= | ||||
| google.golang.org/grpc v1.69.4 h1:MF5TftSMkd8GLw/m0KM6V8CMOCY6NZ1NQDPGFgbTt4A= | ||||
| google.golang.org/grpc v1.69.4/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4= | ||||
| google.golang.org/protobuf v1.36.3 h1:82DV7MYdb8anAVi3qge1wSnMDrnKK7ebr+I0hHRN1BU= | ||||
| google.golang.org/protobuf v1.36.3/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20251029180050-ab9386a59fda h1:i/Q+bfisr7gq6feoJnS/DlpdwEL4ihp41fvRiM3Ork0= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20251029180050-ab9386a59fda/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= | ||||
| google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A= | ||||
| google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c= | ||||
| google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= | ||||
| google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= | ||||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||
| 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= | ||||
|   | ||||
| @@ -52,6 +52,12 @@ type Options struct { | ||||
| 	AddStacktrace bool | ||||
| 	// DedupKeys deduplicate keys in log output | ||||
| 	DedupKeys bool | ||||
| 	// FatalFinalizers runs in order in [logger.Fatal] method | ||||
| 	FatalFinalizers []func(context.Context) | ||||
| } | ||||
|  | ||||
| var DefaultFatalFinalizer = func(ctx context.Context) { | ||||
| 	os.Exit(1) | ||||
| } | ||||
|  | ||||
| // NewOptions creates new options struct | ||||
| @@ -65,6 +71,7 @@ func NewOptions(opts ...Option) Options { | ||||
| 		AddSource:        true, | ||||
| 		TimeFunc:         time.Now, | ||||
| 		Meter:            meter.DefaultMeter, | ||||
| 		FatalFinalizers:  []func(context.Context){DefaultFatalFinalizer}, | ||||
| 	} | ||||
|  | ||||
| 	WithMicroKeys()(&options) | ||||
| @@ -76,6 +83,13 @@ func NewOptions(opts ...Option) Options { | ||||
| 	return options | ||||
| } | ||||
|  | ||||
| // WithFatalFinalizers set logger.Fatal finalizers | ||||
| func WithFatalFinalizers(fncs ...func(context.Context)) Option { | ||||
| 	return func(o *Options) { | ||||
| 		o.FatalFinalizers = fncs | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // WithContextAttrFuncs appends default funcs for the context attrs filler | ||||
| func WithContextAttrFuncs(fncs ...ContextAttrFunc) Option { | ||||
| 	return func(o *Options) { | ||||
|   | ||||
| @@ -4,14 +4,12 @@ import ( | ||||
| 	"context" | ||||
| 	"io" | ||||
| 	"log/slog" | ||||
| 	"os" | ||||
| 	"reflect" | ||||
| 	"regexp" | ||||
| 	"runtime" | ||||
| 	"strconv" | ||||
| 	"sync" | ||||
| 	"sync/atomic" | ||||
| 	"time" | ||||
|  | ||||
| 	"go.unistack.org/micro/v4/logger" | ||||
| 	"go.unistack.org/micro/v4/semconv" | ||||
| @@ -231,11 +229,12 @@ func (s *slogLogger) Error(ctx context.Context, msg string, attrs ...interface{} | ||||
|  | ||||
| func (s *slogLogger) Fatal(ctx context.Context, msg string, attrs ...interface{}) { | ||||
| 	s.printLog(ctx, logger.FatalLevel, msg, attrs...) | ||||
| 	for _, fn := range s.opts.FatalFinalizers { | ||||
| 		fn(ctx) | ||||
| 	} | ||||
| 	if closer, ok := s.opts.Out.(io.Closer); ok { | ||||
| 		closer.Close() | ||||
| 	} | ||||
| 	time.Sleep(1 * time.Second) | ||||
| 	os.Exit(1) | ||||
| } | ||||
|  | ||||
| func (s *slogLogger) Warn(ctx context.Context, msg string, attrs ...interface{}) { | ||||
|   | ||||
| @@ -469,3 +469,25 @@ func Test_WithContextAttrFunc(t *testing.T) { | ||||
|  | ||||
| 	// t.Logf("xxx %s", buf.Bytes()) | ||||
| } | ||||
|  | ||||
| func TestFatalFinalizers(t *testing.T) { | ||||
| 	ctx := context.TODO() | ||||
| 	buf := bytes.NewBuffer(nil) | ||||
| 	l := NewLogger( | ||||
| 		logger.WithLevel(logger.TraceLevel), | ||||
| 		logger.WithOutput(buf), | ||||
| 	) | ||||
| 	if err := l.Init( | ||||
| 		logger.WithFatalFinalizers(func(ctx context.Context) { | ||||
| 			l.Info(ctx, "fatal finalizer") | ||||
| 		})); err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	l.Fatal(ctx, "info_msg1") | ||||
| 	if !bytes.Contains(buf.Bytes(), []byte("fatal finalizer")) { | ||||
| 		t.Fatalf("logger dont have fatal message, buf %s", buf.Bytes()) | ||||
| 	} | ||||
| 	if !bytes.Contains(buf.Bytes(), []byte("info_msg1")) { | ||||
| 		t.Fatalf("logger dont have info_msg1 message, buf %s", buf.Bytes()) | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -49,9 +49,11 @@ type Meter interface { | ||||
| 	Set(opts ...Option) Meter | ||||
| 	// Histogram get or create histogram | ||||
| 	Histogram(name string, labels ...string) Histogram | ||||
| 	// HistogramExt get or create histogram with specified quantiles | ||||
| 	HistogramExt(name string, quantiles []float64, labels ...string) Histogram | ||||
| 	// Summary get or create summary | ||||
| 	Summary(name string, labels ...string) Summary | ||||
| 	// SummaryExt get or create summary with spcified quantiles and window time | ||||
| 	// SummaryExt get or create summary with specified quantiles and window time | ||||
| 	SummaryExt(name string, window time.Duration, quantiles []float64, labels ...string) Summary | ||||
| 	// Write writes metrics to io.Writer | ||||
| 	Write(w io.Writer, opts ...Option) error | ||||
| @@ -82,7 +84,11 @@ type FloatCounter interface { | ||||
|  | ||||
| // Gauge is a float64 gauge | ||||
| type Gauge interface { | ||||
| 	Add(float64) | ||||
| 	Get() float64 | ||||
| 	Set(float64) | ||||
| 	Dec() | ||||
| 	Inc() | ||||
| } | ||||
|  | ||||
| // Histogram is a histogram for non-negative values with automatically created buckets | ||||
|   | ||||
| @@ -70,6 +70,11 @@ func (r *noopMeter) Histogram(_ string, labels ...string) Histogram { | ||||
| 	return &noopHistogram{labels: labels} | ||||
| } | ||||
|  | ||||
| // HistogramExt implements the Meter interface | ||||
| func (r *noopMeter) HistogramExt(_ string, quantiles []float64, labels ...string) Histogram { | ||||
| 	return &noopHistogram{labels: labels} | ||||
| } | ||||
|  | ||||
| // Set implements the Meter interface | ||||
| func (r *noopMeter) Set(opts ...Option) Meter { | ||||
| 	m := &noopMeter{opts: r.opts} | ||||
| @@ -136,6 +141,18 @@ type noopGauge struct { | ||||
| 	labels []string | ||||
| } | ||||
|  | ||||
| func (r *noopGauge) Add(float64) { | ||||
| } | ||||
|  | ||||
| func (r *noopGauge) Set(float64) { | ||||
| } | ||||
|  | ||||
| func (r *noopGauge) Inc() { | ||||
| } | ||||
|  | ||||
| func (r *noopGauge) Dec() { | ||||
| } | ||||
|  | ||||
| func (r *noopGauge) Get() float64 { | ||||
| 	return 0 | ||||
| } | ||||
|   | ||||
| @@ -4,6 +4,8 @@ import ( | ||||
| 	"context" | ||||
| ) | ||||
|  | ||||
| var DefaultQuantiles = []float64{.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10} | ||||
|  | ||||
| // Option powers the configuration for metrics implementations: | ||||
| type Option func(*Options) | ||||
|  | ||||
| @@ -23,6 +25,8 @@ type Options struct { | ||||
| 	WriteProcessMetrics bool | ||||
| 	// WriteFDMetrics flag to write fd metrics | ||||
| 	WriteFDMetrics bool | ||||
| 	// Quantiles specifies buckets for histogram | ||||
| 	Quantiles []float64 | ||||
| } | ||||
|  | ||||
| // NewOptions prepares a set of options: | ||||
| @@ -61,14 +65,12 @@ func Address(value string) Option { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /* | ||||
| // TimingObjectives defines the desired spread of statistics for histogram / timing metrics: | ||||
| func TimingObjectives(value map[float64]float64) Option { | ||||
| // Quantiles defines the desired spread of statistics for histogram metrics: | ||||
| func Quantiles(quantiles []float64) Option { | ||||
| 	return func(o *Options) { | ||||
| 		o.TimingObjectives = value | ||||
| 		o.Quantiles = quantiles | ||||
| 	} | ||||
| } | ||||
| */ | ||||
|  | ||||
| // Labels add the meter labels | ||||
| func Labels(ls ...string) Option { | ||||
|   | ||||
| @@ -6,7 +6,6 @@ import ( | ||||
| 	"sync" | ||||
| 	"time" | ||||
|  | ||||
| 	"go.unistack.org/micro/v4/codec" | ||||
| 	"go.unistack.org/micro/v4/logger" | ||||
| 	"go.unistack.org/micro/v4/register" | ||||
| 	maddr "go.unistack.org/micro/v4/util/addr" | ||||
| @@ -14,11 +13,6 @@ import ( | ||||
| 	"go.unistack.org/micro/v4/util/rand" | ||||
| ) | ||||
|  | ||||
| // DefaultCodecs will be used to encode/decode | ||||
| var DefaultCodecs = map[string]codec.Codec{ | ||||
| 	"application/octet-stream": codec.NewCodec(), | ||||
| } | ||||
|  | ||||
| type rpcHandler struct { | ||||
| 	opts    HandlerOptions | ||||
| 	handler interface{} | ||||
|   | ||||
| @@ -8,7 +8,6 @@ import ( | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/KimMachineGun/automemlimit/memlimit" | ||||
| 	"go.uber.org/automaxprocs/maxprocs" | ||||
| 	"go.unistack.org/micro/v4/broker" | ||||
| 	"go.unistack.org/micro/v4/client" | ||||
| 	"go.unistack.org/micro/v4/config" | ||||
| @@ -23,8 +22,8 @@ import ( | ||||
| ) | ||||
|  | ||||
| func init() { | ||||
| 	_, _ = maxprocs.Set() | ||||
| 	_, _ = memlimit.SetGoMemLimitWithOpts( | ||||
| 		memlimit.WithRefreshInterval(1*time.Minute), | ||||
| 		memlimit.WithRatio(0.9), | ||||
| 		memlimit.WithProvider( | ||||
| 			memlimit.ApplyFallback( | ||||
|   | ||||
		Reference in New Issue
	
	Block a user