# Path: fabgis/common.py
# def setup_env():
#     """Things to do regardless of whether command is local or remote.
# 
#     Todo - many of these env.fg settings should be module specific...
# 
#     """
#     if env.fg is not None:
#         fastprint('Environment already set!\n')
#         return
# 
#     fastprint('Setting environment!\n')
#     env.fg = fdict()
#     with hide('output'):
#         env.fg.user = run('whoami')
#         # Workaround for
#         env.fg.hostname = run('hostname')
#         # this which fails in docker - see
#         # https://github.com/dotcloud/docker/issues/1301
#         #env.fg.hostname = fabtools.system.get_hostname()
#         env.fg.home = os.path.join('/home/', env.fg.user)
#         env.fg.workspace = os.path.join(env.fg.home, 'dev')
#         env.fg.inasafe_git_url = 'git://github.com/AIFDR/inasafe.git'
#         env.fg.qgis_git_url = 'git://github.com/qgis/QGIS.git'
#         env.fg.kandan_git_url = 'git://github.com/kandanapp/kandan.git'
#         env.fg.gdal_svn_url = 'https://svn.osgeo.org/gdal/trunk/gdal'
#         env.fg.inasafe_checkout_alias = 'inasafe-fabric'
#         env.fg.qgis_checkout_alias = 'qgis-fabric'
#         env.fg.inasafe_code_path = os.path.join(
#             env.fg.workspace, env.fg.inasafe_checkout_alias)
#         env.fg.qgis_code_path = os.path.join(
#             env.fg.workspace, env.fg.qgis_checkout_alias)
# 
# Path: fabgis/utilities.py
# def replace_tokens(conf_file, tokens):
#     """Deprecated: prepare a template config file by replacing its tokens.
# 
#     :param conf_file: Either a full path to a conf file name or just the
#         file name. In the latter case, it assumes the file is then in the
#         current working directory. It the file name ends in '.templ',
#         a copy will be made and the takens replaced in the copy. Otherwise
#         the original file will be manipulated.
#     :type conf_file: str
# 
#     :param tokens: A dictionary of key-values that should be replaced
#         in the conf file.
#     :type tokens: dic
# 
#     :returns: Path to the replaced file.
#     :rtype: str
# 
#     Example tokens::
# 
#         my_tokens = {
#             'SERVERNAME': env.doc_site_name,  # Web Url e.g. foo.com
#             'WEBMASTER': 'werner@linfiniti.com',  # email of web master
#             'DOCUMENTROOT': webdir,  # Content root .e.g. /var/www
#             'SITENAME': sitename,  # Choosen name of jenkins 'root'
#         }
# 
#     .. deprecated:: You should use fabric.contrib.files.upload_template rather.
#     """
# 
#     if '.templ' == conf_file[-6:]:
#         templ_file = conf_file
#         conf_file = conf_file.replace('.templ', '')
#         sudo(
#             'cp %(templ_file)s %(conf_file)s' % {
#             'templ_file': templ_file,
#             'conf_file': conf_file})
# 
#     base_path, file_name = os.path.split(conf_file)
#     if base_path is not '':
#         # The file is not in the current working dir.
#         with cd(base_path):
#             for key, value in tokens.iteritems():
#                 sudo('sed -i.bak -r -e "s/\[%s\]/%s/g" %s' % (
#                     key, value, file_name))
#             sudo('rm %s.bak' % file_name)
#     else:
#         # filename only, not full path - assumes the current working dir is
#         # the same as where the conf file is located
#         for key, value in tokens.iteritems():
#             sudo('sed -i.bak -r -e "s/\[%s\]/%s/g" %s' % (
#                 key, value, file_name))
#             sudo('rm %s.bak' % file_name)
#     return conf_file
# 
# Path: fabgis/system.py
# def get_ip_address():
#     """Get the ip address of the remote host.
# 
#     :returns: Ip address of the remote host.
#     :rtype: str
#     """
#     host_ip = sudo(
#         "ifconfig eth0 | grep 'inet addr:'| "
#         "cut -d: -f2 | awk '{print $1}'")
#     return host_ip


