mirror of
				https://github.com/louislam/uptime-kuma.git
				synced 2025-11-04 05:36:13 +08:00 
			
		
		
		
	Add support for MySQL/MariaDB databases #1817
This commit adds support for monitoring MySQL and MariaDB database servers. The mysql2 package was choosen over mysql as it provides a promise wrapper and is reportedly faster than the original mysql package whilst still maintaining the same API. Signed-off-by: Matthew Nickson <mnickson@sidingsmedia.com>
This commit is contained in:
		
							
								
								
									
										165
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										165
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -38,6 +38,7 @@
 | 
				
			|||||||
                "limiter": "^2.1.0",
 | 
					                "limiter": "^2.1.0",
 | 
				
			||||||
                "mqtt": "^4.2.8",
 | 
					                "mqtt": "^4.2.8",
 | 
				
			||||||
                "mssql": "^8.1.0",
 | 
					                "mssql": "^8.1.0",
 | 
				
			||||||
 | 
					                "mysql2": "^2.3.3",
 | 
				
			||||||
                "node-cloudflared-tunnel": "~1.0.9",
 | 
					                "node-cloudflared-tunnel": "~1.0.9",
 | 
				
			||||||
                "node-radius-client": "^1.0.0",
 | 
					                "node-radius-client": "^1.0.0",
 | 
				
			||||||
                "nodemailer": "~6.6.5",
 | 
					                "nodemailer": "~6.6.5",
 | 
				
			||||||
