summaryrefslogtreecommitdiffstats
path: root/collectors/python.d.plugin/samba
diff options
context:
space:
mode:
Diffstat (limited to 'collectors/python.d.plugin/samba')
-rw-r--r--collectors/python.d.plugin/samba/README.md26
-rw-r--r--collectors/python.d.plugin/samba/samba.chart.py33
2 files changed, 41 insertions, 18 deletions
diff --git a/collectors/python.d.plugin/samba/README.md b/collectors/python.d.plugin/samba/README.md
index ad99deade..ed26d2871 100644
--- a/collectors/python.d.plugin/samba/README.md
+++ b/collectors/python.d.plugin/samba/README.md
@@ -1,8 +1,14 @@
-# samba
+<!--
+title: "Samba monitoring with Netdata"
+custom_edit_url: https://github.com/netdata/netdata/edit/master/collectors/python.d.plugin/samba/README.md
+sidebar_label: "Samba"
+-->
-Performance metrics of Samba file sharing.
+# Samba monitoring with Netdata
-**Requirements:**
+Monitors the performance metrics of Samba file sharing.
+
+## Requirements
- `smbstatus` program
- `sudo` program
@@ -15,7 +21,7 @@ It produces the following charts:
1. **Syscall R/Ws** in kilobytes/s
- sendfile
- - recvfle
+ - recvfile
2. **Smb2 R/Ws** in kilobytes/s
@@ -67,14 +73,22 @@ Add to `sudoers`:
netdata ALL=(root) NOPASSWD: /path/to/smbstatus
```
-## configuration
+## Configuration
- **samba** is disabled by default. Should be explicitly enabled in `python.d.conf`.
+**samba** is disabled by default. Should be explicitly enabled in `python.d.conf`.
```yaml
samba: yes
```
+Edit the `python.d/samba.conf` configuration file using `edit-config` from the Netdata [config
+directory](/docs/configure/nodes.md), which is typically at `/etc/netdata`.
+
+```bash
+cd /etc/netdata # Replace this path with your Netdata config directory, if different
+sudo ./edit-config python.d/samba.conf
+```
+
---
[![analytics](https://www.google-analytics.com/collect?v=1&aip=1&t=pageview&_s=1&ds=github&dr=https%3A%2F%2Fgithub.com%2Fnetdata%2Fnetdata&dl=https%3A%2F%2Fmy-netdata.io%2Fgithub%2Fcollectors%2Fpython.d.plugin%2Fsamba%2FREADME&_u=MAC~&cid=5792dfd7-8dc4-476b-af31-da2fdb9f93d2&tid=UA-64295674-3)](<>)
diff --git a/collectors/python.d.plugin/samba/samba.chart.py b/collectors/python.d.plugin/samba/samba.chart.py
index ac89c29b0..8eebcd60c 100644
--- a/collectors/python.d.plugin/samba/samba.chart.py
+++ b/collectors/python.d.plugin/samba/samba.chart.py
@@ -17,10 +17,10 @@
# (like find and notify... good examples).
import re
+import os
-from bases.collection import find_binary
from bases.FrameworkServices.ExecutableService import ExecutableService
-
+from bases.collection import find_binary
disabled_by_default = True
@@ -96,6 +96,9 @@ CHARTS = {
}
}
+SUDO = 'sudo'
+SMBSTATUS = 'smbstatus'
+
class Service(ExecutableService):
def __init__(self, configuration=None, name=None):
@@ -105,20 +108,26 @@ class Service(ExecutableService):
self.rgx_smb2 = re.compile(r'(smb2_[^:]+|syscall_.*file_bytes):\s+(\d+)')
def check(self):
- sudo_binary, smbstatus_binary = find_binary('sudo'), find_binary('smbstatus')
-
- if not (sudo_binary and smbstatus_binary):
- self.error("Can\'t locate 'sudo' or 'smbstatus' binary")
+ smbstatus_binary = find_binary(SMBSTATUS)
+ if not smbstatus_binary:
+ self.error("can't locate '{0}' binary".format(SMBSTATUS))
return False
- self.command = [sudo_binary, '-v']
- err = self._get_raw_data(stderr=True)
- if err:
- self.error(''.join(err))
+ if os.getuid() == 0:
+ self.command = ' '.join([smbstatus_binary, '-P'])
+ return ExecutableService.check(self)
+
+ sudo_binary = find_binary(SUDO)
+ if not sudo_binary:
+ self.error("can't locate '{0}' binary".format(SUDO))
+ return False
+ command = [sudo_binary, '-n', '-l', smbstatus_binary, '-P']
+ smbstatus = '{0} -P'.format(smbstatus_binary)
+ allowed = self._get_raw_data(command=command)
+ if not (allowed and allowed[0].strip() == smbstatus):
+ self.error("not allowed to run sudo for command '{0}'".format(smbstatus))
return False
-
self.command = ' '.join([sudo_binary, '-n', smbstatus_binary, '-P'])
-
return ExecutableService.check(self)
def _get_data(self):