{"record":{"id":"5ab749ecce760dd8","repo":"netbirdio/netbird","slug":"upload-debug-bundle-w","errorCode":null,"errorMessage":"upload debug bundle: %w","messagePattern":"upload debug bundle: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"client/android/client.go","lineNumber":355,"sourceCode":"\t\t},\n\t)\n\n\tpath, err := bundleGenerator.Generate()\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"generate debug bundle: %w\", err)\n\t}\n\tdefer func() {\n\t\tif err := os.Remove(path); err != nil {\n\t\t\tlog.Errorf(\"failed to remove debug bundle file: %v\", err)\n\t\t}\n\t}()\n\n\tuploadCtx, cancel := context.WithTimeout(context.Background(), 2*time.Minute)\n\tdefer cancel()\n\n\tkey, err := debug.UploadDebugBundle(uploadCtx, types.DefaultBundleURL, cfg.ManagementURL.String(), path, false)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"upload debug bundle: %w\", err)\n\t}\n\n\tlog.Infof(\"debug bundle uploaded with key %s\", key)\n\treturn key, nil\n}\n\n// SetTraceLogLevel configure the logger to trace level\nfunc (c *Client) SetTraceLogLevel() {\n\tlog.SetLevel(log.TraceLevel)\n}\n\n// SetInfoLogLevel configure the logger to info level\nfunc (c *Client) SetInfoLogLevel() {\n\tlog.SetLevel(log.InfoLevel)\n}\n\n// PeersList return with the list of the PeerInfos\nfunc (c *Client) PeersList() *PeerInfoArray {","sourceCodeStart":337,"sourceCodeEnd":373,"githubUrl":"https://github.com/netbirdio/netbird/blob/93e97f4bf1ad715072dcb3fb6cdb1763431b5a9c/client/android/client.go#L337-L373","documentation":"After a bundle is generated, Android DebugBundle calls debug.UploadDebugBundle with a hard 2-minute context timeout to POST the archive to types.DefaultBundleURL (https://upload.debug.netbird.io), tagging it with the management URL. Any transport failure, non-success response, or exceeding 120 seconds is wrapped as this error.","triggerScenarios":"Device offline or behind a firewall blocking upload.debug.netbird.io; captive portal intercepting the request; large bundle on a slow link exceeding the 2-minute budget.","commonSituations":"Support flows triggered exactly when connectivity is broken; corporate egress filtering; metered/slow mobile networks.","solutions":["Retry the upload once connectivity is restored.","Verify network/firewall access to https://upload.debug.netbird.io.","On persistently slow links, generate the bundle and share the local file instead of relying on the 2-minute upload window."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"key, err := client.DebugBundle(files, true, \"anonymize\")\nif err != nil && strings.HasPrefix(err.Error(), \"upload debug bundle:\") {\n    // network path to upload.debug.netbird.io failed or exceeded 120s:\n    // wait for connectivity and retry; the local bundle file still exists\n}","preventionTips":["Retry the upload when the device regains connectivity rather than regenerating the bundle.","Allow sharing the local bundle file as a fallback for restricted networks.","Remember the 2-minute hard budget when testing on slow links."],"tags":["android","debug","network","upload","timeout"],"backgroundTag":null,"analyzedSha":"93e97f4bf1ad715072dcb3fb6cdb1763431b5a9c","analyzedAt":"2026-08-16T03:09:19.136Z","schemaVersion":2},"datasetVersion":"2026-08-16T08:17:34.114Z"}