nixos: add graphite api to graphite functionality

This commit is contained in:
Jaka Hudoklin 2014-09-11 13:39:48 +02:00
parent dbae0b628e
commit 19ea435cf8
2 changed files with 86 additions and 20 deletions

View File

@ -8,6 +8,16 @@ let
dataDir = cfg.dataDir; dataDir = cfg.dataDir;
graphiteApiConfig = pkgs.writeText "graphite-api.yaml" ''
time_zone: ${config.time.timeZone}
search_index: ${dataDir}/index
${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}
'';
configDir = pkgs.buildEnv { configDir = pkgs.buildEnv {
name = "graphite-config"; name = "graphite-config";
paths = lists.filter (el: el != null) [ paths = lists.filter (el: el != null) [
@ -65,6 +75,40 @@ in {
}; };
}; };
api = {
enable = mkOption {
description = "Whether to enable graphite api.";
default = false;
type = types.uniq types.bool;
};
finders = mkOption {
description = "List of finder plugins load.";
default = [];
example = [ pkgs.python27Packages.graphite_influxdb ];
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;
};
extraConfig = mkOption {
description = "Extra configuration for graphite api.";
default = ''
whisper:
directories:
- ${dataDir}/whisper
'';
type = types.str;
};
};
carbon = { carbon = {
config = mkOption { config = mkOption {
description = "Content of carbon configuration file."; description = "Content of carbon configuration file.";
@ -176,7 +220,7 @@ in {
###### implementation ###### implementation
config = mkIf (cfg.carbon.enableAggregator || cfg.carbon.enableCache || cfg.carbon.enableRelay || cfg.web.enable) { config = mkIf (cfg.carbon.enableAggregator || cfg.carbon.enableCache || cfg.carbon.enableRelay || cfg.web.enable || cfg.api.enable) {
systemd.services.carbonCache = { systemd.services.carbonCache = {
enable = cfg.carbon.enableCache; enable = cfg.carbon.enableCache;
description = "Graphite Data Storage Backend"; description = "Graphite Data Storage Backend";
@ -189,10 +233,6 @@ in {
Group = "graphite"; Group = "graphite";
PermissionsStartOnly = true; PermissionsStartOnly = true;
}; };
restartTriggers = [
pkgs.pythonPackages.carbon
configDir
];
preStart = '' preStart = ''
mkdir -p ${cfg.dataDir}/whisper mkdir -p ${cfg.dataDir}/whisper
chmod 0700 ${cfg.dataDir}/whisper chmod 0700 ${cfg.dataDir}/whisper
@ -211,10 +251,6 @@ in {
User = "graphite"; User = "graphite";
Group = "graphite"; Group = "graphite";
}; };
restartTriggers = [
pkgs.pythonPackages.carbon
configDir
];
}; };
systemd.services.carbonRelay = { systemd.services.carbonRelay = {
@ -228,10 +264,6 @@ in {
User = "graphite"; User = "graphite";
Group = "graphite"; Group = "graphite";
}; };
restartTriggers = [
pkgs.pythonPackages.carbon
configDir
];
}; };
systemd.services.graphiteWeb = { systemd.services.graphiteWeb = {
@ -243,7 +275,7 @@ in {
environment = { environment = {
PYTHONPATH = "${pkgs.python27Packages.graphite_web}/lib/python2.7/site-packages"; PYTHONPATH = "${pkgs.python27Packages.graphite_web}/lib/python2.7/site-packages";
DJANGO_SETTINGS_MODULE = "graphite.settings"; DJANGO_SETTINGS_MODULE = "graphite.settings";
GRAPHITE_CONF_DIR = "/etc/graphite/"; GRAPHITE_CONF_DIR = configDir;
GRAPHITE_STORAGE_DIR = dataDir; GRAPHITE_STORAGE_DIR = dataDir;
}; };
serviceConfig = { serviceConfig = {
@ -271,9 +303,40 @@ in {
chown -R graphite:graphite ${cfg.dataDir} chown -R graphite:graphite ${cfg.dataDir}
fi fi
''; '';
restartTriggers = [ };
pkgs.python27Packages.graphite_web
]; systemd.services.graphiteApi = {
enable = cfg.api.enable;
description = "Graphite Api Interface";
wantedBy = [ "multi-user.target" ];
after = [ "network-interfaces.target" ];
environment = {
PYTHONPATH =
"${pkgs.python27Packages.graphite_api}/lib/python2.7/site-packages:" +
concatMapStringsSep ":" (f: f + "/lib/python2.7/site-packages") cfg.api.finders;
GRAPHITE_API_CONFIG = graphiteApiConfig;
LD_LIBRARY_PATH = "${pkgs.cairo}/lib";
};
serviceConfig = {
ExecStart = ''
${pkgs.python27Packages.waitress}/bin/waitress-serve \
--host=${cfg.web.host} --port=${toString cfg.web.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/
touch ${dataDir}/db-created
chown -R graphite:graphite ${cfg.dataDir}
fi
'';
}; };
environment.systemPackages = [ environment.systemPackages = [

View File

@ -10372,9 +10372,10 @@ rec {
graphite_api = buildPythonPackage rec { graphite_api = buildPythonPackage rec {
name = "graphite-api-1.0.1"; name = "graphite-api-1.0.1";
src = fetchurl { src = fetchgit {
url = "https://pypi.python.org/packages/source/g/graphite-api/${name}.tar.gz"; url = "https://github.com/brutasse/graphite-api.git";
md5 = "466c13a902744bed09a054da452140f0"; rev = "b6f75e8a08fae695c094fece6de611b893fc65fb";
sha256 = "41b90d5f35e99a020a6b1b77938690652521d1841b3165574fcfcee807ce4e6a";
}; };
# ImportError: No module named tests # ImportError: No module named tests
@ -10410,6 +10411,8 @@ rec {
propagatedBuildInputs = [ influxdb graphite_api ]; propagatedBuildInputs = [ influxdb graphite_api ];
passthru.moduleName = "graphite_influxdb.InfluxdbFinder";
meta = { meta = {
description = "An influxdb backend for Graphite-web and graphite-api"; description = "An influxdb backend for Graphite-web and graphite-api";
homepage = https://github.com/vimeo/graphite-influxdb; homepage = https://github.com/vimeo/graphite-influxdb;