310 lines
6.6 KiB
JavaScript
310 lines
6.6 KiB
JavaScript
const Sequelize = require('sequelize');
|
|
|
|
/**
|
|
* 设备状态表模型
|
|
* 记录pydp客户端设备的实时状态和运行信息
|
|
*/
|
|
module.exports = (db) => {
|
|
const device_status= db.define("device_status", {
|
|
// 设备基本信息
|
|
sn_code: {
|
|
comment: '设备SN码(唯一标识)',
|
|
type: Sequelize.STRING(50),
|
|
allowNull: false,
|
|
primaryKey: true
|
|
},
|
|
device_id:{
|
|
comment: '设备ID',
|
|
type: Sequelize.STRING(200),
|
|
allowNull: false,
|
|
primaryKey: true
|
|
},
|
|
|
|
deviceName: {
|
|
comment: '设备名称',
|
|
type: Sequelize.STRING(100),
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
deviceType: {
|
|
comment: '设备类型',
|
|
type: Sequelize.STRING(50),
|
|
allowNull: true,
|
|
defaultValue: 'pydp'
|
|
},
|
|
|
|
// 在线状态
|
|
isOnline: {
|
|
comment: '是否在线',
|
|
type: Sequelize.BOOLEAN,
|
|
allowNull: false,
|
|
defaultValue: false
|
|
},
|
|
isRunning: {
|
|
comment: '是否运行中',
|
|
type: Sequelize.BOOLEAN,
|
|
allowNull: false,
|
|
defaultValue: false
|
|
},
|
|
lastOnlineTime: {
|
|
comment: '最后在线时间',
|
|
type: Sequelize.DATE,
|
|
allowNull: true
|
|
},
|
|
lastOfflineTime: {
|
|
comment: '最后离线时间',
|
|
type: Sequelize.DATE,
|
|
allowNull: true
|
|
},
|
|
onlineDuration: {
|
|
comment: '在线时长(分钟)',
|
|
type: Sequelize.INTEGER,
|
|
allowNull: true,
|
|
defaultValue: 0
|
|
},
|
|
|
|
// 运行状态
|
|
currentTask: {
|
|
comment: '当前执行任务',
|
|
type: Sequelize.STRING(100),
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
currentTaskId: {
|
|
comment: '当前任务ID',
|
|
type: Sequelize.STRING(50),
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
taskStatus: {
|
|
comment: '任务状态',
|
|
type: Sequelize.STRING(20),
|
|
allowNull: true,
|
|
defaultValue: 'idle'
|
|
},
|
|
lastTaskTime: {
|
|
comment: '最后任务时间',
|
|
type: Sequelize.DATE,
|
|
allowNull: true
|
|
},
|
|
|
|
// 平台信息
|
|
platform: {
|
|
comment: '当前使用平台: boss-Boss直聘, liepin-猎聘',
|
|
type: Sequelize.STRING(20),
|
|
allowNull: true,
|
|
defaultValue: 'boss'
|
|
},
|
|
isLoggedIn: {
|
|
comment: '是否已登录平台',
|
|
type: Sequelize.BOOLEAN,
|
|
allowNull: true,
|
|
defaultValue: false
|
|
},
|
|
loginTime: {
|
|
comment: '登录时间',
|
|
type: Sequelize.DATE,
|
|
allowNull: true
|
|
},
|
|
accountName: {
|
|
comment: '账号名称',
|
|
type: Sequelize.STRING(100),
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
|
|
// 性能信息
|
|
cpuUsage: {
|
|
comment: 'CPU使用率(%)',
|
|
type: Sequelize.FLOAT,
|
|
allowNull: true,
|
|
defaultValue: 0
|
|
},
|
|
memoryUsage: {
|
|
comment: '内存使用率(%)',
|
|
type: Sequelize.FLOAT,
|
|
allowNull: true,
|
|
defaultValue: 0
|
|
},
|
|
diskUsage: {
|
|
comment: '磁盘使用率(%)',
|
|
type: Sequelize.FLOAT,
|
|
allowNull: true,
|
|
defaultValue: 0
|
|
},
|
|
|
|
// 网络信息
|
|
ipAddress: {
|
|
comment: 'IP地址',
|
|
type: Sequelize.STRING(50),
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
macAddress: {
|
|
comment: 'MAC地址',
|
|
type: Sequelize.STRING(50),
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
networkStatus: {
|
|
comment: '网络状态: good-良好, slow-缓慢, offline-离线',
|
|
type: Sequelize.STRING(20),
|
|
allowNull: true,
|
|
defaultValue: 'good'
|
|
},
|
|
|
|
// 心跳信息
|
|
lastHeartbeatTime: {
|
|
comment: '最后心跳时间',
|
|
type: Sequelize.DATE,
|
|
allowNull: true
|
|
},
|
|
heartbeatInterval: {
|
|
comment: '心跳间隔(秒)',
|
|
type: Sequelize.INTEGER,
|
|
allowNull: true,
|
|
defaultValue: 30
|
|
},
|
|
missedHeartbeats: {
|
|
comment: '丢失的心跳次数',
|
|
type: Sequelize.INTEGER,
|
|
allowNull: true,
|
|
defaultValue: 0
|
|
},
|
|
|
|
// 版本信息
|
|
clientVersion: {
|
|
comment: '客户端版本',
|
|
type: Sequelize.STRING(20),
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
pythonVersion: {
|
|
comment: 'Python版本',
|
|
type: Sequelize.STRING(20),
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
osVersion: {
|
|
comment: '操作系统版本',
|
|
type: Sequelize.STRING(100),
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
|
|
// 统计信息
|
|
totalTasksCompleted: {
|
|
comment: '完成任务总数',
|
|
type: Sequelize.INTEGER,
|
|
allowNull: true,
|
|
defaultValue: 0
|
|
},
|
|
totalTasksFailed: {
|
|
comment: '失败任务总数',
|
|
type: Sequelize.INTEGER,
|
|
allowNull: true,
|
|
defaultValue: 0
|
|
},
|
|
totalJobsSearched: {
|
|
comment: '搜索岗位总数',
|
|
type: Sequelize.INTEGER,
|
|
allowNull: true,
|
|
defaultValue: 0
|
|
},
|
|
totalApplies: {
|
|
comment: '投递简历总数',
|
|
type: Sequelize.INTEGER,
|
|
allowNull: true,
|
|
defaultValue: 0
|
|
},
|
|
totalChats: {
|
|
comment: '聊天总数',
|
|
type: Sequelize.INTEGER,
|
|
allowNull: true,
|
|
defaultValue: 0
|
|
},
|
|
|
|
// 错误信息
|
|
lastError: {
|
|
comment: '最后错误信息',
|
|
type: Sequelize.TEXT,
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
lastErrorTime: {
|
|
comment: '最后错误时间',
|
|
type: Sequelize.DATE,
|
|
allowNull: true
|
|
},
|
|
errorCount: {
|
|
comment: '错误次数',
|
|
type: Sequelize.INTEGER,
|
|
allowNull: true,
|
|
defaultValue: 0
|
|
},
|
|
|
|
// 健康状态
|
|
healthStatus: {
|
|
comment: '健康状态: healthy-健康, warning-警告, error-错误, unknown-未知',
|
|
type: Sequelize.STRING(20),
|
|
allowNull: true,
|
|
defaultValue: 'unknown'
|
|
},
|
|
healthScore: {
|
|
comment: '健康评分(0-100)',
|
|
type: Sequelize.INTEGER,
|
|
allowNull: true,
|
|
defaultValue: 0
|
|
},
|
|
|
|
// 配置信息
|
|
config: {
|
|
comment: '设备配置(JSON)',
|
|
type: Sequelize.TEXT,
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
|
|
// 其他信息
|
|
notes: {
|
|
comment: '备注',
|
|
type: Sequelize.TEXT,
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
|
|
}, {
|
|
timestamps: false,
|
|
indexes: [
|
|
{
|
|
unique: false,
|
|
fields: ['isOnline']
|
|
},
|
|
{
|
|
unique: false,
|
|
fields: ['isRunning']
|
|
},
|
|
{
|
|
unique: false,
|
|
fields: ['healthStatus']
|
|
},
|
|
{
|
|
unique: false,
|
|
fields: ['platform']
|
|
},
|
|
{
|
|
unique: false,
|
|
fields: ['lastHeartbeatTime']
|
|
},
|
|
|
|
]
|
|
});
|
|
|
|
// device_status.sync({ force: true });
|
|
|
|
return device_status
|
|
|
|
// device_status.sync({ force: true
|
|
};
|
|
|