Releases: xxxserxxx/gotop
Teamwork makes the Dream work!
I've been trying to focus on clearing out bugs; unfortunately, many of these are on platforms I don't have access to, which really slows me down. At the same time, the stuff I could easily work on, including some of the exciting (well, exciting to me) features has completely halted because of my guilt about the bugs. In the meantime, I've been working on other projects.
Thank goodness for all you wonderful people submitting PRs. These folks keep things moving, and despite my languid approach to merging, the contributions are so very appreciated. Consequently, this release really is brought to you by contributors:
- Solène Rapenne (@rapenne-s), who added gotop to Nix
- Anatol Pomozov (@anatol) for:
- simplifying and improving the
getTemps()
logic, which reduced both LOC and ABC complexity:- LOC: 9075 -> 9056
- ABC: 4367 -> 4359
- Fixing the nvme temps for Kelvins to Celsius
- simplifying and improving the
- Stanisław Pitucha (@viraptor), for noticing that a gopsutil introduced a build issue on OSX and needed another bump.
- sitiom, for notifying me that that gotop is available via scoop, on Windows
- Heimen Stoffels (@Vistaus) for the Dutch (nl) translation
- Clayton Townsend II (@ctII) for the page-up/page-down process scrolling patch
- @Kqzz, for adding sort-by-command, and especially for being so patient for the merge.
In addition, unit tests were failing for a sort used in the display lists. While fixing it, I rewrote the original code and got a 10% performance improvement in the bargain.
There were some hiccups in the deb and RPMs; please let me know if these are still broken.
There Is No "I" In "Team"
Lots of push requests (relatively, for gotop) in this release! The contributions are appreciated.
Added
- Metrics from SMART subsystems have been added for Linux and Darwin; it's temperatures right now, but the opportunity to report other metrics is now more easily added. Note that there may be issues with this, as it's a new source of metrics, and there may be bugs in (e.g.) the temperature scale, or some devices not being identified. Thanks a bunch to @rare-magma and @anatol for working on the contribution.
- The network widget now shows different colors for the upload and download lines (#174, thanks @quantonganh!)
- A
PACKAGERS.md
document has been added that explains how to simulate the github cross-compiling build process locally -- without having to push changes upstream. This helps with finding compile-time cross-compile issues.
Changed
- @droundy accepted a patch for the parseargs library, so removed the dependency on my fork
- Some
gopsutils
warnings that provided no value were being reported; they've been silenced (thanks @ars.xda!)
Fixed
- zh-CN updated (#205, thanks @Tigerfyj!)
- Put the manpage in a more appropriate place
- When the RPM and DEB builds were re-enabled, the version format was giving the packages indigestion; in particular, the dpkgs would not install. This resulted in several tickets -- all of which should be fixed. (#212, #206, #209)
- I misspelled "Celsius" yet again. It really upsets people when I do this. (#207)
- Unit tests were not running on Darwin
- Trying to use the
@latest
keyword was causing problems in github actions - ru_RU text fixes (thanks @ivanignatenko28!)
- The nvidia and nvidiarefresh parameters were not being loaded from the config file (#217)
It's Raining "man"
It's been a while since the last release, and while there haven't been a lot of changes, there are some that'd I'd like to get out there.
We've had some contributions that should see publication.
- @xgdgsc sent in an
htop
-like layout. It's in the layouts directory and can be copied to one of the config directories and referenced; it's also included in the RPM, deb, and Arch builds - @mjshariati98 closed ticket #124 and added
no-X
options, allowing flags that might be enabled by default to be disabled without creating a config. - @vabshere fixed more of my documentation mistakes
As to the title of this release, this version closes #158 and adds a man page. This can be generated with gotop --create-manpage
; it's installed by the Arch, RPM, and DEB packages.
If you haven't noticed by now, #198 is closed, and the release re-introduces DEB & RPM archives, which were lost long ago when I re-built the CI workflow.
To generate man pages, and make anti-flags easier to manage, I've opflag
(a fork of ogier/pflag
) with droundy/goopt
. This should be backwards compatible, but it's possible there may be some differences in how flags work.
Finally, this fixes #200, where color schemes specified in the config file were causing a crash.
EDIT
The RPM and DEB put the man page in the wrong place -- it is going in /usr/share/man8
, when it should be going into /usr/share/man/man8
. I doubt man
will find it.
The World is Our Oyster
Added
- Several folks contributed to building on new Apple silicon (@clandmeter, @areese, and @nickcorin). This took a distressingly long time for me to merge; it required updating and testing a newer cross-compiling CGO without access to hardware.
- French and Russion translations (thank you @lourkeur and @talentlessguy!)
- nvidia support merged in from extension -- nvidia support is now bundled with the releases.
- remote support merged in from extension
- Spanish translation (thanks to @donPatino & @lourkeur)
- There's a link to the github project in the help text now
Changed
- Upgrade to Go 1.16. This eliminates go:generate for the language files, which means gotop no longer builds with Go < 1.16. It does make things easier for translators and merging.
- The remote monitoring documentation is a little better.
Fixed
- Extra spaces in help text (#167)
- Crash with German translation (#166)
- Bad error message for missing layouts (#164)
- @JonathanReeve, @joinemm, and @plgruener contributed typo and mis-translation fixes
- The remote extension was ignoring config-file settings (no ticket #)
Dot Zero Always Has A Bug
Added
- Show available translations in help text (#157)
Changed
- Add more badges in README
- Replaces a dependency with a fork, because
go get
-- unlikego build
-- ignoresreplace
directives ingo.mod
- Adds links to the extension projects in the README (#159)
- Missing thermal sensors on FreeBSD were being reported as errors, when they aren't. (#152)
- Small performance optimization
- github workflow changes to improve failure modes
- Bumped
gopsutils
to v3.20.12 - Bumped
battery
to v0.10.0 - Debug logging was left on (again) causing chatter in logs
Fixed
v4.1.0: Hello, World!
gotop is now localized, and includes translations for German, Chinese (zh_CN), and Esperanto. Translations are driven by the LANG
environment variable, and fall back to English if a translation isn't available. Pull request for new translations are welcome!
Thanks to folks who contributed PRs to this release, including the language translations.
Changed
- The uploaded license was a 2-clause BSD, which is functionally equivalent; however, since the contributor agreement was for MIT, to make it clean the uploaded license file was changed to the Festival variant of MIT. (#147)
- Per-process CPU use was averaged over the entire process lifetime. While more of a semantic difference than a bug, it was a unintuitive and not particularly useful. CPU averages are now weighted moving averages over time, with more recent use having more weight.
- iSMC was still in the code; iSMC violates the MIT license, and this has been cleaned out.
- Versions are now embedded during the package build, rather than being hard-coded. More info in #140
Fixed
GPL-be-gone
This release contains changes relevant only to Darwin. If you are not running MacOS, you do not need to upgrade.
v4.0.0 saw a move from AGPL to MIT-3; this was started a year ago by the original gotop author, and we finally pulled the trigger and made the switch. MIT-3 is not compatible with the GPL in that GPL code may not be used in an MIT-3 licensed project, and changes had been made to remove GPL dependencies. However, one of the dependencies incorrectly licensed itself as MIT, as it, itself, dependended on GPL code -- and thereby "infected"[1] all of the downstream projects using that code. For gotop, it meant that the code supplying thermal sensor data on OSX could not be used.
This release removes the dependency that referenced GPL code, and so makes gotop (and, in particular, Darwin builds) compliant again.
The Go linker excludes code it doesn't use; this particular section of code is also fenced by a GOOS flag, and the compiler didn't use or load the code that depended on the GPL-infected dependency except when being built for Darwin. This means that no GPL code was referenced or used to build binaries for OSes other than Darwin. IANAL, but I believe this means that only Darwin users need upgrade to this version; binaries for other system should essentially be unchanged.
[1] "Infect" has negative connotations, but its use here references the truth that only GPL code can use GPL code, and so by using GPL dependencies projects are legally forced to also use the GPL license. Many people do believe this is a negative thing, but I don't except in that it does introduce an impediment to writing software.
Alice in Wonderland
NOTE: Command line options have changed.
This is a major release for gotop; it includes new features, improvements, fixes, and changes to the command-line arguments.
Argument changes & new features
The arg parsing library changed to a smaller, and more POSIX-compliant, library. New arguments have been added, deprecated arguments have been removed, and some values have changed.
-
--graphscale
allows setting the initial scale of graphs, rather than requiring manual setting every run -
-v
,-V
, and--version
all print the version -
--minimal
and--battery
arguments to select a layout have been removed; use--layout minimal
or--layout battery
instead -
--bandwidth
, which did nothing, was removed -
--extensions
has been removed. Go's plugin mechanism in it's current state has too many limitations to make it useful for gotop, so until this changes a different approach to extending gotop has been implemented. -
--rate
now takes aDuration
; this now means the refresh period, rather than the number of times per second to refresh. Examples are-r 0.5s
(twice a second),-r 500ms
(same),-r 2s
(every two seconds),-r 5m
(every 5 minutes), etc. -
--mbps
shows the network transfer rates in Mbps -
-C
sets a different config file than the default -
--list
prints out various settings and options.devices
shows all of the filterable values for widgets that have filtration (currently only temperatures is implemented, but this will grow)layouts
list all of the built-in layoutscolorschemes
prints all of the built-in color schemespaths
shows where gotop will search for config files and logswidgets
list the widget names that can be used in layoutskeys
prints the keyboard bindings
-
--write-config
will cause gotop to create a config file in the user-local config directory. This can be used with command line options to change config file settings, preventing most needs to edit the file manually. For example, when gotop is first installed an no config file exists, the commandgotop --rate 2s -asl kitchensink -c solarized --write-config
will create a config file with the values specified on the command line, and all of the other options with their defaults. The refresh rate can then be changed with:
gotop --rate 1s --write-config
Everything that can be set on the command line, except -C
itself, is configurable in the command line.
Configuration files can now have comment lines: any line starting with #
will be ignored, as are blank lines.
Other changes
System-wide configurations are supported; gotop now looks for configurations in /etc/gotop
(on Linux) -- this location varies between OSes. Configurations have precedence: a configuration specified by -C
will always be used; followed by a config file found in $PWD
; followed by a config file in the user's config dir (XDG_CONFIG_DIR
for XDG systems, and $HOME
otherwise); followed by the system-wide location.
Graph labels that don't fit (vertically) in the window are now drawn in additional columns (#40). This means that systems with more CPU cores than fit in the graph window will now be shown, rather than being truncated at the bottom of the graph. If you are running a ThreadRipper, this may mean the graph is filled with CPU labels, and you may want to use the -a
switch.
Darwin exposes a large number of thermal sensors. While gotop attempts to choose a sensible subset of sensors, a different set can be configured. This can be configured in a config file by uncommenting the temperatures
setting and adding a comma-separated list of sensor names; the options can be printed with the --list devices
argument.
For Linux console users (non-X, non-Wayland), a Linux console font is provided that might improve the look of gotop. This can be used by running:
curl -O https://github.com/xxxserxxx/gotop/raw/master/fonts/Lat15-VGA16-braille.psf
setfont Lat15-VGA16-braille.psf
The extension mechanism has been changed to make using special features easier. Two extensions are currently provided: one gives access to NVidia graphics card sensors, and the other enables rendering metrics from gotop running on remote machines. Because permutations make providing pre-built binaries impractical, this requires having Go installed and building gotop yourself; however, a tool has been provided to simplify this process.
- The extension builder tool is where you start. Download this and follow the instructions, which consist of two steps (and an optional third).
- The NVidia extension enables NVidia sensors; this does not need to be downloaded manually. The URL is provided to the builder tool.
- The remote gotop extension enables showing sensors from remote gotop instances in a locally running gotop.
Instructions and limitations for the builder and extensions are on each of the project's pages.
gopsutil
, the toolkit which provides most of the sensor data for gotop, has been upgraded to a more recent version.
The metrics library was replaced by a much more lightweight library, improving the code and reducing the size of the gotop executable by 25%.
Gotop was relicensed from AGPL to MIT-3.
Bug fixes
This release includes a number of bug fixes. Firstly, it carries forward all of the FreeBSD fixes in the recently released v3.5.3
version. Additional fixes are:
- The help & statusbar features now obey the color scheme.
- The help text layout was stale, and is now accurate.
- A panic related to using custom color schemes has been fixed.
- A bug introduced in an earlier version caused the memory widget to randomly assign colors to sensors at each run, introducing confusion between runs.
- Disk space values were being truncated instead of being rounded; this was most visible on larger disks.
- Temperature sensor data on Darwin were unreliable and usually wrong.
- Gotop logging has always been chatty when there were issues, with the same error being repeated on every refresh. More of these messages are smart in this release in that they're reported the first time encountered, and then silenced -- this reduces the noise in the log file.
FreeBSD Part Deux
gotop had a number of long-standing bugs on FreeBSD. This release addresses the remaining reported issues.
Free the BSD (from bugs)
v3.5.1 had a bug that caused an immediate panic when gotop was run on FreeBSD. This release fixes that bug (and only that bug), so unless you are on FreeBSD, you can safely ignore this release.