import os
from fabric.api import fastprint, task, sudo, run, cd, env, put
from fabtools.files import exists
from fabtools import require
from .common import setup_env
from .utilities import replace_tokens
from .system import get_ip_address

    :param ui_port: Port on which the tilestream ui should be available.
    :type ui_port: int

    :param tiles_port: Port on which tilestream tile service should be
        available. You may want to use a different port here and then run a
        CDN such as cloudflare in front of the tile service.
    :type tiles_port: int

    :param tile_host: Host name under which the service will run. Must match the
        hostname to which requests are made (even if you run it behind mod
        proxy). If none it will be set to the IP address of the tile_host.
    :type tile_host: str
    """
    setup_env()
    params = _build_parameters(tile_host, tile_dir, tiles_port, ui_port)
    template_file = 'tilestream.templ'
    template_path = os.path.abspath(os.path.join(
        os.path.dirname(__file__),
        os.path.pardir,
        'fabgis_resources',
        'server_config',
        'tilestream',
        '%s' % template_file
    ))
    remote_path = '/tmp/%s' % template_file
    fastprint(template_path, remote_path)
    put(template_path, remote_path)
    binary = 'index.js'
    if not tile_host:

# Path: fabgis/common.py
# def setup_env():
#     """Things to do regardless of whether command is local or remote.
# 
#     Todo - many of these env.fg settings should be module specific...
# 
#     """
#     if env.fg is not None:
#         fastprint('Environment already set!\n')
#         return
# 
#     fastprint('Setting environment!\n')
#     env.fg = fdict()
#     with hide('output'):
#         env.fg.user = run('whoami')
#         # Workaround for
#         env.fg.hostname = run('hostname')
#         # this which fails in docker - see
#         # https://github.com/dotcloud/docker/issues/1301
#         #env.fg.hostname = fabtools.system.get_hostname()
#         env.fg.home = os.path.join('/home/', env.fg.user)
#         env.fg.workspace = os.path.join(env.fg.home, 'dev')
#         env.fg.inasafe_git_url = 'git://github.com/AIFDR/inasafe.git'
#         env.fg.qgis_git_url = 'git://github.com/qgis/QGIS.git'
#         env.fg.kandan_git_url = 'git://github.com/kandanapp/kandan.git'
#         env.fg.gdal_svn_url = 'https://svn.osgeo.org/gdal/trunk/gdal'
#         env.fg.inasafe_checkout_alias = 'inasafe-fabric'
#         env.fg.qgis_checkout_alias = 'qgis-fabric'
#         env.fg.inasafe_code_path = os.path.join(
#             env.fg.workspace, env.fg.inasafe_checkout_alias)
#         env.fg.qgis_code_path = os.path.join(
#             env.fg.workspace, env.fg.qgis_checkout_alias)
# 
# Path: fabgis/utilities.py
# def replace_tokens(conf_file, tokens):
#     """Deprecated: prepare a template config file by replacing its tokens.
# 
#     :param conf_file: Either a full path to a conf file name or just the
#         file name. In the latter case, it assumes the file is then in the
#         current working directory. It the file name ends in '.templ',
#         a copy will be made and the takens replaced in the copy. Otherwise
#         the original file will be manipulated.
#     :type conf_file: str
# 
#     :param tokens: A dictionary of key-values that should be replaced
#         in the conf file.
#     :type tokens: dic
# 
#     :returns: Path to the replaced file.
#     :rtype: str
# 
#     Example tokens::
# 
#         my_tokens = {
#             'SERVERNAME': env.doc_site_name,  # Web Url e.g. foo.com
#             'WEBMASTER': 'werner@linfiniti.com',  # email of web master
#             'DOCUMENTROOT': webdir,  # Content root .e.g. /var/www
#             'SITENAME': sitename,  # Choosen name of jenkins 'root'
#         }
# 
#     .. deprecated:: You should use fabric.contrib.files.upload_template rather.
#     """
# 
#     if '.templ' == conf_file[-6:]:
#         templ_file = conf_file
#         conf_file = conf_file.replace('.templ', '')
#         sudo(
#             'cp %(templ_file)s %(conf_file)s' % {
#             'templ_file': templ_file,
#             'conf_file': conf_file})
# 
#     base_path, file_name = os.path.split(conf_file)
#     if base_path is not '':
#         # The file is not in the current working dir.
#         with cd(base_path):
#             for key, value in tokens.iteritems():
#                 sudo('sed -i.bak -r -e "s/\[%s\]/%s/g" %s' % (
#                     key, value, file_name))
#             sudo('rm %s.bak' % file_name)
#     else:
#         # filename only, not full path - assumes the current working dir is
#         # the same as where the conf file is located
#         for key, value in tokens.iteritems():
#             sudo('sed -i.bak -r -e "s/\[%s\]/%s/g" %s' % (
#                 key, value, file_name))
#             sudo('rm %s.bak' % file_name)
#     return conf_file
# 
# Path: fabgis/system.py
# def get_ip_address():
#     """Get the ip address of the remote host.
# 
#     :returns: Ip address of the remote host.
#     :rtype: str
#     """
#     host_ip = sudo(
#         "ifconfig eth0 | grep 'inet addr:'| "
#         "cut -d: -f2 | awk '{print $1}'")
#     return host_ip


# Path: fabgis/tilestream.py
import os
from fabric.api import fastprint, task, sudo, run, cd, env, put
from fabtools.files import exists
from fabtools import require
from .common import setup_env
from .utilities import replace_tokens
from .system import get_ip_address


    :param ui_port: Port on which the tilestream ui should be available.
    :type ui_port: int

    :param tiles_port: Port on which tilestream tile service should be
        available. You may want to use a different port here and then run a
        CDN such as cloudflare in front of the tile service.
    :type tiles_port: int

    :param tile_host: Host name under which the service will run. Must match the
        hostname to which requests are made (even if you run it behind mod
        proxy). If none it will be set to the IP address of the tile_host.
    :type tile_host: str
    """
    setup_env()
    params = _build_parameters(tile_host, tile_dir, tiles_port, ui_port)
    template_file = 'tilestream.templ'
    template_path = os.path.abspath(os.path.join(
        os.path.dirname(__file__),
        os.path.pardir,
        'fabgis_resources',
        'server_config',
        'tilestream',
        '%s' % template_file
    ))
    remote_path = '/tmp/%s' % template_file
    fastprint(template_path, remote_path)
    put(template_path, remote_path)
    binary = 'index.js'
    if not tile_host:

        tile_host = get_ip_address()