Skip to content

Commit b1fc0ce

Browse files
committed
fix(users): "no one is logged in" on Ubuntu 24.04 LTS (closes #919)
1 parent 13368ed commit b1fc0ce

File tree

11 files changed

+236
-60
lines changed

11 files changed

+236
-60
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ Monitoring Plugins:
2727
* icinga-topflap-services: prevent stacktrace when required parameters are empty
2828
* openstack-swift-stat: problem with python-keystoneclient, optimize requirements* ([#900](https://github.com/Linuxfabrik/lib/issues/900))
2929
* statuspal: handle incident_type "performance"
30+
* users: "no one is logged in" on Ubuntu 24.04 LTS ([#919](https://github.com/Linuxfabrik/lib/issues/919))
3031
* valkey-status|redis-status: improve `--ignore-thp` ([#898](https://github.com/Linuxfabrik/lib/issues/898))
3132

3233

check-plugins/users/README.md

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ Hints:
2121
| Can be called without parameters | Yes |
2222
| Compiled for Windows | Yes |
2323
| Requirements | `w` on Linux, `query users` on Windows |
24-
| 3rd Party Python modules | `psutil` |
2524

2625

2726
## Help
@@ -49,10 +48,10 @@ options:
4948

5049
## Usage Examples
5150

52-
On Linux, one user is connected to the console:
51+
On Linux, if one user is connected to the console:
5352

5453
```bash
55-
./users --warning 1,20 --critical 1,20
54+
./users --warning=1,20 --critical=1,20
5655
```
5756

5857
Output:
@@ -64,7 +63,7 @@ USER TTY LOGIN@ IDLE JCPU PCPU WHAT
6463
markus.f :0 Mon06 ?xdm? 6:02m 0.03s /usr/libexec/gdm-x-session --run-script /usr/bin/gnome-session
6564
```
6665

67-
On Windows, one user is connected via RDP:
66+
On Windows, if one user is connected via RDP:
6867

6968
```text
7069
./users --warning 1,20,1 --critical None,50,5
@@ -89,7 +88,7 @@ administrator rdp-tcp#11 1 Active . 24.08.2022 17:42
8988
|----|----|----|
9089
| tty | Number | Number of TTY users on Linux, Number of Console users on Windows. |
9190
| pts | Number | Number of PTY users on Linux (for example ssh), Number of RDP users on Windows. |
92-
| disc | Number | Number of disconnect users (on Windows only). |
91+
| disc | Number | Number of disconnected users (on Windows only). |
9392

9493

9594
## Credits, License

check-plugins/users/unit-test/run

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
#!/usr/bin/env python3
2+
# -*- coding: utf-8; py-indent-offset: 4 -*-
3+
#
4+
# Author: Linuxfabrik GmbH, Zurich, Switzerland
5+
# Contact: info (at) linuxfabrik (dot) ch
6+
# https://www.linuxfabrik.ch/
7+
# License: The Unlicense, see LICENSE file.
8+
9+
# https://github.com/Linuxfabrik/monitoring-plugins/blob/main/CONTRIBUTING.md
10+
11+
import sys
12+
sys.path.append("..") # Adds higher directory to python modules path.
13+
14+
15+
16+
import unittest
17+
18+
from lib.globals import STATE_OK, STATE_UNKNOWN, STATE_WARN, STATE_CRIT
19+
import lib.base
20+
import lib.shell
21+
22+
23+
class TestCheck(unittest.TestCase):
24+
25+
check = '../users'
26+
27+
#self.assertEqual(retc, STATE_CRIT)
28+
#self.assertIn('Waiting for more data (1).', stdout)
29+
#self.assertRegex(stdout, r'1 error in Kernel Ring Buffer.')
30+
31+
def test_if_check_runs_EXAMPLE01_linux(self):
32+
stdout, stderr, retc = lib.base.coe(lib.shell.shell_exec(self.check + ' --test=stdout/EXAMPLE01-linux,,0'))
33+
self.assertIn('TTY: 1 [WARNING], PTS: 1', stdout)
34+
self.assertIn('USER TTY LOGIN@ IDLE JCPU PCPU WHAT', stdout)
35+
self.assertIn('linuxfab tty2 29Jul25 6days 1:01m 26.32s /opt/paloaltonetworks/globalprotect/PanGPA start', stdout)
36+
self.assertIn('linuxfab 29Jul25 19:04 0.00s 18.60s /usr/lib/systemd/systemd --user', stdout)
37+
self.assertEqual(stderr, '')
38+
self.assertEqual(retc, STATE_WARN)
39+
40+
def test_if_check_runs_EXAMPLE01_windows(self):
41+
stdout, stderr, retc = lib.base.coe(lib.shell.shell_exec(self.check + ' --test=stdout/EXAMPLE01-windows,,0'))
42+
self.assertIn('TTY: 0, PTS: 1', stdout)
43+
self.assertIn('USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME', stdout)
44+
self.assertIn('>linuxfabrik rdp-tcp#0 5 Active . 05.08.2025 10:58', stdout)
45+
self.assertEqual(stderr, '')
46+
self.assertEqual(retc, STATE_OK)
47+
48+
def test_if_check_runs_EXAMPLE02_linux(self):
49+
stdout, stderr, retc = lib.base.coe(lib.shell.shell_exec(self.check + ' --test=stdout/EXAMPLE02-linux,,0'))
50+
self.assertIn('TTY: 0, PTS: 2', stdout)
51+
self.assertIn('USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT', stdout)
52+
self.assertIn('vagrant 192.168.124.1 08:48 4:05 0.00s 0.01s sshd: vagrant [priv]', stdout)
53+
self.assertIn('vagrant 192.168.124.1 08:49 4:05 0.00s ? sshd: vagrant [priv]', stdout)
54+
self.assertEqual(stderr, '')
55+
self.assertEqual(retc, STATE_OK)
56+
57+
def test_if_check_runs_EXAMPLE03_linux(self):
58+
stdout, stderr, retc = lib.base.coe(lib.shell.shell_exec(self.check + ' --test=stdout/EXAMPLE03-linux,,0'))
59+
self.assertIn('TTY: 0, PTS: 1', stdout)
60+
self.assertIn('USER TTY LOGIN@ IDLE JCPU PCPU WHAT', stdout)
61+
self.assertIn('linuxfab pts/0 10:52 1.00s 0.03s 0.01s w', stdout)
62+
self.assertEqual(stderr, '')
63+
self.assertEqual(retc, STATE_OK)
64+
65+
def test_if_check_runs_EXAMPLE04_linux(self):
66+
stdout, stderr, retc = lib.base.coe(lib.shell.shell_exec(self.check + ' --test=stdout/EXAMPLE04-linux,,0'))
67+
self.assertIn('No one is logged in.', stdout)
68+
self.assertEqual(stderr, '')
69+
self.assertEqual(retc, STATE_OK)
70+
71+
def test_if_check_runs_EXAMPLE05_linux(self):
72+
stdout, stderr, retc = lib.base.coe(lib.shell.shell_exec(self.check + ' --test=stdout/EXAMPLE05-linux,,0 --warning=1,1,2'))
73+
self.assertIn('TTY: 0, PTS: 1 [WARNING]', stdout)
74+
self.assertIn('USER TTY FROM LOGIN@ IDLE WHAT', stdout)
75+
self.assertIn('vagrant pts/0 linuxfabrik 9:03AM - w', stdout)
76+
self.assertEqual(stderr, '')
77+
self.assertEqual(retc, STATE_WARN)
78+
79+
def test_if_check_runs_EXAMPLE06_linux(self):
80+
stdout, stderr, retc = lib.base.coe(lib.shell.shell_exec(self.check + ' --test=stdout/EXAMPLE06-linux,,0 --warning=1,1,2'))
81+
self.assertIn('TTY: 1 [WARNING], PTS: 1 [WARNING]', stdout)
82+
self.assertIn('USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT', stdout)
83+
self.assertIn('vagrant tty1 - 12:20 10.00s 0.04s 0.01s -bash', stdout)
84+
self.assertIn('vagrant 192.168.124.1 12:21 56.00s 0.00s ? sshd: vagrant [priv]', stdout)
85+
self.assertEqual(stderr, '')
86+
self.assertEqual(retc, STATE_WARN)
87+
88+
89+
if __name__ == '__main__':
90+
unittest.main()
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
10:51:36 up 6 days, 14:36, 2 users, load average: 0.73, 1.07, 1.31
2+
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
3+
linuxfab tty2 29Jul25 6days 1:01m 26.32s /opt/paloaltonetworks/globalprotect/PanGPA start
4+
linuxfab 29Jul25 19:04 0.00s 18.60s /usr/lib/systemd/systemd --user
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME
2+
>linuxfabrik rdp-tcp#0 5 Active . 05.08.2025 10:58
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
08:52:15 up 4 min, 2 users, load average: 0.01, 0.01, 0.00
2+
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
3+
vagrant 192.168.124.1 08:48 4:05 0.00s 0.01s sshd: vagrant [priv]
4+
vagrant 192.168.124.1 08:49 4:05 0.00s ? sshd: vagrant [priv]
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
10:53:00 up 1 day, 6:32, 1 user, load average: 0.18, 0.15, 0.10
2+
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
3+
linuxfab pts/0 10:52 1.00s 0.03s 0.01s w
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
08:59:01 up 1 min, 0 user, load average: 0.00, 0.00, 0.00
2+
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
9:03AM up 33 secs, 1 user, load averages: 0.16, 0.04, 0.01
2+
USER TTY FROM LOGIN@ IDLE WHAT
3+
vagrant pts/0 linuxfabrik 9:03AM - w
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
12:21:22 up 0 min, 2 users, load average: 0.04, 0.01, 0.00
2+
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
3+
vagrant tty1 - 12:20 10.00s 0.04s 0.01s -bash
4+
vagrant 192.168.124.1 12:21 56.00s 0.00s ? sshd: vagrant [priv]

0 commit comments

Comments
 (0)