DatabaseManager.ts error handling update

This commit is contained in:
Braun Patrik 2016-05-04 22:06:52 +02:00
parent 3d8ed0a3d2
commit f0552f6bfd
3 changed files with 80 additions and 90 deletions

View File

@ -1,53 +1,55 @@
///<reference path="../../../typings/main.d.ts"/> ///<reference path="../../../typings/main.d.ts"/>
import * as mongoose from 'mongoose'; import * as mongoose from "mongoose";
import {Schema} from "mongoose"; import {Schema} from "mongoose";
export class DatabaseManager{
export class DatabaseManager {
private static _instance:DatabaseManager = null; private static _instance:DatabaseManager = null;
private connectionError = false; private connectionError = false;
private errorObject = null;
private connectionOpen = false;
constructor(onError?:(err)=>void,onConnected?:() =>void){ constructor() {
mongoose.connection.on('error', function (err) {
this.connectionError = true;
if(onError){
onError(err);
}
});
mongoose.connection.on('connected', function () {
if(onConnected){
onConnected();
}
});
try {
mongoose.connect('mongodb://localhost/EQZT6L'); mongoose.connect('mongodb://localhost/EQZT6L');
}catch(ex){
this.connectionError = true;
if(onError){
onError(ex);
}
}
} }
public static getInstance(onError?:(err)=>void,onConnected?:() =>void){ public static getInstance(onError?:(err)=>void, onConnected?:() =>void) {
if(DatabaseManager._instance === null){ if (DatabaseManager._instance === null) {
DatabaseManager._instance = new DatabaseManager(onError,onConnected); DatabaseManager._instance = new DatabaseManager();
}else{
if(DatabaseManager._instance.connectionError === false && onConnected){
onConnected();
}
} }
return DatabaseManager._instance; return DatabaseManager._instance;
} }
public getModel(name:string,schema:any){ public onConnectionError(onError:(err) => void){
return mongoose.model(name,new Schema(schema)); if (this.connectionError === true) {
return onError(DatabaseManager._instance.errorObject);
}
mongoose.connection.once('error', (err) => {
this.connectionError = true;
this.errorObject = err;
onError(err);
});
} }
public disconnect(){ public onConnected(onConnected:() => void){
if (this.connectionOpen === true) {
return onConnected();
}
mongoose.connection.once('open', (err) => {
this.connectionOpen = true;
onConnected();
});
}
public getModel(name:string, schema:any) {
return mongoose.model(name, new Schema(schema));
}
public disconnect() {
mongoose.disconnect(); mongoose.disconnect();
} }
public isConnectionError(){ public isConnectionError() {
return this.connectionError; return this.connectionError;
} }
} }

View File

