Merge branch 'master' into fix_npm_warnings
This commit is contained in:
		
						commit
						386c002fda
					
				
					 10 changed files with 152 additions and 27 deletions
				
			
		|  | @ -31,6 +31,7 @@ RUN npm run build | |||
| 
 | ||||
| EXPOSE 3001 | ||||
| VOLUME ["/app/data"] | ||||
| HEALTHCHECK --interval=5s --timeout=3s --start-period=30s CMD node extra/healthcheck.js | ||||
| CMD ["npm", "run", "start-server"] | ||||
| 
 | ||||
| FROM release AS nightly | ||||
|  |  | |||
							
								
								
									
										19
									
								
								extra/healthcheck.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								extra/healthcheck.js
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| var http = require("http"); | ||||
| var options = { | ||||
|   host: "localhost", | ||||
|   port: "3001", | ||||
|   timeout: 2000, | ||||
| }; | ||||
| var request = http.request(options, (res) => { | ||||
|   console.log(`STATUS: ${res.statusCode}`); | ||||
|   if (res.statusCode == 200) { | ||||
|     process.exit(0); | ||||
|   } else { | ||||
|     process.exit(1); | ||||
|   } | ||||
| }); | ||||
| request.on("error", function (err) { | ||||
|   console.log("ERROR"); | ||||
|   process.exit(1); | ||||
| }); | ||||
| request.end(); | ||||
|  | @ -5,6 +5,8 @@ | |||
|     <link rel="icon" type="image/svg+xml" href="/icon.svg" /> | ||||
|     <link rel="apple-touch-icon" href="/apple-touch-icon.png"> | ||||
|     <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||||
|     <meta name="theme-color" content="#5cdd8b" /> | ||||
|     <meta name="description" content="Uptime Kuma monitoring tool" /> | ||||
|     <title>Uptime Kuma</title> | ||||
|   </head> | ||||
|   <body> | ||||
|  |  | |||
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 4 KiB | 
							
								
								
									
										3
									
								
								public/robots.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								public/robots.txt
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | |||
| # https://www.robotstxt.org/robotstxt.html | ||||
| User-agent: * | ||||
| Disallow: | ||||
|  | @ -15,7 +15,7 @@ class Notification { | |||
|                 }) | ||||
|                 return true; | ||||
|             } catch (error) { | ||||
|                 console.log(error) | ||||
|                 console.error(error) | ||||
|                 return false; | ||||
|             } | ||||
| 
 | ||||
|  | @ -31,7 +31,7 @@ class Notification { | |||
|                 }) | ||||
|                 return true; | ||||
|             } catch (error) { | ||||
|                 console.log(error) | ||||
|                 console.error(error) | ||||
|                 return false; | ||||
|             } | ||||
| 
 | ||||
|  | @ -61,7 +61,7 @@ class Notification { | |||
|                 let res = await axios.post(notification.webhookURL, finalData, config) | ||||
|                 return true; | ||||
|             } catch (error) { | ||||
|                 console.log(error) | ||||
|                 console.error(error) | ||||
|                 return false; | ||||
|             } | ||||
| 
 | ||||
|  | @ -105,7 +105,7 @@ class Notification { | |||
|               let res = await axios.post(notification.discordWebhookUrl, data) | ||||
|               return true; | ||||
|             } catch(error) { | ||||
|               console.log(error) | ||||
|               console.error(error) | ||||
|               return false; | ||||
|             } | ||||
| 
 | ||||
|  | @ -121,20 +121,24 @@ class Notification { | |||
|             let res = await axios.post(notification.signalURL, data, config) | ||||
|             return true; | ||||
|         } catch (error) { | ||||
|             console.log(error) | ||||
|             console.error(error) | ||||
|             return false; | ||||
|         } | ||||
|              | ||||
| 
 | ||||
