2024-03-11 11:09:50 +00:00
|
|
|
package circuitbreaker
|
|
|
|
|
|
|
|
import (
|
2024-07-01 15:46:57 +00:00
|
|
|
"context"
|
2024-03-11 11:09:50 +00:00
|
|
|
"fmt"
|
2024-10-15 15:59:17 +00:00
|
|
|
"time"
|
2024-03-11 11:09:50 +00:00
|
|
|
|
|
|
|
"github.com/afex/hystrix-go/hystrix"
|
test_: Code Migration from status-cli-tests
author shashankshampi <shashank.sanket1995@gmail.com> 1729780155 +0530
committer shashankshampi <shashank.sanket1995@gmail.com> 1730274350 +0530
test: Code Migration from status-cli-tests
fix_: functional tests (#5979)
* fix_: generate on test-functional
* chore(test)_: fix functional test assertion
---------
Co-authored-by: Siddarth Kumar <siddarthkay@gmail.com>
feat(accounts)_: cherry-pick Persist acceptance of Terms of Use & Privacy policy (#5766) (#5977)
* feat(accounts)_: Persist acceptance of Terms of Use & Privacy policy (#5766)
The original GH issue https://github.com/status-im/status-mobile/issues/21113
came from a request from the Legal team. We must show to Status v1 users the new
terms (Terms of Use & Privacy Policy) right after they upgrade to Status v2
from the stores.
The solution we use is to create a flag in the accounts table, named
hasAcceptedTerms. The flag will be set to true on the first account ever
created in v2 and we provide a native call in mobile/status.go#AcceptTerms,
which allows the client to persist the user's choice in case they are upgrading
(from v1 -> v2, or from a v2 older than this PR).
This solution is not the best because we should store the setting in a separate
table, not in the accounts table.
Related Mobile PR https://github.com/status-im/status-mobile/pull/21124
* fix(test)_: Compare addresses using uppercased strings
---------
Co-authored-by: Icaro Motta <icaro.ldm@gmail.com>
test_: restore account (#5960)
feat_: `LogOnPanic` linter (#5969)
* feat_: LogOnPanic linter
* fix_: add missing defer LogOnPanic
* chore_: make vendor
* fix_: tests, address pr comments
* fix_: address pr comments
fix(ci)_: remove workspace and tmp dir
This ensures we do not encounter weird errors like:
```
+ ln -s /home/jenkins/workspace/go_prs_linux_x86_64_main_PR-5907 /home/jenkins/workspace/go_prs_linux_x86_64_main_PR-5907@tmp/go/src/github.com/status-im/status-go
ln: failed to create symbolic link '/home/jenkins/workspace/go_prs_linux_x86_64_main_PR-5907@tmp/go/src/github.com/status-im/status-go': File exists
script returned exit code 1
```
Signed-off-by: Jakub Sokołowski <jakub@status.im>
chore_: enable windows and macos CI build (#5840)
- Added support for Windows and macOS in CI pipelines
- Added missing dependencies for Windows and x86-64-darwin
- Resolved macOS SDK version compatibility for darwin-x86_64
The `mkShell` override was necessary to ensure compatibility with the newer
macOS SDK (version 11.0) for x86_64. The default SDK (10.12) was causing build failures
because of the missing libs and frameworks. OverrideSDK creates a mapping from
the default SDK in all package categories to the requested SDK (11.0).
fix(contacts)_: fix trust status not being saved to cache when changed (#5965)
Fixes https://github.com/status-im/status-desktop/issues/16392
cleanup
added logger and cleanup
review comments changes
fix_: functional tests (#5979)
* fix_: generate on test-functional
* chore(test)_: fix functional test assertion
---------
Co-authored-by: Siddarth Kumar <siddarthkay@gmail.com>
feat(accounts)_: cherry-pick Persist acceptance of Terms of Use & Privacy policy (#5766) (#5977)
* feat(accounts)_: Persist acceptance of Terms of Use & Privacy policy (#5766)
The original GH issue https://github.com/status-im/status-mobile/issues/21113
came from a request from the Legal team. We must show to Status v1 users the new
terms (Terms of Use & Privacy Policy) right after they upgrade to Status v2
from the stores.
The solution we use is to create a flag in the accounts table, named
hasAcceptedTerms. The flag will be set to true on the first account ever
created in v2 and we provide a native call in mobile/status.go#AcceptTerms,
which allows the client to persist the user's choice in case they are upgrading
(from v1 -> v2, or from a v2 older than this PR).
This solution is not the best because we should store the setting in a separate
table, not in the accounts table.
Related Mobile PR https://github.com/status-im/status-mobile/pull/21124
* fix(test)_: Compare addresses using uppercased strings
---------
Co-authored-by: Icaro Motta <icaro.ldm@gmail.com>
test_: restore account (#5960)
feat_: `LogOnPanic` linter (#5969)
* feat_: LogOnPanic linter
* fix_: add missing defer LogOnPanic
* chore_: make vendor
* fix_: tests, address pr comments
* fix_: address pr comments
chore_: enable windows and macos CI build (#5840)
- Added support for Windows and macOS in CI pipelines
- Added missing dependencies for Windows and x86-64-darwin
- Resolved macOS SDK version compatibility for darwin-x86_64
The `mkShell` override was necessary to ensure compatibility with the newer
macOS SDK (version 11.0) for x86_64. The default SDK (10.12) was causing build failures
because of the missing libs and frameworks. OverrideSDK creates a mapping from
the default SDK in all package categories to the requested SDK (11.0).
fix(contacts)_: fix trust status not being saved to cache when changed (#5965)
Fixes https://github.com/status-im/status-desktop/issues/16392
test_: remove port bind
chore(wallet)_: move route execution code to separate module
chore_: replace geth logger with zap logger (#5962)
closes: #6002
feat(telemetry)_: add metrics for message reliability (#5899)
* feat(telemetry)_: track message reliability
Add metrics for dial errors, missed messages,
missed relevant messages, and confirmed delivery.
* fix_: handle error from json marshal
chore_: use zap logger as request logger
iterates: status-im/status-desktop#16536
test_: unique project per run
test_: use docker compose v2, more concrete project name
fix(codecov)_: ignore folders without tests
Otherwise Codecov reports incorrect numbers when making changes.
https://docs.codecov.com/docs/ignoring-paths
Signed-off-by: Jakub Sokołowski <jakub@status.im>
test_: verify schema of signals during init; fix schema verification warnings (#5947)
fix_: update defaultGorushURL (#6011)
fix(tests)_: use non-standard port to avoid conflicts
We have observed `nimbus-eth2` build failures reporting this port:
```json
{
"lvl": "NTC",
"ts": "2024-10-28 13:51:32.308+00:00",
"msg": "REST HTTP server could not be started",
"topics": "beacnde",
"address": "127.0.0.1:5432",
"reason": "(98) Address already in use"
}
```
https://ci.status.im/job/nimbus-eth2/job/platforms/job/linux/job/x86_64/job/main/job/PR-6683/3/
Signed-off-by: Jakub Sokołowski <jakub@status.im>
fix_: create request logger ad-hoc in tests
Fixes `TestCall` failing when run concurrently.
chore_: configure codecov (#6005)
* chore_: configure codecov
* fix_: after_n_builds
2024-10-24 14:29:15 +00:00
|
|
|
"go.uber.org/zap"
|
2024-08-19 12:44:46 +00:00
|
|
|
|
test_: Code Migration from status-cli-tests
author shashankshampi <shashank.sanket1995@gmail.com> 1729780155 +0530
committer shashankshampi <shashank.sanket1995@gmail.com> 1730274350 +0530
test: Code Migration from status-cli-tests
fix_: functional tests (#5979)
* fix_: generate on test-functional
* chore(test)_: fix functional test assertion
---------
Co-authored-by: Siddarth Kumar <siddarthkay@gmail.com>
feat(accounts)_: cherry-pick Persist acceptance of Terms of Use & Privacy policy (#5766) (#5977)
* feat(accounts)_: Persist acceptance of Terms of Use & Privacy policy (#5766)
The original GH issue https://github.com/status-im/status-mobile/issues/21113
came from a request from the Legal team. We must show to Status v1 users the new
terms (Terms of Use & Privacy Policy) right after they upgrade to Status v2
from the stores.
The solution we use is to create a flag in the accounts table, named
hasAcceptedTerms. The flag will be set to true on the first account ever
created in v2 and we provide a native call in mobile/status.go#AcceptTerms,
which allows the client to persist the user's choice in case they are upgrading
(from v1 -> v2, or from a v2 older than this PR).
This solution is not the best because we should store the setting in a separate
table, not in the accounts table.
Related Mobile PR https://github.com/status-im/status-mobile/pull/21124
* fix(test)_: Compare addresses using uppercased strings
---------
Co-authored-by: Icaro Motta <icaro.ldm@gmail.com>
test_: restore account (#5960)
feat_: `LogOnPanic` linter (#5969)
* feat_: LogOnPanic linter
* fix_: add missing defer LogOnPanic
* chore_: make vendor
* fix_: tests, address pr comments
* fix_: address pr comments
fix(ci)_: remove workspace and tmp dir
This ensures we do not encounter weird errors like:
```
+ ln -s /home/jenkins/workspace/go_prs_linux_x86_64_main_PR-5907 /home/jenkins/workspace/go_prs_linux_x86_64_main_PR-5907@tmp/go/src/github.com/status-im/status-go
ln: failed to create symbolic link '/home/jenkins/workspace/go_prs_linux_x86_64_main_PR-5907@tmp/go/src/github.com/status-im/status-go': File exists
script returned exit code 1
```
Signed-off-by: Jakub Sokołowski <jakub@status.im>
chore_: enable windows and macos CI build (#5840)
- Added support for Windows and macOS in CI pipelines
- Added missing dependencies for Windows and x86-64-darwin
- Resolved macOS SDK version compatibility for darwin-x86_64
The `mkShell` override was necessary to ensure compatibility with the newer
macOS SDK (version 11.0) for x86_64. The default SDK (10.12) was causing build failures
because of the missing libs and frameworks. OverrideSDK creates a mapping from
the default SDK in all package categories to the requested SDK (11.0).
fix(contacts)_: fix trust status not being saved to cache when changed (#5965)
Fixes https://github.com/status-im/status-desktop/issues/16392
cleanup
added logger and cleanup
review comments changes
fix_: functional tests (#5979)
* fix_: generate on test-functional
* chore(test)_: fix functional test assertion
---------
Co-authored-by: Siddarth Kumar <siddarthkay@gmail.com>
feat(accounts)_: cherry-pick Persist acceptance of Terms of Use & Privacy policy (#5766) (#5977)
* feat(accounts)_: Persist acceptance of Terms of Use & Privacy policy (#5766)
The original GH issue https://github.com/status-im/status-mobile/issues/21113
came from a request from the Legal team. We must show to Status v1 users the new
terms (Terms of Use & Privacy Policy) right after they upgrade to Status v2
from the stores.
The solution we use is to create a flag in the accounts table, named
hasAcceptedTerms. The flag will be set to true on the first account ever
created in v2 and we provide a native call in mobile/status.go#AcceptTerms,
which allows the client to persist the user's choice in case they are upgrading
(from v1 -> v2, or from a v2 older than this PR).
This solution is not the best because we should store the setting in a separate
table, not in the accounts table.
Related Mobile PR https://github.com/status-im/status-mobile/pull/21124
* fix(test)_: Compare addresses using uppercased strings
---------
Co-authored-by: Icaro Motta <icaro.ldm@gmail.com>
test_: restore account (#5960)
feat_: `LogOnPanic` linter (#5969)
* feat_: LogOnPanic linter
* fix_: add missing defer LogOnPanic
* chore_: make vendor
* fix_: tests, address pr comments
* fix_: address pr comments
chore_: enable windows and macos CI build (#5840)
- Added support for Windows and macOS in CI pipelines
- Added missing dependencies for Windows and x86-64-darwin
- Resolved macOS SDK version compatibility for darwin-x86_64
The `mkShell` override was necessary to ensure compatibility with the newer
macOS SDK (version 11.0) for x86_64. The default SDK (10.12) was causing build failures
because of the missing libs and frameworks. OverrideSDK creates a mapping from
the default SDK in all package categories to the requested SDK (11.0).
fix(contacts)_: fix trust status not being saved to cache when changed (#5965)
Fixes https://github.com/status-im/status-desktop/issues/16392
test_: remove port bind
chore(wallet)_: move route execution code to separate module
chore_: replace geth logger with zap logger (#5962)
closes: #6002
feat(telemetry)_: add metrics for message reliability (#5899)
* feat(telemetry)_: track message reliability
Add metrics for dial errors, missed messages,
missed relevant messages, and confirmed delivery.
* fix_: handle error from json marshal
chore_: use zap logger as request logger
iterates: status-im/status-desktop#16536
test_: unique project per run
test_: use docker compose v2, more concrete project name
fix(codecov)_: ignore folders without tests
Otherwise Codecov reports incorrect numbers when making changes.
https://docs.codecov.com/docs/ignoring-paths
Signed-off-by: Jakub Sokołowski <jakub@status.im>
test_: verify schema of signals during init; fix schema verification warnings (#5947)
fix_: update defaultGorushURL (#6011)
fix(tests)_: use non-standard port to avoid conflicts
We have observed `nimbus-eth2` build failures reporting this port:
```json
{
"lvl": "NTC",
"ts": "2024-10-28 13:51:32.308+00:00",
"msg": "REST HTTP server could not be started",
"topics": "beacnde",
"address": "127.0.0.1:5432",
"reason": "(98) Address already in use"
}
```
https://ci.status.im/job/nimbus-eth2/job/platforms/job/linux/job/x86_64/job/main/job/PR-6683/3/
Signed-off-by: Jakub Sokołowski <jakub@status.im>
fix_: create request logger ad-hoc in tests
Fixes `TestCall` failing when run concurrently.
chore_: configure codecov (#6005)
* chore_: configure codecov
* fix_: after_n_builds
2024-10-24 14:29:15 +00:00
|
|
|
"github.com/status-im/status-go/logutils"
|
2024-03-11 11:09:50 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
type FallbackFunc func() ([]any, error)
|
|
|
|
|
|
|
|
type CommandResult struct {
|
2024-10-15 15:59:17 +00:00
|
|
|
res []any
|
|
|
|
err error
|
|
|
|
functorCallStatuses []FunctorCallStatus
|
|
|
|
cancelled bool
|
|
|
|
}
|
|
|
|
|
|
|
|
type FunctorCallStatus struct {
|
|
|
|
Name string
|
|
|
|
Timestamp time.Time
|
|
|
|
Err error
|
2024-03-11 11:09:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (cr CommandResult) Result() []any {
|
|
|
|
return cr.res
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cr CommandResult) Error() error {
|
|
|
|
return cr.err
|
|
|
|
}
|
2024-10-15 15:59:17 +00:00
|
|
|
func (cr CommandResult) Cancelled() bool {
|
|
|
|
return cr.cancelled
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cr CommandResult) FunctorCallStatuses() []FunctorCallStatus {
|
|
|
|
return cr.functorCallStatuses
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cr *CommandResult) addCallStatus(circuitName string, err error) {
|
|
|
|
cr.functorCallStatuses = append(cr.functorCallStatuses, FunctorCallStatus{
|
|
|
|
Name: circuitName,
|
|
|
|
Timestamp: time.Now(),
|
|
|
|
Err: err,
|
|
|
|
})
|
|
|
|
}
|
2024-03-11 11:09:50 +00:00
|
|
|
|
|
|
|
type Command struct {
|
2024-07-01 15:46:57 +00:00
|
|
|
ctx context.Context
|
2024-03-11 11:09:50 +00:00
|
|
|
functors []*Functor
|
2024-07-01 15:46:57 +00:00
|
|
|
cancel bool
|
2024-03-11 11:09:50 +00:00
|
|
|
}
|
|
|
|
|
2024-07-01 15:46:57 +00:00
|
|
|
func NewCommand(ctx context.Context, functors []*Functor) *Command {
|
2024-03-11 11:09:50 +00:00
|
|
|
return &Command{
|
2024-07-01 15:46:57 +00:00
|
|
|
ctx: ctx,
|
2024-03-11 11:09:50 +00:00
|
|
|
functors: functors,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cmd *Command) Add(ftor *Functor) {
|
|
|
|
cmd.functors = append(cmd.functors, ftor)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cmd *Command) IsEmpty() bool {
|
|
|
|
return len(cmd.functors) == 0
|
|
|
|
}
|
|
|
|
|
2024-07-01 15:46:57 +00:00
|
|
|
func (cmd *Command) Cancel() {
|
|
|
|
cmd.cancel = true
|
|
|
|
}
|
|
|
|
|
2024-03-11 11:09:50 +00:00
|
|
|
type Config struct {
|
|
|
|
Timeout int
|
|
|
|
MaxConcurrentRequests int
|
|
|
|
RequestVolumeThreshold int
|
|
|
|
SleepWindow int
|
|
|
|
ErrorPercentThreshold int
|
|
|
|
}
|
|
|
|
|
|
|
|
type CircuitBreaker struct {
|
2024-07-29 17:07:43 +00:00
|
|
|
config Config
|
|
|
|
circuitNameHandler func(string) string
|
2024-03-11 11:09:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func NewCircuitBreaker(config Config) *CircuitBreaker {
|
|
|
|
return &CircuitBreaker{
|
|
|
|
config: config,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
type Functor struct {
|
2024-07-01 15:46:57 +00:00
|
|
|
exec FallbackFunc
|
|
|
|
circuitName string
|
2024-03-11 11:09:50 +00:00
|
|
|
}
|
|
|
|
|
2024-07-01 15:46:57 +00:00
|
|
|
func NewFunctor(exec FallbackFunc, circuitName string) *Functor {
|
2024-03-11 11:09:50 +00:00
|
|
|
return &Functor{
|
2024-07-01 15:46:57 +00:00
|
|
|
exec: exec,
|
|
|
|
circuitName: circuitName,
|
2024-03-11 11:09:50 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-08-19 12:44:46 +00:00
|
|
|
func accumulateCommandError(result CommandResult, circuitName string, err error) CommandResult {
|
|
|
|
// Accumulate errors
|
|
|
|
if result.err != nil {
|
|
|
|
result.err = fmt.Errorf("%w, %s.error: %w", result.err, circuitName, err)
|
|
|
|
} else {
|
|
|
|
result.err = fmt.Errorf("%s.error: %w", circuitName, err)
|
|
|
|
}
|
|
|
|
return result
|
|
|
|
}
|
|
|
|
|
2024-07-01 15:46:57 +00:00
|
|
|
// Executes the command in its circuit if set.
|
|
|
|
// If the command's circuit is not configured, the circuit of the CircuitBreaker is used.
|
|
|
|
// This is a blocking function.
|
|
|
|
func (cb *CircuitBreaker) Execute(cmd *Command) CommandResult {
|
|
|
|
if cmd == nil || cmd.IsEmpty() {
|
|
|
|
return CommandResult{err: fmt.Errorf("command is nil or empty")}
|
|
|
|
}
|
|
|
|
|
2024-03-11 11:09:50 +00:00
|
|
|
var result CommandResult
|
2024-07-01 15:46:57 +00:00
|
|
|
ctx := cmd.ctx
|
|
|
|
if ctx == nil {
|
|
|
|
ctx = context.Background()
|
|
|
|
}
|
2024-03-11 11:09:50 +00:00
|
|
|
|
2024-08-14 11:43:51 +00:00
|
|
|
for i, f := range cmd.functors {
|
2024-07-01 15:46:57 +00:00
|
|
|
if cmd.cancel {
|
2024-10-15 15:59:17 +00:00
|
|
|
result.cancelled = true
|
2024-07-01 15:46:57 +00:00
|
|
|
break
|
2024-03-11 11:09:50 +00:00
|
|
|
}
|
|
|
|
|
2024-08-14 11:43:51 +00:00
|
|
|
var err error
|
2024-10-15 15:59:17 +00:00
|
|
|
circuitName := f.circuitName
|
|
|
|
if cb.circuitNameHandler != nil {
|
|
|
|
circuitName = cb.circuitNameHandler(circuitName)
|
|
|
|
}
|
|
|
|
|
2024-08-14 11:43:51 +00:00
|
|
|
// if last command, execute without circuit
|
|
|
|
if i == len(cmd.functors)-1 {
|
|
|
|
res, execErr := f.exec()
|
|
|
|
err = execErr
|
2024-03-11 11:09:50 +00:00
|
|
|
if err == nil {
|
2024-10-15 15:59:17 +00:00
|
|
|
result.res = res
|
|
|
|
result.err = nil
|
2024-03-11 11:09:50 +00:00
|
|
|
}
|
2024-10-15 15:59:17 +00:00
|
|
|
result.addCallStatus(circuitName, err)
|
2024-08-14 11:43:51 +00:00
|
|
|
} else {
|
|
|
|
if hystrix.GetCircuitSettings()[circuitName] == nil {
|
|
|
|
hystrix.ConfigureCommand(circuitName, hystrix.CommandConfig{
|
|
|
|
Timeout: cb.config.Timeout,
|
|
|
|
MaxConcurrentRequests: cb.config.MaxConcurrentRequests,
|
|
|
|
RequestVolumeThreshold: cb.config.RequestVolumeThreshold,
|
|
|
|
SleepWindow: cb.config.SleepWindow,
|
|
|
|
ErrorPercentThreshold: cb.config.ErrorPercentThreshold,
|
|
|
|
})
|
|
|
|
}
|
2024-03-11 11:09:50 +00:00
|
|
|
|
2024-08-14 11:43:51 +00:00
|
|
|
err = hystrix.DoC(ctx, circuitName, func(ctx context.Context) error {
|
|
|
|
res, err := f.exec()
|
|
|
|
// Write to result only if success
|
|
|
|
if err == nil {
|
2024-10-15 15:59:17 +00:00
|
|
|
result.res = res
|
|
|
|
result.err = nil
|
2024-08-14 11:43:51 +00:00
|
|
|
}
|
2024-10-15 15:59:17 +00:00
|
|
|
result.addCallStatus(circuitName, err)
|
2024-08-19 12:44:46 +00:00
|
|
|
|
|
|
|
// If the command has been cancelled, we don't count
|
|
|
|
// the error towars breaking the circuit, and then we break
|
|
|
|
if cmd.cancel {
|
2024-10-15 15:59:17 +00:00
|
|
|
result = accumulateCommandError(result, circuitName, err)
|
|
|
|
result.cancelled = true
|
2024-08-19 12:44:46 +00:00
|
|
|
return nil
|
|
|
|
}
|
|
|
|
if err != nil {
|
test_: Code Migration from status-cli-tests
author shashankshampi <shashank.sanket1995@gmail.com> 1729780155 +0530
committer shashankshampi <shashank.sanket1995@gmail.com> 1730274350 +0530
test: Code Migration from status-cli-tests
fix_: functional tests (#5979)
* fix_: generate on test-functional
* chore(test)_: fix functional test assertion
---------
Co-authored-by: Siddarth Kumar <siddarthkay@gmail.com>
feat(accounts)_: cherry-pick Persist acceptance of Terms of Use & Privacy policy (#5766) (#5977)
* feat(accounts)_: Persist acceptance of Terms of Use & Privacy policy (#5766)
The original GH issue https://github.com/status-im/status-mobile/issues/21113
came from a request from the Legal team. We must show to Status v1 users the new
terms (Terms of Use & Privacy Policy) right after they upgrade to Status v2
from the stores.
The solution we use is to create a flag in the accounts table, named
hasAcceptedTerms. The flag will be set to true on the first account ever
created in v2 and we provide a native call in mobile/status.go#AcceptTerms,
which allows the client to persist the user's choice in case they are upgrading
(from v1 -> v2, or from a v2 older than this PR).
This solution is not the best because we should store the setting in a separate
table, not in the accounts table.
Related Mobile PR https://github.com/status-im/status-mobile/pull/21124
* fix(test)_: Compare addresses using uppercased strings
---------
Co-authored-by: Icaro Motta <icaro.ldm@gmail.com>
test_: restore account (#5960)
feat_: `LogOnPanic` linter (#5969)
* feat_: LogOnPanic linter
* fix_: add missing defer LogOnPanic
* chore_: make vendor
* fix_: tests, address pr comments
* fix_: address pr comments
fix(ci)_: remove workspace and tmp dir
This ensures we do not encounter weird errors like:
```
+ ln -s /home/jenkins/workspace/go_prs_linux_x86_64_main_PR-5907 /home/jenkins/workspace/go_prs_linux_x86_64_main_PR-5907@tmp/go/src/github.com/status-im/status-go
ln: failed to create symbolic link '/home/jenkins/workspace/go_prs_linux_x86_64_main_PR-5907@tmp/go/src/github.com/status-im/status-go': File exists
script returned exit code 1
```
Signed-off-by: Jakub Sokołowski <jakub@status.im>
chore_: enable windows and macos CI build (#5840)
- Added support for Windows and macOS in CI pipelines
- Added missing dependencies for Windows and x86-64-darwin
- Resolved macOS SDK version compatibility for darwin-x86_64
The `mkShell` override was necessary to ensure compatibility with the newer
macOS SDK (version 11.0) for x86_64. The default SDK (10.12) was causing build failures
because of the missing libs and frameworks. OverrideSDK creates a mapping from
the default SDK in all package categories to the requested SDK (11.0).
fix(contacts)_: fix trust status not being saved to cache when changed (#5965)
Fixes https://github.com/status-im/status-desktop/issues/16392
cleanup
added logger and cleanup
review comments changes
fix_: functional tests (#5979)
* fix_: generate on test-functional
* chore(test)_: fix functional test assertion
---------
Co-authored-by: Siddarth Kumar <siddarthkay@gmail.com>
feat(accounts)_: cherry-pick Persist acceptance of Terms of Use & Privacy policy (#5766) (#5977)
* feat(accounts)_: Persist acceptance of Terms of Use & Privacy policy (#5766)
The original GH issue https://github.com/status-im/status-mobile/issues/21113
came from a request from the Legal team. We must show to Status v1 users the new
terms (Terms of Use & Privacy Policy) right after they upgrade to Status v2
from the stores.
The solution we use is to create a flag in the accounts table, named
hasAcceptedTerms. The flag will be set to true on the first account ever
created in v2 and we provide a native call in mobile/status.go#AcceptTerms,
which allows the client to persist the user's choice in case they are upgrading
(from v1 -> v2, or from a v2 older than this PR).
This solution is not the best because we should store the setting in a separate
table, not in the accounts table.
Related Mobile PR https://github.com/status-im/status-mobile/pull/21124
* fix(test)_: Compare addresses using uppercased strings
---------
Co-authored-by: Icaro Motta <icaro.ldm@gmail.com>
test_: restore account (#5960)
feat_: `LogOnPanic` linter (#5969)
* feat_: LogOnPanic linter
* fix_: add missing defer LogOnPanic
* chore_: make vendor
* fix_: tests, address pr comments
* fix_: address pr comments
chore_: enable windows and macos CI build (#5840)
- Added support for Windows and macOS in CI pipelines
- Added missing dependencies for Windows and x86-64-darwin
- Resolved macOS SDK version compatibility for darwin-x86_64
The `mkShell` override was necessary to ensure compatibility with the newer
macOS SDK (version 11.0) for x86_64. The default SDK (10.12) was causing build failures
because of the missing libs and frameworks. OverrideSDK creates a mapping from
the default SDK in all package categories to the requested SDK (11.0).
fix(contacts)_: fix trust status not being saved to cache when changed (#5965)
Fixes https://github.com/status-im/status-desktop/issues/16392
test_: remove port bind
chore(wallet)_: move route execution code to separate module
chore_: replace geth logger with zap logger (#5962)
closes: #6002
feat(telemetry)_: add metrics for message reliability (#5899)
* feat(telemetry)_: track message reliability
Add metrics for dial errors, missed messages,
missed relevant messages, and confirmed delivery.
* fix_: handle error from json marshal
chore_: use zap logger as request logger
iterates: status-im/status-desktop#16536
test_: unique project per run
test_: use docker compose v2, more concrete project name
fix(codecov)_: ignore folders without tests
Otherwise Codecov reports incorrect numbers when making changes.
https://docs.codecov.com/docs/ignoring-paths
Signed-off-by: Jakub Sokołowski <jakub@status.im>
test_: verify schema of signals during init; fix schema verification warnings (#5947)
fix_: update defaultGorushURL (#6011)
fix(tests)_: use non-standard port to avoid conflicts
We have observed `nimbus-eth2` build failures reporting this port:
```json
{
"lvl": "NTC",
"ts": "2024-10-28 13:51:32.308+00:00",
"msg": "REST HTTP server could not be started",
"topics": "beacnde",
"address": "127.0.0.1:5432",
"reason": "(98) Address already in use"
}
```
https://ci.status.im/job/nimbus-eth2/job/platforms/job/linux/job/x86_64/job/main/job/PR-6683/3/
Signed-off-by: Jakub Sokołowski <jakub@status.im>
fix_: create request logger ad-hoc in tests
Fixes `TestCall` failing when run concurrently.
chore_: configure codecov (#6005)
* chore_: configure codecov
* fix_: after_n_builds
2024-10-24 14:29:15 +00:00
|
|
|
logutils.ZapLogger().Warn("hystrix error", zap.String("provider", circuitName), zap.Error(err))
|
2024-08-19 12:44:46 +00:00
|
|
|
}
|
2024-08-14 11:43:51 +00:00
|
|
|
return err
|
|
|
|
}, nil)
|
|
|
|
}
|
2024-07-01 15:46:57 +00:00
|
|
|
if err == nil {
|
|
|
|
break
|
|
|
|
}
|
2024-03-11 11:09:50 +00:00
|
|
|
|
2024-10-15 15:59:17 +00:00
|
|
|
result = accumulateCommandError(result, circuitName, err)
|
2024-08-19 12:44:46 +00:00
|
|
|
|
2024-07-01 15:46:57 +00:00
|
|
|
// Lets abuse every provider with the same amount of MaxConcurrentRequests,
|
|
|
|
// keep iterating even in case of ErrMaxConcurrency error
|
2024-03-11 11:09:50 +00:00
|
|
|
}
|
|
|
|
return result
|
|
|
|
}
|
2024-07-29 17:07:43 +00:00
|
|
|
|
|
|
|
func (c *CircuitBreaker) SetOverrideCircuitNameHandler(f func(string) string) {
|
|
|
|
c.circuitNameHandler = f
|
|
|
|
}
|
|
|
|
|
|
|
|
// Expects a circuit to exist because a new circuit is always closed.
|
|
|
|
// Call CircuitExists to check if a circuit exists.
|
|
|
|
func IsCircuitOpen(circuitName string) bool {
|
|
|
|
circuit, wasCreated, _ := hystrix.GetCircuit(circuitName)
|
|
|
|
return !wasCreated && circuit.IsOpen()
|
|
|
|
}
|
|
|
|
|
|
|
|
func CircuitExists(circuitName string) bool {
|
|
|
|
_, wasCreated, _ := hystrix.GetCircuit(circuitName)
|
|
|
|
return !wasCreated
|
|
|
|
}
|