LinuxMonitor 1.3.11__tar.gz → 1.4.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: LinuxMonitor
3
- Version: 1.3.11
3
+ Version: 1.4.1
4
4
  Summary: Get information and warning status of Linux server like service, port, ping, ssl certificate, disk/folder/cpu/ram/swap usage, ip connection, ... (Python and shell library, Linux ONLY)
5
5
  Home-page: https://github.com/QuentinCG/Linux-Monitor-Python-Library
6
6
  Author: Quentin Comte-Gaz
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: LinuxMonitor
3
- Version: 1.3.11
3
+ Version: 1.4.1
4
4
  Summary: Get information and warning status of Linux server like service, port, ping, ssl certificate, disk/folder/cpu/ram/swap usage, ip connection, ... (Python and shell library, Linux ONLY)
5
5
  Home-page: https://github.com/QuentinCG/Linux-Monitor-Python-Library
6
6
  Author: Quentin Comte-Gaz
@@ -180,7 +180,7 @@ def main() -> None:
180
180
  if args.list_processes:
181
181
  handled = True
182
182
  print("Listing active processes...")
183
- out_msg: str = monitoring.get_ordered_processes(get_non_consuming_processes=False)
183
+ out_msg: str = asyncio.run(monitoring.get_ordered_processes(get_non_consuming_processes=False))
184
184
  print(out_msg)
185
185
 
186
186
  if args.kill_process is not None:
@@ -33,7 +33,7 @@ __email__ = "quentin@comte-gaz.com"
33
33
  __license__ = "MIT License"
34
34
  __copyright__ = "Copyright Quentin Comte-Gaz (2024)"
35
35
  __python_version__ = "3.+"
36
- __version__ = "1.3.11 (2024/09/23)"
36
+ __version__ = "1.4.1 (2024/10/07)"
37
37
  __status__ = "Usable for any Linux project"
38
38
 
39
39
  import json
@@ -1672,7 +1672,7 @@ class LinuxMonitor:
1672
1672
 
1673
1673
  #region Processes
1674
1674
 
1675
- def get_ordered_processes(self, get_non_consuming_processes: bool = False) -> str:
1675
+ async def get_ordered_processes(self, get_non_consuming_processes: bool = False) -> str:
1676
1676
  """
1677
1677
  Get the ordered list of processes by memory and CPU usage.
1678
1678
 
@@ -1682,6 +1682,17 @@ class LinuxMonitor:
1682
1682
  """
1683
1683
  try:
1684
1684
  processes = []
1685
+
1686
+ # To get meaningful results, we need to ask cpu percent and wait a bit to get valid cpu_percent values on second iteration
1687
+ for dummy_process in psutil.process_iter(['pid', 'name', 'username', 'cpu_percent', 'memory_info', 'create_time', 'cmdline']):
1688
+ try:
1689
+ # First call to cpu_percent to initialize it
1690
+ dummy_process.cpu_percent(interval=None)
1691
+ except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
1692
+ continue
1693
+ await asyncio.sleep(delay=0.1)
1694
+
1695
+ # Then we can get the processes
1685
1696
  for process in psutil.process_iter(['pid', 'name', 'username', 'cpu_percent', 'memory_info', 'create_time', 'cmdline']):
1686
1697
  try:
1687
1698
  create_time = datetime.fromtimestamp(process.info['create_time']).strftime("%Y-%m-%d %H:%M:%S")
@@ -1696,7 +1707,7 @@ class LinuxMonitor:
1696
1707
  'pid': process.info['pid'],
1697
1708
  'name': process.info['name'],
1698
1709
  'username': process.info['username'],
1699
- 'cpu_percent': process.info['cpu_percent'],
1710
+ 'cpu_percent': process.cpu_percent(interval=None),
1700
1711
  'memory': process.info['memory_info'].rss, # Resident Set Size (RSS) memory
1701
1712
  'create_time': create_time,
1702
1713
  'cmdline': cmdline
@@ -6,7 +6,7 @@ with io.open(file='README.md', mode='r', encoding='utf-8') as readme_file:
6
6
 
7
7
  setup(
8
8
  name="LinuxMonitor",
9
- version="1.3.11",
9
+ version="1.4.1",
10
10
  description="Get information and warning status of Linux server like service, port, ping, ssl certificate, disk/folder/cpu/ram/swap usage, ip connection, ... (Python and shell library, Linux ONLY)",
11
11
  long_description=readme,
12
12
  long_description_content_type="text/markdown",
File without changes
File without changes
File without changes