pms_md 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BUILD_SUMMARY.md +257 -0
- package/CHANGELOG.md +176 -0
- package/DATABASE_SUPPORT.md +582 -0
- package/FINAL_CHECKLIST.md +210 -0
- package/PACKAGE_READY.txt +169 -0
- package/QUICK_DATABASE_REFERENCE.md +247 -0
- package/README.md +582 -57
- package/RELEASE_v1.0.3.md +237 -0
- package/node-monitor/src/monitors/dbConnectionMonitor.js +536 -4
- package/package.json +47 -3
- package/MYSQL2_SEQUELIZE_SUPPORT.md +0 -334
- package/pms_md-1.0.1.tgz +0 -0
- package/pms_md-1.0.2.tgz +0 -0
- package/test-sequelize-monitor.js +0 -102
package/README.md
CHANGED
|
@@ -1,93 +1,618 @@
|
|
|
1
|
-
# PMS_MD
|
|
1
|
+
# 🚀 PMS_MD - Comprehensive Node.js Monitoring Solution
|
|
2
2
|
|
|
3
|
+
[](https://www.npmjs.com/package/pms_md)
|
|
4
|
+
[](LICENSE)
|
|
5
|
+
[](https://nodejs.org/)
|
|
3
6
|
|
|
7
|
+
**Production-ready monitoring solution for Node.js applications with comprehensive database support, error tracking, health checks, and multi-channel notifications.**
|
|
4
8
|
|
|
5
|
-
|
|
9
|
+
---
|
|
6
10
|
|
|
7
|
-
|
|
11
|
+
## ✨ Features
|
|
8
12
|
|
|
9
|
-
|
|
13
|
+
- 🗄️ **13+ Database Support** - MongoDB, PostgreSQL, MySQL, MariaDB, MSSQL, SQLite, Redis, Cassandra, Elasticsearch, DynamoDB, Neo4j, CouchDB, Sequelize
|
|
14
|
+
- 📧 **Email Notifications** - Automatic alerts for errors, crashes, and database failures
|
|
15
|
+
- 📊 **Health Monitoring** - System resources (CPU, Memory), API errors, database connections
|
|
16
|
+
- 🔔 **Multi-Channel Alerts** - Email, Slack, and custom webhooks
|
|
17
|
+
- 📝 **Advanced Logging** - Winston-based logging with daily rotation and sanitization
|
|
18
|
+
- 🛡️ **Graceful Shutdown** - Proper cleanup with email notifications on server shutdown
|
|
19
|
+
- 🎯 **Express Integration** - Middleware for error handling, request logging, and health endpoints
|
|
20
|
+
- 📈 **Metrics & Analytics** - Historical metrics tracking and dashboard endpoints
|
|
10
21
|
|
|
11
|
-
|
|
22
|
+
---
|
|
12
23
|
|
|
13
|
-
|
|
14
|
-
- [ ] [Add files using the command line](https://docs.gitlab.com/topics/git/add_files/#add-files-to-a-git-repository) or push an existing Git repository with the following command:
|
|
24
|
+
## 📦 Installation
|
|
15
25
|
|
|
26
|
+
```bash
|
|
27
|
+
npm install pms_md
|
|
16
28
|
```
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
29
|
+
|
|
30
|
+
### Optional Database Drivers
|
|
31
|
+
|
|
32
|
+
Install only the database drivers you need:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# SQL Databases
|
|
36
|
+
npm install pg # PostgreSQL
|
|
37
|
+
npm install mysql2 # MySQL
|
|
38
|
+
npm install mariadb # MariaDB
|
|
39
|
+
npm install mssql # MSSQL (SQL Server)
|
|
40
|
+
npm install sqlite3 # SQLite
|
|
41
|
+
|
|
42
|
+
# NoSQL Databases
|
|
43
|
+
npm install mongoose # MongoDB
|
|
44
|
+
npm install nano # CouchDB
|
|
45
|
+
npm install cassandra-driver # Cassandra
|
|
46
|
+
|
|
47
|
+
# Cache & Search
|
|
48
|
+
npm install ioredis # Redis
|
|
49
|
+
npm install @elastic/elasticsearch # Elasticsearch
|
|
50
|
+
|
|
51
|
+
# Cloud Databases
|
|
52
|
+
npm install @aws-sdk/client-dynamodb # DynamoDB
|
|
53
|
+
|
|
54
|
+
# Graph Databases
|
|
55
|
+
npm install neo4j-driver # Neo4j
|
|
56
|
+
|
|
57
|
+
# ORM
|
|
58
|
+
npm install sequelize # Sequelize (MySQL, PostgreSQL, SQLite, MSSQL)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 🚀 Quick Start
|
|
64
|
+
|
|
65
|
+
### Basic Setup
|
|
66
|
+
|
|
67
|
+
```javascript
|
|
68
|
+
const express = require('express');
|
|
69
|
+
const NodeMonitor = require('pms_md');
|
|
70
|
+
|
|
71
|
+
const app = express();
|
|
72
|
+
|
|
73
|
+
// Initialize monitor
|
|
74
|
+
const monitor = new NodeMonitor({
|
|
75
|
+
app: {
|
|
76
|
+
name: 'my-app',
|
|
77
|
+
environment: 'production'
|
|
78
|
+
},
|
|
79
|
+
notifications: {
|
|
80
|
+
email: {
|
|
81
|
+
enabled: true,
|
|
82
|
+
smtp: {
|
|
83
|
+
host: 'smtp.gmail.com',
|
|
84
|
+
port: 587,
|
|
85
|
+
secure: false,
|
|
86
|
+
auth: {
|
|
87
|
+
user: process.env.EMAIL_USER,
|
|
88
|
+
pass: process.env.EMAIL_APP_PASSWORD
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
from: process.env.EMAIL_USER,
|
|
92
|
+
recipients: ['admin@example.com']
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
// Add middleware
|
|
98
|
+
app.use(monitor.requestLogger());
|
|
99
|
+
app.use(monitor.errorMiddleware());
|
|
100
|
+
|
|
101
|
+
// Health endpoints
|
|
102
|
+
app.get('/health', monitor.healthCheckEndpoint());
|
|
103
|
+
app.get('/health/info', monitor.healthInfoEndpoint());
|
|
104
|
+
|
|
105
|
+
// Start monitoring
|
|
106
|
+
monitor.start();
|
|
107
|
+
|
|
108
|
+
// Start server
|
|
109
|
+
const server = app.listen(3000, () => {
|
|
110
|
+
console.log('Server running on port 3000');
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
// Graceful shutdown with email notifications
|
|
114
|
+
monitor.setupGracefulShutdown(server);
|
|
115
|
+
|
|
116
|
+
module.exports = app;
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## 🗄️ Database Monitoring
|
|
122
|
+
|
|
123
|
+
### MSSQL (SQL Server)
|
|
124
|
+
|
|
125
|
+
```javascript
|
|
126
|
+
const sql = require('mssql');
|
|
127
|
+
|
|
128
|
+
const pool = await sql.connect({
|
|
129
|
+
server: 'localhost',
|
|
130
|
+
database: 'mydb',
|
|
131
|
+
user: 'sa',
|
|
132
|
+
password: 'password',
|
|
133
|
+
options: {
|
|
134
|
+
encrypt: true,
|
|
135
|
+
trustServerCertificate: true
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
monitor.registerDatabase('mssql', 'mssql', pool);
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### PostgreSQL
|
|
143
|
+
|
|
144
|
+
```javascript
|
|
145
|
+
const { Pool } = require('pg');
|
|
146
|
+
|
|
147
|
+
const pool = new Pool({
|
|
148
|
+
host: 'localhost',
|
|
149
|
+
database: 'mydb',
|
|
150
|
+
user: 'postgres',
|
|
151
|
+
password: 'password'
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
monitor.registerDatabase('postgres', 'postgresql', pool);
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### MySQL / MariaDB
|
|
158
|
+
|
|
159
|
+
```javascript
|
|
160
|
+
const mysql = require('mysql2/promise');
|
|
161
|
+
|
|
162
|
+
const pool = mysql.createPool({
|
|
163
|
+
host: 'localhost',
|
|
164
|
+
user: 'root',
|
|
165
|
+
password: 'password',
|
|
166
|
+
database: 'mydb'
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
monitor.registerDatabase('mysql', 'mysql2', pool);
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
### MongoDB
|
|
174
|
+
|
|
175
|
+
```javascript
|
|
176
|
+
const mongoose = require('mongoose');
|
|
177
|
+
|
|
178
|
+
await mongoose.connect('mongodb://localhost:27017/mydb');
|
|
179
|
+
monitor.registerDatabase('mongodb', 'mongoose', mongoose.connection);
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Redis
|
|
183
|
+
|
|
184
|
+
```javascript
|
|
185
|
+
const Redis = require('ioredis');
|
|
186
|
+
|
|
187
|
+
const redis = new Redis({
|
|
188
|
+
host: 'localhost',
|
|
189
|
+
port: 6379
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
monitor.registerDatabase('redis', 'redis', redis);
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### SQLite
|
|
196
|
+
|
|
197
|
+
```javascript
|
|
198
|
+
const sqlite3 = require('sqlite3');
|
|
199
|
+
const db = new sqlite3.Database('./mydb.sqlite');
|
|
200
|
+
|
|
201
|
+
monitor.registerDatabase('sqlite', 'sqlite', db);
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Cassandra
|
|
205
|
+
|
|
206
|
+
```javascript
|
|
207
|
+
const cassandra = require('cassandra-driver');
|
|
208
|
+
|
|
209
|
+
const client = new cassandra.Client({
|
|
210
|
+
contactPoints: ['localhost'],
|
|
211
|
+
localDataCenter: 'datacenter1'
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
await client.connect();
|
|
215
|
+
monitor.registerDatabase('cassandra', 'cassandra', client);
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
**[See complete database guide →](DATABASE_SUPPORT.md)**
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## 📊 Supported Databases
|
|
223
|
+
|
|
224
|
+
| Database | Type | Package | Status |
|
|
225
|
+
|----------|------|---------|--------|
|
|
226
|
+
| MongoDB | NoSQL | `mongoose` | ✅ |
|
|
227
|
+
| PostgreSQL | SQL | `pg` | ✅ |
|
|
228
|
+
| MySQL | SQL | `mysql2` | ✅ |
|
|
229
|
+
| MariaDB | SQL | `mariadb` | ✅ |
|
|
230
|
+
| MSSQL | SQL | `mssql` | ✅ |
|
|
231
|
+
| SQLite | SQL | `sqlite3` | ✅ |
|
|
232
|
+
| Redis | Cache | `ioredis` | ✅ |
|
|
233
|
+
| CouchDB | NoSQL | `nano` | ✅ |
|
|
234
|
+
| Cassandra | NoSQL | `cassandra-driver` | ✅ |
|
|
235
|
+
| Elasticsearch | Search | `@elastic/elasticsearch` | ✅ |
|
|
236
|
+
| DynamoDB | Cloud | `@aws-sdk/client-dynamodb` | ✅ |
|
|
237
|
+
| Neo4j | Graph | `neo4j-driver` | ✅ |
|
|
238
|
+
| Sequelize | ORM | `sequelize` | ✅ |
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## 📧 Email Notifications
|
|
243
|
+
|
|
244
|
+
### Gmail Setup
|
|
245
|
+
|
|
246
|
+
1. Enable 2-Step Verification in your Google Account
|
|
247
|
+
2. Generate App Password: https://myaccount.google.com/apppasswords
|
|
248
|
+
3. Configure environment variables:
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
EMAIL_USER=your-email@gmail.com
|
|
252
|
+
EMAIL_APP_PASSWORD=your-16-char-app-password
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### Configuration
|
|
256
|
+
|
|
257
|
+
```javascript
|
|
258
|
+
const monitor = new NodeMonitor({
|
|
259
|
+
notifications: {
|
|
260
|
+
email: {
|
|
261
|
+
enabled: true,
|
|
262
|
+
smtp: {
|
|
263
|
+
host: 'smtp.gmail.com',
|
|
264
|
+
port: 587,
|
|
265
|
+
secure: false,
|
|
266
|
+
auth: {
|
|
267
|
+
user: process.env.EMAIL_USER,
|
|
268
|
+
pass: process.env.EMAIL_APP_PASSWORD
|
|
269
|
+
}
|
|
270
|
+
},
|
|
271
|
+
from: process.env.EMAIL_USER,
|
|
272
|
+
recipients: ['admin@example.com', 'team@example.com']
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### Notification Types
|
|
279
|
+
|
|
280
|
+
- ✅ **Server Errors** - Uncaught exceptions and unhandled rejections
|
|
281
|
+
- ✅ **Database Failures** - Connection loss and recovery
|
|
282
|
+
- ✅ **Graceful Shutdown** - Server shutdown notifications
|
|
283
|
+
- ✅ **API Errors** - HTTP 500 errors and critical failures
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## 🎯 Express Middleware
|
|
288
|
+
|
|
289
|
+
### Error Handling
|
|
290
|
+
|
|
291
|
+
```javascript
|
|
292
|
+
// Automatic error tracking and email notifications
|
|
293
|
+
app.use(monitor.errorMiddleware());
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### Request Logging
|
|
297
|
+
|
|
298
|
+
```javascript
|
|
299
|
+
// Log all HTTP requests with sanitization
|
|
300
|
+
app.use(monitor.requestLogger());
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### 404 Handler
|
|
304
|
+
|
|
305
|
+
```javascript
|
|
306
|
+
// Handle 404 errors
|
|
307
|
+
app.use(monitor.notFoundHandler());
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
## 📈 Health Endpoints
|
|
313
|
+
|
|
314
|
+
### Basic Health Check
|
|
315
|
+
|
|
316
|
+
```javascript
|
|
317
|
+
app.get('/health', monitor.healthCheckEndpoint());
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
**Response:**
|
|
321
|
+
```json
|
|
322
|
+
{
|
|
323
|
+
"status": "healthy",
|
|
324
|
+
"timestamp": "2025-11-17T12:00:00.000Z",
|
|
325
|
+
"uptime": 3600,
|
|
326
|
+
"databases": {
|
|
327
|
+
"mssql": "connected",
|
|
328
|
+
"redis": "connected"
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
### Detailed Health Info
|
|
334
|
+
|
|
335
|
+
```javascript
|
|
336
|
+
app.get('/health/info', monitor.healthInfoEndpoint());
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
**Response:**
|
|
340
|
+
```json
|
|
341
|
+
{
|
|
342
|
+
"status": "healthy",
|
|
343
|
+
"timestamp": "2025-11-17T12:00:00.000Z",
|
|
344
|
+
"uptime": 3600,
|
|
345
|
+
"system": {
|
|
346
|
+
"cpu": 45.2,
|
|
347
|
+
"memory": {
|
|
348
|
+
"used": 512,
|
|
349
|
+
"total": 8192,
|
|
350
|
+
"percentage": 6.25
|
|
351
|
+
}
|
|
352
|
+
},
|
|
353
|
+
"databases": {
|
|
354
|
+
"mssql": {
|
|
355
|
+
"status": "connected",
|
|
356
|
+
"type": "mssql",
|
|
357
|
+
"version": "Microsoft SQL Server 2019...",
|
|
358
|
+
"connections": 10
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
---
|
|
366
|
+
|
|
367
|
+
## 🛡️ Graceful Shutdown
|
|
368
|
+
|
|
369
|
+
Automatically send email notifications when your server shuts down:
|
|
370
|
+
|
|
371
|
+
```javascript
|
|
372
|
+
const server = app.listen(3000);
|
|
373
|
+
|
|
374
|
+
// Setup graceful shutdown with email notifications
|
|
375
|
+
monitor.setupGracefulShutdown(server);
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
**Features:**
|
|
379
|
+
- ✅ Sends email notification on shutdown
|
|
380
|
+
- ✅ Closes all database connections
|
|
381
|
+
- ✅ Stops all monitoring intervals
|
|
382
|
+
- ✅ Handles SIGTERM and SIGINT signals
|
|
383
|
+
- ✅ Prevents memory leaks
|
|
384
|
+
|
|
385
|
+
---
|
|
386
|
+
|
|
387
|
+
## 📝 Advanced Configuration
|
|
388
|
+
|
|
389
|
+
### Full Configuration Example
|
|
390
|
+
|
|
391
|
+
```javascript
|
|
392
|
+
const monitor = new NodeMonitor({
|
|
393
|
+
app: {
|
|
394
|
+
name: 'my-production-app',
|
|
395
|
+
environment: 'production',
|
|
396
|
+
version: '1.0.0'
|
|
397
|
+
},
|
|
398
|
+
monitoring: {
|
|
399
|
+
enabled: true,
|
|
400
|
+
interval: 60000, // Check every 60 seconds
|
|
401
|
+
systemMetrics: true,
|
|
402
|
+
apiErrors: true
|
|
403
|
+
},
|
|
404
|
+
database: {
|
|
405
|
+
enabled: true,
|
|
406
|
+
checkInterval: 30000, // Check every 30 seconds
|
|
407
|
+
queryTimeout: 5000,
|
|
408
|
+
consecutiveFailuresThreshold: 3
|
|
409
|
+
},
|
|
410
|
+
notifications: {
|
|
411
|
+
email: {
|
|
412
|
+
enabled: true,
|
|
413
|
+
smtp: {
|
|
414
|
+
host: 'smtp.gmail.com',
|
|
415
|
+
port: 587,
|
|
416
|
+
secure: false,
|
|
417
|
+
auth: {
|
|
418
|
+
user: process.env.EMAIL_USER,
|
|
419
|
+
pass: process.env.EMAIL_APP_PASSWORD
|
|
420
|
+
}
|
|
421
|
+
},
|
|
422
|
+
from: process.env.EMAIL_USER,
|
|
423
|
+
recipients: ['admin@example.com']
|
|
424
|
+
},
|
|
425
|
+
slack: {
|
|
426
|
+
enabled: false,
|
|
427
|
+
webhookUrl: process.env.SLACK_WEBHOOK_URL
|
|
428
|
+
}
|
|
429
|
+
},
|
|
430
|
+
logging: {
|
|
431
|
+
level: 'info',
|
|
432
|
+
directory: './logs',
|
|
433
|
+
maxFiles: '14d',
|
|
434
|
+
maxSize: '20m',
|
|
435
|
+
sanitize: true
|
|
436
|
+
}
|
|
437
|
+
});
|
|
21
438
|
```
|
|
22
439
|
|
|
23
|
-
|
|
440
|
+
---
|
|
441
|
+
|
|
442
|
+
## 📚 API Reference
|
|
443
|
+
|
|
444
|
+
### Core Methods
|
|
445
|
+
|
|
446
|
+
#### `monitor.start()`
|
|
447
|
+
Start all monitoring services.
|
|
448
|
+
|
|
449
|
+
#### `monitor.stop()`
|
|
450
|
+
Stop all monitoring services.
|
|
451
|
+
|
|
452
|
+
#### `monitor.registerDatabase(name, type, connection)`
|
|
453
|
+
Register a database for monitoring.
|
|
454
|
+
|
|
455
|
+
**Parameters:**
|
|
456
|
+
- `name` (string) - Unique identifier for the database
|
|
457
|
+
- `type` (string) - Database type (e.g., 'mssql', 'postgresql', 'mongodb')
|
|
458
|
+
- `connection` (object) - Database connection object
|
|
459
|
+
|
|
460
|
+
#### `monitor.getDatabaseStats(name)`
|
|
461
|
+
Get statistics for a specific database.
|
|
462
|
+
|
|
463
|
+
**Returns:** Promise<object>
|
|
464
|
+
|
|
465
|
+
#### `monitor.getAllDatabaseStats()`
|
|
466
|
+
Get statistics for all registered databases.
|
|
467
|
+
|
|
468
|
+
**Returns:** Promise<object>
|
|
469
|
+
|
|
470
|
+
#### `monitor.setupGracefulShutdown(server)`
|
|
471
|
+
Setup graceful shutdown with email notifications.
|
|
472
|
+
|
|
473
|
+
**Parameters:**
|
|
474
|
+
- `server` (object) - HTTP server instance
|
|
475
|
+
|
|
476
|
+
### Middleware Methods
|
|
477
|
+
|
|
478
|
+
#### `monitor.errorMiddleware()`
|
|
479
|
+
Express middleware for error handling.
|
|
480
|
+
|
|
481
|
+
#### `monitor.requestLogger()`
|
|
482
|
+
Express middleware for request logging.
|
|
483
|
+
|
|
484
|
+
#### `monitor.notFoundHandler()`
|
|
485
|
+
Express middleware for 404 errors.
|
|
486
|
+
|
|
487
|
+
### Endpoint Methods
|
|
488
|
+
|
|
489
|
+
#### `monitor.healthCheckEndpoint()`
|
|
490
|
+
Express endpoint handler for basic health check.
|
|
491
|
+
|
|
492
|
+
#### `monitor.healthInfoEndpoint()`
|
|
493
|
+
Express endpoint handler for detailed health information.
|
|
494
|
+
|
|
495
|
+
#### `monitor.dashboardEndpoint()`
|
|
496
|
+
Express endpoint handler for monitoring dashboard.
|
|
497
|
+
|
|
498
|
+
---
|
|
499
|
+
|
|
500
|
+
## 🧪 Testing
|
|
501
|
+
|
|
502
|
+
Run the comprehensive test suite:
|
|
503
|
+
|
|
504
|
+
```bash
|
|
505
|
+
node test-all-databases.js
|
|
506
|
+
```
|
|
507
|
+
|
|
508
|
+
**Test Coverage:**
|
|
509
|
+
- ✅ Package loading
|
|
510
|
+
- ✅ Monitor instantiation
|
|
511
|
+
- ✅ Database registration (all 13+ types)
|
|
512
|
+
- ✅ Health checks
|
|
513
|
+
- ✅ Statistics retrieval
|
|
514
|
+
- ✅ Peer dependencies
|
|
515
|
+
|
|
516
|
+
---
|
|
517
|
+
|
|
518
|
+
## 📖 Documentation
|
|
519
|
+
|
|
520
|
+
- **[Database Support Guide](DATABASE_SUPPORT.md)** - Complete guide for all 13+ databases
|
|
521
|
+
- **[Quick Reference](QUICK_DATABASE_REFERENCE.md)** - Quick setup examples
|
|
522
|
+
- **[Changelog](CHANGELOG.md)** - Version history and updates
|
|
523
|
+
- **[Release Notes](RELEASE_v1.0.3.md)** - Latest release information
|
|
524
|
+
|
|
525
|
+
---
|
|
526
|
+
|
|
527
|
+
## 🔧 Troubleshooting
|
|
528
|
+
|
|
529
|
+
### Email Notifications Not Working
|
|
530
|
+
|
|
531
|
+
1. Check Gmail App Password is correct (16 characters, no spaces)
|
|
532
|
+
2. Verify 2-Step Verification is enabled
|
|
533
|
+
3. Check environment variables are loaded
|
|
534
|
+
4. Review logs in `./logs` directory
|
|
535
|
+
|
|
536
|
+
### Database Connection Failures
|
|
24
537
|
|
|
25
|
-
|
|
538
|
+
1. Verify database driver is installed
|
|
539
|
+
2. Check connection credentials
|
|
540
|
+
3. Ensure database server is running
|
|
541
|
+
4. Review database-specific logs
|
|
26
542
|
|
|
27
|
-
|
|
543
|
+
### High Memory Usage
|
|
28
544
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
|
|
33
|
-
- [ ] [Set auto-merge](https://docs.gitlab.com/user/project/merge_requests/auto_merge/)
|
|
545
|
+
1. Adjust `monitoring.interval` to reduce frequency
|
|
546
|
+
2. Reduce `logging.maxFiles` retention period
|
|
547
|
+
3. Disable unused monitoring features
|
|
34
548
|
|
|
35
|
-
|
|
549
|
+
---
|
|
36
550
|
|
|
37
|
-
|
|
551
|
+
## 🤝 Contributing
|
|
38
552
|
|
|
39
|
-
|
|
40
|
-
- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing (SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)
|
|
41
|
-
- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
|
|
42
|
-
- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)
|
|
43
|
-
- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
|
|
553
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
44
554
|
|
|
45
|
-
|
|
555
|
+
---
|
|
46
556
|
|
|
47
|
-
|
|
557
|
+
## 📄 License
|
|
48
558
|
|
|
49
|
-
|
|
559
|
+
ISC License - see LICENSE file for details
|
|
50
560
|
|
|
51
|
-
|
|
561
|
+
---
|
|
52
562
|
|
|
53
|
-
|
|
563
|
+
## 👤 Author
|
|
54
564
|
|
|
55
|
-
|
|
56
|
-
|
|
565
|
+
**Manish Proses**
|
|
566
|
+
- Email: manish.proses@gmail.com
|
|
567
|
+
- GitLab: https://gitlab.com/manish-proses/pms_md
|
|
57
568
|
|
|
58
|
-
|
|
59
|
-
Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
|
|
569
|
+
---
|
|
60
570
|
|
|
61
|
-
##
|
|
62
|
-
On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
|
|
571
|
+
## 🙏 Acknowledgments
|
|
63
572
|
|
|
64
|
-
|
|
65
|
-
|
|
573
|
+
Built with:
|
|
574
|
+
- [Winston](https://github.com/winstonjs/winston) - Logging
|
|
575
|
+
- [Nodemailer](https://nodemailer.com/) - Email notifications
|
|
576
|
+
- [Express](https://expressjs.com/) - Web framework
|
|
66
577
|
|
|
67
|
-
|
|
68
|
-
Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
|
|
578
|
+
---
|
|
69
579
|
|
|
70
|
-
##
|
|
71
|
-
Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
|
|
580
|
+
## 📊 Version History
|
|
72
581
|
|
|
73
|
-
|
|
74
|
-
|
|
582
|
+
### v1.0.3 (Latest)
|
|
583
|
+
- ✅ Added MSSQL (SQL Server) support
|
|
584
|
+
- ✅ Added MariaDB support
|
|
585
|
+
- ✅ Added SQLite support
|
|
586
|
+
- ✅ Added CouchDB support
|
|
587
|
+
- ✅ Added Cassandra support
|
|
588
|
+
- ✅ Added Elasticsearch support
|
|
589
|
+
- ✅ Added DynamoDB support
|
|
590
|
+
- ✅ Added Neo4j support
|
|
591
|
+
- ✅ Comprehensive documentation
|
|
592
|
+
- ✅ 100% test coverage
|
|
75
593
|
|
|
76
|
-
|
|
77
|
-
|
|
594
|
+
### v1.0.2
|
|
595
|
+
- ✅ Enhanced MySQL2 support (v2 and v3)
|
|
596
|
+
- ✅ Added Sequelize ORM support
|
|
597
|
+
- ✅ Improved peer dependencies
|
|
78
598
|
|
|
79
|
-
|
|
80
|
-
|
|
599
|
+
### v1.0.1
|
|
600
|
+
- ✅ Initial release
|
|
601
|
+
- ✅ MongoDB, PostgreSQL, MySQL, Redis support
|
|
602
|
+
- ✅ Email notifications
|
|
603
|
+
- ✅ Health monitoring
|
|
81
604
|
|
|
82
|
-
|
|
605
|
+
---
|
|
83
606
|
|
|
84
|
-
|
|
607
|
+
## 🚀 What's Next?
|
|
85
608
|
|
|
86
|
-
|
|
87
|
-
|
|
609
|
+
Planned features for future releases:
|
|
610
|
+
- TypeScript definitions
|
|
611
|
+
- Prometheus metrics export
|
|
612
|
+
- Custom alerting rules
|
|
613
|
+
- Performance profiling
|
|
614
|
+
- Distributed tracing
|
|
88
615
|
|
|
89
|
-
|
|
90
|
-
For open source projects, say how it is licensed.
|
|
616
|
+
---
|
|
91
617
|
|
|
92
|
-
|
|
93
|
-
If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
|
|
618
|
+
**Made with ❤️ for the Node.js community**
|