Menu

Configure Rexster

  • admin (string | user object) The login name or a user object (see Nikita User documentation).
  • config (object) Object for Rexster configuration (xml) file

Example:

{
  "ryba": {
    "rexster": {
      "admin": {
        "name": "rexster"
        "password": "rexster123"
      },
      "config": {
        "http": {
          [...]
        }
      }
    }
  }
}
module.exports = handler: ->
  require('../titan/configure').handler.call @
  {realm} = @config.ryba
  titan_ctxs = @contexts 'ryba/titan'
  throw Error "Cannot install Rexster without titan" unless titan_ctxs.length
  {titan} = titan_ctxs[0].config.ryba
  rexster = @config.ryba.rexster ?= {}
  rexster.user ?= {}
  rexster.user = name: rexster.user if typeof rexster.user is 'string'
  rexster.user.name ?= 'rexster'
  rexster.user.system ?= true
  rexster.user.gid ?= 'rexster'
  rexster.user.comment ?= 'Rexster User'
  rexster.user.home ?= "#{titan.home}/rexhome"
  # Group
  rexster.group ?= {}
  rexster.group = name: rexster.group if typeof rexster.group is 'string'
  rexster.group.name ?= 'rexster'
  rexster.group.system ?= true
  # Kerberos config
  rexster.krb5_user ?= {}
  rexster.krb5_user.principal ?= "rexster/#{@config.host}@#{realm}"
  rexster.krb5_user.keytab ?= '/etc/security/keytabs/rexster.service.keytab'
  rexster.admin ?= {}
  rexster.admin = name: rexster.admin if typeof rexster.admin is 'string'
  rexster.admin.name ?= 'rexster'
  rexster.admin.password ?= 'rexster123'
  rexster.log_dir ?= '/var/log/rexster'
  config = rexster.config ?= {}
  config.http ?= {}
  config.http['server-port'] ?= 8182
  config.http['server-host'] ?= '0.0.0.0'
  config.http['base-uri'] ?= "http://#{@config.host}"
  config.http['web-root'] ?= 'public'
  config.http['character-set'] ?= "UTF-8"
  config.http['enable-jmx'] ?= false
  config.http['enable-doghouse'] ?= true
  config.http['max-post-size'] ?= 2097152
  config.http['max-header-size'] ?= 8192
  config.http['upload-timeout-millis'] ?= 30000
  config.http['thread-pool'] ?=
    worker:
      "core-size": 8
      "max-size": 8
    kernal:
      "core-size": 4
      "max-size": 4
  config.http['io-strategy'] ?= "leader-follower"
  config.rexpro ?= {}
  config.rexpro['server-port'] ?= 8184
  config.rexpro['server-host'] ?= '0.0.0.0'
  config.rexpro['session-max-idle'] ?= 1790000
  config.rexpro['session-check-interval'] ?= 3000000
  config.rexpro['connection-max-idle'] ?= 180000
  config.rexpro['connection-check-interval'] ?= 3000000
  config.rexpro['read-buffer'] ?= 65536
  config.rexpro['enable-jmx'] ?= false
  config.rexpro['thread-pool'] ?=
    worker:
      'core-size': 8
      'max-size': 8
    kernal:
      'core-size': 4
      'max-size': 4
  config.rexpro['io-strategy'] ?= "leader-follower"

