aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornico <nico@magicbroccoli.de>2018-11-21 18:28:43 +0100
committernico <nico@magicbroccoli.de>2018-11-21 18:29:24 +0100
commite44da25849e6ac0136ceea76e3d4b07c9942e1e8 (patch)
treefd81fb0f920d43da13b0f7cfb0b7c50064ce842f
parent0924a6f49eb03f754052e0de75d53b8fdd575d3b (diff)
ajustments and multigraph additions
+ add storages and filecount to multigraph plugin * ajust dictkeys to match over all plugins * update Readme
-rw-r--r--README.md38
-rwxr-xr-xnextcloud_files.py6
-rwxr-xr-xnextcloud_multi.py48
-rwxr-xr-xnextcloud_storage.py6
4 files changed, 82 insertions, 16 deletions
diff --git a/README.md b/README.md
index 267f9a8..3a503ad 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,10 @@
# Nextcloud Munin Plugin
-Within this repository there are some basic Munin Plugins gathering information from the NextCloud external API. I choose to also include a multigraph plugin `nextcloud_multi` which does everything the other plugins do but in one single request.
+Within this repository there are some basic Munin Plugins gathering information from the NextCloud external API. I choose to also include a multigraph plugin `nextcloud_multi.py` which does everything the other plugins dynamically.
-There are drawbacks to using a multigraph plugin which can be read up here : [Munin-Monitoring.org](http://guide.munin-monitoring.org/en/latest/plugin/multigraphing.html)
+There are requirements for using a multigraph plugin which can be read up here : [Munin-Monitoring.org/multigraphing](http://guide.munin-monitoring.org/en/latest/plugin/multigraphing.html)
## install
-To use these plugins properly some configuration parameters need to be added to the plugin-config `/etc/munin/plugin-config.d/munin-node`.
+To use these plugins properly some configuration parameters need to be added to the plugin-config `/etc/munin/plugin-config.d/custom-config`.
```
[nextcloud_*]
url = https://URL.TO.YOUR.NEXTCLOUD.tld/ocs/v2.php/apps/serverinfo/api/v1/info
@@ -16,25 +16,45 @@ To install these plugins, you just have to symlink those plugins you would like
After this has been done the munin-node needs to be restarted to facilitate the new plugins.
`systemctl restart munin-node`
+It is possible to run the plugins in a virtual environment, for that the environment needs to be initialized and the required packages to be installed.
+```
+virtualenv -p python3 /path/to/your/venv
+
+pip install -r requirements.txt
+```
+
### everything working?
To check if everything is working as expected check if the plugins are listed and actually gather data.
```
telnet localhost 4949 # localhost or IP the munin-node
list
-fetch nextcloud_shares
-fetch nextcloud_users
-fetch nextcloud_db
-fetch nextcloud_apps
+fetch nextcloud_shares.py
+num_fed_shares_received.value 1
+num_shares_link_no_password.value 5
+num_shares_user.value 13
+num_shares.value 21
+num_shares_link.value 5
+num_shares_groups.value 0
+num_fed_shares_sent.value 0
```
If everything works as it should, list will return the symlinked plugins within the list of active plugins.
##### multipgrah plugin
-To check if the multigraph plugin is working correctly it is necessary to first instruct the capability multigraph before the `list` instruction.
+To check if the multigraph plugin is working correctly, it is necessary to first instruct the multigraph capability, before the `list` instruction will list the plugin.
```
telnet localhost 4949 # localhost or IP the munin-node
cap multigraph
list
-fetch nextcloud_multi
+fetch nextcloud_multi.py
+multigraph nextcloud_shares
+num_fed_shares_received.value 1
+num_shares_link_no_password.value 5
+num_shares_user.value 13
+num_shares.value 21
+num_shares_link.value 5
+num_shares_groups.value 0
+num_fed_shares_sent.value 0
+...
```
The `fetch` commands will run the script and return the gathered values. As long as none of them are NaN everything works as expected.
diff --git a/nextcloud_files.py b/nextcloud_files.py
index 226a94f..ee12d77 100755
--- a/nextcloud_files.py
+++ b/nextcloud_files.py
@@ -20,7 +20,7 @@ import os
class NextcloudStorage:
def config(self):
config = {
- 'storage': [
+ 'filecount': [
'graph_title Nextcloud Files',
'graph_args --base 1000 -l 0',
'graph_vlabel number of files',
@@ -36,12 +36,12 @@ class NextcloudStorage:
def get_data(self, api_response):
data = {
- 'nextcloud_storage': [],
+ 'nextcloud_filecount': [],
}
# append the total number of files present
num_files = api_response['ocs']['data']['nextcloud']['storage']['num_files']
- data['nextcloud_storage'].append('num_files.value %s' % num_files)
+ data['nextcloud_filecount'].append('num_files.value %s' % num_files)
return data
diff --git a/nextcloud_multi.py b/nextcloud_multi.py
index 5e4b18e..4598252 100755
--- a/nextcloud_multi.py
+++ b/nextcloud_multi.py
@@ -97,6 +97,37 @@ class NextcloudMultiGraph:
'num_updates_available.info number of available app updates',
'num_updates_available.min 0',
'num_updates_available.warning 1'
+ ],
+ 'storages': [
+ 'multigraph nextcloud_storages',
+ 'graph_title Nextcloud Storages',
+ 'graph_args --base 1000 -l 0',
+ 'graph_vlabel number',
+ 'graph_info graph showing the number of storages',
+ 'graph_category nextcloud',
+ 'num_storages.label total number of storages',
+ 'num_storages.info current over all total of storages',
+ 'num_storages.min 0',
+ 'num_storages_local.label number of local storages',
+ 'num_storages_local.info current over all total of storage',
+ 'num_storages_local.min 0',
+ 'num_storages_home.label number of home storages',
+ 'num_storages_home.info current over all total of storage',
+ 'num_storages_home.min 0',
+ 'num_storages_other.label number of other storages',
+ 'num_storages_other.info current over all total of storage',
+ 'num_storages_other.min 0'
+ ],
+ "filecount": [
+ 'multigraph nextcloud_filecount',
+ 'graph_title Nextcloud Files',
+ 'graph_args --base 1000 -l 0',
+ 'graph_vlabel number of files',
+ 'graph_info graph showing the number of files',
+ 'graph_category nextcloud',
+ 'num_files.label number of files',
+ 'num_files.info current number of files in the repository',
+ 'num_files.min 0'
]
}
@@ -107,7 +138,9 @@ class NextcloudMultiGraph:
'nextcloud_users': [],
'nextcloud_shares': [],
'nextcloud_dbsize': [],
- 'nextcloud_available_updates': []
+ 'nextcloud_available_updates': [],
+ 'nextcloud_storages': [],
+ 'nextcloud_filecount': []
}
# users
@@ -144,6 +177,19 @@ class NextcloudMultiGraph:
data['nextcloud_available_updates'].append('multigraph nextcloud_available_updates')
data['nextcloud_available_updates'].append('num_updates_available.value %s' % num_updates_available)
+ # storage
+ storage = api_response['ocs']['data']['nextcloud']['storage']
+ data['nextcloud_storages'].append('multigraph nextcloud_storages')
+
+ # append for every key in storage the key and the value if the key starts with "num"
+ [data['nextcloud_storages'].append(str(key) + ".value " + str(storage[key]))
+ for key in storage if key.startswith('num_storages')]
+
+ # filecount
+ num_files = api_response['ocs']['data']['nextcloud']['storage']['num_files']
+ data['nextcloud_filecount'].append('multigraph nextcloud_filecount')
+ data['nextcloud_filecount'].append('num_files.value %s' % num_files)
+
return data
def run(self):
diff --git a/nextcloud_storage.py b/nextcloud_storage.py
index ed6c74e..ee3d7d2 100755
--- a/nextcloud_storage.py
+++ b/nextcloud_storage.py
@@ -21,7 +21,7 @@ class NextcloudStorage:
def config(self):
config = {
'storage': [
- 'graph_title Nextcloud Storage',
+ 'graph_title Nextcloud Storages',
'graph_args --base 1000 -l 0',
'graph_vlabel number of storage',
'graph_info graph showing the number of storages',
@@ -45,14 +45,14 @@ class NextcloudStorage:
def get_data(self, api_response):
data = {
- 'nextcloud_storage': [],
+ 'nextcloud_storages': [],
}
# storage
storage = api_response['ocs']['data']['nextcloud']['storage']
# append for every key in storage the key and the value if the key starts with "num"
- [data['nextcloud_storage'].append(str(key) + ".value " + str(storage[key]))
+ [data['nextcloud_storages'].append(str(key) + ".value " + str(storage[key]))
for key in storage if key.startswith('num_storages')]
return data