@@ -6359,6 +6360,14 @@
 | 
				
			|||||||
            "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
 | 
					            "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
 | 
				
			||||||
            "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
 | 
					            "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "node_modules/denque": {
 | 
				
			||||||
 | 
					            "version": "2.1.0",
 | 
				
			||||||
 | 
					            "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz",
 | 
				
			||||||
 | 
					            "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==",
 | 
				
			||||||
 | 
					            "engines": {
 | 
				
			||||||
 | 
					                "node": ">=0.10"
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "node_modules/depd": {
 | 
					        "node_modules/depd": {
 | 
				
			||||||
            "version": "1.1.2",
 | 
					            "version": "1.1.2",
 | 
				
			||||||
            "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
 | 
					            "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
 | 
				
			||||||
@@ -8449,6 +8458,14 @@
 | 
				
			|||||||
                "node": ">=10"
 | 
					                "node": ">=10"
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "node_modules/generate-function": {
 | 
				
			||||||
 | 
					            "version": "2.3.1",
 | 
				
			||||||
 | 
					            "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
 | 
				
			||||||
 | 
					            "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
 | 
				
			||||||
 | 
					            "dependencies": {
 | 
				
			||||||
 | 
					                "is-property": "^1.0.2"
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "node_modules/gensync": {
 | 
					        "node_modules/gensync": {
 | 
				
			||||||
            "version": "1.0.0-beta.2",
 | 
					            "version": "1.0.0-beta.2",
 | 
				
			||||||
            "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
 | 
					            "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
 | 
				
			||||||
@@ -9414,6 +9431,11 @@
 | 
				
			|||||||
            "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
 | 
					            "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
 | 
				
			||||||
            "dev": true
 | 
					            "dev": true
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "node_modules/is-property": {
 | 
				
			||||||
 | 
					            "version": "1.0.2",
 | 
				
			||||||
 | 
					            "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
 | 
				
			||||||
 | 
					            "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "node_modules/is-regex": {
 | 
					        "node_modules/is-regex": {
 | 
				
			||||||
            "version": "1.1.4",
 | 
					            "version": "1.1.4",
 | 
				
			||||||
            "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
 | 
					            "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
 | 
				
			||||||
@@ -12334,6 +12356,11 @@
 | 
				
			|||||||
                "node": ">=8"
 | 
					                "node": ">=8"
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "node_modules/long": {
 | 
				
			||||||
 | 
					            "version": "4.0.0",
 | 
				
			||||||
 | 
					            "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
 | 
				
			||||||
 | 
					            "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "node_modules/lru-cache": {
 | 
					        "node_modules/lru-cache": {
 | 
				
			||||||
            "version": "6.0.0",
 | 
					            "version": "6.0.0",
 | 
				
			||||||
            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
 | 
					            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
 | 
				
			||||||
@@ -12756,6 +12783,49 @@
 | 
				
			|||||||
                "node": "^12.20.0 || >=14"
 | 
					                "node": "^12.20.0 || >=14"
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "node_modules/mysql2": {
 | 
				
			||||||
 | 
					            "version": "2.3.3",
 | 
				
			||||||
 | 
					            "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz",
 | 
				
			||||||
 | 
					            "integrity": "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==",
 | 
				
			||||||
 | 
					            "dependencies": {
 | 
				
			||||||
 | 
					                "denque": "^2.0.1",
 | 
				
			||||||
 | 
					                "generate-function": "^2.3.1",
 | 
				
			||||||
 | 
					                "iconv-lite": "^0.6.3",
 | 
				
			||||||
 | 
					                "long": "^4.0.0",
 | 
				
			||||||
 | 
					                "lru-cache": "^6.0.0",
 | 
				
			||||||
 | 
					                "named-placeholders": "^1.1.2",
 | 
				
			||||||
 | 
					                "seq-queue": "^0.0.5",
 | 
				
			||||||
 | 
					                "sqlstring": "^2.3.2"
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "engines": {
 | 
				
			||||||
 | 
					                "node": ">= 8.0"
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        "node_modules/named-placeholders": {
 | 
				
			||||||
 | 
					            "version": "1.1.2",
 | 
				
			||||||
 | 
					            "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz",
 | 
				
			||||||
 | 
					            "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==",
 | 
				
			||||||
 | 
					            "dependencies": {
 | 
				
			||||||
 | 
					                "lru-cache": "^4.1.3"
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "engines": {
 | 
				
			||||||
 | 
					                "node": ">=6.0.0"
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        "node_modules/named-placeholders/node_modules/lru-cache": {
 | 
				
			||||||
 | 
					            "version": "4.1.5",
 | 
				
			||||||
 | 
					            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
 | 
				
			||||||
 | 
					            "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
 | 
				
			||||||
 | 
					            "dependencies": {
 | 
				
			||||||
 | 
					                "pseudomap": "^1.0.2",
 | 
				
			||||||
 | 
					                "yallist": "^2.1.2"
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        "node_modules/named-placeholders/node_modules/yallist": {
 | 
				
			||||||
 | 
					            "version": "2.1.2",
 | 
				
			||||||
 | 
					            "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
 | 
				
			||||||
 | 
					            "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A=="
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "node_modules/nanoclone": {
 | 
					        "node_modules/nanoclone": {
 | 
				
			||||||
            "version": "0.2.1",
 | 
					            "version": "0.2.1",
 | 
				
			||||||
            "resolved": "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz",
 | 
					            "resolved": "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz",
 | 
				
			||||||
@@ -13990,6 +14060,11 @@
 | 
				
			|||||||
            "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
 | 
					            "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
 | 
				
			||||||
            "dev": true
 | 
					            "dev": true
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "node_modules/pseudomap": {
 | 
				
			||||||
 | 
					            "version": "1.0.2",
 | 
				
			||||||
 | 
					            "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
 | 
				
			||||||
 | 
					            "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ=="
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "node_modules/psl": {
 | 
					        "node_modules/psl": {
 | 
				
			||||||
            "version": "1.9.0",
 | 
					            "version": "1.9.0",
 | 
				
			||||||
            "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
 | 
					            "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
 | 
				
			||||||
@@ -15046,6 +15121,11 @@
 | 
				
			|||||||
            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
 | 
					            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
 | 
				
			||||||
            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
 | 
					            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "node_modules/seq-queue": {
 | 
				
			||||||
 | 
					            "version": "0.0.5",
 | 
				
			||||||
 | 
					            "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
 | 
				
			||||||
 | 
					            "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "node_modules/serve-static": {
 | 
					        "node_modules/serve-static": {
 | 
				
			||||||
            "version": "1.14.2",
 | 
					            "version": "1.14.2",
 | 
				
			||||||
            "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz",
 | 
					            "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz",
 | 
				
			||||||
@@ -15424,6 +15504,14 @@
 | 
				
			|||||||
            "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
 | 
					            "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
 | 
				
			||||||
            "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug=="
 | 
					            "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug=="
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "node_modules/sqlstring": {
 | 
				
			||||||
 | 
					            "version": "2.3.3",
 | 
				
			||||||
 | 
					            "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz",
 | 
				
			||||||
 | 
					            "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==",
 | 
				
			||||||
 | 
					            "engines": {
 | 
				
			||||||
 | 
					                "node": ">= 0.6"
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "node_modules/sshpk": {
 | 
					        "node_modules/sshpk": {
 | 
				
			||||||
            "version": "1.17.0",
 | 
					            "version": "1.17.0",
 | 
				
			||||||
            "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
 | 
					            "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
 | 
				
			||||||
@@ -22267,6 +22355,11 @@
 | 
				
			|||||||
            "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
 | 
					            "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
 | 
				
			||||||
            "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
 | 
					            "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "denque": {
 | 
				
			||||||
 | 
					            "version": "2.1.0",
 | 
				
			||||||
 | 
					            "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz",
 | 
				
			||||||
 | 
					            "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw=="
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "depd": {
 | 
					        "depd": {
 | 
				
			||||||
            "version": "1.1.2",
 | 
					            "version": "1.1.2",
 | 
				
			||||||
            "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
 | 
					            "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
 | 
				
			||||||
@@ -23747,6 +23840,14 @@
 | 
				
			|||||||
                "wide-align": "^1.1.2"
 | 
					                "wide-align": "^1.1.2"
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "generate-function": {
 | 
				
			||||||
 | 
					            "version": "2.3.1",
 | 
				
			||||||
 | 
					            "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
 | 
				
			||||||
 | 
					            "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
 | 
				
			||||||
 | 
					            "requires": {
 | 
				
			||||||
 | 
					                "is-property": "^1.0.2"
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "gensync": {
 | 
					        "gensync": {
 | 
				
			||||||
            "version": "1.0.0-beta.2",
 | 
					            "version": "1.0.0-beta.2",
 | 
				
			||||||
            "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
 | 
					            "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
 | 
				
			||||||
@@ -24424,6 +24525,11 @@
 | 
				
			|||||||
            "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
 | 
					            "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
 | 
				
			||||||
            "dev": true
 | 
					            "dev": true
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "is-property": {
 | 
				
			||||||
 | 
					            "version": "1.0.2",
 | 
				
			||||||
 | 
					            "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
 | 
				
			||||||
 | 
					            "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "is-regex": {
 | 
					        "is-regex": {
 | 
				
			||||||
            "version": "1.1.4",
 | 
					            "version": "1.1.4",
 | 
				
			||||||
            "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
 | 
					            "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
 | 
				
			||||||
@@ -26637,6 +26743,11 @@
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "long": {
 | 
				
			||||||
 | 
					            "version": "4.0.0",
 | 
				
			||||||
 | 
					            "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
 | 
				
			||||||
 | 
					            "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "lru-cache": {
 | 
					        "lru-cache": {
 | 
				
			||||||
            "version": "6.0.0",
 | 
					            "version": "6.0.0",
 | 
				
			||||||
            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
 | 
					            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
 | 
				
			||||||
@@ -26955,6 +27066,45 @@
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "mysql2": {
 | 
				
			||||||
 | 
					            "version": "2.3.3",
 | 
				
			||||||
 | 
					            "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz",
 | 
				
			||||||
 | 
					            "integrity": "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==",
 | 
				
			||||||
 | 
					            "requires": {
 | 
				
			||||||
 | 
					                "denque": "^2.0.1",
 | 
				
			||||||
 | 
					                "generate-function": "^2.3.1",
 | 
				
			||||||
 | 
					                "iconv-lite": "^0.6.3",
 | 
				
			||||||
 | 
					                "long": "^4.0.0",
 | 
				
			||||||
 | 
					                "lru-cache": "^6.0.0",
 | 
				
			||||||
 | 
					                "named-placeholders": "^1.1.2",
 | 
				
			||||||
 | 
					                "seq-queue": "^0.0.5",
 | 
				
			||||||
 | 
					                "sqlstring": "^2.3.2"
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        "named-placeholders": {
 | 
				
			||||||
 | 
					            "version": "1.1.2",
 | 
				
			||||||
 | 
					            "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz",
 | 
				
			||||||
 | 
					            "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==",
 | 
				
			||||||
 | 
					            "requires": {
 | 
				
			||||||
 | 
					                "lru-cache": "^4.1.3"
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "dependencies": {
 | 
				
			||||||
 | 
					                "lru-cache": {
 | 
				
			||||||
 | 
					                    "version": "4.1.5",
 | 
				
			||||||
 | 
					                    "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
 | 
				
			||||||
 | 
					                    "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
 | 
				
			||||||
 | 
					                    "requires": {
 | 
				
			||||||
 | 
					                        "pseudomap": "^1.0.2",
 | 
				
			||||||
 | 
					                        "yallist": "^2.1.2"
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "yallist": {
 | 
				
			||||||
 | 
					                    "version": "2.1.2",
 | 
				
			||||||
 | 
					                    "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
 | 
				
			||||||
 | 
					                    "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A=="
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "nanoclone": {
 | 
					        "nanoclone": {
 | 
				
			||||||
            "version": "0.2.1",
 | 
					            "version": "0.2.1",
 | 
				
			||||||
            "resolved": "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz",
 | 
					            "resolved": "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz",
 | 
				
			||||||
@@ -27878,6 +28028,11 @@
 | 
				
			|||||||
            "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
 | 
					            "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
 | 
				
			||||||
            "dev": true
 | 
					            "dev": true
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "pseudomap": {
 | 
				
			||||||
 | 
					            "version": "1.0.2",
 | 
				
			||||||
 | 
					            "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
 | 
				
			||||||
 | 
					            "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ=="
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "psl": {
 | 
					        "psl": {
 | 
				
			||||||
            "version": "1.9.0",
 | 
					            "version": "1.9.0",
 | 
				
			||||||
            "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
 | 
					            "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
 | 
				
			||||||
@@ -28677,6 +28832,11 @@
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "seq-queue": {
 | 
				
			||||||
 | 
					            "version": "0.0.5",
 | 
				
			||||||
 | 
					            "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
 | 
				
			||||||
 | 
					            "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "serve-static": {
 | 
					        "serve-static": {
 | 
				
			||||||
            "version": "1.14.2",
 | 
					            "version": "1.14.2",
 | 
				
			||||||
            "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz",
 | 
					            "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz",
 | 
				
			||||||
@@ -28990,6 +29150,11 @@
 | 
				
			|||||||
            "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
 | 
					            "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
 | 
				
			||||||
            "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug=="
 | 
					            "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug=="
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "sqlstring": {
 | 
				
			||||||
 | 
					            "version": "2.3.3",
 | 
				
			||||||
 | 
					            "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz",
 | 
				
			||||||
 | 
					            "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg=="
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "sshpk": {
 | 
					        "sshpk": {
 | 
				
			||||||
            "version": "1.17.0",
 | 
					            "version": "1.17.0",
 | 
				
			||||||
            "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
 | 
					            "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -94,6 +94,7 @@
 | 
				
			|||||||
        "limiter": "^2.1.0",
 | 
					        "limiter": "^2.1.0",
 | 
				
			||||||
        "mqtt": "^4.2.8",
 | 
					        "mqtt": "^4.2.8",
 | 
				
			||||||
        "mssql": "^8.1.0",
 | 
					        "mssql": "^8.1.0",
 | 
				
			||||||
 | 
					        "mysql2": "^2.3.3",
 | 
				
			||||||
        "node-cloudflared-tunnel": "~1.0.9",
 | 
					        "node-cloudflared-tunnel": "~1.0.9",
 | 
				
			||||||
        "node-radius-client": "^1.0.0",
 | 
					        "node-radius-client": "^1.0.0",
 | 
				
			||||||
        "nodemailer": "~6.6.5",
 | 
					        "nodemailer": "~6.6.5",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,7 @@ dayjs.extend(timezone);
 | 
				
			|||||||
const axios = require("axios");
 | 
					const axios = require("axios");
 | 
				
			||||||
const { Prometheus } = require("../prometheus");
 | 
					const { Prometheus } = require("../prometheus");
 | 
				
			||||||
const { log, UP, DOWN, PENDING, flipStatus, TimeLogger } = require("../../src/util");
 | 
					const { log, UP, DOWN, PENDING, flipStatus, TimeLogger } = require("../../src/util");
 | 
				
			||||||
const { tcping, ping, dnsResolve, checkCertificate, checkStatusCode, getTotalClientInRoom, setting, mssqlQuery, postgresQuery, mqttAsync, setSetting, httpNtlm, radius } = require("../util-server");
 | 
					const { tcping, ping, dnsResolve, checkCertificate, checkStatusCode, getTotalClientInRoom, setting, mssqlQuery, postgresQuery, mysqlQuery, mqttAsync, setSetting, httpNtlm, radius } = require("../util-server");
 | 
				
			||||||
const { R } = require("redbean-node");
 | 
					const { R } = require("redbean-node");
 | 
				
			||||||
const { BeanModel } = require("redbean-node/dist/bean-model");
 | 
					const { BeanModel } = require("redbean-node/dist/bean-model");
 | 
				
			||||||
const { Notification } = require("../notification");
 | 
					const { Notification } = require("../notification");
 | 
				
			||||||
@@ -528,6 +528,14 @@ class Monitor extends BeanModel {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                    await postgresQuery(this.databaseConnectionString, this.databaseQuery);
 | 
					                    await postgresQuery(this.databaseConnectionString, this.databaseQuery);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    bean.msg = "";
 | 
				
			||||||
 | 
					                    bean.status = UP;
 | 
				
			||||||
 | 
					                    bean.ping = dayjs().valueOf() - startTime;
 | 
				
			||||||
 | 
					                } else if (this.type === "mysql") {
 | 
				
			||||||
 | 
					                    let startTime = dayjs().valueOf();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    await mysqlQuery(this.databaseConnectionString, this.databaseQuery);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    bean.msg = "";
 | 
					                    bean.msg = "";
 | 
				
			||||||
                    bean.status = UP;
 | 
					                    bean.status = UP;
 | 
				
			||||||
                    bean.ping = dayjs().valueOf() - startTime;
 | 
					                    bean.ping = dayjs().valueOf() - startTime;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,6 +13,7 @@ const { badgeConstants } = require("./config");
 | 
				
			|||||||
const mssql = require("mssql");
 | 
					const mssql = require("mssql");
 | 
				
			||||||
const { Client } = require("pg");
 | 
					const { Client } = require("pg");
 | 
				
			||||||
const postgresConParse = require("pg-connection-string").parse;
 | 
					const postgresConParse = require("pg-connection-string").parse;
 | 
				
			||||||
 | 
					const mysql = require("mysql2/promise");
 | 
				
			||||||
const { NtlmClient } = require("axios-ntlm");
 | 
					const { NtlmClient } = require("axios-ntlm");
 | 
				
			||||||
const { Settings } = require("./settings");
 | 
					const { Settings } = require("./settings");
 | 
				
			||||||
const radiusClient = require("node-radius-client");
 | 
					const radiusClient = require("node-radius-client");
 | 
				
			||||||
@@ -291,6 +292,28 @@ exports.postgresQuery = function (connectionString, query) {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Run a query on MySQL/MariaDB
 | 
				
			||||||
 | 
					 * @param {string} connectionString The database connection string
 | 
				
			||||||
 | 
					 * @param {string} query The query to validate the database with
 | 
				
			||||||
 | 
					 * @returns {Promise<(string[]|Object[]|Object)>}
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					exports.mysqlQuery = function (connectionString, query) {
 | 
				
			||||||
 | 
					    return new Promise((resolve, reject) => {
 | 
				
			||||||
 | 
					        return mysql.createConnection(connectionString)
 | 
				
			||||||
 | 
					            .then(connection => {
 | 
				
			||||||
 | 
					                connection.connect();
 | 
				
			||||||
 | 
					                return connection.query(query);
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					            .then(res => {
 | 
				
			||||||
 | 
					                resolve(res);
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					            .catch(err => {
 | 
				
			||||||
 | 
					                reject(err);
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exports.radius = function (
 | 
					exports.radius = function (
 | 
				
			||||||
    hostname,
 | 
					    hostname,
 | 
				
			||||||
    username,
 | 
					    username,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -51,6 +51,9 @@
 | 
				
			|||||||
                                        <option value="postgres">
 | 
					                                        <option value="postgres">
 | 
				
			||||||
                                            PostgreSQL
 | 
					                                            PostgreSQL
 | 
				
			||||||
                                        </option>
 | 
					                                        </option>
 | 
				
			||||||
 | 
					                                        <option value="mysql">
 | 
				
			||||||
 | 
					                                            MySQL/MariaDB
 | 
				
			||||||
 | 
					                                        </option>
 | 
				
			||||||
                                        <option value="radius">
 | 
					                                        <option value="radius">
 | 
				
			||||||
                                            Radius
 | 
					                                            Radius
 | 
				
			||||||
                                        </option>
 | 
					                                        </option>
 | 
				
			||||||
@@ -235,8 +238,8 @@
 | 
				
			|||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                            </template>
 | 
					                            </template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            <!-- SQL Server and PostgreSQL -->
 | 
					                            <!-- SQL Server / PostgreSQL / MySQL -->
 | 
				
			||||||
                            <template v-if="monitor.type === 'sqlserver' || monitor.type === 'postgres'">
 | 
					                            <template v-if="monitor.type === 'sqlserver' || monitor.type === 'postgres' || monitor.type === 'mysql'">
 | 
				
			||||||
                                <div class="my-3">
 | 
					                                <div class="my-3">
 | 
				
			||||||
                                    <label for="sqlConnectionString" class="form-label">{{ $t("Connection String") }}</label>
 | 
					                                    <label for="sqlConnectionString" class="form-label">{{ $t("Connection String") }}</label>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -246,6 +249,9 @@
 | 
				
			|||||||
                                    <template v-if="monitor.type === 'postgres'">
 | 
					                                    <template v-if="monitor.type === 'postgres'">
 | 
				
			||||||
                                        <input id="sqlConnectionString" v-model="monitor.databaseConnectionString" type="text" class="form-control" placeholder="postgres://username:password@host:port/database">
 | 
					                                        <input id="sqlConnectionString" v-model="monitor.databaseConnectionString" type="text" class="form-control" placeholder="postgres://username:password@host:port/database">
 | 
				
			||||||
                                    </template>
 | 
					                                    </template>
 | 
				
			||||||
 | 
					                                    <template v-if="monitor.type === 'mysql'">
 | 
				
			||||||
 | 
					                                        <input id="sqlConnectionString" v-model="monitor.databaseConnectionString" type="text" class="form-control" placeholder="mysql://username:password@host:port/database">
 | 
				
			||||||
 | 
					                                    </template>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                                <div class="my-3">
 | 
					                                <div class="my-3">
 | 
				
			||||||
                                    <label for="sqlQuery" class="form-label">{{ $t("Query") }}</label>
 | 
					                                    <label for="sqlQuery" class="form-label">{{ $t("Query") }}</label>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user