graphite: Refactor options, serve with waitress
This commit is contained in:
parent
b244a47185
commit
4628fd8434
@ -13,13 +13,34 @@ in {
|
|||||||
###### interface
|
###### interface
|
||||||
|
|
||||||
options.services.graphite = {
|
options.services.graphite = {
|
||||||
carbon = mkOption {
|
web = {
|
||||||
|
enable = mkOption {
|
||||||
|
description = "Whether to enable graphite web frontend";
|
||||||
|
default = false;
|
||||||
|
type = types.uniq types.bool;
|
||||||
|
};
|
||||||
|
|
||||||
|
host = mkOption {
|
||||||
|
description = "Graphite web frontend listen address";
|
||||||
|
default = "127.0.0.1";
|
||||||
|
types = type.uniq types.string;
|
||||||
|
};
|
||||||
|
|
||||||
|
port = mkOption {
|
||||||
|
description = "Graphite web frontend port";
|
||||||
|
default = "8080";
|
||||||
|
types = type.uniq types.string;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
carbon = {
|
||||||
|
config = mkOption {
|
||||||
description = "Content of carbon configuration file";
|
description = "Content of carbon configuration file";
|
||||||
default = "";
|
default = "";
|
||||||
type = types.uniq types.string;
|
type = types.uniq types.string;
|
||||||
};
|
};
|
||||||
|
|
||||||
enableCarbonCache = mkOption {
|
enableCache = mkOption {
|
||||||
description = "Whether to enable carbon cache, the graphite storage daemon";
|
description = "Whether to enable carbon cache, the graphite storage daemon";
|
||||||
default = false;
|
default = false;
|
||||||
type = types.uniq types.bool;
|
type = types.uniq types.bool;
|
||||||
@ -73,7 +94,7 @@ in {
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
enableCarbonRelay = mkOption {
|
enableRelay = mkOption {
|
||||||
description = "Whether to enable carbon relay, the carbon replication and sharding service";
|
description = "Whether to enable carbon relay, the carbon replication and sharding service";
|
||||||
default = false;
|
default = false;
|
||||||
type = types.uniq types.bool;
|
type = types.uniq types.bool;
|
||||||
@ -90,7 +111,7 @@ in {
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
enableCarbonAggregator = mkOption {
|
enableAggregator = mkOption {
|
||||||
description = "Whether to enable carbon agregator, the carbon buffering service";
|
description = "Whether to enable carbon agregator, the carbon buffering service";
|
||||||
default = false;
|
default = false;
|
||||||
type = types.uniq types.bool;
|
type = types.uniq types.bool;
|
||||||
@ -105,38 +126,32 @@ in {
|
|||||||
<env>.applications.<app>.all.latency (60) = avg <env>.applications.<app>.*.latency
|
<env>.applications.<app>.all.latency (60) = avg <env>.applications.<app>.*.latency
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
enableGraphiteWeb = mkOption {
|
|
||||||
description = "Whether to enable graphite web frontend";
|
|
||||||
default = false;
|
|
||||||
type = types.uniq types.bool;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
###### implementation
|
###### implementation
|
||||||
|
|
||||||
config = mkIf (cfg.enableCarbonAggregator || cfg.enableCarbonCache || cfg.enableCarbonRelay || cfg.enableGraphiteWeb) {
|
config = mkIf (cfg.carbon.enableAggregator || cfg.carbon.enableCache || cfg.cabon.enableRelay || cfg.web.enable) {
|
||||||
environment.etc = lists.filter (el: el.source != null) [
|
environment.etc = lists.filter (el: el.source != null) [
|
||||||
{ source = writeTextOrNull "carbon.conf" cfg.carbon;
|
{ source = writeTextOrNull "carbon.conf" cfg.carbon.config;
|
||||||
target = "graphite/carbon.conf"; }
|
target = "graphite/carbon.conf"; }
|
||||||
{ source = writeTextOrNull "storage-agregation.conf" cfg.storageAggregation;
|
{ source = writeTextOrNull "storage-agregation.conf" cfg.carbon.storageAggregation;
|
||||||
target = "graphite/storage-agregation.conf"; }
|
target = "graphite/storage-agregation.conf"; }
|
||||||
{ source = writeTextOrNull "storage-schemas.conf" cfg.storageSchemas;
|
{ source = writeTextOrNull "storage-schemas.conf" cfg.carbon.storageSchemas;
|
||||||
target = "graphite/storage-schemas.conf"; }
|
target = "graphite/storage-schemas.conf"; }
|
||||||
{ source = writeTextOrNull "blacklist.conf" cfg.blacklist;
|
{ source = writeTextOrNull "blacklist.conf" cfg.carbon.blacklist;
|
||||||
target = "graphite/blacklist.conf"; }
|
target = "graphite/blacklist.conf"; }
|
||||||
{ source = writeTextOrNull "whitelist.conf" cfg.whitelist;
|
{ source = writeTextOrNull "whitelist.conf" cfg.carbon.whitelist;
|
||||||
target = "graphite/whitelist.conf"; }
|
target = "graphite/whitelist.conf"; }
|
||||||
{ source = writeTextOrNull "rewrite-rules.conf" cfg.rewriteRules;
|
{ source = writeTextOrNull "rewrite-rules.conf" cfg.carbon.rewriteRules;
|
||||||
target = "graphite/rewrite-rules.conf"; }
|
target = "graphite/rewrite-rules.conf"; }
|
||||||
{ source = writeTextOrNull "relay-rules.conf" cfg.relayRules;
|
{ source = writeTextOrNull "relay-rules.conf" cfg.carbon.relayRules;
|
||||||
target = "graphite/relay-rules.conf"; }
|
target = "graphite/relay-rules.conf"; }
|
||||||
{ source = writeTextOrNull "aggregation-rules.conf" cfg.aggregationRules;
|
{ source = writeTextOrNull "aggregation-rules.conf" cfg.carbon.aggregationRules;
|
||||||
target = "graphite/aggregation-rules.conf"; }
|
target = "graphite/aggregation-rules.conf"; }
|
||||||
];
|
];
|
||||||
|
|
||||||
systemd.services.carbonCache = mkIf cfg.enableCarbonCache {
|
systemd.services.carbonCache = mkIf cfg.carbon.enableCache {
|
||||||
description = "Graphite data storage backend";
|
description = "Graphite data storage backend";
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
after = [ "network-interfaces.target" ];
|
after = [ "network-interfaces.target" ];
|
||||||
@ -150,15 +165,15 @@ in {
|
|||||||
Group = "graphite";
|
Group = "graphite";
|
||||||
};
|
};
|
||||||
restartTriggers = [
|
restartTriggers = [
|
||||||
pkgs.pythonPackages.carbon cfg.carbon
|
pkgs.pythonPackages.carbon cfg.carbon.config cfg.carbon.storageAggregation
|
||||||
cfg.storageAggregation cfg.storageSchemas cfg.rewriteRules
|
cfg.carbon.storageSchemas cfg.carbon.rewriteRules
|
||||||
];
|
];
|
||||||
preStart = ''
|
preStart = ''
|
||||||
mkdir -p ${dataDir}/whisper
|
mkdir -p ${dataDir}/whisper
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.carbonAggregator = mkIf cfg.enableCarbonAggregator {
|
systemd.services.carbonAggregator = mkIf cfg.carbon.enableAggregator {
|
||||||
description = "Carbon data aggregator";
|
description = "Carbon data aggregator";
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
after = [ "network-interfaces.target" ];
|
after = [ "network-interfaces.target" ];
|
||||||
@ -171,10 +186,12 @@ in {
|
|||||||
User = "graphite";
|
User = "graphite";
|
||||||
Group = "graphite";
|
Group = "graphite";
|
||||||
};
|
};
|
||||||
restartTriggers = [ pkgs.pythonPackages.carbon cfg.carbon cfg.aggregationRules ];
|
restartTriggers = [
|
||||||
|
pkgs.pythonPackages.carbon cfg.carbon.config cfg.carbon.aggregationRules
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.carbonRelay = mkIf cfg.enableCarbonRelay {
|
systemd.services.carbonRelay = mkIf cfg.carbon.enableRelay {
|
||||||
description = "Carbon data relay";
|
description = "Carbon data relay";
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
after = [ "network-interfaces.target" ];
|
after = [ "network-interfaces.target" ];
|
||||||
@ -187,19 +204,26 @@ in {
|
|||||||
User = "graphite";
|
User = "graphite";
|
||||||
Group = "graphite";
|
Group = "graphite";
|
||||||
};
|
};
|
||||||
restartTriggers = [ pkgs.pythonPackages.carbon cfg.carbon cfg.relayRules ];
|
restartTriggers = [
|
||||||
|
pkgs.pythonPackages.carbon cfg.carbon.config cfg.carbon.relayRules
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.graphiteWeb = mkIf cfg.enableGraphiteWeb {
|
systemd.services.graphiteWeb = mkIf cfg.web.enable {
|
||||||
description = "Graphite web interface";
|
description = "Graphite web interface";
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
after = [ "network-interfaces.target" ];
|
after = [ "network-interfaces.target" ];
|
||||||
environment = {
|
environment = {
|
||||||
|
PYTHONPATH = "${pkgs.python27Packages.graphite_web}/lib/python2.7/site-packages";
|
||||||
|
DJANGO_SETTINGS_MODULE = "graphite.settings";
|
||||||
GRAPHITE_CONF_DIR = "/etc/graphite/";
|
GRAPHITE_CONF_DIR = "/etc/graphite/";
|
||||||
GRAPHITE_STORAGE_DIR = "${dataDir}";
|
GRAPHITE_STORAGE_DIR = "${dataDir}";
|
||||||
};
|
};
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
ExecStart = "${pkgs.pythonPackages.graphite_web}/bin/run-graphite-devel-server.py ${pkgs.pythonPackages.graphite_web}";
|
ExecStart = ''
|
||||||
|
${pkgs.python27Packages.waitress}/bin/waitress-serve \
|
||||||
|
--host=${cfg.web.host} --port=${cfg.web.port} \
|
||||||
|
--call django.core.handlers.wsgi:WSGIHandler'';
|
||||||
User = "graphite";
|
User = "graphite";
|
||||||
Group = "graphite";
|
Group = "graphite";
|
||||||
};
|
};
|
||||||
@ -208,19 +232,22 @@ in {
|
|||||||
mkdir -p ${dataDir}/{whisper/,log/webapp/}
|
mkdir -p ${dataDir}/{whisper/,log/webapp/}
|
||||||
|
|
||||||
# populate database
|
# populate database
|
||||||
${pkgs.pythonPackages.graphite_web}/bin/manage-graphite.py syncdb --noinput
|
${pkgs.python27Packages.graphite_web}/bin/manage-graphite.py syncdb --noinput
|
||||||
|
|
||||||
# create index
|
# create index
|
||||||
${pkgs.pythonPackages.graphite_web}/bin/build-index.sh
|
${pkgs.python27Packages.graphite_web}/bin/build-index.sh
|
||||||
|
|
||||||
touch ${dataDir}/db-created
|
touch ${dataDir}/db-created
|
||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
restartTriggers = [ pkgs.pythonPackages.graphite_web ];
|
restartTriggers = [
|
||||||
|
pkgs.python27Packages.graphite_web pkgs.python27Packages.waitress
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
environment.systemPackages = [
|
environment.systemPackages = [
|
||||||
pkgs.pythonPackages.carbon pkgs.pythonPackages.graphite_web pkgs.pythonPackages.django_1_3
|
pkgs.pythonPackages.carbon pkgs.python27Packages.graphite_web
|
||||||
|
pkgs.python27Packages.waitress
|
||||||
];
|
];
|
||||||
|
|
||||||
users.extraUsers = singleton {
|
users.extraUsers = singleton {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user