@ -1,10 +1,10 @@
///<reference path="../typings/main.d.ts"/> ///<reference path="../typings/main.d.ts"/>
import * as _express from 'express'; import * as _express from "express";
import * as _session from 'express-session'; import * as _session from "express-session";
import * as _bodyParser from 'body-parser'; import * as _bodyParser from "body-parser";
import * as _debug from 'debug'; import * as _debug from "debug";
import * as _http from 'http'; import * as _http from "http";
import {PublicRouter} from "./routes/PublicRouter"; import {PublicRouter} from "./routes/PublicRouter";
import {UserRouter} from "./routes/UserRouter"; import {UserRouter} from "./routes/UserRouter";
import {GalleryRouter} from "./routes/GalleryRouter"; import {GalleryRouter} from "./routes/GalleryRouter";
@ -13,8 +13,6 @@ import {ErrorRouter} from "./routes/ErrorRouter";
import {SharingRouter} from "./routes/SharingRouter"; import {SharingRouter} from "./routes/SharingRouter";
import {Config, DatabaseType} from "./config/Config"; import {Config, DatabaseType} from "./config/Config";
import {ObjectManagerRepository} from "./model/ObjectManagerRepository"; import {ObjectManagerRepository} from "./model/ObjectManagerRepository";
import {MongoGalleryManager} from "./model/mongoose/MongoGalleryManager";
import {MongoUserManager} from "./model/mongoose/MongoUserManager";
import {DatabaseManager} from "./model/mongoose/DatabaseManager"; import {DatabaseManager} from "./model/mongoose/DatabaseManager";
@ -25,14 +23,14 @@ export class Server {
private server:any; private server:any;
private port:number; private port:number;
constructor(){ constructor() {
this.debug = _debug("PiGallery2:server"); this.debug = _debug("PiGallery2:server");
this.app = _express(); this.app = _express();
this.app.set('view engine', 'ejs'); this.app.set('view engine', 'ejs');
if(process.env.DEBUG) { if (process.env.DEBUG) {
var _morgan = require('morgan'); var _morgan = require('morgan');
this.app.use(_morgan('dev')); this.app.use(_morgan('dev'));
} }
@ -41,10 +39,10 @@ export class Server {
* Session above all * Session above all
*/ */
this.app.use(_session({ this.app.use(_session({
name:"pigallery2-session", name: "pigallery2-session",
secret: 'PiGallery2 secret', secret: 'PiGallery2 secret',
cookie: { cookie: {
maxAge: 60000*10, maxAge: 60000 * 10,
httpOnly: false httpOnly: false
}, },
resave: true, resave: true,
@ -58,18 +56,16 @@ export class Server {
this.app.use(_bodyParser.json()); this.app.use(_bodyParser.json());
if(Config.databaseType === DatabaseType.memory){ if (Config.databaseType === DatabaseType.memory) {
ObjectManagerRepository.MemoryMongoManagers();
}else {
if (DatabaseManager.getInstance(()=>{
console.error("MongoDB connection error. Falling back to memory Object Managers");
ObjectManagerRepository.MemoryMongoManagers();
}).isConnectionError()) {
console.error("MongoDB connection error. Falling back to memory Object Managers");
ObjectManagerRepository.MemoryMongoManagers(); ObjectManagerRepository.MemoryMongoManagers();
} else { } else {
ObjectManagerRepository.InitMongoManagers(); ObjectManagerRepository.InitMongoManagers();
} DatabaseManager.getInstance().onConnectionError(
()=> {
console.error("MongoDB connection error. Falling back to memory Object Managers");
ObjectManagerRepository.MemoryMongoManagers();
});
} }
new PublicRouter(this.app); new PublicRouter(this.app);
@ -82,8 +78,6 @@ export class Server {
new ErrorRouter(this.app); new ErrorRouter(this.app);
// Get PORT from environment and store in Express. // Get PORT from environment and store in Express.
this.app.set('port', Config.PORT); this.app.set('port', Config.PORT);
@ -99,8 +93,6 @@ export class Server {
} }
/** /**
* Event listener for HTTP server "error" event. * Event listener for HTTP server "error" event.
*/ */
@ -143,8 +135,7 @@ export class Server {
} }
if (process.env.DEBUG) {
if(process.env.DEBUG) {
console.log("Running in DEBUG mode"); console.log("Running in DEBUG mode");
} }

View File

@ -1,35 +1,32 @@
import {MongoUserManager} from "../../backend/model/mongoose/MongoUserManager"; import {MongoUserManager} from "../../backend/model/mongoose/MongoUserManager";
import {User, UserRoles} from "../../common/entities/User"; import {User, UserRoles} from "../../common/entities/User";
import {DatabaseManager} from "../../backend/model/mongoose/DatabaseManager"; import {DatabaseManager} from "../../backend/model/mongoose/DatabaseManager";
DatabaseManager.getInstance((err)=>{
DatabaseManager.getInstance().disconnect();
process.exit()
},()=>{
let userManager = new MongoUserManager();
userManager.createUser(new User(0,"demo","demo",UserRoles.Developer),(err)=>{
DatabaseManager.getInstance().disconnect();
process.exit()
});
userManager.createUser(new User(1,"developer","developer",UserRoles.Developer),(err)=>{ DatabaseManager.getInstance().onConnectionError(()=> {
DatabaseManager.getInstance().disconnect(); DatabaseManager.getInstance().disconnect();
process.exit() process.exit()
}); });
userManager.createUser(new User(2,"admin","admin",UserRoles.Admin),(err)=>{ DatabaseManager.getInstance().onConnected(()=> {
DatabaseManager.getInstance().disconnect(); let userManager = new MongoUserManager();
process.exit() userManager.createUser(new User(0, "demo", "demo", UserRoles.Developer), (err)=> {
});
userManager.createUser(new User(1, "developer", "developer", UserRoles.Developer), (err)=> {
userManager.createUser(new User(3,"user","user",UserRoles.User),(err)=>{
DatabaseManager.getInstance().disconnect(); userManager.createUser(new User(2, "admin", "admin", UserRoles.Admin), (err)=> {
process.exit()
}); userManager.createUser(new User(3, "user", "user", UserRoles.User), (err)=> {
userManager.createUser(new User(4,"guest","guest",UserRoles.Guest),(err)=>{ userManager.createUser(new User(4, "guest", "guest", UserRoles.Guest), (err)=> {
DatabaseManager.getInstance().disconnect();
process.exit() DatabaseManager.getInstance().disconnect();
}); process.exit()
});
});
});
});
});
}); });