TODO: Security see https://github.com/tinkerpop/rexster/wiki/Rexster-Security

  config['security'] ?=
    authentication:
      type: 'default'

  if config.security.authentication.type is 'default'
    config.security.authentication.configuration ?= {}
    config.security.authentication.configuration.users ?= {}
    config.security.authentication.configuration.users.user ?= []
    config.security.authentication.configuration.users.user = [config.security.authentication.configuration.users.user] unless Array.isArray config.security.authentication.configuration.users.user
    if config.security.authentication.configuration.users.user.length is 0
      config.security.authentication.configuration.users.user.push
        username: rexster.admin.name
        password: rexster.admin.password
  config['shutdown-port'] ?= 8183
  config['shutdown-host'] = "127.0.0.1"
  config['config-check-interval'] ?= 10000
  config['script-engines'] ?= [
    "script-engine":
      "name": "gremlin-groovy"
      "reset-threshold": 500
      "imports": "com.tinkerpop.gremlin.*,com.tinkerpop.gremlin.java.*,com.tinkerpop.gremlin.pipes.filter.*,com.tinkerpop.gremlin.pipes.sideeffect.*,com.tinkerpop.gremlin.pipes.transform.*,com.tinkerpop.blueprints.*,com.tinkerpop.blueprints.impls.*,com.tinkerpop.blueprints.impls.tg.*,com.tinkerpop.blueprints.impls.neo4j.*,com.tinkerpop.blueprints.impls.neo4j.batch.*,com.tinkerpop.blueprints.impls.neo4j2.*,com.tinkerpop.blueprints.impls.neo4j2.batch.*,com.tinkerpop.blueprints.impls.orient.*,com.tinkerpop.blueprints.impls.orient.batch.*,com.tinkerpop.blueprints.impls.dex.*,com.tinkerpop.blueprints.impls.rexster.*,com.tinkerpop.blueprints.impls.sail.*,com.tinkerpop.blueprints.impls.sail.impls.*,com.tinkerpop.blueprints.util.*,com.tinkerpop.blueprints.util.io.*,com.tinkerpop.blueprints.util.io.gml.*,com.tinkerpop.blueprints.util.io.graphml.*,com.tinkerpop.blueprints.util.io.graphson.*,com.tinkerpop.blueprints.util.wrappers.*,com.tinkerpop.blueprints.util.wrappers.batch.*,com.tinkerpop.blueprints.util.wrappers.batch.cache.*,com.tinkerpop.blueprints.util.wrappers.event.*,com.tinkerpop.blueprints.util.wrappers.event.listener.*,com.tinkerpop.blueprints.util.wrappers.id.*,com.tinkerpop.blueprints.util.wrappers.partition.*,com.tinkerpop.blueprints.util.wrappers.readonly.*,com.tinkerpop.blueprints.oupls.sail.*,com.tinkerpop.blueprints.oupls.sail.pg.*,com.tinkerpop.blueprints.oupls.jung.*,com.tinkerpop.pipes.*,com.tinkerpop.pipes.branch.*,com.tinkerpop.pipes.filter.*,com.tinkerpop.pipes.sideeffect.*,com.tinkerpop.pipes.transform.*,com.tinkerpop.pipes.util.*,com.tinkerpop.pipes.util.iterators.*,com.tinkerpop.pipes.util.structures.*,org.apache.commons.configuration.*,com.thinkaurelius.titan.core.*,com.thinkaurelius.titan.core.attribute.*,com.thinkaurelius.titan.core.log.*,com.thinkaurelius.titan.core.olap.*,com.thinkaurelius.titan.core.schema.*,com.thinkaurelius.titan.core.util.*,com.thinkaurelius.titan.example.*,org.apache.commons.configuration.*,com.tinkerpop.gremlin.Tokens.T,com.tinkerpop.gremlin.groovy.*",
      "static-imports": "com.tinkerpop.blueprints.Direction.*,com.tinkerpop.blueprints.TransactionalGraph$Conclusion.*,com.tinkerpop.blueprints.Compare.*,com.thinkaurelius.titan.core.attribute.Geo.*,com.thinkaurelius.titan.core.attribute.Text.*,com.thinkaurelius.titan.core.Cardinality.*,com.thinkaurelius.titan.core.Multiplicity.*,com.tinkerpop.blueprints.Query$Compare.*"
  ]
  config['metrics'] ?= [
      reporter: type:"jmx"
    ,
      reporter: type:"http"
    ,
      reporter:
        type:"console"
        properties:
          "rates-time-unit": "SECONDS"
          "duration-time-unit": "SECONDS"
          "report-period": 10
          "report-time-unit": "MINUTES"
          "includes": "http.rest.*"
          "excludes": "http.rest.*.delete"
  ]
  config.graphs ?= [
    graph:
      'graph-name': 'titan'
      'graph-type': 'com.thinkaurelius.titan.tinkerpop.rexster.TitanGraphConfiguration'
      'graph-read-only': false
      'properties': titan.config
      'extensions': 'allows': 'allow': ['tp:gremlin']
  ]