|  |  | @ -44,6 +44,46 @@ | 
			
		
	
		
			
				
					|  |  |  |                                 <input id="url" v-model="monitor.url" type="url" class="form-control" pattern="https?://.+" required> | 
			
		
	
		
			
				
					|  |  |  |                             </div> | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                             <!-- Method --> | 
			
		
	
		
			
				
					|  |  |  |                             <div v-if="monitor.type === 'http' || monitor.type === 'keyword' " class="my-3"> | 
			
		
	
		
			
				
					|  |  |  |                                 <label for="method" class="form-label">{{ $t("Method") }}</label> | 
			
		
	
		
			
				
					|  |  |  |                                 <select id="method" v-model="monitor.method" class="form-select"> | 
			
		
	
		
			
				
					|  |  |  |                                     <option value="GET"> | 
			
		
	
		
			
				
					|  |  |  |                                         GET | 
			
		
	
		
			
				
					|  |  |  |                                     </option> | 
			
		
	
		
			
				
					|  |  |  |                                     <option value="POST"> | 
			
		
	
		
			
				
					|  |  |  |                                         POST | 
			
		
	
		
			
				
					|  |  |  |                                     </option> | 
			
		
	
		
			
				
					|  |  |  |                                     <option value="PUT"> | 
			
		
	
		
			
				
					|  |  |  |                                         PUT | 
			
		
	
		
			
				
					|  |  |  |                                     </option> | 
			
		
	
		
			
				
					|  |  |  |                                     <option value="PATCH"> | 
			
		
	
		
			
				
					|  |  |  |                                         PATCH | 
			
		
	
		
			
				
					|  |  |  |                                     </option> | 
			
		
	
		
			
				
					|  |  |  |                                     <option value="DELETE"> | 
			
		
	
		
			
				
					|  |  |  |                                         DELETE | 
			
		
	
		
			
				
					|  |  |  |                                     </option> | 
			
		
	
		
			
				
					|  |  |  |                                     <option value="HEAD"> | 
			
		
	
		
			
				
					|  |  |  |                                         HEAD | 
			
		
	
		
			
				
					|  |  |  |                                     </option> | 
			
		
	
		
			
				
					|  |  |  |                                     <option value="OPTIONS"> | 
			
		
	
		
			
				
					|  |  |  |                                         OPTIONS | 
			
		
	
		
			
				
					|  |  |  |                                     </option> | 
			
		
	
		
			
				
					|  |  |  |                                 </select> | 
			
		
	
		
			
				
					|  |  |  |                             </div> | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                             <!-- Body --> | 
			
		
	
		
			
				
					|  |  |  |                             <div v-if="monitor.type === 'http' || monitor.type === 'keyword' " class="my-3"> | 
			
		
	
		
			
				
					|  |  |  |                                 <label for="body" class="form-label">{{ $t("Body") }}</label> | 
			
		
	
		
			
				
					|  |  |  |                                 <textarea id="body" v-model="monitor.body" class="form-control" :placeholder="bodyPlaceholder"></textarea> | 
			
		
	
		
			
				
					|  |  |  |                             </div> | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                             <!-- Headers --> | 
			
		
	
		
			
				
					|  |  |  |                             <div v-if="monitor.type === 'http' || monitor.type === 'keyword' " class="my-3"> | 
			
		
	
		
			
				
					|  |  |  |                                 <label for="headers" class="form-label">{{ $t("Headers") }}</label> | 
			
		
	
		
			
				
					|  |  |  |                                 <textarea id="headers" v-model="monitor.headers" class="form-control" :placeholder="headersPlaceholder"></textarea> | 
			
		
	
		
			
				
					|  |  |  |                             </div> | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                             <!-- Push URL --> | 
			
		
	
		
			
				
					|  |  |  |                             <div v-if="monitor.type === 'push' " class="my-3"> | 
			
		
	
		
			
				
					|  |  |  |                                 <label for="push-url" class="form-label">{{ $t("Push URL") }}</label> | 
			
		
	
	
		
			
				
					|  |  | @ -285,6 +325,18 @@ export default { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         pushURL() { | 
			
		
	
		
			
				
					|  |  |  |             return this.$root.baseURL + "/api/push/" + this.monitor.pushToken + "?msg=OK&ping="; | 
			
		
	
		
			
				
					|  |  |  |         }, | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         bodyPlaceholder() { | 
			
		
	
		
			
				
					|  |  |  |             return `{ | 
			
		
	
		
			
				
					|  |  |  |     "id": 124357, | 
			
		
	
		
			
				
					|  |  |  |     "username": "admin", | 
			
		
	
		
			
				
					|  |  |  |     "password": "myAdminPassword" | 
			
		
	
		
			
				
					|  |  |  | }`; | 
			
		
	
		
			
				
					|  |  |  |         }, | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         headersPlaceholder() { | 
			
		
	
		
			
				
					|  |  |  |             return "Authorization: Bearer abc123\nContent-Type: application/json"; | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     }, | 
			
		
	
	
		
			
				
					|  |  | @ -295,7 +347,7 @@ export default { | 
			
		
	
		
			
				
					|  |  |  |         }, | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         "monitor.interval"(value, oldValue) { | 
			
		
	
		
			
				
					|  |  |  |             // Link interval and retryInerval if they are the same value. | 
			
		
	
		
			
				
					|  |  |  |             // Link interval and retryInterval if they are the same value. | 
			
		
	
		
			
				
					|  |  |  |             if (this.monitor.retryInterval === oldValue) { | 
			
		
	
		
			
				
					|  |  |  |                 this.monitor.retryInterval = value; | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
	
		
			
				
					|  |  | @ -349,6 +401,7 @@ export default { | 
			
		
	
		
			
				
					|  |  |  |                     type: "http", | 
			
		
	
		
			
				
					|  |  |  |                     name: "", | 
			
		
	
		
			
				
					|  |  |  |                     url: "https://", | 
			
		
	
		
			
				
					|  |  |  |                     method: "GET", | 
			
		
	
		
			
				
					|  |  |  |                     interval: 60, | 
			
		
	
		
			
				
					|  |  |  |                     retryInterval: this.interval, | 
			
		
	
		
			
				
					|  |  |  |                     maxretries: 0, | 
			
		
	
	
		
			
				
					|  |  | @ -383,9 +436,32 @@ export default { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         }, | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         isInputValid() { | 
			
		
	
		
			
				
					|  |  |  |             if (this.monitor.body) { | 
			
		
	
		
			
				
					|  |  |  |                 try { | 
			
		
	
		
			
				
					|  |  |  |                     JSON.parse(this.monitor.body); | 
			
		
	
		
			
				
					|  |  |  |                 } catch (err) { | 
			
		
	
		
			
				
					|  |  |  |                     toast.error(this.$t("The request body is not valid json: ") + err.message); | 
			
		
	
		
			
				
					|  |  |  |                     return false; | 
			
		
	
		
			
				
					|  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |             if (this.monitor.headers) { | 
			
		
	
		
			
				
					|  |  |  |                 if (!/^([^:]+:.*)([\s]+[^:]+:.*)+$/g.test(this.monitor.headers)) { | 
			
		
	
		
			
				
					|  |  |  |                     toast.error(this.$t("Headers do not have a valid format: \"key: value<new line>key: value<new line>...\"")); | 
			
		
	
		
			
				
					|  |  |  |                     return false; | 
			
		
	
		
			
				
					|  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |             return true; | 
			
		
	
		
			
				
					|  |  |  |         }, | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         async submit() { | 
			
		
	
		
			
				
					|  |  |  |             this.processing = true; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             if (!this.isInputValid()) { | 
			
		
	
		
			
				
					|  |  |  |                 this.processing = false; | 
			
		
	
		
			
				
					|  |  |  |                 return; | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             if (this.isAdd) { | 
			
		
	
		
			
				
					|  |  |  |                 this.$root.add(this.monitor, async (res) => { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  | @ -422,8 +498,12 @@ export default { | 
			
		
	
		
			
				
					|  |  |  | }; | 
			
		
	
		
			
				
					|  |  |  | </script> | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | <style scoped> | 
			
		
	
		
			
				
					|  |  |  | <style lang="scss" scoped> | 
			
		
	
		
			
				
					|  |  |  |     .shadow-box { | 
			
		
	
		
			
				
					|  |  |  |         padding: 20px; | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     textarea { | 
			
		
	
		
			
				
					|  |  |  |         min-height: 200px; | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | </style> | 
			
		
	
	
		
			
				
					|  |  | 
 |