diff options
| -rw-r--r-- | ansible/roles/munin/tasks/main.yml | 24 | ||||
| -rw-r--r-- | ansible/roles/munin/templates/plugin.conf.j2 | 15 | ||||
| -rw-r--r-- | ansible/roles/munin/templates/plugins/dovecot_maildirs.sh.j2 | 64 | ||||
| -rw-r--r-- | ansible/roles/munin/templates/plugins/lovering_inheritance.py.j2 | 67 | ||||
| -rw-r--r-- | ansible/roles/munin/vars/main.yml | 68 | 
5 files changed, 165 insertions, 73 deletions
diff --git a/ansible/roles/munin/tasks/main.yml b/ansible/roles/munin/tasks/main.yml index aec521f..ab86a43 100644 --- a/ansible/roles/munin/tasks/main.yml +++ b/ansible/roles/munin/tasks/main.yml @@ -33,6 +33,18 @@    notify:      - Restart munin-node service +- name: Template munin plugin configuration file +  template: +    src: plugin.conf.j2 +    dest: /etc/munin/plugin-conf.d/custom +    owner: root +    group: root +    mode: "0444" +  tags: +    - role::munin +  notify: +    - Restart munin-node service +  - name: Enable non-default munin plugins    file:      src: "/usr/share/munin/plugins/{{ item.src }}" @@ -68,15 +80,17 @@      - Restart munin-node service  - name: Copy custom munin plugins -  copy: -    content: "{{ item.value }}" -    dest: /etc/munin/plugins/{{ item.key }} +  template: +    src: "{{ item }}" +    # Split two levels of file extensions +    dest: "/etc/munin/plugins/{{ item | basename | splitext | first | splitext | first }}"      owner: root      group: root      mode: "0555"    loop_control: -    label: "{{ item.key }}" -  loop: "{{ munin_node_custom_plugins | dict2items }}" +    # I love representing data modification logic in YAML! +    label: "{{ item | basename | splitext | first | splitext | first }}" +  with_fileglob: "../templates/plugins/*"    tags:      - role::munin diff --git a/ansible/roles/munin/templates/plugin.conf.j2 b/ansible/roles/munin/templates/plugin.conf.j2 new file mode 100644 index 0000000..9d2c74c --- /dev/null +++ b/ansible/roles/munin/templates/plugin.conf.j2 @@ -0,0 +1,15 @@ +# Ansible managed + +[dovecot_maildirs] +user root +group vmail + +[load] +env.load_warning {{ ansible_processor_nproc * 0.7 }} +env.load_critical {{ ansible_processor_nproc * 0.85 }} + +[memory] +env.apps_warning 70% +env.apps_critical 90% +env.swap_warning 60% +env.swap_critical 80% diff --git a/ansible/roles/munin/templates/plugins/dovecot_maildirs.sh.j2 b/ansible/roles/munin/templates/plugins/dovecot_maildirs.sh.j2 new file mode 100644 index 0000000..b634df3 --- /dev/null +++ b/ansible/roles/munin/templates/plugins/dovecot_maildirs.sh.j2 @@ -0,0 +1,64 @@ +#!/bin/sh +# Ansible managed + +cd /var/vmail || exit 1 + +print_maildir_config() { +    find . -maxdepth 1 -type d \ +        | tail -n +2 \ +        | awk -F / '{ +            print $2 ".draw AREASTACK" +            print $2 ".label " $2 +        }' +} + +if [ "$1" = "autoconf" ]; then +    echo "no" +    exit +fi + +if [ "$1" = "config" ]; then +    cat <<EOF +multigraph dovecot_maildir_sizes +graph_title Dovecot Maildir sizes +graph_args --base 1024 -l 0 +graph_vlabel bytes +graph_category mail +graph_info Shows the sizes of top mail directories by their respective users +graph_total Total +graph_order joe jc +EOF +    print_maildir_config +    cat <<EOF +multigraph dovecot_maildir_mails +graph_title Dovecot mails in maildirs +graph_args --base 1000 -l 0 +graph_vlabel mails +graph_category mail +graph_info Shows the amount of mails by user on our Dovecot server +graph_total Total +graph_order joe jc +EOF +    print_maildir_config +    exit 0 +fi + +echo "multigraph dovecot_maildir_sizes" +du --bytes --summarize -- * \ +    | awk '{ print $2 ".value " $1 }' + +echo "multigraph dovecot_maildir_mails" +find . \ +    | awk -F / ' +        # Maildir e-mails have the hostname contained in them +        $0 ~ "{{ ansible_fqdn }}" { +          total[$2] += 1 +        } +        END { +          for (user in total) { +            print user ".value " total[user] +          } +        } +    ' + +# vim: ft=sh.jinja2: diff --git a/ansible/roles/munin/templates/plugins/lovering_inheritance.py.j2 b/ansible/roles/munin/templates/plugins/lovering_inheritance.py.j2 new file mode 100644 index 0000000..4e6d315 --- /dev/null +++ b/ansible/roles/munin/templates/plugins/lovering_inheritance.py.j2 @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 +# Ansible managed + +import datetime +import random +import sys + +if sys.argv[-1] == "autoconf": +    print("no") +    sys.exit(0) + +if sys.argv[-1] == "config": + +    print("""\ +graph_title Lovering Inheritance +graph_args --base 1000 -l 0 +graph_vlabel £ +graph_category people +graph_info This graph shows the insurance that Chris can cash out. +graph_total Total +savings.label Savings +savings.info Base inheritance money Chris paid into his account in 2024 +savings.draw AREASTACK +interest.label Interest +interest.info Amount of money gained from interest on the base amount +interest.draw AREASTACK +inherited.label Inherited money +inherited.info Amount inherited from deaths of friends, family and victims +inherited.draw AREASTACK\ +    """) +    sys.exit(0) + +# Fixed seed to ensure that the bank jitter is constant +random.seed(1234) +today = datetime.date.today() +savings = 740 +interest_per_day = 0.005 +insurance_policy_start = datetime.date(2024, 8, 28) +days_griefed = (today - insurance_policy_start).days +accrued_interest = 0 +for _ in range(days_griefed): +    bank_jitter = random.random() +    accrued_interest += bank_jitter * (interest_per_day * (savings + accrued_interest)) + +inherited_money = 0 + +if days_griefed > 10: +    # Hassan declared as KIA (he had stocks in Big Oil) +    inherited_money += 10000 + +if days_griefed > 60: +    # Death of Joe (prospect of sale of stolen GPUs) +    inherited_money += 5000 + +if days_griefed > 170: +    # Bella disappears (spent all on chicken and gifts for his wife) +    inherited_money += 300 + +if days_griefed > 360: +    # Lola Banks deploys her Titan missile but burns herself to death +    inherited_money += 12000 + +print(f"savings.value {savings}") +print(f"interest.value {accrued_interest}") +print(f"inherited.value {inherited_money}") + +# vim: ft=python.jinja2: diff --git a/ansible/roles/munin/vars/main.yml b/ansible/roles/munin/vars/main.yml deleted file mode 100644 index 9c8245d..0000000 --- a/ansible/roles/munin/vars/main.yml +++ /dev/null @@ -1,68 +0,0 @@ ---- -munin_node_custom_plugins: -  lovering_inheritance: | -    #!/usr/bin/env python3 -    # Ansible managed - -    import datetime -    import random -    import sys - -    if sys.argv[-1] == "autoconf": -        print("no") -        sys.exit(0) - -    if sys.argv[-1] == "config": - -        print("""\ -    graph_title Lovering Inheritance -    graph_args --base 1000 -l 0 -    graph_vlabel £ -    graph_category people -    graph_info This graph shows the insurance that Chris can cash out. -    graph_total Total -    savings.label Savings -    savings.info Base inheritance money Chris paid into his account in 2024 -    savings.draw AREASTACK -    interest.label Interest -    interest.info Amount of money gained from interest on the base amount -    interest.draw AREASTACK -    inherited.label Inherited money -    inherited.info Amount inherited from deaths of friends, family and victims -    inherited.draw AREASTACK\ -        """) -        sys.exit(0) - -    # Fixed seed to ensure that the bank jitter is constant -    random.seed(1234) -    today = datetime.date.today() -    savings = 740 -    interest_per_day = 0.005 -    insurance_policy_start = datetime.date(2024, 8, 28) -    days_griefed = (today - insurance_policy_start).days -    accrued_interest = 0 -    for _ in range(days_griefed): -        bank_jitter = random.random() -        accrued_interest += bank_jitter * (interest_per_day * (savings + accrued_interest)) - -    inherited_money = 0 - -    if days_griefed > 10: -        # Hassan declared as KIA (he had stocks in Big Oil) -        inherited_money += 10000 - -    if days_griefed > 60: -        # Death of Joe (prospect of sale of stolen GPUs) -        inherited_money += 5000 - -    if days_griefed > 170: -        # Bella disappears (spent all on chicken and gifts for his wife) -        inherited_money += 300 - -    if days_griefed > 360: -        # Lola Banks deploys her Titan missile but burns herself to death -        inherited_money += 12000 - -    print(f"savings.value {savings}") -    print(f"interest.value {accrued_interest}") -    print(f"inherited.value {inherited_money}")  |