Add FirstSeen attribute

This commit is contained in:
David Chidell 2024-11-13 00:49:54 +00:00
parent 9c7809a513
commit e35cdcb618
6 changed files with 42 additions and 32 deletions

View file

@ -10,30 +10,32 @@ import (
func Create() {
sqlStatement := `CREATE TABLE IF NOT EXISTS "now" (
"ID" ` + currentDB.PrimaryKey + `,
"NAME" TEXT NOT NULL,
"DNS" TEXT NOT NULL,
"IFACE" TEXT,
"IP" TEXT,
"MAC" TEXT,
"HW" TEXT,
"DATE" TEXT,
"KNOWN" INTEGER DEFAULT 0,
"NOW" INTEGER DEFAULT 0
"ID" ` + currentDB.PrimaryKey + `,
"NAME" TEXT NOT NULL,
"DNS" TEXT NOT NULL,
"IFACE" TEXT,
"IP" TEXT,
"MAC" TEXT,
"HW" TEXT,
"DATE" TEXT,
"FIRSTSEEN" TEXT,
"KNOWN" INTEGER DEFAULT 0,
"NOW" INTEGER DEFAULT 0
);`
dbExec(sqlStatement)
sqlStatement = `CREATE TABLE IF NOT EXISTS "history" (
"ID" ` + currentDB.PrimaryKey + `,
"NAME" TEXT NOT NULL,
"DNS" TEXT NOT NULL,
"IFACE" TEXT,
"IP" TEXT,
"MAC" TEXT,
"HW" TEXT,
"DATE" TEXT,
"KNOWN" INTEGER DEFAULT 0,
"NOW" INTEGER DEFAULT 0
"ID" ` + currentDB.PrimaryKey + `,
"NAME" TEXT NOT NULL,
"DNS" TEXT NOT NULL,
"IFACE" TEXT,
"IP" TEXT,
"MAC" TEXT,
"HW" TEXT,
"DATE" TEXT,
"FIRSTSEEN" TEXT,
"KNOWN" INTEGER DEFAULT 0,
"NOW" INTEGER DEFAULT 0
);`
dbExec(sqlStatement)
}
@ -42,8 +44,8 @@ func Create() {
func Insert(table string, oneHost models.Host) {
oneHost.Name = quoteStr(oneHost.Name)
oneHost.Hw = quoteStr(oneHost.Hw)
sqlStatement := `INSERT INTO %s ("NAME", "DNS", "IFACE", "IP", "MAC", "HW", "DATE", "KNOWN", "NOW") VALUES ('%s','%s','%s','%s','%s','%s','%s','%d','%d');`
sqlStatement = fmt.Sprintf(sqlStatement, table, oneHost.Name, oneHost.DNS, oneHost.Iface, oneHost.IP, oneHost.Mac, oneHost.Hw, oneHost.Date, oneHost.Known, oneHost.Now)
sqlStatement := `INSERT INTO %s ("NAME", "DNS", "IFACE", "IP", "MAC", "HW", "DATE", "FIRSTSEEN", "KNOWN", "NOW") VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%d','%d');`
sqlStatement = fmt.Sprintf(sqlStatement, table, oneHost.Name, oneHost.DNS, oneHost.Iface, oneHost.IP, oneHost.Mac, oneHost.Hw, oneHost.Date, oneHost.FirstSeen, oneHost.Known, oneHost.Now)
dbExec(sqlStatement)
}

View file

@ -32,16 +32,17 @@ type Conf struct {
// Host - one host
type Host struct {
ID int `db:"ID"`
Name string `db:"NAME"`
DNS string `db:"DNS"`
Iface string `db:"IFACE"`
IP string `db:"IP"`
Mac string `db:"MAC"`
Hw string `db:"HW"`
Date string `db:"DATE"`
Known int `db:"KNOWN"`
Now int `db:"NOW"`
ID int `db:"ID"`
Name string `db:"NAME"`
DNS string `db:"DNS"`
Iface string `db:"IFACE"`
IP string `db:"IP"`
Mac string `db:"MAC"`
Hw string `db:"HW"`
Date string `db:"DATE"`
FirstSeen string `db:"FIRSTSEEN"`
Known int `db:"KNOWN"`
Now int `db:"NOW"`
}
// Stat - status

View file

@ -31,6 +31,7 @@ function createHTML(addr, i) {
<td><a href="/host/${addr.ID}">${addr.Mac}</a></td>
<td>${addr.Hw}</td>
<td>${addr.Date}</td>
<td>${addr.FirstSeen}</td>
<td>
<div class="form-check form-switch">
<input onclick="editForm(${addr.ID}, 'toggle')" class="form-check-input" type="checkbox" ${known}>

View file

@ -76,6 +76,7 @@ func compareHosts(foundHosts []models.Host) {
for _, fHost := range foundHostsMap {
fHost.Name, fHost.DNS = updateDNS(fHost)
fHost.FirstSeen = time.Now().Format("2006-01-02 15:04:05")
msg := fmt.Sprintf("WatchYourLAN: unknown host found. Names: '%s', IP: '%s', MAC: '%s', Hw: '%s', Iface: '%s'", fHost.DNS, fHost.IP, fHost.Mac, fHost.Hw, fHost.Iface)
slog.Warn(msg)

View file

@ -40,6 +40,10 @@
<td>Date</td>
<td>{{ .Host.Date }}</td>
</tr>
<tr>
<td>First Seen</td>
<td>{{ .Host.FirstSeen }}</td>
</tr>
<tr>
<td>Known</td>
<td>{{ if eq .Host.Known 1 }}Yes{{ else }}No{{ end }}</td>

View file

@ -53,6 +53,7 @@
<th>MAC <i class="bi bi-sort-down-alt my-btn" onclick="sortBy('Mac')"></i></th>
<th>Hardware <i class="bi bi-sort-down-alt my-btn" onclick="sortBy('Hw')"></i></th>
<th>Date <i class="bi bi-sort-down-alt my-btn" onclick="sortBy('Date')"></i></th>
<th>First Seen <i class="bi bi-sort-down-alt my-btn" onclick="sortBy('FirstSeen')"></i></th>
<th>Known <i class="bi bi-sort-down-alt my-btn" onclick="sortBy('Known')"></i></th>
<th>Online <i class="bi bi-sort-down-alt my-btn" onclick="sortBy('Now')"></i></th>
</thead>