initial commit
This commit is contained in:
+132
@@ -0,0 +1,132 @@
|
||||
import sqlite3
|
||||
from datetime import datetime
|
||||
|
||||
DB_PATH = 'snmp_monitor.db'
|
||||
|
||||
def init_db():
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
c = conn.cursor()
|
||||
|
||||
# Targets table (devices to monitor)
|
||||
c.execute('''
|
||||
CREATE TABLE IF NOT EXISTS targets (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT,
|
||||
ip_address TEXT NOT NULL,
|
||||
port INTEGER DEFAULT 161,
|
||||
community TEXT NOT NULL,
|
||||
period_minutes INTEGER DEFAULT 5,
|
||||
modem_type TEXT DEFAULT 'rv50',
|
||||
enabled INTEGER DEFAULT 1,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
)
|
||||
''')
|
||||
|
||||
# Readings table (stored SNMP data)
|
||||
c.execute('''
|
||||
CREATE TABLE IF NOT EXISTS readings (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
target_id INTEGER NOT NULL,
|
||||
bytes_sent INTEGER,
|
||||
bytes_recv INTEGER,
|
||||
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (target_id) REFERENCES targets(id)
|
||||
)
|
||||
''')
|
||||
|
||||
# Check if modem_type column exists, add it if not (for existing databases)
|
||||
try:
|
||||
c.execute('SELECT modem_type FROM targets LIMIT 1')
|
||||
except sqlite3.OperationalError:
|
||||
c.execute('ALTER TABLE targets ADD COLUMN modem_type TEXT DEFAULT "rv50"')
|
||||
conn.commit()
|
||||
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def add_target(name, ip_address, port, community, period_minutes, modem_type='rv50'):
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
c = conn.cursor()
|
||||
c.execute('''
|
||||
INSERT INTO targets (name, ip_address, port, community, period_minutes, modem_type)
|
||||
VALUES (?, ?, ?, ?, ?, ?)
|
||||
''', (name, ip_address, port, community, period_minutes, modem_type))
|
||||
conn.commit()
|
||||
target_id = c.lastrowid
|
||||
conn.close()
|
||||
return target_id
|
||||
|
||||
def get_all_targets():
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
conn.row_factory = sqlite3.Row
|
||||
c = conn.cursor()
|
||||
c.execute('SELECT * FROM targets ORDER BY id')
|
||||
targets = c.fetchall()
|
||||
conn.close()
|
||||
return targets
|
||||
|
||||
def get_target(target_id):
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
conn.row_factory = sqlite3.Row
|
||||
c = conn.cursor()
|
||||
c.execute('SELECT * FROM targets WHERE id = ?', (target_id,))
|
||||
target = c.fetchone()
|
||||
conn.close()
|
||||
return target
|
||||
|
||||
def update_target(target_id, name, ip_address, port, community, period_minutes, enabled, modem_type='rv50'):
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
c = conn.cursor()
|
||||
c.execute('''
|
||||
UPDATE targets
|
||||
SET name=?, ip_address=?, port=?, community=?, period_minutes=?, enabled=?, modem_type=?
|
||||
WHERE id=?
|
||||
''', (name, ip_address, port, community, period_minutes, enabled, modem_type, target_id))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def delete_target(target_id):
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
c = conn.cursor()
|
||||
c.execute('DELETE FROM readings WHERE target_id = ?', (target_id,))
|
||||
c.execute('DELETE FROM targets WHERE id = ?', (target_id,))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def add_reading(target_id, bytes_sent, bytes_recv):
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
c = conn.cursor()
|
||||
c.execute('''
|
||||
INSERT INTO readings (target_id, bytes_sent, bytes_recv)
|
||||
VALUES (?, ?, ?)
|
||||
''', (target_id, bytes_sent, bytes_recv))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def get_readings(target_id, hours=24):
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
conn.row_factory = sqlite3.Row
|
||||
c = conn.cursor()
|
||||
c.execute('''
|
||||
SELECT * FROM readings
|
||||
WHERE target_id = ?
|
||||
AND timestamp >= datetime('now', '-{} hours')
|
||||
ORDER BY timestamp
|
||||
'''.format(hours), (target_id,))
|
||||
readings = c.fetchall()
|
||||
conn.close()
|
||||
return readings
|
||||
|
||||
def get_latest_reading(target_id):
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
conn.row_factory = sqlite3.Row
|
||||
c = conn.cursor()
|
||||
c.execute('''
|
||||
SELECT * FROM readings
|
||||
WHERE target_id = ?
|
||||
ORDER BY timestamp DESC
|
||||
LIMIT 1
|
||||
''', (target_id,))
|
||||
reading = c.fetchone()
|
||||
conn.close()
|
||||
return reading
|
||||
Reference in New Issue
Block a user