WIP s3 sync and directory stats.

This commit is contained in:
Patrick Fic
2025-10-31 15:43:22 -07:00
parent 080ed8e335
commit be3918cbaf
10 changed files with 926 additions and 5 deletions

View File

@@ -21,6 +21,8 @@ import { JobsMoveMedia } from "./jobs/jobsMoveMedia.js";
import { JobMediaUploadMulter, jobsUploadMedia } from "./jobs/jobsUploadMedia.js";
import InitServer, { FolderPaths } from "./util/serverInit.js";
import ValidateImsToken from "./util/validateToken.js";
import { dailyS3Scheduler } from "./util/dailyS3Scheduler.js";
import { analyzeJobsDirectory } from "./util/s3Sync.js";
dotenv.config({
path: resolve(process.cwd(), `.env.${process.env.NODE_ENV || "development"}`)
@@ -132,11 +134,52 @@ app.get("/health", (req, res) => {
res.status(200).send("OK");
});
// S3 sync status endpoint
app.get("/sync/status", ValidateImsToken, async (req, res) => {
try {
const status = await dailyS3Scheduler.getStatus();
res.json(status);
} catch (error) {
logger.error("Failed to get sync status:", error);
const errorMessage = error instanceof Error ? error.message : "Unknown error";
res.status(500).json({ error: errorMessage });
}
});
// Manual S3 sync trigger endpoint (for testing)
app.post("/sync/trigger", ValidateImsToken, async (req, res) => {
try {
await dailyS3Scheduler.triggerManualSync();
res.json({ success: true, message: "Manual sync triggered successfully" });
} catch (error) {
logger.error("Manua--l sync failed:", error);
const errorMessage = error instanceof Error ? error.message : "Unknown error";
res.status(500).json({ success: false, message: "Manual sync failed", error: errorMessage });
}
});
// Jobs directory analysis endpoint
app.get("/jobs/analysis", ValidateImsToken, async (req, res) => {
try {
const analysis = await analyzeJobsDirectory();
res.json(analysis);
} catch (error) {
logger.error("Failed to analyze jobs directory:", error);
const errorMessage = error instanceof Error ? error.message : "Unknown error";
res.status(500).json({ success: false, message: "Jobs analysis failed", error: errorMessage });
}
});
// Static files
InitServer();
app.use(FolderPaths.StaticPath, express.static(FolderPaths.Root, { etag: false, maxAge: 30 * 1000 }));
app.use("/assets", express.static("/assets", { etag: false, maxAge: 30 * 1000 }));
// Start the daily S3 sync scheduler
dailyS3Scheduler.start().catch((error) => {
logger.error("Failed to start sync scheduler:", error);
});
app.listen(port, () => {
logger.info(`ImEX Media Server is running at http://localhost:${port}`);
});