
# Prometheus Install

    module.exports = header: 'Grafana WEBUi Install', handler: ({options}) ->
      rpm_archive = '/tmp/grafana'

## Wait for database to listen

      @call '@rybajs/metal/commons/db_admin/wait', once: true, options.wait_db_admin

## Identities

      @system.group header: 'Group', options.group
      @system.user header: 'User', options.user

## IPTables

| Service    | Port  | Proto  | Parameter          |
|------------|-------|--------|--------------------|
| Grafana UI | 3000  | https  | server.http_port  |

      @tools.iptables
        header: 'IPTables'
        if: options.iptables
        rules: [
          { chain: 'INPUT', jump: 'ACCEPT', dport: options.ini['server']['http_port'] , protocol: 'tcp', state: 'NEW', comment: "Grafana Port" }
        ]

## Packages

      @call
        header: 'Packages'
      , ->
        @service
          name: 'grafana'
        @call
          if_os: name: ['redhat','centos'], version: '7'
        , ->
          @service.init
            source: "#{__dirname}/../resources/grafana-webui-systemd.j2"
            target: '/usr/lib/systemd/system/grafana-webui.service'
            context: options
            mode: 0o0640
            local: true
            eof: true
          @system.tmpfs
            mount: options.run_dir
            uid: options.user.name
            gid: options.group.name
            perm: '0750'

## Environment

      @file
        header: 'Environment'
        target: "#{options.conf_dir}/grafana-server"
        write: for k, v of options.env
          match: RegExp "^#{quote k}=.*$", 'mg'
          replace: "#{k}=#{v}"
          append: true
        backup: true
        eof: true
        mode: 0o0750
        uid: options.user.name
        gid: options.group.name

## SQL Connectors

      @service
        header: 'mysql client'
        if: options.db.engine in ['mariadb', 'mysql']
        name: 'mysql'
      @service
        header: 'postgres client'
        if: options.db.engine is 'postgresql'
        name: 'postgresql'

## DB

      @call header: 'Grafana DB', ->
        @db.user options.db, database: null,
          header: 'User'
          if: options.db.engine in ['mariadb', 'postgresql', 'mysql']
        @db.database options.db,
          header: 'Database'
          user: options.db.username
          if: options.db.engine in ['mariadb', 'postgresql', 'mysql']
        @db.schema options.db,
          header: 'Schema'
          if: options.db.engine is 'postgresql'
          schema: options.db.schema or options.db.database
          database: options.db.database
          owner: options.db.username

## SSL

      @file.download
        header: 'SSL Cert'
        source: options.ssl.cert.source
        target: options.ini['server']['cert_file']
        local: options.ssl.cert.local
      @file.download
        header: 'SSL Key'
        source: options.ssl.key.source
        target: options.ini['server']['cert_key']
        local: options.ssl.key.local

## Configuration File

      @file.ini
        header: 'Grafana ini'
        target: "#{options.conf_dir}/grafana.ini"
        content: options.ini
        backup: true
        uid: options.user.name
        gid: options.group.name
        mode: 0o0640

## Dependencies

    quote = require 'regexp-quote'
    misc = require '@nikitajs/core/lib/misc'
