mirror of
https://github.com/aristocratos/btop.git
synced 2024-06-01 18:19:56 +12:00
c0e17a64d3
commitc2c4fe47db
Author: aristocratos <admin@qvantnet.com> Date: Sat Nov 13 23:15:53 2021 +0100 Changes from main + fixes commitbd5d867089
Author: aristocratos <admin@qvantnet.com> Date: Sat Nov 13 21:24:01 2021 +0100 Fixes commitdc5f0606cb
Author: aristocratos <admin@qvantnet.com> Date: Sat Nov 13 20:51:06 2021 +0100 Fixed leak in Proc::collect() commit8b59ab6e11
Author: aristocratos <admin@qvantnet.com> Date: Sat Nov 13 19:59:56 2021 +0100 Fixed process cpu usage calculation commit53c8a0325b
Author: aristocratos <admin@qvantnet.com> Date: Mon Oct 25 13:01:53 2021 +0200 Cpu temp set to average of pACC and eACC for mac m1 commit940cd0a513
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 24 21:12:16 2021 +0200 limit cpu temp to 20 commit254ceb9c2d
Author: aristocratos <admin@qvantnet.com> Date: Sun Oct 24 11:24:04 2021 +0200 Fixed up Makefile commit6fa3bf41d7
Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 21 13:12:45 2021 +0200 Makefile fixed WARNFLAGS commit2c98e2ca29
Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 21 13:08:12 2021 +0200 Updated Makefile commite69780e9bc
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 20 23:26:09 2021 +0200 fix build commitde62167921
Merge:a590dd3
a0ee404
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 20 23:10:36 2021 +0200 Merge branch 'main' into OSX commita590dd3f67
Author: aristocratos <admin@qvantnet.com> Date: Mon Oct 18 11:20:12 2021 +0200 Ignore format-truncation commit4c30742d41
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 18 10:08:01 2021 +0200 comments about temp sensors commit46030de77c
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 18 08:10:37 2021 +0200 available = total - used commit4c228de0ef
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 17 22:19:41 2021 +0200 use sysconf to get arg_max - seems simpler commitc60fc29f0f
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 17 22:10:50 2021 +0200 arg_max should be int on macos commit0b5a931a6d
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 17 22:01:42 2021 +0200 only fetch max_args once commit71d5cd5fd9
Author: aristocratos <admin@qvantnet.com> Date: Sat Oct 16 23:24:07 2021 +0200 Reverted mutexes back to custom atomic bool based locks commit3f34a67df6
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 16 21:47:55 2021 +0200 these helpers can be static commitfc19c46c8a
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 16 21:44:49 2021 +0200 code cleanup: put the code in .cpp to enable incremental build commitc252c618c0
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 16 21:09:21 2021 +0200 don't crash on intel commit9f88187c29
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 16 21:06:18 2021 +0200 small improvement commit808f09c974
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 16 20:59:48 2021 +0200 don't iterate 3 times commitd8408336e3
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 16 20:59:27 2021 +0200 remove debug commit4f078c3beb
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 13 23:38:27 2021 +0200 more temperature (M1 + intel) commit289880aaa6
Merge:88a2528
3ffb212
Author: aristocratos <admin@qvantnet.com> Date: Sat Oct 16 19:37:09 2021 +0200 Merge branch 'OSX' of github.com:aristocratos/btop into OSX commit88a2528ca3
Author: aristocratos <admin@qvantnet.com> Date: Sat Oct 16 19:34:10 2021 +0200 Merge changes from main commit3ffb21203a
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 16 19:20:45 2021 +0200 release a bit more - still has negative temps for 2 cores on my system commit70b4871062
Author: aristocratos <admin@qvantnet.com> Date: Sat Oct 16 01:59:44 2021 +0200 Fixed leaks in Mem and attempt at fixing leaks in sensors.cpp commitfbae907720
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Fri Oct 15 23:41:37 2021 +0200 temperature sensors via IOKit commitcef0f0a68d
Author: aristocratos <admin@qvantnet.com> Date: Fri Oct 15 18:39:17 2021 +0200 Process command line arguments commit921cfa01ff
Author: aristocratos <admin@qvantnet.com> Date: Wed Oct 13 23:20:15 2021 +0200 Re-enable setuid and set default SU_GROUP to wheel for OSX commita416c888c7
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 13 21:16:41 2021 +0200 temperature commite7afe00ce7
Author: aristocratos <admin@qvantnet.com> Date: Wed Oct 13 12:54:43 2021 +0200 Cpu usage working again commit4193ef8921
Author: aristocratos <admin@qvantnet.com> Date: Wed Oct 13 10:36:51 2021 +0200 Fixed cpu lazy sorting commit93fcb6ff04
Author: aristocratos <admin@qvantnet.com> Date: Tue Oct 12 22:22:45 2021 +0200 Update README.md commit683354cd2e
Merge:8a399c4
6d724d6
Author: aristocratos <admin@qvantnet.com> Date: Tue Oct 12 22:19:30 2021 +0200 Merge pull request #80 from ShrirajHegde/OSX Add github workflow for MacOS commit8a399c499a
Author: aristocratos <admin@qvantnet.com> Date: Tue Oct 12 21:50:46 2021 +0200 pointer to smart pointer, first pass commit772605003a
Author: aristocratos <admin@qvantnet.com> Date: Tue Oct 12 18:54:38 2021 +0200 Fixed detailed memory not updating commit28cb677533
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 11 22:19:25 2021 +0200 more memory free-up - still leaks like crazy commit304457863f
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 11 21:48:07 2021 +0200 more RAII cleanup commit82e2e3c55c
Author: aristocratos <admin@qvantnet.com> Date: Mon Oct 11 12:40:25 2021 +0200 Removed non present cpu fields and fixed calculation for selectable cpu field graphs commit68603f2b37
Author: aristocratos <admin@qvantnet.com> Date: Mon Oct 11 10:57:04 2021 +0200 RAII Wrappers for Cpu::get_battery() commitd5cb24fbeb
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 10 20:23:11 2021 +0200 RAII commit8fad5a61be
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 9 21:44:16 2021 +0200 get more disk IO stats commit7fa903cf16
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 9 21:43:48 2021 +0200 fix build commit98036db660
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 9 21:18:25 2021 +0200 remove unnecessary uptime param commitaae7ae35ca
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 9 21:07:23 2021 +0200 remove debug logging commit5187420b04
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 9 21:06:43 2021 +0200 fix process elapsed time commit89582c0ea6
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 9 21:06:29 2021 +0200 don't double free commit6d724d6155
Author: Shriraj Hegde <shriraj.hegde@gmail.com> Date: Sat Oct 9 21:46:33 2021 +0530 Change Upload filename commit4f94ecc8ad
Author: Shriraj Hegde <shriraj.hegde@gmail.com> Date: Sat Oct 9 21:40:11 2021 +0530 Fix upload path commite1d6d0a1f2
Author: Shriraj Hegde <shriraj.hegde@gmail.com> Date: Sat Oct 9 21:36:13 2021 +0530 Skip installing gcc via Homebrew Change job name commit02cdd9d759
Author: Shriraj Hegde <shriraj.hegde@gmail.com> Date: Sat Oct 9 21:30:40 2021 +0530 Fix uploading Remove distclean commit39eb6c396f
Author: Shriraj Hegde <shriraj.hegde@gmail.com> Date: Sat Oct 9 21:26:57 2021 +0530 Disable static compilation commit099592bccd
Author: aristocratos <admin@qvantnet.com> Date: Sat Oct 9 17:52:10 2021 +0200 Ignore empty pid 0 to fix tree mode commita28e17556e
Author: Shriraj Hegde <shriraj.hegde@gmail.com> Date: Sat Oct 9 21:17:11 2021 +0530 Add workflow for MacOS commitaee9179c0a
Author: aristocratos <admin@qvantnet.com> Date: Sat Oct 9 17:36:46 2021 +0200 Disable failed tty mode detection for OSX commit4b7b98058d
Author: aristocratos <admin@qvantnet.com> Date: Sat Oct 9 11:28:32 2021 +0200 Fixed disk io and added io activity based on read/write commitbfa0629e7d
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Fri Oct 8 22:28:10 2021 +0200 fill in 0 for ioticks commita016ff8a03
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Fri Oct 8 22:16:01 2021 +0200 disk io from IOreg. Does not show any io though commitf98606c6db
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Fri Oct 8 09:32:06 2021 +0200 per process IO stats commitc8b50ed488
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Fri Oct 8 00:11:08 2021 +0200 don't show autofs, it's useless commitc4df64d440
Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 7 18:41:49 2021 +0200 Fixed compile time display for gmake and command timings commitb3e6f495f7
Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 7 18:26:15 2021 +0200 Fixed clk_tck -> clkTck commite53799188f
Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 7 18:25:14 2021 +0200 Fixed better detection for OSX commitb864edf984
Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 7 18:24:37 2021 +0200 Fixed cumulative cpu usage commit6a3c5d9b97
Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 7 13:20:30 2021 +0200 Proc::collect() better cpu percent accurazy commit84d0596294
Merge:3564f8e
98e1e87
Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 7 12:56:55 2021 +0200 Merge branch 'OSX' of github.com:aristocratos/btop into OSX commit3564f8e4c2
Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 7 12:56:27 2021 +0200 Proc::collect() fixed cputimes and cpu percentage calc commit98e1e87405
Merge:60c5636
d96fdd7
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Thu Oct 7 11:32:41 2021 +0200 Merge branch 'main' into OSX commit60c5636cd7
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 22:45:54 2021 +0200 fix warning commit489e446152
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 22:38:40 2021 +0200 details + process states commit7e5a808c73
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 22:38:19 2021 +0200 avoid details crash commit9c9da4606b
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 21:03:21 2021 +0200 fix quit on macos commitec7415384d
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 00:41:37 2021 +0200 fix mistake in makefile commit5ac8fa4c8a
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 18:56:13 2021 +0200 don't show /dev commitd901bbebd9
Author: aristocratos <gnmjpl@gmail.com> Date: Wed Oct 6 17:27:51 2021 +0200 Ignore tags and other branches commitc7f1e71e29
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 16:00:41 2021 +0200 comment commitb9d58e3faf
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 15:55:58 2021 +0200 impossible to get CPU freq on M1 apparently commit66072711c2
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 15:33:43 2021 +0200 detect full commit6bb0e930a2
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 00:38:46 2021 +0200 CPU freq in GHz commita5f10f1a0f
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 15:13:18 2021 +0200 check array length commit155c848b97
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 15:05:20 2021 +0200 switch to other way to get CPU freq (still does not work) commitcf51ba2ebe
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 14:45:44 2021 +0200 remove some warnings commit775dff5f72
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 14:16:45 2021 +0200 fix link commit8c67967775
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 14:16:38 2021 +0200 reduce diff more commit70b47d2ca8
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 14:10:23 2021 +0200 reduce diff with main branch commitca9cb48054
Merge:d0c6c0a
c66b46f
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 13:49:20 2021 +0200 Merge remote-tracking branch 'origin/main' into OSX commitc66b46f850
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 13:41:57 2021 +0200 battery state via CoreFoundation commitd0c6c0a362
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 10:51:36 2021 +0200 all disks + load averages commitca67526dc1
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 10:33:55 2021 +0200 show all disks commit56119f99a9
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 00:17:41 2021 +0200 procs sorting/filtering commit8d86011d72
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 23:42:17 2021 +0200 battery states commita9b64d62e4
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 23:24:59 2021 +0200 battery hack works on M1 commitce51031142
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 23:18:22 2021 +0200 ugly hack to get battery commitd5e6725c6c
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 22:42:42 2021 +0200 CPU stuff commit5c02bd8c83
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 21:25:42 2021 +0200 network commitd5da9d4983
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 15:43:05 2021 +0200 correct cached size commit5f11aba504
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 12:03:48 2021 +0200 vm stats from syscall + swap commit776fc96852
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 10:48:07 2021 +0200 seems to work indeed commit7b40e2835a
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 10:46:14 2021 +0200 allow override optimization flag commit005ea24e4c
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 10:09:24 2021 +0200 update Makefile commitaf8cec9deb
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 4 15:32:55 2021 +0200 some more params commit7ebe4f7594
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 4 15:15:55 2021 +0200 show more disks commite50a56394a
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 4 14:52:56 2021 +0200 disks show something commit6497a8c202
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 4 09:15:35 2021 +0200 reformat commit28e152b80c
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 23:21:13 2021 +0200 decrease diff with upstream commit40da88e9ca
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 22:56:14 2021 +0200 try to get disks to show commiteaf2bb56a5
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 22:42:01 2021 +0200 don't crash on deque::back() commitf66b6f712c
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 22:08:21 2021 +0200 cpu freq, name & process uid/name commit34a8a61f4d
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 21:46:11 2021 +0200 basic process info commit29bb2dcc5f
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 21:45:39 2021 +0200 initialize mutex (needed on macos apparently and not on linux) commitfb5970b000
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 2 23:53:41 2021 +0200 comment commit49d16cdddd
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 2 23:51:29 2021 +0200 extract delimiters commit3db9d66476
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 2 23:48:28 2021 +0200 first infos on macos: memory used & free commitf8acb2f854
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Sep 28 23:37:03 2021 +0200 make it compile on macos (M1 - arm64). Does not run though commitbbba17cd35
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 10:51:36 2021 +0200 all disks + load averages commit548203e93d
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 10:33:55 2021 +0200 show all disks commit0ab2be3985
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 00:17:41 2021 +0200 procs sorting/filtering commit096104c90b
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 23:42:17 2021 +0200 battery states commit0ad93684c2
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 23:24:59 2021 +0200 battery hack works on M1 commitc75b0f1cea
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 23:18:22 2021 +0200 ugly hack to get battery commit600b4f72b3
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 22:42:42 2021 +0200 CPU stuff commit4eb812d52c
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 21:25:42 2021 +0200 network commit899be68a78
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 15:43:05 2021 +0200 correct cached size commita1c7f935e3
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 12:03:48 2021 +0200 vm stats from syscall + swap commitbd1050a740
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 10:48:07 2021 +0200 seems to work indeed commit5094b73758
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 10:46:14 2021 +0200 allow override optimization flag commit8811270332
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 10:09:24 2021 +0200 update Makefile commit42f966f448
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 4 15:32:55 2021 +0200 some more params commitc1e6d6a62e
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 4 15:15:55 2021 +0200 show more disks commit50fcdaa854
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 4 14:52:56 2021 +0200 disks show something commit264bf2d7da
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 4 09:15:35 2021 +0200 reformat commit1fd625086b
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 23:21:13 2021 +0200 decrease diff with upstream commit17f9f3703c
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 22:56:14 2021 +0200 try to get disks to show commit8462ae6431
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 22:42:01 2021 +0200 don't crash on deque::back() commit78bce5b5a6
Merge:53e379d
f9505a4
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 22:08:34 2021 +0200 Merge branch 'aristocratos:main' into main commit53e379d74d
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 22:08:21 2021 +0200 cpu freq, name & process uid/name commit2a44b307ef
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 21:46:11 2021 +0200 basic process info commit66534eb5b5
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 21:45:39 2021 +0200 initialize mutex (needed on macos apparently and not on linux) commit0983917f26
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 2 23:53:41 2021 +0200 comment commit9732507248
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 2 23:51:29 2021 +0200 extract delimiters commit6e704ce838
Merge:fe4db7c
7bfbd83
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 2 23:48:43 2021 +0200 Merge branch 'main' of github.com:joske/btop commitfe4db7c16c
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 2 23:48:28 2021 +0200 first infos on macos: memory used & free commit7bfbd83a47
Merge:8c8139b
a15f961
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Fri Oct 1 17:05:26 2021 +0200 Merge branch 'aristocratos:main' into main commit8c8139bd1d
Merge:679d21c
a246c09
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Sep 29 21:50:00 2021 +0200 Merge branch 'aristocratos:main' into main commit679d21cd22
Merge:4c70c5b
a49b8f9
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Sep 29 20:23:34 2021 +0200 Merge branch 'aristocratos:main' into main commit4c70c5bdd9
Merge:84a9746
c70667e
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Sep 29 08:30:05 2021 +0200 Merge branch 'aristocratos:main' into main commit84a974695a
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Sep 28 23:37:03 2021 +0200 make it compile on macos (M1 - arm64). Does not run though Co-authored-by: Jos Dehaes <jos.dehaes@gmail.com>
450 lines
14 KiB
C++
450 lines
14 KiB
C++
/* Copyright 2021 Aristocratos (jakob@qvantnet.com)
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
|
|
indent = tab
|
|
tab-size = 4
|
|
*/
|
|
|
|
#include <cmath>
|
|
#include <iostream>
|
|
#include <fstream>
|
|
#include <ctime>
|
|
#include <sstream>
|
|
#include <iomanip>
|
|
#include <utility>
|
|
#include <ranges>
|
|
#include <robin_hood.h>
|
|
|
|
#include <unistd.h>
|
|
#include <termios.h>
|
|
#include <sys/ioctl.h>
|
|
|
|
#include <btop_shared.hpp>
|
|
#include <btop_tools.hpp>
|
|
|
|
using std::string_view, std::max, std::floor, std::to_string, std::cin, std::cout, std::flush, robin_hood::unordered_flat_map;
|
|
namespace fs = std::filesystem;
|
|
namespace rng = std::ranges;
|
|
|
|
//? ------------------------------------------------- NAMESPACES ------------------------------------------------------
|
|
|
|
//* Collection of escape codes and functions for terminal manipulation
|
|
namespace Term {
|
|
|
|
atomic<bool> initialized = false;
|
|
atomic<int> width = 0;
|
|
atomic<int> height = 0;
|
|
string current_tty;
|
|
|
|
namespace {
|
|
struct termios initial_settings;
|
|
|
|
//* Toggle terminal input echo
|
|
bool echo(bool on=true) {
|
|
struct termios settings;
|
|
if (tcgetattr(STDIN_FILENO, &settings)) return false;
|
|
if (on) settings.c_lflag |= ECHO;
|
|
else settings.c_lflag &= ~(ECHO);
|
|
return 0 == tcsetattr(STDIN_FILENO, TCSANOW, &settings);
|
|
}
|
|
|
|
//* Toggle need for return key when reading input
|
|
bool linebuffered(bool on=true) {
|
|
struct termios settings;
|
|
if (tcgetattr(STDIN_FILENO, &settings)) return false;
|
|
if (on) settings.c_lflag |= ICANON;
|
|
else settings.c_lflag &= ~(ICANON);
|
|
if (tcsetattr(STDIN_FILENO, TCSANOW, &settings)) return false;
|
|
if (on) setlinebuf(stdin);
|
|
else setbuf(stdin, NULL);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
bool refresh(bool only_check) {
|
|
struct winsize w;
|
|
if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) < 0) return false;
|
|
if (width != w.ws_col or height != w.ws_row) {
|
|
if (not only_check) {
|
|
width = w.ws_col;
|
|
height = w.ws_row;
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
auto get_min_size(const string& boxes) -> array<int, 2> {
|
|
const bool cpu = boxes.find("cpu") != string::npos;
|
|
const bool mem = boxes.find("mem") != string::npos;
|
|
const bool net = boxes.find("net") != string::npos;
|
|
const bool proc = boxes.find("proc") != string::npos;
|
|
int width = 0;
|
|
if (mem) width = Mem::min_width;
|
|
else if (net) width = Mem::min_width;
|
|
width += (proc ? Proc::min_width : 0);
|
|
if (cpu and width < Cpu::min_width) width = Cpu::min_width;
|
|
|
|
int height = (cpu ? Cpu::min_height : 0);
|
|
if (proc) height += Proc::min_height;
|
|
else height += (mem ? Mem::min_height : 0) + (net ? Net::min_height : 0);
|
|
|
|
return { width, height };
|
|
}
|
|
|
|
bool init() {
|
|
if (not initialized) {
|
|
initialized = (bool)isatty(STDIN_FILENO);
|
|
if (initialized) {
|
|
tcgetattr(STDIN_FILENO, &initial_settings);
|
|
current_tty = (ttyname(STDIN_FILENO) != NULL ? (string)ttyname(STDIN_FILENO) : "unknown");
|
|
|
|
//? Disable stream sync
|
|
cin.sync_with_stdio(false);
|
|
cout.sync_with_stdio(false);
|
|
|
|
//? Disable stream ties
|
|
cin.tie(NULL);
|
|
cout.tie(NULL);
|
|
echo(false);
|
|
linebuffered(false);
|
|
refresh();
|
|
|
|
cout << alt_screen << hide_cursor << mouse_on << flush;
|
|
Global::resized = false;
|
|
}
|
|
}
|
|
return initialized;
|
|
}
|
|
|
|
void restore() {
|
|
if (initialized) {
|
|
tcsetattr(STDIN_FILENO, TCSANOW, &initial_settings);
|
|
cout << mouse_off << clear << Fx::reset << normal_screen << show_cursor << flush;
|
|
initialized = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
//? --------------------------------------------------- FUNCTIONS -----------------------------------------------------
|
|
|
|
namespace Fx {
|
|
string uncolor(const string& s) {
|
|
string out = s;
|
|
for (size_t offset = 0, start_pos = 0, end_pos = 0, next_pos = 0;;) {
|
|
if ((start_pos = next_pos > 0 ? next_pos : out.find('\x1b', offset)) == string::npos)
|
|
break;
|
|
offset = ++start_pos;
|
|
if ((end_pos = out.find('m', offset)) == string::npos)
|
|
break;
|
|
else if (next_pos = out.find('\x1b', offset); not isdigit(out[end_pos - 1]) or end_pos - start_pos > next_pos - start_pos)
|
|
continue;
|
|
out.replace(start_pos, end_pos - start_pos, "");
|
|
next_pos = 0;
|
|
}
|
|
out.shrink_to_fit();
|
|
return out;
|
|
}
|
|
}
|
|
|
|
namespace Tools {
|
|
|
|
atomic<int> active_locks (0);
|
|
|
|
string uresize(string str, const size_t len, const bool wide) {
|
|
if (len < 1 or str.empty()) return "";
|
|
for (size_t x = 0, i = 0; i < str.size(); i++) {
|
|
if (wide and static_cast<unsigned char>(str.at(i)) > 0xef) x += 2;
|
|
else if ((static_cast<unsigned char>(str.at(i)) & 0xC0) != 0x80) x++;
|
|
if (x >= len + 1) {
|
|
str.resize(i);
|
|
str.shrink_to_fit();
|
|
break;
|
|
}
|
|
}
|
|
return str;
|
|
}
|
|
|
|
string luresize(string str, const size_t len, const bool wide) {
|
|
if (len < 1 or str.empty()) return "";
|
|
for (size_t x = 0, last_pos = 0, i = str.size() - 1; i > 0 ; i--) {
|
|
if (wide and static_cast<unsigned char>(str.at(i)) > 0xef) {
|
|
x += 2;
|
|
last_pos = max((size_t)0, i - 1);
|
|
}
|
|
else if ((static_cast<unsigned char>(str.at(i)) & 0xC0) != 0x80) {
|
|
x++;
|
|
last_pos = i;
|
|
}
|
|
if (x >= len) {
|
|
str = str.substr(last_pos);
|
|
str.shrink_to_fit();
|
|
break;
|
|
}
|
|
}
|
|
return str;
|
|
}
|
|
|
|
string s_replace(const string& str, const string& from, const string& to) {
|
|
string out = str;
|
|
for (size_t start_pos = out.find(from); start_pos != std::string::npos; start_pos = out.find(from)) {
|
|
out.replace(start_pos, from.length(), to);
|
|
}
|
|
return out;
|
|
}
|
|
|
|
string ltrim(const string& str, const string& t_str) {
|
|
string_view str_v = str;
|
|
while (str_v.starts_with(t_str)) str_v.remove_prefix(t_str.size());
|
|
return (string)str_v;
|
|
}
|
|
|
|
string rtrim(const string& str, const string& t_str) {
|
|
string_view str_v = str;
|
|
while (str_v.ends_with(t_str)) str_v.remove_suffix(t_str.size());
|
|
return (string)str_v;
|
|
}
|
|
|
|
auto ssplit(const string& str, const char& delim) -> vector<string> {
|
|
vector<string> out;
|
|
for (const auto& s : str | rng::views::split(delim)
|
|
| rng::views::transform([](auto &&rng) {
|
|
return string_view(&*rng.begin(), rng::distance(rng));
|
|
})) {
|
|
if (not s.empty()) out.emplace_back(s);
|
|
}
|
|
return out;
|
|
}
|
|
|
|
string ljust(string str, const size_t x, const bool utf, const bool wide, const bool limit) {
|
|
if (utf) {
|
|
if (limit and ulen(str, wide) > x) return uresize(str, x, wide);
|
|
return str + string(max((int)(x - ulen(str)), 0), ' ');
|
|
}
|
|
else {
|
|
if (limit and str.size() > x) { str.resize(x); return str; }
|
|
return str + string(max((int)(x - str.size()), 0), ' ');
|
|
}
|
|
}
|
|
|
|
string rjust(string str, const size_t x, const bool utf, const bool wide, const bool limit) {
|
|
if (utf) {
|
|
if (limit and ulen(str, wide) > x) return uresize(str, x, wide);
|
|
return string(max((int)(x - ulen(str)), 0), ' ') + str;
|
|
}
|
|
else {
|
|
if (limit and str.size() > x) { str.resize(x); return str; };
|
|
return string(max((int)(x - str.size()), 0), ' ') + str;
|
|
}
|
|
}
|
|
|
|
string cjust(string str, const size_t x, const bool utf, const bool wide, const bool limit) {
|
|
if (utf) {
|
|
if (limit and ulen(str, wide) > x) return uresize(str, x, wide);
|
|
return string(max((int)ceil((double)(x - ulen(str)) / 2), 0), ' ') + str + string(max((int)floor((double)(x - ulen(str)) / 2), 0), ' ');
|
|
}
|
|
else {
|
|
if (limit and str.size() > x) { str.resize(x); return str; }
|
|
return string(max((int)ceil((double)(x - str.size()) / 2), 0), ' ') + str + string(max((int)floor((double)(x - str.size()) / 2), 0), ' ');
|
|
}
|
|
}
|
|
|
|
string trans(const string& str) {
|
|
string_view oldstr = str;
|
|
string newstr;
|
|
newstr.reserve(str.size());
|
|
for (size_t pos; (pos = oldstr.find(' ')) != string::npos;) {
|
|
newstr.append(oldstr.substr(0, pos));
|
|
size_t x = 0;
|
|
while (pos + x < oldstr.size() and oldstr.at(pos + x) == ' ') x++;
|
|
newstr.append(Mv::r(x));
|
|
oldstr.remove_prefix(pos + x);
|
|
}
|
|
return (newstr.empty()) ? str : newstr + (string)oldstr;
|
|
}
|
|
|
|
string sec_to_dhms(size_t seconds, bool no_days, bool no_seconds) {
|
|
size_t days = seconds / 86400; seconds %= 86400;
|
|
size_t hours = seconds / 3600; seconds %= 3600;
|
|
size_t minutes = seconds / 60; seconds %= 60;
|
|
string out = (not no_days and days > 0 ? to_string(days) + "d " : "")
|
|
+ (hours < 10 ? "0" : "") + to_string(hours) + ':'
|
|
+ (minutes < 10 ? "0" : "") + to_string(minutes)
|
|
+ (not no_seconds ? ":" + string(std::cmp_less(seconds, 10) ? "0" : "") + to_string(seconds) : "");
|
|
return out;
|
|
}
|
|
|
|
string floating_humanizer(uint64_t value, const bool shorten, size_t start, const bool bit, const bool per_second) {
|
|
string out;
|
|
const size_t mult = (bit) ? 8 : 1;
|
|
static const array<string, 11> Units_bit = {"bit", "Kib", "Mib", "Gib", "Tib", "Pib", "Eib", "Zib", "Yib", "Bib", "GEb"};
|
|
static const array<string, 11> Units_byte = {"Byte", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB", "BiB", "GEB"};
|
|
const auto& units = (bit) ? Units_bit : Units_byte;
|
|
|
|
value *= 100 * mult;
|
|
|
|
while (value >= 102400) {
|
|
value >>= 10;
|
|
if (value < 100) {
|
|
out = to_string(value);
|
|
break;
|
|
}
|
|
start++;
|
|
}
|
|
if (out.empty()) {
|
|
out = to_string(value);
|
|
if (out.size() == 4 and start > 0) { out.pop_back(); out.insert(2, ".");}
|
|
else if (out.size() == 3 and start > 0) out.insert(1, ".");
|
|
else if (out.size() >= 2) out.resize(out.size() - 2);
|
|
}
|
|
if (shorten) {
|
|
if (out.find('.') != string::npos) out = to_string((int)round(stof(out)));
|
|
if (out.size() > 3) { out = to_string((int)(out[0] - '0') + 1); start++;}
|
|
out.push_back(units[start][0]);
|
|
}
|
|
else out += " " + units[start];
|
|
|
|
if (per_second) out += (bit) ? "ps" : "/s";
|
|
return out;
|
|
}
|
|
|
|
std::string operator*(const string& str, int64_t n) {
|
|
if (n < 1 or str.empty()) return "";
|
|
else if(n == 1) return str;
|
|
string new_str;
|
|
new_str.reserve(str.size() * n);
|
|
for (; n > 0; n--) new_str.append(str);
|
|
return new_str;
|
|
}
|
|
|
|
string strf_time(const string& strf) {
|
|
auto in_time_t = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
|
|
std::tm bt {};
|
|
std::stringstream ss;
|
|
ss << std::put_time(localtime_r(&in_time_t, &bt), strf.c_str());
|
|
return ss.str();
|
|
}
|
|
|
|
void atomic_wait(const atomic<bool>& atom, const bool old) noexcept {
|
|
while (atom.load(std::memory_order_relaxed) == old ) busy_wait();
|
|
}
|
|
|
|
void atomic_wait_for(const atomic<bool>& atom, const bool old, const uint64_t wait_ms) noexcept {
|
|
const uint64_t start_time = time_ms();
|
|
while (atom.load(std::memory_order_relaxed) == old and (time_ms() - start_time < wait_ms)) sleep_ms(1);
|
|
}
|
|
|
|
atomic_lock::atomic_lock(atomic<bool>& atom, bool wait) : atom(atom) {
|
|
active_locks++;
|
|
if (wait) {
|
|
while (not this->atom.compare_exchange_strong(this->not_true, true));
|
|
} else this->atom.store(true);
|
|
}
|
|
|
|
atomic_lock::~atomic_lock() {
|
|
active_locks--;
|
|
this->atom.store(false);
|
|
}
|
|
|
|
string readfile(const std::filesystem::path& path, const string& fallback) {
|
|
if (not fs::exists(path)) return fallback;
|
|
string out;
|
|
try {
|
|
std::ifstream file(path);
|
|
for (string readstr; getline(file, readstr); out += readstr);
|
|
}
|
|
catch (const std::exception& e) {
|
|
Logger::error("readfile() : Exception when reading " + (string)path + " : " + e.what());
|
|
return fallback;
|
|
}
|
|
return (out.empty() ? fallback : out);
|
|
}
|
|
|
|
auto celsius_to(const long long& celsius, const string& scale) -> tuple<long long, string> {
|
|
if (scale == "celsius")
|
|
return {celsius, "°C"};
|
|
else if (scale == "fahrenheit")
|
|
return {(long long)round((double)celsius * 1.8 + 32), "°F"};
|
|
else if (scale == "kelvin")
|
|
return {(long long)round((double)celsius + 273.15), "K "};
|
|
else if (scale == "rankine")
|
|
return {(long long)round((double)celsius * 1.8 + 491.67), "°R"};
|
|
return {0, ""};
|
|
}
|
|
|
|
string hostname() {
|
|
char host[HOST_NAME_MAX];
|
|
gethostname(host, HOST_NAME_MAX);
|
|
return (string)host;
|
|
}
|
|
|
|
string username() {
|
|
auto user = getenv("LOGNAME");
|
|
if (user == NULL or strlen(user) == 0) user = getenv("USER");
|
|
return (user != NULL ? user : "");
|
|
}
|
|
|
|
}
|
|
|
|
namespace Logger {
|
|
using namespace Tools;
|
|
std::atomic<bool> busy (false);
|
|
bool first = true;
|
|
const string tdf = "%Y/%m/%d (%T) | ";
|
|
|
|
size_t loglevel;
|
|
fs::path logfile;
|
|
|
|
//* Wrapper for lowering priviliges if using SUID bit and currently isn't using real userid
|
|
class lose_priv {
|
|
int status = -1;
|
|
public:
|
|
lose_priv() {
|
|
if (geteuid() != Global::real_uid) this->status = seteuid(Global::real_uid);
|
|
}
|
|
~lose_priv() {
|
|
if (status == 0) status = seteuid(Global::set_uid);
|
|
}
|
|
};
|
|
|
|
void set(const string& level) {
|
|
loglevel = v_index(log_levels, level);
|
|
}
|
|
|
|
void log_write(const size_t level, const string& msg) {
|
|
if (loglevel < level or logfile.empty()) return;
|
|
atomic_lock lck(busy, true);
|
|
lose_priv neutered{};
|
|
std::error_code ec;
|
|
try {
|
|
if (fs::exists(logfile) and fs::file_size(logfile, ec) > 1024 << 10 and not ec) {
|
|
auto old_log = logfile;
|
|
old_log += ".1";
|
|
if (fs::exists(old_log)) fs::remove(old_log, ec);
|
|
if (not ec) fs::rename(logfile, old_log, ec);
|
|
}
|
|
if (not ec) {
|
|
std::ofstream lwrite(logfile, std::ios::app);
|
|
if (first) { first = false; lwrite << "\n" << strf_time(tdf) << "===> btop++ v." << Global::Version << "\n";}
|
|
lwrite << strf_time(tdf) << log_levels.at(level) << ": " << msg << "\n";
|
|
}
|
|
else logfile.clear();
|
|
}
|
|
catch (const std::exception& e) {
|
|
logfile.clear();
|
|
throw std::runtime_error("Exception in Logger::log_write() : " + (string)e.what());
|
|
}
|
|
}
|
|
}
|