|         } else if (notification.type === "slack") { | ||||
|             try { | ||||
|                 if (heartbeatJSON == null) { | ||||
|                     let data = {'text': "Uptime Kuma Slack testing successful."} | ||||
|                     let data = {'text': "Uptime Kuma Slack testing successful.", 'channel': notification.slackchannel, 'username': notification.slackusername, 'icon_emoji': notification.slackiconemo} | ||||
|                     let res = await axios.post(notification.slackwebhookURL, data) | ||||
|                     return true; | ||||
|                 } | ||||
| 
 | ||||
|                 const time = heartbeatJSON["time"]; | ||||
|                 let data = { | ||||
|                     "text": "Uptime Kuma Alert", | ||||
|                     "channel":notification.slackchannel, | ||||
|                     "username": notification.slackusername, | ||||
|                     "icon_emoji": notification.slackiconemo, | ||||
|                     "blocks": [{ | ||||
|                             "type": "header", | ||||
|                             "text": { | ||||
|  | @ -155,23 +159,52 @@ class Notification { | |||
|                             ] | ||||
|                         }, | ||||
|                         { | ||||
|                                 "type": "actions", | ||||
|                                 "elements": [ | ||||
|                                     { | ||||
|                                         "type": "button", | ||||
|                                         "text": { | ||||
|                             "type": "actions", | ||||
|                             "elements": [ | ||||
|                                 { | ||||
|                                     "type": "button", | ||||
|                                     "text": { | ||||
|                                             "type": "plain_text", | ||||
|                                             "text": "Visit Uptime Kuma", | ||||
|                                         }, | ||||
|                                         "value": "Uptime-Kuma", | ||||
|                                         "url": notification.slackbutton | ||||
|                                     } | ||||
|                                     "value": "Uptime-Kuma", | ||||
|                                     "url": notification.slackbutton || "https://github.com/louislam/uptime-kuma" | ||||
|                                 } | ||||
|                                 ] | ||||
|                             } | ||||
|                         ] | ||||
|                     } | ||||
|                 let res = await axios.post(notification.slackwebhookURL, data) | ||||
|                 return true; | ||||
|             } catch (error) { | ||||
|                 console.error(error) | ||||
|                 return false; | ||||
|             } | ||||
| 
 | ||||
|         } else if (notification.type === "pushover") { | ||||
|                     var pushoverlink = 'https://api.pushover.net/1/messages.json' | ||||
|             try { | ||||
|                 if (heartbeatJSON == null) { | ||||
|                     let data = {'message': "<b>Uptime Kuma Pushover testing successful.</b>",  | ||||
|                     'user': notification.pushoveruserkey, 'token': notification.pushoverapptoken, 'sound':notification.pushoversounds, | ||||
|                     'priority': notification.pushoverpriority, 'title':notification.pushovertitle, 'retry': "30", 'expire':"3600", 'html': 1} | ||||
|                     let res = await axios.post(pushoverlink, data) | ||||
|                     return true; | ||||
|                 } | ||||
| 
 | ||||
|                 let data = { | ||||
|                     "message": "<b>Uptime Kuma Alert</b>\n\n<b>Message</b>:" +msg + '\n<b>Time (UTC)</b>:' +time, | ||||
|                     "user":notification.pushoveruserkey, | ||||
|                     "token": notification.pushoverapptoken, | ||||
|                     "sound": notification.pushoversounds, | ||||
|                     "priority": notification.pushoverpriority, | ||||
|                     "title": notification.pushovertitle, | ||||
|                     "retry": "30", | ||||
|                     "expire": "3600", | ||||
|                     "html": 1 | ||||
|                     } | ||||
|                 let res = await axios.post(pushoverlink, data) | ||||
|                 return true; | ||||
|             } catch (error) { | ||||
|                 console.log(error) | ||||
|                 return false; | ||||
|  |  | |||
|  | @ -19,7 +19,7 @@ const version = require('../package.json').version; | |||
| const hostname = args.host || "0.0.0.0" | ||||
| const port = args.port || 3001 | ||||
| 
 | ||||
| console.log("Version: " + version) | ||||
| console.info("Version: " + version) | ||||
| 
 | ||||
| console.log("Creating express and socket.io instance") | ||||
| const app = express(); | ||||
|  | @ -236,7 +236,7 @@ let needSetup = false; | |||
|                 }); | ||||
| 
 | ||||
|             } catch (e) { | ||||
|                 console.log(e) | ||||
|                 console.error(e) | ||||
|                 callback({ | ||||
|                     ok: false, | ||||
|                     msg: e.message | ||||
|  |  | |||
|  | @ -20,6 +20,7 @@ | |||
|                                     <option value="signal">Signal</option> | ||||
|                                     <option value="gotify">Gotify</option> | ||||
|                                     <option value="slack">Slack</option> | ||||
|                                     <option value="pushover">Pushover</option> | ||||
|                                 </select> | ||||
|                             </div> | ||||
| 
 | ||||
|  | @ -191,15 +192,80 @@ | |||
| 
 | ||||
|                         <template v-if="notification.type === 'slack'"> | ||||
|                             <div class="mb-3"> | ||||
|                                 <label for="slack-webhook-url" class="form-label">Slack Webhook URL</label> | ||||
|                                 <input type="text" class="form-control" id="slack-webhook-url" required v-model="notification.slackwebhookURL" autocomplete="false"> | ||||
|                                 <label for="gotify-server-url" class="form-label">Uptime Kuma URL</label> | ||||
|                                     <div class="input-group mb-3"> | ||||
|                                         <input type="text" class="form-control" id="slack-button" required v-model="notification.slackbutton" autocomplete="false"> | ||||
|                                     </div> | ||||
|                                 <label for="slack-webhook-url" class="form-label">Webhook URL<span style="color:red;"><sup>*</sup></span></label> | ||||
|                                 <input type="text" class="form-control" id="slack-webhook-url" required v-model="notification.slackwebhookURL"> | ||||
|                                 <label for="slack-username" class="form-label">Username</label> | ||||
|                                 <input type="text" class="form-control" id="slack-username" v-model="notification.slackusername"> | ||||
|                                 <label for="slack-iconemo" class="form-label">Icon Emoji</label> | ||||
|                                 <input type="text" class="form-control" id="slack-iconemo" v-model="notification.slackiconemo"> | ||||
|                                 <label for="slack-channel" class="form-label">Channel Name</label> | ||||
|                                 <input type="text" class="form-control" id="slack-channel-name" v-model="notification.slackchannel"> | ||||
|                                 <label for="slack-button-url" class="form-label">Uptime Kuma URL</label> | ||||
|                                 <input type="text" class="form-control" id="slack-button" v-model="notification.slackbutton"> | ||||
|                                 <div class="form-text"> | ||||
|                                 <span style="color:red;"><sup>*</sup></span>Required | ||||
|                                     <p style="margin-top: 8px;"> | ||||
|                                         More info about webhooks on: <a href="https://api.slack.com/messaging/webhooks" target="_blank">https://api.slack.com/messaging/webhooks</a> | ||||
|                                     </p> | ||||
|                                     <p style="margin-top: 8px;"> | ||||
|                                         Enter the channel name on Slack Channel Name field if you want to bypass the webhook channel. Ex: #other-channel | ||||
|                                     </p> | ||||
|                                     <p style="margin-top: 8px;"> | ||||
|                                         If you leave the Uptime Kuma URL field blank, it will default to the Project Github page. | ||||
|                                     </p> | ||||
|                                     <p style="margin-top: 8px;"> | ||||
|                                         Emoji cheat sheet: <a href="https://www.webfx.com/tools/emoji-cheat-sheet/" target="_blank">https://www.webfx.com/tools/emoji-cheat-sheet/</a> | ||||
|                                     </p> | ||||
|                                 </div> | ||||
|                             </div> | ||||
|                         </template> | ||||
|                          | ||||
|                         <template v-if="notification.type === 'pushover'"> | ||||
|                             <div class="mb-3"> | ||||
|                                 <label for="pushover-app-token" class="form-label">Application Token<span style="color:red;"><sup>*</sup></span></label> | ||||
|                                 <input type="text" class="form-control" id="pushover-app-token" required v-model="notification.pushoverapptoken"> | ||||
|                                 <label for="pushover-user" class="form-label">User Key<span style="color:red;"><sup>*</sup></span></label> | ||||
|                                 <input type="text" class="form-control" id="pushover-user" required v-model="notification.pushoveruserkey"> | ||||
|                                 <label for="pushover-device" class="form-label">Device</label> | ||||
|                                 <input type="text" class="form-control" id="pushover-device" v-model="notification.pushoverdevice"> | ||||
|                                 <label for="pushover-device" class="form-label">Message Title</label> | ||||
|                                 <input type="text" class="form-control" id="pushover-title" v-model="notification.pushovertitle"> | ||||
|                                 <label for="pushover-priority" class="form-label">Priority</label> | ||||
|                                 <input type="text" class="form-control" id="pushover-priority" v-model="notification.pushoverpriority"> | ||||
|                                 <label for="pushover-sound" class="form-label">Notification Sound</label> | ||||
|                                 <select class="form-select"  id="pushover-sound" v-model="notification.pushoversounds"> | ||||
|                                     <option>pushover</option> | ||||
|                                     <option>bike</option> | ||||
|                                     <option>bugle</option> | ||||
|                                     <option>cashregister</option> | ||||
|                                     <option>classical</option> | ||||
|                                     <option>cosmic</option> | ||||
|                                     <option>falling</option> | ||||
|                                     <option>gamelan</option> | ||||
|                                     <option>incoming</option> | ||||
|                                     <option>intermission</option> | ||||
|                                     <option>mechanical</option> | ||||
|                                     <option>pianobar</option> | ||||
|                                     <option>siren</option> | ||||
|                                     <option>spacealarm</option> | ||||
|                                     <option>tugboat</option> | ||||
|                                     <option>alien</option> | ||||
|                                     <option>climb</option> | ||||
|                                     <option>persistent</option> | ||||
|                                     <option>echo</option> | ||||
|                                     <option>updown</option> | ||||
|                                     <option>vibrate</option> | ||||
|                                     <option>none</option> | ||||
|                                 </select> | ||||
|                                 <div class="form-text"> | ||||
|                                 <span style="color:red;"><sup>*</sup></span>Required | ||||
|                                 <p style="margin-top: 8px;"> | ||||
|                                         More info on: <a href="https://api.slack.com/messaging/webhooks" target="_blank">https://api.slack.com/messaging/webhooks</a> | ||||
|                                         More info on: <a href="https://pushover.net/api" target="_blank">https://pushover.net/api</a> | ||||
|                                 </p> | ||||
|                                  <p style="margin-top: 8px;"> | ||||
|                                         Emergency priority(2) has default 30 second timeout between retries and will expire after 1 hour. | ||||
|                                 </p> | ||||
|                                 </div> | ||||
|                             </div> | ||||
|                         </template> | ||||
| 
 | ||||
|  |  | |||
|  | @ -9,7 +9,7 @@ | |||
|     <!-- Desktop header --> | ||||
|     <header class="d-flex flex-wrap justify-content-center py-3 mb-3 border-bottom" v-if="! $root.isMobile"> | ||||
|         <router-link to="/dashboard" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none"> | ||||
|             <object class="bi me-2 ms-4" width="40" height="40" data="/icon.svg"></object> | ||||
|             <object class="bi me-2 ms-4" width="40" height="40" data="/icon.svg" alt="Logo"></object> | ||||
|             <span class="fs-4 title">Uptime Kuma</span> | ||||
|         </router-link> | ||||
| 
 | ||||
|  | @ -37,7 +37,7 @@ | |||
|         <div class="container-fluid"> | ||||
|             Uptime Kuma - | ||||
|             Version: {{ $root.info.version }} - | ||||
|             <a href="https://github.com/louislam/uptime-kuma/releases" target="_blank">Check Update On GitHub</a> | ||||
|             <a href="https://github.com/louislam/uptime-kuma/releases" target="_blank" rel="noopener">Check Update On GitHub</a> | ||||
|         </div> | ||||
|     </footer> | ||||
| 
 | ||||
|  | @ -146,6 +146,7 @@ footer { | |||
|     font-size: 13px; | ||||
|     margin-bottom: 30px; | ||||
|     margin-left: 10px; | ||||
|     text-align: center; | ||||
| } | ||||
| 
 | ||||
| </style> | ||||
|  |  | |||
|  | @ -394,7 +394,7 @@ export function timezoneList() { | |||
|                 time: getTimezoneOffset(timezone), | ||||
|             }) | ||||
|         } catch (e) { | ||||
|             console.log(e.message); | ||||
|             console.error(e.message); | ||||
|             console.log("Skip this timezone") | ||||
|         } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue