commit c2c4fe47db3002c3433114954c22bd92b149bea0 Author: aristocratos <admin@qvantnet.com> Date: Sat Nov 13 23:15:53 2021 +0100 Changes from main + fixes commit bd5d86708907397f7fc40868ff3665e23f24bb8a Author: aristocratos <admin@qvantnet.com> Date: Sat Nov 13 21:24:01 2021 +0100 Fixes commit dc5f0606cbe6f4d61bec3621c25190f1241b3fce Author: aristocratos <admin@qvantnet.com> Date: Sat Nov 13 20:51:06 2021 +0100 Fixed leak in Proc::collect() commit 8b59ab6e1120439a070b07a4255b10bd7d5197cf Author: aristocratos <admin@qvantnet.com> Date: Sat Nov 13 19:59:56 2021 +0100 Fixed process cpu usage calculation commit 53c8a0325b7567b84da2f01ebd5acad33db4c0cb 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 commit 940cd0a5131253b0595b233f9da350101211d3cb Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 24 21:12:16 2021 +0200 limit cpu temp to 20 commit 254ceb9c2df0374ad07a6ca1e867ef40a60efc24 Author: aristocratos <admin@qvantnet.com> Date: Sun Oct 24 11:24:04 2021 +0200 Fixed up Makefile commit 6fa3bf41d757edbb311b99292b26aa45e83d9b9d Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 21 13:12:45 2021 +0200 Makefile fixed WARNFLAGS commit 2c98e2ca2927d772674c130dcc527f3318daf150 Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 21 13:08:12 2021 +0200 Updated Makefile commit e69780e9bce7af37ba6a85843db0e97c55c61395 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 20 23:26:09 2021 +0200 fix build commit de6216792154477a5ab7f564c9467761daf842e2 Merge: a590dd3a0ee404Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 20 23:10:36 2021 +0200 Merge branch 'main' into OSX commit a590dd3f67c9f2f8f8dc3fa49920a40a5e8b369d Author: aristocratos <admin@qvantnet.com> Date: Mon Oct 18 11:20:12 2021 +0200 Ignore format-truncation commit 4c30742d412cf552de22b3746a68cd62bfe867f2 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 18 10:08:01 2021 +0200 comments about temp sensors commit 46030de77cb1409eb8b0247c331408a240b0227a Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 18 08:10:37 2021 +0200 available = total - used commit 4c228de0ef8a75275178bad081e568f85fc579fd Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 17 22:19:41 2021 +0200 use sysconf to get arg_max - seems simpler commit c60fc29f0f62831730c04c23cd9ffbefef50a1d8 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 17 22:10:50 2021 +0200 arg_max should be int on macos commit 0b5a931a6d5e8d1a434e88e8fd0613ab948995fa Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 17 22:01:42 2021 +0200 only fetch max_args once commit 71d5cd5fd91511a90e43e5e6dbf7a1b6a3c3f9c8 Author: aristocratos <admin@qvantnet.com> Date: Sat Oct 16 23:24:07 2021 +0200 Reverted mutexes back to custom atomic bool based locks commit 3f34a67df68f3f451cb48b023b7cd42ccf933ce4 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 16 21:47:55 2021 +0200 these helpers can be static commit fc19c46c8aab03e252f60f6f9447d7e1861cbcb9 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 commit c252c618c043c4b85783f56363121877d0db0727 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 16 21:09:21 2021 +0200 don't crash on intel commit 9f88187c29821148c7a5272926d204bd3eb39f89 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 16 21:06:18 2021 +0200 small improvement commit 808f09c97465e8cf511f7690b40a69cd8a2efa15 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 16 20:59:48 2021 +0200 don't iterate 3 times commit d8408336e3b8336025a087a2bf79a2d15f51ee66 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 16 20:59:27 2021 +0200 remove debug commit 4f078c3beb960fe06f4d8b44b9c913e2aacf7625 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 13 23:38:27 2021 +0200 more temperature (M1 + intel) commit 289880aaa6d1a3625c01e9d7643138343b29db53 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 commit 88a2528ca3a2390f2c94c7f1a18ba982a5e5f2b2 Author: aristocratos <admin@qvantnet.com> Date: Sat Oct 16 19:34:10 2021 +0200 Merge changes from main commit 3ffb21203aa3f4ad978533a3f2b1e67e636381ea 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 commit 70b48710626ba22df496ba741625ce03cba6abbd 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 commit fbae907720afbae47162666b6b0aea974be80c07 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Fri Oct 15 23:41:37 2021 +0200 temperature sensors via IOKit commit cef0f0a68daa88a380000ce200a364e4701ba93a Author: aristocratos <admin@qvantnet.com> Date: Fri Oct 15 18:39:17 2021 +0200 Process command line arguments commit 921cfa01ffc104c57f2825d0bca648233ddff191 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 commit a416c888c7356634ef7a5286130a56160d72f50a Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 13 21:16:41 2021 +0200 temperature commit e7afe00ce7960bfe6fb6ba2a9a2f5d498c5b4fca Author: aristocratos <admin@qvantnet.com> Date: Wed Oct 13 12:54:43 2021 +0200 Cpu usage working again commit 4193ef8921617e48ce07ce95d898386f7dd77f43 Author: aristocratos <admin@qvantnet.com> Date: Wed Oct 13 10:36:51 2021 +0200 Fixed cpu lazy sorting commit 93fcb6ff04d84c008ed9f7d28918eb9eb8adf740 Author: aristocratos <admin@qvantnet.com> Date: Tue Oct 12 22:22:45 2021 +0200 Update README.md commit 683354cd2ed8add79c6940e51800431e8b020635 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 commit 8a399c499af87883a7e4b2cf7f6d193f76909923 Author: aristocratos <admin@qvantnet.com> Date: Tue Oct 12 21:50:46 2021 +0200 pointer to smart pointer, first pass commit 772605003af9c1c00f163ff75279cd0055074c96 Author: aristocratos <admin@qvantnet.com> Date: Tue Oct 12 18:54:38 2021 +0200 Fixed detailed memory not updating commit 28cb67753332fe8c93d23cbf8e4db636fc6823d6 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 11 22:19:25 2021 +0200 more memory free-up - still leaks like crazy commit 304457863f6cdccf82fbe1cca3078c7f5d9f97cd Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 11 21:48:07 2021 +0200 more RAII cleanup commit 82e2e3c55c23e37dbf226952cca4587df3522fa3 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 commit 68603f2b37e34828f78f0f675f66bd835dae8325 Author: aristocratos <admin@qvantnet.com> Date: Mon Oct 11 10:57:04 2021 +0200 RAII Wrappers for Cpu::get_battery() commit d5cb24fbeb19ae57507e1715aa402b2dc33f9b6b Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 10 20:23:11 2021 +0200 RAII commit 8fad5a61bee973c22f3a11fd7fee2c4e40390bbb Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 9 21:44:16 2021 +0200 get more disk IO stats commit 7fa903cf160b391fb316ea32a60984921a174066 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 9 21:43:48 2021 +0200 fix build commit 98036db660e306626d41fb1b67d9938d9ffe168a Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 9 21:18:25 2021 +0200 remove unnecessary uptime param commit aae7ae35caec64ba611d9b78b24c0ad2716f333e Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 9 21:07:23 2021 +0200 remove debug logging commit 5187420b04973edcdd25c1b639795a2c8539b2d9 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 9 21:06:43 2021 +0200 fix process elapsed time commit 89582c0ea6e9bdd7a658b5583d2ce2c5deeee8b0 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 9 21:06:29 2021 +0200 don't double free commit 6d724d6155bad8c084e4c9bdb1d7dda13543a5ac Author: Shriraj Hegde <shriraj.hegde@gmail.com> Date: Sat Oct 9 21:46:33 2021 +0530 Change Upload filename commit 4f94ecc8ad7d7cdb7daed82fd98a5634d723ec6b Author: Shriraj Hegde <shriraj.hegde@gmail.com> Date: Sat Oct 9 21:40:11 2021 +0530 Fix upload path commit e1d6d0a1f224474417078a0a1b98a6c4b5c94a53 Author: Shriraj Hegde <shriraj.hegde@gmail.com> Date: Sat Oct 9 21:36:13 2021 +0530 Skip installing gcc via Homebrew Change job name commit 02cdd9d759d163519048d24746273e4eda2149d0 Author: Shriraj Hegde <shriraj.hegde@gmail.com> Date: Sat Oct 9 21:30:40 2021 +0530 Fix uploading Remove distclean commit 39eb6c396fc31f798d23c21e7f4b313930dca982 Author: Shriraj Hegde <shriraj.hegde@gmail.com> Date: Sat Oct 9 21:26:57 2021 +0530 Disable static compilation commit 099592bccdafe8d8d8c421bcad3e036cbea580ce Author: aristocratos <admin@qvantnet.com> Date: Sat Oct 9 17:52:10 2021 +0200 Ignore empty pid 0 to fix tree mode commit a28e17556e74bb618fc2b6eb74f250b139406cdd Author: Shriraj Hegde <shriraj.hegde@gmail.com> Date: Sat Oct 9 21:17:11 2021 +0530 Add workflow for MacOS commit aee9179c0a98bce54b55c8bb8ebdc1ac99bad69e Author: aristocratos <admin@qvantnet.com> Date: Sat Oct 9 17:36:46 2021 +0200 Disable failed tty mode detection for OSX commit 4b7b98058d7190a494fa522834217d786d71e5fb 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 commit bfa0629e7d1e50f88d9a1207930e2f39270fc189 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Fri Oct 8 22:28:10 2021 +0200 fill in 0 for ioticks commit a016ff8a039634bc37a22a4a84b31055b3cfab37 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 commit f98606c6db09d50c7ae234437ea03eda2cc8739c Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Fri Oct 8 09:32:06 2021 +0200 per process IO stats commit c8b50ed4883103f66c9ed869fd0252d48f18f58f Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Fri Oct 8 00:11:08 2021 +0200 don't show autofs, it's useless commit c4df64d4409c511847d76b37a0794b8bb4f6942d Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 7 18:41:49 2021 +0200 Fixed compile time display for gmake and command timings commit b3e6f495f76bd71fba3442a557df22afdd3e642d Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 7 18:26:15 2021 +0200 Fixed clk_tck -> clkTck commit e53799188ffc24f3948e7ced375b7fbb53911247 Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 7 18:25:14 2021 +0200 Fixed better detection for OSX commit b864edf984e8f0daa0f10a6ee305074c68efeb42 Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 7 18:24:37 2021 +0200 Fixed cumulative cpu usage commit 6a3c5d9b976c711461d08c373483c84bb69db257 Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 7 13:20:30 2021 +0200 Proc::collect() better cpu percent accurazy commit 84d0596294432baef1b10f7d3a566a07382f69d3 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 commit 3564f8e4c26f04ec89482606e68a452a3e5f9693 Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 7 12:56:27 2021 +0200 Proc::collect() fixed cputimes and cpu percentage calc commit 98e1e874059fe69968d4bb7e4685f292e3b7fd65 Merge: 60c5636d96fdd7Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Thu Oct 7 11:32:41 2021 +0200 Merge branch 'main' into OSX commit 60c5636cd7c18e6c806cb4cd88846db10092dd57 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 22:45:54 2021 +0200 fix warning commit 489e446152ce00f8e92db8c4e10759f96e38f17f Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 22:38:40 2021 +0200 details + process states commit 7e5a808c731772bab35204f2e286975fca334f54 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 22:38:19 2021 +0200 avoid details crash commit 9c9da4606b3f93c0701b820a875fb3db5d0c3daf Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 21:03:21 2021 +0200 fix quit on macos commit ec7415384d9d9b42892a1e36ff55bf7a117a253b Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 00:41:37 2021 +0200 fix mistake in makefile commit 5ac8fa4c8a8f73efac6ac1f15e458ed3b2c1164b Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 18:56:13 2021 +0200 don't show /dev commit d901bbebd94ec45c45431fcd1ab37a974f783d9b Author: aristocratos <gnmjpl@gmail.com> Date: Wed Oct 6 17:27:51 2021 +0200 Ignore tags and other branches commit c7f1e71e29bafb5334cd4e256c662e5ee6303b1b Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 16:00:41 2021 +0200 comment commit b9d58e3faf5b60ad4f5f65454b454ff52deb5eaa Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 15:55:58 2021 +0200 impossible to get CPU freq on M1 apparently commit 66072711c24b2694c4a0054c58829095ed97ada2 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 15:33:43 2021 +0200 detect full commit 6bb0e930a2c44b4fb7d0d02a40f210fa12fdc657 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 00:38:46 2021 +0200 CPU freq in GHz commit a5f10f1a0ff9d10fa8d9d3038aa160b2380aa294 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 15:13:18 2021 +0200 check array length commit 155c848b97e1385bd29eaba91a87ecfb1d846bf7 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) commit cf51ba2ebe88dddd943040ced484581dc260c3c8 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 14:45:44 2021 +0200 remove some warnings commit 775dff5f72b0631bba0ed01d72374d8c1d1cd059 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 14:16:45 2021 +0200 fix link commit 8c67967775fb98bda80eee40cb6833a00bfb93a1 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 14:16:38 2021 +0200 reduce diff more commit 70b47d2ca8a7e0927cf9613e8fe776d2405f60ee Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 14:10:23 2021 +0200 reduce diff with main branch commit ca9cb48054c5850cbb3c23d368e04644a1885de0 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 commit c66b46f850d31c100226e519c55b39df9129aeb8 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 13:41:57 2021 +0200 battery state via CoreFoundation commit d0c6c0a362d8dc4f76e2901d7b406a70d8a69b6b Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 10:51:36 2021 +0200 all disks + load averages commit ca67526dc175dba7d98193a6462e70ef1acab194 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 10:33:55 2021 +0200 show all disks commit 56119f99a95ca541d6ab744a9ded54c84e0a3184 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 00:17:41 2021 +0200 procs sorting/filtering commit 8d86011d72a07b3f86f6b525b026b805667a3172 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 23:42:17 2021 +0200 battery states commit a9b64d62e4abf96fe3edcfa660871caef2041d0f Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 23:24:59 2021 +0200 battery hack works on M1 commit ce5103114246f5549017ef4823442a0ea916e1dd Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 23:18:22 2021 +0200 ugly hack to get battery commit d5e6725c6cd6973cc75dfe2993892e1c25ac8d38 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 22:42:42 2021 +0200 CPU stuff commit 5c02bd8c8380c5c74837b982987b7bf31103245f Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 21:25:42 2021 +0200 network commit d5da9d49835cdb23ad5830c000e1b93fcb8f46fd Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 15:43:05 2021 +0200 correct cached size commit 5f11aba504254d86ed9a2319967590d50988e16f Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 12:03:48 2021 +0200 vm stats from syscall + swap commit 776fc968529e8e7e38fc3168c83b2727198722ad Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 10:48:07 2021 +0200 seems to work indeed commit 7b40e2835a085bfe0d5eb40f367a1ed50353e4d9 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 10:46:14 2021 +0200 allow override optimization flag commit 005ea24e4c9bcc6608671a0635126bf10bdece34 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 10:09:24 2021 +0200 update Makefile commit af8cec9debac328645f0f4e2f136e4572d88332e Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 4 15:32:55 2021 +0200 some more params commit 7ebe4f7594599ccafbf72a004ce37f965549f64d Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 4 15:15:55 2021 +0200 show more disks commit e50a56394a3702b6616d03694f5d23a5f7ba2f1c Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 4 14:52:56 2021 +0200 disks show something commit 6497a8c2021b67057dfed26488aec0d82e919a90 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 4 09:15:35 2021 +0200 reformat commit 28e152b80c07c1fb9a4049cca8510f8bdc31adbb Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 23:21:13 2021 +0200 decrease diff with upstream commit 40da88e9ca91f3db540b63b15da5bc34dc9175e9 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 22:56:14 2021 +0200 try to get disks to show commit eaf2bb56a503fd2bf3787bfd90b5bc8640b7d628 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 22:42:01 2021 +0200 don't crash on deque::back() commit f66b6f712c361fafbe6d0cfd8f8c0838dc1bb4d2 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 22:08:21 2021 +0200 cpu freq, name & process uid/name commit 34a8a61f4de964d3137637b045be8738c4b1b6e5 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 21:46:11 2021 +0200 basic process info commit 29bb2dcc5fcc6b946511068f036590c18fb459ce 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) commit fb5970b0005793d760e652348d6acc30fb570f70 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 2 23:53:41 2021 +0200 comment commit 49d16cdddd56ba5631269eb2ffbec87d9f36f81e Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 2 23:51:29 2021 +0200 extract delimiters commit 3db9d6647650bd836201b8150e320a7fbf28e3c2 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 2 23:48:28 2021 +0200 first infos on macos: memory used & free commit f8acb2f8542429677116799ddb5f442488cf3f4f 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 commit bbba17cd35248e4e9ec9bfc1b113758cfcffde1f Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 10:51:36 2021 +0200 all disks + load averages commit 548203e93dfaf3ec9f24086bee08aac85891c4df Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 10:33:55 2021 +0200 show all disks commit 0ab2be39857fb3dcdb13b49bc9155f17c7d82a4e Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 00:17:41 2021 +0200 procs sorting/filtering commit 096104c90b571e931a3a7d9c813dbfc9aa47e212 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 23:42:17 2021 +0200 battery states commit 0ad93684c2a72293b23d6a2163c9ec51b499dfa3 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 23:24:59 2021 +0200 battery hack works on M1 commit c75b0f1cea34e6c4c70332ba7e2572ec9b70deef Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 23:18:22 2021 +0200 ugly hack to get battery commit 600b4f72b3bbbcd85bf5d148942bce7be8cf0b72 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 22:42:42 2021 +0200 CPU stuff commit 4eb812d52c6e179ae386df0156021d7c35cbe5a3 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 21:25:42 2021 +0200 network commit 899be68a78270216bfdcca5f0c87668a87c8792f Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 15:43:05 2021 +0200 correct cached size commit a1c7f935e3a5661688c0de1ad3226f7bc43b9979 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 12:03:48 2021 +0200 vm stats from syscall + swap commit bd1050a7404f9766a0125523c868a27d5cfac8e8 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 10:48:07 2021 +0200 seems to work indeed commit 5094b73758ee88617e8d5ce876211e1efa298769 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 10:46:14 2021 +0200 allow override optimization flag commit 8811270332bc2276cd18c1116f4d3c2d64a6f721 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 10:09:24 2021 +0200 update Makefile commit 42f966f448b9ad571db7849dc8fd525e0fe72309 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 4 15:32:55 2021 +0200 some more params commit c1e6d6a62e2810f80fac372e666ec169540b0591 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 4 15:15:55 2021 +0200 show more disks commit 50fcdaa8543f717bf36146cfa38636fd39009f23 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 4 14:52:56 2021 +0200 disks show something commit 264bf2d7da0e3fabb5987cddee73762e52170a51 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 4 09:15:35 2021 +0200 reformat commit 1fd625086ba42e9440c463ae940563d934b8b5c3 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 23:21:13 2021 +0200 decrease diff with upstream commit 17f9f3703c1dd52a86176131a2239cd52ee285bd Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 22:56:14 2021 +0200 try to get disks to show commit 8462ae6431fcfe1985d1bbb4404452ddc03cc1de Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 22:42:01 2021 +0200 don't crash on deque::back() commit 78bce5b5a6c1c0f3b38f802acad49ec2e32482d6 Merge: 53e379df9505a4Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 22:08:34 2021 +0200 Merge branch 'aristocratos:main' into main commit 53e379d74dffe2282b089450728501b51d13d199 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 22:08:21 2021 +0200 cpu freq, name & process uid/name commit 2a44b307ef9e947c1007a86988876668a5731e64 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 21:46:11 2021 +0200 basic process info commit 66534eb5b50753217687de0414d390bcb2a14cf1 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) commit 0983917f26948d83fd8da103903ec99f88058d87 Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 2 23:53:41 2021 +0200 comment commit 9732507248b30139d4af54615945c0b4737cff7d Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 2 23:51:29 2021 +0200 extract delimiters commit 6e704ce8387041c33022459fb6a084362f82a72c 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 commit fe4db7c16cd349053385eda62e9f2df2e7344d3d Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 2 23:48:28 2021 +0200 first infos on macos: memory used & free commit 7bfbd83a476c8cbe3b74e22b1e44f201026bf9d1 Merge: 8c8139ba15f961Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Fri Oct 1 17:05:26 2021 +0200 Merge branch 'aristocratos:main' into main commit 8c8139bd1df0849061b5e1425a3138d5f45ec149 Merge: 679d21ca246c09Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Sep 29 21:50:00 2021 +0200 Merge branch 'aristocratos:main' into main commit 679d21cd223b1928e8dde95cac25e8bfb412bedf Merge: 4c70c5ba49b8f9Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Sep 29 20:23:34 2021 +0200 Merge branch 'aristocratos:main' into main commit 4c70c5bdd98bfcc0ae9d9d9e8e3713dc8af71d03 Merge: 84a9746c70667eAuthor: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Sep 29 08:30:05 2021 +0200 Merge branch 'aristocratos:main' into main commit 84a974695afaadc53d1d8576ea66255166ede482 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>
606 lines
21 KiB
C++
606 lines
21 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 <array>
|
|
#include <ranges>
|
|
#include <atomic>
|
|
#include <fstream>
|
|
#include <string_view>
|
|
|
|
#include <btop_config.hpp>
|
|
#include <btop_shared.hpp>
|
|
#include <btop_tools.hpp>
|
|
|
|
using std::array, std::atomic, std::string_view, std::string_literals::operator""s;
|
|
namespace fs = std::filesystem;
|
|
namespace rng = std::ranges;
|
|
using namespace Tools;
|
|
|
|
//* Functions and variables for reading and writing the btop config file
|
|
namespace Config {
|
|
|
|
atomic<bool> locked (false);
|
|
atomic<bool> writelock (false);
|
|
bool write_new;
|
|
|
|
const vector<array<string, 2>> descriptions = {
|
|
{"color_theme", "#* Name of a btop++/bpytop/bashtop formatted \".theme\" file, \"Default\" and \"TTY\" for builtin themes.\n"
|
|
"#* Themes should be placed in \"../share/btop/themes\" relative to binary or \"$HOME/.config/btop/themes\""},
|
|
|
|
{"theme_background", "#* If the theme set background should be shown, set to False if you want terminal background transparency."},
|
|
|
|
{"truecolor", "#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false."},
|
|
|
|
{"force_tty", "#* Set to true to force tty mode regardless if a real tty has been detected or not.\n"
|
|
"#* Will force 16-color mode and TTY theme, set all graph symbols to \"tty\" and swap out other non tty friendly symbols."},
|
|
|
|
{"presets", "#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.\n"
|
|
"#* Format: \"box_name:P:G,box_name:P:G\" P=(0 or 1) for alternate positons, G=graph symbol to use for box.\n"
|
|
"#* Use withespace \" \" as seprator between different presets.\n"
|
|
"#* Example: \"cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty\""},
|
|
|
|
{"vim_keys", "#* Set to True to enable \"h,j,k,l\" keys for directional control in lists.\n"
|
|
"#* Conflicting keys for h:\"help\" and k:\"kill\" is accessible while holding shift."},
|
|
|
|
{"rounded_corners", "#* Rounded corners on boxes, is ignored if TTY mode is ON."},
|
|
|
|
{"graph_symbol", "#* Default symbols to use for graph creation, \"braille\", \"block\" or \"tty\".\n"
|
|
"#* \"braille\" offers the highest resolution but might not be included in all fonts.\n"
|
|
"#* \"block\" has half the resolution of braille but uses more common characters.\n"
|
|
"#* \"tty\" uses only 3 different symbols but will work with most fonts and should work in a real TTY.\n"
|
|
"#* Note that \"tty\" only has half the horizontal resolution of the other two, so will show a shorter historical view."},
|
|
|
|
{"graph_symbol_cpu", "# Graph symbol to use for graphs in cpu box, \"default\", \"braille\", \"block\" or \"tty\"."},
|
|
|
|
{"graph_symbol_mem", "# Graph symbol to use for graphs in cpu box, \"default\", \"braille\", \"block\" or \"tty\"."},
|
|
|
|
{"graph_symbol_net", "# Graph symbol to use for graphs in cpu box, \"default\", \"braille\", \"block\" or \"tty\"."},
|
|
|
|
{"graph_symbol_proc", "# Graph symbol to use for graphs in cpu box, \"default\", \"braille\", \"block\" or \"tty\"."},
|
|
|
|
{"shown_boxes", "#* Manually set which boxes to show. Available values are \"cpu mem net proc\", separate values with whitespace."},
|
|
|
|
{"update_ms", "#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs."},
|
|
|
|
{"proc_sorting", "#* Processes sorting, \"pid\" \"program\" \"arguments\" \"threads\" \"user\" \"memory\" \"cpu lazy\" \"cpu responsive\",\n"
|
|
"#* \"cpu lazy\" sorts top process over time (easier to follow), \"cpu responsive\" updates top process directly."},
|
|
|
|
{"proc_reversed", "#* Reverse sorting order, True or False."},
|
|
|
|
{"proc_tree", "#* Show processes as a tree."},
|
|
|
|
{"proc_colors", "#* Use the cpu graph colors in the process list."},
|
|
|
|
{"proc_gradient", "#* Use a darkening gradient in the process list."},
|
|
|
|
{"proc_per_core", "#* If process cpu usage should be of the core it's running on or usage of the total available cpu power."},
|
|
|
|
{"proc_mem_bytes", "#* Show process memory as bytes instead of percent."},
|
|
|
|
{"proc_info_smaps", "#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)"},
|
|
|
|
{"proc_left", "#* Show proc box on left side of screen instead of right."},
|
|
|
|
{"cpu_graph_upper", "#* Sets the CPU stat shown in upper half of the CPU graph, \"total\" is always available.\n"
|
|
"#* Select from a list of detected attributes from the options menu."},
|
|
|
|
{"cpu_graph_lower", "#* Sets the CPU stat shown in lower half of the CPU graph, \"total\" is always available.\n"
|
|
"#* Select from a list of detected attributes from the options menu."},
|
|
|
|
{"cpu_invert_lower", "#* Toggles if the lower CPU graph should be inverted."},
|
|
|
|
{"cpu_single_graph", "#* Set to True to completely disable the lower CPU graph."},
|
|
|
|
{"cpu_bottom", "#* Show cpu box at bottom of screen instead of top."},
|
|
|
|
{"show_uptime", "#* Shows the system uptime in the CPU box."},
|
|
|
|
{"check_temp", "#* Show cpu temperature."},
|
|
|
|
{"cpu_sensor", "#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors."},
|
|
|
|
{"show_coretemp", "#* Show temperatures for cpu cores also if check_temp is True and sensors has been found."},
|
|
|
|
{"cpu_core_map", "#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.\n"
|
|
"#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.\n"
|
|
"#* Format \"x:y\" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.\n"
|
|
"#* Example: \"4:0 5:1 6:3\""},
|
|
|
|
{"temp_scale", "#* Which temperature scale to use, available values: \"celsius\", \"fahrenheit\", \"kelvin\" and \"rankine\"."},
|
|
|
|
{"show_cpu_freq", "#* Show CPU frequency."},
|
|
|
|
{"clock_format", "#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.\n"
|
|
"#* Special formatting: /host = hostname | /user = username | /uptime = system uptime"},
|
|
|
|
{"background_update", "#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort."},
|
|
|
|
{"custom_cpu_name", "#* Custom cpu model name, empty string to disable."},
|
|
|
|
{"disks_filter", "#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace \" \".\n"
|
|
"#* Begin line with \"exclude=\" to change to exclude filter, otherwise defaults to \"most include\" filter. Example: disks_filter=\"exclude=/boot /home/user\"."},
|
|
|
|
{"mem_graphs", "#* Show graphs instead of meters for memory values."},
|
|
|
|
{"mem_below_net", "#* Show mem box below net box instead of above."},
|
|
|
|
{"show_swap", "#* If swap memory should be shown in memory box."},
|
|
|
|
{"swap_disk", "#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk."},
|
|
|
|
{"show_disks", "#* If mem box should be split to also show disks info."},
|
|
|
|
{"only_physical", "#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar."},
|
|
|
|
{"use_fstab", "#* Read disks list from /etc/fstab. This also disables only_physical."},
|
|
|
|
{"show_io_stat", "#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view."},
|
|
|
|
{"io_mode", "#* Toggles io mode for disks, showing big graphs for disk read/write speeds."},
|
|
|
|
{"io_graph_combined", "#* Set to True to show combined read/write io graphs in io mode."},
|
|
|
|
{"io_graph_speeds", "#* Set the top speed for the io graphs in MiB/s (100 by default), use format \"mountpoint:speed\" separate disks with whitespace \" \".\n"
|
|
"#* Example: \"/mnt/media:100 /:20 /boot:1\"."},
|
|
|
|
{"net_download", "#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False."},
|
|
|
|
{"net_upload", ""},
|
|
|
|
{"net_auto", "#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest."},
|
|
|
|
{"net_sync", "#* Sync the auto scaling for download and upload to whichever currently has the highest scale."},
|
|
|
|
{"net_iface", "#* Starts with the Network Interface specified here."},
|
|
|
|
{"show_battery", "#* Show battery stats in top right if battery is present."},
|
|
|
|
{"selected_battery", "#* Which battery to use if multiple are present. \"Auto\" for auto detection."},
|
|
|
|
{"log_level", "#* Set loglevel for \"~/.config/btop/btop.log\" levels are: \"ERROR\" \"WARNING\" \"INFO\" \"DEBUG\".\n"
|
|
"#* The level set includes all lower levels, i.e. \"DEBUG\" will show all logging info."}
|
|
};
|
|
|
|
unordered_flat_map<string, string> strings = {
|
|
{"color_theme", "Default"},
|
|
{"shown_boxes", "cpu mem net proc"},
|
|
{"graph_symbol", "braille"},
|
|
{"presets", "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"},
|
|
{"graph_symbol_cpu", "default"},
|
|
{"graph_symbol_mem", "default"},
|
|
{"graph_symbol_net", "default"},
|
|
{"graph_symbol_proc", "default"},
|
|
{"proc_sorting", "cpu lazy"},
|
|
{"cpu_graph_upper", "total"},
|
|
{"cpu_graph_lower", "total"},
|
|
{"cpu_sensor", "Auto"},
|
|
{"selected_battery", "Auto"},
|
|
{"cpu_core_map", ""},
|
|
{"temp_scale", "celsius"},
|
|
{"clock_format", "%X"},
|
|
{"custom_cpu_name", ""},
|
|
{"disks_filter", ""},
|
|
{"io_graph_speeds", ""},
|
|
{"net_iface", ""},
|
|
{"log_level", "WARNING"},
|
|
{"proc_filter", ""},
|
|
{"proc_command", ""},
|
|
{"selected_name", ""},
|
|
};
|
|
unordered_flat_map<string, string> stringsTmp;
|
|
|
|
unordered_flat_map<string, bool> bools = {
|
|
{"theme_background", true},
|
|
{"truecolor", true},
|
|
{"rounded_corners", true},
|
|
{"proc_reversed", false},
|
|
{"proc_tree", false},
|
|
{"proc_colors", true},
|
|
{"proc_gradient", true},
|
|
{"proc_per_core", true},
|
|
{"proc_mem_bytes", true},
|
|
{"proc_info_smaps", false},
|
|
{"proc_left", false},
|
|
{"cpu_invert_lower", true},
|
|
{"cpu_single_graph", false},
|
|
{"cpu_bottom", false},
|
|
{"show_uptime", true},
|
|
{"check_temp", true},
|
|
{"show_coretemp", true},
|
|
{"show_cpu_freq", true},
|
|
{"background_update", true},
|
|
{"mem_graphs", true},
|
|
{"mem_below_net", false},
|
|
{"show_swap", true},
|
|
{"swap_disk", true},
|
|
{"show_disks", true},
|
|
{"only_physical", true},
|
|
{"use_fstab", true},
|
|
{"show_io_stat", true},
|
|
{"io_mode", false},
|
|
{"io_graph_combined", false},
|
|
{"net_auto", true},
|
|
{"net_sync", false},
|
|
{"show_battery", true},
|
|
{"vim_keys", false},
|
|
{"tty_mode", false},
|
|
{"force_tty", false},
|
|
{"lowcolor", false},
|
|
{"show_detailed", false},
|
|
{"proc_filtering", false},
|
|
};
|
|
unordered_flat_map<string, bool> boolsTmp;
|
|
|
|
unordered_flat_map<string, int> ints = {
|
|
{"update_ms", 2000},
|
|
{"net_download", 100},
|
|
{"net_upload", 100},
|
|
{"detailed_pid", 0},
|
|
{"selected_pid", 0},
|
|
{"proc_start", 0},
|
|
{"proc_selected", 0},
|
|
{"proc_last_selected", 0},
|
|
};
|
|
unordered_flat_map<string, int> intsTmp;
|
|
|
|
bool _locked(const string& name) {
|
|
atomic_wait(writelock, true);
|
|
if (not write_new and rng::find_if(descriptions, [&name](const auto& a) { return a.at(0) == name; }) != descriptions.end())
|
|
write_new = true;
|
|
return locked.load();
|
|
}
|
|
|
|
fs::path conf_dir;
|
|
fs::path conf_file;
|
|
|
|
vector<string> available_batteries = {"Auto"};
|
|
|
|
vector<string> current_boxes;
|
|
vector<string> preset_list = {"cpu:0:default,mem:0:default,net:0:default,proc:0:default"};
|
|
int current_preset = -1;
|
|
|
|
bool presetsValid(const string& presets) {
|
|
vector<string> new_presets = {preset_list.at(0)};
|
|
|
|
for (int x = 0; const auto& preset : ssplit(presets)) {
|
|
if (++x > 9) {
|
|
validError = "Too many presets entered!";
|
|
return false;
|
|
}
|
|
for (int y = 0; const auto& box : ssplit(preset, ',')) {
|
|
if (++y > 4) {
|
|
validError = "Too many boxes entered for preset!";
|
|
return false;
|
|
}
|
|
const auto& vals = ssplit(box, ':');
|
|
if (vals.size() != 3) {
|
|
validError = "Malformatted preset in config value presets!";
|
|
return false;
|
|
}
|
|
if (not is_in(vals.at(0), "cpu", "mem", "net", "proc")) {
|
|
validError = "Invalid box name in config value presets!";
|
|
return false;
|
|
}
|
|
if (not is_in(vals.at(1), "0", "1")) {
|
|
validError = "Invalid position value in config value presets!";
|
|
return false;
|
|
}
|
|
if (not v_contains(valid_graph_symbols_def, vals.at(2))) {
|
|
validError = "Invalid graph name in config value presets!";
|
|
return false;
|
|
}
|
|
}
|
|
new_presets.push_back(preset);
|
|
}
|
|
|
|
preset_list = move(new_presets);
|
|
return true;
|
|
}
|
|
|
|
//* Apply selected preset
|
|
void apply_preset(const string& preset) {
|
|
string boxes;
|
|
|
|
for (const auto& box : ssplit(preset, ',')) {
|
|
const auto& vals = ssplit(box, ':');
|
|
boxes += vals.at(0) + ' ';
|
|
}
|
|
if (not boxes.empty()) boxes.pop_back();
|
|
|
|
auto min_size = Term::get_min_size(boxes);
|
|
if (Term::width < min_size.at(0) or Term::height < min_size.at(1)) {
|
|
return;
|
|
}
|
|
|
|
for (const auto& box : ssplit(preset, ',')) {
|
|
const auto& vals = ssplit(box, ':');
|
|
if (vals.at(0) == "cpu") set("cpu_bottom", (vals.at(1) == "0" ? false : true));
|
|
else if (vals.at(0) == "mem") set("mem_below_net", (vals.at(1) == "0" ? false : true));
|
|
else if (vals.at(0) == "proc") set("proc_left", (vals.at(1) == "0" ? false : true));
|
|
set("graph_symbol_" + vals.at(0), vals.at(2));
|
|
}
|
|
|
|
if (check_boxes(boxes)) set("shown_boxes", boxes);
|
|
}
|
|
|
|
void lock() {
|
|
atomic_wait(writelock);
|
|
locked = true;
|
|
}
|
|
|
|
string validError;
|
|
|
|
bool intValid(const string& name, const string& value) {
|
|
int i_value;
|
|
try {
|
|
i_value = stoi(value);
|
|
}
|
|
catch (const std::invalid_argument&) {
|
|
validError = "Invalid numerical value!";
|
|
return false;
|
|
}
|
|
catch (const std::out_of_range&) {
|
|
validError = "Value out of range!";
|
|
return false;
|
|
}
|
|
catch (const std::exception& e) {
|
|
validError = (string)e.what();
|
|
return false;
|
|
}
|
|
|
|
if (name == "update_ms" and i_value < 100)
|
|
validError = "Config value update_ms set too low (<100).";
|
|
|
|
else if (name == "update_ms" and i_value > 86400000)
|
|
validError = "Config value update_ms set too high (>86400000).";
|
|
|
|
else
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
bool stringValid(const string& name, const string& value) {
|
|
if (name == "log_level" and not v_contains(Logger::log_levels, value))
|
|
validError = "Invalid log_level: " + value;
|
|
|
|
else if (name == "graph_symbol" and not v_contains(valid_graph_symbols, value))
|
|
validError = "Invalid graph symbol identifier: " + value;
|
|
|
|
else if (name.starts_with("graph_symbol_") and (value != "default" and not v_contains(valid_graph_symbols, value)))
|
|
validError = "Invalid graph symbol identifier for" + name + ": " + value;
|
|
|
|
else if (name == "shown_boxes" and not value.empty() and not check_boxes(value))
|
|
validError = "Invalid box name(s) in shown_boxes!";
|
|
|
|
else if (name == "presets" and not presetsValid(value))
|
|
return false;
|
|
|
|
else if (name == "cpu_core_map") {
|
|
const auto maps = ssplit(value);
|
|
bool all_good = true;
|
|
for (const auto& map : maps) {
|
|
const auto map_split = ssplit(map, ':');
|
|
if (map_split.size() != 2)
|
|
all_good = false;
|
|
else if (not isint(map_split.at(0)) or not isint(map_split.at(1)))
|
|
all_good = false;
|
|
|
|
if (not all_good) {
|
|
validError = "Invalid formatting of cpu_core_map!";
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
else if (name == "io_graph_speeds") {
|
|
const auto maps = ssplit(value);
|
|
bool all_good = true;
|
|
for (const auto& map : maps) {
|
|
const auto map_split = ssplit(map, ':');
|
|
if (map_split.size() != 2)
|
|
all_good = false;
|
|
else if (map_split.at(0).empty() or not isint(map_split.at(1)))
|
|
all_good = false;
|
|
|
|
if (not all_good) {
|
|
validError = "Invalid formatting of io_graph_speeds!";
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
else
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
string getAsString(const string& name) {
|
|
if (bools.contains(name))
|
|
return (bools.at(name) ? "True" : "False");
|
|
else if (ints.contains(name))
|
|
return to_string(ints.at(name));
|
|
else if (strings.contains(name))
|
|
return strings.at(name);
|
|
return "";
|
|
}
|
|
|
|
void flip(const string& name) {
|
|
if (_locked(name)) {
|
|
if (boolsTmp.contains(name)) boolsTmp.at(name) = not boolsTmp.at(name);
|
|
else boolsTmp.insert_or_assign(name, (not bools.at(name)));
|
|
}
|
|
else bools.at(name) = not bools.at(name);
|
|
}
|
|
|
|
void unlock() {
|
|
if (not locked) return;
|
|
atomic_wait(Runner::active);
|
|
atomic_lock lck(writelock, true);
|
|
try {
|
|
if (Proc::shown) {
|
|
ints.at("selected_pid") = Proc::selected_pid;
|
|
strings.at("selected_name") = Proc::selected_name;
|
|
ints.at("proc_start") = Proc::start;
|
|
ints.at("proc_selected") = Proc::selected;
|
|
}
|
|
|
|
for (auto& item : stringsTmp) {
|
|
strings.at(item.first) = item.second;
|
|
}
|
|
stringsTmp.clear();
|
|
|
|
for (auto& item : intsTmp) {
|
|
ints.at(item.first) = item.second;
|
|
}
|
|
intsTmp.clear();
|
|
|
|
for (auto& item : boolsTmp) {
|
|
bools.at(item.first) = item.second;
|
|
}
|
|
boolsTmp.clear();
|
|
}
|
|
catch (const std::exception& e) {
|
|
Global::exit_error_msg = "Exception during Config::unlock() : " + (string)e.what();
|
|
clean_quit(1);
|
|
}
|
|
|
|
locked = false;
|
|
}
|
|
|
|
bool check_boxes(const string& boxes) {
|
|
auto new_boxes = ssplit(boxes);
|
|
for (auto& box : new_boxes) {
|
|
if (not v_contains(valid_boxes, box)) return false;
|
|
}
|
|
current_boxes = move(new_boxes);
|
|
return true;
|
|
}
|
|
|
|
void toggle_box(const string& box) {
|
|
auto old_boxes = current_boxes;
|
|
auto box_pos = rng::find(current_boxes, box);
|
|
if (box_pos == current_boxes.end())
|
|
current_boxes.push_back(box);
|
|
else
|
|
current_boxes.erase(box_pos);
|
|
|
|
string new_boxes;
|
|
if (not current_boxes.empty()) {
|
|
for (const auto& b : current_boxes) new_boxes += b + ' ';
|
|
new_boxes.pop_back();
|
|
}
|
|
|
|
auto min_size = Term::get_min_size(new_boxes);
|
|
|
|
if (Term::width < min_size.at(0) or Term::height < min_size.at(1)) {
|
|
current_boxes = old_boxes;
|
|
return;
|
|
}
|
|
|
|
Config::set("shown_boxes", new_boxes);
|
|
}
|
|
|
|
void load(const fs::path& conf_file, vector<string>& load_warnings) {
|
|
if (conf_file.empty())
|
|
return;
|
|
else if (not fs::exists(conf_file)) {
|
|
write_new = true;
|
|
return;
|
|
}
|
|
std::ifstream cread(conf_file);
|
|
if (cread.good()) {
|
|
vector<string> valid_names;
|
|
for (auto &n : descriptions)
|
|
valid_names.push_back(n[0]);
|
|
if (string v_string; cread.peek() != '#' or (getline(cread, v_string, '\n') and not s_contains(v_string, Global::Version)))
|
|
write_new = true;
|
|
while (not cread.eof()) {
|
|
cread >> std::ws;
|
|
if (cread.peek() == '#') {
|
|
cread.ignore(SSmax, '\n');
|
|
continue;
|
|
}
|
|
string name, value;
|
|
getline(cread, name, '=');
|
|
if (name.ends_with(' ')) name = trim(name);
|
|
if (not v_contains(valid_names, name)) {
|
|
cread.ignore(SSmax, '\n');
|
|
continue;
|
|
}
|
|
cread >> std::ws;
|
|
|
|
if (bools.contains(name)) {
|
|
cread >> value;
|
|
if (not isbool(value))
|
|
load_warnings.push_back("Got an invalid bool value for config name: " + name);
|
|
else
|
|
bools.at(name) = stobool(value);
|
|
}
|
|
else if (ints.contains(name)) {
|
|
cread >> value;
|
|
if (not isint(value))
|
|
load_warnings.push_back("Got an invalid integer value for config name: " + name);
|
|
else if (not intValid(name, value)) {
|
|
load_warnings.push_back(validError);
|
|
}
|
|
else
|
|
ints.at(name) = stoi(value);
|
|
}
|
|
else if (strings.contains(name)) {
|
|
if (cread.peek() == '"') {
|
|
cread.ignore(1);
|
|
getline(cread, value, '"');
|
|
}
|
|
else cread >> value;
|
|
|
|
if (not stringValid(name, value))
|
|
load_warnings.push_back(validError);
|
|
else
|
|
strings.at(name) = value;
|
|
}
|
|
|
|
cread.ignore(SSmax, '\n');
|
|
}
|
|
|
|
if (not load_warnings.empty()) write_new = true;
|
|
}
|
|
}
|
|
|
|
void write() {
|
|
if (conf_file.empty() or not write_new) return;
|
|
Logger::debug("Writing new config file");
|
|
if (geteuid() != Global::real_uid and seteuid(Global::real_uid) != 0) return;
|
|
std::ofstream cwrite(conf_file, std::ios::trunc);
|
|
if (cwrite.good()) {
|
|
cwrite << "#? Config file for btop v. " << Global::Version;
|
|
for (auto [name, description] : descriptions) {
|
|
cwrite << "\n\n" << (description.empty() ? "" : description + "\n")
|
|
<< name << " = ";
|
|
if (strings.contains(name))
|
|
cwrite << "\"" << strings.at(name) << "\"";
|
|
else if (ints.contains(name))
|
|
cwrite << ints.at(name);
|
|
else if (bools.contains(name))
|
|
cwrite << (bools.at(name) ? "True" : "False");
|
|
}
|
|
}
|
|
}
|
|
} |