Merge branch 'patch/grafana' into 'master'

Draft: nongnu: Add grafana-bin

See merge request nonguix/nonguix!252
This commit is contained in:
Petr Hodina 2025-02-09 15:09:07 +00:00
commit 66779b2d94
2 changed files with 132 additions and 0 deletions

View File

@ -0,0 +1,89 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; Copyright © 2023 Petr Hodina <phodina@protonmail.com>
(define-module (nongnu packages grafana)
#:use-module (guix packages)
#:use-module (gnu packages base)
#:use-module (gnu packages elf)
#:use-module (gnu packages gcc)
#:use-module (gnu packages glib)
#:use-module (guix download)
#:use-module (guix utils)
#:use-module (nonguix build-system binary)
#:use-module ((guix licenses)
#:prefix license:))
(define-public grafana-bin
(package
(name "grafana")
(version "9.3.2")
(source (cond
((target-x86-64?)
(origin
(method url-fetch)
(uri (string-append
"https://dl.grafana.com/oss/release/grafana-" version
".linux-amd64.tar.gz"))
(sha256 (base32
"177d396sg6pwa7vwsdwqy6fg17kq47n619s4745z62s6inq3i0vr"))))
((target-aarch64?)
(origin
(method url-fetch)
(uri (string-append
"https://dl.grafana.com/oss/release/grafana-" version
".linux-arm64.tar.gz"))
(sha256 (base32
"1ps8aa279fh8hcngda794f69w6hm78pw9pgvwyxlnx229581zrkv"))))
((target-armhf?)
(origin
(method url-fetch)
(uri (string-append
"https://dl.grafana.com/oss/release/grafana-" version
".linux-armv7.tar.gz"))
(sha256 (base32
"0avndch41m5k7gpxzdk8k1gzz3nyscmw3va4mk5813vbfmynv2bn"))))))
(build-system binary-build-system)
(arguments
'(#:strip-binaries? #f ;TODO: For some reason it fails validate-runpath
;; phase if enabled
#:install-plan `(("bin/grafana-cli" "bin/grafana-cli")
("bin/grafana-server" "bin/grafana-server")
("conf/defaults.ini" "etc/grafana/grafana.ini")
("conf" "share/grafana/")
("public" "share/grafana/")
("scripts" "share/grafana/")
("plugins-bundled" "share/grafana/"))
#:patchelf-plan (list (list "bin/grafana-cli"
'("glibc" "gcc:lib"))
(list "bin/grafana-server"
'("glibc" "gcc:lib")))))
(supported-systems '("x86_64-linux" "aarch64-linux" "armhf-linux"))
(native-inputs (list patchelf))
(inputs `(("gcc:lib" ,gcc "lib")
("glibc" ,glibc)))
(synopsis "Platform for monitoring and observability")
(description
"Grafana allows you to query, visualize, alert on
and understand your metrics no matter where they are stored. Create, explore,
and share dashboards with your team and foster a data-driven culture:
@enumerate
@ite Visualizations: Fast and flexible client side graphs with a multitude
of options. Panel plugins offer many different ways to visualize metrics
and logs
@item Dynamic Dashboards: Create dynamic & reusable dashboards with template
variables that appear as dropdowns at the top of the dashboard.
@item Explore Metrics: Explore your data through ad-hoc queries and dynamic
drilldown. Split view and compare different time ranges, queries and data
sources side by side.
@item Explore Logs: Experience the magic of switching from metrics to logs with
preserved label filters. Quickly search through all your logs or streaming them
live.
@item Alerting: Visually define alert rules for your most important metrics.
Grafana will continuously evaluate and send notifications to systems like Slack,
PagerDuty, VictorOps, OpsGenie.
@item Mixed Data Sources: Mix different data sources in the same graph! You can
specify a data source on a per-query basis. This works for even custom
datasources.
@end enumerate")
(home-page "https://grafana.com/")
(license license:agpl3)))

View File

@ -0,0 +1,43 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; Copyright © 2023 Petr Hodina <phodina@protonmail.com>
(define-module (nongnu services grafana)
#:use-module (gnu packages)
#:use-module (nongnu packages grafana)
#:use-module (gnu services)
#:use-module (gnu services base)
#:use-module (gnu services shepherd)
#:use-module (guix gexp)
#:use-module (guix records)
#:export (grafana-configuration
grafana-configuration?
grafana-configuration-record?
grafana-service-type))
(define-record-type* <grafana-configuration>
grafana-configuration make-grafana-configuration
grafana-configuration?
;; TODO: Port, HTTPS, plugins?
(grafana grafana-configuration-package
(default (list grafana-bin)))) ; package
;; Add config file
(define (grafana-shepherd-service config)
(list (shepherd-service
(documentation "Run Grafana server.")
(provision '(grafana))
(requirement '(user-processes))
(start #~(make-forkexec-constructor
(list (string-append grafana
"/bin/grafana-server")
"-homepath" grafana)))
(stop #~(make-kill-destructor)))))
(define grafana-service-type
(service-type
(name 'grafana)
(extensions
(list (service-extension shepherd-root-service-type
grafana-shepherd-service)))
(default-value (grafana-configuration))
(description "Run Grafana server.")))