mirror of
https://github.com/fosrl/pangolin.git
synced 2025-08-18 16:28:26 +02:00
Handle online / offline site
This commit is contained in:
parent
01731c224f
commit
b4b213e68f
3 changed files with 19 additions and 3 deletions
|
@ -23,7 +23,9 @@ export const sites = sqliteTable("sites", {
|
||||||
subnet: text("subnet").notNull(),
|
subnet: text("subnet").notNull(),
|
||||||
megabytesIn: integer("bytesIn"),
|
megabytesIn: integer("bytesIn"),
|
||||||
megabytesOut: integer("bytesOut"),
|
megabytesOut: integer("bytesOut"),
|
||||||
type: text("type").notNull() // "newt" or "wireguard"
|
lastBandwidthUpdate: text("lastBandwidthUpdate"),
|
||||||
|
type: text("type").notNull(), // "newt" or "wireguard"
|
||||||
|
online: integer("online", { mode: "boolean" }).notNull().default(false)
|
||||||
});
|
});
|
||||||
|
|
||||||
export const resources = sqliteTable("resources", {
|
export const resources = sqliteTable("resources", {
|
||||||
|
|
|
@ -33,17 +33,30 @@ export const receiveBandwidth = async (req: Request, res: Response, next: NextFu
|
||||||
logger.warn(`Site not found for public key: ${publicKey}`);
|
logger.warn(`Site not found for public key: ${publicKey}`);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
let online = site.online;
|
||||||
|
|
||||||
|
// if the bandwidth for the site is > 0 then set it to online. if it has been less than 0 (no update) for 5 minutes then set it to offline
|
||||||
|
if (bytesIn > 0 || bytesOut > 0) {
|
||||||
|
online = true;
|
||||||
|
} else if (site.lastBandwidthUpdate) {
|
||||||
|
const lastBandwidthUpdate = new Date(site.lastBandwidthUpdate);
|
||||||
|
const currentTime = new Date();
|
||||||
|
const diff = currentTime.getTime() - lastBandwidthUpdate.getTime();
|
||||||
|
if (diff < 300000) {
|
||||||
|
online = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Update the site's bandwidth usage
|
// Update the site's bandwidth usage
|
||||||
await db.update(sites)
|
await db.update(sites)
|
||||||
.set({
|
.set({
|
||||||
megabytesIn: (site.megabytesIn || 0) + bytesIn,
|
megabytesIn: (site.megabytesIn || 0) + bytesIn,
|
||||||
megabytesOut: (site.megabytesOut || 0) + bytesOut,
|
megabytesOut: (site.megabytesOut || 0) + bytesOut,
|
||||||
|
lastBandwidthUpdate: new Date().toISOString(),
|
||||||
|
online,
|
||||||
})
|
})
|
||||||
.where(eq(sites.siteId, site.siteId));
|
.where(eq(sites.siteId, site.siteId));
|
||||||
|
|
||||||
logger.debug(`Updated bandwidth for site: ${site.siteId}: megabytesIn: ${(site.megabytesIn || 0) + bytesIn}, megabytesOut: ${(site.megabytesOut || 0) + bytesOut}`);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return response(res, {
|
return response(res, {
|
||||||
|
|
|
@ -39,6 +39,7 @@ function querySites(orgId: string, accessibleSiteIds: number[]) {
|
||||||
megabytesOut: sites.megabytesOut,
|
megabytesOut: sites.megabytesOut,
|
||||||
orgName: orgs.name,
|
orgName: orgs.name,
|
||||||
type: sites.type,
|
type: sites.type,
|
||||||
|
online: sites.online,
|
||||||
})
|
})
|
||||||
.from(sites)
|
.from(sites)
|
||||||
.leftJoin(orgs, eq(sites.orgId, orgs.orgId))
|
.leftJoin(orgs, eq(sites.orgId, orgs.orgId))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue