Implement Phase 2 asset storage pipeline
This commit is contained in:
+43
-2
@@ -3,6 +3,8 @@ const { Server: SocketServer } = require("socket.io");
|
||||
const { createApp } = require("./app");
|
||||
const { openDatabase } = require("./database");
|
||||
const { runMigrations } = require("./database/migrate");
|
||||
const { createImageProcessor } = require("./image-processing");
|
||||
const { createStorageService } = require("./storage");
|
||||
|
||||
function listen(httpServer, port, host) {
|
||||
return new Promise((resolve, reject) => {
|
||||
@@ -20,7 +22,12 @@ function listen(httpServer, port, host) {
|
||||
});
|
||||
}
|
||||
|
||||
function createRuntime({ config, logger = console }) {
|
||||
function createRuntime({
|
||||
config,
|
||||
imageProcessor: suppliedImageProcessor,
|
||||
logger = console,
|
||||
storage: suppliedStorage,
|
||||
}) {
|
||||
const database = openDatabase(config.database);
|
||||
let migrations;
|
||||
try {
|
||||
@@ -34,7 +41,32 @@ function createRuntime({ config, logger = console }) {
|
||||
ready: false,
|
||||
stopping: false,
|
||||
};
|
||||
const app = createApp({ config, database, lifecycle, migrations });
|
||||
let storage;
|
||||
let imageProcessor;
|
||||
try {
|
||||
storage = suppliedStorage || createStorageService(config.storage, { logger });
|
||||
imageProcessor =
|
||||
suppliedImageProcessor ||
|
||||
createImageProcessor({ maxInputPixels: config.processing.maxInputPixels });
|
||||
} catch (error) {
|
||||
database.close();
|
||||
throw error;
|
||||
}
|
||||
let app;
|
||||
try {
|
||||
app = createApp({
|
||||
config,
|
||||
database,
|
||||
imageProcessor,
|
||||
lifecycle,
|
||||
migrations,
|
||||
storage,
|
||||
});
|
||||
} catch (error) {
|
||||
storage.stop();
|
||||
database.close();
|
||||
throw error;
|
||||
}
|
||||
const httpServer = http.createServer(app);
|
||||
const io = new SocketServer(httpServer, {
|
||||
serveClient: false,
|
||||
@@ -63,9 +95,15 @@ function createRuntime({ config, logger = console }) {
|
||||
.then((listeningAddress) => {
|
||||
address = listeningAddress;
|
||||
lifecycle.ready = true;
|
||||
Promise.resolve()
|
||||
.then(() => storage.start())
|
||||
.catch(() => {
|
||||
logger.warn?.("Object storage health checks could not be started");
|
||||
});
|
||||
return listeningAddress;
|
||||
})
|
||||
.catch((error) => {
|
||||
storage.stop();
|
||||
database.close();
|
||||
throw error;
|
||||
});
|
||||
@@ -85,6 +123,7 @@ function createRuntime({ config, logger = console }) {
|
||||
if (settled) return;
|
||||
settled = true;
|
||||
clearTimeout(timeout);
|
||||
storage.stop();
|
||||
if (database.open) {
|
||||
database.close();
|
||||
}
|
||||
@@ -119,6 +158,8 @@ function createRuntime({ config, logger = console }) {
|
||||
io,
|
||||
lifecycle,
|
||||
migrations,
|
||||
storage,
|
||||
imageProcessor,
|
||||
get address() {
|
||||
return address;
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user