mirror of
				https://github.com/louislam/uptime-kuma.git
				synced 2025-10-31 19:39:20 +08:00 
			
		
		
		
	Merge branch 'louislam:master' into add-language-pt-pt
This commit is contained in:
		
							
								
								
									
										218
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										218
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -16,7 +16,7 @@ | ||||
|                 "badge-maker": "^3.3.1", | ||||
|                 "bcryptjs": "~2.4.3", | ||||
|                 "bree": "~7.1.5", | ||||
|                 "cacheable-lookup": "^6.0.4", | ||||
|                 "cacheable-lookup": "~6.0.4", | ||||
|                 "chardet": "^1.3.0", | ||||
|                 "check-password-strength": "^2.0.5", | ||||
|                 "cheerio": "^1.0.0-rc.10", | ||||
| @@ -42,6 +42,8 @@ | ||||
|                 "nodemailer": "~6.6.5", | ||||
|                 "notp": "~2.0.3", | ||||
|                 "password-hash": "~1.2.2", | ||||
|                 "pg": "^8.7.3", | ||||
|                 "pg-connection-string": "^2.5.0", | ||||
|                 "prom-client": "~13.2.0", | ||||
|                 "prometheus-api-metrics": "~3.2.1", | ||||
|                 "redbean-node": "0.1.4", | ||||
| @@ -4789,6 +4791,14 @@ | ||||
|             "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", | ||||
|             "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" | ||||
|         }, | ||||
|         "node_modules/buffer-writer": { | ||||
|             "version": "2.0.0", | ||||
|             "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", | ||||
|             "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", | ||||
|             "engines": { | ||||
|                 "node": ">=4" | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/bulk-write-stream": { | ||||
|             "version": "2.0.1", | ||||
|             "resolved": "https://registry.npmjs.org/bulk-write-stream/-/bulk-write-stream-2.0.1.tgz", | ||||
| @@ -12488,6 +12498,11 @@ | ||||
|                 "url": "https://github.com/sponsors/sindresorhus" | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/packet-reader": { | ||||
|             "version": "1.0.0", | ||||
|             "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", | ||||
|             "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" | ||||
|         }, | ||||
|         "node_modules/parent-module": { | ||||
|             "version": "1.0.1", | ||||
|             "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", | ||||
| @@ -12636,11 +12651,88 @@ | ||||
|             "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", | ||||
|             "optional": true | ||||
|         }, | ||||
|         "node_modules/pg": { | ||||
|             "version": "8.7.3", | ||||
|             "resolved": "https://registry.npmjs.org/pg/-/pg-8.7.3.tgz", | ||||
|             "integrity": "sha512-HPmH4GH4H3AOprDJOazoIcpI49XFsHCe8xlrjHkWiapdbHK+HLtbm/GQzXYAZwmPju/kzKhjaSfMACG+8cgJcw==", | ||||
|             "dependencies": { | ||||
|                 "buffer-writer": "2.0.0", | ||||
|                 "packet-reader": "1.0.0", | ||||
|                 "pg-connection-string": "^2.5.0", | ||||
|                 "pg-pool": "^3.5.1", | ||||
|                 "pg-protocol": "^1.5.0", | ||||
|                 "pg-types": "^2.1.0", | ||||
|                 "pgpass": "1.x" | ||||
|             }, | ||||
|             "engines": { | ||||
|                 "node": ">= 8.0.0" | ||||
|             }, | ||||
|             "peerDependencies": { | ||||
|                 "pg-native": ">=2.0.0" | ||||
|             }, | ||||
|             "peerDependenciesMeta": { | ||||
|                 "pg-native": { | ||||
|                     "optional": true | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/pg-connection-string": { | ||||
|             "version": "2.5.0", | ||||
|             "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", | ||||
|             "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" | ||||
|         }, | ||||
|         "node_modules/pg-int8": { | ||||
|             "version": "1.0.1", | ||||
|             "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", | ||||
|             "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", | ||||
|             "engines": { | ||||
|                 "node": ">=4.0.0" | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/pg-pool": { | ||||
|             "version": "3.5.1", | ||||
|             "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.1.tgz", | ||||
|             "integrity": "sha512-6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ==", | ||||
|             "peerDependencies": { | ||||
|                 "pg": ">=8.0" | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/pg-protocol": { | ||||
|             "version": "1.5.0", | ||||
|             "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz", | ||||
|             "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==" | ||||
|         }, | ||||
|         "node_modules/pg-types": { | ||||
|             "version": "2.2.0", | ||||
|             "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", | ||||
|             "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", | ||||
|             "dependencies": { | ||||
|                 "pg-int8": "1.0.1", | ||||
|                 "postgres-array": "~2.0.0", | ||||
|                 "postgres-bytea": "~1.0.0", | ||||
|                 "postgres-date": "~1.0.4", | ||||
|                 "postgres-interval": "^1.1.0" | ||||
|             }, | ||||
|             "engines": { | ||||
|                 "node": ">=4" | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/pgpass": { | ||||
|             "version": "1.0.5", | ||||
|             "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", | ||||
|             "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", | ||||
|             "dependencies": { | ||||
|                 "split2": "^4.1.0" | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/pgpass/node_modules/split2": { | ||||
|             "version": "4.1.0", | ||||
|             "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", | ||||
|             "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==", | ||||
|             "engines": { | ||||
|                 "node": ">= 10.x" | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/picocolors": { | ||||
|             "version": "1.0.0", | ||||
|             "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", | ||||
| @@ -12896,6 +12988,41 @@ | ||||
|             "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "node_modules/postgres-array": { | ||||
|             "version": "2.0.0", | ||||
|             "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", | ||||
|             "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", | ||||
|             "engines": { | ||||
|                 "node": ">=4" | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/postgres-bytea": { | ||||
|             "version": "1.0.0", | ||||
|             "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", | ||||
|             "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", | ||||
|             "engines": { | ||||
|                 "node": ">=0.10.0" | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/postgres-date": { | ||||
|             "version": "1.0.7", | ||||
|             "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", | ||||
|             "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", | ||||
|             "engines": { | ||||
|                 "node": ">=0.10.0" | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/postgres-interval": { | ||||
|             "version": "1.2.0", | ||||
|             "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", | ||||
|             "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", | ||||
|             "dependencies": { | ||||
|                 "xtend": "^4.0.0" | ||||
|             }, | ||||
|             "engines": { | ||||
|                 "node": ">=0.10.0" | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/prelude-ls": { | ||||
|             "version": "1.2.1", | ||||
|             "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", | ||||
| @@ -20016,6 +20143,11 @@ | ||||
|             "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", | ||||
|             "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" | ||||
|         }, | ||||
|         "buffer-writer": { | ||||
|             "version": "2.0.0", | ||||
|             "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", | ||||
|             "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" | ||||
|         }, | ||||
|         "bulk-write-stream": { | ||||
|             "version": "2.0.1", | ||||
|             "resolved": "https://registry.npmjs.org/bulk-write-stream/-/bulk-write-stream-2.0.1.tgz", | ||||
| @@ -25736,6 +25868,11 @@ | ||||
|                 "p-timeout": "^3.0.0" | ||||
|             } | ||||
|         }, | ||||
|         "packet-reader": { | ||||
|             "version": "1.0.0", | ||||
|             "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", | ||||
|             "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" | ||||
|         }, | ||||
|         "parent-module": { | ||||
|             "version": "1.0.1", | ||||
|             "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", | ||||
| @@ -25845,11 +25982,67 @@ | ||||
|             "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", | ||||
|             "optional": true | ||||
|         }, | ||||
|         "pg": { | ||||
|             "version": "8.7.3", | ||||
|             "resolved": "https://registry.npmjs.org/pg/-/pg-8.7.3.tgz", | ||||
|             "integrity": "sha512-HPmH4GH4H3AOprDJOazoIcpI49XFsHCe8xlrjHkWiapdbHK+HLtbm/GQzXYAZwmPju/kzKhjaSfMACG+8cgJcw==", | ||||
|             "requires": { | ||||
|                 "buffer-writer": "2.0.0", | ||||
|                 "packet-reader": "1.0.0", | ||||
|                 "pg-connection-string": "^2.5.0", | ||||
|                 "pg-pool": "^3.5.1", | ||||
|                 "pg-protocol": "^1.5.0", | ||||
|                 "pg-types": "^2.1.0", | ||||
|                 "pgpass": "1.x" | ||||
|             } | ||||
|         }, | ||||
|         "pg-connection-string": { | ||||
|             "version": "2.5.0", | ||||
|             "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", | ||||
|             "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" | ||||
|         }, | ||||
|         "pg-int8": { | ||||
|             "version": "1.0.1", | ||||
|             "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", | ||||
|             "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" | ||||
|         }, | ||||
|         "pg-pool": { | ||||
|             "version": "3.5.1", | ||||
|             "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.1.tgz", | ||||
|             "integrity": "sha512-6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ==" | ||||
|         }, | ||||
|         "pg-protocol": { | ||||
|             "version": "1.5.0", | ||||
|             "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz", | ||||
|             "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==" | ||||
|         }, | ||||
|         "pg-types": { | ||||
|             "version": "2.2.0", | ||||
|             "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", | ||||
|             "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", | ||||
|             "requires": { | ||||
|                 "pg-int8": "1.0.1", | ||||
|                 "postgres-array": "~2.0.0", | ||||
|                 "postgres-bytea": "~1.0.0", | ||||
|                 "postgres-date": "~1.0.4", | ||||
|                 "postgres-interval": "^1.1.0" | ||||
|             } | ||||
|         }, | ||||
|         "pgpass": { | ||||
|             "version": "1.0.5", | ||||
|             "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", | ||||
|             "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", | ||||
|             "requires": { | ||||
|                 "split2": "^4.1.0" | ||||
|             }, | ||||
|             "dependencies": { | ||||
|                 "split2": { | ||||
|                     "version": "4.1.0", | ||||
|                     "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", | ||||
|                     "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
|         "picocolors": { | ||||
|             "version": "1.0.0", | ||||
|             "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", | ||||
| @@ -26018,6 +26211,29 @@ | ||||
|             "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "postgres-array": { | ||||
|             "version": "2.0.0", | ||||
|             "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", | ||||
|             "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" | ||||
|         }, | ||||
|         "postgres-bytea": { | ||||
|             "version": "1.0.0", | ||||
|             "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", | ||||
|             "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==" | ||||
|         }, | ||||
|         "postgres-date": { | ||||
|             "version": "1.0.7", | ||||
|             "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", | ||||
|             "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==" | ||||
|         }, | ||||
|         "postgres-interval": { | ||||
|             "version": "1.2.0", | ||||
|             "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", | ||||
|             "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", | ||||
|             "requires": { | ||||
|                 "xtend": "^4.0.0" | ||||
|             } | ||||
|         }, | ||||
|         "prelude-ls": { | ||||
|             "version": "1.2.1", | ||||
|             "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", | ||||
|   | ||||
| @@ -94,6 +94,8 @@ | ||||
|         "nodemailer": "~6.6.5", | ||||
|         "notp": "~2.0.3", | ||||
|         "password-hash": "~1.2.2", | ||||
|         "pg": "^8.7.3", | ||||
|         "pg-connection-string": "^2.5.0", | ||||
|         "prom-client": "~13.2.0", | ||||
|         "prometheus-api-metrics": "~3.2.1", | ||||
|         "redbean-node": "0.1.4", | ||||
|   | ||||
| @@ -7,7 +7,7 @@ dayjs.extend(timezone); | ||||
| const axios = require("axios"); | ||||
| const { Prometheus } = require("../prometheus"); | ||||
| const { log, UP, DOWN, PENDING, flipStatus, TimeLogger } = require("../../src/util"); | ||||
| const { tcping, ping, dnsResolve, checkCertificate, checkStatusCode, getTotalClientInRoom, setting, mssqlQuery, mqttAsync, setSetting, httpNtlm } = require("../util-server"); | ||||
| const { tcping, ping, dnsResolve, checkCertificate, checkStatusCode, getTotalClientInRoom, setting, mssqlQuery, postgresQuery, mqttAsync, setSetting, httpNtlm } = require("../util-server"); | ||||
| const { R } = require("redbean-node"); | ||||
| const { BeanModel } = require("redbean-node/dist/bean-model"); | ||||
| const { Notification } = require("../notification"); | ||||
| @@ -481,6 +481,14 @@ class Monitor extends BeanModel { | ||||
|  | ||||
|                     await mssqlQuery(this.databaseConnectionString, this.databaseQuery); | ||||
|  | ||||
|                     bean.msg = ""; | ||||
|                     bean.status = UP; | ||||
|                     bean.ping = dayjs().valueOf() - startTime; | ||||
|                 } else if (this.type === "postgres") { | ||||
|                     let startTime = dayjs().valueOf(); | ||||
|  | ||||
|                     await postgresQuery(this.databaseConnectionString, this.databaseQuery); | ||||
|  | ||||
|                     bean.msg = ""; | ||||
|                     bean.status = UP; | ||||
|                     bean.ping = dayjs().valueOf() - startTime; | ||||
|   | ||||
| @@ -202,7 +202,11 @@ module.exports.statusPageSocketHandler = (socket) => { | ||||
|                     relationBean.weight = monitorOrder++; | ||||
|                     relationBean.group_id = groupBean.id; | ||||
|                     relationBean.monitor_id = monitor.id; | ||||
|                     relationBean.send_url = monitor.sendUrl; | ||||
|  | ||||
|                     if (monitor.sendUrl !== undefined) { | ||||
|                         relationBean.send_url = monitor.sendUrl; | ||||
|                     } | ||||
|  | ||||
|                     await R.store(relationBean); | ||||
|                 } | ||||
|  | ||||
|   | ||||
| @@ -11,6 +11,8 @@ const mqtt = require("mqtt"); | ||||
| const chroma = require("chroma-js"); | ||||
| const { badgeConstants } = require("./config"); | ||||
| const mssql = require("mssql"); | ||||
| const { Client } = require("pg"); | ||||
| const postgresConParse = require("pg-connection-string").parse; | ||||
| const { NtlmClient } = require("axios-ntlm"); | ||||
| const { Settings } = require("./settings"); | ||||
|  | ||||
| @@ -251,6 +253,38 @@ exports.mssqlQuery = function (connectionString, query) { | ||||
|     }); | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Run a query on Postgres | ||||
|  * @param {string} connectionString The database connection string | ||||
|  * @param {string} query The query to validate the database with | ||||
|  * @returns {Promise<(string[]|Object[]|Object)>} | ||||
|  */ | ||||
| exports.postgresQuery = function (connectionString, query) { | ||||
|     return new Promise((resolve, reject) => { | ||||
|         const config = postgresConParse(connectionString); | ||||
|  | ||||
|         if (config.password === "") { | ||||
|             // See https://github.com/brianc/node-postgres/issues/1927 | ||||
|             return reject(new Error("Password is undefined.")); | ||||
|         } | ||||
|  | ||||
|         const client = new Client({ connectionString }); | ||||
|  | ||||
|         client.connect(); | ||||
|  | ||||
|         return client.query(query) | ||||
|             .then(res => { | ||||
|                 resolve(res); | ||||
|             }) | ||||
|             .catch(err => { | ||||
|                 reject(err); | ||||
|             }) | ||||
|             .finally(() => { | ||||
|                 client.end(); | ||||
|             }); | ||||
|     }); | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Retrieve value of setting based on key | ||||
|  * @param {string} key Key of setting to retrieve | ||||
|   | ||||
| @@ -45,6 +45,9 @@ | ||||
|                                         <option value="sqlserver"> | ||||
|                                             SQL Server | ||||
|                                         </option> | ||||
|                                         <option value="postgres"> | ||||
|                                             PostgreSQL | ||||
|                                         </option> | ||||
|                                     </optgroup> | ||||
|                                 </select> | ||||
|                             </div> | ||||
| @@ -168,15 +171,21 @@ | ||||
|                                 </div> | ||||
|                             </template> | ||||
|  | ||||
|                             <!-- SQL Server --> | ||||
|                             <template v-if="monitor.type === 'sqlserver'"> | ||||
|                             <!-- SQL Server and PostgreSQL --> | ||||
|                             <template v-if="monitor.type === 'sqlserver' || monitor.type === 'postgres'"> | ||||
|                                 <div class="my-3"> | ||||
|                                     <label for="sqlserverConnectionString" class="form-label">SQL Server {{ $t("Connection String") }}</label> | ||||
|                                     <input id="sqlserverConnectionString" v-model="monitor.databaseConnectionString" type="text" class="form-control"> | ||||
|                                     <label for="sqlConnectionString" class="form-label">{{ $t("Connection String") }}</label> | ||||
|  | ||||
|                                     <template v-if="monitor.type === 'sqlserver'"> | ||||
|                                         <input id="sqlConnectionString" v-model="monitor.databaseConnectionString" type="text" class="form-control" placeholder="Server=<hostname>,<port>;Database=<your database>;User Id=<your user id>;Password=<your password>;Encrypt=<true/false>;TrustServerCertificate=<Yes/No>;Connection Timeout=<int>"> | ||||
|                                     </template> | ||||
|                                     <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"> | ||||
|                                     </template> | ||||
|                                 </div> | ||||
|                                 <div class="my-3"> | ||||
|                                     <label for="sqlserverQuery" class="form-label">SQL Server {{ $t("Query") }}</label> | ||||
|                                     <textarea id="sqlserverQuery" v-model="monitor.databaseQuery" class="form-control" placeholder="Example: select getdate()"></textarea> | ||||
|                                     <label for="sqlQuery" class="form-label">{{ $t("Query") }}</label> | ||||
|                                     <textarea id="sqlQuery" v-model="monitor.databaseQuery" class="form-control" placeholder="Example: select getdate()"></textarea> | ||||
|                                 </div> | ||||
|                             </template> | ||||
|  | ||||
| @@ -584,7 +593,6 @@ export default { | ||||
|                     method: "GET", | ||||
|                     interval: 60, | ||||
|                     retryInterval: this.interval, | ||||
|                     databaseConnectionString: "Server=<hostname>,<port>;Database=<your database>;User Id=<your user id>;Password=<your password>;Encrypt=<true/false>;TrustServerCertificate=<Yes/No>;Connection Timeout=<int>", | ||||
|                     maxretries: 0, | ||||
|                     notificationIDList: {}, | ||||
|                     ignoreTls: false, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user