summary refs log tree commit diff
path: root/pkgs/applications/system
diff options
context:
space:
mode:
authorJonathan Ringer <jonringer117@gmail.com>2020-02-27 08:23:32 -0800
committerJon <jonringer@users.noreply.github.com>2020-02-29 15:07:44 -0800
commitcad99590a2f132be578a234490c5fa416aa6109a (patch)
tree2a753dc6a07149addd13f0459ebb40d9ad1c9ae2 /pkgs/applications/system
parenta0a724938ed477af0b25f87d6c69baf038b66b27 (diff)
downloadnixpkgs-cad99590a2f132be578a234490c5fa416aa6109a.tar
nixpkgs-cad99590a2f132be578a234490c5fa416aa6109a.tar.gz
nixpkgs-cad99590a2f132be578a234490c5fa416aa6109a.tar.bz2
nixpkgs-cad99590a2f132be578a234490c5fa416aa6109a.tar.lz
nixpkgs-cad99590a2f132be578a234490c5fa416aa6109a.tar.xz
nixpkgs-cad99590a2f132be578a234490c5fa416aa6109a.tar.zst
nixpkgs-cad99590a2f132be578a234490c5fa416aa6109a.zip
glances: move from python-module to application
Diffstat (limited to 'pkgs/applications/system')
-rw-r--r--pkgs/applications/system/glances/default.nix70
-rw-r--r--pkgs/applications/system/glances/skip-failing-tests.patch60
2 files changed, 130 insertions, 0 deletions
diff --git a/pkgs/applications/system/glances/default.nix b/pkgs/applications/system/glances/default.nix
new file mode 100644
index 00000000000..946cc112586
--- /dev/null
+++ b/pkgs/applications/system/glances/default.nix
@@ -0,0 +1,70 @@
+{ stdenv, buildPythonApplication, fetchFromGitHub, fetchpatch, isPyPy, lib
+, future, psutil, setuptools
+# Optional dependencies:
+, bottle, batinfo, pysnmp
+, hddtemp
+, netifaces # IP module
+}:
+
+buildPythonApplication rec {
+  pname = "glances";
+  version = "3.1.3";
+  disabled = isPyPy;
+
+  src = fetchFromGitHub {
+    owner = "nicolargo";
+    repo = "glances";
+    rev = "v${version}";
+    sha256 = "15yz8sbw3k3n0729g2zcwsxc5iyhkyrhqza6fnipxxpsskwgqbwp";
+  };
+
+  # Some tests fail in the sandbox (they e.g. require access to /sys/class/power_supply):
+  patches = lib.optional (doCheck && stdenv.isLinux) ./skip-failing-tests.patch
+    ++ [
+      (fetchpatch {
+        # Correct unitest
+        url = "https://github.com/nicolargo/glances/commit/abf64ffde31113f5f46ef286703ff061fc57395f.patch";
+        sha256 = "00krahqq89jvbgrqx2359cndmvq5maffhpj163z10s1n7q80kxp1";
+      })
+
+      (fetchpatch {
+        # Fix IP plugin initialization issue
+        url = "https://github.com/nicolargo/glances/commit/48cb5ef8053d823302e7e53490fb22cec2fabb0f.patch";
+        sha256 = "1590qgcr8w3d9ddpgd9mk5j6q6aq29341vr8bi202yjwwiv2bia9";
+      })
+    ];
+
+  # On Darwin this package segfaults due to mismatch of pure and impure
+  # CoreFoundation. This issues was solved for binaries but for interpreted
+  # scripts a workaround below is still required.
+  # Relevant: https://github.com/NixOS/nixpkgs/issues/24693
+  makeWrapperArgs = lib.optionals stdenv.isDarwin [
+    "--set" "DYLD_FRAMEWORK_PATH" "/System/Library/Frameworks"
+  ];
+
+  doCheck = true;
+  preCheck = lib.optional stdenv.isDarwin ''
+    export DYLD_FRAMEWORK_PATH=/System/Library/Frameworks
+  '';
+
+  propagatedBuildInputs = [
+    batinfo
+    bottle
+    future
+    netifaces
+    psutil
+    pysnmp
+    setuptools
+  ] ++ lib.optional stdenv.isLinux hddtemp;
+
+  preConfigure = ''
+    sed -i 's/data_files\.append((conf_path/data_files.append(("etc\/glances"/' setup.py;
+  '';
+
+  meta = with lib; {
+    homepage = "https://nicolargo.github.io/glances/";
+    description = "Cross-platform curses-based monitoring tool";
+    license = licenses.lgpl3;
+    maintainers = with maintainers; [ jonringer primeos koral ];
+  };
+}
diff --git a/pkgs/applications/system/glances/skip-failing-tests.patch b/pkgs/applications/system/glances/skip-failing-tests.patch
new file mode 100644
index 00000000000..e3116af6a2c
--- /dev/null
+++ b/pkgs/applications/system/glances/skip-failing-tests.patch
@@ -0,0 +1,60 @@
+diff --git a/unitest.py b/unitest.py
+--- a/unitest.py
++++ b/unitest.py
+@@ -59,6 +59,7 @@ class TestGlances(unittest.TestCase):
+         """The function is called *every time* before test_*."""
+         print('\n' + '=' * 78)
+ 
++    @unittest.skip("Requires access to /etc/mtab")
+     def test_000_update(self):
+         """Update stats (mandatory step for all the stats).
+ 
+@@ -87,6 +88,7 @@ class TestGlances(unittest.TestCase):
+         for plugin in plugins_to_check:
+             self.assertTrue(plugin in plugins_list)
+ 
++    @unittest.skip("Fails on NixOS")
+     def test_002_system(self):
+         """Check SYSTEM plugin."""
+         stats_to_check = ['hostname', 'os_name']
+@@ -97,6 +99,7 @@ class TestGlances(unittest.TestCase):
+             self.assertTrue(stat in stats_grab, msg='Cannot find key: %s' % stat)
+         print('INFO: SYSTEM stats: %s' % stats_grab)
+ 
++    @unittest.skip("Fails on NixOS")
+     def test_003_cpu(self):
+         """Check CPU plugin."""
+         stats_to_check = ['system', 'user', 'idle']
+@@ -110,7 +113,7 @@ class TestGlances(unittest.TestCase):
+             self.assertLessEqual(stats_grab[stat], 100)
+         print('INFO: CPU stats: %s' % stats_grab)
+ 
+-    @unittest.skipIf(WINDOWS, "Load average not available on Windows")
++    @unittest.skip("Fails on NixOS")
+     def test_004_load(self):
+         """Check LOAD plugin."""
+         stats_to_check = ['cpucore', 'min1', 'min5', 'min15']
+@@ -123,6 +126,7 @@ class TestGlances(unittest.TestCase):
+             self.assertGreaterEqual(stats_grab[stat], 0)
+         print('INFO: LOAD stats: %s' % stats_grab)
+ 
++    @unittest.skip("Fails on NixOS")
+     def test_005_mem(self):
+         """Check MEM plugin."""
+         stats_to_check = ['available', 'used', 'free', 'total']
+@@ -135,6 +139,7 @@ class TestGlances(unittest.TestCase):
+             self.assertGreaterEqual(stats_grab[stat], 0)
+         print('INFO: MEM stats: %s' % stats_grab)
+ 
++    @unittest.skip("Fails on NixOS")
+     def test_006_swap(self):
+         """Check MEMSWAP plugin."""
+         stats_to_check = ['used', 'free', 'total']
+@@ -191,6 +196,7 @@ class TestGlances(unittest.TestCase):
+         self.assertTrue(type(stats_grab) is list, msg='Folders stats is not a list')
+         print('INFO: Folders stats: %s' % stats_grab)
+ 
++    @unittest.skip("Fails on NixOS (TODO)")
+     def test_012_ip(self):
+         """Check IP plugin."""
+         print('INFO: [TEST_012] Check IP stats')