fleet/orbit/pkg/go-paniclog
Lucas Manuel Rodriguez ea25ce4e9e
Fix Fleet Desktop bugs on Windows (#16402)
#15821

This PR is adding two improvements and fixing two Windows bugs in Fleet
Desktop:

## Improvement
- We are now capturing the stderr of Fleet Desktop. This helped me find
bug (1) below (otherwise the panic output below was hidden from us).
- To reduce complexity I'm removing the "Theme detection" routine
because we made the decision to use the colored icon for both themes...,
see here:
415d1f493b/orbit/cmd/desktop/desktop_windows.go (L21-L27)

## Bug fixes
1. Fleet Desktop icon not showing in the task bar. This was fixed by
updating to use the latest version of `fyne.io/systray`. (See
https://github.com/fyne-io/systray/issues/22#issuecomment-1173157898.)
2. Orbit now properly detects if Fleet Desktop isn't running on Windows.

Bug (1)'s panic output 
```
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0x72b14b]

goroutine 23 [running]:
fyne.io/systray.(*winTray).setTooltip(0x1eb5d40, {0x126923f?, 0x0?})
	/Users/luk/gopath/pkg/mod/fyne.io/systray@v1.10.0/systray_windows.go:260 +0xcb
fyne.io/systray.SetTooltip({0x126923f?, 0x125fc16?})
	/Users/luk/gopath/pkg/mod/fyne.io/systray@v1.10.0/systray_windows.go:961 +0x29
main.main.func1()
	/Users/luk/fleetdm/git/fleet/orbit/cmd/desktop/desktop.go:103 +0xba
fyne.io/systray.Register.func2()
	/Users/luk/gopath/pkg/mod/fyne.io/systray@v1.10.0/systray.go:98 +0x2f
created by fyne.io/systray.Register in goroutine 1
	/Users/luk/gopath/pkg/mod/fyne.io/systray@v1.10.0/systray.go:96 +0xb1
```

- [X] Changes file added for user-visible changes in `changes/` or
`orbit/changes/`.
See [Changes
files](https://fleetdm.com/docs/contributing/committing-changes#changes-files)
for more information.
- [X] Manual QA for all new/changed functionality
  - For Orbit and Fleet Desktop changes:
- [X] Manual QA must be performed in the three main OSs, macOS, Windows
and Linux.
- [x] Auto-update manual QA, from released version of component to new
version (see [tools/tuf/test](../tools/tuf/test/README.md)).
2024-01-29 18:52:55 -03:00
..
example Fix Fleet Desktop bugs on Windows (#16402) 2024-01-29 18:52:55 -03:00
LICENSE Fix Fleet Desktop bugs on Windows (#16402) 2024-01-29 18:52:55 -03:00
paniclog.go Fix Fleet Desktop bugs on Windows (#16402) 2024-01-29 18:52:55 -03:00
paniclog_other.go Fix Fleet Desktop bugs on Windows (#16402) 2024-01-29 18:52:55 -03:00
paniclog_unix.go Fix Fleet Desktop bugs on Windows (#16402) 2024-01-29 18:52:55 -03:00
paniclog_windows.go Fix Fleet Desktop bugs on Windows (#16402) 2024-01-29 18:52:55 -03:00
README.md Fix Fleet Desktop bugs on Windows (#16402) 2024-01-29 18:52:55 -03:00

This package was copied from https://github.com/virtuald/go-paniclog

go-paniclog

By default, panics in golang are sent to stderr. Unfortunately, there isn't a direct builtin global mechanism to capture/send the output of the panic to a file or really do anything with it other than to write to stderr.

One possible solution is that you can redirect stderr to a file, and that's all that this package does. Of course, once you redirect stderr to file, anything else you write to stderr will also end up in that file. v2.0 now includes a function you can use to undo the redirection if you wanted to do that for some reason.

Reference: https://stackoverflow.com/questions/34772012/capturing-panic-in-golang

Alternatives

  • panicwrap may be a better solution for many programs

Author

I can't claim any credit for this idea or the code, it is entirely taken from the rclone program by Nick Craig-Wood.

License

MIT License