diff options
author | Jaka Hudoklin <jakahudoklin@gmail.com> | 2015-03-22 23:12:11 +0100 |
---|---|---|
committer | Jaka Hudoklin <jakahudoklin@gmail.com> | 2015-03-26 20:02:39 +0100 |
commit | 75169aabc37071298a62a25f705029beda3a4e8b (patch) | |
tree | 2dda7f8a0239d59d07932d5f289a0e6d6c310da0 /nixos/modules/services/misc/ripple-data-api.nix | |
parent | 9255f6c0afeb2d9538eb96700e7f7ecb55b52b1d (diff) | |
download | nixpkgs-75169aabc37071298a62a25f705029beda3a4e8b.tar nixpkgs-75169aabc37071298a62a25f705029beda3a4e8b.tar.gz nixpkgs-75169aabc37071298a62a25f705029beda3a4e8b.tar.bz2 nixpkgs-75169aabc37071298a62a25f705029beda3a4e8b.tar.lz nixpkgs-75169aabc37071298a62a25f705029beda3a4e8b.tar.xz nixpkgs-75169aabc37071298a62a25f705029beda3a4e8b.tar.zst nixpkgs-75169aabc37071298a62a25f705029beda3a4e8b.zip |
Add ripple data api package and nixos service
Diffstat (limited to 'nixos/modules/services/misc/ripple-data-api.nix')
-rw-r--r-- | nixos/modules/services/misc/ripple-data-api.nix | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/nixos/modules/services/misc/ripple-data-api.nix b/nixos/modules/services/misc/ripple-data-api.nix new file mode 100644 index 00000000000..6e5ac7ab00b --- /dev/null +++ b/nixos/modules/services/misc/ripple-data-api.nix @@ -0,0 +1,168 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfg = config.services.rippleDataApi; + + deployment_env_config = builtins.toJSON { + production = { + port = toString cfg.port; + maxSockets = 150; + batchSize = 100; + startIndex = 32570; + rippleds = cfg.rippleds; + redis = { + enable = cfg.redis.enable; + host = cfg.redis.host; + port = cfg.redis.port; + options.auth_pass = null; + }; + }; + }; + + db_config = builtins.toJSON { + production = { + username = optional (cfg.couchdb.pass != "") cfg.couchdb.user; + password = optional (cfg.couchdb.pass != "") cfg.couchdb.pass; + host = cfg.couchdb.host; + port = cfg.couchdb.port; + database = cfg.couchdb.db; + protocol = "http"; + }; + }; + +in { + options = { + services.rippleDataApi = { + enable = mkEnableOption "Whether to enable ripple data api."; + + port = mkOption { + description = "Ripple data api port"; + default = 5993; + type = types.int; + }; + + redis = { + enable = mkOption { + description = "Whether to enable caching of ripple data to redis."; + default = true; + type = types.bool; + }; + + host = mkOption { + description = "Ripple data api redis host."; + default = "localhost"; + type = types.str; + }; + + port = mkOption { + description = "Ripple data api redis port."; + default = 5984; + type = types.int; + }; + }; + + couchdb = { + host = mkOption { + description = "Ripple data api couchdb host."; + default = "localhost"; + type = types.str; + }; + + port = mkOption { + description = "Ripple data api couchdb port."; + default = 5984; + type = types.int; + }; + + db = mkOption { + description = "Ripple data api couchdb database."; + default = "rippled"; + type = types.str; + }; + + user = mkOption { + description = "Ripple data api couchdb username."; + default = "rippled"; + type = types.str; + }; + + pass = mkOption { + description = "Ripple data api couchdb password."; + default = ""; + type = types.str; + }; + + create = mkOption { + description = "Whether to create couchdb database needed by ripple data api."; + type = types.bool; + default = true; + }; + }; + + rippleds = mkOption { + description = "List of rippleds to be used by ripple data api."; + default = [ + "http://s_east.ripple.com:51234" + "http://s_west.ripple.com:51234" + ]; + type = types.listOf types.str; + }; + }; + }; + + config = mkIf (cfg.enable) { + services.couchdb.enable = mkDefault true; + services.couchdb.bindAddress = mkDefault "0.0.0.0"; + services.redis.enable = mkDefault true; + + systemd.services.ripple-data-api = { + after = [ "couchdb.service" "redis.service" "ripple-data-api-importer.service" ]; + wantedBy = [ "multi-user.target" ]; + + environment = { + NODE_ENV = "production"; + DEPLOYMENT_ENVS_CONFIG = pkgs.writeText "deployment.environment.json" deployment_env_config; + DB_CONFIG = pkgs.writeText "db.config.json" db_config; + }; + + serviceConfig = { + ExecStart = "${pkgs.ripple-data-api}/bin/api"; + User = "ripple-data-api"; + }; + }; + + systemd.services.ripple-data-importer = { + after = [ "couchdb.service" ]; + wantedBy = [ "multi-user.target" ]; + path = [ pkgs.curl ]; + + environment = { + NODE_ENV = "production"; + DEPLOYMENT_ENVS_CONFIG = pkgs.writeText "deployment.environment.json" deployment_env_config; + DB_CONFIG = pkgs.writeText "db.config.json" db_config; + LOG_FILE = "/dev/null"; + }; + + serviceConfig = { + ExecStart = "${pkgs.ripple-data-api}/bin/importer live debug2"; + User = "ripple-data-api"; + }; + + preStart = mkMerge [ + (mkIf (cfg.couchdb.create) '' + HOST="http://${optionalString (cfg.couchdb.pass != "") "${cfg.couchdb.user}:${cfg.couchdb.pass}@"}${cfg.couchdb.host}:${toString cfg.couchdb.port}" + curl -X PUT $HOST/${cfg.couchdb.db} || true + '') + "${pkgs.ripple-data-api}/bin/update-views" + ]; + }; + + users.extraUsers = singleton + { name = "ripple-data-api"; + description = "Ripple data api user"; + uid = config.ids.uids.ripple-data-api; + }; + }; +} |