The DTP Sites web app development engine.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

75 lines
2.2 KiB

// net-host-stats.js
// Copyright (C) 2022 DTP Technologies, LLC
// License: Apache-2.0
'use strict';
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const CpuInfoSchema = new Schema({
user: { type: Number },
nice: { type: Number },
sys: { type: Number },
idle: { type: Number },
irq: { type: Number },
});
const MemoryInfoSchema = new Schema({
total: { type: Number },
free: { type: Number },
used: { type: Number },
active: { type: Number },
available: { type: Number },
buffers: { type: Number },
cached: { type: Number },
slab: { type: Number },
buffcache: { type: Number },
swaptotal: { type: Number },
swapused: { type: Number },
swapfree: { type: Number },
});
const CacheStatsSchema = new Schema({
itemCount: { type: Number, required: true },
dataSize: { type: Number, required: true },
expireCount: { type: Number, required: true },
expireDataSize: { type: Number, required: true },
hitCount: { type: Number, required: true },
hitDataSize: { type: Number, required: true },
missCount: { type: Number, required: true },
missDataSize: { type: Number, required: true },
});
const DiskUsageSchema = new Schema({
total: { type: Number },
used: { type: Number },
available: { type: Number },
pctUsed: { type: Number },
});
const NetworkInterfaceStatsSchema = new Schema({
iface: { type: String, required: true },
rxPerSecond: { type: Number },
rxDropped: { type: Number },
rxErrors: { type: Number },
txPerSecond: { type: Number },
txDropped: { type: Number },
txErrors: { type: Number },
});
const NetHostStatsSchema = new Schema({
created: { type: Date, default: Date.now, required: true, index: 1, expires: '7d' },
host: { type: Schema.ObjectId, required: true, index: 1, ref: 'NetHost' },
load: { type: [Number], required: true },
cpus: { type: [CpuInfoSchema], required: true },
memory: { type: MemoryInfoSchema, required: true },
cache: { type: CacheStatsSchema, required: true },
disk: {
cache: { type: DiskUsageSchema, required: true },
},
network: { type: [NetworkInterfaceStatsSchema], required: true },
});
module.exports = mongoose.model('NetHostStats', NetHostStatsSchema);