From cad99590a2f132be578a234490c5fa416aa6109a Mon Sep 17 00:00:00 2001 From: Jonathan Ringer Date: Thu, 27 Feb 2020 08:23:32 -0800 Subject: glances: move from python-module to application --- pkgs/applications/system/glances/default.nix | 70 ++++++++++++++++++++++ .../system/glances/skip-failing-tests.patch | 60 +++++++++++++++++++ 2 files changed, 130 insertions(+) create mode 100644 pkgs/applications/system/glances/default.nix create mode 100644 pkgs/applications/system/glances/skip-failing-tests.patch (limited to 'pkgs/applications/system') 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') -- cgit 1.4.1