mirror of
https://github.com/thewtex/tmux-mem-cpu-load.git
synced 2026-09-10 07:16:16 -04:00
Compare commits
396 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
640eac3069 | ||
|
|
0b4c5e9894 | ||
|
|
96405e16ea | ||
|
|
ec3448c5c9 | ||
|
|
606622eb38 | ||
|
|
006b834b9c | ||
|
|
1922b61f3d | ||
|
|
ec284cc78f | ||
|
|
041d53d7d0 | ||
|
|
5aa51ed196 | ||
|
|
6b0f365a86 | ||
|
|
11b856c72d | ||
|
|
fdcde82be0 | ||
|
|
ab991091be | ||
|
|
b5772c1bfb | ||
|
|
df30c399fc | ||
|
|
90f1845d51 | ||
|
|
451107b7eb | ||
|
|
a5662eaca0 | ||
|
|
ef67d00820 | ||
|
|
4ecb3f52d8 | ||
|
|
40d42459f5 | ||
|
|
036e627089 | ||
|
|
6549a6cf2f | ||
|
|
359a595d73 | ||
|
|
9adf9470c7 | ||
|
|
192e31a62c | ||
|
|
abe531fffb | ||
|
|
8d062a7e36 | ||
|
|
83820d97a0 | ||
|
|
df71d2123a | ||
|
|
42bf188155 | ||
|
|
93525a5517 | ||
|
|
13160c7e80 | ||
|
|
bf0b2721df | ||
|
|
06fe4850db | ||
|
|
9c273230a8 | ||
|
|
8d7911abe1 | ||
|
|
79804bc3e1 | ||
|
|
9c83be94d4 | ||
|
|
9a9abc5d13 | ||
|
|
4aa31eb80c | ||
|
|
1dcf3f92fb | ||
|
|
525c6a28b2 | ||
|
|
4cf0dad920 | ||
|
|
451300eda2 | ||
|
|
8f7027f1fd | ||
|
|
b06c049d0f | ||
|
|
d1676552dc | ||
|
|
aa8fe65529 | ||
|
|
ba8489917d | ||
|
|
a991497b9f | ||
|
|
59cca005e4 | ||
|
|
35f9618d1f | ||
|
|
0c9a8d4612 | ||
|
|
c058ed6f21 | ||
|
|
6eec6350be | ||
|
|
d900b3a546 | ||
|
|
6d96a8a490 | ||
|
|
f08fce0f83 | ||
|
|
73b7f6c29f | ||
|
|
94aed0352c | ||
|
|
e232eef156 | ||
|
|
f9663c8f2f | ||
|
|
dc298e162a | ||
|
|
6178ba9aa3 | ||
|
|
88a219a36d | ||
|
|
2c3484286e | ||
|
|
5420cf8696 | ||
|
|
2b19ca8a0a | ||
|
|
b2c6cd43e0 | ||
|
|
a5d66aac16 | ||
|
|
bc279dd2cb | ||
|
|
018c03b131 | ||
|
|
b0644d7372 | ||
|
|
626253d791 | ||
|
|
66dfb979b8 | ||
|
|
adfed692ad | ||
|
|
5dccd1801f | ||
|
|
721cb67a80 | ||
|
|
c158cdd71e | ||
|
|
37220619a2 | ||
|
|
171917715d | ||
|
|
56b71ea699 | ||
|
|
651b134b09 | ||
|
|
a449ed042c | ||
|
|
bc4c0ddbad | ||
|
|
961351433c | ||
|
|
0b6cd002b3 | ||
|
|
d87de550f4 | ||
|
|
4de9c077f5 | ||
|
|
974e40bcb5 | ||
|
|
486e618f41 | ||
|
|
f29c4ff5c5 | ||
|
|
8052318680 | ||
|
|
0077534b96 | ||
|
|
1ac6729ef1 | ||
|
|
04419c8cdf | ||
|
|
b6afa5c5e9 | ||
|
|
96ea7dc050 | ||
|
|
0ca29c4ecd | ||
|
|
4be44f35f7 | ||
|
|
8c2f0e2cfd | ||
|
|
37b08090f1 | ||
|
|
c83d7ee712 | ||
|
|
8b6e394dd3 | ||
|
|
31768a203b | ||
|
|
9113cefccc | ||
|
|
39348840c1 | ||
|
|
3ec357c63c | ||
|
|
acea452957 | ||
|
|
705830d1df | ||
|
|
8c9c31798c | ||
|
|
bf41ae4393 | ||
|
|
e652a93b72 | ||
|
|
db4edaeecc | ||
|
|
39c6c57bf3 | ||
|
|
d5007d4694 | ||
|
|
10ad0b29fd | ||
|
|
fc78a0bdad | ||
|
|
d34821cb95 | ||
|
|
f96ae7a76a | ||
|
|
e24890652e | ||
|
|
12417dc358 | ||
|
|
2107ea84f1 | ||
|
|
67657e6312 | ||
|
|
15da3e0a59 | ||
|
|
2fdcf93296 | ||
|
|
7cf58a8367 | ||
|
|
3fad77c3ac | ||
|
|
abe7290511 | ||
|
|
22f4db4b0e | ||
|
|
75b9ea756e | ||
|
|
26b53ea94b | ||
|
|
0e227c1e88 | ||
|
|
5c37494d11 | ||
|
|
35fea56625 | ||
|
|
8018a0c761 | ||
|
|
d1f95acada | ||
|
|
8b1f07ccca | ||
|
|
d7db6d8c8b | ||
|
|
58564ae6b7 | ||
|
|
54fdf3c68c | ||
|
|
e5595e21f4 | ||
|
|
13c3205ec0 | ||
|
|
1b11c308ac | ||
|
|
dcadec63a2 | ||
|
|
0941898c02 | ||
|
|
1456c16cf8 | ||
|
|
6960e27dc4 | ||
|
|
a26f0ae59d | ||
|
|
18b4ed638a | ||
|
|
8af6dc22b8 | ||
|
|
b7d2d2a73e | ||
|
|
4a2c4efb9a | ||
|
|
ad83d9b3a9 | ||
|
|
c623ca889d | ||
|
|
3e12a64309 | ||
|
|
0bc57a9ac8 | ||
|
|
ce9de3f9aa | ||
|
|
710be9e355 | ||
|
|
3f647a9b2b | ||
|
|
97a655c856 | ||
|
|
cbe3074c6b | ||
|
|
1d1a516eda | ||
|
|
34b9d39b57 | ||
|
|
bac831cd69 | ||
|
|
e9a3726de7 | ||
|
|
6e1dbc6b1f | ||
|
|
b8594ecb82 | ||
|
|
159051079b | ||
|
|
cc59b4952f | ||
|
|
68fd497108 | ||
|
|
be0b914c49 | ||
|
|
6938941b99 | ||
|
|
42275e094d | ||
|
|
fb8e3c6ad0 | ||
|
|
e50d34873f | ||
|
|
7eef3670e0 | ||
|
|
4fd854ce16 | ||
|
|
c5f369ae00 | ||
|
|
81fea73e79 | ||
|
|
a6f57340d8 | ||
|
|
635334b141 | ||
|
|
0e89998ee4 | ||
|
|
1b8fa1ec3a | ||
|
|
451aed4530 | ||
|
|
859c60976a | ||
|
|
cc85854323 | ||
|
|
9ad57c906b | ||
|
|
c036017db3 | ||
|
|
f80a026c45 | ||
|
|
7ca3efacad | ||
|
|
e9af4ea2c0 | ||
|
|
cd0ad5c8ff | ||
|
|
ff36892e29 | ||
|
|
d273cbaf60 | ||
|
|
e1908ebd13 | ||
|
|
8e6d013c66 | ||
|
|
ad0a88d1f2 | ||
|
|
7cc6ff35cc | ||
|
|
79e16ec38b | ||
|
|
62c18a0778 | ||
|
|
b61503e76a | ||
|
|
557528b946 | ||
|
|
1fe9a33252 | ||
|
|
a8367d7f86 | ||
|
|
512185a6b3 | ||
|
|
c6d8a19a24 | ||
|
|
4355f8ffae | ||
|
|
39dc52f23c | ||
|
|
52540329e5 | ||
|
|
e70a16c936 | ||
|
|
32d9083326 | ||
|
|
ec1959128d | ||
|
|
395ac49e83 | ||
|
|
72b8493a59 | ||
|
|
87cc9b1ce8 | ||
|
|
240752d800 | ||
|
|
e8bea10056 | ||
|
|
1512a0bda0 | ||
|
|
91594b7a5a | ||
|
|
4ca1ab01e4 | ||
|
|
1481ba09dc | ||
|
|
33d64bc53b | ||
|
|
7cb154f267 | ||
|
|
cf2a094f13 | ||
|
|
869d43f102 | ||
|
|
80d70b7a4d | ||
|
|
d21be2b87c | ||
|
|
a727edef8f | ||
|
|
33eac9d16d | ||
|
|
ea98710e16 | ||
|
|
d07e07ba01 | ||
|
|
9dbf8086d4 | ||
|
|
c052f58eab | ||
|
|
d516985146 | ||
|
|
1ea2fe6d56 | ||
|
|
668a1d97dd | ||
|
|
b5a2fcfd34 | ||
|
|
69df3a37bf | ||
|
|
cc8eb47868 | ||
|
|
9bd9e79d36 | ||
|
|
3e7ce96903 | ||
|
|
580b076b79 | ||
|
|
112004f3db | ||
|
|
8afed01977 | ||
|
|
243487903a | ||
|
|
360ef2e9f2 | ||
|
|
3e0789b3d3 | ||
|
|
68ab061cb4 | ||
|
|
9498e06ac4 | ||
|
|
5132f338fd | ||
|
|
040857a4e8 | ||
|
|
ea0e620a46 | ||
|
|
fa4a5b5c2b | ||
|
|
1bfda9484a | ||
|
|
4c00be77ff | ||
|
|
5cd5a2468b | ||
|
|
05d226964a | ||
|
|
7e72e47d2c | ||
|
|
17dbdfe9ea | ||
|
|
87a92fa108 | ||
|
|
ca82149c10 | ||
|
|
4d6c6760b3 | ||
|
|
3a78f44e39 | ||
|
|
ae5c71441b | ||
|
|
3fd4a21d27 | ||
|
|
e459d40228 | ||
|
|
ec6b1c6cc7 | ||
|
|
dd8253e6df | ||
|
|
08bc9b7ecf | ||
|
|
eb338d92c5 | ||
|
|
2fb24571ef | ||
|
|
7c883b924a | ||
|
|
ed8ed793bf | ||
|
|
a53bbddef8 | ||
|
|
d3eb9e3187 | ||
|
|
b2084ea3b3 | ||
|
|
ae4e160ede | ||
|
|
89a4b0c048 | ||
|
|
51f85ba032 | ||
|
|
d5506ac797 | ||
|
|
3f4647a278 | ||
|
|
f2b75f7531 | ||
|
|
1cc6b0c9ef | ||
|
|
5fdb0e6227 | ||
|
|
acaf9b0b2b | ||
|
|
3475328dc4 | ||
|
|
2cc9efb187 | ||
|
|
7151b70c70 | ||
|
|
ee39fccc65 | ||
|
|
d692eeaf93 | ||
|
|
f073450edd | ||
|
|
8264c6e2a2 | ||
|
|
a2df46dae5 | ||
|
|
e8dd4b442f | ||
|
|
a2e8459457 | ||
|
|
df5d66fdbf | ||
|
|
dba56f1b56 | ||
|
|
f59b11971f | ||
|
|
6b8b746a0f | ||
|
|
ad096cbac6 | ||
|
|
3e743ee1c2 | ||
|
|
220d260673 | ||
|
|
e7f2dd25e8 | ||
|
|
b02d0000e9 | ||
|
|
5001bc4fe7 | ||
|
|
c6fc061f9d | ||
|
|
aadca0d325 | ||
|
|
d92113644c | ||
|
|
28040b61da | ||
|
|
e7ee4279f6 | ||
|
|
72f1b03078 | ||
|
|
42c93ac397 | ||
|
|
8e9033ee1e | ||
|
|
8aab7a817d | ||
|
|
ad1637f05b | ||
|
|
7a9209e243 | ||
|
|
26e89f95fa | ||
|
|
223868f554 | ||
|
|
080e1be24d | ||
|
|
47b9f62a10 | ||
|
|
660481f23b | ||
|
|
0c7ce142a2 | ||
|
|
b12dfc6f29 | ||
|
|
2040736dd6 | ||
|
|
444bf2fa1c | ||
|
|
634201aa2c | ||
|
|
03040e64f2 | ||
|
|
af8c544653 | ||
|
|
ea22ccd63f | ||
|
|
0857cdbfe4 | ||
|
|
ccf33e2a26 | ||
|
|
b0ab6ea57a | ||
|
|
5e354b9221 | ||
|
|
643fef3a7c | ||
|
|
fed7b88ccd | ||
|
|
4c9c9dde85 | ||
|
|
a7200d2364 | ||
|
|
a91673be3a | ||
|
|
fac8da7a0c | ||
|
|
69880667e5 | ||
|
|
c81bcc3d84 | ||
|
|
82d6687aee | ||
|
|
c07c80b662 | ||
|
|
6c46121f4d | ||
|
|
6f00fc1daa | ||
|
|
d413759f4e | ||
|
|
4bb0a7676f | ||
|
|
228639fa50 | ||
|
|
8418e297ad | ||
|
|
85e20f258c | ||
|
|
f95aa23b75 | ||
|
|
98a53bc262 | ||
|
|
e5f3dc1503 | ||
|
|
c5e080218c | ||
|
|
beea1a7cae | ||
|
|
f375fc7b72 | ||
|
|
365502dbf8 | ||
|
|
1b012b0f46 | ||
|
|
1155ca7c77 | ||
|
|
9d072d4ec1 | ||
|
|
777452a83e | ||
|
|
c13d4087b9 | ||
|
|
53ffd7ce10 | ||
|
|
06ebd3e9ab | ||
|
|
7186e5dbd0 | ||
|
|
b2f26bab3f | ||
|
|
816a26bab5 | ||
|
|
dd3cb1e27d | ||
|
|
c14c56c7ef | ||
|
|
7261b34ace | ||
|
|
86bdac97f8 | ||
|
|
2dc1716dd3 | ||
|
|
b00f53193b | ||
|
|
91034d3d29 | ||
|
|
ec28a5615b | ||
|
|
c7c0063916 | ||
|
|
fd38877476 | ||
|
|
39c97db2b0 | ||
|
|
2fd8b67424 | ||
|
|
e1754b0d60 | ||
|
|
d28fb387ca | ||
|
|
c40ab82bfa | ||
|
|
f9f1342280 | ||
|
|
b1109a31d9 | ||
|
|
457834ee1b | ||
|
|
0926ee84f8 | ||
|
|
dbd3f8e3c7 | ||
|
|
00a85129fa | ||
|
|
d83d5e302d | ||
|
|
88938b24c3 | ||
|
|
edc15497e2 | ||
|
|
83945d1a19 | ||
|
|
dc5fe29f1d |
4
.gitattributes
vendored
Normal file
4
.gitattributes
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
*.cc whitespace=tab-in-indent,no-lf-at-eof,trailing-whitespace
|
||||
*.h whitespace=tab-in-indent,no-lf-at-eof,trailing-whitespace
|
||||
*.rst whitespace=tab-in-indent,no-lf-at-eof,trailing-whitespace
|
||||
*.txt whitespace=tab-in-indent,no-lf-at-eof,trailing-whitespace
|
||||
9
.github/dependabot.yml
vendored
Normal file
9
.github/dependabot.yml
vendored
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
# Set update schedule for GitHub Actions
|
||||
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
# Check for updates to GitHub Actions every weekday
|
||||
interval: "daily"
|
||||
22
.github/workflows/expired.yml
vendored
Normal file
22
.github/workflows/expired.yml
vendored
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
name: 'Close stale issues and PRs'
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 */8 * * *'
|
||||
jobs:
|
||||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v11
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
exempt-issue-milestones: 'future,alpha,beta,release'
|
||||
exempt-pr-milestones: 'bugfix,improvement'
|
||||
exempt-all-pr-assignees: true
|
||||
stale-issue-message: 'This issue is stale because it has been open 120 days with no activity. Remove stale label or comment or this will be closed in 15 days.'
|
||||
stale-pr-message: 'This PR is stale because it has been open 120 days with no activity. Remove stale label or comment or this will be closed in 15 days.'
|
||||
close-issue-message: 'This issue was closed because it has been stalled for 30 days with no activity.'
|
||||
close-pr-message: 'This PR was closed because it has been stalled for 30 days with no activity.'
|
||||
days-before-issue-stale: 120
|
||||
days-before-pr-stale: 120
|
||||
days-before-issue-close: 30
|
||||
days-before-pr-close: 30
|
||||
34
.github/workflows/main.yml
vendored
Normal file
34
.github/workflows/main.yml
vendored
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
name: tmux-mem-cpu-load
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- '*'
|
||||
paths-ignore:
|
||||
- '**/README.md'
|
||||
- '**/README.rst'
|
||||
pull_request:
|
||||
branches:
|
||||
- '*'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
image:
|
||||
name: build ${{ matrix.arch_name }} ${{ matrix.build_type }}
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
# Disable: unsupported system: android-arm, android-arm64, android-x86, android-x86_64, web-wasm,
|
||||
# Disable: missing header in linux(GCC): windows-static-x64, windows-static-x64-posix, windows-static-x86, windows-shared-x64, windows-shared-x64-posix, windows-shared-x86,
|
||||
# Disable: string-related vtable linker error: manylinux2014-aarch64
|
||||
arch_name: [linux-arm64, linux-arm64-musl, linux-armv5, linux-armv5-musl, linux-armv6, linux-armv6-musl, linux-armv7, linux-armv7a, linux-armv7l-musl, linux-x64-clang, linux-s390x, linux-x64, linux-x86, linux-mips, linux-ppc64le, manylinux1-x64, manylinux1-x86, manylinux2010-x64, manylinux2010-x86, manylinux2014-x64, manylinux2014-x86, linux-riscv64, linux-riscv32]
|
||||
build_type: [Release, Debug]
|
||||
steps:
|
||||
- name: "📥 Checkout Code"
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
submodules: 'recursive'
|
||||
fetch-depth: 0
|
||||
- name: "🛠️ build"
|
||||
run: ./builder/cmake.sh ${{ matrix.arch_name }}:latest -DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
|
||||
63
.github/workflows/release.yml
vendored
Normal file
63
.github/workflows/release.yml
vendored
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
name: "tagged-release"
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "v[0-9]+.[0-9]+.[0-9]+*"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: build ${{ matrix.arch_name }}
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
# Disable: unsupported system: android-arm, android-arm64, android-x86, android-x86_64, web-wasm,
|
||||
# Disable: missing header in linux(GCC): windows-static-x64, windows-static-x64-posix, windows-static-x86, windows-shared-x64, windows-shared-x64-posix, windows-shared-x86,
|
||||
arch_name: [linux-arm64, linux-arm64-musl, linux-armv5, linux-armv5-musl, linux-armv6, linux-armv6-musl, linux-armv7, linux-armv7a, linux-armv7l-musl, linux-x64-clang, linux-s390x, linux-x64, linux-x86, linux-mips, linux-ppc64le, manylinux1-x64, manylinux1-x86, manylinux2010-x64, manylinux2010-x86, manylinux2014-x64, manylinux2014-x86, manylinux2014-aarch64, linux-riscv64, linux-riscv32]
|
||||
steps:
|
||||
- name: "📥 Checkout Code"
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
submodules: 'recursive'
|
||||
fetch-depth: 0
|
||||
- name: "🛠️ cmake"
|
||||
run: ./builder/cmake.sh ${{ matrix.arch_name }}:latest -DCMAKE_BUILD_TYPE=Release
|
||||
- name: "✅ checksum"
|
||||
run: cd build-${{ matrix.arch_name }} && find . -maxdepth 1 -name "tmux-mem-cpu-load*" | xargs sha256sum > checksum.sha256
|
||||
- name: "🗜️ compress"
|
||||
run: cd build-${{ matrix.arch_name }} && find . -maxdepth 1 -name "tmux-mem-cpu-load*" -o -name "*.sha256" | XZ_OPT=-e9 tar -cJf tmux-mem-cpu-load-${{ matrix.arch_name }}.tar.xz -T - && mv tmux-mem-cpu-load-${{ matrix.arch_name }}.tar.xz ..
|
||||
- name: "💾 save binaries"
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: bin-artifact-${{ matrix.arch_name }}
|
||||
path: tmux-mem-cpu-load-${{ matrix.arch_name }}.tar.xz
|
||||
retention-days: 1
|
||||
release:
|
||||
name: release
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
steps:
|
||||
- name: "📥 Checkout Code"
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
submodules: 'recursive'
|
||||
fetch-depth: 0
|
||||
- name: get artifact
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
pattern: bin-artifact-*
|
||||
merge-multiple: true
|
||||
path: .
|
||||
- name: "✅ checksum"
|
||||
run: find . -maxdepth 1 -name "*.tar.xz" | xargs sha256sum > checksum_all.sha256
|
||||
- uses: "marvinpinto/action-automatic-releases@latest"
|
||||
name: "📤 upload to github"
|
||||
with:
|
||||
repo_token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
prerelease: false
|
||||
files: |
|
||||
LICENSE
|
||||
*.tar.xz
|
||||
*.sha256
|
||||
61
.gitignore
vendored
Normal file
61
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
# Compiled source #
|
||||
###################
|
||||
*.com
|
||||
*.class
|
||||
*.dll
|
||||
*.exe
|
||||
*.o
|
||||
*.so
|
||||
sysstat
|
||||
tmux-mem-cpu-load
|
||||
|
||||
# CMake generated #
|
||||
###################
|
||||
CMakeFiles
|
||||
Makefile
|
||||
cmake_install.cmake
|
||||
CMakeCache.txt
|
||||
install_manifest.txt
|
||||
version.h
|
||||
config.h
|
||||
CTestTestfile.cmake
|
||||
DartConfiguration.tcl
|
||||
|
||||
# Ninja generated #
|
||||
###################
|
||||
.ninja_deps
|
||||
.ninja_log
|
||||
*.ninja
|
||||
|
||||
# Packages #
|
||||
############
|
||||
# it's better to unpack this files and commit raw source
|
||||
# git has its own built in compression methods
|
||||
*.7z
|
||||
*.dmg
|
||||
*.gz
|
||||
*.iso
|
||||
*.rar
|
||||
*.tar
|
||||
*.zip
|
||||
|
||||
# Logs and databases #
|
||||
######################
|
||||
*.log
|
||||
*.sql
|
||||
*.sqlite
|
||||
|
||||
# OS generated files #
|
||||
######################
|
||||
.DS_Store
|
||||
.DS_Store?
|
||||
._*
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
ehthumbs.db
|
||||
Thumbs.db
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
dockcross-*
|
||||
build-*
|
||||
12
.travis.yml
Normal file
12
.travis.yml
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
os:
|
||||
- linux
|
||||
- osx
|
||||
language: cpp
|
||||
compiler:
|
||||
- gcc
|
||||
- clang
|
||||
script:
|
||||
- mkdir build
|
||||
- cd build
|
||||
- cmake -DCMAKE_INSTALL_PREFIX:PATH=../install ..
|
||||
- cmake --build . --target install
|
||||
12
AUTHORS
Normal file
12
AUTHORS
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
Original author and maintainer:
|
||||
|
||||
Matthew McCormick
|
||||
|
||||
Contributors (in alphabetical order):
|
||||
|
||||
Jasper Lievisse Adriaanse <jasper@humppa.nl>
|
||||
Justin Crawford <justin@pci-online.net>
|
||||
krieiter <krieiter@gmail.com>
|
||||
Mark Palmeri <mlp6@duke.edu>
|
||||
Pawel 'l0ner' Soltys <pwslts@gmail.com>
|
||||
Compilenix <Compilenix@compilenix.org>
|
||||
186
CMakeLists.txt
186
CMakeLists.txt
|
|
@ -1,22 +1,176 @@
|
|||
cmake_minimum_required(VERSION 2.6)
|
||||
if(COMMAND cmake_policy)
|
||||
cmake_policy(VERSION 2.6)
|
||||
endif(COMMAND cmake_policy)
|
||||
# vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
#
|
||||
# Copyright 2012 Matthew McCormick
|
||||
# Copyright 2015 Pawel 'l0ner' Soltys
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
project(screen-cpu-mem)
|
||||
cmake_minimum_required(VERSION 3.5)
|
||||
|
||||
### General Package stuff
|
||||
project(tmux-mem-cpu-load)
|
||||
set(tmux-mem-cpu-load_VERSION_MAJOR 3)
|
||||
set(tmux-mem-cpu-load_VERSION_MINOR 8)
|
||||
set(tmux-mem-cpu-load_VERSION_PATCH 3)
|
||||
#Compute full version string
|
||||
set(tmux-mem-cpu-load_VERSION
|
||||
${tmux-mem-cpu-load_VERSION_MAJOR}.${tmux-mem-cpu-load_VERSION_MINOR}.${tmux-mem-cpu-load_VERSION_PATCH})
|
||||
|
||||
# Check whether we have support for c++11 in compiler and fail if we don't
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
# generate header file to handle version
|
||||
configure_file(
|
||||
"${PROJECT_SOURCE_DIR}/common/version.h.in" "${PROJECT_BINARY_DIR}/version.h"
|
||||
)
|
||||
|
||||
# set build type
|
||||
if(NOT CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE Release CACHE STRING
|
||||
"Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
|
||||
FORCE)
|
||||
set(CMAKE_BUILD_TYPE MinSizeRel CACHE STRING
|
||||
"Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
|
||||
FORCE)
|
||||
endif(NOT CMAKE_BUILD_TYPE)
|
||||
|
||||
add_executable(screen-cpu-usage screen-cpu-usage.cpp)
|
||||
install(TARGETS screen-cpu-usage
|
||||
RUNTIME
|
||||
DESTINATION bin
|
||||
)
|
||||
# detect system type
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
message(STATUS "Linux detected")
|
||||
set(METER_SOURCES "linux/memory.cc" "linux/cpu.cc" "common/load.cc")
|
||||
elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
|
||||
message(STATUS "Darwin detected")
|
||||
set(METER_SOURCES "osx/memory.cc" "osx/cpu.cc" "common/load.cc")
|
||||
elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
|
||||
message(STATUS "FreeBSD detected")
|
||||
set(METER_SOURCES "freebsd/memory.cc" "freebsd/cpu.cc" "common/load.cc")
|
||||
elseif(CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
|
||||
message(STATUS "OpenBSD detected")
|
||||
set(METER_SOURCES "openbsd/memory.cc" "openbsd/cpu.cc" "common/load.cc")
|
||||
if(CMAKE_SYSTEM_VERSION VERSION_LESS 5.7)
|
||||
add_definitions(-DOPENBSD_WORKAROUND=1)
|
||||
endif()
|
||||
elseif(CMAKE_SYSTEM_NAME MATCHES "NetBSD")
|
||||
message(STATUS "NetBSD detected")
|
||||
set(METER_SOURCES "netbsd/memory.cc" "netbsd/cpu.cc" "common/load.cc")
|
||||
elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
message(STATUS "Windows detected")
|
||||
set(METER_SOURCES "windows/memory.cc" "windows/cpu.cc" "windows/load.cc")
|
||||
else()
|
||||
message(FATAL_ERROR "${CMAKE_SYSTEM_NAME} Cannot be compiled on this system")
|
||||
message(FATAL_ERROR "Cannot be compiled on this system")
|
||||
endif()
|
||||
|
||||
install(PROGRAMS screen-mem-usage
|
||||
DESTINATION bin
|
||||
)
|
||||
# set common source files
|
||||
set(COMMON_SOURCES "common/main.cc" "common/memory.cc" "common/graph.cc" "common/powerline.cc")
|
||||
|
||||
add_executable(tmux-mem-cpu-load ${COMMON_SOURCES} ${METER_SOURCES})
|
||||
# add binary tree so we find version.h
|
||||
target_include_directories(tmux-mem-cpu-load PUBLIC "${PROJECT_BINARY_DIR}")
|
||||
target_include_directories(tmux-mem-cpu-load PUBLIC "${PROJECT_SOURCE_DIR}" "${PROJECT_SOURCE_DIR}/common")
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
target_link_libraries(tmux-mem-cpu-load Pdh)
|
||||
endif()
|
||||
install(TARGETS tmux-mem-cpu-load RUNTIME DESTINATION bin)
|
||||
|
||||
include(CTest)
|
||||
if(BUILD_TESTING)
|
||||
add_test(NAME usage
|
||||
COMMAND tmux-mem-cpu-load -h
|
||||
)
|
||||
|
||||
add_test(NAME no_arguments
|
||||
COMMAND tmux-mem-cpu-load
|
||||
)
|
||||
|
||||
add_test(NAME custom_interval
|
||||
COMMAND tmux-mem-cpu-load -i 3
|
||||
)
|
||||
|
||||
add_test(NAME no_cpu_graph
|
||||
COMMAND tmux-mem-cpu-load -g 0
|
||||
)
|
||||
|
||||
add_test(NAME colors
|
||||
COMMAND tmux-mem-cpu-load --colors
|
||||
)
|
||||
|
||||
add_test(NAME colors_short
|
||||
COMMAND tmux-mem-cpu-load -c
|
||||
)
|
||||
|
||||
add_test(NAME powerline-right
|
||||
COMMAND tmux-mem-cpu-load --powerline-right
|
||||
)
|
||||
|
||||
add_test(NAME powerline-left
|
||||
COMMAND tmux-mem-cpu-load --powerline-left
|
||||
)
|
||||
|
||||
add_test(NAME invalid_status_interval
|
||||
COMMAND tmux-mem-cpu-load -i -1
|
||||
)
|
||||
|
||||
add_test(NAME invalid_graph_lines
|
||||
COMMAND tmux-mem-cpu-load --graph-lines -2
|
||||
)
|
||||
|
||||
add_test(NAME old_option_specification
|
||||
COMMAND tmux-mem-cpu-load 2 8
|
||||
)
|
||||
|
||||
add_test(NAME memory_mode_free_memory
|
||||
COMMAND tmux-mem-cpu-load -m 1
|
||||
)
|
||||
|
||||
add_test(NAME memory_mode_used_percentage
|
||||
COMMAND tmux-mem-cpu-load -m 2
|
||||
)
|
||||
|
||||
add_test(NAME averages_count_0
|
||||
COMMAND tmux-mem-cpu-load -a 0
|
||||
)
|
||||
|
||||
add_test(NAME averages_count_1
|
||||
COMMAND tmux-mem-cpu-load -a 1
|
||||
)
|
||||
|
||||
add_test(NAME averages_count_2
|
||||
COMMAND tmux-mem-cpu-load -a 2
|
||||
)
|
||||
|
||||
add_test(NAME averages_count_3
|
||||
COMMAND tmux-mem-cpu-load -a 3
|
||||
)
|
||||
|
||||
add_test(NAME cpu_mode_0
|
||||
COMMAND tmux-mem-cpu-load --cpu-mode 0
|
||||
)
|
||||
|
||||
add_test(NAME cpu_mode_1
|
||||
COMMAND tmux-mem-cpu-load --cpu-mode 1
|
||||
)
|
||||
|
||||
add_test(NAME cpu_mode_short_0
|
||||
COMMAND tmux-mem-cpu-load -t 0
|
||||
)
|
||||
|
||||
add_test(NAME cpu_mode_short_1
|
||||
COMMAND tmux-mem-cpu-load -t 1
|
||||
)
|
||||
|
||||
set_tests_properties(usage
|
||||
invalid_status_interval
|
||||
invalid_graph_lines
|
||||
old_option_specification
|
||||
PROPERTIES WILL_FAIL TRUE)
|
||||
endif()
|
||||
|
|
|
|||
56
CONTRIBUTING.rst
Normal file
56
CONTRIBUTING.rst
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
============
|
||||
Contributing
|
||||
============
|
||||
|
||||
Want to improve the quality of tmux-mem-cpu-load code? Great! Here's a quick
|
||||
guide:
|
||||
|
||||
1. Fork, then clone the repo:
|
||||
|
||||
git clone git@github.com:your-username/tmux-mem-cpu-load
|
||||
|
||||
2. Make your change. Add tests for your change.
|
||||
3. See if it compiles and runs like it should.
|
||||
4. Run tests to check if you didn't break anything:
|
||||
|
||||
make test
|
||||
|
||||
Push to your fork and `submit a pull request`_.
|
||||
|
||||
At this point you're waiting on us. We'll review your changes as soon as we can.
|
||||
Before merging your changes we may request you to make some changes or
|
||||
corrections.
|
||||
|
||||
Style guidelines
|
||||
----------------
|
||||
|
||||
You'll need to follow the subsequent rules in order to get your code merged:
|
||||
|
||||
* Use Allman_ style for block braces.
|
||||
* No space before `(`
|
||||
* Add space after each `(` and before each `)`
|
||||
* Use braces single line statements
|
||||
* Don't use mixed case naming style, use underscores instead.
|
||||
Bad example:
|
||||
|
||||
int myAwesomeVariable = 0;
|
||||
doSomething( myAwesomeVariable );
|
||||
|
||||
Good example:
|
||||
|
||||
int my_awesome_variable = 0;
|
||||
do_something( my_awesome_variable );
|
||||
|
||||
* Don't vertically align tokens on consecutive lines.
|
||||
* If you break up an argument list, align the line to opening brace
|
||||
* Use 2 space indentation (no tabs)
|
||||
* Use spaces around operators, except for unary operators, such as `!`.
|
||||
* Add LICENSE header in new files you create.
|
||||
* Put vim modeline as the first line of file header
|
||||
* Use the lower-case for CMake commands
|
||||
* Do not add trailing whitespace
|
||||
You can use this bash script to strip unnecessary whitespaces:
|
||||
http://git.io/z_GA3A
|
||||
|
||||
.. _`submit a pull request`: https://github.com/thewtex/tmux-mem-cpu-load/compare/
|
||||
.. _Allman: http://en.wikipedia.org/wiki/Indent_style#Allman_style
|
||||
202
LICENSE
Normal file
202
LICENSE
Normal file
|
|
@ -0,0 +1,202 @@
|
|||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
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.
|
||||
204
README.rst
204
README.rst
|
|
@ -1,53 +1,68 @@
|
|||
====================================================
|
||||
screen-cpu-mem
|
||||
====================================================
|
||||
----------------------------------------------------
|
||||
CPU and RAM memory monitors for use with GNU Screen_
|
||||
----------------------------------------------------
|
||||
|
||||
=============================================
|
||||
tmux-mem-cpu-load
|
||||
=============================================
|
||||
---------------------------------------------
|
||||
CPU, RAM, and load monitor for use with tmux_
|
||||
---------------------------------------------
|
||||
|
||||
.. image:: https://circleci.com/gh/thewtex/tmux-mem-cpu-load.svg?style=svg
|
||||
:target: https://circleci.com/gh/thewtex/tmux-mem-cpu-load
|
||||
|
||||
.. image:: https://github.com/thewtex/tmux-mem-cpu-load/actions/workflows/main.yml/badge.svg
|
||||
:target: https://github.com/thewtex/tmux-mem-cpu-load/actions/workflows/main.yml
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
A simple, lightweight program provided for system monitoring in the *status*
|
||||
line of **tmux**.
|
||||
|
||||
Two programs are provided for system monitoring in the *hardstatus* line of **GNU
|
||||
Screen**: a CPU usage monitor and a memory usage monitor. These programs are
|
||||
intended to use minimal system resources.
|
||||
The memory monitor displays the used and available memory.
|
||||
|
||||
The CPU usage monitor outputs a percent CPU usage over all processors that is
|
||||
updated every second. It also displays a textual bar graph of the current
|
||||
percent usage where every '|' character represents 10% usage.
|
||||
The CPU usage monitor outputs a percent CPU usage over all processors. It also
|
||||
displays a textual bar graph of the current percent usage.
|
||||
|
||||
The memory monitor is updated every three seconds and displays the used and
|
||||
available memory.
|
||||
The system load average is also displayed.
|
||||
|
||||
Example::
|
||||
Example output::
|
||||
|
||||
Mem:2885MB/7987MB Cpu:[||||| ] 51.2%
|
||||
2885/7987MB [||||| ] 51.2% 2.11 2.35 2.44
|
||||
|
||||
^ ^ ^ ^ ^ ^ ^
|
||||
| | | | | | |
|
||||
1 2 3 4 5 6 7
|
||||
|
||||
1. Currently used memory.
|
||||
2. Available memory.
|
||||
3. CPU usage bar graph.
|
||||
4. CPU usage percentage.
|
||||
5. Load average for the past minute.
|
||||
6. Load average for the past 5 minutes.
|
||||
7. Load average for the past 15 minutes.
|
||||
|
||||
For `terminals with 256 color support`_, graded colors can be displayed by
|
||||
passing the **--colors** flag.
|
||||
|
||||
|
||||
Installation
|
||||
============
|
||||
|
||||
|
||||
Dependencies
|
||||
------------
|
||||
|
||||
Currently, Linux, Mac OSX, FreeBSD, OpenBSD, and NetBSD are supported.
|
||||
|
||||
Building
|
||||
~~~~~~~~
|
||||
|
||||
* >= cmake_ -2.6
|
||||
* C++ compiler (e.g. gcc/g++)
|
||||
|
||||
* >= CMake_ -3.5
|
||||
* C++ compiler with C++11 support (e.g. gcc/g++ >= 4.6)
|
||||
|
||||
Download
|
||||
--------
|
||||
|
||||
There are links to the source code at the `project homepage`_.
|
||||
|
||||
|
||||
Build
|
||||
-----
|
||||
|
||||
|
|
@ -57,7 +72,6 @@ Build
|
|||
cmake .
|
||||
make
|
||||
|
||||
|
||||
Install
|
||||
-------
|
||||
|
||||
|
|
@ -67,37 +81,147 @@ Install
|
|||
make install
|
||||
logout
|
||||
|
||||
Build and Install Using tpm_
|
||||
-----------------------------
|
||||
|
||||
Include the plugin in your ``.tmux.conf``, the same file you'll set the
|
||||
configuration in, below.
|
||||
|
||||
Configuring GNU Screen_
|
||||
=======================
|
||||
::
|
||||
|
||||
set -g @plugin 'thewtex/tmux-mem-cpu-load'
|
||||
|
||||
The ``$HOME/.screenrc`` file must be edited to make use of the installed
|
||||
programs, ``screen-cpu-usage`` and ``screen-mem-usage``.
|
||||
Install with Package Managers
|
||||
-----------------------------
|
||||
|
||||
An example configuration::
|
||||
* Gentoo: ``emerge tmux-mem-cpu-load``
|
||||
* Homebrew: ``brew install tmux-mem-cpu-load``
|
||||
* FreeBSD: ``pkg install tmux-mem-cpu-load``
|
||||
|
||||
# backticks to display information in the statusbar
|
||||
backtick 1 0 0 /usr/local/bin/screen-mem-usage
|
||||
backtick 2 0 0 /usr/local/bin/screen-cpu-usage
|
||||
Build and Install Using Antigen_
|
||||
--------------------------------
|
||||
|
||||
hardstatus alwayslastline
|
||||
hardstatus string '%{kg}Host:%{kG}%H%{kg} %=%{kb}Mem:%{kB}%1` %{ky}Cpu:%{kY}%2`%% %{kR}Load:%{kr}%l%=%{kc} %D %m/%d %{kC}%C%a%{w}'
|
||||
Include the bundle in your ``.zshrc``
|
||||
|
||||
The example configuration will result in::
|
||||
::
|
||||
|
||||
Host:flea Mem:2961MB/7987MB Cpu:[|| ] 25.6% Load:0.64 0.35 0.28 Fri 09/11 12:56am
|
||||
antigen bundle thewtex/tmux-mem-cpu-load
|
||||
|
||||
Configuring tmux_
|
||||
=================
|
||||
|
||||
Edit ``$HOME/.tmux.conf`` to display the program's output in *status-left* or
|
||||
*status-right*. For example::
|
||||
|
||||
set -g status-interval 2
|
||||
set -g status-left "#S #[fg=green,bg=black]#(tmux-mem-cpu-load --colors --interval 2)#[default]"
|
||||
set -g status-left-length 60
|
||||
|
||||
Author
|
||||
======
|
||||
If you installed using tpm, you must specify the full path to the
|
||||
``tmux-mem-cpu-load`` script, like below::
|
||||
|
||||
set -g status-right "#[fg=green]#($TMUX_PLUGIN_MANAGER_PATH/tmux-mem-cpu-load/tmux-mem-cpu-load --colors --powerline-right --interval 2)#[default]"
|
||||
|
||||
Note that the *interval* argument to `tmux-mem-cpu-load` should be the same number
|
||||
of seconds that *status-interval* is set at.
|
||||
|
||||
Another optional argument is the number of bars in the bar graph, which
|
||||
defaults to 10. This can, for instance, be set to the number of cores in a
|
||||
multi-core system.
|
||||
|
||||
The *colors* option will add graded colors for each of the measures.
|
||||
|
||||
The full usage::
|
||||
|
||||
Usage: tmux-mem-cpu-load [OPTIONS]
|
||||
|
||||
Available options:
|
||||
-h, --help
|
||||
Prints this help message
|
||||
-c, --colors
|
||||
Use tmux colors in output
|
||||
-p, --powerline-left
|
||||
Use powerline left symbols throughout the output, enables --colors
|
||||
-q, --powerline-right
|
||||
Use powerline right symbols throughout the output, enables --colors
|
||||
-v, --vertical-graph
|
||||
Use vertical bar chart for CPU graph
|
||||
-l <value>, --segments-left <value>
|
||||
Enable blending bg/fg color (depending on -p or -q use) with segment to left
|
||||
Provide color to be used depending on -p or -q option for seamless segment blending
|
||||
Color is an integer value which uses the standard tmux color palette values
|
||||
-r <value>, --segments-right <value>
|
||||
Enable blending bg/fg color (depending on -p or -q use) with segment to right
|
||||
Provide color to be used depending on -p or -q option for seamless segment blending
|
||||
Color is an integer value which uses the standard tmux color palette values
|
||||
-i <value>, --interval <value>
|
||||
Set tmux status refresh interval in seconds. Default: 1 second
|
||||
-g <value>, --graph-lines <value>
|
||||
Set how many lines should be drawn in a graph. Default: 10
|
||||
-m <value>, --mem-mode <value>
|
||||
Set memory display mode. 0: Default, 1: Free memory, 2: Usage percent.
|
||||
-t <value>, --cpu-mode <value>
|
||||
Set cpu % display mode. 0: Default max 100%, 1: Max 100% * number of threads.
|
||||
-a <value>, --averages-count <value>
|
||||
Set how many load-averages should be drawn. Default: 3
|
||||
|
||||
Blending Dynamic Colors Tmux Powerline Segments
|
||||
===============================================
|
||||
|
||||
The -l and -r options when used in conjunction with a recent version of Tmux Powerline
|
||||
that has the ability to selectively disable spacing and separators between segments allow
|
||||
for seamless blending of tmux-mem-cpu-load output with other adjacent segments. The end
|
||||
result is dynamic changing of appropriate foreground and background colors as the start
|
||||
and end of the tmux-mem-cpu-load output string that is aggregated with other Tmux
|
||||
Powerline output to produce a more polished status line in Tmux.
|
||||
|
||||
Segment Adjaceny before this feature:
|
||||
|
||||
.. image:: seg-adj1.png
|
||||
|
||||
Segment Adjaceny after this feature:
|
||||
|
||||
.. image:: seg-adj2.png
|
||||
|
||||
Note that the values for the -l and -r options will be the standard Tmux integer color
|
||||
values. They set the appropriate background and foreground colors used for the separator
|
||||
character when used with the poweline-left or powerline-right options so it is easy to
|
||||
match coloring to adjacent segments. An example from the segment script that calls
|
||||
tmux-mem-cpu-load is as follows::
|
||||
|
||||
tmux-mem-cpu-load -q -v -l 52 -r 33
|
||||
|
||||
This combines with theme options available to tmux-powerline, such as the following::
|
||||
|
||||
"disk_usage_cust 52 123 ${TMUX_POWERLINE_SEPARATOR_LEFT_BOLD} 52 123 right_disable" \
|
||||
"tmux_mem_cpu_load_cust 52 234 ${TMUX_POWERLINE_SEPARATOR_LEFT_BOLD} 52 234 both_disable separator_disable" \
|
||||
"batt_cust 33 154 ${TMUX_POWERLINE_SEPARATOR_LEFT_BOLD} 16 33 N separator_disable" \
|
||||
|
||||
Authors
|
||||
=======
|
||||
|
||||
Matt McCormick (thewtex) <matt@mmmccormick.com>
|
||||
|
||||
Contributions from:
|
||||
|
||||
.. _screen: http://www.gnu.org/software/screen/
|
||||
.. _cmake: http://www.cmake.org
|
||||
.. _`project homepage`: http://github.com/thewtex/screen-cpu-mem
|
||||
* cousine <iam@cousine.me>
|
||||
* Jasper Lievisse Adriaanse <jasper@humppa.nl>
|
||||
* Justin Crawford <justinc@pci-online.net>
|
||||
* krieiter <krieiter@gmail.com>
|
||||
* Mark Palmeri <mlp6@duke.edu>
|
||||
* `Pawel 'l0ner' Soltys`_ <pwslts@gmail.com>
|
||||
* Travil Heller <trav.heller@gmail.com>
|
||||
* Tony Narlock <tony@git-pull.com>
|
||||
* Compilenix <Compilenix@compilenix.org>
|
||||
* jodavies <jodavies1010@gmail.com>
|
||||
* `@nhdaly`_ (Nathan Daly) <nhdaly@gmail.com>
|
||||
* bensuperpc <bensuperpc@gmail.com>
|
||||
|
||||
.. _tmux: http://tmux.sourceforge.net/
|
||||
.. _CMake: http://www.cmake.org
|
||||
.. _`project homepage`: http://github.com/thewtex/tmux-mem-cpu-load
|
||||
.. _`tpm`: http://github.com/tmux-plugins/tpm
|
||||
.. _`Antigen`: https://github.com/zsh-users/antigen
|
||||
.. _`terminals with 256 color support`: http://misc.flogisoft.com/bash/tip_colors_and_formatting#terminals_compatibility
|
||||
.. _`Pawel 'l0ner' Soltys` : http://l0ner.github.io/
|
||||
.. _`@nhdaly` : http://github.com/nhdaly
|
||||
|
|
|
|||
6
builder/cmake.sh
Executable file
6
builder/cmake.sh
Executable file
|
|
@ -0,0 +1,6 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
source $(dirname "$0")/functions/cmake_fn.sh
|
||||
|
||||
cmake_build $@
|
||||
11
builder/cmake_all.sh
Executable file
11
builder/cmake_all.sh
Executable file
|
|
@ -0,0 +1,11 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
curl https://raw.githubusercontent.com/dockcross/dockcross/master/Makefile -o dockcross-Makefile
|
||||
make -f dockcross-Makefile display_images
|
||||
|
||||
source $(dirname "$0")/functions/cmake_fn.sh
|
||||
|
||||
for image in $(make -f dockcross-Makefile display_images); do
|
||||
cmake_build $image $@
|
||||
done
|
||||
19
builder/functions/cmake_fn.sh
Executable file
19
builder/functions/cmake_fn.sh
Executable file
|
|
@ -0,0 +1,19 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
cmake_build () {
|
||||
local image=$1
|
||||
local build_file=build-${image%:*}
|
||||
shift 1
|
||||
local cmake_arg=$@
|
||||
echo "cmake arg: $cmake_arg"
|
||||
|
||||
echo "Pulling dockcross/$image"
|
||||
docker pull dockcross/$image
|
||||
echo "Make script dockcross-$image"
|
||||
docker run --rm dockcross/$image > ./dockcross-$image
|
||||
chmod +x ./dockcross-$image
|
||||
echo "Build $build_file"
|
||||
./dockcross-$image cmake -B$build_file -H. -GNinja $cmake_arg
|
||||
./dockcross-$image ninja -C$build_file
|
||||
}
|
||||
15
builder/functions/makefile_fn.sh
Executable file
15
builder/functions/makefile_fn.sh
Executable file
|
|
@ -0,0 +1,15 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
makefile_build () {
|
||||
local image=$1
|
||||
shift 1
|
||||
|
||||
echo "Pulling dockcross/$image"
|
||||
docker pull dockcross/$image
|
||||
echo "Make script dockcross-$image"
|
||||
docker run --rm dockcross/$image > ./dockcross-$image
|
||||
chmod +x ./dockcross-$image
|
||||
echo "Build..."
|
||||
./dockcross-$image bash -c 'make CXX=$CXX CC=$CC AR=$AR AS=$AS CPP=$CPP FC=$FC'
|
||||
}
|
||||
6
builder/makefile.sh
Executable file
6
builder/makefile.sh
Executable file
|
|
@ -0,0 +1,6 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
source $(dirname "$0")/functions/makefile_fn.sh
|
||||
|
||||
makefile_build $@
|
||||
11
builder/makefile_all.sh
Executable file
11
builder/makefile_all.sh
Executable file
|
|
@ -0,0 +1,11 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
curl https://raw.githubusercontent.com/dockcross/dockcross/master/Makefile -o dockcross-Makefile
|
||||
make -f dockcross-Makefile display_images
|
||||
|
||||
source $(dirname "$0")/functions/makefile_fn.sh
|
||||
|
||||
for image in $(make -f dockcross-Makefile display_images); do
|
||||
makefile_build $image $@
|
||||
done
|
||||
40
common/conversions.h
Normal file
40
common/conversions.h
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
/* vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2015 Pawel 'l0ner' Soltys
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef CONVERSIONS_H_
|
||||
#define CONVERSIONS_H_
|
||||
|
||||
enum BYTE_UNITS
|
||||
{
|
||||
BYTES = 0,
|
||||
KILOBYTES = 1,
|
||||
MEGABYTES = 2,
|
||||
GIGABYTES = 3
|
||||
};
|
||||
|
||||
template <class T>
|
||||
inline T convert_unit( T num, int to, int from = BYTES)
|
||||
{
|
||||
for( ; from < to; from++)
|
||||
{
|
||||
num /= 1024;
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
#endif
|
||||
67
common/cpu.h
Normal file
67
common/cpu.h
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
/* vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2015 Pawel 'l0ner' Soltys
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef CPU_H_
|
||||
#define CPU_H_
|
||||
|
||||
#include <cstdint>
|
||||
#include <sys/types.h>
|
||||
|
||||
#if defined(__APPLE__) && defined(__MACH__)
|
||||
#define CP_USER 0
|
||||
#define CP_SYS 1
|
||||
#define CP_IDLE 2
|
||||
#define CP_NICE 3
|
||||
#define CP_STATES 4
|
||||
#elif defined(__OpenBSD__)
|
||||
#include <sys/sched.h>
|
||||
#define CP_STATES CPUSTATES
|
||||
#else
|
||||
#define CP_USER 0
|
||||
#define CP_NICE 1
|
||||
#define CP_SYS 2
|
||||
|
||||
#if defined(__FreeBSD__) || defined(__NetBSD__)
|
||||
// *BSD or OSX
|
||||
#define CP_INTR 3
|
||||
#define CP_IDLE 4
|
||||
#define CP_STATES 5
|
||||
#else
|
||||
//linux
|
||||
#define CP_IDLE 3
|
||||
#define CP_STATES 4
|
||||
#endif
|
||||
#endif
|
||||
|
||||
float cpu_percentage( unsigned );
|
||||
uint32_t get_cpu_count();
|
||||
|
||||
/** CPU percentage output mode.
|
||||
*
|
||||
* Examples:
|
||||
*
|
||||
* CPU_MODE_DEFAULT: 100%
|
||||
* CPU_MODE_THREADS: 800% (8 cores, fully loaded)
|
||||
*/
|
||||
enum CPU_MODE
|
||||
{
|
||||
CPU_MODE_DEFAULT,
|
||||
CPU_MODE_THREADS
|
||||
};
|
||||
|
||||
#endif
|
||||
37
common/error.h
Normal file
37
common/error.h
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
/* vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2015 Pawel 'l0ner' Soltys
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef BSD_ERROR_H_
|
||||
#define BSD_ERROR_H_
|
||||
|
||||
#include <iostream>
|
||||
#include <sys/errno.h>
|
||||
#include <cerrno>
|
||||
#include <cstring> // strerror
|
||||
#include <cstdlib> // exit()
|
||||
|
||||
inline void error( const char * error )
|
||||
{
|
||||
using std::cerr;
|
||||
using std::endl;
|
||||
|
||||
cerr << error << ": " << strerror( errno ) << endl;
|
||||
exit( EXIT_FAILURE );
|
||||
}
|
||||
|
||||
#endif
|
||||
43
common/generate-luts.py
Executable file
43
common/generate-luts.py
Executable file
|
|
@ -0,0 +1,43 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
"""Create the color code lookup table header."""
|
||||
|
||||
import matplotlib.cm
|
||||
|
||||
def write_table(fp, colormap_name, stat_name, first_half_foreground, second_half_foreground):
|
||||
fp.write('static const char ')
|
||||
fp.write(stat_name)
|
||||
fp.write('_lut[][32] = {\n')
|
||||
colormap = matplotlib.cm.get_cmap(colormap_name)
|
||||
for ii in range(101):
|
||||
fp.write('"#[fg=')
|
||||
if ii < 50:
|
||||
fp.write(first_half_foreground)
|
||||
else:
|
||||
fp.write(second_half_foreground)
|
||||
fp.write(',bg=colour')
|
||||
rgba = colormap(ii * 0.01)
|
||||
red = int(round(rgba[0] * 5))
|
||||
green = int(round(rgba[1] * 5))
|
||||
blue = int(round(rgba[2] * 5))
|
||||
color = 16 + 36*red + 6*green + blue;
|
||||
fp.write(str(color))
|
||||
fp.write(']"')
|
||||
if ii != 100:
|
||||
fp.write(',')
|
||||
fp.write('\n')
|
||||
fp.write('}; // end ')
|
||||
fp.write(stat_name)
|
||||
fp.write('_lut\n\n')
|
||||
|
||||
with open('luts.h', 'w') as fp:
|
||||
fp.write('#ifndef _luts_h\n')
|
||||
fp.write('#define _luts_h\n\n')
|
||||
|
||||
# hot colormap with white fg for the first half
|
||||
# and black fg for the second half
|
||||
write_table(fp, 'hot', 'cpu_percentage', 'brightwhite', 'black')
|
||||
write_table(fp, 'gist_earth', 'mem', 'brightwhite', 'black')
|
||||
write_table(fp, 'bone', 'load', 'brightwhite', 'black')
|
||||
|
||||
fp.write('#endif\n')
|
||||
53
common/getsysctl.h
Normal file
53
common/getsysctl.h
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2013 Justin Crawford <Justasic@gmail.com>
|
||||
* Copyright 2015 Pawel 'l0ner' Soltys
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
// Based on: github.com/freebsd/freebsd/blob/master/usr.bin/top/machine.c
|
||||
// Based on: Apple.cpp for load_string/mem_string and apple's documentation
|
||||
|
||||
#ifndef BSD_METER_COMMON_H_
|
||||
#define BSD_METER_COMMON_H_
|
||||
|
||||
#include <iostream>
|
||||
#include <cerrno>
|
||||
#include <sys/sysctl.h>
|
||||
#include <sys/types.h>
|
||||
#include <cstdlib> //exit()
|
||||
#include <string.h> //strerror()
|
||||
|
||||
#define GETSYSCTL(name, var) getsysctl(name, &(var), sizeof(var))
|
||||
static inline void getsysctl( const char *name, void *ptr, size_t len )
|
||||
{
|
||||
size_t nlen = len;
|
||||
|
||||
if( sysctlbyname( name, ptr, &nlen, NULL, 0 ) == -1 )
|
||||
{
|
||||
std::cerr << "sysctl(" << name << "...) failed: " << strerror( errno )
|
||||
<< std::endl;
|
||||
exit( EXIT_FAILURE );
|
||||
}
|
||||
|
||||
if( nlen != len )
|
||||
{
|
||||
std::cerr << "sysctl(" << name << "...) expected "
|
||||
<< static_cast<unsigned long>( len ) << " bytes, got "
|
||||
<< static_cast<unsigned long>( nlen ) << " bytes\n";
|
||||
//exit( 23 );
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
80
common/graph.cc
Normal file
80
common/graph.cc
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
/* vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2015 Pawel 'l0ner' Soltys
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <string>
|
||||
#include <cstring>
|
||||
#include <map>
|
||||
|
||||
#include "graph.h"
|
||||
|
||||
std::string get_graph_by_percentage( unsigned value, unsigned len )
|
||||
{
|
||||
unsigned step = 0;
|
||||
std::string bars;
|
||||
|
||||
unsigned bar_count = ( static_cast<float>(value) / 99.9 * len );
|
||||
|
||||
for( ; step < bar_count; step++ )
|
||||
{
|
||||
bars.append( "|" );
|
||||
}
|
||||
for( ; step < len; step++ )
|
||||
{
|
||||
bars.append( " " );
|
||||
}
|
||||
|
||||
return bars;
|
||||
}
|
||||
|
||||
|
||||
std::string get_graph_by_value( unsigned value, unsigned max, unsigned len )
|
||||
{
|
||||
unsigned step = 0;
|
||||
std::string bars;
|
||||
|
||||
unsigned bar_count = ( static_cast<float>( value / ( max - 0.1 ) ) * len );
|
||||
|
||||
for( ; step < bar_count; step++ )
|
||||
{
|
||||
bars.append( "|" );
|
||||
}
|
||||
for( ; step < len; step++ )
|
||||
{
|
||||
bars.append( " " );
|
||||
}
|
||||
|
||||
return bars;
|
||||
}
|
||||
|
||||
std::string get_graph_vert( unsigned value )
|
||||
{
|
||||
static const std::map<unsigned, std::string> graph_chars = {
|
||||
{ 0, " " }, { 10, "▁" }, { 20, "▂" }, { 30, "▃" }, { 40, "▄" },
|
||||
{ 50, "▅" }, { 60, "▆" }, { 70, "▇" }, { 80, "█" }, { 90, "▲" }
|
||||
};
|
||||
|
||||
for( auto it = graph_chars.rbegin(); it != graph_chars.rend(); ++it )
|
||||
{
|
||||
if( value >= it->first )
|
||||
{
|
||||
return it->second;
|
||||
}
|
||||
}
|
||||
|
||||
return " "; // default return in case value doesn't match map options
|
||||
}
|
||||
28
common/graph.h
Normal file
28
common/graph.h
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
/* vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2015 Pawel 'l0ner' Soltys
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef GRAPH_H_
|
||||
#define GRAPH_H_
|
||||
|
||||
#include <string>
|
||||
|
||||
std::string get_graph_by_percentage( unsigned, unsigned len = 10 );
|
||||
std::string get_graph_by_value( unsigned, unsigned, unsigned len = 10 );
|
||||
std::string get_graph_vert( unsigned );
|
||||
|
||||
#endif
|
||||
125
common/load.cc
Normal file
125
common/load.cc
Normal file
|
|
@ -0,0 +1,125 @@
|
|||
/* vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2013 Justin Crawford <Justasic@gmail.com>
|
||||
* Copyright 2015 Pawel 'l0ner' Soltys
|
||||
* Copyright 2016 Compilenix
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
// Based on: github.com/freebsd/freebsd/blob/master/usr.bin/top/machine.c
|
||||
// Based on: Apple.cpp for load_string/mem_string and apple's documentation
|
||||
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <stdlib.h> // getloadavg()
|
||||
#include <cmath> // floorf()
|
||||
#include <sys/types.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "cpu.h"
|
||||
#include "load.h"
|
||||
#include "luts.h"
|
||||
|
||||
#include "powerline.h"
|
||||
|
||||
// Load Averages
|
||||
std::string load_string( bool use_colors,
|
||||
bool use_powerline_left, bool use_powerline_right, short num_averages,
|
||||
bool segments_to_right, short right_color )
|
||||
{
|
||||
std::ostringstream ss;
|
||||
ss.setf( std::ios::fixed, std::ios::floatfield );
|
||||
ss.precision( 2 );
|
||||
|
||||
if( num_averages <= 0 || num_averages > 3)
|
||||
{
|
||||
ss << (char) 0;
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
double averages[3];
|
||||
// based on: opensource.apple.com/source/Libc/Libc-262/gen/getloadavg.c
|
||||
|
||||
if( getloadavg( averages, num_averages ) < 0 )
|
||||
{
|
||||
ss << " 0.00 0.00 0.00"; // couldn't get averages.
|
||||
}
|
||||
else
|
||||
{
|
||||
unsigned load_percent = static_cast<unsigned int>( averages[0] /
|
||||
get_cpu_count() * 0.5f * 100.0f );
|
||||
|
||||
if( load_percent > 100 )
|
||||
{
|
||||
load_percent = 100;
|
||||
}
|
||||
if( use_colors )
|
||||
{
|
||||
if( use_powerline_right )
|
||||
{
|
||||
powerline( ss, load_lut[load_percent], POWERLINE_RIGHT );
|
||||
}
|
||||
else if( use_powerline_left )
|
||||
{
|
||||
powerline( ss, load_lut[load_percent], POWERLINE_LEFT );
|
||||
}
|
||||
else
|
||||
{
|
||||
powerline( ss, load_lut[load_percent], NONE );
|
||||
}
|
||||
}
|
||||
|
||||
ss << ' ';
|
||||
for( int i = 0; i < num_averages; ++i )
|
||||
{
|
||||
// Round to nearest, make sure this is only a 0.00 value not a 0.0000
|
||||
float avg = floorf( static_cast<float>( averages[i] ) * 100 + 0.5 ) / 100;
|
||||
// Don't print trailing whitespace for last element
|
||||
if ( i == num_averages-1 )
|
||||
{
|
||||
ss << avg;
|
||||
}
|
||||
else
|
||||
{
|
||||
ss << avg << " ";
|
||||
}
|
||||
}
|
||||
|
||||
if( use_colors )
|
||||
{
|
||||
if( use_powerline_left && segments_to_right )
|
||||
{
|
||||
powerline( ss, load_lut[load_percent], POWERLINE_LEFT, true );
|
||||
powerline_char( ss, load_lut[load_percent], right_color, POWERLINE_LEFT, true );
|
||||
}
|
||||
else if( use_powerline_left && !segments_to_right )
|
||||
{
|
||||
powerline( ss, load_lut[load_percent], POWERLINE_LEFT, true );
|
||||
powerline( ss, "#[fg=default,bg=default]", POWERLINE_LEFT );
|
||||
}
|
||||
else if( !use_powerline_right )
|
||||
{
|
||||
ss << "#[fg=default,bg=default]";
|
||||
}
|
||||
else if ( segments_to_right && use_powerline_right )
|
||||
{
|
||||
powerline_char( ss, load_lut[load_percent], right_color, POWERLINE_RIGHT, true );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
30
common/load.h
Normal file
30
common/load.h
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
/* vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2015 Pawel 'l0ner' Soltys
|
||||
* Copyright 2016 Compilenix
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef LOAD_H_
|
||||
#define LOAD_H_
|
||||
|
||||
#include <string>
|
||||
|
||||
std::string load_string( bool use_colors = false,
|
||||
bool use_powerline_left = false, bool use_powerline_right = false,
|
||||
short num_averages = 3, bool segments_to_right = false,
|
||||
short right_color = 0 );
|
||||
|
||||
#endif
|
||||
316
common/luts.h
Normal file
316
common/luts.h
Normal file
|
|
@ -0,0 +1,316 @@
|
|||
#ifndef _luts_h
|
||||
#define _luts_h
|
||||
|
||||
static const char cpu_percentage_lut[][32] = {
|
||||
"#[fg=brightwhite,bg=colour16]",
|
||||
"#[fg=brightwhite,bg=colour16]",
|
||||
"#[fg=brightwhite,bg=colour16]",
|
||||
"#[fg=brightwhite,bg=colour16]",
|
||||
"#[fg=brightwhite,bg=colour16]",
|
||||
"#[fg=brightwhite,bg=colour16]",
|
||||
"#[fg=brightwhite,bg=colour16]",
|
||||
"#[fg=brightwhite,bg=colour17]",
|
||||
"#[fg=brightwhite,bg=colour17]",
|
||||
"#[fg=brightwhite,bg=colour17]",
|
||||
"#[fg=brightwhite,bg=colour17]",
|
||||
"#[fg=brightwhite,bg=colour17]",
|
||||
"#[fg=brightwhite,bg=colour17]",
|
||||
"#[fg=brightwhite,bg=colour17]",
|
||||
"#[fg=brightwhite,bg=colour17]",
|
||||
"#[fg=brightwhite,bg=colour18]",
|
||||
"#[fg=brightwhite,bg=colour18]",
|
||||
"#[fg=brightwhite,bg=colour18]",
|
||||
"#[fg=brightwhite,bg=colour18]",
|
||||
"#[fg=brightwhite,bg=colour18]",
|
||||
"#[fg=brightwhite,bg=colour18]",
|
||||
"#[fg=brightwhite,bg=colour18]",
|
||||
"#[fg=brightwhite,bg=colour19]",
|
||||
"#[fg=brightwhite,bg=colour19]",
|
||||
"#[fg=brightwhite,bg=colour19]",
|
||||
"#[fg=brightwhite,bg=colour19]",
|
||||
"#[fg=brightwhite,bg=colour19]",
|
||||
"#[fg=brightwhite,bg=colour19]",
|
||||
"#[fg=brightwhite,bg=colour20]",
|
||||
"#[fg=brightwhite,bg=colour20]",
|
||||
"#[fg=brightwhite,bg=colour20]",
|
||||
"#[fg=brightwhite,bg=colour20]",
|
||||
"#[fg=brightwhite,bg=colour20]",
|
||||
"#[fg=brightwhite,bg=colour20]",
|
||||
"#[fg=brightwhite,bg=colour20]",
|
||||
"#[fg=brightwhite,bg=colour21]",
|
||||
"#[fg=brightwhite,bg=colour21]",
|
||||
"#[fg=brightwhite,bg=colour21]",
|
||||
"#[fg=brightwhite,bg=colour21]",
|
||||
"#[fg=brightwhite,bg=colour21]",
|
||||
"#[fg=brightwhite,bg=colour21]",
|
||||
"#[fg=brightwhite,bg=colour57]",
|
||||
"#[fg=brightwhite,bg=colour57]",
|
||||
"#[fg=brightwhite,bg=colour57]",
|
||||
"#[fg=brightwhite,bg=colour57]",
|
||||
"#[fg=brightwhite,bg=colour57]",
|
||||
"#[fg=brightwhite,bg=colour57]",
|
||||
"#[fg=brightwhite,bg=colour56]",
|
||||
"#[fg=brightwhite,bg=colour56]",
|
||||
"#[fg=brightwhite,bg=colour56]",
|
||||
"#[fg=brightwhite,bg=colour56]",
|
||||
"#[fg=brightwhite,bg=colour56]",
|
||||
"#[fg=brightwhite,bg=colour56]",
|
||||
"#[fg=brightwhite,bg=colour55]",
|
||||
"#[fg=brightwhite,bg=colour55]",
|
||||
"#[fg=brightwhite,bg=colour55]",
|
||||
"#[fg=brightwhite,bg=colour55]",
|
||||
"#[fg=brightwhite,bg=colour55]",
|
||||
"#[fg=brightwhite,bg=colour55]",
|
||||
"#[fg=brightwhite,bg=colour54]",
|
||||
"#[fg=brightwhite,bg=colour54]",
|
||||
"#[fg=brightwhite,bg=colour54]",
|
||||
"#[fg=brightwhite,bg=colour54]",
|
||||
"#[fg=brightwhite,bg=colour54]",
|
||||
"#[fg=brightwhite,bg=colour54]",
|
||||
"#[fg=brightwhite,bg=colour53]",
|
||||
"#[fg=brightwhite,bg=colour53]",
|
||||
"#[fg=brightwhite,bg=colour53]",
|
||||
"#[fg=brightwhite,bg=colour53]",
|
||||
"#[fg=brightwhite,bg=colour53]",
|
||||
"#[fg=brightwhite,bg=colour53]",
|
||||
"#[fg=brightwhite,bg=colour52]",
|
||||
"#[fg=brightwhite,bg=colour52]",
|
||||
"#[fg=brightwhite,bg=colour52]",
|
||||
"#[fg=brightwhite,bg=colour52]",
|
||||
"#[fg=brightwhite,bg=colour52]",
|
||||
"#[fg=brightwhite,bg=colour52]",
|
||||
"#[fg=brightwhite,bg=colour88]",
|
||||
"#[fg=brightwhite,bg=colour88]",
|
||||
"#[fg=brightwhite,bg=colour88]",
|
||||
"#[fg=brightwhite,bg=colour88]",
|
||||
"#[fg=brightwhite,bg=colour88]",
|
||||
"#[fg=brightwhite,bg=colour88]",
|
||||
"#[fg=brightwhite,bg=colour124]",
|
||||
"#[fg=brightwhite,bg=colour124]",
|
||||
"#[fg=brightwhite,bg=colour124]",
|
||||
"#[fg=brightwhite,bg=colour124]",
|
||||
"#[fg=brightwhite,bg=colour124]",
|
||||
"#[fg=brightwhite,bg=colour124]",
|
||||
"#[fg=brightwhite,bg=colour160]",
|
||||
"#[fg=brightwhite,bg=colour160]",
|
||||
"#[fg=brightwhite,bg=colour160]",
|
||||
"#[fg=brightwhite,bg=colour160]",
|
||||
"#[fg=brightwhite,bg=colour160]",
|
||||
"#[fg=brightwhite,bg=colour160]",
|
||||
"#[fg=brightwhite,bg=colour196]",
|
||||
"#[fg=brightwhite,bg=colour196]",
|
||||
"#[fg=brightwhite,bg=colour196]",
|
||||
"#[fg=brightwhite,bg=colour196]",
|
||||
"#[fg=brightwhite,bg=colour196]",
|
||||
"#[fg=brightwhite,bg=colour196]"
|
||||
}; // end cpu_percentage_lut
|
||||
|
||||
static const char mem_lut[][32] = {
|
||||
"#[fg=brightwhite,bg=colour16]",
|
||||
"#[fg=brightwhite,bg=colour17]",
|
||||
"#[fg=brightwhite,bg=colour18]",
|
||||
"#[fg=brightwhite,bg=colour18]",
|
||||
"#[fg=brightwhite,bg=colour18]",
|
||||
"#[fg=brightwhite,bg=colour18]",
|
||||
"#[fg=brightwhite,bg=colour18]",
|
||||
"#[fg=brightwhite,bg=colour18]",
|
||||
"#[fg=brightwhite,bg=colour24]",
|
||||
"#[fg=brightwhite,bg=colour24]",
|
||||
"#[fg=brightwhite,bg=colour24]",
|
||||
"#[fg=brightwhite,bg=colour24]",
|
||||
"#[fg=brightwhite,bg=colour24]",
|
||||
"#[fg=brightwhite,bg=colour24]",
|
||||
"#[fg=brightwhite,bg=colour24]",
|
||||
"#[fg=brightwhite,bg=colour24]",
|
||||
"#[fg=brightwhite,bg=colour60]",
|
||||
"#[fg=brightwhite,bg=colour66]",
|
||||
"#[fg=brightwhite,bg=colour66]",
|
||||
"#[fg=brightwhite,bg=colour66]",
|
||||
"#[fg=brightwhite,bg=colour66]",
|
||||
"#[fg=brightwhite,bg=colour66]",
|
||||
"#[fg=brightwhite,bg=colour66]",
|
||||
"#[fg=brightwhite,bg=colour66]",
|
||||
"#[fg=brightwhite,bg=colour66]",
|
||||
"#[fg=brightwhite,bg=colour66]",
|
||||
"#[fg=brightwhite,bg=colour66]",
|
||||
"#[fg=brightwhite,bg=colour66]",
|
||||
"#[fg=brightwhite,bg=colour66]",
|
||||
"#[fg=brightwhite,bg=colour72]",
|
||||
"#[fg=brightwhite,bg=colour72]",
|
||||
"#[fg=brightwhite,bg=colour72]",
|
||||
"#[fg=brightwhite,bg=colour72]",
|
||||
"#[fg=brightwhite,bg=colour72]",
|
||||
"#[fg=brightwhite,bg=colour72]",
|
||||
"#[fg=brightwhite,bg=colour72]",
|
||||
"#[fg=brightwhite,bg=colour72]",
|
||||
"#[fg=brightwhite,bg=colour72]",
|
||||
"#[fg=brightwhite,bg=colour72]",
|
||||
"#[fg=brightwhite,bg=colour72]",
|
||||
"#[fg=brightwhite,bg=colour72]",
|
||||
"#[fg=brightwhite,bg=colour72]",
|
||||
"#[fg=brightwhite,bg=colour72]",
|
||||
"#[fg=brightwhite,bg=colour72]",
|
||||
"#[fg=brightwhite,bg=colour72]",
|
||||
"#[fg=brightwhite,bg=colour71]",
|
||||
"#[fg=brightwhite,bg=colour71]",
|
||||
"#[fg=brightwhite,bg=colour71]",
|
||||
"#[fg=brightwhite,bg=colour107]",
|
||||
"#[fg=brightwhite,bg=colour107]",
|
||||
"#[fg=black,bg=colour107]",
|
||||
"#[fg=black,bg=colour107]",
|
||||
"#[fg=black,bg=colour108]",
|
||||
"#[fg=black,bg=colour108]",
|
||||
"#[fg=black,bg=colour108]",
|
||||
"#[fg=black,bg=colour108]",
|
||||
"#[fg=black,bg=colour108]",
|
||||
"#[fg=black,bg=colour144]",
|
||||
"#[fg=black,bg=colour144]",
|
||||
"#[fg=black,bg=colour144]",
|
||||
"#[fg=black,bg=colour144]",
|
||||
"#[fg=black,bg=colour144]",
|
||||
"#[fg=black,bg=colour144]",
|
||||
"#[fg=black,bg=colour144]",
|
||||
"#[fg=black,bg=colour144]",
|
||||
"#[fg=black,bg=colour144]",
|
||||
"#[fg=black,bg=colour144]",
|
||||
"#[fg=black,bg=colour150]",
|
||||
"#[fg=black,bg=colour150]",
|
||||
"#[fg=black,bg=colour186]",
|
||||
"#[fg=black,bg=colour186]",
|
||||
"#[fg=black,bg=colour186]",
|
||||
"#[fg=black,bg=colour180]",
|
||||
"#[fg=black,bg=colour180]",
|
||||
"#[fg=black,bg=colour180]",
|
||||
"#[fg=black,bg=colour180]",
|
||||
"#[fg=black,bg=colour180]",
|
||||
"#[fg=black,bg=colour180]",
|
||||
"#[fg=black,bg=colour180]",
|
||||
"#[fg=black,bg=colour180]",
|
||||
"#[fg=black,bg=colour180]",
|
||||
"#[fg=black,bg=colour180]",
|
||||
"#[fg=black,bg=colour180]",
|
||||
"#[fg=black,bg=colour181]",
|
||||
"#[fg=black,bg=colour181]",
|
||||
"#[fg=black,bg=colour181]",
|
||||
"#[fg=black,bg=colour181]",
|
||||
"#[fg=black,bg=colour187]",
|
||||
"#[fg=black,bg=colour187]",
|
||||
"#[fg=black,bg=colour187]",
|
||||
"#[fg=black,bg=colour187]",
|
||||
"#[fg=black,bg=colour188]",
|
||||
"#[fg=black,bg=colour224]",
|
||||
"#[fg=black,bg=colour224]",
|
||||
"#[fg=black,bg=colour224]",
|
||||
"#[fg=black,bg=colour224]",
|
||||
"#[fg=black,bg=colour224]",
|
||||
"#[fg=black,bg=colour231]",
|
||||
"#[fg=black,bg=colour231]",
|
||||
"#[fg=black,bg=colour231]",
|
||||
"#[fg=black,bg=colour231]"
|
||||
}; // end mem_lut
|
||||
|
||||
static const char load_lut[][32] = {
|
||||
"#[fg=brightwhite,bg=colour16]",
|
||||
"#[fg=brightwhite,bg=colour16]",
|
||||
"#[fg=brightwhite,bg=colour16]",
|
||||
"#[fg=brightwhite,bg=colour16]",
|
||||
"#[fg=brightwhite,bg=colour16]",
|
||||
"#[fg=brightwhite,bg=colour16]",
|
||||
"#[fg=brightwhite,bg=colour16]",
|
||||
"#[fg=brightwhite,bg=colour16]",
|
||||
"#[fg=brightwhite,bg=colour16]",
|
||||
"#[fg=brightwhite,bg=colour17]",
|
||||
"#[fg=brightwhite,bg=colour17]",
|
||||
"#[fg=brightwhite,bg=colour17]",
|
||||
"#[fg=brightwhite,bg=colour59]",
|
||||
"#[fg=brightwhite,bg=colour59]",
|
||||
"#[fg=brightwhite,bg=colour59]",
|
||||
"#[fg=brightwhite,bg=colour59]",
|
||||
"#[fg=brightwhite,bg=colour59]",
|
||||
"#[fg=brightwhite,bg=colour59]",
|
||||
"#[fg=brightwhite,bg=colour59]",
|
||||
"#[fg=brightwhite,bg=colour59]",
|
||||
"#[fg=brightwhite,bg=colour59]",
|
||||
"#[fg=brightwhite,bg=colour59]",
|
||||
"#[fg=brightwhite,bg=colour59]",
|
||||
"#[fg=brightwhite,bg=colour59]",
|
||||
"#[fg=brightwhite,bg=colour59]",
|
||||
"#[fg=brightwhite,bg=colour60]",
|
||||
"#[fg=brightwhite,bg=colour60]",
|
||||
"#[fg=brightwhite,bg=colour60]",
|
||||
"#[fg=brightwhite,bg=colour60]",
|
||||
"#[fg=brightwhite,bg=colour60]",
|
||||
"#[fg=brightwhite,bg=colour60]",
|
||||
"#[fg=brightwhite,bg=colour60]",
|
||||
"#[fg=brightwhite,bg=colour60]",
|
||||
"#[fg=brightwhite,bg=colour60]",
|
||||
"#[fg=brightwhite,bg=colour60]",
|
||||
"#[fg=brightwhite,bg=colour102]",
|
||||
"#[fg=brightwhite,bg=colour102]",
|
||||
"#[fg=brightwhite,bg=colour102]",
|
||||
"#[fg=brightwhite,bg=colour102]",
|
||||
"#[fg=brightwhite,bg=colour102]",
|
||||
"#[fg=brightwhite,bg=colour102]",
|
||||
"#[fg=brightwhite,bg=colour102]",
|
||||
"#[fg=brightwhite,bg=colour102]",
|
||||
"#[fg=brightwhite,bg=colour103]",
|
||||
"#[fg=brightwhite,bg=colour103]",
|
||||
"#[fg=brightwhite,bg=colour103]",
|
||||
"#[fg=brightwhite,bg=colour103]",
|
||||
"#[fg=brightwhite,bg=colour103]",
|
||||
"#[fg=brightwhite,bg=colour103]",
|
||||
"#[fg=brightwhite,bg=colour103]",
|
||||
"#[fg=black,bg=colour103]",
|
||||
"#[fg=black,bg=colour103]",
|
||||
"#[fg=black,bg=colour109]",
|
||||
"#[fg=black,bg=colour109]",
|
||||
"#[fg=black,bg=colour109]",
|
||||
"#[fg=black,bg=colour109]",
|
||||
"#[fg=black,bg=colour109]",
|
||||
"#[fg=black,bg=colour109]",
|
||||
"#[fg=black,bg=colour145]",
|
||||
"#[fg=black,bg=colour145]",
|
||||
"#[fg=black,bg=colour145]",
|
||||
"#[fg=black,bg=colour145]",
|
||||
"#[fg=black,bg=colour145]",
|
||||
"#[fg=black,bg=colour145]",
|
||||
"#[fg=black,bg=colour145]",
|
||||
"#[fg=black,bg=colour145]",
|
||||
"#[fg=black,bg=colour146]",
|
||||
"#[fg=black,bg=colour146]",
|
||||
"#[fg=black,bg=colour152]",
|
||||
"#[fg=black,bg=colour152]",
|
||||
"#[fg=black,bg=colour152]",
|
||||
"#[fg=black,bg=colour152]",
|
||||
"#[fg=black,bg=colour152]",
|
||||
"#[fg=black,bg=colour152]",
|
||||
"#[fg=black,bg=colour152]",
|
||||
"#[fg=black,bg=colour152]",
|
||||
"#[fg=black,bg=colour152]",
|
||||
"#[fg=black,bg=colour152]",
|
||||
"#[fg=black,bg=colour152]",
|
||||
"#[fg=black,bg=colour188]",
|
||||
"#[fg=black,bg=colour188]",
|
||||
"#[fg=black,bg=colour188]",
|
||||
"#[fg=black,bg=colour188]",
|
||||
"#[fg=black,bg=colour188]",
|
||||
"#[fg=black,bg=colour188]",
|
||||
"#[fg=black,bg=colour188]",
|
||||
"#[fg=black,bg=colour188]",
|
||||
"#[fg=black,bg=colour188]",
|
||||
"#[fg=black,bg=colour188]",
|
||||
"#[fg=black,bg=colour195]",
|
||||
"#[fg=black,bg=colour195]",
|
||||
"#[fg=black,bg=colour195]",
|
||||
"#[fg=black,bg=colour195]",
|
||||
"#[fg=black,bg=colour231]",
|
||||
"#[fg=black,bg=colour231]",
|
||||
"#[fg=black,bg=colour231]",
|
||||
"#[fg=black,bg=colour231]",
|
||||
"#[fg=black,bg=colour231]",
|
||||
"#[fg=black,bg=colour231]",
|
||||
"#[fg=black,bg=colour231]",
|
||||
"#[fg=black,bg=colour231]"
|
||||
}; // end load_lut
|
||||
|
||||
#endif
|
||||
302
common/main.cc
Normal file
302
common/main.cc
Normal file
|
|
@ -0,0 +1,302 @@
|
|||
/* vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <cstring>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <cstdlib> // EXIT_SUCCESS, atoi()
|
||||
#include <getopt.h> // getopt_long
|
||||
|
||||
#include "version.h"
|
||||
#include "graph.h"
|
||||
|
||||
// Tmux color lookup tables for the different metrics.
|
||||
#include "luts.h"
|
||||
|
||||
#include "cpu.h"
|
||||
#include "memory.h"
|
||||
#include "load.h"
|
||||
|
||||
#include "powerline.h"
|
||||
|
||||
std::string cpu_string( CPU_MODE cpu_mode, unsigned int cpu_usage_delay, unsigned int graph_lines,
|
||||
bool use_colors = false,
|
||||
bool use_powerline_left = false, bool use_powerline_right = false, bool use_vert_graph = false)
|
||||
{
|
||||
|
||||
float percentage;
|
||||
float multiplier = 1.0f;
|
||||
|
||||
//output stuff
|
||||
std::ostringstream oss;
|
||||
oss.precision( 1 );
|
||||
oss.setf( std::ios::fixed | std::ios::right );
|
||||
|
||||
// get %
|
||||
percentage = cpu_percentage( cpu_usage_delay );
|
||||
|
||||
// set multiplier to number of threads ?
|
||||
if ( cpu_mode == CPU_MODE_THREADS )
|
||||
{
|
||||
multiplier = get_cpu_count();
|
||||
}
|
||||
|
||||
// if percentage*multiplier >= 100, remove decimal point to keep number short
|
||||
if ( percentage*multiplier >= 100.0f )
|
||||
{
|
||||
oss.precision( 0 );
|
||||
}
|
||||
|
||||
unsigned int percent = static_cast<unsigned int>( percentage );
|
||||
if( use_colors )
|
||||
{
|
||||
if( use_powerline_right )
|
||||
{
|
||||
powerline( oss, cpu_percentage_lut[percent], POWERLINE_RIGHT );
|
||||
}
|
||||
else if( use_powerline_left )
|
||||
{
|
||||
powerline( oss, cpu_percentage_lut[percent], POWERLINE_LEFT );
|
||||
}
|
||||
else
|
||||
{
|
||||
powerline( oss, cpu_percentage_lut[percent], NONE );
|
||||
}
|
||||
}
|
||||
|
||||
if( use_vert_graph )
|
||||
{
|
||||
oss << "▕";
|
||||
oss << get_graph_vert( unsigned( percentage ) );
|
||||
oss << "▏";
|
||||
}
|
||||
else if( graph_lines > 0)
|
||||
{
|
||||
oss << " [";
|
||||
oss << get_graph_by_percentage( unsigned( percentage ), graph_lines );
|
||||
oss << "]";
|
||||
}
|
||||
oss.width( 6 );
|
||||
oss.setf( std::ios::fixed, std::ios::floatfield );
|
||||
oss.precision( 1 );
|
||||
oss.fill( ' ' );
|
||||
oss << std::right << percentage * multiplier;
|
||||
oss << "%";
|
||||
if( use_colors )
|
||||
{
|
||||
if( use_powerline_left )
|
||||
{
|
||||
powerline( oss, cpu_percentage_lut[percent], POWERLINE_LEFT, true );
|
||||
}
|
||||
else if( !use_powerline_right )
|
||||
{
|
||||
oss << "#[fg=default,bg=default]";
|
||||
}
|
||||
}
|
||||
|
||||
return oss.str();
|
||||
}
|
||||
|
||||
void print_help()
|
||||
{
|
||||
using std::cout;
|
||||
using std::endl;
|
||||
|
||||
cout << "tmux-mem-cpu-load v" << tmux_mem_cpu_load_VERSION << endl
|
||||
<< "Usage: tmux-mem-cpu-load [OPTIONS]\n\n"
|
||||
<< "Available options:\n"
|
||||
<< "-h, --help\n"
|
||||
<< "\t Prints this help message\n"
|
||||
<< "-c, --colors\n"
|
||||
<< "\tUse tmux colors in output\n"
|
||||
<< "-p, --powerline-left\n"
|
||||
<< "\tUse powerline left symbols throughout the output, enables --colors\n"
|
||||
<< "-q, --powerline-right\n"
|
||||
<< "\tUse powerline right symbols throughout the output, enables --colors\n"
|
||||
<< "-v, --vertical-graph\n"
|
||||
<< "\tUse vertical bar chart for CPU graph\n"
|
||||
<< "-l <value>, --segments-left <value>\n"
|
||||
<< "\tEnable blending bg/fg color (depending on -p or -q use) with segment to left\n"
|
||||
<< "\tProvide color to be used depending on -p or -q option for seamless segment blending\n"
|
||||
<< "\tColor is an integer value which uses the standard tmux color palette values\n"
|
||||
<< "-r <value>, --segments-right <value>\n"
|
||||
<< "\tEnable blending bg/fg color (depending on -p or -q use) with segment to right\n"
|
||||
<< "\tProvide color to be used depending on -p or -q option for seamless segment blending\n"
|
||||
<< "\tColor is an integer value which uses the standard tmux color palette values\n"
|
||||
<< "-i <value>, --interval <value>\n"
|
||||
<< "\tSet tmux status refresh interval in seconds. Default: 1 second\n"
|
||||
<< "-g <value>, --graph-lines <value>\n"
|
||||
<< "\tSet how many lines should be drawn in a graph. Default: 10\n"
|
||||
<< "-m <value>, --mem-mode <value>\n"
|
||||
<< "\tSet memory display mode. 0: Default, 1: Free memory, 2: Usage percent.\n"
|
||||
<< "-t <value>, --cpu-mode <value>\n"
|
||||
<< "\tSet cpu % display mode. 0: Default max 100%, 1: Max 100% * number of threads. \n"
|
||||
<< "-a <value>, --averages-count <value>\n"
|
||||
<< "\tSet how many load-averages should be drawn. Default: 3\n"
|
||||
<< endl;
|
||||
}
|
||||
|
||||
int main( int argc, char** argv )
|
||||
{
|
||||
unsigned cpu_usage_delay = 990000;
|
||||
short averages_count = 3;
|
||||
short graph_lines = 10; // max 32767 should be enough
|
||||
short left_color = 0;
|
||||
short right_color = 0;
|
||||
bool use_colors = false;
|
||||
bool use_powerline_left = false;
|
||||
bool use_powerline_right = false;
|
||||
bool use_vert_graph = false;
|
||||
bool segments_to_left = false;
|
||||
bool segments_to_right= false;
|
||||
MEMORY_MODE mem_mode = MEMORY_MODE_DEFAULT;
|
||||
CPU_MODE cpu_mode = CPU_MODE_DEFAULT;
|
||||
|
||||
static struct option long_options[] =
|
||||
{
|
||||
// Struct is a s follows:
|
||||
// const char * name, int has_arg, int *flag, int val
|
||||
// if *flag is null, val is option identifier to use in switch()
|
||||
// otherwise it's a value to set the variable *flag points to
|
||||
{ "help", no_argument, NULL, 'h' },
|
||||
{ "colors", no_argument, NULL, 'c' },
|
||||
{ "powerline-left", no_argument, NULL, 'p' },
|
||||
{ "powerline-right", no_argument, NULL, 'q' },
|
||||
{ "vertical-graph", no_argument, NULL, 'v' },
|
||||
{ "interval", required_argument, NULL, 'i' },
|
||||
{ "graph-lines", required_argument, NULL, 'g' },
|
||||
{ "mem-mode", required_argument, NULL, 'm' },
|
||||
{ "cpu-mode", required_argument, NULL, 't' },
|
||||
{ "averages-count", required_argument, NULL, 'a' },
|
||||
{ "segments-left", required_argument, NULL, 'l' },
|
||||
{ "segments-right", required_argument, NULL, 'r' },
|
||||
{ 0, 0, 0, 0 } // used to handle unknown long options
|
||||
};
|
||||
|
||||
int c;
|
||||
// while c != -1
|
||||
while( (c = getopt_long( argc, argv, "hi:cpqvl:r:g:m:a:t:", long_options, NULL) ) != -1 )
|
||||
{
|
||||
switch( c )
|
||||
{
|
||||
case 'h': // --help, -h
|
||||
print_help();
|
||||
return EXIT_FAILURE;
|
||||
break;
|
||||
case 'c': // --colors
|
||||
use_colors = true;
|
||||
break;
|
||||
case 'p': // --powerline-left
|
||||
use_colors = true;
|
||||
use_powerline_left = true;
|
||||
break;
|
||||
case 'q': // --powerline-right
|
||||
use_colors = true;
|
||||
use_powerline_right = true;
|
||||
break;
|
||||
case 'v': // --vertical-graph
|
||||
use_vert_graph = true;
|
||||
break;
|
||||
case 'l': // --segments-left
|
||||
segments_to_left = true;
|
||||
if( atoi( optarg ) < 0 || atoi( optarg ) > 255 )
|
||||
{
|
||||
std::cerr << "Valid color vaues are from 0 to 255.\n";
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
left_color = atoi( optarg ) ;
|
||||
break;
|
||||
case 'r': // --segments-right
|
||||
segments_to_right= true;
|
||||
if( atoi( optarg ) < 0 || atoi( optarg ) > 255 )
|
||||
{
|
||||
std::cerr << "Valid color vaues are from 0 to 255.\n";
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
right_color = atoi( optarg ) ;
|
||||
break;
|
||||
case 'i': // --interval, -i
|
||||
if( atoi( optarg ) < 1 )
|
||||
{
|
||||
std::cerr << "Status interval argument must be one or greater.\n";
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
cpu_usage_delay = atoi( optarg ) * 1000000 - 10000;
|
||||
break;
|
||||
case 'g': // --graph-lines, -g
|
||||
if( atoi( optarg ) < 0 )
|
||||
{
|
||||
std::cerr << "Graph lines argument must be zero or greater.\n";
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
graph_lines = atoi( optarg );
|
||||
break;
|
||||
case 'm': // --mem-mode, -m
|
||||
if( atoi( optarg ) < 0 )
|
||||
{
|
||||
std::cerr << "Memory mode argument must be zero or greater.\n";
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
mem_mode = static_cast< MEMORY_MODE >( atoi( optarg ) );
|
||||
break;
|
||||
case 't': // --cpu-mode, -t
|
||||
if( atoi( optarg ) < 0 )
|
||||
{
|
||||
std::cerr << "CPU mode argument must be zero or greater.\n";
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
cpu_mode = static_cast< CPU_MODE >( atoi( optarg ) );
|
||||
break;
|
||||
case 'a': // --averages-count, -a
|
||||
if( atoi( optarg ) < 0 || atoi( optarg ) > 3 )
|
||||
{
|
||||
std::cerr << "Valid averages-count arguments are: 0, 1, 2, 3\n";
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
averages_count = atoi( optarg );
|
||||
break;
|
||||
case '?':
|
||||
// getopt_long prints error message automatically
|
||||
return EXIT_FAILURE;
|
||||
break;
|
||||
default:
|
||||
std::cerr << "?? getopt returned character code 0 " << c << std::endl;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
}
|
||||
// Detect old option specification and return and error message.
|
||||
if( argc > optind )
|
||||
{
|
||||
std::cout <<
|
||||
"The interval and graph lines options are now specified with flags.\n\n";
|
||||
print_help();
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
MemoryStatus memory_status;
|
||||
mem_status( memory_status );
|
||||
std::cout << mem_string( memory_status, mem_mode, use_colors, use_powerline_left, use_powerline_right, segments_to_left, left_color )
|
||||
<< cpu_string( cpu_mode, cpu_usage_delay, graph_lines, use_colors, use_powerline_left, use_powerline_right, use_vert_graph )
|
||||
<< load_string( use_colors, use_powerline_left, use_powerline_right, averages_count, segments_to_right, right_color );
|
||||
|
||||
std::cout << std::endl;
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
122
common/memory.cc
Normal file
122
common/memory.cc
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
/* vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2015 Pawel 'l0ner' Soltys
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
|
||||
#include "memory.h"
|
||||
#include "luts.h"
|
||||
#include "conversions.h"
|
||||
#include "powerline.h"
|
||||
|
||||
std::string mem_string( const MemoryStatus & mem_status,
|
||||
MEMORY_MODE mode,
|
||||
bool use_colors,
|
||||
bool use_powerline_left,
|
||||
bool use_powerline_right,
|
||||
bool segments_to_left,
|
||||
short left_color )
|
||||
{
|
||||
std::ostringstream oss;
|
||||
// Change the percision for floats, for a pretty output
|
||||
oss.precision( 2 );
|
||||
oss.setf( std::ios::fixed | std::ios::right );
|
||||
|
||||
unsigned int color = static_cast< unsigned int >((100 * mem_status.used_mem) / mem_status.total_mem);
|
||||
if( use_colors )
|
||||
{
|
||||
if( use_powerline_right && segments_to_left )
|
||||
{
|
||||
powerline_char( oss, mem_lut[color], left_color, POWERLINE_RIGHT, false);
|
||||
oss << ' ';
|
||||
}
|
||||
else if( use_powerline_right && !segments_to_left )
|
||||
{
|
||||
oss << "#[bg=default]";
|
||||
powerline( oss, mem_lut[color], POWERLINE_RIGHT );
|
||||
oss << ' ';
|
||||
}
|
||||
else if( use_powerline_left && segments_to_left )
|
||||
{
|
||||
powerline_char( oss, mem_lut[color], left_color, POWERLINE_LEFT, false);
|
||||
oss << ' ';
|
||||
}
|
||||
else if( use_powerline_left )
|
||||
{
|
||||
//powerline( oss, mem_lut[color], POWERLINE_LEFT );
|
||||
// We do not know how to invert the default background color
|
||||
powerline( oss, mem_lut[color], NONE );
|
||||
oss << ' ';
|
||||
}
|
||||
else
|
||||
{
|
||||
powerline( oss, mem_lut[color], NONE );
|
||||
}
|
||||
}
|
||||
|
||||
switch( mode )
|
||||
{
|
||||
case MEMORY_MODE_FREE_MEMORY: // Show free memory in MB or GB
|
||||
{
|
||||
const float free_mem = mem_status.total_mem - mem_status.used_mem;
|
||||
const float free_mem_in_gigabytes = convert_unit( free_mem, GIGABYTES, MEGABYTES );
|
||||
|
||||
// if free memory is less than 1 GB, use MB instead
|
||||
if( free_mem_in_gigabytes < 1.0f )
|
||||
{
|
||||
oss << free_mem << "MB";
|
||||
}
|
||||
else
|
||||
{
|
||||
oss << free_mem_in_gigabytes << "GB";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MEMORY_MODE_USAGE_PERCENTAGE:
|
||||
{
|
||||
// Calculate the percentage of used memory
|
||||
const float percentage_mem = mem_status.used_mem /
|
||||
static_cast<float>( mem_status.total_mem ) * 100.0;
|
||||
|
||||
oss << percentage_mem << '%';
|
||||
break;
|
||||
}
|
||||
default: // Default mode, just show the used/total memory in MB
|
||||
if(mem_status.used_mem>10000 && mem_status.total_mem>10000)
|
||||
oss<<static_cast<unsigned int>(mem_status.used_mem/1024)<<"/"<<static_cast<unsigned int>(mem_status.total_mem/1024)<<"GB";
|
||||
else if(mem_status.used_mem<10000 && mem_status.total_mem>10000)
|
||||
oss<<static_cast<unsigned int>(mem_status.used_mem)<<"MB/"<<static_cast<unsigned int>(mem_status.total_mem/1024)<<"GB";
|
||||
else
|
||||
oss<<static_cast<unsigned int>(mem_status.used_mem)<<"/"<<static_cast<unsigned int>(mem_status.total_mem)<<"MB";
|
||||
}
|
||||
|
||||
if( use_colors )
|
||||
{
|
||||
if( use_powerline_left )
|
||||
{
|
||||
powerline( oss, mem_lut[color], POWERLINE_LEFT, true );
|
||||
}
|
||||
else if( !use_powerline_right )
|
||||
{
|
||||
oss << "#[fg=default,bg=default]";
|
||||
}
|
||||
}
|
||||
|
||||
return oss.str();
|
||||
}
|
||||
|
||||
58
common/memory.h
Normal file
58
common/memory.h
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
/* vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2015 Pawel 'l0ner' Soltys
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef MEMORY_H_
|
||||
#define MEMORY_H_
|
||||
|
||||
#include <string>
|
||||
|
||||
/** Memory status in megabytes */
|
||||
struct MemoryStatus
|
||||
{
|
||||
float used_mem;
|
||||
float total_mem;
|
||||
};
|
||||
|
||||
/** Get the current memory status */
|
||||
void mem_status( MemoryStatus & status );
|
||||
|
||||
|
||||
/** Memory status string output mode.
|
||||
*
|
||||
* Examples:
|
||||
*
|
||||
* MEMORY_MODE_DEFAULT: 11156/16003MB
|
||||
* MEMORY_MODE_FREE_MEMORY:
|
||||
* MEMORY_MODE_USAGE_PERCENTAGE:
|
||||
*/
|
||||
enum MEMORY_MODE
|
||||
{
|
||||
MEMORY_MODE_DEFAULT,
|
||||
MEMORY_MODE_FREE_MEMORY,
|
||||
MEMORY_MODE_USAGE_PERCENTAGE
|
||||
};
|
||||
|
||||
std::string mem_string( const MemoryStatus & mem_status,
|
||||
MEMORY_MODE mode = MEMORY_MODE_DEFAULT,
|
||||
bool use_colors = false,
|
||||
bool use_powerline_left = false,
|
||||
bool use_powerline_right = false,
|
||||
bool segments_to_left = false,
|
||||
short left_color = 0 );
|
||||
|
||||
#endif
|
||||
102
common/powerline.cc
Normal file
102
common/powerline.cc
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
/* vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2016 Michał Goliński
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include "powerline.h"
|
||||
|
||||
#include <string>
|
||||
#include <cstring>
|
||||
#include <sstream>
|
||||
|
||||
#define PWL_LEFT_FILLED ""
|
||||
#define PWL_RIGHT_FILLED ""
|
||||
|
||||
const char * bg2fg( const char s[] )
|
||||
{
|
||||
static char buf[40] = {0};
|
||||
const char *substr = strchr(s, ',');
|
||||
buf[0] = '#';
|
||||
buf[1] = '[';
|
||||
buf[2] = 'f';
|
||||
strcpy(buf+3, substr+2);
|
||||
return buf;
|
||||
}
|
||||
|
||||
|
||||
void powerline( std::ostringstream & oss, const char color[],
|
||||
POWERLINE_DIRECTION direction, bool background_only )
|
||||
{
|
||||
switch( direction )
|
||||
{
|
||||
case NONE:
|
||||
oss << color;
|
||||
break;
|
||||
case POWERLINE_LEFT:
|
||||
if( background_only )
|
||||
{
|
||||
oss << ' ' << bg2fg( color );
|
||||
}
|
||||
else
|
||||
{
|
||||
std::string colorstr( color );
|
||||
oss << "#[" << colorstr.substr( colorstr.find( "," ) + 1 )
|
||||
<< PWL_LEFT_FILLED
|
||||
<< color;
|
||||
}
|
||||
break;
|
||||
case POWERLINE_RIGHT:
|
||||
oss << ' '
|
||||
<< bg2fg( color )
|
||||
<< PWL_RIGHT_FILLED
|
||||
<< color;
|
||||
break;
|
||||
};
|
||||
}
|
||||
|
||||
void powerline_char( std::ostringstream & oss, const char dynamic_color[],
|
||||
short static_color, POWERLINE_DIRECTION direction, bool eol )
|
||||
{
|
||||
char write_color[7];
|
||||
sprintf(write_color, "%d", static_color);
|
||||
switch( direction )
|
||||
{
|
||||
case NONE:
|
||||
break;
|
||||
case POWERLINE_LEFT:
|
||||
if ( eol )
|
||||
{
|
||||
oss << bg2fg( dynamic_color ) << "#[bg=colour" << write_color << "]";
|
||||
}
|
||||
else
|
||||
{
|
||||
oss << dynamic_color << "#[fg=colour" << write_color << "]";
|
||||
}
|
||||
oss << PWL_LEFT_FILLED << dynamic_color;
|
||||
break;
|
||||
case POWERLINE_RIGHT:
|
||||
if ( eol )
|
||||
{
|
||||
oss << dynamic_color << "#[fg=colour" << write_color << "] ";
|
||||
}
|
||||
else
|
||||
{
|
||||
oss << bg2fg(dynamic_color) << " #[bg=colour" << write_color << "]";
|
||||
}
|
||||
oss << PWL_RIGHT_FILLED << dynamic_color;
|
||||
break;
|
||||
}
|
||||
}
|
||||
40
common/powerline.h
Normal file
40
common/powerline.h
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
/* vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2016 Michał Goliński
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef POWERLINE_H
|
||||
#define POWERLINE_H
|
||||
|
||||
#include <sstream>
|
||||
|
||||
enum POWERLINE_DIRECTION
|
||||
{
|
||||
NONE,
|
||||
POWERLINE_LEFT,
|
||||
POWERLINE_RIGHT
|
||||
};
|
||||
|
||||
/** Print out a powerline left character inverted version of the given
|
||||
* color. In the case of of using powerline left, the background color needs
|
||||
* to be inverted to the foreground before the powerline character is printed
|
||||
* in the next entr. */
|
||||
void powerline( std::ostringstream & oss, const char color[],
|
||||
POWERLINE_DIRECTION direction, bool background_only = false );
|
||||
void powerline_char( std::ostringstream & oss, const char dynamic_color[],
|
||||
short static_color, POWERLINE_DIRECTION direction, bool eol = false );
|
||||
|
||||
#endif // POWERLINE_H
|
||||
24
common/version.h.in
Normal file
24
common/version.h.in
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
/* vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2015 Pawel 'l0ner' Soltys
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
// the configured options and settings for sysstat
|
||||
#define tmux_mem_cpu_load_VERSION_MAJOR @tmux-mem-cpu-load_VERSION_MAJOR@
|
||||
#define tmux_mem_cpu_load_VERSION_MINOR @tmux-mem-cpu-load_VERSION_MINOR@
|
||||
#define tmux_mem_cpu_load_VERSION_PATCH @tmux-mem-cpu-load_VERSION_PATCH@
|
||||
#define tmux_mem_cpu_load_VERSION "@tmux-mem-cpu-load_VERSION@"
|
||||
|
||||
65
freebsd/cpu.cc
Normal file
65
freebsd/cpu.cc
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
/* vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2013 Justin Crawford <Justasic@gmail.com>
|
||||
* Copyright 2015 Pawel 'l0ner' Soltys
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
// Based on: github.com/freebsd/freebsd/blob/master/usr.bin/top/machine.c
|
||||
// Based on: Apple.cpp for load_string/mem_string and apple's documentation
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h> // usleep
|
||||
|
||||
#include "getsysctl.h"
|
||||
#include "cpu.h"
|
||||
|
||||
uint32_t get_cpu_count()
|
||||
{
|
||||
int32_t cpu_count = 0;
|
||||
GETSYSCTL( "hw.ncpu", cpu_count );
|
||||
|
||||
return static_cast<uint32_t>( cpu_count );
|
||||
}
|
||||
|
||||
float cpu_percentage( unsigned int cpu_usage_delay )
|
||||
{
|
||||
u_long load1[CP_STATES];
|
||||
u_long load2[CP_STATES];
|
||||
|
||||
GETSYSCTL( "kern.cp_time", load1 );
|
||||
usleep( cpu_usage_delay );
|
||||
GETSYSCTL( "kern.cp_time", load2 );
|
||||
|
||||
// Current load times
|
||||
unsigned long long current_user = load1[CP_USER];
|
||||
unsigned long long current_system = load1[CP_SYS];
|
||||
unsigned long long current_nice = load1[CP_NICE];
|
||||
unsigned long long current_idle = load1[CP_IDLE];
|
||||
// Next load times
|
||||
unsigned long long next_user = load2[CP_USER];
|
||||
unsigned long long next_system = load2[CP_SYS];
|
||||
unsigned long long next_nice = load2[CP_NICE];
|
||||
unsigned long long next_idle = load2[CP_IDLE];
|
||||
// Difference between the two
|
||||
unsigned long long diff_user = next_user - current_user;
|
||||
unsigned long long diff_system = next_system - current_system;
|
||||
unsigned long long diff_nice = next_nice - current_nice;
|
||||
unsigned long long diff_idle = next_idle - current_idle;
|
||||
|
||||
return static_cast<float>( diff_user + diff_system + diff_nice ) /
|
||||
static_cast<float>( diff_user + diff_system + diff_nice + diff_idle ) *
|
||||
100.0;
|
||||
}
|
||||
70
freebsd/memory.cc
Normal file
70
freebsd/memory.cc
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
/* vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2015 Pawel 'l0ner' Soltys
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
// Based on: github.com/freebsd/freebsd/blob/master/usr.bin/top/machine.c
|
||||
// Based on: Apple.cpp for load_string/mem_string and apple's documentation
|
||||
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "getsysctl.h"
|
||||
#include "memory.h"
|
||||
#include "conversions.h"
|
||||
|
||||
void mem_status( MemoryStatus & status )
|
||||
{
|
||||
// These values are in bytes
|
||||
//u_int total;
|
||||
//u_int free;
|
||||
//u_int inactive;
|
||||
//u_int cache;
|
||||
u_int wired;
|
||||
u_int active;
|
||||
u_int page_size;
|
||||
u_int page_count;
|
||||
|
||||
// Get total physical memory, page size, and some other needed info
|
||||
// instead of using realmem which reports quantity of ram installed on
|
||||
// platform, use physmem which reports ram available to system.
|
||||
//GETSYSCTL( "hw.physmem", total );
|
||||
page_size = getpagesize();
|
||||
// page count reflects actual size of memory we have available for
|
||||
// applications. it will be less than realmem or physmem, since it doesn't
|
||||
// include what's been allocated for kernel, but it will be equal to
|
||||
// free + inactive + cache + wired + active, and thus will reflect better
|
||||
// what's actually available.
|
||||
GETSYSCTL( "vm.stats.vm.v_page_count", page_count );
|
||||
|
||||
//GETSYSCTL( "vm.stats.vm.v_free_count", free );
|
||||
//GETSYSCTL( "vm.stats.vm.v_inactive_count", inactive );
|
||||
//GETSYSCTL( "vm.stats.vm.v_cache_count", cache );
|
||||
GETSYSCTL( "vm.stats.vm.v_wire_count", wired ); // Buffers
|
||||
GETSYSCTL( "vm.stats.vm.v_active_count", active );
|
||||
|
||||
// Get all memory which can be allocated, which on FreeBSD is:
|
||||
// cached + inactive + free
|
||||
//u_int unused = ( cache + inactive + free ) * page_size;
|
||||
|
||||
// Used memory on FreeBSD is active + wired.
|
||||
u_int used = ( active + wired );
|
||||
|
||||
status.used_mem = convert_unit( static_cast< float >( used * (page_size >> 10) ), MEGABYTES, KILOBYTES );
|
||||
status.total_mem = convert_unit( static_cast< float >( page_count * (page_size >> 10) ), MEGABYTES, KILOBYTES);
|
||||
}
|
||||
78
linux/cpu.cc
Normal file
78
linux/cpu.cc
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
/* vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2015 Pawel 'l0ner' Soltys
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <unistd.h> // usleep
|
||||
|
||||
#include "cpu.h"
|
||||
#include "luts.h"
|
||||
|
||||
uint32_t get_cpu_count()
|
||||
{
|
||||
return sysconf( _SC_NPROCESSORS_ONLN );
|
||||
}
|
||||
|
||||
float cpu_percentage( unsigned cpu_usage_delay )
|
||||
{
|
||||
std::string line;
|
||||
size_t substr_start = 0;
|
||||
size_t substr_len;
|
||||
|
||||
// cpu stats
|
||||
// user, nice, system, idle
|
||||
// in that order
|
||||
unsigned long long stats[CP_STATES];
|
||||
|
||||
std::ifstream stat_file( "/proc/stat" );
|
||||
getline( stat_file, line );
|
||||
stat_file.close();
|
||||
|
||||
// skip "cpu"
|
||||
substr_len = line.find_first_of( " ", 3 );
|
||||
// parse cpu line
|
||||
for( unsigned i=0; i < 4; i++ )
|
||||
{
|
||||
substr_start = line.find_first_not_of( " ", substr_len );
|
||||
substr_len = line.find_first_of( " ", substr_start );
|
||||
stats[i] = std::stoll( line.substr( substr_start, substr_len ) );
|
||||
}
|
||||
|
||||
usleep( cpu_usage_delay );
|
||||
|
||||
stat_file.open( "/proc/stat" );
|
||||
getline( stat_file, line );
|
||||
stat_file.close();
|
||||
|
||||
// skip "cpu"
|
||||
substr_len = line.find_first_of( " ", 3 );
|
||||
// parse cpu line
|
||||
for( unsigned i=0; i < 4; i++ )
|
||||
{
|
||||
substr_start = line.find_first_not_of( " ", substr_len );
|
||||
substr_len = line.find_first_of ( " ", substr_start );
|
||||
stats[i] = std::stoll( line.substr( substr_start, substr_len ) ) - stats[i];
|
||||
}
|
||||
|
||||
return static_cast<float>(
|
||||
stats[CP_USER] + stats[CP_NICE] + stats[CP_SYS]
|
||||
) / static_cast<float>(
|
||||
stats[CP_USER] + stats[CP_NICE] + stats[CP_SYS] + stats[CP_IDLE]
|
||||
) * 100.0;
|
||||
}
|
||||
|
||||
93
linux/memory.cc
Normal file
93
linux/memory.cc
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
/* vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2015 Pawel 'l0ner' Soltys
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <sstream>
|
||||
#include <fstream>
|
||||
#include <sys/sysinfo.h>
|
||||
|
||||
#include "memory.h"
|
||||
#include "conversions.h"
|
||||
|
||||
void mem_status( MemoryStatus & status )
|
||||
{
|
||||
std::string line;
|
||||
std::string substr;
|
||||
size_t substr_start;
|
||||
size_t substr_len;
|
||||
|
||||
unsigned int total_mem;
|
||||
unsigned int used_mem;
|
||||
|
||||
/* Since linux uses some RAM for disk caching, the actuall used ram is lower
|
||||
* than what sysinfo(), top or free reports. htop reports the usage in a
|
||||
* correct way. The memory used for caching doesn't count as used, since it
|
||||
* can be freed in any moment. Usually it hapens automatically, when an
|
||||
* application requests memory.
|
||||
* In order to calculate the ram that's actually used we need to use the
|
||||
* following formula:
|
||||
* total_ram + shmem - free_ram - buffered_ram - cached_ram - srclaimable
|
||||
*
|
||||
* example data, junk removed, with comments added:
|
||||
*
|
||||
* MemTotal: 61768 kB old
|
||||
* MemFree: 1436 kB old
|
||||
* MemAvailable ????? kB ??
|
||||
* MemShared: 0 kB old (now always zero; not calculated)
|
||||
* Buffers: 1312 kB old
|
||||
* Cached: 20932 kB old
|
||||
* SwapTotal: 122580 kB old
|
||||
* SwapFree: 60352 kB old
|
||||
*/
|
||||
|
||||
std::ifstream memory_info("/proc/meminfo");
|
||||
|
||||
while( std::getline( memory_info, line ) )
|
||||
{
|
||||
substr_start = 0;
|
||||
substr_len = line.find_first_of( ':' );
|
||||
substr = line.substr( substr_start, substr_len );
|
||||
substr_start = line.find_first_not_of( " ", substr_len + 1 );
|
||||
substr_len = line.find_first_of( 'k' ) - substr_start;
|
||||
if( substr.compare( "MemTotal" ) == 0 )
|
||||
{
|
||||
// get total memory
|
||||
total_mem = stol( line.substr( substr_start, substr_len ) );
|
||||
}
|
||||
else if( substr.compare( "MemFree" ) == 0 )
|
||||
{
|
||||
used_mem = total_mem - stol( line.substr( substr_start, substr_len ) );
|
||||
}
|
||||
else if( substr.compare( "Shmem" ) == 0 )
|
||||
{
|
||||
used_mem += stol( line.substr( substr_start, substr_len ) );
|
||||
}
|
||||
else if( substr.compare( "Buffers" ) == 0 ||
|
||||
substr.compare( "Cached" ) == 0 ||
|
||||
substr.compare( "SReclaimable" ) == 0 )
|
||||
{
|
||||
used_mem -= stol( line.substr( substr_start, substr_len ) );
|
||||
}
|
||||
}
|
||||
|
||||
// we want megabytes on output, but since the values already come as
|
||||
// kilobytes we need to divide them by 1024 only once, thus we use
|
||||
// KILOBYTES
|
||||
status.used_mem = convert_unit(static_cast< float >( used_mem ), MEGABYTES, KILOBYTES);
|
||||
status.total_mem = convert_unit(static_cast< float >( total_mem ), MEGABYTES, KILOBYTES);
|
||||
}
|
||||
|
||||
65
netbsd/cpu.cc
Normal file
65
netbsd/cpu.cc
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
/* vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2013 Justin Crawford <Justasic@gmail.com>
|
||||
* Copyright 2015 Pawel 'l0ner' Soltys
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
// Based on: github.com/freebsd/freebsd/blob/master/usr.bin/top/machine.c
|
||||
// Based on: Apple.cpp for load_string/mem_string and apple's documentation
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h> // usleep
|
||||
|
||||
#include "getsysctl.h"
|
||||
#include "cpu.h"
|
||||
|
||||
uint32_t get_cpu_count()
|
||||
{
|
||||
int cpu_count = 0;
|
||||
GETSYSCTL( "hw.ncpu", cpu_count );
|
||||
|
||||
return static_cast<uint32_t>( cpu_count );
|
||||
}
|
||||
|
||||
float cpu_percentage( unsigned int cpu_usage_delay )
|
||||
{
|
||||
u_int64_t load1[CP_STATES];
|
||||
u_int64_t load2[CP_STATES];
|
||||
|
||||
GETSYSCTL( "kern.cp_time", load1 );
|
||||
usleep( cpu_usage_delay );
|
||||
GETSYSCTL( "kern.cp_time", load2 );
|
||||
|
||||
// Current load times
|
||||
unsigned long long current_user = load1[CP_USER];
|
||||
unsigned long long current_system = load1[CP_SYS];
|
||||
unsigned long long current_nice = load1[CP_NICE];
|
||||
unsigned long long current_idle = load1[CP_IDLE];
|
||||
// Next load times
|
||||
unsigned long long next_user = load2[CP_USER];
|
||||
unsigned long long next_system = load2[CP_SYS];
|
||||
unsigned long long next_nice = load2[CP_NICE];
|
||||
unsigned long long next_idle = load2[CP_IDLE];
|
||||
// Difference between the two
|
||||
unsigned long long diff_user = next_user - current_user;
|
||||
unsigned long long diff_system = next_system - current_system;
|
||||
unsigned long long diff_nice = next_nice - current_nice;
|
||||
unsigned long long diff_idle = next_idle - current_idle;
|
||||
|
||||
return static_cast<float>( diff_user + diff_system + diff_nice ) /
|
||||
static_cast<float>( diff_user + diff_system + diff_nice + diff_idle ) *
|
||||
100.0;
|
||||
}
|
||||
48
netbsd/memory.cc
Normal file
48
netbsd/memory.cc
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
/* vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2015 Pawel 'l0ner' Soltys
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/sysctl.h>
|
||||
#include <uvm/uvm_extern.h> // uvmexp struct
|
||||
|
||||
#include "error.h"
|
||||
#include "conversions.h"
|
||||
#include "memory.h"
|
||||
|
||||
void mem_status( MemoryStatus & status )
|
||||
{
|
||||
// get vm memory stats
|
||||
static int vm_totalmem[] = { CTL_VM, VM_UVMEXP2 };
|
||||
struct uvmexp_sysctl mem;
|
||||
size_t size = sizeof( mem );
|
||||
if( sysctl( vm_totalmem, 2, &mem, &size, NULL, 0 ) < 0 )
|
||||
{
|
||||
error( "memory: error getting vm memory stats" );
|
||||
}
|
||||
|
||||
int64_t total_mem = ( mem.npages << mem.pageshift );
|
||||
int64_t used_mem =
|
||||
( mem.active + mem.wired - mem.filepages ) << mem.pageshift;
|
||||
|
||||
// add 1 to used which gets lost somewhere along conversions
|
||||
status.used_mem = convert_unit(static_cast< float >( used_mem ), MEGABYTES );
|
||||
status.total_mem = convert_unit(static_cast< float >( total_mem ), MEGABYTES );
|
||||
}
|
||||
85
openbsd/cpu.cc
Normal file
85
openbsd/cpu.cc
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
/* vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2015 Pawel 'l0ner' Soltys
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <unistd.h> // usleep
|
||||
|
||||
#include <sys/sysctl.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include "error.h"
|
||||
#include "cpu.h"
|
||||
|
||||
uint32_t get_cpu_count()
|
||||
{
|
||||
int cpu_count = 1; // default to 1
|
||||
int mib[2] = { CTL_HW, HW_NCPUONLINE };
|
||||
size_t len = sizeof( cpu_count );
|
||||
|
||||
if( sysctl( mib, 2, &cpu_count, &len, NULL, 0 ) < 0 )
|
||||
{
|
||||
error( "sysctl: error getting cpu count" );
|
||||
}
|
||||
|
||||
return static_cast<uint32_t>( cpu_count );
|
||||
}
|
||||
|
||||
float cpu_percentage( unsigned int cpu_usage_delay )
|
||||
{
|
||||
int cpu_ctl[] = { CTL_KERN, KERN_CPTIME };
|
||||
|
||||
u_long load1[CP_STATES];
|
||||
u_long load2[CP_STATES];
|
||||
|
||||
size_t size = sizeof( load1 );
|
||||
|
||||
// get cpu times
|
||||
if( sysctl( cpu_ctl, 2, &load1, &size, NULL, 0 ) < 0 )
|
||||
{
|
||||
error( "sysctl: error getting initial cpu stats" );
|
||||
}
|
||||
|
||||
usleep( cpu_usage_delay );
|
||||
|
||||
size = sizeof( load2 );
|
||||
|
||||
// update cpu times
|
||||
if( sysctl( cpu_ctl, 2, &load2, &size, NULL, 0 ) < 0 )
|
||||
{
|
||||
error( "sysctl: error getting updated cpu stats" );
|
||||
}
|
||||
|
||||
// Current load times
|
||||
unsigned long long current_user = load1[CP_USER];
|
||||
unsigned long long current_system = load1[CP_SYS];
|
||||
unsigned long long current_nice = load1[CP_NICE];
|
||||
unsigned long long current_idle = load1[CP_IDLE];
|
||||
// Next load times
|
||||
unsigned long long next_user = load2[CP_USER];
|
||||
unsigned long long next_system = load2[CP_SYS];
|
||||
unsigned long long next_nice = load2[CP_NICE];
|
||||
unsigned long long next_idle = load2[CP_IDLE];
|
||||
// Difference between the two
|
||||
unsigned long long diff_user = next_user - current_user;
|
||||
unsigned long long diff_system = next_system - current_system;
|
||||
unsigned long long diff_nice = next_nice - current_nice;
|
||||
unsigned long long diff_idle = next_idle - current_idle;
|
||||
|
||||
return static_cast<float>( diff_user + diff_system + diff_nice ) /
|
||||
static_cast<float>( diff_user + diff_system + diff_nice + diff_idle ) *
|
||||
100.0;
|
||||
}
|
||||
90
openbsd/memory.cc
Normal file
90
openbsd/memory.cc
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
/* vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2015 Pawel 'l0ner' Soltys
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
|
||||
// Ugly fix to compilation on OpenBSD 5.6
|
||||
// these need to be before include sys/mount.h
|
||||
// and be in this exact order. Otherwise compiling on
|
||||
// OpenBSD 5.6 will fail with missing NGROUPS define
|
||||
// or missing gid_t typedefs
|
||||
#ifdef OPENBSD_WORKAROUND
|
||||
#include <sys/types.h> // typedefs
|
||||
#include <sys/param.h> // missing NGROUPS
|
||||
#include <sys/ucred.h>
|
||||
#else
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#include <sys/mount.h> // VFS_* which we use to get cache
|
||||
#include <sys/sysctl.h>
|
||||
|
||||
#include "error.h"
|
||||
#include "memory.h"
|
||||
#include "conversions.h"
|
||||
|
||||
void mem_status( MemoryStatus & status )
|
||||
{
|
||||
// These values are in bytes
|
||||
int64_t total_mem = 0;
|
||||
int64_t used_mem = 0;
|
||||
int32_t free_mem = 0;
|
||||
size_t size;
|
||||
|
||||
// get page size
|
||||
static int hw_pagesize[] = { CTL_HW, HW_PAGESIZE };
|
||||
int page_size = 0;
|
||||
size = sizeof( page_size );
|
||||
if( sysctl( hw_pagesize, 2, &page_size, &size, NULL, 0 ) < 0 )
|
||||
{
|
||||
error( "memory: error getting page size" );
|
||||
}
|
||||
|
||||
// get vm memory stats
|
||||
static int uvmexp_mib[] = { CTL_VM, VM_UVMEXP };
|
||||
struct uvmexp uvmexp;
|
||||
size = sizeof( uvmexp );
|
||||
if( sysctl( uvmexp_mib, 2, &uvmexp, &size, NULL, 0 ) < 0 )
|
||||
{
|
||||
error( "memory: error getting vm memory stats" );
|
||||
}
|
||||
|
||||
// In case we need it, this gets the cached memory (bcstats.numbufpages)
|
||||
static int vm_bcstats[] = { CTL_VFS, VFS_GENERIC, VFS_BCACHESTAT };
|
||||
struct bcachestats bcstats;
|
||||
size = sizeof( bcstats );
|
||||
if( sysctl( vm_bcstats, 3, &bcstats, &size, NULL, 0 ) < 0 )
|
||||
{
|
||||
error( "memory: error getting cached memory size" );
|
||||
}
|
||||
|
||||
// calculations based on libgtop
|
||||
used_mem = ( (uint64_t) uvmexp.npages - uvmexp.free ) << uvmexp.pageshift;
|
||||
free_mem = ( (uint64_t) uvmexp.free ) << uvmexp.pageshift;
|
||||
|
||||
// from nagios-memory plugin
|
||||
used_mem -= ( (uint64_t) bcstats.numbufpages ) << uvmexp.pageshift;
|
||||
free_mem += ( (uint64_t) bcstats.numbufpages ) << uvmexp.pageshift;
|
||||
|
||||
// calculate total memory
|
||||
total_mem = ( (uint64_t) uvmexp.npages ) << uvmexp.pageshift;
|
||||
|
||||
status.used_mem = convert_unit(static_cast< float >( used_mem ), MEGABYTES );
|
||||
status.total_mem = convert_unit(static_cast< float >( total_mem ), MEGABYTES );
|
||||
}
|
||||
80
osx/cpu.cc
Normal file
80
osx/cpu.cc
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
/*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2013 Justin Crawford <Justasic@gmail.com>
|
||||
* Copyright 2015 Pawel 'l0ner' Soltys
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <mach/mach.h>
|
||||
#include <unistd.h> // usleep()
|
||||
|
||||
#include "cpu.h"
|
||||
|
||||
uint32_t get_cpu_count()
|
||||
{
|
||||
return sysconf( _SC_NPROCESSORS_ONLN );
|
||||
}
|
||||
|
||||
// OSX or BSD based system, use BSD APIs instead
|
||||
// See: http://www.opensource.apple.com/source/xnu/xnu-201/osfmk/mach/host_info.h
|
||||
// and: http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/
|
||||
|
||||
host_cpu_load_info_data_t _get_cpu_percentage()
|
||||
{
|
||||
kern_return_t error;
|
||||
mach_msg_type_number_t count;
|
||||
host_cpu_load_info_data_t r_load;
|
||||
mach_port_t mach_port;
|
||||
|
||||
count = HOST_CPU_LOAD_INFO_COUNT;
|
||||
mach_port = mach_host_self();
|
||||
error = host_statistics(mach_port, HOST_CPU_LOAD_INFO,
|
||||
( host_info_t )&r_load, &count );
|
||||
|
||||
if ( error != KERN_SUCCESS )
|
||||
{
|
||||
return host_cpu_load_info_data_t();
|
||||
}
|
||||
|
||||
return r_load;
|
||||
}
|
||||
|
||||
float cpu_percentage( unsigned int cpu_usage_delay )
|
||||
{
|
||||
// Get the load times from the XNU kernel
|
||||
host_cpu_load_info_data_t load1 = _get_cpu_percentage();
|
||||
usleep( cpu_usage_delay );
|
||||
host_cpu_load_info_data_t load2 = _get_cpu_percentage();
|
||||
|
||||
// Current load times
|
||||
unsigned long long current_user = load1.cpu_ticks[CP_USER];
|
||||
unsigned long long current_system = load1.cpu_ticks[CP_SYS];
|
||||
unsigned long long current_nice = load1.cpu_ticks[CP_NICE];
|
||||
unsigned long long current_idle = load1.cpu_ticks[CP_IDLE];
|
||||
// Next load times
|
||||
unsigned long long next_user = load2.cpu_ticks[CP_USER];
|
||||
unsigned long long next_system = load2.cpu_ticks[CP_SYS];
|
||||
unsigned long long next_nice = load2.cpu_ticks[CP_NICE];
|
||||
unsigned long long next_idle = load2.cpu_ticks[CP_IDLE];
|
||||
// Difference between the two
|
||||
unsigned long long diff_user = next_user - current_user;
|
||||
unsigned long long diff_system = next_system - current_system;
|
||||
unsigned long long diff_nice = next_nice - current_nice;
|
||||
unsigned long long diff_idle = next_idle - current_idle;
|
||||
|
||||
return static_cast<float>( diff_user + diff_system + diff_nice ) /
|
||||
static_cast<float>( diff_user + diff_system + diff_nice + diff_idle ) *
|
||||
100.0;
|
||||
}
|
||||
|
||||
65
osx/memory.cc
Normal file
65
osx/memory.cc
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2013 Justin Crawford <Justasic@gmail.com>
|
||||
* Copyright 2015 Pawel 'l0ner' Soltys
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <mach/mach.h>
|
||||
#include <sys/sysctl.h> // for sysctl
|
||||
|
||||
#include "memory.h"
|
||||
#include "conversions.h"
|
||||
|
||||
void mem_status( MemoryStatus & status )
|
||||
{
|
||||
// These values are in bytes
|
||||
u_int64_t total_mem;
|
||||
// float app_mem = 0.0f;
|
||||
// float cached_file_mem = 0.0f;
|
||||
float available_mem = 0.0f;
|
||||
float percentage_mem;
|
||||
float free_mem;
|
||||
float free_mem_in_gigabytes; // used to check if free mem < 1 GB
|
||||
//u_int64_t unused_mem;
|
||||
|
||||
vm_size_t page_size;
|
||||
vm_statistics64_data_t vm_stats; // Use 64-bit VM statistics
|
||||
|
||||
// Get total physical memory
|
||||
int mib[] = { CTL_HW, HW_MEMSIZE };
|
||||
size_t length = sizeof( total_mem );
|
||||
sysctl( mib, 2, &total_mem, &length, NULL, 0 );
|
||||
|
||||
mach_port_t mach_port = mach_host_self();
|
||||
|
||||
// Use HOST_VM_INFO64_COUNT as the count for vm_statistics64_data_t
|
||||
mach_msg_type_number_t count = HOST_VM_INFO64_COUNT;
|
||||
|
||||
if( KERN_SUCCESS == host_page_size( mach_port, &page_size ) &&
|
||||
KERN_SUCCESS == host_statistics64( mach_port, HOST_VM_INFO64,
|
||||
( host_info_t )&vm_stats, &count )
|
||||
)
|
||||
{
|
||||
//unused_mem = static_cast<u_int64_t>( vm_stats.free_count * page_size );
|
||||
// app_mem = static_cast<float>(( vm_stats.internal_page_count - vm_stats.purgeable_count ) * page_size );
|
||||
// cached_file_mem = static_cast<float>(( vm_stats.purgeable_count + vm_stats.external_page_count ) * page_size );
|
||||
available_mem = static_cast<float>(( vm_stats.free_count + vm_stats.external_page_count - vm_stats.speculative_count ) * page_size );
|
||||
}
|
||||
|
||||
status.used_mem = convert_unit(static_cast< float >(total_mem - available_mem ), MEGABYTES );
|
||||
status.total_mem = convert_unit(static_cast< float >( total_mem ), MEGABYTES );
|
||||
}
|
||||
|
|
@ -1,144 +0,0 @@
|
|||
/**
|
||||
* @file cpuusage.cpp
|
||||
* @brief print out the percent cpu usage at a given interval
|
||||
* @author Matthew McCormick (thewtex)
|
||||
* @version
|
||||
* @date 2009-08-12
|
||||
*/
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
using namespace std;
|
||||
|
||||
#include <unistd.h> // sleep
|
||||
|
||||
// in seconds
|
||||
const static unsigned int INTERVAL=1;
|
||||
|
||||
class CPUPercentage
|
||||
{
|
||||
public:
|
||||
CPUPercentage();
|
||||
~CPUPercentage();
|
||||
|
||||
const float& get_percentage();
|
||||
|
||||
private:
|
||||
ifstream m_stat_file;
|
||||
unsigned long long m_current_user;
|
||||
unsigned long long m_current_system;
|
||||
unsigned long long m_current_nice;
|
||||
unsigned long long m_current_idle;
|
||||
unsigned long long m_next_user;
|
||||
unsigned long long m_next_system;
|
||||
unsigned long long m_next_nice;
|
||||
unsigned long long m_next_idle;
|
||||
unsigned long long m_diff_user;
|
||||
unsigned long long m_diff_system;
|
||||
unsigned long long m_diff_nice;
|
||||
unsigned long long m_diff_idle;
|
||||
|
||||
string m_stat_line;
|
||||
size_t m_line_start_pos;
|
||||
size_t m_line_end_pos;
|
||||
istringstream m_iss;
|
||||
|
||||
float m_percentage;
|
||||
};
|
||||
|
||||
CPUPercentage::CPUPercentage():
|
||||
m_current_user(0),
|
||||
m_current_system(0),
|
||||
m_current_nice(0),
|
||||
m_current_idle(0),
|
||||
m_next_user(0),
|
||||
m_next_system(0),
|
||||
m_next_nice(0),
|
||||
m_next_idle(0),
|
||||
m_diff_user(0),
|
||||
m_diff_system(0),
|
||||
m_diff_nice(0),
|
||||
m_diff_idle(0)
|
||||
{
|
||||
m_stat_file.exceptions(ifstream::eofbit|ifstream::failbit|ifstream::badbit);
|
||||
}
|
||||
|
||||
CPUPercentage::~CPUPercentage()
|
||||
{
|
||||
if(m_stat_file.is_open())
|
||||
m_stat_file.close();
|
||||
}
|
||||
|
||||
const float& CPUPercentage::get_percentage()
|
||||
{
|
||||
m_stat_file.open("/proc/stat");
|
||||
getline(m_stat_file, m_stat_line);
|
||||
m_stat_file.close();
|
||||
|
||||
// skip "cpu"
|
||||
m_line_start_pos = m_stat_line.find_first_not_of(" ", 3);
|
||||
m_line_end_pos = m_stat_line.find_first_of(' ', m_line_start_pos);
|
||||
m_line_end_pos = m_stat_line.find_first_of(' ', m_line_end_pos + 1);
|
||||
m_line_end_pos = m_stat_line.find_first_of(' ', m_line_end_pos + 1);
|
||||
m_line_end_pos = m_stat_line.find_first_of(' ', m_line_end_pos + 1);
|
||||
m_iss.str(m_stat_line.substr(m_line_start_pos, m_line_end_pos - m_line_start_pos));
|
||||
m_iss >> m_next_user >> m_next_nice >> m_next_system >> m_next_idle;
|
||||
m_iss.clear();
|
||||
|
||||
m_diff_user = m_next_user - m_current_user;
|
||||
m_diff_system = m_next_system - m_current_system;
|
||||
m_diff_nice = m_next_nice - m_current_nice;
|
||||
m_diff_idle = m_next_idle - m_current_idle;
|
||||
m_percentage = static_cast<float>(m_diff_user + m_diff_system + m_diff_nice)/static_cast<float>(m_diff_user + m_diff_system + m_diff_nice + m_diff_idle)*100.0;
|
||||
|
||||
m_current_user = m_next_user;
|
||||
m_current_system = m_next_system;
|
||||
m_current_nice = m_next_nice;
|
||||
m_current_idle = m_next_idle;
|
||||
|
||||
return m_percentage;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
string meter = "[ ]";
|
||||
int meter_count = 0;
|
||||
float percentage = 0.0;
|
||||
CPUPercentage cpu_per;
|
||||
cout.precision(1);
|
||||
cout.setf(ios::fixed | ios::right);
|
||||
cout.width(5);
|
||||
try
|
||||
{
|
||||
while(true)
|
||||
{
|
||||
percentage = cpu_per.get_percentage();
|
||||
|
||||
meter_count = 1;
|
||||
while(meter_count*9.99 < percentage)
|
||||
{
|
||||
meter[meter_count] = '|';
|
||||
meter_count++;
|
||||
}
|
||||
while(meter_count <= 10)
|
||||
{
|
||||
meter[meter_count] = ' ';
|
||||
meter_count++;
|
||||
}
|
||||
cout << meter << ' ';
|
||||
cout.width(5);
|
||||
cout << percentage << endl;
|
||||
sleep(1);
|
||||
}
|
||||
}
|
||||
catch(const exception &e)
|
||||
{
|
||||
cerr << "Error: " << e.what() << endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
total_mem=$(/usr/bin/free -m | /usr/bin/awk '$1 == "Mem:" { print $2 }')
|
||||
|
||||
while(true); do
|
||||
current_mem=$(/usr/bin/free -m | /usr/bin/awk '$1 == "-/+" { print $3 }')
|
||||
echo "${current_mem}MB/${total_mem}MB"
|
||||
sleep 3
|
||||
done
|
||||
BIN
seg-adj1.png
Normal file
BIN
seg-adj1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.8 KiB |
BIN
seg-adj2.png
Normal file
BIN
seg-adj2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.4 KiB |
49
tmux-mem-cpu-load.plugin.tmux
Executable file
49
tmux-mem-cpu-load.plugin.tmux
Executable file
|
|
@ -0,0 +1,49 @@
|
|||
# vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
#
|
||||
# Copyright 2012 Matthew McCormick
|
||||
# Copyright 2015 Pawel 'l0ner' Soltys
|
||||
#
|
||||
# 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.
|
||||
|
||||
# The directory where this plugin is located.
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
if [ ! -f $CURRENT_DIR/tmux-mem-cpu-load ] && ! $(builtin type -P "tmux-mem-cpu-load" &> /dev/null) ; then
|
||||
tmux run-shell "echo \"tmux-mem-cpu-load not found. Attempting to build.
|
||||
\""
|
||||
|
||||
pushd $CURRENT_DIR #Pushd to the directory where this plugin is located.
|
||||
|
||||
# Attempt to rebuild the plugin and log any errors in the tmux display window.
|
||||
if output=$(cmake . 2>&1); then
|
||||
tmux run-shell "echo \"'cmake $CURRENT_DIR' completed successfully.
|
||||
\""
|
||||
else
|
||||
tmux run-shell "echo \"'cmake $CURRENT_DIR' failed. Error logged below.
|
||||
$output
|
||||
\""
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if output=$(cmake --build . 2>&1); then
|
||||
tmux run-shell "echo \"tmux-mem-cpu-load built successfully.
|
||||
\""
|
||||
else
|
||||
tmux run-shell "echo \"tmux-mem-cpu-load failed to build. Error logged below.
|
||||
$output
|
||||
\""
|
||||
exit 1
|
||||
fi
|
||||
popd
|
||||
fi
|
||||
|
||||
25
tmux-mem-cpu-load.plugin.zsh
Normal file
25
tmux-mem-cpu-load.plugin.zsh
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
# vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
#
|
||||
# Copyright 2012 Matthew McCormick
|
||||
# Copyright 2015 Pawel 'l0ner' Soltys
|
||||
#
|
||||
# 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.
|
||||
|
||||
if [ ! -s /usr/local/bin/tmux-mem-cpu-load ];
|
||||
then
|
||||
pushd ${0:a:h} #Pushd to the directory where this plugin is located.
|
||||
cmake .
|
||||
make
|
||||
sudo make install
|
||||
popd
|
||||
fi
|
||||
53
windows/cpu.cc
Normal file
53
windows/cpu.cc
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
/* vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2015 Pawel 'l0ner' Soltys
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <unistd.h> // usleep
|
||||
|
||||
#include <thread>
|
||||
|
||||
#include "TCHAR.h"
|
||||
#include "pdh.h"
|
||||
|
||||
static PDH_HQUERY cpuQuery;
|
||||
static PDH_HCOUNTER cpuTotal;
|
||||
|
||||
#include "cpu.h"
|
||||
#include "luts.h"
|
||||
|
||||
uint32_t get_cpu_count()
|
||||
{
|
||||
return static_cast< uint32_t >( std::thread::hardware_concurrency() );
|
||||
}
|
||||
|
||||
float cpu_percentage( unsigned cpu_usage_delay )
|
||||
{
|
||||
PdhOpenQuery(NULL, 0, &cpuQuery);
|
||||
PdhAddCounter(cpuQuery, "\\Processor(_Total)\\% Processor Time", 0, &cpuTotal);
|
||||
PdhCollectQueryData(cpuQuery);
|
||||
|
||||
usleep( cpu_usage_delay );
|
||||
|
||||
PDH_FMT_COUNTERVALUE counterVal;
|
||||
|
||||
PdhCollectQueryData(cpuQuery);
|
||||
PdhGetFormattedCounterValue(cpuTotal, PDH_FMT_DOUBLE, NULL, &counterVal);
|
||||
return static_cast< float >( counterVal.doubleValue );
|
||||
}
|
||||
|
||||
44
windows/load.cc
Normal file
44
windows/load.cc
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
/* vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2013 Justin Crawford <Justasic@gmail.com>
|
||||
* Copyright 2015 Pawel 'l0ner' Soltys
|
||||
* Copyright 2016 Compilenix
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
// Based on: github.com/freebsd/freebsd/blob/master/usr.bin/top/machine.c
|
||||
// Based on: Apple.cpp for load_string/mem_string and apple's documentation
|
||||
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <cmath> // floorf()
|
||||
#include <sys/types.h>
|
||||
|
||||
#include "cpu.h"
|
||||
#include "load.h"
|
||||
#include "luts.h"
|
||||
|
||||
#include "powerline.h"
|
||||
|
||||
// Load Averages
|
||||
std::string load_string( bool use_colors,
|
||||
bool use_powerline_left, bool use_powerline_right,
|
||||
short num_averages )
|
||||
{
|
||||
// Not implemented
|
||||
std::ostringstream ss;
|
||||
ss << (char) 0;
|
||||
return ss.str();
|
||||
}
|
||||
40
windows/memory.cc
Normal file
40
windows/memory.cc
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
/* vim: tabstop=2 shiftwidth=2 expandtab textwidth=80 linebreak wrap
|
||||
*
|
||||
* Copyright 2012 Matthew McCormick
|
||||
* Copyright 2015 Pawel 'l0ner' Soltys
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <sstream>
|
||||
#include <fstream>
|
||||
|
||||
#include "windows.h"
|
||||
|
||||
#include "memory.h"
|
||||
#include "conversions.h"
|
||||
|
||||
void mem_status( MemoryStatus & status )
|
||||
{
|
||||
MEMORYSTATUSEX memory_status;
|
||||
memory_status.dwLength = sizeof(memory_status);
|
||||
|
||||
GlobalMemoryStatusEx(&memory_status);
|
||||
|
||||
// we want megabytes on output, but since the values already come as
|
||||
// kilobytes we need to divide them by 1024 only once, thus we use
|
||||
// KILOBYTES
|
||||
status.used_mem = convert_unit(static_cast< float >( memory_status.ullAvailPhys ), MEGABYTES, BYTES);
|
||||
status.total_mem = convert_unit(static_cast< float >( memory_status.ullTotalPhys ), MEGABYTES, BYTES);
|
||||
}
|
||||
|
||||
Loading…
Reference in a new issue