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

@ -18,6 +18,7 @@ func Create() {
"MAC" TEXT, "MAC" TEXT,
"HW" TEXT, "HW" TEXT,
"DATE" TEXT, "DATE" TEXT,
"FIRSTSEEN" TEXT,
"KNOWN" INTEGER DEFAULT 0, "KNOWN" INTEGER DEFAULT 0,
"NOW" INTEGER DEFAULT 0 "NOW" INTEGER DEFAULT 0
);` );`
@ -32,6 +33,7 @@ func Create() {
"MAC" TEXT, "MAC" TEXT,
"HW" TEXT, "HW" TEXT,
"DATE" TEXT, "DATE" TEXT,
"FIRSTSEEN" TEXT,
"KNOWN" INTEGER DEFAULT 0, "KNOWN" INTEGER DEFAULT 0,
"NOW" INTEGER DEFAULT 0 "NOW" INTEGER DEFAULT 0
);` );`
@ -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)
} }

View file

@ -40,6 +40,7 @@ type Host struct {
Mac string `db:"MAC"` Mac string `db:"MAC"`
Hw string `db:"HW"` Hw string `db:"HW"`
Date string `db:"DATE"` Date string `db:"DATE"`
FirstSeen string `db:"FIRSTSEEN"`
Known int `db:"KNOWN"` Known int `db:"KNOWN"`
Now int `db:"NOW"` Now int `db:"NOW"`
} }

View file

@ -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}>

View file

@ -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)

View file

@ -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>

View file

@ -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>