diff --git a/collectd_plugin.py b/collectd_plugin.py
new file mode 100644
index 0000000..ea33c4f
--- /dev/null
+++ b/collectd_plugin.py
@@ -0,0 +1,57 @@
+#!/usr/bin/env python3
+
+import os
+import re
+import time
+
+HOSTNAME = os.getenv('COLLECTD_HOSTNAME', "localhost")
+INTERVAL = os.getenv('COLLECTD_INTERVAL', 60)
+FILENAME = "/tmp/spitfire_smbspy_status.txt"
+
+SMB_STATUS_REGEX = re.compile(r'Spitfire SMB has (?P[0-9]+) file\(s\) opened by (?P[0-9]+) user\(s\) \((?P[0-@9]+) active users\)\.')
+SMB_NOOPEN_REGEX = re.compile(r'Spitfire SMB has no open files or command failure\.')
+HTTP_STATUS_REGEX = re.compile(r'Spitfire HTTP has (?P[0-9]+) active transfer\(s\) by (?P[0-9]+) user\(s\)\.')
+HTTP_NOOPEN_REGEX = re.compile(r'Spitfire HTTP has no open files or command failure\.')
+
+smb_current_files, smb_current_users, smb_active_users = -1, -1, -1
+http_current_transfers, http_current_users = -1, -1
+
+while True:
+ # Read values from status file
+ if os.path.isfile(FILENAME):
+ with open(FILENAME, 'r', encoding='utf-8') as f:
+ status_str = "".join(f.readlines())
+ else:
+ status_str = ""
+
+ for line in status_str:
+ # Try to match SMB status
+ smb_match = SMB_STATUS_REGEX.match(status_str)
+ if smb_match:
+ smb_current_files = int(smb_match.group('files'))
+ smb_current_users = int(smb_match.group('users'))
+ smb_active_users = int(smb_match.group('active'))
+
+ # Try to match SMB failure
+ smb_noopen_match = SMB_NOOPEN_REGEX.match(status_str)
+ if smb_noopen_match:
+ smb_current_files, smb_current_users, smb_active_users = 0, 0, 0
+
+ # Try to match HTTP status
+ http_match = HTTP_STATUS_REGEX.match(status_str)
+ if http_match:
+ http_current_transfers = int(http_match.group('transfers'))
+ http_current_users = int(http_match.group('users'))
+
+ # Try to match HTTP failure
+ http_noopen_match = HTTP_NOOPEN_REGEX.match(status_str)
+ if http_noopen_match:
+ http_current_transfers, http_current_users = 0, 0
+
+ print("PUTVAL \"{}/shares/smb_open_connections\" interval={} N:{}".format(HOSTNAME, INTERVAL, smb_current_users))
+ print("PUTVAL \"{}/shares/smb_active_users\" interval={} N:{}".format(HOSTNAME, INTERVAL, smb_active_users))
+ print("PUTVAL \"{}/shares/smb_open_files\" interval={} N:{}".format(HOSTNAME, INTERVAL, smb_current_files))
+ print("PUTVAL \"{}/shares/http_active_users\" interval={} N:{}".format(HOSTNAME, INTERVAL, http_current_users))
+ print("PUTVAL \"{}/shares/http_open_transfers\" interval={} N:{}".format(HOSTNAME, INTERVAL, http_current_transfers))
+
+ time.sleep(INTERVAL)