Merge pull request #180950 from alyssais/graphite

Changed files
+22 -411
nixos
doc
manual
from_md
release-notes
release-notes
modules
services
monitoring
tests
pkgs
development
python-modules
graphite-api
graphite_beacon
influxgraph
top-level
+10
nixos/doc/manual/from_md/release-notes/rl-2211.section.xml
···
</listitem>
<listitem>
<para>
+
The <literal>services.graphite.api</literal> and
+
<literal>services.graphite.beacon</literal> NixOS options, and
+
the <literal>python3.pkgs.graphite_api</literal>,
+
<literal>python3.pkgs.graphite_beacon</literal> and
+
<literal>python3.pkgs.influxgraph</literal> packages, have
+
been removed due to lack of upstream maintenance.
+
</para>
+
</listitem>
+
<listitem>
+
<para>
(Neo)Vim can not be configured with
<literal>configure.pathogen</literal> anymore to reduce
maintainance burden. Use <literal>configure.packages</literal>
+5
nixos/doc/manual/release-notes/rl-2211.section.md
···
- riak package removed along with `services.riak` module, due to lack of maintainer to update the package.
+
- The `services.graphite.api` and `services.graphite.beacon` NixOS options, and
+
the `python3.pkgs.graphite_api`, `python3.pkgs.graphite_beacon` and
+
`python3.pkgs.influxgraph` packages, have been removed due to lack of upstream
+
maintenance.
+
- (Neo)Vim can not be configured with `configure.pathogen` anymore to reduce maintainance burden.
Use `configure.packages` instead.
+3 -157
nixos/modules/services/monitoring/graphite.nix
···
+ cfg.web.extraConfig
);
-
graphiteApiConfig = pkgs.writeText "graphite-api.yaml" ''
-
search_index: ${dataDir}/index
-
${optionalString (config.time.timeZone != null) "time_zone: ${config.time.timeZone}"}
-
${optionalString (cfg.api.finders != []) "finders:"}
-
${concatMapStringsSep "\n" (f: " - " + f.moduleName) cfg.api.finders}
-
${optionalString (cfg.api.functions != []) "functions:"}
-
${concatMapStringsSep "\n" (f: " - " + f) cfg.api.functions}
-
${cfg.api.extraConfig}
-
'';
-
seyrenConfig = {
SEYREN_URL = cfg.seyren.seyrenUrl;
MONGO_URL = cfg.seyren.mongoUrl;
···
in {
imports = [
+
(mkRemovedOptionModule ["services" "graphite" "api"] "")
+
(mkRemovedOptionModule ["services" "graphite" "beacon"] "")
(mkRemovedOptionModule ["services" "graphite" "pager"] "")
];
···
};
};
-
api = {
-
enable = mkOption {
-
description = ''
-
Whether to enable graphite api. Graphite api is lightweight alternative
-
to graphite web, with api and without dashboard. It's advised to use
-
grafana as alternative dashboard and influxdb as alternative to
-
graphite carbon.
-
-
For more information visit
-
<link xlink:href="https://graphite-api.readthedocs.org/en/latest/"/>
-
'';
-
default = false;
-
type = types.bool;
-
};
-
-
finders = mkOption {
-
description = "List of finder plugins to load.";
-
default = [];
-
example = literalExpression "[ pkgs.python3Packages.influxgraph ]";
-
type = types.listOf types.package;
-
};
-
-
functions = mkOption {
-
description = "List of functions to load.";
-
default = [
-
"graphite_api.functions.SeriesFunctions"
-
"graphite_api.functions.PieFunctions"
-
];
-
type = types.listOf types.str;
-
};
-
-
listenAddress = mkOption {
-
description = "Graphite web service listen address.";
-
default = "127.0.0.1";
-
type = types.str;
-
};
-
-
port = mkOption {
-
description = "Graphite api service port.";
-
default = 8080;
-
type = types.int;
-
};
-
-
package = mkOption {
-
description = "Package to use for graphite api.";
-
default = pkgs.python3Packages.graphite_api;
-
defaultText = literalExpression "pkgs.python3Packages.graphite_api";
-
type = types.package;
-
};
-
-
extraConfig = mkOption {
-
description = "Extra configuration for graphite api.";
-
default = ''
-
whisper:
-
directories:
-
- ${dataDir}/whisper
-
'';
-
defaultText = literalExpression ''
-
'''
-
whisper:
-
directories:
-
- ''${config.${opt.dataDir}}/whisper
-
'''
-
'';
-
example = ''
-
allowed_origins:
-
- dashboard.example.com
-
cheat_times: true
-
influxdb:
-
host: localhost
-
port: 8086
-
user: influxdb
-
pass: influxdb
-
db: metrics
-
cache:
-
CACHE_TYPE: 'filesystem'
-
CACHE_DIR: '/tmp/graphite-api-cache'
-
'';
-
type = types.lines;
-
};
-
};
-
carbon = {
config = mkOption {
description = "Content of carbon configuration file.";
···
'';
};
};
-
-
beacon = {
-
enable = mkEnableOption "graphite beacon";
-
-
config = mkOption {
-
description = "Graphite beacon configuration.";
-
default = {};
-
type = types.attrs;
-
};
-
};
};
###### implementation
···
environment.systemPackages = [ pkgs.python3Packages.graphite-web ];
}))
-
(mkIf cfg.api.enable {
-
systemd.services.graphiteApi = {
-
description = "Graphite Api Interface";
-
wantedBy = [ "multi-user.target" ];
-
after = [ "network.target" ];
-
environment = {
-
PYTHONPATH = let
-
aenv = pkgs.python3.buildEnv.override {
-
extraLibs = [ cfg.api.package pkgs.cairo pkgs.python3Packages.cffi ] ++ cfg.api.finders;
-
};
-
in "${aenv}/${pkgs.python3.sitePackages}";
-
GRAPHITE_API_CONFIG = graphiteApiConfig;
-
LD_LIBRARY_PATH = "${pkgs.cairo.out}/lib";
-
};
-
serviceConfig = {
-
ExecStart = ''
-
${pkgs.python3Packages.waitress}/bin/waitress-serve \
-
--host=${cfg.api.listenAddress} --port=${toString cfg.api.port} \
-
graphite_api.app:app
-
'';
-
User = "graphite";
-
Group = "graphite";
-
PermissionsStartOnly = true;
-
};
-
preStart = ''
-
if ! test -e ${dataDir}/db-created; then
-
mkdir -p ${dataDir}/cache/
-
chmod 0700 ${dataDir}/cache/
-
-
chown graphite:graphite ${cfg.dataDir}
-
chown -R graphite:graphite ${cfg.dataDir}/cache
-
-
touch ${dataDir}/db-created
-
fi
-
'';
-
};
-
})
-
(mkIf cfg.seyren.enable {
systemd.services.seyren = {
description = "Graphite Alerting Dashboard";
···
services.mongodb.enable = mkDefault true;
})
-
(mkIf cfg.beacon.enable {
-
systemd.services.graphite-beacon = {
-
description = "Grpahite Beacon Alerting Daemon";
-
wantedBy = [ "multi-user.target" ];
-
serviceConfig = {
-
ExecStart = ''
-
${pkgs.python3Packages.graphite_beacon}/bin/graphite-beacon \
-
--config=${pkgs.writeText "graphite-beacon.json" (builtins.toJSON cfg.beacon.config)}
-
'';
-
User = "graphite";
-
Group = "graphite";
-
};
-
};
-
})
-
(mkIf (
cfg.carbon.enableCache || cfg.carbon.enableAggregator || cfg.carbon.enableRelay ||
-
cfg.web.enable || cfg.api.enable ||
-
cfg.seyren.enable || cfg.beacon.enable
+
cfg.web.enable || cfg.seyren.enable
) {
users.users.graphite = {
uid = config.ids.uids.graphite;
-12
nixos/tests/graphite.nix
···
SECRET_KEY = "abcd";
'';
};
-
api = {
-
enable = true;
-
port = 8082;
-
finders = [ ];
-
};
carbon.enableCache = true;
seyren.enable = false; # Implicitely requires openssl-1.0.2u which is marked insecure
-
beacon.enable = true;
};
};
};
···
start_all()
one.wait_for_unit("default.target")
one.wait_for_unit("graphiteWeb.service")
-
one.wait_for_unit("graphiteApi.service")
-
one.wait_for_unit("graphite-beacon.service")
one.wait_for_unit("carbonCache.service")
# The services above are of type "simple". systemd considers them active immediately
# even if they're still in preStart (which takes quite long for graphiteWeb).
# Wait for ports to open so we're sure the services are up and listening.
one.wait_for_open_port(8080)
-
one.wait_for_open_port(8082)
one.wait_for_open_port(2003)
one.succeed('echo "foo 1 `date +%s`" | nc -N localhost 2003')
one.wait_until_succeeds(
"curl 'http://localhost:8080/metrics/find/?query=foo&format=treejson' --silent | grep foo >&2"
-
)
-
one.wait_until_succeeds(
-
"curl 'http://localhost:8082/metrics/find/?query=foo&format=treejson' --silent | grep foo >&2"
)
'';
})
-46
pkgs/development/python-modules/graphite-api/default.nix
···
-
{ stdenv, buildPythonPackage, fetchFromGitHub, lib, flask, flask-caching, cairocffi, pyparsing, pytz, pyyaml
-
, raven, six, structlog, tzlocal, nose, mock, cairo, isPyPy
-
}:
-
-
buildPythonPackage rec {
-
pname = "graphite-api";
-
version = "1.1.3";
-
-
disabled = isPyPy;
-
-
src = fetchFromGitHub {
-
owner = "brutasse";
-
repo = "graphite-api";
-
rev = version;
-
sha256 = "0sz3kav2024ms2z4q03pigcf080gsr5v774z9bp3zw29k2p47ass";
-
};
-
-
# https://github.com/brutasse/graphite-api/pull/239 rebased onto 1.1.3
-
patches = [ ./flask-caching-rebased.patch ];
-
-
checkPhase = "nosetests";
-
-
propagatedBuildInputs = [
-
flask
-
flask-caching
-
cairocffi
-
pyparsing
-
pytz
-
pyyaml
-
raven
-
six
-
structlog
-
tzlocal
-
];
-
-
checkInputs = [ nose mock ];
-
-
LD_LIBRARY_PATH = "${cairo.out}/lib";
-
-
meta = with lib; {
-
broken = stdenv.isDarwin;
-
description = "Graphite-web, without the interface. Just the rendering HTTP API";
-
homepage = "https://github.com/brutasse/graphite-api";
-
license = licenses.asl20;
-
};
-
}
-132
pkgs/development/python-modules/graphite-api/flask-caching-rebased.patch
···
-
diff --git a/graphite_api/config.py b/graphite_api/config.py
-
index 5e1e382..dc033a8 100644
-
--- a/graphite_api/config.py
-
+++ b/graphite_api/config.py
-
@@ -112,11 +112,11 @@ def configure(app):
-
app.cache = None
-
if 'cache' in config:
-
try:
-
- from flask.ext.cache import Cache
-
+ from flask_caching import Cache
-
except ImportError:
-
warnings.warn("'cache' is provided in the configuration but "
-
- "Flask-Cache is not installed. Please `pip install "
-
- "Flask-Cache`.")
-
+ "flask-caching is not installed. Please `pip "
-
+ "install flask-caching`.")
-
else:
-
cache_conf = {'CACHE_DEFAULT_TIMEOUT': 60,
-
'CACHE_KEY_PREFIX': 'graphite-api:'}
-
diff --git a/requirements.txt b/requirements.txt
-
index c68b446..7826b0c 100644
-
--- a/requirements.txt
-
+++ b/requirements.txt
-
@@ -1,5 +1,5 @@
-
Flask
-
-Flask-Cache
-
+Flask-Caching
-
cairocffi
-
pyparsing>=1.5.7
-
pytz
-
diff --git a/setup.py b/setup.py
-
index 0337cbe..df07989 100644
-
--- a/setup.py
-
+++ b/setup.py
-
@@ -38,7 +38,7 @@ setup(
-
extras_require={
-
'sentry': ['raven[flask]'],
-
'cyanite': ['cyanite'],
-
- 'cache': ['Flask-Cache'],
-
+ 'cache': ['Flask-Caching'],
-
'statsd': ['statsd'],
-
},
-
zip_safe=False,
-
diff --git a/tests/test_render.py b/tests/test_render.py
-
index be5609d..a0e7190 100644
-
--- a/tests/test_render.py
-
+++ b/tests/test_render.py
-
@@ -8,7 +8,7 @@ from graphite_api._vendor import whisper
-
from . import TestCase, WHISPER_DIR
-
-
try:
-
- from flask.ext.cache import Cache
-
+ from flask_caching import Cache
-
except ImportError:
-
Cache = None
-
-
diff --git a/tox.ini b/tox.ini
-
index 85a0abb..c820393 100644
-
--- a/tox.ini
-
+++ b/tox.ini
-
@@ -47,7 +47,7 @@ basepython = python2.7
-
deps =
-
{[testenv]deps}
-
Flask
-
- Flask-Cache
-
+ Flask-Caching
-
pyparsing
-
mock
-
-
@@ -56,7 +56,7 @@ basepython = python3.3
-
deps =
-
{[testenv]deps}
-
Flask
-
- Flask-Cache
-
+ Flask-Caching
-
pyparsing
-
-
[testenv:py34]
-
@@ -66,7 +66,7 @@ commands =
-
deps =
-
{[testenv]deps}
-
Flask
-
- Flask-Cache
-
+ Flask-Caching
-
pyparsing
-
-
[testenv:py35]
-
@@ -76,7 +76,7 @@ commands =
-
deps =
-
{[testenv]deps}
-
Flask
-
- Flask-Cache
-
+ Flask-Caching
-
pyparsing
-
-
[testenv:pyparsing1]
-
@@ -84,7 +84,7 @@ basepython = python2.7
-
deps =
-
{[testenv]deps}
-
Flask
-
- Flask-Cache
-
+ Flask-Caching
-
pyparsing==1.5.7
-
mock
-
-
@@ -93,7 +93,7 @@ basepython = pypy
-
deps =
-
{[testenv]deps}
-
Flask
-
- Flask-Cache
-
+ Flask-Caching
-
pyparsing
-
mock
-
-
@@ -102,7 +102,7 @@ basepython = python2.7
-
deps =
-
{[testenv]deps}
-
Flask<0.9
-
- Flask-Cache
-
+ Flask-Caching
-
pyparsing
-
mock
-
-
@@ -111,7 +111,7 @@ basepython = python2.7
-
deps =
-
{[testenv]deps}
-
Flask<0.10
-
- Flask-Cache
-
+ Flask-Caching
-
pyparsing
-
mock
-
-33
pkgs/development/python-modules/graphite_beacon/default.nix
···
-
{ lib, buildPythonPackage, fetchPypi
-
, tornado_5, pyyaml, funcparserlib
-
, nixosTests
-
}:
-
-
buildPythonPackage rec {
-
pname = "graphite_beacon";
-
version = "0.27.0";
-
-
src = fetchPypi {
-
inherit pname version;
-
sha256 = "03bp4wyfn3xhcqyvs5hnk1n87m4smsmm1p7qp459m7j8hwpbq2ks";
-
};
-
-
propagatedBuildInputs = [ tornado_5 pyyaml funcparserlib ];
-
-
postPatch = ''
-
substituteInPlace requirements.txt --replace "==" ">="
-
'';
-
-
pythonImportsCheck = [ "graphite_beacon" ];
-
-
passthru.tests = {
-
nixos = nixosTests.graphite;
-
};
-
-
meta = with lib; {
-
description = "A simple alerting application for Graphite metrics";
-
homepage = "https://github.com/klen/graphite-beacon";
-
maintainers = [ maintainers.offline ];
-
license = licenses.mit;
-
};
-
}
-24
pkgs/development/python-modules/influxgraph/default.nix
···
-
{ lib, buildPythonPackage, fetchPypi, isPy3k
-
, influxdb, graphite_api, python-memcached
-
}:
-
-
buildPythonPackage rec {
-
pname = "influxgraph";
-
version = "1.5.0";
-
-
src = fetchPypi {
-
inherit pname version;
-
sha256 = "0l33sfwdh4bfprmzp2kx0d9098g6yxbnhyyx9qr3kzczpm0jg9vy";
-
};
-
-
propagatedBuildInputs = [ influxdb graphite_api python-memcached ];
-
-
passthru.moduleName = "influxgraph.InfluxDBFinder";
-
-
meta = with lib; {
-
description = "InfluxDB storage plugin for Graphite-API";
-
homepage = "https://github.com/InfluxGraph/influxgraph";
-
license = licenses.asl20;
-
maintainers = with maintainers; [ basvandijk ];
-
};
-
}
+3
pkgs/top-level/python-aliases.nix
···
glances = throw "glances has moved to pkgs.glances"; # added 2020-20-28
google_api_python_client = google-api-python-client; # added 2021-03-19
googleapis_common_protos = googleapis-common-protos; # added 2021-03-19
+
graphite_api = throw "graphite_api was removed, because it is no longer maintained"; # added 2022-07-10
+
graphite_beacon = throw "graphite_beacon was removed, because it is no longer maintained"; # added 2022-07-09
grpc_google_iam_v1 = grpc-google-iam-v1; # added 2021-08-21
ha-av = throw "ha-av was removed, because it is no longer maintained"; # added 2022-04-06
HAP-python = hap-python; # added 2021-06-01
···
hyperkitty = throw "Please use pkgs.mailmanPackages.hyperkitty"; # added 2022-04-29
IMAPClient = imapclient; # added 2021-10-28
ipaddress = throw "ipaddress has been removed because it is no longer required since python 2.7."; # added 2022-05-30
+
influxgraph = throw "influxgraph has been removed because it is no longer maintained"; # added 2022-07-10
jupyter_client = jupyter-client; # added 2021-10-15
Keras = keras; # added 2021-11-25
lammps-cython = throw "lammps-cython no longer builds and is unmaintained"; # added 2021-07-04
+1 -7
pkgs/top-level/python-packages.nix
···
grapheme = callPackage ../development/python-modules/grapheme { };
-
graphite_api = callPackage ../development/python-modules/graphite-api { };
-
-
graphite_beacon = callPackage ../development/python-modules/graphite_beacon { };
-
graphite-web = callPackage ../development/python-modules/graphite-web { };
graphene = callPackage ../development/python-modules/graphene { };
···
influxdb = callPackage ../development/python-modules/influxdb { };
influxdb-client = callPackage ../development/python-modules/influxdb-client { };
-
-
influxgraph = callPackage ../development/python-modules/influxgraph { };
inform = callPackage ../development/python-modules/inform { };
···
# Used by circus and grab-site, 2020-08-29
tornado_4 = callPackage ../development/python-modules/tornado/4.nix { };
-
# Used by streamlit, graphite_beacon, 2021-01-29
+
# Used by streamlit, 2021-01-29
tornado_5 = callPackage ../development/python-modules/tornado/5.nix { };
torrequest = callPackage ../development/python-modules/torrequest { };