Merge pull request #2541 from long2ice/master
feat: support redis monitor
This commit is contained in:
		
						commit
						6437ef198f
					
				
					 5 changed files with 198 additions and 2 deletions
				
			
		
							
								
								
									
										153
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										153
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							|  | @ -53,6 +53,7 @@ | ||||||
|                 "prometheus-api-metrics": "~3.2.1", |                 "prometheus-api-metrics": "~3.2.1", | ||||||
|                 "protobufjs": "~7.1.1", |                 "protobufjs": "~7.1.1", | ||||||
|                 "redbean-node": "0.1.4", |                 "redbean-node": "0.1.4", | ||||||
|  |                 "redis": "~4.5.1", | ||||||
|                 "socket.io": "~4.5.3", |                 "socket.io": "~4.5.3", | ||||||
|                 "socket.io-client": "~4.5.3", |                 "socket.io-client": "~4.5.3", | ||||||
|                 "socks-proxy-agent": "6.1.1", |                 "socks-proxy-agent": "6.1.1", | ||||||
|  | @ -3455,6 +3456,64 @@ | ||||||
|             "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", |             "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", | ||||||
|             "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" |             "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" | ||||||
|         }, |         }, | ||||||
|  |         "node_modules/@redis/bloom": { | ||||||
|  |             "version": "1.1.0", | ||||||
|  |             "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.1.0.tgz", | ||||||
|  |             "integrity": "sha512-9QovlxmpRtvxVbN0UBcv8WfdSMudNZZTFqCsnBszcQXqaZb/TVe30ScgGEO7u1EAIacTPAo7/oCYjYAxiHLanQ==", | ||||||
|  |             "peerDependencies": { | ||||||
|  |                 "@redis/client": "^1.0.0" | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|  |         "node_modules/@redis/client": { | ||||||
|  |             "version": "1.4.2", | ||||||
|  |             "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.4.2.tgz", | ||||||
|  |             "integrity": "sha512-oUdEjE0I7JS5AyaAjkD3aOXn9NhO7XKyPyXEyrgFDu++VrVBHUPnV6dgEya9TcMuj5nIJRuCzCm8ZP+c9zCHPw==", | ||||||
|  |             "dependencies": { | ||||||
|  |                 "cluster-key-slot": "1.1.1", | ||||||
|  |                 "generic-pool": "3.9.0", | ||||||
|  |                 "yallist": "4.0.0" | ||||||
|  |             }, | ||||||
|  |             "engines": { | ||||||
|  |                 "node": ">=14" | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|  |         "node_modules/@redis/client/node_modules/yallist": { | ||||||
|  |             "version": "4.0.0", | ||||||
|  |             "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", | ||||||
|  |             "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" | ||||||
|  |         }, | ||||||
|  |         "node_modules/@redis/graph": { | ||||||
|  |             "version": "1.1.0", | ||||||
|  |             "resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.1.0.tgz", | ||||||
|  |             "integrity": "sha512-16yZWngxyXPd+MJxeSr0dqh2AIOi8j9yXKcKCwVaKDbH3HTuETpDVPcLujhFYVPtYrngSco31BUcSa9TH31Gqg==", | ||||||
|  |             "peerDependencies": { | ||||||
|  |                 "@redis/client": "^1.0.0" | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|  |         "node_modules/@redis/json": { | ||||||
|  |             "version": "1.0.4", | ||||||
|  |             "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.4.tgz", | ||||||
|  |             "integrity": "sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw==", | ||||||
|  |             "peerDependencies": { | ||||||
|  |                 "@redis/client": "^1.0.0" | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|  |         "node_modules/@redis/search": { | ||||||
|  |             "version": "1.1.0", | ||||||
|  |             "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.1.0.tgz", | ||||||
|  |             "integrity": "sha512-NyFZEVnxIJEybpy+YskjgOJRNsfTYqaPbK/Buv6W2kmFNaRk85JiqjJZA5QkRmWvGbyQYwoO5QfDi2wHskKrQQ==", | ||||||
|  |             "peerDependencies": { | ||||||
|  |                 "@redis/client": "^1.0.0" | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|  |         "node_modules/@redis/time-series": { | ||||||
|  |             "version": "1.0.4", | ||||||
|  |             "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.4.tgz", | ||||||
|  |             "integrity": "sha512-ThUIgo2U/g7cCuZavucQTQzA9g9JbDDY2f64u3AbAoz/8vE2lt2U37LamDUVChhaDA3IRT9R6VvJwqnUfTJzng==", | ||||||
|  |             "peerDependencies": { | ||||||
|  |                 "@redis/client": "^1.0.0" | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|         "node_modules/@sideway/address": { |         "node_modules/@sideway/address": { | ||||||
|             "version": "4.1.4", |             "version": "4.1.4", | ||||||
|             "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", |             "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", | ||||||
|  | @ -5399,6 +5458,14 @@ | ||||||
|                 "node": ">=6" |                 "node": ">=6" | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|  |         "node_modules/cluster-key-slot": { | ||||||
|  |             "version": "1.1.1", | ||||||
|  |             "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.1.tgz", | ||||||
|  |             "integrity": "sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw==", | ||||||
|  |             "engines": { | ||||||
|  |                 "node": ">=0.10.0" | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|         "node_modules/co": { |         "node_modules/co": { | ||||||
|             "version": "4.6.0", |             "version": "4.6.0", | ||||||
|             "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", |             "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", | ||||||
|  | @ -8317,6 +8384,14 @@ | ||||||
|                 "is-property": "^1.0.2" |                 "is-property": "^1.0.2" | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|  |         "node_modules/generic-pool": { | ||||||
|  |             "version": "3.9.0", | ||||||
|  |             "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.9.0.tgz", | ||||||
|  |             "integrity": "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==", | ||||||
|  |             "engines": { | ||||||
|  |                 "node": ">= 4" | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|         "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", | ||||||
|  | @ -14283,6 +14358,19 @@ | ||||||
|                 "node": ">=8" |                 "node": ">=8" | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|  |         "node_modules/redis": { | ||||||
|  |             "version": "4.5.1", | ||||||
|  |             "resolved": "https://registry.npmjs.org/redis/-/redis-4.5.1.tgz", | ||||||
|  |             "integrity": "sha512-oxXSoIqMJCQVBTfxP6BNTCtDMyh9G6Vi5wjdPdV/sRKkufyZslDqCScSGcOr6XGR/reAWZefz7E4leM31RgdBA==", | ||||||
|  |             "dependencies": { | ||||||
|  |                 "@redis/bloom": "1.1.0", | ||||||
|  |                 "@redis/client": "1.4.2", | ||||||
|  |                 "@redis/graph": "1.1.0", | ||||||
|  |                 "@redis/json": "1.0.4", | ||||||
|  |                 "@redis/search": "1.1.0", | ||||||
|  |                 "@redis/time-series": "1.0.4" | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|         "node_modules/regenerate": { |         "node_modules/regenerate": { | ||||||
|             "version": "1.4.2", |             "version": "1.4.2", | ||||||
|             "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", |             "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", | ||||||
|  | @ -19714,6 +19802,48 @@ | ||||||
|             "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", |             "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", | ||||||
|             "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" |             "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" | ||||||
|         }, |         }, | ||||||
|  |         "@redis/bloom": { | ||||||
|  |             "version": "1.1.0", | ||||||
|  |             "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.1.0.tgz", | ||||||
|  |             "integrity": "sha512-9QovlxmpRtvxVbN0UBcv8WfdSMudNZZTFqCsnBszcQXqaZb/TVe30ScgGEO7u1EAIacTPAo7/oCYjYAxiHLanQ==" | ||||||
|  |         }, | ||||||
|  |         "@redis/client": { | ||||||
|  |             "version": "1.4.2", | ||||||
|  |             "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.4.2.tgz", | ||||||
|  |             "integrity": "sha512-oUdEjE0I7JS5AyaAjkD3aOXn9NhO7XKyPyXEyrgFDu++VrVBHUPnV6dgEya9TcMuj5nIJRuCzCm8ZP+c9zCHPw==", | ||||||
|  |             "requires": { | ||||||
|  |                 "cluster-key-slot": "1.1.1", | ||||||
|  |                 "generic-pool": "3.9.0", | ||||||
|  |                 "yallist": "4.0.0" | ||||||
|  |             }, | ||||||
|  |             "dependencies": { | ||||||
|  |                 "yallist": { | ||||||
|  |                     "version": "4.0.0", | ||||||
|  |                     "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", | ||||||
|  |                     "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|  |         "@redis/graph": { | ||||||
|  |             "version": "1.1.0", | ||||||
|  |             "resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.1.0.tgz", | ||||||
|  |             "integrity": "sha512-16yZWngxyXPd+MJxeSr0dqh2AIOi8j9yXKcKCwVaKDbH3HTuETpDVPcLujhFYVPtYrngSco31BUcSa9TH31Gqg==" | ||||||
|  |         }, | ||||||
|  |         "@redis/json": { | ||||||
|  |             "version": "1.0.4", | ||||||
|  |             "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.4.tgz", | ||||||
|  |             "integrity": "sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw==" | ||||||
|  |         }, | ||||||
|  |         "@redis/search": { | ||||||
|  |             "version": "1.1.0", | ||||||
|  |             "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.1.0.tgz", | ||||||
|  |             "integrity": "sha512-NyFZEVnxIJEybpy+YskjgOJRNsfTYqaPbK/Buv6W2kmFNaRk85JiqjJZA5QkRmWvGbyQYwoO5QfDi2wHskKrQQ==" | ||||||
|  |         }, | ||||||
|  |         "@redis/time-series": { | ||||||
|  |             "version": "1.0.4", | ||||||
|  |             "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.4.tgz", | ||||||
|  |             "integrity": "sha512-ThUIgo2U/g7cCuZavucQTQzA9g9JbDDY2f64u3AbAoz/8vE2lt2U37LamDUVChhaDA3IRT9R6VvJwqnUfTJzng==" | ||||||
|  |         }, | ||||||
|         "@sideway/address": { |         "@sideway/address": { | ||||||
|             "version": "4.1.4", |             "version": "4.1.4", | ||||||
|             "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", |             "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", | ||||||
|  | @ -21316,6 +21446,11 @@ | ||||||
|                 "is-regexp": "^2.0.0" |                 "is-regexp": "^2.0.0" | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|  |         "cluster-key-slot": { | ||||||
|  |             "version": "1.1.1", | ||||||
|  |             "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.1.tgz", | ||||||
|  |             "integrity": "sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw==" | ||||||
|  |         }, | ||||||
|         "co": { |         "co": { | ||||||
|             "version": "4.6.0", |             "version": "4.6.0", | ||||||
|             "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", |             "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", | ||||||
|  | @ -23433,6 +23568,11 @@ | ||||||
|                 "is-property": "^1.0.2" |                 "is-property": "^1.0.2" | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|  |         "generic-pool": { | ||||||
|  |             "version": "3.9.0", | ||||||
|  |             "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.9.0.tgz", | ||||||
|  |             "integrity": "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==" | ||||||
|  |         }, | ||||||
|         "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", | ||||||
|  | @ -27902,6 +28042,19 @@ | ||||||
|                 "strip-indent": "^3.0.0" |                 "strip-indent": "^3.0.0" | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|  |         "redis": { | ||||||
|  |             "version": "4.5.1", | ||||||
|  |             "resolved": "https://registry.npmjs.org/redis/-/redis-4.5.1.tgz", | ||||||
|  |             "integrity": "sha512-oxXSoIqMJCQVBTfxP6BNTCtDMyh9G6Vi5wjdPdV/sRKkufyZslDqCScSGcOr6XGR/reAWZefz7E4leM31RgdBA==", | ||||||
|  |             "requires": { | ||||||
|  |                 "@redis/bloom": "1.1.0", | ||||||
|  |                 "@redis/client": "1.4.2", | ||||||
|  |                 "@redis/graph": "1.1.0", | ||||||
|  |                 "@redis/json": "1.0.4", | ||||||
|  |                 "@redis/search": "1.1.0", | ||||||
|  |                 "@redis/time-series": "1.0.4" | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|         "regenerate": { |         "regenerate": { | ||||||
|             "version": "1.4.2", |             "version": "1.4.2", | ||||||
|             "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", |             "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", | ||||||
|  |  | ||||||
|  | @ -110,6 +110,7 @@ | ||||||
|         "prometheus-api-metrics": "~3.2.1", |         "prometheus-api-metrics": "~3.2.1", | ||||||
|         "protobufjs": "~7.1.1", |         "protobufjs": "~7.1.1", | ||||||
|         "redbean-node": "0.1.4", |         "redbean-node": "0.1.4", | ||||||
|  |         "redis": "~4.5.1", | ||||||
|         "socket.io": "~4.5.3", |         "socket.io": "~4.5.3", | ||||||
|         "socket.io-client": "~4.5.3", |         "socket.io-client": "~4.5.3", | ||||||
|         "socks-proxy-agent": "6.1.1", |         "socks-proxy-agent": "6.1.1", | ||||||
|  |  | ||||||
|  | @ -3,7 +3,9 @@ const dayjs = require("dayjs"); | ||||||
| const axios = require("axios"); | const axios = require("axios"); | ||||||
| const { Prometheus } = require("../prometheus"); | const { Prometheus } = require("../prometheus"); | ||||||
| const { log, UP, DOWN, PENDING, MAINTENANCE, flipStatus, TimeLogger, MAX_INTERVAL_SECOND, MIN_INTERVAL_SECOND } = require("../../src/util"); | const { log, UP, DOWN, PENDING, MAINTENANCE, flipStatus, TimeLogger, MAX_INTERVAL_SECOND, MIN_INTERVAL_SECOND } = require("../../src/util"); | ||||||
| const { tcping, ping, dnsResolve, checkCertificate, checkStatusCode, getTotalClientInRoom, setting, mssqlQuery, postgresQuery, mysqlQuery, mqttAsync, setSetting, httpNtlm, radius, grpcQuery } = require("../util-server"); | const { tcping, ping, dnsResolve, checkCertificate, checkStatusCode, getTotalClientInRoom, setting, mssqlQuery, postgresQuery, mysqlQuery, mqttAsync, setSetting, httpNtlm, radius, grpcQuery, | ||||||
|  |     redisPingAsync | ||||||
|  | } = 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"); | ||||||
|  | @ -617,6 +619,12 @@ class Monitor extends BeanModel { | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
|                     bean.ping = dayjs().valueOf() - startTime; |                     bean.ping = dayjs().valueOf() - startTime; | ||||||
|  |                 } else if (this.type === "redis") { | ||||||
|  |                     let startTime = dayjs().valueOf(); | ||||||
|  | 
 | ||||||
|  |                     bean.msg = await redisPingAsync(this.databaseConnectionString); | ||||||
|  |                     bean.status = UP; | ||||||
|  |                     bean.ping = dayjs().valueOf() - startTime; | ||||||
|                 } else { |                 } else { | ||||||
|                     bean.msg = "Unknown Monitor Type"; |                     bean.msg = "Unknown Monitor Type"; | ||||||
|                     bean.status = PENDING; |                     bean.status = PENDING; | ||||||
|  |  | ||||||
|  | @ -19,6 +19,7 @@ const { Settings } = require("./settings"); | ||||||
| const grpc = require("@grpc/grpc-js"); | const grpc = require("@grpc/grpc-js"); | ||||||
| const protojs = require("protobufjs"); | const protojs = require("protobufjs"); | ||||||
| const radiusClient = require("node-radius-client"); | const radiusClient = require("node-radius-client"); | ||||||
|  | const redis = require("redis"); | ||||||
| const { | const { | ||||||
|     dictionaries: { |     dictionaries: { | ||||||
|         rfc2865: { file, attributes }, |         rfc2865: { file, attributes }, | ||||||
|  | @ -354,6 +355,30 @@ exports.radius = function ( | ||||||
|     }); |     }); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | /** | ||||||
|  |  * Redis server ping | ||||||
|  |  * @param {string} dsn The redis connection string | ||||||
|  |  */ | ||||||
|  | exports.redisPingAsync = function (dsn) { | ||||||
|  |     return new Promise((resolve, reject) => { | ||||||
|  |         const client = redis.createClient({ | ||||||
|  |             url: dsn, | ||||||
|  |         }); | ||||||
|  |         client.on("error", (err) => { | ||||||
|  |             reject(err); | ||||||
|  |         }); | ||||||
|  |         client.connect().then(() => { | ||||||
|  |             client.ping().then((res, err) => { | ||||||
|  |                 if (err) { | ||||||
|  |                     reject(err); | ||||||
|  |                 } else { | ||||||
|  |                     resolve(res); | ||||||
|  |                 } | ||||||
|  |             }); | ||||||
|  |         }); | ||||||
|  |     }); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| /** | /** | ||||||
|  * Retrieve value of setting based on key |  * Retrieve value of setting based on key | ||||||
|  * @param {string} key Key of setting to retrieve |  * @param {string} key Key of setting to retrieve | ||||||
|  |  | ||||||
|  | @ -60,6 +60,9 @@ | ||||||
|                                         <option value="radius"> |                                         <option value="radius"> | ||||||
|                                             Radius |                                             Radius | ||||||
|                                         </option> |                                         </option> | ||||||
|  |                                         <option value="redis"> | ||||||
|  |                                             Redis | ||||||
|  |                                         </option> | ||||||
|                                     </optgroup> |                                     </optgroup> | ||||||
|                                 </select> |                                 </select> | ||||||
|                             </div> |                             </div> | ||||||
|  | @ -267,7 +270,13 @@ | ||||||
|                                     <textarea id="sqlQuery" v-model="monitor.databaseQuery" class="form-control" placeholder="Example: select getdate()"></textarea> |                                     <textarea id="sqlQuery" v-model="monitor.databaseQuery" class="form-control" placeholder="Example: select getdate()"></textarea> | ||||||
|                                 </div> |                                 </div> | ||||||
|                             </template> |                             </template> | ||||||
| 
 |                             <!-- Redis --> | ||||||
|  |                             <template v-if="monitor.type === 'redis'"> | ||||||
|  |                                 <div class="my-3"> | ||||||
|  |                                     <label for="redisConnectionString" class="form-label">{{ $t("Connection String") }}</label> | ||||||
|  |                                     <input id="redisConnectionString" v-model="monitor.databaseConnectionString" type="text" class="form-control" placeholder="redis://user:password@host:port"> | ||||||
|  |                                 </div> | ||||||
|  |                             </template> | ||||||
|                             <!-- Interval --> |                             <!-- Interval --> | ||||||
|                             <div class="my-3"> |                             <div class="my-3"> | ||||||
|                                 <label for="interval" class="form-label">{{ $t("Heartbeat Interval") }} ({{ $t("checkEverySecond", [ monitor.interval ]) }})</label> |                                 <label for="interval" class="form-label">{{ $t("Heartbeat Interval") }} ({{ $t("checkEverySecond", [ monitor.interval ]) }})</label> | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue