---
# Application that populates InfluxDB with metric data.
# https://docs.influxdata.com/telegraf/v1.17/introduction/getting-started/

# Variables #

- name: General | Telegraf | Variables 1/4
  set_fact:
    telegraf_tar: telegraf-1.20.3_linux_amd64.tar.gz
    telegraf_path: /usr/local/bin
    telegraf_config_path: /usr/local/etc
    telegraf_user: "{{ user_ansible.name }}"
    telegraf_log: "{{ user_ansible.home }}/telegraf.log"

- name: General | Telegraf | Variables 2/4
  set_fact:
    telegraf_exec: "{{ telegraf_path }}/telegraf"
    telegraf_config: "{{ telegraf_config_path }}/telegraf.conf"

- name: General | Telegraf | Variables 3/4
  set_fact:
    telegraf_cmd: "{{ telegraf_exec }} --config {{ telegraf_config }} >> {{ telegraf_log }} 2>&1"

- name: General | Telegraf | Variables 4/4
  set_fact:
    telegraf_watcher: "killall telegraf; {{ telegraf_cmd }}"

- name: General | Telegraf | Variables | Linux
  set_fact:
    telegraf_input_temp: "[[inputs.temp]]"
  when: ansible_system == "Linux"

- name: General | Telegraf | Variables | FreeBSD
  set_fact:
    telegraf_input_temp: ""
  when: ansible_system == "FreeBSD"

# 2024-05-23 Server has not been running for a while, stop installing this.

#### Dependencies #
###
###- name: General | Telegraf | Pre-Reqs
###  package:
###    name: wget
###  when: ansible_system == "Linux"
###
#### Install #
###
###- name: General | Telegraf | Linux | Install
###  shell: "{{ item }}"
###  args:
###    chdir: "{{ ansible_env.HOME }}/Downloads/"
###  loop:
###    - mkdir -p {{ telegraf_path }}
###    - mkdir -p {{ telegraf_config_path }}
###    - wget --no-check-certificate "https://dl.influxdata.com/telegraf/releases/{{ telegraf_tar }}"
###    - tar xvf {{ telegraf_tar }}
###    - mv {{ telegraf_tar }} ~/TRASH/
###    - mv telegraf*/usr/bin/telegraf {{ telegraf_exec }}
###    - rm -r telegraf*
###  when: ansible_system == "Linux"
###
###- name: General | Telegraf | FreeBSD | Install 1/2
###  shell: /usr/sbin/pwd_mkdb -p /etc/master.passwd
###  when: ansible_system == "FreeBSD"
###
###- name: General | Telegraf | FreeBSD | Install 2/2
###  package:
###    name: telegraf
###  when: ansible_system == "FreeBSD"
###
#### Configuration #
###
###- name: General | Telegraf | Config 1/2
###  shell: mv {{ telegraf_config }} ~/TRASH/
###  ignore_errors: yes
###
###- name: General | Telegraf | Config 2/2
###  blockinfile:
###    path: "{{ telegraf_config }}"
###    block: |
###      [global_tags]
###        # dc = "us-east-1" # will tag all metrics with dc=us-east-1
###        # rack = "1a"
###        ## Environment variables can be used as tags, and throughout the config file
###        # user = "$USER"
###
###      [agent]
###        interval = "{{ '300s' if battery else '5s' }}"
###        metric_batch_size = 1000
###        metric_buffer_limit = 10000
###        collection_jitter = "0s"
###        flush_interval = "30s"
###        flush_jitter = "10s"
###        precision = ""
###        # debug = false
###        # quiet = false
###        # logtarget = "file"
###        # logfile = ""
###        # logfile_rotation_interval = "0d"
###        # logfile_rotation_max_size = "0MB"
###        # logfile_rotation_max_archives = 5
###        hostname = ""
###        omit_hostname = false
###
###      [[outputs.influxdb]]
###        urls = ["http://192.168.1.82:8086"]
###        database = "main"
###        # database_tag = ""
###        # exclude_database_tag = false
###        # skip_database_creation = false
###        # retention_policy = ""
###        # retention_policy_tag = ""
###        # exclude_retention_policy_tag = false
###        # write_consistency = "any"
###        # timeout = "5s"
###        # username = "telegraf"
###        # password = "metricsmetricsmetricsmetrics"
###        # user_agent = "telegraf"
###        # udp_payload = "512B"
###        # tls_ca = "/etc/telegraf/ca.pem"
###        # tls_cert = "/etc/telegraf/cert.pem"
###        # tls_key = "/etc/telegraf/key.pem"
###        # insecure_skip_verify = false
###        # http_proxy = "http://corporate.proxy:3128"
###        # http_headers = {"X-Special-Header" = "Special-Value"}
###        # content_encoding = "gzip"
###        # influx_uint_support = false
###
###      [[inputs.cpu]]
###        percpu = false
###        totalcpu = true
###        collect_cpu_time = false
###        report_active = false
###
###      [[inputs.disk]]
###        # mount_points = ["/"]
###        ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs", "fdescfs", "procfs", "nullfs"]
###
###      [[inputs.diskio]]
###        # devices = ["sda", "sdb", "vd*"]
###        # skip_serial_number = false
###        # device_tags = ["ID_FS_TYPE", "ID_FS_USAGE"]
###        # name_templates = ["$ID_FS_LABEL","$DM_VG_NAME/$DM_LV_NAME"]
###
###      [[inputs.kernel]]
###
###      [[inputs.mem]]
###
###      [[inputs.processes]]
###
###      [[inputs.swap]]
###
###      [[inputs.system]]
###        # fielddrop = ["uptime_format"]
###
###      {{ telegraf_input_temp }}
###
###    marker: '# {mark} MANAGED BY ANSIBLE - telegraf.yml'
###    state: present
###    create: yes

# Run #

- name: General | Telegraf | Schedule
  cron:
    user: "{{ telegraf_user }}"
    name: "{{ item.name }}"
    job: "{{ item.command }}"
    special_time: "{{ item.freq }}"
    state: present
    #disabled: "{{ 'yes' if no_telem else 'no' }}"
    disabled: yes # 2024-01-25, Downsizing again and will not have Graphana.
  loop:
    - { "name": "Telegraf Reboot Job"    , "freq": "reboot", "command": "{{ telegraf_cmd }}"}
    - { "name": "Telegraf Keep-Alive Job", "freq": "hourly", "command": "{{ telegraf_watcher }}"}