---
- name: Ensure Megabyte Labs configuration directory exists
  file:
    mode: 0700
    path: "{{ item }}"
    state: directory
  loop:
    - ~/.config
    - ~/.config/megabytelabs

- name: Download the netdata kickstart.sh file
  get_url:
    url: https://my-netdata.io/kickstart.sh
    dest: ~/.config/megabytelabs/netdata-kickstart.sh
  register: kickstart_file

- name: "Ensure {{ app_name }} is installed and up-to-date" # noqa 301 503
  command: bash ~/.config/megabytelabs/netdata-kickstart.sh --dont-wait --stable-channel --disable-telemetry
  register: netdata_install
  when: kickstart_file.changed

- name: Determine whether or not to add kernel optimizations for netdata
  set_fact:
    kernel_deduper: "{{ (netdata_install is defined) and (netdata_install.stdout is defined) \
      and ('You have a kernel memory de-duper' in netdata_install.stdout) }}"

- name: "Add optimization for kernel memory de-duper (/sys/kernel/mm/ksm/run)"
  command: echo 1 >/sys/kernel/mm/ksm/run
  when: kernel_deduper

- name: "Add optimization for kernel memory de-duper (/sys/kernel/mm/ksm/sleep_millisecs)"
  command: echo 1000 >/sys/kernel/mm/ksm/sleep_millisecs
  when: kernel_deduper

- name: Ensure JOBS section is enabled in the config file
  lineinfile:
    path: /etc/netdata/go.d/wmi.conf
    regex: "^ [JOBS]"
    line: " [JOBS]"
  when: monitor_windows

- name: Configure WMI to add Windows servers to monitoring
  blockinfile:
    path: /etc/netdata/go.d/wmi.conf
    insertafter: "^ [ JOBS ]"
    block: |
      jobs:
      {% for item in netdata_win_setting %}
        - name: {{ item.name }}
          url: http://{{ item.ip }}:9182/metrics"
      {% endfor %}
  when: monitor_windows

- name: Restart netdata
  service:
    name: netdata
    state: restarted
  when: kernel_deduper

- name: Check if netdata instance was claimed by netdata.cloud
  stat:
    path: ~/.config/megabytelabs/netdata-claimed
  register: netdata_claim

- name: Wait for netdata to stabilize
  wait_for:
    timeout: 3
  when:
    - not netdata_claim.stat.exists
    - netdata_room is defined
    - netdata_token is defined

- name: Add instance to netdata cloud
  command: "netdata-claim.sh -token={{ netdata_token }} -rooms={{ netdata_room }} -url={{ netdata_claim_url }}"
  args:
    creates: ~/.config/megabytelabs/netdata-claimed
  ignore_errors: true
  register: netdata_claimed_status
  when:
    - not netdata_claim.stat.exists
    - netdata_room is defined
    - netdata_token is defined

- name: Create configuration if the netdata claim was successful
  file:
    mode: 0600
    path: ~/.config/megabytelabs/netdata-claimed
    state: touch
  when:
    - not (netdata_claimed_status.failed | default(false))
    - not (netdata_claimed_status.skipped | default(false))
