
# Configure webhcat server

    module.exports = (service) ->
      options = service.options

## Environment

      # Layout
      options.conf_dir ?= '/etc/hive-webhcat/conf'
      options.log_dir ?= '/var/log/webhcat'
      options.pid_dir ?= '/var/run/webhcat'
      # Opts and Java
      options.java_opts ?= ''
      options.opts ?= {}
      # Misc
      options.fqdn ?= service.node.fqdn
      options.iptables ?= service.deps.iptables and service.deps.iptables.options.action is 'start'
      options.clean_logs ?= false

## Kerberos

      options.krb5 ?= {}
      options.krb5.realm ?= service.deps.krb5_client.options.etc_krb5_conf?.libdefaults?.default_realm
      # throw Error 'Required Options: "realm"' unless options.krb5.realm
      # options.krb5.admin ?= service.deps.krb5_client.options.admin[options.krb5.realm]
      # Kerberos HDFS Admin
      options.hdfs_krb5_user = service.deps.hadoop_core.options.hdfs.krb5_user
      # Kerberos Test Principal
      options.test_krb5_user ?= service.deps.test_user.options.krb5.user

## Identities

      # Hadoop Group
      options.hadoop_group = merge {}, service.deps.hadoop_core.options.hadoop_group, options.hadoop_group
      options.group = merge {}, service.deps.hive_hcatalog[0].options.group, options.group
      options.user = merge {}, service.deps.hive_hcatalog[0].options.user, options.user

## Configuration

      options.webhcat_site ?= {}
      options.webhcat_site['templeton.storage.class'] ?= 'org.apache.hive.hcatalog.templeton.tool.ZooKeeperStorage' # Fix default value distributed in companion files
      options.webhcat_site['templeton.jar'] ?= '/usr/lib/hive-hcatalog/share/options/svr/lib/hive-webhcat-0.13.0.2.1.2.0-402.jar' # Fix default value distributed in companion files
      options.webhcat_site['templeton.hive.properties'] ?= [
        'hive.metastore.local=false'
        "hive.metastore.uris=#{service.deps.hive_hcatalog[0].options.hive_site['hive.metastore.uris'] }"
        'hive.metastore.sasl.enabled=yes'
        'hive.metastore.execute.setugi=true'
        'hive.metastore.warehouse.dir=/apps/hive/warehouse'
        "hive.metastore.kerberos.principal=#{service.deps.hive_hcatalog[0].options.hive_site['hive.metastore.kerberos.principal']}"
      ].join ','
      options.webhcat_site['templeton.zookeeper.hosts'] ?= service.deps.hive_hcatalog[0].options.hive_site['templeton.zookeeper.hosts']
      options.webhcat_site['templeton.kerberos.principal'] ?= "HTTP/#{service.node.fqdn}@#{options.krb5.realm}"
      options.webhcat_site['templeton.kerberos.keytab'] ?= service.deps.hadoop_core.options.core_site['hadoop.http.authentication.kerberos.keytab']
      # The secret used to sign the HTTP cookie value. The default value is a random value. Unless multiple WebHCat instances need to share the secret the random value is adequate.
      options.webhcat_site['templeton.kerberos.secret'] ?= 'secret'
      options.webhcat_site['webhcat.proxyuser.hue.groups'] ?= '*'
      options.webhcat_site['webhcat.proxyuser.hue.hosts'] ?= '*'
      options.webhcat_site['webhcat.proxyuser.knox.groups'] ?= '*'
      options.webhcat_site['webhcat.proxyuser.knox.hosts'] ?= '*'
      options.webhcat_site['templeton.port'] ?= 50111
      options.webhcat_site['templeton.controller.map.mem'] = 1600 # Total virtual memory available to map tasks.

## Logj4 Properties

      options.log4j = merge {}, service.deps.log4j?.options, options.log4j


      options.log4j.properties ?= {}
      options.opts['webhcat.root.logger'] ?= 'INFO,RFA'
      if options.log4j.remote_host and options.log4j.remote_port
        # adding SOCKET appender
        options.log4j.socket_client ?= "SOCKET"
        # Root logger
        if options.opts['webhcat.root.logger'].indexOf(options.log4j.socket_client) is -1
        then options.opts['webhcat.root.logger'] += ",#{options.log4j.socket_client}"

        options.opts['webhcat.log.application'] ?= 'hive-webhcat'
        options.opts['webhcat.log.remote_host'] ?= options.log4j.remote_host
        options.opts['webhcat.log.remote_port'] ?= options.log4j.remote_port

        options.log4j.socket_opts ?=
          Application: '${options.log.application}'
          RemoteHost: '${options.log.remote_host}'
          Port: '${options.log.remote_port}'
          ReconnectionDelay: '10000'

        appender
          type: 'org.apache.log4j.net.SocketAppender'
          name: options.log4j.socket_client
          logj4: options.log4j.properties
          properties: options.log4j.socket_opts

## Wait

      options.wait_krb5_client ?= service.deps.krb5_client.options.wait
      options.wait_zookeeper_server ?= service.deps.zookeeper_server[0].options.wait
      options.wait_hive_hcatalog ?= service.deps.hive_hcatalog[0].options.wait
      options.wait = {}
      options.wait.http = for srv in service.deps.hive_webhcat
        srv.options.webhcat_site ?= {}
        host: srv.node.fqdn
        port: srv.options.webhcat_site['templeton.port'] or 50111

## Dependencies

    appender = require '../../lib/appender'
    {merge} = require '@nikitajs/core/lib/misc'
