-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathmongo.ts
More file actions
94 lines (81 loc) · 2.1 KB
/
mongo.ts
File metadata and controls
94 lines (81 loc) · 2.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import { Db, MongoClient, MongoClientOptions } from 'mongodb';
import HawkCatcher from '@hawk.so/nodejs';
import { setupMongoMetrics, withMongoMetrics } from './metrics';
const hawkDBUrl = process.env.MONGO_HAWK_DB_URL || 'mongodb://localhost:27017/hawk';
const eventsDBUrl = process.env.MONGO_EVENTS_DB_URL || 'mongodb://localhost:27017/events';
/**
* Connections to Hawk databases
*/
interface Databases {
/**
* Hawk database for users, workspaces, project, etc
*/
hawk: Db | null;
/**
* Events database
*/
events: Db | null;
}
/**
* Exported database connections
*/
export const databases: Databases = {
hawk: null,
events: null,
};
/**
* Mongo clients for Hawk database
*/
interface MongoClients {
/**
* Mongo client for Hawk database for users, workspaces, project, etc
*/
hawk: MongoClient | null;
/**
* Mongo client for events database
*/
events: MongoClient | null;
}
/**
* Export mongo clients
*/
export const mongoClients: MongoClients = {
hawk: null,
events: null,
};
/**
* Common params for all connections
*/
const connectionConfig: MongoClientOptions = withMongoMetrics({
useNewUrlParser: true,
useUnifiedTopology: true,
});
/**
* Setups connections to the databases (hawk api and events databases)
*/
export async function setupConnections(): Promise<void> {
try {
const [hawkMongoClient, eventsMongoClient] = await Promise.all([
MongoClient.connect(hawkDBUrl, connectionConfig),
MongoClient.connect(eventsDBUrl, connectionConfig),
]);
mongoClients.hawk = hawkMongoClient;
mongoClients.events = eventsMongoClient;
databases.hawk = hawkMongoClient.db();
databases.events = eventsMongoClient.db();
/**
* Log and and measure MongoDB metrics
*/
setupMongoMetrics(hawkMongoClient);
setupMongoMetrics(eventsMongoClient);
} catch (e) {
/** Catch start Mongo errors */
HawkCatcher.send(e as Error);
throw e;
}
}
/**
* Makes '_id' field optional on type
*/
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export type OptionalId<TSchema> = Omit<TSchema, '_id'> & { _id?: any };