Add FirstSeen attribute
This commit is contained in:
parent
9c7809a513
commit
e35cdcb618
6 changed files with 42 additions and 32 deletions
|
|
@ -10,30 +10,32 @@ import (
|
||||||
func Create() {
|
func Create() {
|
||||||
|
|
||||||
sqlStatement := `CREATE TABLE IF NOT EXISTS "now" (
|
sqlStatement := `CREATE TABLE IF NOT EXISTS "now" (
|
||||||
"ID" ` + currentDB.PrimaryKey + `,
|
"ID" ` + currentDB.PrimaryKey + `,
|
||||||
"NAME" TEXT NOT NULL,
|
"NAME" TEXT NOT NULL,
|
||||||
"DNS" TEXT NOT NULL,
|
"DNS" TEXT NOT NULL,
|
||||||
"IFACE" TEXT,
|
"IFACE" TEXT,
|
||||||
"IP" TEXT,
|
"IP" TEXT,
|
||||||
"MAC" TEXT,
|
"MAC" TEXT,
|
||||||
"HW" TEXT,
|
"HW" TEXT,
|
||||||
"DATE" TEXT,
|
"DATE" TEXT,
|
||||||
"KNOWN" INTEGER DEFAULT 0,
|
"FIRSTSEEN" TEXT,
|
||||||
"NOW" INTEGER DEFAULT 0
|
"KNOWN" INTEGER DEFAULT 0,
|
||||||
|
"NOW" INTEGER DEFAULT 0
|
||||||
);`
|
);`
|
||||||
dbExec(sqlStatement)
|
dbExec(sqlStatement)
|
||||||
|
|
||||||
sqlStatement = `CREATE TABLE IF NOT EXISTS "history" (
|
sqlStatement = `CREATE TABLE IF NOT EXISTS "history" (
|
||||||
"ID" ` + currentDB.PrimaryKey + `,
|
"ID" ` + currentDB.PrimaryKey + `,
|
||||||
"NAME" TEXT NOT NULL,
|
"NAME" TEXT NOT NULL,
|
||||||
"DNS" TEXT NOT NULL,
|
"DNS" TEXT NOT NULL,
|
||||||
"IFACE" TEXT,
|
"IFACE" TEXT,
|
||||||
"IP" TEXT,
|
"IP" TEXT,
|
||||||
"MAC" TEXT,
|
"MAC" TEXT,
|
||||||
"HW" TEXT,
|
"HW" TEXT,
|
||||||
"DATE" TEXT,
|
"DATE" TEXT,
|
||||||
"KNOWN" INTEGER DEFAULT 0,
|
"FIRSTSEEN" TEXT,
|
||||||
"NOW" INTEGER DEFAULT 0
|
"KNOWN" INTEGER DEFAULT 0,
|
||||||
|
"NOW" INTEGER DEFAULT 0
|
||||||
);`
|
);`
|
||||||
dbExec(sqlStatement)
|
dbExec(sqlStatement)
|
||||||
}
|
}
|
||||||
|
|
@ -42,8 +44,8 @@ func Create() {
|
||||||
func Insert(table string, oneHost models.Host) {
|
func Insert(table string, oneHost models.Host) {
|
||||||
oneHost.Name = quoteStr(oneHost.Name)
|
oneHost.Name = quoteStr(oneHost.Name)
|
||||||
oneHost.Hw = quoteStr(oneHost.Hw)
|
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 := `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.Known, oneHost.Now)
|
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)
|
dbExec(sqlStatement)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -32,16 +32,17 @@ type Conf struct {
|
||||||
|
|
||||||
// Host - one host
|
// Host - one host
|
||||||
type Host struct {
|
type Host struct {
|
||||||
ID int `db:"ID"`
|
ID int `db:"ID"`
|
||||||
Name string `db:"NAME"`
|
Name string `db:"NAME"`
|
||||||
DNS string `db:"DNS"`
|
DNS string `db:"DNS"`
|
||||||
Iface string `db:"IFACE"`
|
Iface string `db:"IFACE"`
|
||||||
IP string `db:"IP"`
|
IP string `db:"IP"`
|
||||||
Mac string `db:"MAC"`
|
Mac string `db:"MAC"`
|
||||||
Hw string `db:"HW"`
|
Hw string `db:"HW"`
|
||||||
Date string `db:"DATE"`
|
Date string `db:"DATE"`
|
||||||
Known int `db:"KNOWN"`
|
FirstSeen string `db:"FIRSTSEEN"`
|
||||||
Now int `db:"NOW"`
|
Known int `db:"KNOWN"`
|
||||||
|
Now int `db:"NOW"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stat - status
|
// Stat - status
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ function createHTML(addr, i) {
|
||||||
<td><a href="/host/${addr.ID}">${addr.Mac}</a></td>
|
<td><a href="/host/${addr.ID}">${addr.Mac}</a></td>
|
||||||
<td>${addr.Hw}</td>
|
<td>${addr.Hw}</td>
|
||||||
<td>${addr.Date}</td>
|
<td>${addr.Date}</td>
|
||||||
|
<td>${addr.FirstSeen}</td>
|
||||||
<td>
|
<td>
|
||||||
<div class="form-check form-switch">
|
<div class="form-check form-switch">
|
||||||
<input onclick="editForm(${addr.ID}, 'toggle')" class="form-check-input" type="checkbox" ${known}>
|
<input onclick="editForm(${addr.ID}, 'toggle')" class="form-check-input" type="checkbox" ${known}>
|
||||||
|
|
|
||||||
|
|
@ -76,6 +76,7 @@ func compareHosts(foundHosts []models.Host) {
|
||||||
for _, fHost := range foundHostsMap {
|
for _, fHost := range foundHostsMap {
|
||||||
|
|
||||||
fHost.Name, fHost.DNS = updateDNS(fHost)
|
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)
|
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)
|
slog.Warn(msg)
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,10 @@
|
||||||
<td>Date</td>
|
<td>Date</td>
|
||||||
<td>{{ .Host.Date }}</td>
|
<td>{{ .Host.Date }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>First Seen</td>
|
||||||
|
<td>{{ .Host.FirstSeen }}</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Known</td>
|
<td>Known</td>
|
||||||
<td>{{ if eq .Host.Known 1 }}Yes{{ else }}No{{ end }}</td>
|
<td>{{ if eq .Host.Known 1 }}Yes{{ else }}No{{ end }}</td>
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,7 @@
|
||||||
<th>MAC <i class="bi bi-sort-down-alt my-btn" onclick="sortBy('Mac')"></i></th>
|
<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>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>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>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>
|
<th>Online <i class="bi bi-sort-down-alt my-btn" onclick="sortBy('Now')"></i></th>
|
||||||
</thead>
|
</thead>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue