projects/guix·blob ruby-team · refs

1546 lines · 59.6 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2013 Andreas Enge <[email protected]>
3;;; Copyright © 2015 Siniša Biđin <[email protected]>
4;;; Copyright © 2016 Efraim Flashner <[email protected]>
5;;; Copyright © 2016, 2021, 2021 Ludovic Courtès <[email protected]>
6;;; Copyright © 2016, 2021 Stefan Reichör <[email protected]>
7;;; Copyright © 2017, 2018, 2019, 2020 Ricardo Wurmus <[email protected]>
8;;; Copyright © 2018 Sou Bunnbu <[email protected]>
9;;; Copyright © 2018-2021 Tobias Geerinckx-Rice <[email protected]>
10;;; Copyright © 2018 Gábor Boskovits <[email protected]>
11;;; Copyright © 2018, 2019, 2020 Oleg Pykhalov <[email protected]>
12;;; Copyright © 2019 Pierre Neidhardt <[email protected]>
13;;; Copyright © 2019, 2023 Vasile Dumitrascu <[email protected]>
14;;; Copyright © 2020 Alex ter Weele <[email protected]>
15;;; Copyright © 2020 Lars-Dominik Braun <[email protected]>
16;;; Copyright © 2021, 2022 Marius Bakke <[email protected]>
17;;; Copyright © 2021, 2023 Raphaël Mélotte <[email protected]>
18;;; Copyright © 2022 Greg Hogan <[email protected]>
19;;; Copyright © 2022 Paul A. Patience <[email protected]>
20;;; Copyright © 2022 Hartmut Goebel <[email protected]>
21;;; Copyright © 2022 ( <[email protected]>
22;;; Copyright © 2022 Mathieu Laparie <[email protected]>
23;;; Copyright © 2024 Ada Stevenson <[email protected]>
24;;; Copyright © 2025 Nicolas Graves <[email protected]>
25;;; Copyright © 2025 Giacomo Leidi <[email protected]>
26;;; Copyright © 2025 Christian Birk Sørensen <[email protected]>
27;;; Copyright © 2026 Alex Korzh <[email protected]>
28;;; Copyright © 2026 Artyom V. Poptsov <[email protected]>
29;;;
30;;; This file is part of GNU Guix.
31;;;
32;;; GNU Guix is free software; you can redistribute it and/or modify it
33;;; under the terms of the GNU General Public License as published by
34;;; the Free Software Foundation; either version 3 of the License, or (at
35;;; your option) any later version.
36;;;
37;;; GNU Guix is distributed in the hope that it will be useful, but
38;;; WITHOUT ANY WARRANTY; without even the implied warranty of
39;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
40;;; GNU General Public License for more details.
41;;;
42;;; You should have received a copy of the GNU General Public License
43;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
44
45(define-module (gnu packages monitoring)
46 #:use-module (guix gexp)
47 #:use-module (guix packages)
48 #:use-module (guix download)
49 #:use-module (guix git-download)
50 #:use-module ((guix licenses) #:prefix license:)
51 #:use-module (guix build-system cargo)
52 #:use-module (guix build-system cmake)
53 #:use-module (guix build-system pyproject)
54 #:use-module (guix build-system gnu)
55 #:use-module (guix build-system go)
56 #:use-module (guix utils)
57 #:use-module (gnu packages)
58 #:use-module (gnu packages admin)
59 #:use-module (gnu packages autotools)
60 #:use-module (gnu packages base)
61 #:use-module (gnu packages bison)
62 #:use-module (gnu packages curl)
63 #:use-module (gnu packages check)
64 #:use-module (gnu packages compression)
65 #:use-module (gnu packages crypto)
66 #:use-module (gnu packages databases)
67 #:use-module (gnu packages django)
68 #:use-module (gnu packages compiler-tools)
69 #:use-module (gnu packages freedesktop) ; libatasmart
70 #:use-module (gnu packages fontutils)
71 #:use-module (gnu packages gd)
72 #:use-module (gnu packages gettext)
73 #:use-module (gnu packages gnome) ;libnotify
74 #:use-module (gnu packages golang)
75 #:use-module (gnu packages golang-build)
76 #:use-module (gnu packages golang-check)
77 #:use-module (gnu packages golang-web)
78 #:use-module (gnu packages golang-xyz)
79 #:use-module (gnu packages gtk)
80 #:use-module (gnu packages image)
81 #:use-module (gnu packages lua)
82 #:use-module (gnu packages mail)
83 #:use-module (gnu packages ncurses)
84 #:use-module (gnu packages networking)
85 #:use-module (gnu packages libevent)
86 #:use-module (gnu packages linux) ; eudev, lm-sensors
87 #:use-module (gnu packages pcre)
88 #:use-module (gnu packages perl)
89 #:use-module (gnu packages pkg-config)
90 #:use-module (gnu packages prometheus)
91 #:use-module (gnu packages protobuf)
92 #:use-module (gnu packages pulseaudio)
93 #:use-module (gnu packages python)
94 #:use-module (gnu packages python-build)
95 #:use-module (gnu packages python-science)
96 #:use-module (gnu packages python-web)
97 #:use-module (gnu packages python-xyz)
98 #:use-module (gnu packages qt)
99 #:use-module (gnu packages rrdtool)
100 #:use-module (gnu packages sphinx)
101 #:use-module (gnu packages sqlite)
102 #:use-module (gnu packages time)
103 #:use-module (gnu packages tls)
104 #:use-module (gnu packages web)
105 #:use-module (gnu packages web)
106 #:use-module (gnu packages xml)
107 #:use-module (gnu packages xorg))
108
109(define aw-source
110 (let ((name "activitywatch")
111 (version "0.13.2"))
112 (origin
113 (method git-fetch)
114 (uri (git-reference
115 (url "https://github.com/ActivityWatch/activitywatch")
116 (commit (string-append "v" version))
117 (recursive? #t)))
118 (file-name (git-file-name name version))
119 (sha256
120 (base32 "0yaa7g35rz9dmgxvahvkfhjpkvmi50rd6bjd9ckxvk7mfs1q0xb7"))
121 (modules '((guix build utils)))
122 (snippet
123 #~(begin
124 ;; Relax platformdirs requirement.
125 (for-each delete-file (find-files "." "poetry\\.lock"))
126 (substitute* "aw-core/pyproject.toml"
127 (("^platformdirs = .*")
128 "platformdirs = \"*\"\n")))))))
129
130(define-public aw-core
131 (package
132 (name "aw-core")
133 (version "0.5.17")
134 (source aw-source)
135 (build-system pyproject-build-system)
136 (arguments
137 (list
138 #:modules
139 '((guix build pyproject-build-system)
140 (guix build utils)
141 (ice-9 ftw)
142 (srfi srfi-1)
143 (srfi srfi-26))
144 #:phases
145 #~(modify-phases %standard-phases
146 (add-after 'unpack 'chdir
147 (lambda* (#:key name #:allow-other-keys)
148 ;; All subprojects are in directories that match their name
149 ;; Here name still contains the version suffixed.
150 (and=> (find (cute string-prefix? <> name) (scandir "."))
151 chdir)))
152 (add-before 'check 'pre-check
153 (lambda _
154 (setenv "HOME" (getcwd)))))))
155 (native-inputs (list python-poetry-core python-pytest))
156 (propagated-inputs
157 (list python-click
158 python-deprecation
159 python-iso8601
160 python-jsonschema
161 python-peewee
162 python-platformdirs
163 python-rfc3339-validator
164 python-strict-rfc3339
165 python-timeslot
166 python-tomlkit))
167 (home-page "https://activitywatch.net/")
168 (synopsis "Core library for ActivityWatch")
169 (description
170 "This package provides the core library for @code{ActivityWatch}.")
171 (license license:mpl2.0)))
172
173(define-public aw-client
174 (package/inherit aw-core
175 (name "aw-client")
176 (version "0.5.15")
177 (arguments
178 (substitute-keyword-arguments arguments
179 ((#:test-flags test-flags #~(list))
180 #~(list
181 ;; Most likely requires the server to run.
182 "--deselect=tests/test_client.py::test_full"
183 ;; Tries to read from stdin.
184 "--deselect=tests/test_failqueue.py::test_failqueue"))))
185 (propagated-inputs
186 (list aw-core
187 python-click
188 python-persist-queue
189 python-requests
190 python-tabulate
191 python-typing-extensions))
192 (synopsis "Client library for ActivityWatch")
193 (description
194 "This package provides the client library for @code{ActivityWatch}.")))
195
196(define-public aw-notify
197 (package/inherit aw-core
198 (name "aw-notify")
199 (version "0.0.0") ;unreleased.
200 (arguments
201 (substitute-keyword-arguments arguments
202 ((#:tests? tests? #t)
203 #f))) ;No tests.
204 (synopsis "Notify library for ActivityWatch")
205 (description
206 "This package provides the notify library for @code{ActivityWatch}.")))
207
208(define-public aw-qt
209 (package/inherit aw-core
210 (name "aw-qt")
211 (version "0.1.0")
212 (arguments
213 (substitute-keyword-arguments arguments
214 ((#:phases phases #~%standard-phases)
215 #~(modify-phases #$phases
216 ;; (delete 'sanity-check)
217 (add-before 'check 'start-xserver
218 (lambda* (#:key inputs #:allow-other-keys)
219 (let* ((Xvfb (search-input-file inputs "/bin/Xvfb"))
220 (display ":1")
221 (command (string-join (list Xvfb display "&") " ")))
222 (setenv "DISPLAY" display)
223 (zero? (system command)))))))
224 ((#:test-backend _ #f)
225 #~'custom)
226 ((#:test-flags _ #~(list))
227 #~(list "tests/integration_tests.py"))))
228 (native-inputs
229 (list python-poetry-core xorg-server-for-tests))
230 (propagated-inputs
231 (list aw-core python-click python-pyqt-6))
232 (synopsis "Trayicon for ActivityWatch")
233 (description
234 "This package provides a tray icon for @code{ActivityWatch}.")))
235
236(define-public aw-server-rust
237 (let ((commit "d40d712cff2c1d5621b86e401e32076d2beef737")
238 (revision "1"))
239 (package
240 (name "aw-server-rust")
241 (version "0.13.1")
242 (source
243 (origin
244 (method git-fetch)
245 (uri (git-reference
246 (url "https://github.com/ActivityWatch/aw-server-rust")
247 (commit commit)))
248 (file-name (git-file-name name version))
249 (sha256
250 (base32 "1v4693xv99nq0kvclihgxiydnfxpyx748n1siyayw2ifkw9sw64m"))))
251 (build-system cargo-build-system)
252 (arguments
253 (list
254 #:install-source? #f
255 #:cargo-test-flags
256 '(list "--release" "--"
257 ;; Permission errors
258 "--skip=test::test_full"
259 "--skip=datastore_tests::test_datastore_reload"
260 "--skip=dirs::test_get_dirs")
261 #:phases
262 #~(modify-phases %standard-phases
263 (add-after 'unpack 'disable-vendored-features
264 (lambda _
265 (substitute* (find-files "." "Cargo\\.toml")
266 ((", features = \\[\"vendored\"\\]") ""))))
267 (replace 'install
268 (lambda _
269 (let ((bin (string-append #$output "/bin")))
270 (install-file "target/release/aw-server" bin)
271 (install-file "target/release/aw-sync" bin)))))))
272 (native-inputs (list pkg-config))
273 (inputs (cons* openssl sqlite (cargo-inputs 'aw-server-rust)))
274 (home-page "https://activitywatch.net/")
275 (synopsis "Store and retrieve quantified self data")
276 (description
277 "This package provides the ActivityWatch server, for secure storage and
278retrieval of all your quantified self data.")
279 (license license:mpl2.0))))
280
281(define-public aw-watcher-afk
282 (package/inherit aw-core
283 (name "aw-watcher-afk")
284 (version "0.2.0")
285 (arguments
286 (substitute-keyword-arguments arguments
287 ((#:tests? tests? #t)
288 #f) ;Most likely requires the server to run.
289 ((#:test-backend _ #f)
290 #~'custom)
291 ((#:test-flags _ #~(list))
292 #~(list "tests/test_continuous_events.py"))))
293 (propagated-inputs
294 (list aw-client python-pynput python-xlib))
295 (synopsis "AFK watcher for ActivityWatch")
296 (description
297 "This package provides a @acronym{AFK, away from keyboard} watcher for
298@code{ActivityWatch}.")))
299
300(define-public aw-watcher-input
301 (package/inherit aw-core
302 (name "aw-watcher-input")
303 (version "0.1.0")
304 (arguments
305 (substitute-keyword-arguments arguments
306 ((#:tests? tests? #t)
307 #f))) ;No tests.
308 (propagated-inputs
309 (list aw-client aw-watcher-afk))
310 (synopsis "Input watcher for ActivityWatch")
311 (description
312 "This package provide an input watcher for @code{ActivityWatch}.")))
313
314(define-public aw-watcher-window
315 (package/inherit aw-core
316 (name "aw-watcher-window")
317 (version "0.2.0")
318 (arguments
319 (substitute-keyword-arguments arguments
320 ((#:tests? tests? #t)
321 #f))) ;No tests.
322 (propagated-inputs
323 (list aw-client python-xlib))
324 (synopsis "X11 Window watcher for ActivityWatch")
325 (description
326 "This package provides a X11 window watcher for @code{ActivityWatch}.")))
327
328(define-public aw-watcher-window-wayland
329 (let ((commit "aea9aca029bd33d373bf53946a16dc05ef81e0b3")
330 (revision "0"))
331 (package
332 (name "aw-watcher-window-wayland")
333 (version (git-version "0.1.0" revision commit))
334 (source
335 (origin
336 (method git-fetch)
337 (uri
338 (git-reference
339 (url "https://github.com/ActivityWatch/aw-watcher-window-wayland")
340 (commit commit)))
341 (file-name (git-file-name name version))
342 (sha256
343 (base32 "0viir38q1vr5q2w3kfrz42m1lx9fxvxwq7l939m9sycqzmawi3fy"))))
344 (build-system cargo-build-system)
345 (arguments
346 (list
347 #:install-source? #f
348 #:phases
349 #~(modify-phases %standard-phases
350 (add-after 'unpack 'patch-aw-requirements
351 (lambda _
352 (substitute* "Cargo.toml"
353 (("^aw-client-rust = .*")
354 "aw-client-rust = \"*\"\n")))))))
355 (native-inputs (list pkg-config))
356 (inputs (cons* openssl (cargo-inputs 'aw-watcher-window-wayland)))
357 (home-page "https://activitywatch.net/")
358 (synopsis "Wayland window watcher for ActivityWatch")
359 (description
360 "This package provides a wayland window watcher for
361@code{ActivityWatch}.")
362 (license license:mpl2.0))))
363
364(define-public conky
365 (package
366 (name "conky")
367 (home-page "https://github.com/brndnmtthws/conky")
368 (version "1.19.8")
369 (source
370 (origin
371 (method git-fetch)
372 (uri (git-reference
373 (url home-page)
374 (commit (string-append "v" version))))
375 (file-name (git-file-name name version))
376 (sha256
377 (base32 "1g712cw2nzd2qvgdmyvazyda0znyqzg6yckg98ss203fggwp93vj"))))
378 (build-system cmake-build-system)
379 (arguments
380 (list
381 #:configure-flags
382 #~(list "-DRELEASE=true"
383 "-DBUILD_PULSEAUDIO=ON"
384 "-DBUILD_WLAN=ON"
385 "-DBUILD_TESTS=ON")
386 #:phases
387 #~(modify-phases %standard-phases
388 (add-after 'unpack 'add-freetype-to-search-path
389 (lambda* (#:key inputs #:allow-other-keys)
390 (substitute* "cmake/ConkyPlatformChecks.cmake"
391 (("set\\(INCLUDE_SEARCH_PATH")
392 (string-append
393 "set(INCLUDE_SEARCH_PATH "
394 (assoc-ref inputs "freetype") "/include/freetype2 ")))))
395 (replace 'install
396 (lambda _
397 (install-file "src/conky" (string-append #$output "/bin")))))))
398 (inputs
399 (list freetype
400 imlib2
401 libx11
402 libxdamage
403 libxext
404 libxft
405 libxi
406 libxinerama
407 pulseaudio
408 lua
409 ncurses
410 curl
411 wireless-tools))
412 (native-inputs
413 (list pkg-config))
414 (synopsis "Lightweight system monitor for X")
415 (description
416 "Conky is a lightweight system monitor for X that displays operating
417system statistics (CPU, disk, and memory usage, etc.) and more on the
418desktop.")
419 (license license:gpl3+)))
420
421(define-public gkrellm
422 (package
423 (name "gkrellm")
424 (version "2.5.1")
425 (source
426 (origin
427 (method url-fetch)
428 (uri (string-append "https://gkrellm.srcbox.net/releases/gkrellm-"
429 version ".tar.bz2"))
430 (sha256
431 (base32 "0qvy2xmwmfy5f0g09yn9lr262shnx82ba04r5il2wj4qscg3r7h8"))))
432 (build-system gnu-build-system)
433 (inputs (list gtk+-2 libsm))
434 (native-inputs (list gettext-minimal pkg-config))
435 (arguments
436 (list
437 #:tests? #f ;there is no check target
438 #:phases
439 #~(modify-phases %standard-phases
440 (delete 'configure)) ;no configure script
441 #:make-flags
442 #~(list (string-append "INSTALLROOT=" #$output)
443 (string-append "CC=" #$(cc-for-target)))))
444 (home-page "https://gkrellm.srcbox.net/")
445 (synopsis "System monitors")
446 (description
447 "GKrellM is a single process stack of system monitors which supports
448applying themes to match its appearance to your window manager, Gtk, or any
449other theme.")
450 (license license:gpl3+)))
451
452(define-public glances
453 (package
454 (name "glances")
455 (version "4.3.0")
456 (source
457 (origin
458 (method git-fetch)
459 (uri (git-reference
460 (url "https://github.com/nicolargo/glances")
461 (commit (string-append "v" version))))
462 (file-name (git-file-name name version))
463 (sha256
464 (base32 "1v2rsffy99ilarl5vnsz4zwb0wp3s3jnsbcbiqx53qxv88whfz71"))))
465 (build-system pyproject-build-system)
466 (arguments
467 (list
468 #:test-backend #~'custom
469 #:test-flags #~(list "unittest-core.py")
470 #:phases
471 #~(modify-phases %standard-phases
472 (add-after 'unpack 'disable-update-checks
473 (lambda _
474 ;; Glances phones PyPI for weekly update checks by default.
475 ;; Disable these. The user can re-enable them if desired.
476 (substitute* "glances/outdated.py"
477 (("^(.*)self\\.load_config\\(config\\)\n" line indentation)
478 (string-append indentation
479 "self.args.disable_check_update = True\n" line))))))))
480 (native-inputs
481 (list python-pytest
482 python-setuptools))
483 (propagated-inputs
484 (list python-defusedxml
485 python-jinja2
486 python-orjson
487 python-packaging
488 python-psutil
489 python-shtab))
490 (home-page "https://github.com/nicolargo/glances")
491 (synopsis "Cross-platform curses-based monitoring tool")
492 (description
493 "Glances is a curses-based monitoring tool for a wide variety of
494platforms. Glances uses the PsUtil library to get information from your
495system. It monitors CPU, load, memory, network bandwidth, disk I/O, disk use,
496and more.")
497 (license license:lgpl3+)))
498
499(define-public monit
500 (package
501 (name "monit")
502 (version "6.0.0")
503 (supported-systems
504 (filter (lambda (system)
505 (string-suffix? "-linux" system)) ;because of PAM
506 %supported-systems))
507 (source
508 (origin
509 (method git-fetch)
510 (uri (git-reference
511 (url "https://bitbucket.org/tildeslash/monit.git")
512 (commit (string-append "release-"
513 (string-join (string-split version #\.)
514 "-")))))
515 (file-name (git-file-name name version))
516 (sha256
517 (base32 "1lpai4lf4w6cz3g10ysspmnp7v3f9x8ilfwig4cxdgc514ybd79f"))))
518 (build-system gnu-build-system)
519 (arguments
520 (list
521 #:configure-flags
522 #~(list (string-append "--with-ssl-dir="
523 #$(this-package-input "openssl")))
524 #:phases
525 #~(modify-phases %standard-phases
526 (add-after 'unpack 'patch-tests
527 (lambda* (#:key inputs #:allow-other-keys)
528 (substitute* "libmonit/test/CommandTest.c"
529 (("/bin/sh")
530 (search-input-file inputs "bin/sh"))
531 (("/bin/ls")
532 (search-input-file inputs "bin/ls")))))
533 (add-before 'bootstrap 'patch-libmonit-bootstrap
534 (lambda _
535 (patch-shebang "libmonit/bootstrap")))
536 (replace 'check
537 (lambda* (#:key tests? #:allow-other-keys)
538 (when tests?
539 ;; TimeTest assumes local time is one hour ahead of UTC.
540 (setenv "TZ" "CET-1")
541 (with-directory-excursion "libmonit/test"
542 (invoke "./test.sh"))))))))
543 (native-inputs (list autoconf automake bison flex libtool perl))
544 (inputs (list libxcrypt linux-pam openssl zlib))
545 (home-page "https://mmonit.com/monit/")
546 (synopsis "Proactive monitoring")
547 (description
548 "Monit is a utility for managing and monitoring, processes, programs,
549files, directories and filesystems on a UNIX system.")
550 (license license:agpl3)))
551
552(define-public nagios
553 (package
554 (name "nagios")
555 (version "4.4.6")
556 ;; XXX: Nagios 4.2.x and later bundle a copy of AngularJS.
557 (source (origin
558 (method url-fetch)
559 (uri (string-append
560 "mirror://sourceforge/nagios/nagios-4.x/nagios-"
561 version "/nagios-" version ".tar.gz"))
562 (sha256
563 (base32
564 "1x5hb97zbvkm73q53ydp1gwj8nnznm72q9c4rm6ny7phr995l3db"))
565 (modules '((guix build utils)))
566 (snippet
567 ;; Ensure reproducibility.
568 '(begin
569 (substitute* (find-files "cgi" "\\.c$")
570 (("__DATE__") "\"1970-01-01\"")
571 (("__TIME__") "\"00:00:00\""))
572 #t))))
573 (build-system gnu-build-system)
574 (native-inputs
575 (list unzip))
576 (inputs
577 `(("zlib" ,zlib)
578 ("libpng-apng" ,libpng)
579 ("gd" ,gd)
580 ("perl" ,perl)
581 ("mailutils" ,mailutils)))
582 (arguments
583 '(#:configure-flags (list "--sysconfdir=/etc"
584
585 ;; 'include/locations.h.in' defines file
586 ;; locations, and many things go directly under
587 ;; LOCALSTATEDIR, hence the extra '/nagios'.
588 "--localstatedir=/var/nagios"
589
590 (string-append
591 "--with-mail="
592 (assoc-ref %build-inputs "mailutils")
593 "/bin/mail"))
594 #:make-flags '("all")
595 #:phases (modify-phases %standard-phases
596 (add-before 'build 'do-not-chown-to-nagios
597 (lambda _
598 ;; Makefiles do 'install -o nagios -g nagios', which
599 ;; doesn't work for us.
600 (substitute* (find-files "." "^Makefile$")
601 (("-o nagios -g nagios")
602 ""))
603 #t))
604 (add-before 'build 'do-not-create-sysconfdir
605 (lambda _
606 ;; Don't try to create /var upon 'make install'.
607 (substitute* "Makefile"
608 (("\\$\\(INSTALL\\).*\\$\\(LOGDIR\\).*$" all)
609 (string-append "# " all))
610 (("\\$\\(INSTALL\\).*\\$\\(CHECKRESULTDIR\\).*$" all)
611 (string-append "# " all))
612 (("chmod g\\+s.*" all)
613 (string-append "# " all)))
614 #t))
615 (add-before 'build 'set-html/php-directory
616 (lambda _
617 ;; Install HTML and PHP files under 'share/nagios/html'
618 ;; instead of just 'share/'.
619 (substitute* '("html/Makefile" "Makefile")
620 (("HTMLDIR=.*$")
621 "HTMLDIR = $(datarootdir)/nagios/html\n"))
622 #t)))
623 #:tests? #f)) ;no 'check' target or similar
624 (home-page "https://www.nagios.org/")
625 (synopsis "Host, service, and network monitoring program")
626 (description
627 "Nagios is a host, service, and network monitoring program written in C.
628CGI programs are included to allow you to view the current status, history,
629etc. via a Web interface. Features include:
630
631@itemize
632@item Monitoring of network services (via SMTP, POP3, HTTP, PING, etc).
633@item Monitoring of host resources (processor load, disk usage, etc.).
634@item A plugin interface to allow for user-developed service monitoring
635 methods.
636@item Ability to define network host hierarchy using \"parent\" hosts,
637 allowing detection of and distinction between hosts that are down
638 and those that are unreachable.
639@item Notifications when problems occur and get resolved (via email,
640 pager, or user-defined method).
641@item Ability to define event handlers for proactive problem resolution.
642@item Automatic log file rotation/archiving.
643@item Optional web interface for viewing current network status,
644 notification and problem history, log file, etc.
645@end itemize\n")
646 (license license:gpl2)))
647
648(define-public zabbix-agentd
649 ;; Zabbix distributes source from 2 repositories:
650 ;; - Stable: <https://cdn.zabbix.com/zabbix/sources/stable/>.
651 ;; - Old Stable: <https://cdn.zabbix.com/zabbix/sources/oldstable/>.
652 ;;
653 ;; Official Git repository is <https://git.zabbix.com/scm/zbx/zabbix.git>.
654 (package
655 (name "zabbix-agentd")
656 (version "7.2.15")
657 (source
658 (origin
659 (method url-fetch)
660 (uri (string-append
661 "https://cdn.zabbix.com/zabbix/sources/oldstable/"
662 (version-major+minor version) "/zabbix-" version ".tar.gz"))
663 (sha256
664 (base32 "0p78f02lslpfsqrr38rs30dq6fylyzph2q3fbwc6l9f6p5ik00dp"))
665 (modules '((guix build utils)))
666 (snippet
667 '(substitute* '("src/zabbix_proxy/proxy.c"
668 "src/zabbix_server/server.c")
669 ;; 'fping' must be setuid, so look for it in the usual location.
670 (("/usr/sbin/fping6?")
671 "/run/privileged/bin/fping")))))
672 (build-system gnu-build-system)
673 (arguments
674 (list #:configure-flags
675 #~(list "--enable-agent"
676 "--enable-ipv6"
677 "--with-libpcre2"
678 "--with-gnutls"
679 (string-append "--with-gnutls="
680 (assoc-ref %build-inputs "gnutls")))))
681 (native-inputs
682 (list pkg-config))
683 (inputs
684 (list gnutls pcre2))
685 (home-page "https://www.zabbix.com/")
686 (synopsis "Distributed monitoring solution (client-side agent)")
687 (description "This package provides a distributed monitoring
688solution (client-side agent)")
689 (license license:agpl3)
690 (properties
691 '((release-monitoring-url . "https://www.zabbix.com/download_sources")
692 (upstream-name . "zabbix")))))
693
694(define-public zabbix-agent2
695 (package/inherit zabbix-agentd
696 (name "zabbix-agent2")
697 (source
698 (origin
699 (inherit (package-source zabbix-agentd))
700 (patches (search-patches "zabbix-agent2-test-timezone-fix.patch"))))
701 (arguments
702 (list #:configure-flags
703 #~(list "--disable-agent"
704 "--enable-agent2"
705 "--enable-ipv6"
706 "--with-libpcre2"
707 ;; agent2 only supports OpenSSL.
708 (string-append "--with-openssl="
709 (dirname (dirname
710 (search-input-file
711 %build-inputs "lib/libssl.so")))))
712 #:make-flags
713 #~'("BUILD_TIME=00:00:01" "BUILD_DATE=Jan 1 1970")
714 #:phases
715 #~(modify-phases %standard-phases
716 (add-before 'build 'set-HOME
717 (lambda _
718 (setenv "HOME" "/tmp"))))))
719 (native-inputs
720 (list go pkg-config))
721 (inputs
722 (list openssl pcre2 zlib))))
723
724(define-public zabbix-server
725 (package
726 (inherit zabbix-agentd)
727 (name "zabbix-server")
728 (outputs '("out" "front-end" "schema"))
729 (arguments
730 (substitute-keyword-arguments arguments
731 ((#:phases phases '%standard-phases)
732 #~(modify-phases #$phases
733 (add-after 'install 'install-front-end
734 (lambda* (#:key outputs #:allow-other-keys)
735 (let* ((php (string-append (assoc-ref outputs "front-end")
736 "/share/zabbix/php"))
737 (front-end-conf (string-append php "/conf"))
738 (etc (string-append php "/etc")))
739 (mkdir-p php)
740 (copy-recursively "ui" php)
741 ;; Make front-end read config from ‘/etc/zabbix’ directory.
742 (rename-file front-end-conf
743 (string-append front-end-conf "-example"))
744 (symlink "/etc/zabbix" front-end-conf))))
745 (add-after 'install 'install-schema
746 (lambda* (#:key outputs #:allow-other-keys)
747 (let ((database-directory
748 (string-append (assoc-ref outputs "schema")
749 "/database")))
750 (for-each delete-file
751 (find-files "database" "Makefile\\.in|\\.am$"))
752 (mkdir-p database-directory)
753 (copy-recursively "database" database-directory))))))
754 ((#:configure-flags flags ''())
755 #~(append (list "--enable-server"
756 "--with-postgresql"
757 (string-append "--with-libevent="
758 (assoc-ref %build-inputs "libevent"))
759 "--with-net-snmp"
760 "--with-libcurl"
761 (string-append "--with-zlib="
762 (assoc-ref %build-inputs "zlib")))
763 (delete "--enable-agent" #$flags)))))
764 (inputs
765 (modify-inputs inputs
766 (prepend curl
767 libevent
768 net-snmp
769 postgresql
770 zlib)))
771 (synopsis "Distributed monitoring solution (server-side)")
772 (description "This package provides a distributed monitoring
773solution (server-side)")))
774
775(define-public zabbix-cli
776 (package
777 (name "zabbix-cli")
778 (version "2.3.1")
779 (source (origin
780 (method git-fetch)
781 (uri (git-reference
782 (url "https://github.com/unioslo/zabbix-cli")
783 (commit version)))
784 (file-name (git-file-name name version))
785 (sha256
786 (base32
787 "1al3gwbnh0wbal5gq2apq27kh61q8dz355k4w8kx073b4y4nz1wb"))))
788 (build-system pyproject-build-system)
789 (arguments
790 (list #:phases
791 #~(modify-phases %standard-phases
792 (add-after 'unpack 'use-absolute-ncurses
793 (lambda* (#:key inputs #:allow-other-keys)
794 (let ((clear (search-input-file inputs "bin/clear")))
795 (substitute* "bin/zabbix-cli"
796 (("'clear'")
797 (string-append "'" clear "'"))))))
798 (add-after 'unpack 'patch-setup.py
799 (lambda _
800 ;; Install data_files to $out/share instead of /usr/share.
801 (substitute* "setup.py"
802 (("/usr/") ""))))
803 (add-after 'build 'build-docs
804 (lambda _
805 (invoke "make" "-C" "docs" "manual")
806 (invoke "make" "-C" "docs" "singlehtml")))
807 (add-after 'install 'install-docs
808 (lambda _
809 (install-file "docs/_build/man/zabbix-cli.1"
810 (string-append #$output "/share/man/man1"))
811 (copy-recursively "docs/_build/singlehtml"
812 (string-append #$output "/share/doc/"
813 #$name "/html")))))))
814 (native-inputs
815 (list python-pytest
816 python-setuptools
817 python-sphinx
818 python-wheel))
819 (inputs
820 (list ncurses python-requests))
821 (home-page "https://github.com/unioslo/zabbix-cli")
822 (synopsis "Command-line interface to Zabbix")
823 (description
824 "@command{zabbix-cli} is a command-line client for the Zabbix
825monitoring system. It can configure and display various aspects of Zabbix
826through a text-based interface.")
827 (license license:gpl3+)))
828
829(define-public darkstat
830 (package
831 (name "darkstat")
832 (version "3.0.719")
833 (source (origin
834 (method url-fetch)
835 (uri (string-append "https://unix4lyfe.org/darkstat/darkstat-"
836 version ".tar.bz2"))
837 (sha256
838 (base32
839 "1mzddlim6dhd7jhr4smh0n2fa511nvyjhlx76b03vx7phnar1bxf"))))
840 (build-system gnu-build-system)
841 (arguments '(#:tests? #f)) ; no tests
842 (inputs
843 (list libpcap zlib))
844 (home-page "https://unix4lyfe.org/darkstat/")
845 (synopsis "Network statistics gatherer")
846 (description
847 "@command{darkstat} is a packet sniffer that runs as a background process,
848gathers all sorts of statistics about network usage, and serves them over
849HTTP. Features:
850
851@itemize
852@item Traffic graphs, reports per host, shows ports for each host.
853@item Embedded web-server with deflate compression.
854@item Asynchronous reverse DNS resolution using a child process.
855@item Small. Portable. Single-threaded. Efficient.
856@item Supports IPv6.
857@end itemize")
858 (license license:gpl2)))
859
860(define-public dgop
861 (package
862 (name "dgop")
863 (version "0.1.11")
864 (source
865 (origin
866 (method git-fetch)
867 (uri (git-reference
868 (url "https://github.com/AvengeMedia/dgop")
869 (commit (string-append "v" version))))
870 (sha256
871 (base32 "1iy9ndvrp7l1hr5ya2xf80j8ywcg8098z8wj2r47wdsqpagx2722"))
872 (file-name (git-file-name name version))))
873 (build-system go-build-system)
874 (arguments
875 (list
876 #:install-source? #f
877 #:import-path "github.com/AvengeMedia/dgop/cmd/cli"
878 #:unpack-path "github.com/AvengeMedia/dgop"
879 #:test-subdirs
880 #~(list "../../...") ;test the whole library
881 #:phases
882 #~(modify-phases %standard-phases
883 (add-after 'install 'rename-cli
884 (lambda* (#:key output #:allow-other-keys)
885 (let* ((bin (string-append #$output "/bin")))
886 (rename-file (string-append bin "/cli")
887 (string-append bin "/dgop"))))))))
888 (native-inputs
889 (list go-github-com-caarlos0-env
890 go-github-com-charmbracelet-bubbles
891 go-github-com-charmbracelet-lipgloss
892 go-github-com-charmbracelet-log
893 go-github-com-danielgtaylor-huma-v2
894 go-github-com-fsnotify-fsnotify
895 go-github-com-go-chi-chi-v5
896 go-github-com-gorilla-schema
897 go-github-com-shirou-gopsutil-v4
898 go-github-com-spf13-cobra
899 go-github-com-stretchr-testify))
900 (home-page "https://github.com/AvengeMedia/dgop")
901 (synopsis "Stateless system monitoring CLI + REST API")
902 (description
903 "dgop is a system monitoring tool. It supports cursor-based sampling of
904CPU/memory/disk/network, plus an optional REST API server. It supports
905cursor-based sampling for building real-time monitoring tools like
906@command{htop}. Instead of relying on instantaneous snapshots, it may track
907system state changes over time for more accurate CPU usage calculations and
908network/disk rates.")
909 (license license:expat)))
910
911(define-public python-whisper
912 (package
913 (name "python-whisper")
914 (version "1.1.10")
915 (source
916 (origin
917 (method git-fetch)
918 (uri (git-reference
919 (url "https://github.com/graphite-project/whisper")
920 (commit version)))
921 (file-name (git-file-name name version))
922 (sha256
923 (base32
924 "182phj3z3mxpbla6m2f0pahyvqfn0jdblprvk6xwx39nc939nw0a"))))
925 (build-system pyproject-build-system)
926 (arguments
927 (list
928 #:phases
929 #~(modify-phases %standard-phases
930 (add-after 'unpack 'remove-python-six-dependency
931 (lambda _
932 (substitute* (find-files "." "\\.py$")
933 (("'six'") "") ; dependency in setup.py
934 (("six\\.moves") "io")
935 (("from six import assertRegex") "")
936 (("assertRegex") ""))))))) ; effectively disable test
937 (native-inputs (list python-pytest python-setuptools))
938 (home-page "https://graphiteapp.org/")
939 (synopsis "Fixed size round-robin style database for Graphite")
940 (description "Whisper is one of three components within the Graphite
941project. Whisper is a fixed-size database, similar in design and purpose to
942RRD (round-robin-database). It provides fast, reliable storage of numeric
943data over time. Whisper allows for higher resolution (seconds per point) of
944recent data to degrade into lower resolutions for long-term retention of
945historical data.")
946 (license license:asl2.0)))
947
948(define-public python-carbon
949 ;; 1.1.10 (2022-05-22), the latest changes provide support for Python 3.12+;
950 ;; move back to git tag when released.
951 (let ((commit "697bc3b0060ab245225dc5b90a0f4966b4ec7eef")
952 (revision "0"))
953 (package
954 (name "python-carbon")
955 (version (git-version "1.1.10" revision commit))
956 (source
957 (origin
958 (method git-fetch)
959 (uri (git-reference
960 (url "https://github.com/graphite-project/carbon")
961 (commit commit)))
962 (file-name (git-file-name name version))
963 (sha256
964 (base32 "1i5ydnzv53b1pigrqqi9nhivxjmlnswg9pd7vznvg34d7281gx19"))))
965 (build-system pyproject-build-system)
966 (arguments
967 (list
968 #:test-flags
969 #~(list
970 ;; XXX: cannot import name 'WhisperDatabase' from 'carbon.database'
971 "--ignore=lib/carbon/tests/test_database.py"
972 "--ignore=lib/carbon/tests/test_storage.py"
973 "-k" (string-join
974 (list "not testBasic" ; requires murmurhash3.
975 ;; XXX: python-mock incompatibility.
976 "test_decode_pickle"
977 "test_invalid_pickle"
978 "test_invalid_types")
979 " and not "))
980 #:phases
981 #~(modify-phases %standard-phases
982 ;; Don't install to /opt
983 (add-after 'unpack 'do-not-install-to-/opt
984 (lambda _
985 (setenv "GRAPHITE_NO_PREFIX" "1"))))))
986 (native-inputs
987 (list python-mock python-protobuf python-pytest python-setuptools))
988 (propagated-inputs
989 (list python-cachetools python-twisted python-txamqp python-urllib3))
990 (home-page "https://graphiteapp.org/")
991 (synopsis "Backend data caching and persistence daemon for Graphite")
992 (description
993 "Carbon is a backend data caching and persistence daemon for Graphite.
994Carbon is responsible for receiving metrics over the network, caching them in
995memory for \"hot queries\" from the Graphite-Web application, and persisting
996them to disk using the Whisper time-series library.")
997 (license license:asl2.0))))
998
999(define-public python-prometheus-client
1000 (package
1001 (name "python-prometheus-client")
1002 (version "0.22.1")
1003 (source
1004 (origin
1005 (method url-fetch)
1006 (uri (pypi-uri "prometheus_client" version))
1007 (sha256
1008 (base32 "0a0ds9svcfcc8bspikyfz9w46k8a9qsmk9dwc3mj3kw3wwqi63qr"))))
1009 (build-system pyproject-build-system)
1010 (arguments
1011 (list
1012 #:test-flags
1013 #~(list "-k" (string-join
1014 ;; FileNotFoundError: [Errno 2] No such file or directory
1015 (list "not test_push_with_tls_auth_handler"
1016 ;; AssertionError: 17.21 != None
1017 "test_namespace"
1018 ;; AssertionError: 17.21 != None
1019 "test_working"
1020 ;; AssertionError: 0.0 != None
1021 "test_working_584")
1022 " and not "))))
1023 (native-inputs
1024 (list python-pytest
1025 python-setuptools))
1026 (home-page "https://github.com/prometheus/client_python")
1027 (synopsis "Python client for the Prometheus monitoring system")
1028 (description
1029 "The @code{prometheus_client} package supports exposing metrics from
1030software written in Python, so that they can be scraped by a Prometheus
1031service.
1032
1033Metrics can be exposed through a standalone web server, or through Twisted,
1034WSGI and the node exporter textfile collector.")
1035 (license license:asl2.0)))
1036
1037(define-public prometheus-node-exporter
1038 (package
1039 (name "prometheus-node-exporter")
1040 (version "1.10.2")
1041 (source
1042 (origin
1043 (method git-fetch)
1044 (uri (git-reference
1045 (url "https://github.com/prometheus/node_exporter")
1046 (commit (string-append "v" version))))
1047 (file-name (git-file-name name version))
1048 (sha256
1049 (base32 "10dqb97bv7v2xc31qjr7g8k7v0r1wq75xk846zbjgglw35nrpb2i"))))
1050 (build-system go-build-system)
1051 (arguments
1052 (list
1053 #:install-source? #f
1054 #:build-flags
1055 #~(list (string-append
1056 "-ldflags="
1057 "-X github.com/prometheus/common/version.Version=" #$version
1058 " -X github.com/prometheus/common/version.Revision=0"
1059 " -X github.com/prometheus/common/version.Branch=master"
1060 " -X github.com/prometheus/common/version.BuildUser=guix"
1061 " -X github.com/prometheus/common/version.BuildDate=n/a"))
1062 #:embed-files #~(list "landing_page.css" "landing_page.html")
1063 #:import-path "github.com/prometheus/node_exporter"
1064 #:phases
1065 #~(modify-phases %standard-phases
1066 (add-before 'check 'pre-check
1067 (lambda* (#:key tests? import-path #:allow-other-keys)
1068 (with-directory-excursion (string-append "src/" import-path)
1069 (invoke "./ttar" "-C" "collector/fixtures"
1070 "-x" "-f" "collector/fixtures/sys.ttar")
1071 (invoke "./ttar" "-C" "collector/fixtures"
1072 "-x" "-f" "collector/fixtures/udev.ttar"))))
1073 (add-after 'check 'post-check
1074 (lambda* (#:key tests? import-path #:allow-other-keys)
1075 (with-directory-excursion (string-append "src/" import-path)
1076 (for-each delete-file-recursively
1077 (list "collector/fixtures/sys"
1078 "collector/fixtures/sys.ttar"
1079 "collector/fixtures/udev"
1080 "collector/fixtures/udev.ttar"))))))))
1081 (propagated-inputs
1082 (list go-github-com-alecthomas-kingpin-v2
1083 go-github-com-beevik-ntp
1084 go-github-com-coreos-go-systemd-v22
1085 go-github-com-dennwc-btrfs
1086 go-github-com-ema-qdisc
1087 go-github-com-go-kit-log
1088 go-github-com-godbus-dbus-v5
1089 go-github-com-hashicorp-go-envparse
1090 go-github-com-hodgesds-perf-utils
1091 go-github-com-josharian-native
1092 go-github-com-jsimonetti-rtnetlink
1093 go-github-com-mattn-go-xmlrpc
1094 go-github-com-mdlayher-ethtool
1095 go-github-com-mdlayher-netlink
1096 go-github-com-mdlayher-wifi
1097 go-github-com-jsimonetti-rtnetlink-v2
1098 go-github-com-opencontainers-selinux
1099 go-github-com-prometheus-client-golang
1100 go-github-com-prometheus-client-model
1101 go-github-com-prometheus-common
1102 go-github-com-prometheus-community-go-runit
1103 go-github-com-prometheus-exporter-toolkit
1104 go-github-com-prometheus-procfs
1105 go-github-com-safchain-ethtool
1106 go-golang-org-x-exp
1107 go-golang-org-x-sys
1108 go-howett-net-plist))
1109 (home-page "https://github.com/prometheus/node_exporter")
1110 (synopsis "Prometheus exporter for hardware and OS metrics")
1111 (description
1112 "Prometheus exporter for metrics exposed by *NIX kernels,
1113written in Go with pluggable metric collectors.")
1114 (license license:asl2.0)))
1115
1116(define-public prometheus-postfix-exporter
1117 (package
1118 (name "prometheus-postfix-exporter")
1119 (version "0.20.0")
1120 (source
1121 (origin
1122 (method git-fetch)
1123 (uri (git-reference
1124 ;; It's a fork, original project is unmaintained since 2020, see
1125 ;; <https://github.com/kumina/postfix_exporter/issues/122>.
1126 (url "https://github.com/Hsn723/postfix_exporter")
1127 (commit (string-append "v" version))))
1128 (file-name (git-file-name name version))
1129 (sha256
1130 (base32 "09p76wxkl07ad4mrbbf863zmjk506lssjqplqacxqhcbfjb3lvxm"))))
1131 (build-system go-build-system)
1132 (arguments
1133 (list
1134 #:install-source? #f
1135 #:import-path "github.com/hsn723/postfix_exporter"
1136 #:build-flags #~(list "-tags" "nosystemd,nodocker")
1137 #:embed-files #~(list "landing_page.css" "landing_page.html")
1138 #:test-flags #~(list "-tags" "nosystemd,nodocker")))
1139 (native-inputs
1140 (list go-github-com-alecthomas-kingpin-v2
1141 go-github-com-coreos-go-systemd-v22
1142 go-github-com-docker-docker
1143 go-github-com-nxadm-tail
1144 go-github-com-prometheus-client-golang
1145 go-github-com-prometheus-client-model
1146 go-github-com-prometheus-common
1147 go-github-com-prometheus-exporter-toolkit
1148 go-github-com-stretchr-testify
1149 go-gopkg-in-tomb-v1
1150 go-k8s-io-api
1151 go-k8s-io-apimachinery
1152 go-k8s-io-client-go
1153 go-k8s-io-utils))
1154 (home-page "https://github.com/hsn723/postfix_exporter")
1155 (synopsis "Prometheus Postfix exporter")
1156 (description
1157 "Prometheus metrics exporter for @url{http://www.postfix.org/, the
1158Postfix mail server}. This exporter provides histogram metrics for the size
1159and age of messages stored in the mail queue. It extracts these metrics from
1160Postfix by connecting to a UNIX socket under @code{/var/spool}. It also
1161counts events by parsing Postfix's log entries, using regular expression
1162matching. The log entries are retrieved from the systemd journal, the Docker
1163logs, or from a log file. This package is built from a maintained fork of
1164original @url{https://github.com/kumina/postfix_exporter} project.")
1165 (license license:asl2.0)))
1166
1167(define-public prometheus-postgres-exporter
1168 (package
1169 (name "prometheus-postgres-exporter")
1170 (version "0.19.1")
1171 (source
1172 (origin
1173 (method git-fetch)
1174 (uri (git-reference
1175 (url "https://github.com/prometheus-community/postgres_exporter")
1176 (commit (string-append "v" version))))
1177 (file-name (git-file-name name version))
1178 (sha256
1179 (base32 "10vjg5y5ycf921hn4sb8a0a5aibk09rwsp51ksix0cglhqnia5b7"))))
1180 (build-system go-build-system)
1181 (arguments
1182 (list
1183 #:install-source? #f
1184 #:import-path "github.com/prometheus-community/postgres_exporter/cmd/postgres_exporter"
1185 #:unpack-path "github.com/prometheus-community/postgres_exporter"
1186 #:build-flags
1187 #~(list (string-append
1188 "-ldflags="
1189 "-X github.com/prometheus/common/version.Version=" #$version
1190 " -X github.com/prometheus/common/version.Revision=0"
1191 " -X github.com/prometheus/common/version.Branch=master"
1192 " -X github.com/prometheus/common/version.BuildUser=guix"
1193 " -X github.com/prometheus/common/version.BuildDate=n/a"))
1194 #:embed-files #~(list "landing_page.css" "landing_page.html")
1195 ;; Step away from cmd/postgres_exporte to test the whole project.
1196 #:test-subdirs #~(list "../../...")))
1197 (native-inputs
1198 (list go-github-com-alecthomas-kingpin-v2
1199 go-github-com-blang-semver-v4
1200 go-github-com-data-dog-go-sqlmock
1201 go-github-com-lib-pq
1202 go-github-com-prometheus-client-golang
1203 go-github-com-prometheus-client-model
1204 go-github-com-prometheus-common
1205 go-github-com-prometheus-exporter-toolkit
1206 go-github-com-smartystreets-goconvey
1207 go-gopkg-in-check-v1
1208 go-gopkg-in-yaml-v2
1209 go-gopkg-in-yaml-v3))
1210 (home-page "https://github.com/prometheus-community/postgres_exporter")
1211 (synopsis "PostgreSQL Server Exporter")
1212 (description "This package provides a Prometheus exporter for
1213@code{PostgreSQL} server metrics.")
1214 (license license:asl2.0)))
1215
1216(define-public temper-exporter
1217 ;; XXX: No release or updates since 2020, consider to remove when starts
1218 ;; failing, it might be abandoned project.
1219 (let ((commit "a87bbab19c05609d62d9e4c7941178700c1ef84d")
1220 (revision "0"))
1221 (package
1222 (name "temper-exporter")
1223 (version (git-version "0" revision commit))
1224 (source (origin
1225 (method git-fetch)
1226 (uri (git-reference
1227 (url "https://github.com/yrro/temper-exporter")
1228 (commit commit)))
1229 (file-name (git-file-name name version))
1230 (sha256
1231 (base32
1232 "0jk3ydi8s14q5kyl9j3gm2zrnwlb1jwjqpg5vqrgkbm9jrldrabc"))))
1233 (build-system pyproject-build-system)
1234 (arguments
1235 (list
1236 ;; XXX: pretty-printing AssertionError
1237 #:test-flags #~(list "-k" "not test_collection")
1238 #:phases
1239 #~(modify-phases %standard-phases
1240 (add-after 'unpack 'patch-setup.py
1241 (lambda _
1242 (substitute* "setup.py"
1243 (("git_ref = .*\n")
1244 "git_ref = ''\n"))))
1245 (add-after 'install 'install-udev-rules
1246 (lambda _
1247 (install-file "debian/prometheus-temper-exporter.udev"
1248 (string-append #$output
1249 "/lib/udev/rules.d")))))))
1250 (inputs (list python-prometheus-client python-pyudev))
1251 (native-inputs (list python-pytest python-pytest-mock python-setuptools))
1252 (home-page "https://github.com/yrro/temper-exporter")
1253 (synopsis "Prometheus exporter for PCSensor TEMPer sensor devices")
1254 (description
1255 "This package contains a Prometheus exporter for the TEMPer sensor
1256devices.")
1257 (license license:expat))))
1258
1259(define-public fswatch
1260 (package
1261 (name "fswatch")
1262 (version "1.22.0")
1263 (source (origin
1264 (method git-fetch)
1265 (uri (git-reference
1266 (url "https://github.com/emcrisostomo/fswatch")
1267 (commit version)))
1268 (file-name (git-file-name name version))
1269 (sha256
1270 (base32
1271 "0sxq5b5jd2skyclai854k9ksaa0c4476zqckvcwns8kdpzq4mxlc"))))
1272 (build-system gnu-build-system)
1273 (native-inputs
1274 (list autoconf automake gettext-minimal libtool))
1275 (arguments
1276 (list #:configure-flags
1277 #~(list "--disable-static")))
1278 (synopsis "File system monitor")
1279 (description "This package provides a file system monitor.")
1280 (home-page "https://github.com/emcrisostomo/fswatch")
1281 (license license:gpl3+)))
1282
1283(define-public collectd
1284 (package
1285 (name "collectd")
1286 (version "5.12.0")
1287 (source (origin
1288 (method url-fetch)
1289 (uri (string-append
1290 "https://storage.googleapis.com/collectd-tarballs/collectd-"
1291 version
1292 ".tar.bz2"))
1293 (sha256
1294 (base32
1295 "1mh97afgq6qgmpvpr84zngh58m0sl1b4wimqgvvk376188q09bjv"))
1296 (patches (search-patches "collectd-5.11.0-noinstallvar.patch"
1297 "collectd-5.11.0-python-3.11.patch"))))
1298 (build-system gnu-build-system)
1299 (arguments
1300 `(#:configure-flags
1301 (list
1302 "--enable-python"
1303 "--enable-sensors"
1304 "--enable-smart"
1305 "--localstatedir=/var"
1306 "--sysconfdir=/etc"
1307 "CFLAGS=-Wno-error=deprecated-declarations")
1308 #:phases (modify-phases %standard-phases
1309 (add-before 'configure 'autoreconf
1310 (lambda _
1311 ;; Required because of patched sources.
1312 (invoke "autoreconf" "-vfi"))))))
1313 (inputs
1314 (list
1315 curl
1316 rrdtool
1317 yajl
1318 zlib))
1319 (native-inputs
1320 (list
1321 autoconf
1322 automake
1323 eudev
1324 libatasmart
1325 libtool
1326 `(,lm-sensors "lib")
1327 pkg-config
1328 python-3))
1329 (home-page "https://collectd.org/")
1330 (synopsis "Collect system and application performance metrics periodically")
1331 (description
1332 "collectd gathers metrics from various sources such as the operating system,
1333applications, log files and external devices, and stores this information or
1334makes it available over the network. Those statistics can be used to monitor
1335systems, find performance bottlenecks (i.e., performance analysis) and predict
1336future system load (i.e., capacity planning).")
1337 ;; license:expat for the daemon in src/daemon/ and some plugins,
1338 ;; license:gpl2 for other plugins
1339 (license (list license:expat license:gpl2))))
1340
1341(define-public hostscope
1342 (package
1343 (name "hostscope")
1344 (version "8.0")
1345 (source (origin
1346 (method url-fetch)
1347 (uri (string-append
1348 "http://www.maier-komor.de/hostscope/hostscope-V"
1349 version ".tgz"))
1350 (sha256
1351 (base32
1352 "0jw6yij8va0f292g4xkf9lp9sxkzfgv67ajw49g3vq42q47ld7cv"))))
1353 (build-system gnu-build-system)
1354 (inputs (list ncurses))
1355 (arguments '(#:tests? #f)) ;; No included tests.
1356 (home-page "https://www.maier-komor.de/hostscope.html")
1357 (properties `((release-monitoring-url . ,home-page)))
1358 (synopsis
1359 "System monitoring tool for multiple hosts")
1360 (description
1361 "HostScope displays key system metrics of Linux hosts, such as detailed
1362CPU load, speed and temperature, I/O rates of network interfaces, I/O rates of
1363disks, and user process summary information. All metrics are multicast on the
1364LAN, if wanted, and clients can switch between multiple hosts on the network.
1365Hostscope features a bridge to Influx DB. So Grafana can be used to visualize
1366the recorded data over time.")
1367 (license license:gpl3+)))
1368
1369(define-public fatrace
1370 (package
1371 (name "fatrace")
1372 (version "0.19.1")
1373 (source
1374 (origin
1375 (method git-fetch)
1376 (uri (git-reference
1377 (url "https://github.com/martinpitt/fatrace")
1378 (commit version)))
1379 (file-name (git-file-name name version))
1380 (sha256
1381 (base32
1382 "0lmr6bv6d2f1gnrsy34gaiamw6615m3y7gw21fkiv47hn0xydhlx"))))
1383 (build-system gnu-build-system)
1384 (arguments
1385 (list
1386 #:tests? #f ; Tests need superuser, and there are
1387 ; no makefile directive to run them
1388 #:phases
1389 #~(modify-phases %standard-phases
1390 (delete 'configure))
1391 #:make-flags
1392 #~(list (string-append "CC=" #$(cc-for-target))
1393 (string-append "PREFIX=" #$output))))
1394 (synopsis "File access events monitor")
1395 (description "This package provides a utility to report system wide file
1396access events from all running processes. Its main purpose is to find
1397processes which keep waking up the disk unnecessarily and thus prevent some
1398power saving.")
1399 (home-page "https://github.com/martinpitt/fatrace")
1400 (license license:gpl3+)))
1401
1402(define-public pw
1403 (package
1404 (name "pw")
1405 (version "2")
1406 (source
1407 (origin
1408 (method git-fetch)
1409 (uri (git-reference
1410 (url "https://www.kylheku.com/git/pw")
1411 (commit (string-append "pw-" version))))
1412 (file-name (git-file-name name version))
1413 (sha256
1414 (base32 "1xn3qnzz48xan78cp83hfrcifrxx9lgnm14134qhyr5wvj7dk246"))))
1415 (build-system gnu-build-system)
1416 (arguments
1417 (list #:tests? #f ; There are no tests
1418 #:make-flags
1419 #~(list (string-append "CC=" #$(cc-for-target))
1420 (string-append "DESTDIR=" #$output))
1421 #:phases
1422 #~(modify-phases %standard-phases
1423 (add-after 'unpack 'fix-makefile
1424 (lambda _
1425 (substitute* "Makefile"
1426 (("/share/man/man1 \\\\") "/share/man/man1; \\"))))
1427 (delete 'configure)
1428 (add-before 'install 'make-install-dirs
1429 (lambda _
1430 (mkdir-p (string-append #$output "/bin"))
1431 (mkdir-p (string-append #$output "/share/man/man1"))
1432 (mkdir-p (string-append #$output "/share/man/man5")))))))
1433 (home-page "https://www.kylheku.com/cgit/pw/")
1434 (synopsis "Monitor recent lines of output from pipe")
1435 (description
1436 "@command{pw} is Pipe Watch, a utility that continuously reads lines of
1437text from a pipe or pipe-like source, passes them through a FIFO buffer, and
1438maintains a display based on the occasional sampling of the contents of the
1439FIFO buffer, with useful features such as triggering and filtering.
1440
1441With @command{pw} you can:
1442
1443@itemize
1444@item Interactively apply and remove filters on-the-fly, without interrupting
1445the source.
1446
1447@item Make recurring patterns in the stream appear to ``freeze'' on the
1448screen, using triggers.
1449
1450@item Prevent the overwhelming amount of output from a program from flooding
1451the terminal, while consuming all of that output so that the program isn't
1452blocked. @command{pw} can pause its display updates entirely.
1453
1454@item Juggle multiple shell background jobs that produce output, yet execute
1455indefinitely without blocking. When @command{pw} runs as part of a shell
1456background job, it continues to consume input, process filters and take
1457snapshots, without displaying anything. When put into the foreground again,
1458display resumes.
1459@end itemize")
1460 (license license:bsd-2)))
1461
1462(define-public python-statsd
1463 (package
1464 (name "python-statsd")
1465 (version "4.0.1")
1466 (source
1467 (origin
1468 (method url-fetch)
1469 (uri (pypi-uri "statsd" version))
1470 (sha256
1471 (base32 "0a6ilx68lxbynfm1slpaa87qs6mhrjm12bfjngvdma7y3fl3sxlr"))))
1472 (build-system pyproject-build-system)
1473 (arguments
1474 (list
1475 #:test-flags #~(list "statsd/tests.py")))
1476 (native-inputs
1477 (list python-pytest
1478 python-setuptools
1479 python-wheel))
1480 (home-page "https://github.com/jsocol/pystatsd")
1481 (synopsis "Simple StatsD client")
1482 (description "StatsD is a friendly front-end to Graphite. This package
1483provides a simple Python client for the StatsD daemon.")
1484 (license license:expat)))
1485
1486(define-public batsignal
1487 (package
1488 (name "batsignal")
1489 (version "1.8.0")
1490 (source (origin
1491 (method git-fetch)
1492 (uri (git-reference
1493 (url "https://github.com/electrickite/batsignal")
1494 (commit version)))
1495 (file-name (git-file-name name version))
1496 (sha256
1497 (base32
1498 "0l6j873l1l0al95zl9ihxzrmy9r11pfm269gydlx8pps4gdisy6a"))))
1499 (build-system gnu-build-system)
1500 (arguments
1501 (list #:make-flags
1502 #~(list (string-append "PREFIX=" #$output)
1503 (string-append "CC=" #$(cc-for-target)))
1504 #:phases
1505 #~(modify-phases %standard-phases
1506 (add-after 'unpack 'fix-cross-compile
1507 (lambda _
1508 (substitute* "Makefile"
1509 (("pkg-config")
1510 #$(pkg-config-for-target)))))
1511 (delete 'configure)
1512 (replace 'check
1513 (lambda* (#:key tests? #:allow-other-keys)
1514 (when tests?
1515 (invoke "./batsignal" "-v")))))))
1516 (inputs (list libnotify))
1517 (native-inputs (list pkg-config))
1518 (home-page "https://github.com/electrickite/batsignal")
1519 (synopsis "Power monitoring tool")
1520 (description
1521 "This package provides a daemon that monitors device power levels,
1522notifying the user and optionally running a command when it reaches
1523user-configured power thresholds. This can be used to force powering off a
1524laptop when the battery gets below critical levels, instead of damaging the
1525battery.")
1526 (license license:isc)))
1527
1528(define-public battop
1529 (package
1530 (name "battop")
1531 (version "0.2.4")
1532 (source
1533 (origin
1534 (method url-fetch)
1535 (uri (crate-uri "battop" version))
1536 (file-name (string-append name "-" version ".tar.gz"))
1537 (sha256
1538 (base32 "1f5d3y9f179aljp94bl3al45g6n2bfnhw5mdmffm2rr6hraa31kn"))))
1539 (build-system cargo-build-system)
1540 (inputs (cargo-inputs 'battop))
1541 (home-page "https://github.com/svartalf/rust-battop")
1542 (synopsis "Interactive battery viewer")
1543 (description "@command{battop} is an interactive viewer, similar to
1544@command{top}, @command{htop} and other *top utilities, but showing the
1545(potentially multiple) batteries installed in a notebook.")
1546 (license (list license:asl2.0 license:expat))))