基于GOTOP的linux状态监视软件
Go to file
Jonathan Reeve ff812da582
Fix translation of "free"
"Senpaga" literally means "no payment [necessary]," so it refers to "free" only in the sense of "free beer." But here we want to evoke remaining disk space.
2021-06-13 15:52:06 -04:00
.github Fixes cross-platform building (func update shadowing), removes gotop-builder trigger. 2021-03-05 16:28:53 -06:00
assets Bring extensions under the umbrella. 2021-03-02 03:17:53 -06:00
build Version bump to v4 2020-04-23 14:07:08 -05:00
cmd/gotop Gets the NVidia extension options working, including marshalling. 2021-03-04 16:23:04 -06:00
colorschemes Replace jdkeke142 lingo with fork; using replace in go.mod breaks go get. 2021-02-03 12:28:46 -06:00
devices Fixes cross-platform building (func update shadowing), removes gotop-builder trigger. 2021-03-05 16:28:53 -06:00
docs Fix typo in layouts documentation 2021-05-05 12:21:41 +03:00
fonts Add Linux console font 2019-04-07 15:21:03 -03:00
layout Replace jdkeke142 lingo with fork; using replace in go.mod breaks go get. 2021-02-03 12:28:46 -06:00
layouts Closes #46, option to display network traffic as mbps. This can be set on the command line with --mbps, or toggled while running with b 2020-04-16 13:28:18 -05:00
logging Replace jdkeke142 lingo with fork; using replace in go.mod breaks go get. 2021-02-03 12:28:46 -06:00
scripts linting & documentation 2020-06-07 16:56:19 -05:00
termui Replace jdkeke142 lingo with fork; using replace in go.mod breaks go get. 2021-02-03 12:28:46 -06:00
translations Fix translation of "free" 2021-06-13 15:52:06 -04:00
utils Go vet/lint cleanups 2020-04-27 20:33:41 -05:00
widgets Fix candidate for #167 2021-02-16 16:24:34 -06:00
.gitignore Closes #131, SMC GPL issue on OSX; consequently removes need to CGO in darwin. 2020-06-09 09:54:10 -05:00
.travis.yml Refactor travis files 2019-02-07 19:36:56 -08:00
CHANGELOG.md Updated changelog for release 2021-02-03 15:46:30 -06:00
config_test.go Closes #32. Average is really average, over time. Boldify the AVRG label. Remove spurious sync lock. 2020-07-25 07:23:17 -05:00
config.go Gets the NVidia extension options working, including marshalling. 2021-03-04 16:23:04 -06:00
go.mod Replace jdkeke142 lingo with fork; using replace in go.mod breaks go get. 2021-02-03 12:28:46 -06:00
go.sum Include the contributed Russian translation, and pick up the German improvements. 2021-05-03 08:42:02 -05:00
LICENSE Closes #147. 2020-08-24 14:31:29 -05:00
README.md Fixes the go get path in the README 2021-05-03 08:31:11 -05:00



Another terminal based graphical activity monitor, inspired by gtop and vtop, this time written in Go!

Join us in #gotop:matrix.org (matrix clients).





See the mini-blog for updates on the build status, and the change log for release updates.

Installation

Working and tested on Linux, FreeBSD and MacOS. Windows binaries are provided, but have limited testing. OpenBSD works with some caveats; cross-compiling is difficult and binaries are not provided.

If you install gotop by hand, or you download or create new layouts or colorschemes, you will need to put the layout files where gotop can find them. To see the list of directories gotop looks for files, run gotop -h. The first directory is always the directory from which gotop is run.

  • Arch: Install from AUR, e.g. yay -S gotop-bin. There is also gotop and gotop-git
  • Gentoo: gotop is available on guru overlay.
    sudo layman -a guru
    sudo emerge gotop
    
  • OSX: gotop is in homebrew-core. brew install gotop. Make sure to uninstall and untap any previous installations or taps.
  • Prebuilt binaries: Binaries for most systems can be downloaded from the github releases page. RPM and DEB packages are also provided.
  • Source: gotop requires Go >= 1.14: go get -u github.com/xxxserxxx/gotop/v4/cmd/gotop

Extension builds

Extensions have proven problematic; go plugins are not usable in real-world cases, and the solution I had running for a while was hacky, at best. Consequently, extensions have been moved into the main code base for now.

  • nvidia support: requires the enable flag. Detecting nvidia hardware, or rather, the absense of NVidia hardware, can take seconds; this greatly slows down gotop's start-up time. To avoid this, the NVidia code will not be run unless it has been enabled with the --enable nvidia runtime flag.
  • remote: allows gotop to pull sensor data from applications exporting Prometheus metrics, including remote gotop instances themselves.

Console Users

gotop requires a font that has braille and block character Unicode code points; some distributions do not provide this. In the gotop repository is a pcf font that has these points, and setting this font may improve how gotop renders in your console. To use this, run these commands:

curl -O -L https://raw.githubusercontent.com/xxxserxxx/gotop/master/fonts/Lat15-VGA16-braille.psf
setfont Lat15-VGA16-braille.psf

Building

This is the download & compile approach.

gotop should build with most versions of Go. If you have a version other than 1.14 installed, remove the go line at the end of go.mod and it should work.

git clone https://github.com/xxxserxxx/gotop.git
cd gotop
sed -i '/^go/d' go.mod          # Do this if you have go != 1.14
VERS="$(git tag -l --sort=-v:refname | sed 's/v\([^-].*\)/\1/g' | head -1 | tr -d '-' ).$(git describe --long --tags | sed 's/\([^-].*\)-\([0-9]*\)-\(g.*\)/r\2.\3/g' | tr -d '-')"
DAT=$(date +%Y%m%dT%H%M%S)
go build -o gotop \
	-ldflags "-X main.Version=v${VERS} -X main.BuildDate=${DAT}" \
	./cmd/gotop

Move gotop to somewhere in your $PATH.

If Go is not installed or is the wrong version, and you don't have root access or don't want to upgrade Go, a script is provided to download Go and the gotop sources, compile gotop, and then clean up. See scripts/install_without_root.sh.

go generate

Apple SMC tags are embedded in a text file that is compiled into the executable; the same happens with the language translations. When the file devices/data/sm.tsv or any translations in translations/dicts/ change, go generate should be re-run.

Usage

Run with -h to get an extensive list of command line arguments. Many of these can be configured by creating a configuration file; see the next section for more information. Key bindings can be viewed while gotop is running by pressing the ? key, or they can be printed out by using the --list keys command.

In addition to the key bindings, the mouse can be used to control the process list:

  • click to select process
  • mouse wheel to scroll through processes

For more information on other topics, see:

More screen shots

'-l kitchensink' + colorscheme

"-l battery"

"-l minimal"

Custom (layouts/procs)

Built With

History

ca. 2020-01-25 The original author of gotop started a new tool in Rust, called ytop, and deprecated his Go version. This repository is a fork of original gotop project with a new maintainer to keep the project alive and growing. An objective of the fork is to maintain a small, focused core while providing a path to extend functionality for less universal use cases; examples of this is sensor support for NVidia graphics cards, and for aggregating data from remote gotop instances.

Alternatives

I obviously think gotop is the Bee's Knees, but there are many alternatives. Many of these have been around for years. All of them are terminal-based tools.

  • Grandpa top. Written 36 years ago, C, installed by default on almost every Unix descendant.
  • htop. A prettier top. Similar functionality. 16 years old!
  • atop. Detailed process-focused inspection with a table-like view. Been around for 9 long years.
  • iftop, a top for network connections. More than just data transfer, iftop will show what interfaces are connecting to what IP addresses. Requires root access to run.
  • iotop, top for disk access. Tells you which processes are writing to and from disk space, and how much. Also requires root access to run.
  • nmon a dashboard style top; widgets can be dynamically enabled and disabled, pure ASCII rendering, so it doesn't rely on fancy character sets to draw bars.
  • bashtop, in pure bash! Beautiful and space efficient, and deserves special comment. If you use anything other than gotop, I'd recommend bashtop.
  • ytop, a rewrite of gotop (ca. 3.0) in Rust. Same great UI, different programming language.
  • slabtop, part of procps-ng, looks like top but provides kernel slab cache information! Requires root.
  • systemd-cgtop, comes with systemd (odds are your system uses systemd, so this is already installed), provides a resource use view of control groups -- basically, which services are using what resources. Does not require root to run.
  • virt-top top for virtualized containers (VMs, like QEMU).
  • ctop top for containers (LXC, like docker)

A comment on clones

In a chat room I heard someone refer to gotop as "another one of those fancy language rewrites people do." I'm not the original author of gotop, so it's easy to not take offense, but I'm going on record as saying that I disagree with that sentiment: I think these rewrites are valuable, useful, and healthy to the community. They increase software diversity at very little cost to users, and are a sort of evolutionary mechanism: as people do rewrites, some are worse, but some are better, and users benefit. Rewrites provide options, which fight against monocultures. As importantly, most developers are really only fluent in a couple of programming languages. We all have familiarity with a dozen, and may even have extensive experience with a half-dozen, but if you don't constantly use a language, you tend to forget the extended library APIs, your development environment isn't tuned, you're rusty with using the tool sets, and you may have forgotten a lot of the language peculiarities and gotchas. The barrier to entry for contributing to a software project -- to simply finding and fixing a bug -- in a language you're not intimate with can be very high. It gets much worse if the project owner is a stickler for quality and style. So I believe that gotop's original author's decision to rewrite his project in Rust is a net positive. He probably made fewer design mistakes in ytop (we always do, on the second rewrite), and Rust developers -- who may have hesitated learning or brushing up on Go to submit an improvement -- have another project to which they can contribute.

Diversity is good. Don't knock the free stuff.

Stargazers over time

Stargazers over time