mirror of
https://github.com/louislam/uptime-kuma.git
synced 2025-09-13 06:56:58 +08:00
Compare commits
10 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
0176857a2c | ||
|
c436ef4e05 | ||
|
56fcfc9369 | ||
|
a9d19ae06a | ||
|
35ce54f30c | ||
|
f84f7aca75 | ||
|
b198b3dde4 | ||
|
0b294815c7 | ||
|
83935a2cf4 | ||
|
838913f0a1 |
@@ -24,6 +24,12 @@ docker run -d --restart=always -p 3001:3001 louislam/uptime-kuma
|
||||
|
||||
Browse to http://localhost:3001 after started.
|
||||
|
||||
Change Port and Volume
|
||||
|
||||
```bash
|
||||
docker run -d --restart=always -p <YOUR_PORT>:3001 -v <YOUR_DIR OR VOLUME>:/app/data louislam/uptime-kuma
|
||||
```
|
||||
|
||||
### Without Docker
|
||||
|
||||
Required Tools: Node.js >= 14, git and pm2.
|
||||
@@ -36,7 +42,7 @@ npm run setup
|
||||
# Option 1. Try it
|
||||
npm run start-server
|
||||
|
||||
# (Recommanded)
|
||||
# (Recommended)
|
||||
# Option 2. Run in background using PM2
|
||||
# Install PM2 if you don't have: npm install pm2 -g
|
||||
pm2 start npm --name uptime-kuma -- run start-server
|
||||
|
8
package-lock.json
generated
8
package-lock.json
generated
@@ -1,8 +1,7 @@
|
||||
{
|
||||
"name": "uptime-kuma",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"lockfileVersion": 1,
|
||||
"dependencies": {
|
||||
"@babel/helper-validator-identifier": {
|
||||
"version": "7.14.5",
|
||||
@@ -243,6 +242,11 @@
|
||||
"readable-stream": "^2.0.6"
|
||||
}
|
||||
},
|
||||
"args-parser": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/args-parser/-/args-parser-1.3.0.tgz",
|
||||
"integrity": "sha512-If3Zi4BSjlQIJ9fgAhSiKi0oJtgMzSqh0H4wvl7XSeO16FKx7QqaHld8lZeEajPX7y1C5qKKeNgyrfyvmjmjUQ=="
|
||||
},
|
||||
"arr-diff": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
|
||||
|
@@ -1,17 +1,17 @@
|
||||
{
|
||||
"name": "uptime-kuma",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"dev": "vite --host",
|
||||
"start-server": "node server/server.js",
|
||||
"update": "",
|
||||
"build": "vite build",
|
||||
"vite-preview-dist": "vite preview --host",
|
||||
"build-docker": "docker buildx build --platform linux/amd64,linux/arm64 -t louislam/uptime-kuma -t louislam/uptime-kuma:1 . --push",
|
||||
"build-docker": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma -t louislam/uptime-kuma:1 . --push",
|
||||
"setup": "git checkout 1.0.0 && npm install && npm run build"
|
||||
},
|
||||
"dependencies": {
|
||||
"@popperjs/core": "^2.9.2",
|
||||
"args-parser": "^1.3.0",
|
||||
"axios": "^0.21.1",
|
||||
"bootstrap": "^5.0.0",
|
||||
"dayjs": "^1.10.4",
|
||||
|
@@ -71,7 +71,9 @@ class Monitor extends BeanModel {
|
||||
try {
|
||||
if (this.type === "http" || this.type === "keyword") {
|
||||
let startTime = dayjs().valueOf();
|
||||
let res = await axios.get(this.url)
|
||||
let res = await axios.get(this.url, {
|
||||
headers: { 'User-Agent':'Uptime-Kuma' }
|
||||
})
|
||||
bean.msg = `${res.status} - ${res.statusText}`
|
||||
bean.ping = dayjs().valueOf() - startTime;
|
||||
|
||||
@@ -79,7 +81,14 @@ class Monitor extends BeanModel {
|
||||
bean.status = 1;
|
||||
} else {
|
||||
|
||||
if (res.data.includes(this.keyword)) {
|
||||
let data = res.data;
|
||||
|
||||
// Convert to string for object/array
|
||||
if (typeof data !== "string") {
|
||||
data = JSON.stringify(data)
|
||||
}
|
||||
|
||||
if (data.includes(this.keyword)) {
|
||||
bean.msg += ", keyword is found"
|
||||
bean.status = 1;
|
||||
} else {
|
||||
|
@@ -12,6 +12,13 @@ const Monitor = require("./model/monitor");
|
||||
const fs = require("fs");
|
||||
const {getSettings} = require("./util-server");
|
||||
const {Notification} = require("./notification")
|
||||
const args = require('args-parser')(process.argv);
|
||||
|
||||
console.log("args:")
|
||||
console.log(args)
|
||||
|
||||
const hostname = args.host || "0.0.0.0"
|
||||
const port = args.port || 3001
|
||||
|
||||
app.use(express.json())
|
||||
|
||||
@@ -435,8 +442,8 @@ let needSetup = false;
|
||||
});
|
||||
});
|
||||
|
||||
server.listen(3001, () => {
|
||||
console.log('Listening on 3001');
|
||||
server.listen(port, hostname, () => {
|
||||
console.log(`Listening on ${hostname}:${port}`);
|
||||
|
||||
startMonitors();
|
||||
});
|
||||
|
@@ -137,7 +137,7 @@ export default {
|
||||
},
|
||||
|
||||
ping() {
|
||||
if (this.lastHeartBeat.ping) {
|
||||
if (this.lastHeartBeat.ping || this.lastHeartBeat.ping === 0) {
|
||||
return this.lastHeartBeat.ping;
|
||||
} else {
|
||||
return "N/A"
|
||||
@@ -145,7 +145,7 @@ export default {
|
||||
},
|
||||
|
||||
avgPing() {
|
||||
if (this.$root.avgPingList[this.monitor.id]) {
|
||||
if (this.$root.avgPingList[this.monitor.id] || this.$root.avgPingList[this.monitor.id] === 0) {
|
||||
return this.$root.avgPingList[this.monitor.id];
|
||||
} else {
|
||||
return "N/A"
|
||||
|
@@ -30,7 +30,7 @@
|
||||
<div class="mb-3" v-if="monitor.type === 'keyword' ">
|
||||
<label for="keyword" class="form-label">Keyword</label>
|
||||
<input type="text" class="form-control" id="keyword" v-model="monitor.keyword" required>
|
||||
<div class="form-text">Search keyword in plain html response and it is case-sensitive</div>
|
||||
<div class="form-text">Search keyword in plain html or JSON response and it is case-sensitive</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3" v-if="monitor.type === 'port' || monitor.type === 'ping' ">
|
||||
|
Reference in New Issue
Block a user