added reboot required flag

added kernel running/installed version
Added dasboard card and filteres for reboot
fixed security qty updated on dnf
This commit is contained in:
Muhammad Ibrahim
2025-11-16 22:50:41 +00:00
parent 8df6ca2342
commit 539bbb7fbc
24 changed files with 918 additions and 200 deletions

View File

@@ -92,58 +92,63 @@ async function createDefaultDashboardPreferences(userId, userRole = "user") {
requiredPermission: "can_view_hosts",
order: 5,
},
{
cardId: "hostsNeedingReboot",
requiredPermission: "can_view_hosts",
order: 6,
},
// Repository-related cards
{ cardId: "totalRepos", requiredPermission: "can_view_hosts", order: 6 },
{ cardId: "totalRepos", requiredPermission: "can_view_hosts", order: 7 },
// User management cards (admin only)
{ cardId: "totalUsers", requiredPermission: "can_view_users", order: 7 },
{ cardId: "totalUsers", requiredPermission: "can_view_users", order: 8 },
// System/Report cards
{
cardId: "osDistribution",
requiredPermission: "can_view_reports",
order: 8,
order: 9,
},
{
cardId: "osDistributionBar",
requiredPermission: "can_view_reports",
order: 9,
order: 10,
},
{
cardId: "osDistributionDoughnut",
requiredPermission: "can_view_reports",
order: 10,
order: 11,
},
{
cardId: "recentCollection",
requiredPermission: "can_view_hosts",
order: 11,
order: 12,
},
{
cardId: "updateStatus",
requiredPermission: "can_view_reports",
order: 12,
order: 13,
},
{
cardId: "packagePriority",
requiredPermission: "can_view_packages",
order: 13,
order: 14,
},
{
cardId: "packageTrends",
requiredPermission: "can_view_packages",
order: 14,
order: 15,
},
{
cardId: "recentUsers",
requiredPermission: "can_view_users",
order: 15,
order: 16,
},
{
cardId: "quickStats",
requiredPermission: "can_view_dashboard",
order: 16,
order: 17,
},
];
@@ -290,26 +295,33 @@ router.get("/defaults", authenticateToken, async (_req, res) => {
enabled: true,
order: 5,
},
{
cardId: "hostsNeedingReboot",
title: "Needs Reboots",
icon: "RotateCcw",
enabled: true,
order: 6,
},
{
cardId: "totalRepos",
title: "Repositories",
icon: "GitBranch",
enabled: true,
order: 6,
order: 7,
},
{
cardId: "totalUsers",
title: "Users",
icon: "Users",
enabled: true,
order: 7,
order: 8,
},
{
cardId: "osDistribution",
title: "OS Distribution",
icon: "BarChart3",
enabled: true,
order: 8,
order: 9,
},
{
cardId: "osDistributionBar",

View File

@@ -41,6 +41,7 @@ router.get(
erroredHosts,
securityUpdates,
offlineHosts,
hostsNeedingReboot,
totalHostGroups,
totalUsers,
totalRepos,
@@ -106,6 +107,13 @@ router.get(
},
}),
// Hosts needing reboot
prisma.hosts.count({
where: {
needs_reboot: true,
},
}),
// Total host groups count
prisma.host_groups.count(),
@@ -174,6 +182,7 @@ router.get(
erroredHosts,
securityUpdates,
offlineHosts,
hostsNeedingReboot,
totalHostGroups,
totalUsers,
totalRepos,
@@ -217,6 +226,7 @@ router.get("/hosts", authenticateToken, requireViewHosts, async (_req, res) => {
auto_update: true,
notes: true,
api_id: true,
needs_reboot: true,
host_group_memberships: {
include: {
host_groups: {

View File

@@ -59,6 +59,7 @@ router.get("/:id", authenticateToken, async (req, res) => {
os_version: true,
status: true,
last_update: true,
needs_reboot: true,
},
},
},
@@ -259,6 +260,7 @@ router.get("/:id/hosts", authenticateToken, async (req, res) => {
status: true,
last_update: true,
created_at: true,
needs_reboot: true,
},
orderBy: {
friendly_name: "asc",

View File

@@ -533,6 +533,14 @@ router.post(
.optional()
.isString()
.withMessage("Machine ID must be a string"),
body("needsReboot")
.optional()
.isBoolean()
.withMessage("Needs reboot must be a boolean"),
body("rebootReason")
.optional()
.isString()
.withMessage("Reboot reason must be a string"),
],
async (req, res) => {
try {
@@ -596,6 +604,10 @@ router.post(
updateData.system_uptime = req.body.systemUptime;
if (req.body.loadAverage) updateData.load_average = req.body.loadAverage;
// Reboot Status
if (req.body.needsReboot !== undefined)
updateData.needs_reboot = req.body.needsReboot;
// If this is the first update (status is 'pending'), change to 'active'
if (host.status === "pending") {
updateData.status = "active";

View File

@@ -142,6 +142,7 @@ router.get("/", async (req, res) => {
friendly_name: true,
hostname: true,
os_type: true,
needs_reboot: true,
},
},
current_version: true,
@@ -236,6 +237,7 @@ router.get("/:packageId", async (req, res) => {
os_type: true,
os_version: true,
last_update: true,
needs_reboot: true,
},
},
},
@@ -365,6 +367,7 @@ router.get("/:packageId/hosts", async (req, res) => {
os_type: true,
os_version: true,
last_update: true,
needs_reboot: true,
},
},
},
@@ -386,6 +389,7 @@ router.get("/:packageId/hosts", async (req, res) => {
needsUpdate: hp.needs_update,
isSecurityUpdate: hp.is_security_update,
lastChecked: hp.last_checked,
needsReboot: hp.hosts.needs_reboot,
}));
res.json({

View File

@@ -119,6 +119,7 @@ router.get(
os_version: true,
status: true,
last_update: true,
needs_reboot: true,
},
},
},