mirror of
https://github.com/louislam/uptime-kuma.git
synced 2024-12-22 05:55:16 -05:00
Merge branch 'master' into 2.0.X
# Conflicts: # package-lock.json
This commit is contained in:
commit
a13fc7079e
@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
First of all, I want to thank everyone who made pull requests for Uptime Kuma. I never thought the GitHub Community would be so nice! Because of this, I also never thought that other people would actually read and edit my code. It is not very well structured or commented, sorry about that.
|
First of all, I want to thank everyone who made pull requests for Uptime Kuma. I never thought the GitHub Community would be so nice! Because of this, I also never thought that other people would actually read and edit my code. It is not very well structured or commented, sorry about that.
|
||||||
|
|
||||||
The project was created with vite.js (vue3). Then I created a subdirectory called "server" for server part. Both frontend and backend share the same package.json.
|
The project was created with vite.js (vue3). Then I created a subdirectory called "server" for the server part. Both frontend and backend share the same package.json.
|
||||||
|
|
||||||
The frontend code build into "dist" directory. The server (express.js) exposes the "dist" directory as root of the endpoint. This is how production is working.
|
The frontend code builds into "dist" directory. The server (express.js) exposes the "dist" directory as the root of the endpoint. This is how production is working.
|
||||||
|
|
||||||
## Key Technical Skills
|
## Key Technical Skills
|
||||||
|
|
||||||
- Node.js (You should know what are promise, async/await and arrow function etc.)
|
- Node.js (You should know about promise, async/await and arrow function etc.)
|
||||||
- Socket.io
|
- Socket.io
|
||||||
- SCSS
|
- SCSS
|
||||||
- Vue.js
|
- Vue.js
|
||||||
@ -30,7 +30,7 @@ The frontend code build into "dist" directory. The server (express.js) exposes t
|
|||||||
|
|
||||||
## Can I create a pull request for Uptime Kuma?
|
## Can I create a pull request for Uptime Kuma?
|
||||||
|
|
||||||
Yes or no, it depends on what you will try to do. Since I don't want to waste your time, be sure to **create an empty draft pull request or open an issue, so we can have a discussion first**. Especially for a large pull request or you don't know it will be merged or not.
|
Yes or no, it depends on what you will try to do. Since I don't want to waste your time, be sure to **create an empty draft pull request or open an issue, so we can have a discussion first**. Especially for a large pull request or you don't know if it will be merged or not.
|
||||||
|
|
||||||
Here are some references:
|
Here are some references:
|
||||||
|
|
||||||
@ -46,8 +46,8 @@ Here are some references:
|
|||||||
- New features
|
- New features
|
||||||
|
|
||||||
### ❌ Won't be merged:
|
### ❌ Won't be merged:
|
||||||
- A dedicated pr for translating existing languages (see [these instructions](https://github.com/louislam/uptime-kuma/blob/master/src/lang/README.md))
|
- A dedicated PR for translating existing languages (see [these instructions](https://github.com/louislam/uptime-kuma/blob/master/src/lang/README.md))
|
||||||
- Do not pass the auto test
|
- Do not pass the auto-test
|
||||||
- Any breaking changes
|
- Any breaking changes
|
||||||
- Duplicated pull requests
|
- Duplicated pull requests
|
||||||
- Buggy
|
- Buggy
|
||||||
@ -61,9 +61,9 @@ The above cases may not cover all possible situations.
|
|||||||
|
|
||||||
I (@louislam) have the final say. If your pull request does not meet my expectations, I will reject it, no matter how much time you spend on it. Therefore, it is essential to have a discussion beforehand.
|
I (@louislam) have the final say. If your pull request does not meet my expectations, I will reject it, no matter how much time you spend on it. Therefore, it is essential to have a discussion beforehand.
|
||||||
|
|
||||||
I will mark your pull request in the [milestones](https://github.com/louislam/uptime-kuma/milestones), if I am plan to review and merge it.
|
I will assign your pull request to a [milestone](https://github.com/louislam/uptime-kuma/milestones), if I plan to review and merge it.
|
||||||
|
|
||||||
Also, please don't rush or ask for ETA, because I have to understand the pull request, make sure it is no breaking changes and stick to my vision of this project, especially for large pull requests.
|
Also, please don't rush or ask for an ETA, because I have to understand the pull request, make sure it is no breaking changes and stick to my vision of this project, especially for large pull requests.
|
||||||
|
|
||||||
|
|
||||||
### Recommended Pull Request Guideline
|
### Recommended Pull Request Guideline
|
||||||
@ -83,11 +83,11 @@ Before deep into coding, discussion first is preferred. Creating an empty pull r
|
|||||||
|
|
||||||
## Project Styles
|
## Project Styles
|
||||||
|
|
||||||
I personally do not like something that requires so many configurations before you can finally start the app. I hope Uptime Kuma installation could be as easy as like installing a mobile app.
|
I personally do not like something that requires so many configurations before you can finally start the app. I hope Uptime Kuma installation will be as easy as like installing a mobile app.
|
||||||
|
|
||||||
- Easy to install for non-Docker users, no native build dependency is needed (for x86_64/armv7/arm64), no extra config, no extra effort required to get it running
|
- Easy to install for non-Docker users, no native build dependency is needed (for x86_64/armv7/arm64), no extra config, and no extra effort required to get it running
|
||||||
- Single container for Docker users, no very complex docker-compose file. Just map the volume and expose the port, then good to go
|
- Single container for Docker users, no very complex docker-compose file. Just map the volume and expose the port, then good to go
|
||||||
- Settings should be configurable in the frontend. Environment variable is not encouraged, unless it is related to startup such as `DATA_DIR`
|
- Settings should be configurable in the frontend. Environment variables are discouraged, unless it is related to startup such as `DATA_DIR`
|
||||||
- Easy to use
|
- Easy to use
|
||||||
- The web UI styling should be consistent and nice
|
- The web UI styling should be consistent and nice
|
||||||
|
|
||||||
@ -130,7 +130,7 @@ Port `3000` and port `3001` will be used.
|
|||||||
npm run dev
|
npm run dev
|
||||||
```
|
```
|
||||||
|
|
||||||
But sometimes, you would like to keep restart the server, but not the frontend, you can run these command in two terminals:
|
But sometimes, you would like to restart the server, but not the frontend, you can run these commands in two terminals:
|
||||||
```
|
```
|
||||||
npm run start-frontend-dev
|
npm run start-frontend-dev
|
||||||
npm run start-server-dev
|
npm run start-server-dev
|
||||||
@ -146,13 +146,13 @@ It is mainly a socket.io app + express.js.
|
|||||||
express.js is used for:
|
express.js is used for:
|
||||||
- entry point such as redirecting to a status page or the dashboard
|
- entry point such as redirecting to a status page or the dashboard
|
||||||
- serving the frontend built files (index.html, .js and .css etc.)
|
- serving the frontend built files (index.html, .js and .css etc.)
|
||||||
- serving internal APIs of status page
|
- serving internal APIs of the status page
|
||||||
|
|
||||||
|
|
||||||
### Structure in /server/
|
### Structure in /server/
|
||||||
|
|
||||||
- jobs/ (Jobs that are running in another process)
|
- jobs/ (Jobs that are running in another process)
|
||||||
- model/ (Object model, auto mapping to the database table name)
|
- model/ (Object model, auto-mapping to the database table name)
|
||||||
- modules/ (Modified 3rd-party modules)
|
- modules/ (Modified 3rd-party modules)
|
||||||
- monitor_types (Monitor Types)
|
- monitor_types (Monitor Types)
|
||||||
- notification-providers/ (individual notification logic)
|
- notification-providers/ (individual notification logic)
|
||||||
@ -163,7 +163,7 @@ express.js is used for:
|
|||||||
|
|
||||||
## Frontend Dev Server
|
## Frontend Dev Server
|
||||||
|
|
||||||
It binds to `0.0.0.0:3000` by default. Frontend dev server is used for development only.
|
It binds to `0.0.0.0:3000` by default. The frontend dev server is used for development only.
|
||||||
|
|
||||||
For production, it is not used. It will be compiled to `dist` directory instead.
|
For production, it is not used. It will be compiled to `dist` directory instead.
|
||||||
|
|
||||||
@ -181,7 +181,7 @@ Uptime Kuma Frontend is a single page application (SPA). Most paths are handled
|
|||||||
|
|
||||||
The router is in `src/router.js`
|
The router is in `src/router.js`
|
||||||
|
|
||||||
As you can see, most data in frontend is stored in root level, even though you changed the current router to any other pages.
|
As you can see, most data in the frontend is stored at the root level, even though you changed the current router to any other pages.
|
||||||
|
|
||||||
The data and socket logic are in `src/mixins/socket.js`.
|
The data and socket logic are in `src/mixins/socket.js`.
|
||||||
|
|
||||||
@ -210,7 +210,7 @@ Both frontend and backend share the same package.json. However, the frontend dep
|
|||||||
|
|
||||||
### Update Dependencies
|
### Update Dependencies
|
||||||
|
|
||||||
Since previously updating Vite 2.5.10 to 2.6.0 broke the application completely, from now on, it should update patch release version only.
|
Since previously updating Vite 2.5.10 to 2.6.0 broke the application completely, from now on, it should update the patch release version only.
|
||||||
|
|
||||||
Patch release = the third digit ([Semantic Versioning](https://semver.org/))
|
Patch release = the third digit ([Semantic Versioning](https://semver.org/))
|
||||||
|
|
||||||
@ -218,17 +218,17 @@ If for security / bug / other reasons, a library must be updated, breaking chang
|
|||||||
|
|
||||||
## Translations
|
## Translations
|
||||||
|
|
||||||
Please add **all** the strings which are translatable to `src/lang/en.json` (If translation keys are ommited, they can not be translated).
|
Please add **all** the strings which are translatable to `src/lang/en.json` (If translation keys are omitted, they can not be translated).
|
||||||
|
|
||||||
**Don't include any other languages in your inital Pull-Request** (even if this is your mother tounge), to avoid merge-conflicts between weblate and `master`.
|
**Don't include any other languages in your initial Pull-Request** (even if this is your mother tongue), to avoid merge-conflicts between weblate and `master`.
|
||||||
The translations can then (after merging a PR into `master`) be translated by awesome people donating their language-skills.
|
The translations can then (after merging a PR into `master`) be translated by awesome people donating their language skills.
|
||||||
|
|
||||||
If you want to help by translating Uptime Kuma into your language, please visit the [instructions on how to translate using weblate](https://github.com/louislam/uptime-kuma/blob/master/src/lang/README.md).
|
If you want to help by translating Uptime Kuma into your language, please visit the [instructions on how to translate using weblate](https://github.com/louislam/uptime-kuma/blob/master/src/lang/README.md).
|
||||||
|
|
||||||
## Spelling & Grammar
|
## Spelling & Grammar
|
||||||
|
|
||||||
Feel free to correct the grammar in the documentation or code.
|
Feel free to correct the grammar in the documentation or code.
|
||||||
My mother language is not english and my grammar is not that great.
|
My mother language is not English and my grammar is not that great.
|
||||||
|
|
||||||
## Wiki
|
## Wiki
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ It is a temporary live demo, all data will be deleted after 10 minutes. Use the
|
|||||||
* Monitoring uptime for HTTP(s) / TCP / HTTP(s) Keyword / HTTP(s) Json Query / Ping / DNS Record / Push / Steam Game Server / Docker Containers
|
* Monitoring uptime for HTTP(s) / TCP / HTTP(s) Keyword / HTTP(s) Json Query / Ping / DNS Record / Push / Steam Game Server / Docker Containers
|
||||||
* Fancy, Reactive, Fast UI/UX
|
* Fancy, Reactive, Fast UI/UX
|
||||||
* Notifications via Telegram, Discord, Gotify, Slack, Pushover, Email (SMTP), and [90+ notification services, click here for the full list](https://github.com/louislam/uptime-kuma/tree/master/src/components/notifications)
|
* Notifications via Telegram, Discord, Gotify, Slack, Pushover, Email (SMTP), and [90+ notification services, click here for the full list](https://github.com/louislam/uptime-kuma/tree/master/src/components/notifications)
|
||||||
* 20 second intervals
|
* 20-second intervals
|
||||||
* [Multi Languages](https://github.com/louislam/uptime-kuma/tree/master/src/lang)
|
* [Multi Languages](https://github.com/louislam/uptime-kuma/tree/master/src/lang)
|
||||||
* Multiple status pages
|
* Multiple status pages
|
||||||
* Map status pages to specific domains
|
* Map status pages to specific domains
|
||||||
@ -70,7 +70,7 @@ npm run setup
|
|||||||
# Option 1. Try it
|
# Option 1. Try it
|
||||||
node server/server.js
|
node server/server.js
|
||||||
|
|
||||||
# (Recommended) Option 2. Run in background using PM2
|
# (Recommended) Option 2. Run in the background using PM2
|
||||||
# Install PM2 if you don't have it:
|
# Install PM2 if you don't have it:
|
||||||
npm install pm2 -g && pm2 install pm2-logrotate
|
npm install pm2 -g && pm2 install pm2-logrotate
|
||||||
|
|
||||||
@ -93,7 +93,7 @@ pm2 save && pm2 startup
|
|||||||
|
|
||||||
### Windows Portable (x64)
|
### Windows Portable (x64)
|
||||||
|
|
||||||
https://github.com/louislam/uptime-kuma/files/11886108/uptime-kuma-win64-portable-1.0.1.zip
|
https://github.com/louislam/uptime-kuma/releases/download/1.23.1/uptime-kuma-windows-x64-portable-1.23.1.zip
|
||||||
|
|
||||||
### Advanced Installation
|
### Advanced Installation
|
||||||
|
|
||||||
@ -109,7 +109,7 @@ https://github.com/louislam/uptime-kuma/wiki/%F0%9F%86%99-How-to-Update
|
|||||||
|
|
||||||
## 🆕 What's Next?
|
## 🆕 What's Next?
|
||||||
|
|
||||||
I will mark requests/issues to the next milestone.
|
I will assign requests/issues to the next milestone.
|
||||||
|
|
||||||
https://github.com/louislam/uptime-kuma/milestones
|
https://github.com/louislam/uptime-kuma/milestones
|
||||||
|
|
||||||
|
@ -3,19 +3,19 @@
|
|||||||
## Reporting a Vulnerability
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
1. Please report security issues to https://github.com/louislam/uptime-kuma/security/advisories/new.
|
1. Please report security issues to https://github.com/louislam/uptime-kuma/security/advisories/new.
|
||||||
1. Please also create a empty security issues for alerting me, as GitHub Advisory do not send a notification, I probably will miss without this. https://github.com/louislam/uptime-kuma/issues/new?assignees=&labels=help&template=security.md
|
1. Please also create an empty security issue to alert me, as GitHub Advisories do not send a notification, I probably will miss it without this. https://github.com/louislam/uptime-kuma/issues/new?assignees=&labels=help&template=security.md
|
||||||
|
|
||||||
Do not use the public issue tracker or discuss it in the public as it will cause more damage.
|
Do not use the public issue tracker or discuss it in public as it will cause more damage.
|
||||||
|
|
||||||
## Do you accept other 3rd-party bug bounty platforms?
|
## Do you accept other 3rd-party bug bounty platforms?
|
||||||
|
|
||||||
At this moment, I DO NOT accept other bug bounty platforms, because I am not familiar with these platforms and someone have tried to send a phishing link to me by this already. To minimize my own risk, please report through GitHub Advisories only. I will ignore all 3rd-party bug bounty platforms emails.
|
At this moment, I DO NOT accept other bug bounty platforms, because I am not familiar with these platforms and someone has tried to send a phishing link to me by doing this already. To minimize my own risk, please report through GitHub Advisories only. I will ignore all 3rd-party bug bounty platforms emails.
|
||||||
|
|
||||||
## Supported Versions
|
## Supported Versions
|
||||||
|
|
||||||
### Uptime Kuma Versions
|
### Uptime Kuma Versions
|
||||||
|
|
||||||
You should use or upgrade to the latest version of Uptime Kuma. All `1.X.X` versions are upgradable to the lastest version.
|
You should use or upgrade to the latest version of Uptime Kuma. All `1.X.X` versions are upgradable to the latest version.
|
||||||
|
|
||||||
### Upgradable Docker Tags
|
### Upgradable Docker Tags
|
||||||
|
|
||||||
|
@ -189,13 +189,15 @@ if (type == "local") {
|
|||||||
bash("check=$(git --version)");
|
bash("check=$(git --version)");
|
||||||
if (check == "") {
|
if (check == "") {
|
||||||
error = 1;
|
error = 1;
|
||||||
println("Error: git is missing");
|
println("Error: git is not found!");
|
||||||
|
println("help: an installation guide is available at https://git-scm.com/book/en/v2/Getting-Started-Installing-Git");
|
||||||
}
|
}
|
||||||
|
|
||||||
bash("check=$(node -v)");
|
bash("check=$(node -v)");
|
||||||
if (check == "") {
|
if (check == "") {
|
||||||
error = 1;
|
error = 1;
|
||||||
println("Error: node is missing");
|
println("Error: node is not found");
|
||||||
|
println("help: an installation guide is available at https://nodejs.org/en/download");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (error > 0) {
|
if (error > 0) {
|
||||||
@ -216,6 +218,7 @@ if (type == "local") {
|
|||||||
bash("check=$(pm2 --version)");
|
bash("check=$(pm2 --version)");
|
||||||
if (check == "") {
|
if (check == "") {
|
||||||
println("Error: pm2 is not found!");
|
println("Error: pm2 is not found!");
|
||||||
|
println("help: an installation guide is available at https://pm2.keymetrics.io/docs/usage/quick-start/");
|
||||||
bash("exit 1");
|
bash("exit 1");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -232,6 +235,7 @@ if (type == "local") {
|
|||||||
bash("check=$(docker -v)");
|
bash("check=$(docker -v)");
|
||||||
if (check == "") {
|
if (check == "") {
|
||||||
println("Error: docker is not found!");
|
println("Error: docker is not found!");
|
||||||
|
println("help: an installation guide is available at https://docs.docker.com/desktop/");
|
||||||
bash("exit 1");
|
bash("exit 1");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -239,6 +243,7 @@ if (type == "local") {
|
|||||||
|
|
||||||
bash("if [[ \"$check\" == *\"Is the docker daemon running\"* ]]; then
|
bash("if [[ \"$check\" == *\"Is the docker daemon running\"* ]]; then
|
||||||
\"echo\" \"Error: docker is not running\"
|
\"echo\" \"Error: docker is not running\"
|
||||||
|
\"echo\" \"help: a troubleshooting guide is available at https://docs.docker.com/config/daemon/troubleshoot/\"
|
||||||
\"exit\" \"1\"
|
\"exit\" \"1\"
|
||||||
fi");
|
fi");
|
||||||
|
|
||||||
|
@ -156,12 +156,14 @@ fi
|
|||||||
check=$(git --version)
|
check=$(git --version)
|
||||||
if [ "$check" == "" ]; then
|
if [ "$check" == "" ]; then
|
||||||
error=$((1))
|
error=$((1))
|
||||||
"echo" "-e" "Error: git is missing"
|
"echo" "-e" "Error: git is not found!"
|
||||||
|
"echo" "-e" "help: an installation guide is available at https://git-scm.com/book/en/v2/Getting-Started-Installing-Git"
|
||||||
fi
|
fi
|
||||||
check=$(node -v)
|
check=$(node -v)
|
||||||
if [ "$check" == "" ]; then
|
if [ "$check" == "" ]; then
|
||||||
error=$((1))
|
error=$((1))
|
||||||
"echo" "-e" "Error: node is missing"
|
"echo" "-e" "Error: node is not found"
|
||||||
|
"echo" "-e" "help: an installation guide is available at https://nodejs.org/en/download"
|
||||||
fi
|
fi
|
||||||
if [ $(($error > 0)) == 1 ]; then
|
if [ $(($error > 0)) == 1 ]; then
|
||||||
"echo" "-e" "Please install above missing software"
|
"echo" "-e" "Please install above missing software"
|
||||||
@ -180,6 +182,7 @@ fi
|
|||||||
check=$(pm2 --version)
|
check=$(pm2 --version)
|
||||||
if [ "$check" == "" ]; then
|
if [ "$check" == "" ]; then
|
||||||
"echo" "-e" "Error: pm2 is not found!"
|
"echo" "-e" "Error: pm2 is not found!"
|
||||||
|
"echo" "-e" "help: an installation guide is available at https://pm2.keymetrics.io/docs/usage/quick-start/"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
mkdir -p $installPath
|
mkdir -p $installPath
|
||||||
@ -192,11 +195,13 @@ else
|
|||||||
check=$(docker -v)
|
check=$(docker -v)
|
||||||
if [ "$check" == "" ]; then
|
if [ "$check" == "" ]; then
|
||||||
"echo" "-e" "Error: docker is not found!"
|
"echo" "-e" "Error: docker is not found!"
|
||||||
|
"echo" "-e" "help: an installation guide is available at https://docs.docker.com/desktop/"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
check=$(docker info)
|
check=$(docker info)
|
||||||
if [[ "$check" == *"Is the docker daemon running"* ]]; then
|
if [[ "$check" == *"Is the docker daemon running"* ]]; then
|
||||||
"echo" "Error: docker is not running"
|
"echo" "Error: docker is not running"
|
||||||
|
"echo" "help: a troubleshooting guide is available at https://docs.docker.com/config/daemon/troubleshoot/"
|
||||||
"exit" "1"
|
"exit" "1"
|
||||||
fi
|
fi
|
||||||
if [ "$3" != "" ]; then
|
if [ "$3" != "" ]; then
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "uptime-kuma",
|
"name": "uptime-kuma",
|
||||||
"version": "1.23.0",
|
"version": "1.23.1",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -39,7 +39,7 @@
|
|||||||
"build-docker-nightly-local": "npm run build && docker build -f docker/dockerfile -t louislam/uptime-kuma:nightly2 --target nightly .",
|
"build-docker-nightly-local": "npm run build && docker build -f docker/dockerfile -t louislam/uptime-kuma:nightly2 --target nightly .",
|
||||||
"build-docker-pr-test": "docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64 -t louislam/uptime-kuma:pr-test --target pr-test . --push",
|
"build-docker-pr-test": "docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64 -t louislam/uptime-kuma:pr-test --target pr-test . --push",
|
||||||
"upload-artifacts": "docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:upload-artifact --build-arg VERSION --build-arg GITHUB_TOKEN --target upload-artifact . --progress plain",
|
"upload-artifacts": "docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:upload-artifact --build-arg VERSION --build-arg GITHUB_TOKEN --target upload-artifact . --progress plain",
|
||||||
"setup": "git checkout 1.23.0 && npm ci --production && npm run download-dist",
|
"setup": "git checkout 1.23.1 && npm ci --production && npm run download-dist",
|
||||||
"download-dist": "node extra/download-dist.js",
|
"download-dist": "node extra/download-dist.js",
|
||||||
"mark-as-nightly": "node extra/mark-as-nightly.js",
|
"mark-as-nightly": "node extra/mark-as-nightly.js",
|
||||||
"reset-password": "node extra/reset-password.js",
|
"reset-password": "node extra/reset-password.js",
|
||||||
|
@ -147,15 +147,18 @@ async function sendAPIKeyList(socket) {
|
|||||||
async function sendInfo(socket, hideVersion = false) {
|
async function sendInfo(socket, hideVersion = false) {
|
||||||
let version;
|
let version;
|
||||||
let latestVersion;
|
let latestVersion;
|
||||||
|
let isContainer;
|
||||||
|
|
||||||
if (!hideVersion) {
|
if (!hideVersion) {
|
||||||
version = checkVersion.version;
|
version = checkVersion.version;
|
||||||
latestVersion = checkVersion.latestVersion;
|
latestVersion = checkVersion.latestVersion;
|
||||||
|
isContainer = (process.env.UPTIME_KUMA_IS_CONTAINER === "1");
|
||||||
}
|
}
|
||||||
|
|
||||||
socket.emit("info", {
|
socket.emit("info", {
|
||||||
version,
|
version,
|
||||||
latestVersion,
|
latestVersion,
|
||||||
|
isContainer,
|
||||||
primaryBaseURL: await setting("primaryBaseURL"),
|
primaryBaseURL: await setting("primaryBaseURL"),
|
||||||
serverTimezone: await server.getTimezone(),
|
serverTimezone: await server.getTimezone(),
|
||||||
serverTimezoneOffset: server.getTimezoneOffset(),
|
serverTimezoneOffset: server.getTimezoneOffset(),
|
||||||
|
@ -80,8 +80,8 @@ class DockerHost {
|
|||||||
options.socketPath = dockerHost.dockerDaemon;
|
options.socketPath = dockerHost.dockerDaemon;
|
||||||
} else if (dockerHost.dockerType === "tcp") {
|
} else if (dockerHost.dockerType === "tcp") {
|
||||||
options.baseURL = DockerHost.patchDockerURL(dockerHost.dockerDaemon);
|
options.baseURL = DockerHost.patchDockerURL(dockerHost.dockerDaemon);
|
||||||
}
|
|
||||||
options.httpsAgent = new https.Agent(DockerHost.getHttpsAgentOptions(dockerHost.dockerType, options.baseURL));
|
options.httpsAgent = new https.Agent(DockerHost.getHttpsAgentOptions(dockerHost.dockerType, options.baseURL));
|
||||||
|
}
|
||||||
|
|
||||||
let res = await axios.request(options);
|
let res = await axios.request(options);
|
||||||
|
|
||||||
|
@ -595,13 +595,13 @@ class Monitor extends BeanModel {
|
|||||||
let dnsRes = await dnsResolve(this.hostname, this.dns_resolve_server, this.port, this.dns_resolve_type);
|
let dnsRes = await dnsResolve(this.hostname, this.dns_resolve_server, this.port, this.dns_resolve_type);
|
||||||
bean.ping = dayjs().valueOf() - startTime;
|
bean.ping = dayjs().valueOf() - startTime;
|
||||||
|
|
||||||
if (this.dns_resolve_type === "A" || this.dns_resolve_type === "AAAA" || this.dns_resolve_type === "TXT") {
|
if (this.dns_resolve_type === "A" || this.dns_resolve_type === "AAAA" || this.dns_resolve_type === "TXT" || this.dns_resolve_type === "PTR") {
|
||||||
dnsMessage += "Records: ";
|
dnsMessage += "Records: ";
|
||||||
dnsMessage += dnsRes.join(" | ");
|
dnsMessage += dnsRes.join(" | ");
|
||||||
} else if (this.dns_resolve_type === "CNAME" || this.dns_resolve_type === "PTR") {
|
} else if (this.dns_resolve_type === "CNAME") {
|
||||||
dnsMessage = dnsRes[0];
|
dnsMessage += dnsRes[0];
|
||||||
} else if (this.dns_resolve_type === "CAA") {
|
} else if (this.dns_resolve_type === "CAA") {
|
||||||
dnsMessage = dnsRes[0].issue;
|
dnsMessage += dnsRes[0].issue;
|
||||||
} else if (this.dns_resolve_type === "MX") {
|
} else if (this.dns_resolve_type === "MX") {
|
||||||
dnsRes.forEach(record => {
|
dnsRes.forEach(record => {
|
||||||
dnsMessage += `Hostname: ${record.exchange} - Priority: ${record.priority} | `;
|
dnsMessage += `Hostname: ${record.exchange} - Priority: ${record.priority} | `;
|
||||||
@ -619,7 +619,7 @@ class Monitor extends BeanModel {
|
|||||||
dnsMessage = dnsMessage.slice(0, -2);
|
dnsMessage = dnsMessage.slice(0, -2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.dnsLastResult !== dnsMessage) {
|
if (this.dnsLastResult !== dnsMessage && dnsMessage !== undefined) {
|
||||||
R.exec("UPDATE `monitor` SET dns_last_result = ? WHERE id = ? ", [
|
R.exec("UPDATE `monitor` SET dns_last_result = ? WHERE id = ? ", [
|
||||||
dnsMessage,
|
dnsMessage,
|
||||||
this.id
|
this.id
|
||||||
|
@ -33,6 +33,7 @@ class Discord extends NotificationProvider {
|
|||||||
break;
|
break;
|
||||||
case "port":
|
case "port":
|
||||||
case "dns":
|
case "dns":
|
||||||
|
case "gamedig":
|
||||||
case "steam":
|
case "steam":
|
||||||
address = monitorJSON["hostname"];
|
address = monitorJSON["hostname"];
|
||||||
if (monitorJSON["port"]) {
|
if (monitorJSON["port"]) {
|
||||||
|
@ -20,10 +20,10 @@ class Opsgenie extends NotificationProvider {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
switch (notification.opsgenieRegion) {
|
switch (notification.opsgenieRegion) {
|
||||||
case "US":
|
case "us":
|
||||||
opsgenieAlertsUrl = opsgenieAlertsUrlUS;
|
opsgenieAlertsUrl = opsgenieAlertsUrlUS;
|
||||||
break;
|
break;
|
||||||
case "EU":
|
case "eu":
|
||||||
opsgenieAlertsUrl = opsgenieAlertsUrlEU;
|
opsgenieAlertsUrl = opsgenieAlertsUrlEU;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -1153,9 +1153,6 @@ let needSetup = false;
|
|||||||
value,
|
value,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Cleanup unused Tags
|
|
||||||
await R.exec("delete from tag where ( select count(*) from monitor_tag mt where tag.id = mt.tag_id ) = 0");
|
|
||||||
|
|
||||||
callback({
|
callback({
|
||||||
ok: true,
|
ok: true,
|
||||||
msg: "Deleted Successfully.",
|
msg: "Deleted Successfully.",
|
||||||
@ -1234,6 +1231,7 @@ let needSetup = false;
|
|||||||
}
|
}
|
||||||
|
|
||||||
const previousChromeExecutable = await Settings.get("chromeExecutable");
|
const previousChromeExecutable = await Settings.get("chromeExecutable");
|
||||||
|
const previousNSCDStatus = await Settings.get("nscd");
|
||||||
|
|
||||||
await setSettings("general", data);
|
await setSettings("general", data);
|
||||||
server.entryPage = data.entryPage;
|
server.entryPage = data.entryPage;
|
||||||
@ -1251,6 +1249,15 @@ let needSetup = false;
|
|||||||
await resetChrome();
|
await resetChrome();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update nscd status
|
||||||
|
if (previousNSCDStatus !== data.nscd) {
|
||||||
|
if (data.nscd) {
|
||||||
|
server.startNSCDServices();
|
||||||
|
} else {
|
||||||
|
server.stopNSCDServices();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
callback({
|
callback({
|
||||||
ok: true,
|
ok: true,
|
||||||
msg: "Saved"
|
msg: "Saved"
|
||||||
|
@ -361,7 +361,11 @@ class UptimeKumaServer {
|
|||||||
* @returns {Promise<void>}
|
* @returns {Promise<void>}
|
||||||
*/
|
*/
|
||||||
async start() {
|
async start() {
|
||||||
this.startServices();
|
let enable = await Settings.get("nscd");
|
||||||
|
|
||||||
|
if (enable || enable === null) {
|
||||||
|
this.startNSCDServices();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -369,7 +373,11 @@ class UptimeKumaServer {
|
|||||||
* @returns {Promise<void>}
|
* @returns {Promise<void>}
|
||||||
*/
|
*/
|
||||||
async stop() {
|
async stop() {
|
||||||
this.stopServices();
|
let enable = await Settings.get("nscd");
|
||||||
|
|
||||||
|
if (enable || enable === null) {
|
||||||
|
this.stopNSCDServices();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -377,7 +385,7 @@ class UptimeKumaServer {
|
|||||||
* For now, only used in Docker
|
* For now, only used in Docker
|
||||||
* @returns {void}
|
* @returns {void}
|
||||||
*/
|
*/
|
||||||
startServices() {
|
startNSCDServices() {
|
||||||
if (process.env.UPTIME_KUMA_IS_CONTAINER) {
|
if (process.env.UPTIME_KUMA_IS_CONTAINER) {
|
||||||
try {
|
try {
|
||||||
log.info("services", "Starting nscd");
|
log.info("services", "Starting nscd");
|
||||||
@ -392,7 +400,7 @@ class UptimeKumaServer {
|
|||||||
* Stop all system services
|
* Stop all system services
|
||||||
* @returns {void}
|
* @returns {void}
|
||||||
*/
|
*/
|
||||||
stopServices() {
|
stopNSCDServices() {
|
||||||
if (process.env.UPTIME_KUMA_IS_CONTAINER) {
|
if (process.env.UPTIME_KUMA_IS_CONTAINER) {
|
||||||
try {
|
try {
|
||||||
log.info("services", "Stopping nscd");
|
log.info("services", "Stopping nscd");
|
||||||
|
@ -5,18 +5,18 @@
|
|||||||
<h1 class="h3 mb-3 fw-normal" />
|
<h1 class="h3 mb-3 fw-normal" />
|
||||||
|
|
||||||
<div v-if="!tokenRequired" class="form-floating">
|
<div v-if="!tokenRequired" class="form-floating">
|
||||||
<input id="floatingInput" v-model="username" type="text" class="form-control" placeholder="Username">
|
<input id="floatingInput" v-model="username" type="text" class="form-control" placeholder="Username" autocomplete="username" required>
|
||||||
<label for="floatingInput">{{ $t("Username") }}</label>
|
<label for="floatingInput">{{ $t("Username") }}</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="!tokenRequired" class="form-floating mt-3">
|
<div v-if="!tokenRequired" class="form-floating mt-3">
|
||||||
<input id="floatingPassword" v-model="password" type="password" class="form-control" placeholder="Password">
|
<input id="floatingPassword" v-model="password" type="password" class="form-control" placeholder="Password" autocomplete="current-password" required>
|
||||||
<label for="floatingPassword">{{ $t("Password") }}</label>
|
<label for="floatingPassword">{{ $t("Password") }}</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="tokenRequired">
|
<div v-if="tokenRequired">
|
||||||
<div class="form-floating mt-3">
|
<div class="form-floating mt-3">
|
||||||
<input id="otp" v-model="token" type="text" maxlength="6" class="form-control" placeholder="123456">
|
<input id="otp" v-model="token" type="text" maxlength="6" class="form-control" placeholder="123456" autocomplete="one-time-code" required>
|
||||||
<label for="otp">{{ $t("Token") }}</label>
|
<label for="otp">{{ $t("Token") }}</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -258,6 +258,10 @@ export default {
|
|||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@import "../assets/vars.scss";
|
@import "../assets/vars.scss";
|
||||||
|
|
||||||
|
.dropdown-item {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
.clear-filters-btn {
|
.clear-filters-btn {
|
||||||
font-size: 0.8em;
|
font-size: 0.8em;
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="dropdown" @focusin="open = true" @focusout="handleFocusOut">
|
<div tabindex="-1" class="dropdown" @focusin="open = true" @focusout="handleFocusOut">
|
||||||
<button type="button" class="filter-dropdown-status" :class="{ 'active': filterActive }" tabindex="0">
|
<button type="button" class="filter-dropdown-status" :class="{ 'active': filterActive }" tabindex="0">
|
||||||
<div class="px-1 d-flex align-items-center">
|
<div class="px-1 d-flex align-items-center">
|
||||||
<slot name="status"></slot>
|
<slot name="status"></slot>
|
||||||
@ -107,6 +107,19 @@ export default {
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
|
color: $link-color;
|
||||||
|
|
||||||
|
.dark & {
|
||||||
|
color: $dark-font-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
background-color: $highlight-white;
|
||||||
|
|
||||||
|
.dark & {
|
||||||
|
background-color: $dark-font-color2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&.active {
|
&.active {
|
||||||
border: 1px solid $highlight;
|
border: 1px solid $highlight;
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
v-model="currentPassword"
|
v-model="currentPassword"
|
||||||
type="password"
|
type="password"
|
||||||
class="form-control"
|
class="form-control"
|
||||||
|
autocomplete="current-password"
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@ -43,7 +44,7 @@
|
|||||||
<div v-if="uri && twoFAStatus == false" class="mt-3">
|
<div v-if="uri && twoFAStatus == false" class="mt-3">
|
||||||
<label for="basic-url" class="form-label">{{ $t("twoFAVerifyLabel") }}</label>
|
<label for="basic-url" class="form-label">{{ $t("twoFAVerifyLabel") }}</label>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input v-model="token" type="text" maxlength="6" class="form-control">
|
<input v-model="token" type="text" maxlength="6" class="form-control" autocomplete="one-time-code" required>
|
||||||
<button class="btn btn-outline-primary" type="button" @click="verifyToken()">{{ $t("Verify Token") }}</button>
|
<button class="btn btn-outline-primary" type="button" @click="verifyToken()">{{ $t("Verify Token") }}</button>
|
||||||
</div>
|
</div>
|
||||||
<p v-show="tokenValid" class="mt-2" style="color: green;">{{ $t("tokenValidSettingsMsg") }}</p>
|
<p v-show="tokenValid" class="mt-2" style="color: green;">{{ $t("tokenValidSettingsMsg") }}</p>
|
||||||
|
@ -150,6 +150,43 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- DNS Cache (nscd) -->
|
||||||
|
<div v-if="$root.info.isContainer" class="mb-4">
|
||||||
|
<label class="form-label">
|
||||||
|
{{ $t("enableNSCD") }}
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<div class="form-check">
|
||||||
|
<input
|
||||||
|
id="nscdEnable"
|
||||||
|
v-model="settings.nscd"
|
||||||
|
class="form-check-input"
|
||||||
|
type="radio"
|
||||||
|
name="nscd"
|
||||||
|
:value="true"
|
||||||
|
required
|
||||||
|
/>
|
||||||
|
<label class="form-check-label" for="nscdEnable">
|
||||||
|
{{ $t("Enable") }}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-check">
|
||||||
|
<input
|
||||||
|
id="nscdDisable"
|
||||||
|
v-model="settings.nscd"
|
||||||
|
class="form-check-input"
|
||||||
|
type="radio"
|
||||||
|
name="nscd"
|
||||||
|
:value="false"
|
||||||
|
required
|
||||||
|
/>
|
||||||
|
<label class="form-check-label" for="nscdDisable">
|
||||||
|
{{ $t("Disable") }}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- DNS Cache -->
|
<!-- DNS Cache -->
|
||||||
<div class="mb-4">
|
<div class="mb-4">
|
||||||
<label class="form-label">
|
<label class="form-label">
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
v-model="password.currentPassword"
|
v-model="password.currentPassword"
|
||||||
type="password"
|
type="password"
|
||||||
class="form-control"
|
class="form-control"
|
||||||
|
autocomplete="current-password"
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@ -32,6 +33,7 @@
|
|||||||
v-model="password.newPassword"
|
v-model="password.newPassword"
|
||||||
type="password"
|
type="password"
|
||||||
class="form-control"
|
class="form-control"
|
||||||
|
autocomplete="new-password"
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@ -46,6 +48,7 @@
|
|||||||
type="password"
|
type="password"
|
||||||
class="form-control"
|
class="form-control"
|
||||||
:class="{ 'is-invalid': invalidPassword }"
|
:class="{ 'is-invalid': invalidPassword }"
|
||||||
|
autocomplete="new-password"
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
<div class="invalid-feedback">
|
<div class="invalid-feedback">
|
||||||
|
@ -683,5 +683,6 @@
|
|||||||
"languageName": "العربية",
|
"languageName": "العربية",
|
||||||
"Game": "الألعاب",
|
"Game": "الألعاب",
|
||||||
"List": "القائمة",
|
"List": "القائمة",
|
||||||
"statusMaintenance": "الصيانة"
|
"statusMaintenance": "الصيانة",
|
||||||
|
"Home": "الرئيسة"
|
||||||
}
|
}
|
||||||
|
@ -454,9 +454,10 @@
|
|||||||
"Server Timezone": "Server Timezone",
|
"Server Timezone": "Server Timezone",
|
||||||
"statusPageMaintenanceEndDate": "End",
|
"statusPageMaintenanceEndDate": "End",
|
||||||
"IconUrl": "Icon URL",
|
"IconUrl": "Icon URL",
|
||||||
"Enable DNS Cache": "Enable DNS Cache for HTTP(s) monitors",
|
"Enable DNS Cache": "(Deprecated) Enable DNS Cache for HTTP(s) monitors",
|
||||||
"Enable": "Enable",
|
"Enable": "Enable",
|
||||||
"Disable": "Disable",
|
"Disable": "Disable",
|
||||||
|
"enableNSCD": "Enable NSCD (Name Service Cache Daemon) for caching all DNS requests",
|
||||||
"chromeExecutable": "Chrome/Chromium Executable",
|
"chromeExecutable": "Chrome/Chromium Executable",
|
||||||
"chromeExecutableAutoDetect": "Auto Detect",
|
"chromeExecutableAutoDetect": "Auto Detect",
|
||||||
"chromeExecutableDescription": "For Docker users, if Chromium is not yet installed, it may take a few minutes to install and display the test result. It takes 1GB of disk space.",
|
"chromeExecutableDescription": "For Docker users, if Chromium is not yet installed, it may take a few minutes to install and display the test result. It takes 1GB of disk space.",
|
||||||
|
@ -569,5 +569,18 @@
|
|||||||
"dayOfMonth": "Hilabeteko eguna",
|
"dayOfMonth": "Hilabeteko eguna",
|
||||||
"lastDay": "Azken eguna",
|
"lastDay": "Azken eguna",
|
||||||
"lastDay1": "Hilabeteko azken eguna",
|
"lastDay1": "Hilabeteko azken eguna",
|
||||||
"Resend Notification if Down X times consecutively": "Bidali jakinarazpena X aldiz jarraian erortzen bada"
|
"Resend Notification if Down X times consecutively": "Bidali jakinarazpena X aldiz jarraian erortzen bada",
|
||||||
|
"Add New Tag": "Gehitu etiketa berria",
|
||||||
|
"Schedule maintenance": "Programatu mantenua",
|
||||||
|
"Start of maintenance": "Mantenuaren hasiera",
|
||||||
|
"All Status Pages": "Egoera orrialde guztiak",
|
||||||
|
"Custom": "Pertsonalizatua",
|
||||||
|
"showCertificateExpiry": "Erakutsi ziurtagiriaren iraungitzea",
|
||||||
|
"Close": "Itxi",
|
||||||
|
"Request Body": "Eskaera gorputza",
|
||||||
|
"Mechanism": "Mekanismoa",
|
||||||
|
"Home": "Hasiera",
|
||||||
|
"filterActive": "Aktibo",
|
||||||
|
"filterActivePaused": "Geldituta",
|
||||||
|
"Expected Value": "Esperotako balioa"
|
||||||
}
|
}
|
||||||
|
@ -739,5 +739,6 @@
|
|||||||
"pagertreeHigh": "גבוהה",
|
"pagertreeHigh": "גבוהה",
|
||||||
"pagertreeCritical": "קריטי",
|
"pagertreeCritical": "קריטי",
|
||||||
"pagertreeResolve": "הגדרה אוטומטית",
|
"pagertreeResolve": "הגדרה אוטומטית",
|
||||||
"ntfyUsernameAndPassword": "שם משתמש וסיסמא"
|
"ntfyUsernameAndPassword": "שם משתמש וסיסמא",
|
||||||
|
"Cannot connect to the socket server": "לא ניתן להתחבר לשקע השרת"
|
||||||
}
|
}
|
||||||
|
@ -177,7 +177,7 @@
|
|||||||
"Entry Page": "Pagina Principale",
|
"Entry Page": "Pagina Principale",
|
||||||
"statusPageNothing": "Non c'è nulla qui, aggiungi un gruppo oppure un monitor.",
|
"statusPageNothing": "Non c'è nulla qui, aggiungi un gruppo oppure un monitor.",
|
||||||
"No Services": "Nessun servizio",
|
"No Services": "Nessun servizio",
|
||||||
"All Systems Operational": "Tutti i sistemi sono funzionali",
|
"All Systems Operational": "Tutti i sistemi sono funzionanti",
|
||||||
"Partially Degraded Service": "Servizio parzialmente degradato",
|
"Partially Degraded Service": "Servizio parzialmente degradato",
|
||||||
"Degraded Service": "Servizio degradato",
|
"Degraded Service": "Servizio degradato",
|
||||||
"Add Group": "Aggiungi gruppo",
|
"Add Group": "Aggiungi gruppo",
|
||||||
@ -608,5 +608,7 @@
|
|||||||
"Cannot connect to the socket server": "Impossibile connettersi al server socket",
|
"Cannot connect to the socket server": "Impossibile connettersi al server socket",
|
||||||
"Reconnecting...": "Riconnessione...",
|
"Reconnecting...": "Riconnessione...",
|
||||||
"Expected Value": "Valore atteso",
|
"Expected Value": "Valore atteso",
|
||||||
"Json Query": "Query Json"
|
"Json Query": "Query Json",
|
||||||
|
"deleteMaintenanceMsg": "Sei sicuro di voler cancellare questa attività di manutenzione?",
|
||||||
|
"dnsPortDescription": "Porta server DNS. Default 53. Puoi cambiare questa porta in ogni momento."
|
||||||
}
|
}
|
||||||
|
@ -215,5 +215,6 @@
|
|||||||
"Cannot connect to the socket server": "Nemožno sa pripojiť k socket serveru",
|
"Cannot connect to the socket server": "Nemožno sa pripojiť k socket serveru",
|
||||||
"Invert Keyword": "Prevrátiť kľúčové slovo",
|
"Invert Keyword": "Prevrátiť kľúčové slovo",
|
||||||
"Expected Value": "Očakávaná hodnota",
|
"Expected Value": "Očakávaná hodnota",
|
||||||
"Json Query": "Json Query"
|
"Json Query": "Json Query",
|
||||||
|
"Method": "Metoda"
|
||||||
}
|
}
|
||||||
|
191
src/lang/te.json
Normal file
191
src/lang/te.json
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
{
|
||||||
|
"languageName": "తెలుగు",
|
||||||
|
"Settings": "సెట్టింగ్లు",
|
||||||
|
"Dashboard": "డాష్బోర్డ్",
|
||||||
|
"Help": "సహాయం",
|
||||||
|
"Language": "భాష",
|
||||||
|
"Appearance": "ప్రదర్శన",
|
||||||
|
"Theme": "నేపథ్యం",
|
||||||
|
"General": "సాధారణ",
|
||||||
|
"Game": "ఆట",
|
||||||
|
"Version": "సంస్కరణ",
|
||||||
|
"Check Update On GitHub": "GitHubలో నవీకరణను తనిఖీ చేయండి",
|
||||||
|
"List": "జాబితా",
|
||||||
|
"Home": "స్వస్థల o",
|
||||||
|
"Add": "జోడించు",
|
||||||
|
"Quick Stats": "త్వరిత గణాంకాలు",
|
||||||
|
"Up": "పనిచేస్తుంది",
|
||||||
|
"Down": "ఆగిపోయింది",
|
||||||
|
"Pending": "అనిశ్చిత",
|
||||||
|
"Maintenance": "నిర్వహణ",
|
||||||
|
"Unknown": "తెలియని స్థితి",
|
||||||
|
"Reconnecting...": "మళ్లీ కనెక్ట్ అవుతోంది...",
|
||||||
|
"General Monitor Type": "సాధారణ మానిటర్ రకం",
|
||||||
|
"Passive Monitor Type": "నిష్క్రియాత్మక మానిటర్ రకం",
|
||||||
|
"markdownSupported": "మార్క్డౌన్ సింటాక్స్కు మద్దతు ఉంది",
|
||||||
|
"Pause": "విరామం",
|
||||||
|
"Name": "పేరు",
|
||||||
|
"Status": "స్థితి",
|
||||||
|
"DateTime": "తేదీ సమయం",
|
||||||
|
"Message": "సందేశం",
|
||||||
|
"No important events": "ముఖ్యమైన సంఘటనలు లేవు",
|
||||||
|
"Resume": "పునఃప్రారంభం",
|
||||||
|
"Edit": "సవరించు",
|
||||||
|
"Current": "ప్రస్తుత",
|
||||||
|
"Uptime": "సమయ వ్యవధి",
|
||||||
|
"Monitor": "మానిటర్ | మానిటర్లు",
|
||||||
|
"day": "రోజు | రోజులు",
|
||||||
|
"-day": "-రోజు",
|
||||||
|
"hour": "గంట",
|
||||||
|
"-hour": "-గంట",
|
||||||
|
"Response": "ప్రతిస్పందన",
|
||||||
|
"Ping": "పింగ్",
|
||||||
|
"Keyword": "కీవర్డ్",
|
||||||
|
"Invert Keyword": "విలోమ కీవర్డ్",
|
||||||
|
"Expected Value": "అంచనా విలువ",
|
||||||
|
"Json Query": "Json ప్రశ్న",
|
||||||
|
"URL": "URL",
|
||||||
|
"Hostname": "హోస్ట్ పేరు",
|
||||||
|
"Port": "పోర్ట్",
|
||||||
|
"Heartbeat Interval": "హృదయ స్పందన విరామం",
|
||||||
|
"Request Timeout": "అభ్యర్థన ముగిసె గడువు",
|
||||||
|
"timeoutAfter": "{0} సెకన్ల తర్వాత గడువు ముగిసింది",
|
||||||
|
"Heartbeat Retry Interval": "హృదయ స్పందన పునఃప్రయత్న విరామం",
|
||||||
|
"Advanced": "ఆధునిక",
|
||||||
|
"checkEverySecond": "ప్రతి {0} సెకన్లకు తనిఖీ చేయండి",
|
||||||
|
"retryCheckEverySecond": "ప్రతి {0} సెకన్లకు మళ్లీ ప్రయత్నించండి",
|
||||||
|
"resendDisabled": "మల్లిపంపడము అచేతనము చేయబడ్డది",
|
||||||
|
"ignoreTLSError": "HTTPS వెబ్సైట్ల కోసం TLS/SSL లోపాన్ని విస్మరించండి",
|
||||||
|
"maxRedirectDescription": "అనుసరించాల్సిన దారి మళ్లింపుల గరిష్ట సంఖ్య. దారి మళ్లింపులను నిలిపివేయడానికి 0కి సెట్ చేయండి.",
|
||||||
|
"Upside Down Mode": "అప్సైడ్ డౌన్ మోడ్",
|
||||||
|
"Max. Redirects": "గరిష్టంగా దారి మళ్లింపులు",
|
||||||
|
"Push URL": "పుష్ URL",
|
||||||
|
"needPushEvery": "మీరు ప్రతి {0} సెకన్లకు ఈ URLకి కాల్ చేయాలి.",
|
||||||
|
"Save": "సేవ్ చేయండి",
|
||||||
|
"Notifications": "నోటిఫికేషన్లు",
|
||||||
|
"Setup Notification": "నోటిఫికేషన్ సెటప్ చేయండి",
|
||||||
|
"Light": "కాంతి",
|
||||||
|
"Dark": "వెలుతురు లేని",
|
||||||
|
"Auto": "ఆటో",
|
||||||
|
"Theme - Heartbeat Bar": "థీమ్ - హార్ట్బీట్ బార్",
|
||||||
|
"styleElapsedTimeShowNoLine": "చూపించు (పంక్తి లేదు)",
|
||||||
|
"styleElapsedTimeShowWithLine": "చూపించు (పంక్తితో)",
|
||||||
|
"Normal": "సాధారణ",
|
||||||
|
"Bottom": "దిగువన",
|
||||||
|
"None": "ఏదీ లేదు",
|
||||||
|
"Timezone": "సమయమండలం",
|
||||||
|
"Allow indexing": "ఇండెక్సింగ్ని అనుమతించండి",
|
||||||
|
"Change Password": "పాస్వర్డ్ మార్చండి",
|
||||||
|
"Current Password": "ప్రస్తుత పాస్వర్డ్",
|
||||||
|
"New Password": "కొత్త పాస్వర్డ్",
|
||||||
|
"Repeat New Password": "కొత్త పాస్వర్డ్ని మళ్లీ నమోదు చేయండి",
|
||||||
|
"Disable Auth": "ప్రామాణీకరణను నిలిపివేయండి",
|
||||||
|
"Enable Auth": "ప్రామాణీకరణను ప్రారంభించండి",
|
||||||
|
"Please use this option carefully!": "దయచేసి ఈ ఎంపికను జాగ్రత్తగా ఉపయోగించండి!",
|
||||||
|
"Logout": "లాగ్అవుట్",
|
||||||
|
"Leave": "వదిలేయండి",
|
||||||
|
"Confirm": "నిర్ధారించండి",
|
||||||
|
"Yes": "అవును",
|
||||||
|
"No": "లేదు",
|
||||||
|
"Username": "వినియోగదారు పేరు",
|
||||||
|
"Password": "పాస్వర్డ్",
|
||||||
|
"Remember me": "నన్ను గుర్తు పెట్టుకో",
|
||||||
|
"Login": "లాగిన్",
|
||||||
|
"add one": "ఒకటి జోడించండి",
|
||||||
|
"Notification Type": "నోటిఫికేషన్ రకం",
|
||||||
|
"Email": "ఇమెయిల్",
|
||||||
|
"Test": "పరీక్షించండి",
|
||||||
|
"Resolver Server": "రిసోల్వర్ సర్వర్",
|
||||||
|
"Resource Record Type": "రిసోర్స్ రికార్డ్ రకం",
|
||||||
|
"Last Result": "చివరి ఫలితం",
|
||||||
|
"Repeat Password": "పాస్వర్డ్ని మళ్లీ నమోదు చేయండి",
|
||||||
|
"Import Backup": "బ్యాకప్ని దిగుమతి చేయండి",
|
||||||
|
"Export": "ఎగుమతి",
|
||||||
|
"Import": "దిగుమతి",
|
||||||
|
"respTime": "ప్రతిస్పందన. సమయం (మిసె)",
|
||||||
|
"Default enabled": "డిఫాల్ట్ ప్రారంభించబడింది",
|
||||||
|
"Create": "సృష్టించు",
|
||||||
|
"Clear Data": "డేటాను క్లియర్ చేయండి",
|
||||||
|
"Events": "ఈవెంట్స్",
|
||||||
|
"Heartbeats": "హృదయ స్పందన",
|
||||||
|
"Auto Get": "స్వయంచాలక పొందండి",
|
||||||
|
"Affected Monitors": "ప్రభావిత మానిటర్లు",
|
||||||
|
"Pick Affected Monitors...": "ప్రభావిత మానిటర్లను ఎంచుకోండి…",
|
||||||
|
"All Status Pages": "అన్ని స్థితి పేజీలు",
|
||||||
|
"Select status pages...": "స్థితి పేజీలను ఎంచుకోండి…",
|
||||||
|
"alertWrongFileType": "దయచేసి JSON ఫైల్ని ఎంచుకోండి.",
|
||||||
|
"Clear all statistics": "అన్ని గణాంకాలను క్లియర్ చేయండి",
|
||||||
|
"Skip existing": "ఉనికిని దాటవేయి",
|
||||||
|
"Options": "ఎంపికలు",
|
||||||
|
"Keep both": "రెండు ఉంచండి",
|
||||||
|
"Verify Token": "టోకెన్ని ధృవీకరించండి",
|
||||||
|
"Setup 2FA": "సెటప్ 2FA",
|
||||||
|
"Disable 2FA": "2FAని నిలిపివేయండి",
|
||||||
|
"2FA Settings": "2FA సెట్టింగ్లు",
|
||||||
|
"filterActive": "చురుకుగా",
|
||||||
|
"filterActivePaused": "ఆగిపోయింది",
|
||||||
|
"Active": "చురుకుగా",
|
||||||
|
"Inactive": "నిష్క్రియ",
|
||||||
|
"Token": "టోకెన్",
|
||||||
|
"Tags": "టాగ్లు",
|
||||||
|
"Add New Tag": "కొత్త ట్యాగ్ని జోడించండి",
|
||||||
|
"Tag with this name already exist.": "ఈ పేరుతో ట్యాగ్ ఇప్పటికే ఉంది.",
|
||||||
|
"color": "రంగు",
|
||||||
|
"value (optional)": "విలువ (ఐచ్ఛికం)",
|
||||||
|
"Gray": "బూడిద రంగు",
|
||||||
|
"Red": "ఎరుపు",
|
||||||
|
"Orange": "నారింజ రంగు",
|
||||||
|
"Green": "ఆకుపచ్చ",
|
||||||
|
"Blue": "నీలం",
|
||||||
|
"Indigo": "నీలిమందు రంగు",
|
||||||
|
"Purple": "ఊదా రంగు",
|
||||||
|
"Pink": "పింక్ కలర్",
|
||||||
|
"Search...": "వెతకండి…",
|
||||||
|
"Avg. Ping": "సగటు పింగ్",
|
||||||
|
"Avg. Response": "సగటు ప్రతిస్పందన",
|
||||||
|
"statusPageRefreshIn": "సెకన్లలో రిఫ్రెష్ చేయండి: {0}",
|
||||||
|
"New Update": "కొత్త నవీకరణ",
|
||||||
|
"Primary Base URL": "ప్రాథమిక URL",
|
||||||
|
"Add New Monitor": "కొత్త మానిటర్ని జోడించండి",
|
||||||
|
"statusMaintenance": "స్థితి నిర్వహణ",
|
||||||
|
"Cannot connect to the socket server": "సాకెట్ సర్వర్కి కనెక్ట్ చేయడం సాధ్యపడదు",
|
||||||
|
"Specific Monitor Type": "నిర్దిష్ట మానిటర్ రకం",
|
||||||
|
"pauseDashboardHome": "డాష్బోర్డ్ హోమ్నకు విరామం",
|
||||||
|
"Delete": "తొలగించు",
|
||||||
|
"Cert Exp.": "సర్టిఫికేట్ గడువు.",
|
||||||
|
"Monitor Type": "మానిటర్ రకం",
|
||||||
|
"Friendly Name": "స్నేహపూర్వక పేరు",
|
||||||
|
"Retries": "పునఃప్రయత్నాలు",
|
||||||
|
"Resend Notification if Down X times consecutively": "వరుసగా X సార్లు డౌన్ అయితే నోటిఫికేషన్ని మళ్లీ పంపండి",
|
||||||
|
"resendEveryXTimes": "ప్రతి {0} సార్లు మళ్లీ పంపండి",
|
||||||
|
"retriesDescription": "సేవ డౌన్గా గుర్తించబడి నోటిఫికేషన్ పంపబడటానికి ముందు గరిష్ట సంఖ్యలో పునఃప్రయత్నాలు",
|
||||||
|
"upsideDownModeDescription": "స్థితిని తలక్రిందులుగా తిప్పండి. సేవ చేరుకోగలిగితే, అది పని చేయనట్లు పరిగణించబడుతుంది.",
|
||||||
|
"Accepted Status Codes": "ఆమోదించబడిన HTTP స్థితి కోడ్లు",
|
||||||
|
"pushOptionalParams": "ఐచ్ఛిక పారామితులు: {0}",
|
||||||
|
"Not available, please setup.": "అందుబాటులో లేదు, దయచేసి సెటప్ చేయండి.",
|
||||||
|
"styleElapsedTime": "హృదయ స్పందన పట్టీ కింద గడిచిన సమయం",
|
||||||
|
"Search Engine Visibility": "శోధన ఇంజిన్ దృశ్యమానత",
|
||||||
|
"Discourage search engines from indexing site": "ఇండెక్సింగ్ సైట్ నుండి శోధన ఇంజిన్లను నిరుత్సాహపరచండి",
|
||||||
|
"Update Password": "పాస్వర్డ్ని నవీకరించండి",
|
||||||
|
"disableauth.message1": "మీరు ఖచ్చితంగా <strong>ప్రామాణీకరణను నిలిపివేయాలనుకుంటున్నారా</strong>?",
|
||||||
|
"disableauth.message2": "ఇది Cloudflare యాక్సెస్, Authelia లేదా ఇతర ప్రమాణీకరణ మెకానిజమ్ల వంటి Uptime Kuma ముందు <strong>థర్డ్-పార్టీ ప్రామాణీకరణను అమలు చేయాలనుకుంటున్న</strong> దృశ్యాల కోసం రూపొందించబడింది.",
|
||||||
|
"I understand, please disable": "నాకు అర్థమైంది, దయచేసి నిలిపివేయండి",
|
||||||
|
"No Monitors, please": "దయచేసి మానిటర్లు వద్దు",
|
||||||
|
"Certificate Info": "సర్టిఫికేట్ సమాచారం",
|
||||||
|
"Create your admin account": "మీ నిర్వాహక ఖాతాను సృష్టించండి",
|
||||||
|
"Export Backup": "బ్యాకప్ ఎగుమతి",
|
||||||
|
"notAvailableShort": "లేదు/అందుబాటులో లేదు",
|
||||||
|
"Apply on all existing monitors": "ఇప్పటికే ఉన్న అన్ని మానిటర్లపై వర్తించండి",
|
||||||
|
"Schedule maintenance": "షెడ్యూల్ నిర్వహణ",
|
||||||
|
"Start of maintenance": "నిర్వహణ ప్రారంభం",
|
||||||
|
"alertNoFile": "దయచేసి దిగుమతి చేయడానికి ఫైల్ను ఎంచుకోండి.",
|
||||||
|
"Overwrite": "ఓవర్రైట్",
|
||||||
|
"Enable 2FA": "2FAని ప్రారంభించండి",
|
||||||
|
"Two Factor Authentication": "రెండు కారకాల ప్రమాణీకరణ",
|
||||||
|
"Show URI": "URIని చూపు",
|
||||||
|
"Add New below or Select...": "దిగువన కొత్తది జోడించండి లేదా ఎంచుకోండి…",
|
||||||
|
"Tag with this value already exist.": "ఈ విలువతో ట్యాగ్ ఇప్పటికే ఉంది.",
|
||||||
|
"Custom": "కస్టమ్",
|
||||||
|
"Entry Page": "ఎంట్రీ పేజీ",
|
||||||
|
"statusPageNothing": "ఇక్కడ ఏమీ లేదు, దయచేసి సమూహాన్ని లేదా మానిటర్ని జోడించండి."
|
||||||
|
}
|
@ -672,5 +672,8 @@
|
|||||||
"recurringIntervalMessage": "ดำเนินการทุกวัน | ดำเนินการทุก {0} วัน",
|
"recurringIntervalMessage": "ดำเนินการทุกวัน | ดำเนินการทุก {0} วัน",
|
||||||
"chromeExecutableAutoDetect": "ตรวจจับอัตโนมัติ",
|
"chromeExecutableAutoDetect": "ตรวจจับอัตโนมัติ",
|
||||||
"chromeExecutableDescription": "สำหรับผู้ใช้งาน Docker, ถ้ายังไม่ได้ติดตั่ง Chromium, อาจจะเสียเวลาในการติดตั่งและแสดงผลการทดสอบเพิ่มเติม, ใช้พื้นที่ประมาณ 1GB",
|
"chromeExecutableDescription": "สำหรับผู้ใช้งาน Docker, ถ้ายังไม่ได้ติดตั่ง Chromium, อาจจะเสียเวลาในการติดตั่งและแสดงผลการทดสอบเพิ่มเติม, ใช้พื้นที่ประมาณ 1GB",
|
||||||
"notificationRegional": "ภูมิภาค"
|
"notificationRegional": "ภูมิภาค",
|
||||||
|
"timeoutAfter": "หมดเวลาหลังจาก {0} วินาที",
|
||||||
|
"Select": "เลือก",
|
||||||
|
"Expected Value": "ค่าที่คาดหวัง"
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@
|
|||||||
"Accepted Status Codes": "Припустимі коди статусу",
|
"Accepted Status Codes": "Припустимі коди статусу",
|
||||||
"Save": "Зберегти",
|
"Save": "Зберегти",
|
||||||
"Notifications": "Сповіщення",
|
"Notifications": "Сповіщення",
|
||||||
"Not available, please setup.": "Доступних сповіщень немає, необхідно створити.",
|
"Not available, please setup.": "Недоступно, будь ласка, налаштуйте.",
|
||||||
"Setup Notification": "Створити сповіщення",
|
"Setup Notification": "Створити сповіщення",
|
||||||
"Light": "Світла",
|
"Light": "Світла",
|
||||||
"Dark": "Темна",
|
"Dark": "Темна",
|
||||||
@ -445,7 +445,7 @@
|
|||||||
"Don't know how to get the token? Please read the guide:": "Не знаєте, як отримати токен? Прочитайте посібник:",
|
"Don't know how to get the token? Please read the guide:": "Не знаєте, як отримати токен? Прочитайте посібник:",
|
||||||
"The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "Поточне з’єднання може бути втрачено, якщо ви зараз під’єднуєтеся через Cloudflare Tunnel. Ви дійсно хочете зробити це? Для підтвердження введіть поточний пароль.",
|
"The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "Поточне з’єднання може бути втрачено, якщо ви зараз під’єднуєтеся через Cloudflare Tunnel. Ви дійсно хочете зробити це? Для підтвердження введіть поточний пароль.",
|
||||||
"Other Software": "Інше програмне забезпечення",
|
"Other Software": "Інше програмне забезпечення",
|
||||||
"For example: nginx, Apache and Traefik.": "Наприклад: nginx, Apache and Traefik.",
|
"For example: nginx, Apache and Traefik.": "Наприклад: nginx, Apache і Traefik.",
|
||||||
"Please read": "Будь ласка, прочитайте",
|
"Please read": "Будь ласка, прочитайте",
|
||||||
"Subject:": "Тема:",
|
"Subject:": "Тема:",
|
||||||
"Valid To:": "Дійсний до:",
|
"Valid To:": "Дійсний до:",
|
||||||
|
@ -204,7 +204,7 @@
|
|||||||
"webhookJsonDesc": "{0} کسی بھی جدید HTTP سرورز جیسے Express.js کے لیے اچھا ہے",
|
"webhookJsonDesc": "{0} کسی بھی جدید HTTP سرورز جیسے Express.js کے لیے اچھا ہے",
|
||||||
"webhookFormDataDesc": "{multipart} پی ایچ پی کے لیے اچھا ہے۔ JSON کو {decodeFunction} کے ساتھ پارس کرنے کی ضرورت ہوگی",
|
"webhookFormDataDesc": "{multipart} پی ایچ پی کے لیے اچھا ہے۔ JSON کو {decodeFunction} کے ساتھ پارس کرنے کی ضرورت ہوگی",
|
||||||
"webhookAdditionalHeadersTitle": "اضافی ہیڈرز",
|
"webhookAdditionalHeadersTitle": "اضافی ہیڈرز",
|
||||||
"webhookAdditionalHeadersDesc": "ویب ہک کے ساتھ بھیجے گئے اضافی ہیڈر سیٹ کرتا ہے۔",
|
"webhookAdditionalHeadersDesc": "ویب ہک کے ساتھ بھیجے گئے اضافی ہیڈر سیٹ کرتا ہے۔ ہر ہیڈر کو JSON کلید/قدر کے طور پر بیان کیا جانا چاہیے۔",
|
||||||
"Webhook URL": "ابھوک دیہی",
|
"Webhook URL": "ابھوک دیہی",
|
||||||
"Application Token": "ایپلیکیشن ٹوکن",
|
"Application Token": "ایپلیکیشن ٹوکن",
|
||||||
"Server URL": "سرور URL",
|
"Server URL": "سرور URL",
|
||||||
@ -429,7 +429,7 @@
|
|||||||
"No Maintenance": "کوئی دیکھ بھال نہیں",
|
"No Maintenance": "کوئی دیکھ بھال نہیں",
|
||||||
"weekdayShortTue": "منگل",
|
"weekdayShortTue": "منگل",
|
||||||
"Add New Tag": "نیا ٹیگ شامل کریں",
|
"Add New Tag": "نیا ٹیگ شامل کریں",
|
||||||
"Enable DNS Cache": "ڈی این ایس کیشے کو فعال کریں",
|
"Enable DNS Cache": "HTTP(s) مانیٹرز کے لیے DNS کیش کو فعال کریں",
|
||||||
"Effective Date Range": "مؤثر تاریخ کی حد (اختیاری)",
|
"Effective Date Range": "مؤثر تاریخ کی حد (اختیاری)",
|
||||||
"Schedule Maintenance": "شیڈول کی بحالی",
|
"Schedule Maintenance": "شیڈول کی بحالی",
|
||||||
"Date and Time": "تاریخ اور وقت",
|
"Date and Time": "تاریخ اور وقت",
|
||||||
@ -461,5 +461,23 @@
|
|||||||
"installing": "تنصیب",
|
"installing": "تنصیب",
|
||||||
"chromeExecutableAutoDetect": "آٹو کھوج",
|
"chromeExecutableAutoDetect": "آٹو کھوج",
|
||||||
"Edit Maintenance": "دیکھ بھال میں ترمیم کریں",
|
"Edit Maintenance": "دیکھ بھال میں ترمیم کریں",
|
||||||
"Reconnecting...": "دوبارہ رابطہ قائم کرنا..."
|
"Reconnecting...": "دوبارہ رابطہ قائم کرنا...",
|
||||||
|
"Request Timeout": "ٹائم آؤٹ کی درخواست کریں",
|
||||||
|
"timeoutAfter": "{0} سیکنڈ کے بعد ٹائم آؤٹ",
|
||||||
|
"styleElapsedTime": "دل کی دھڑکن بار کے نیچے گزرا ہوا وقت",
|
||||||
|
"webhookCustomBodyDesc": "درخواست کے لیے حسب ضرورت HTTP باڈی کی وضاحت کریں۔ ٹیمپلیٹ متغیرات {msg}، {heartbeat}، {monitor} قبول کیے گئے ہیں۔",
|
||||||
|
"filterActive": "فعال",
|
||||||
|
"Check/Uncheck": "چیک/ان چیک کریں",
|
||||||
|
"styleElapsedTimeShowNoLine": "دکھائیں (کوئی لائن نہیں)",
|
||||||
|
"styleElapsedTimeShowWithLine": "دکھائیں (لائن کے ساتھ)",
|
||||||
|
"filterActivePaused": "روک دیا گیا",
|
||||||
|
"webhookBodyPresetOption": "پیش سیٹ - {0}",
|
||||||
|
"webhookBodyCustomOption": "حسب ضرورت باڈی",
|
||||||
|
"Select": "منتخب کریں",
|
||||||
|
"selectedMonitorCount": "منتخب کردہ: {0}",
|
||||||
|
"tailscalePingWarning": "Tailscale Ping مانیٹر استعمال کرنے کے لیے، آپ کو Docker کے بغیر Uptime Kuma انسٹال کرنا ہوگا اور اپنے سرور پر Tailscale کلائنٹ بھی انسٹال کرنا ہوگا۔",
|
||||||
|
"uninstall": "ان انسٹال کریں",
|
||||||
|
"Invert Keyword": "مطلوبہ الفاظ کو الٹ دیں",
|
||||||
|
"Expected Value": "متوقع قدر",
|
||||||
|
"Json Query": "Json استفسار"
|
||||||
}
|
}
|
||||||
|
@ -82,7 +82,7 @@
|
|||||||
<option value="redis">
|
<option value="redis">
|
||||||
Redis
|
Redis
|
||||||
</option>
|
</option>
|
||||||
<option value="tailscale-ping">
|
<option v-if="$root.info.isContainer" value="tailscale-ping">
|
||||||
Tailscale Ping
|
Tailscale Ping
|
||||||
</option>
|
</option>
|
||||||
</optgroup>
|
</optgroup>
|
||||||
@ -99,18 +99,6 @@
|
|||||||
<input id="name" v-model="monitor.name" type="text" class="form-control" required>
|
<input id="name" v-model="monitor.name" type="text" class="form-control" required>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Parent Monitor -->
|
|
||||||
<div class="my-3">
|
|
||||||
<label for="parent" class="form-label">{{ $t("Monitor Group") }}</label>
|
|
||||||
<ActionSelect
|
|
||||||
v-model="monitor.parent"
|
|
||||||
:options="parentMonitorOptionsList"
|
|
||||||
:disabled="sortedGroupMonitorList.length === 0 && draftGroupName == null"
|
|
||||||
:icon="'plus'"
|
|
||||||
:action="() => $refs.createGroupDialog.show()"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- URL -->
|
<!-- URL -->
|
||||||
<div v-if="monitor.type === 'http' || monitor.type === 'keyword' || monitor.type === 'json-query' || monitor.type === 'real-browser' " class="my-3">
|
<div v-if="monitor.type === 'http' || monitor.type === 'keyword' || monitor.type === 'json-query' || monitor.type === 'real-browser' " class="my-3">
|
||||||
<label for="url" class="form-label">{{ $t("URL") }}</label>
|
<label for="url" class="form-label">{{ $t("URL") }}</label>
|
||||||
@ -504,6 +492,18 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<!-- Parent Monitor -->
|
||||||
|
<div class="my-3">
|
||||||
|
<label for="parent" class="form-label">{{ $t("Monitor Group") }}</label>
|
||||||
|
<ActionSelect
|
||||||
|
v-model="monitor.parent"
|
||||||
|
:options="parentMonitorOptionsList"
|
||||||
|
:disabled="sortedGroupMonitorList.length === 0 && draftGroupName == null"
|
||||||
|
:icon="'plus'"
|
||||||
|
:action="() => $refs.createGroupDialog.show()"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Description -->
|
<!-- Description -->
|
||||||
<div class="my-3">
|
<div class="my-3">
|
||||||
<label for="description" class="form-label">{{ $t("Description") }}</label>
|
<label for="description" class="form-label">{{ $t("Description") }}</label>
|
||||||
|
@ -167,6 +167,10 @@ export default {
|
|||||||
this.settings.entryPage = "dashboard";
|
this.settings.entryPage = "dashboard";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.settings.nscd === undefined) {
|
||||||
|
this.settings.nscd = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (this.settings.dnsCache === undefined) {
|
if (this.settings.dnsCache === undefined) {
|
||||||
this.settings.dnsCache = false;
|
this.settings.dnsCache = false;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user