-
-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Implement dovecot mail plugin, configure limits
This also moves custom plugins into the `roles/munin/templates/plugins` directory, which should hopefully be easier to maintain than the existing inline dictionary. The only issue is that now it is a bit harder to deal with the filepaths. This change has already been deployed.
- Loading branch information
1 parent
39b99de
commit 670df77
Showing
5 changed files
with
165 additions
and
73 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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% |
64 changes: 64 additions & 0 deletions
64
ansible/roles/munin/templates/plugins/dovecot_maildirs.sh.j2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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: |
67 changes: 67 additions & 0 deletions
67
ansible/roles/munin/templates/plugins/lovering_inheritance.py.j2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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: |
This file was deleted.
Oops, something went wrong.