mirror of
https://github.com/louislam/uptime-kuma.git
synced 2025-02-25 21:15:55 +00:00
fix:redirect /list on mobile to /dashboard when shrinking on computer
This commit is contained in:
parent
a6cb8584fc
commit
5f67a868cb
31 changed files with 42517 additions and 42498 deletions
54
.github/workflows/json-yaml-validate.yml
vendored
54
.github/workflows/json-yaml-validate.yml
vendored
|
@ -1,27 +1,27 @@
|
||||||
name: json-yaml-validate
|
name: json-yaml-validate
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
- 1.23.X
|
- 1.23.X
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
pull-requests: write # enable write permissions for pull request comments
|
pull-requests: write # enable write permissions for pull request comments
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
json-yaml-validate:
|
json-yaml-validate:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: json-yaml-validate
|
- name: json-yaml-validate
|
||||||
id: json-yaml-validate
|
id: json-yaml-validate
|
||||||
uses: GrantBirki/json-yaml-validate@v2.4.0
|
uses: GrantBirki/json-yaml-validate@v2.4.0
|
||||||
with:
|
with:
|
||||||
comment: "true" # enable comment mode
|
comment: "true" # enable comment mode
|
||||||
exclude_file: ".github/config/exclude.txt" # gitignore style file for exclusions
|
exclude_file: ".github/config/exclude.txt" # gitignore style file for exclusions
|
||||||
|
|
|
@ -1,61 +1,61 @@
|
||||||
# If the image changed, the second stage image should be changed too
|
# If the image changed, the second stage image should be changed too
|
||||||
FROM node:20-bookworm-slim AS base2-slim
|
FROM node:20-bookworm-slim AS base2-slim
|
||||||
ARG TARGETPLATFORM
|
ARG TARGETPLATFORM
|
||||||
|
|
||||||
# Specify --no-install-recommends to skip unused dependencies, make the base much smaller!
|
# Specify --no-install-recommends to skip unused dependencies, make the base much smaller!
|
||||||
# sqlite3 = for debugging
|
# sqlite3 = for debugging
|
||||||
# iputils-ping = for ping
|
# iputils-ping = for ping
|
||||||
# util-linux = for setpriv (Should be dropped in 2.0.0?)
|
# util-linux = for setpriv (Should be dropped in 2.0.0?)
|
||||||
# dumb-init = avoid zombie processes (#480)
|
# dumb-init = avoid zombie processes (#480)
|
||||||
# curl = for debugging
|
# curl = for debugging
|
||||||
# ca-certificates = keep the cert up-to-date
|
# ca-certificates = keep the cert up-to-date
|
||||||
# sudo = for start service nscd with non-root user
|
# sudo = for start service nscd with non-root user
|
||||||
# nscd = for better DNS caching
|
# nscd = for better DNS caching
|
||||||
RUN apt update && \
|
RUN apt update && \
|
||||||
apt --yes --no-install-recommends install \
|
apt --yes --no-install-recommends install \
|
||||||
sqlite3 \
|
sqlite3 \
|
||||||
ca-certificates \
|
ca-certificates \
|
||||||
iputils-ping \
|
iputils-ping \
|
||||||
util-linux \
|
util-linux \
|
||||||
dumb-init \
|
dumb-init \
|
||||||
curl \
|
curl \
|
||||||
sudo \
|
sudo \
|
||||||
nscd && \
|
nscd && \
|
||||||
rm -rf /var/lib/apt/lists/* && \
|
rm -rf /var/lib/apt/lists/* && \
|
||||||
apt --yes autoremove
|
apt --yes autoremove
|
||||||
|
|
||||||
# apprise = for notifications (Install from the deb package, as the stable one is too old) (workaround for #4867)
|
# apprise = for notifications (Install from the deb package, as the stable one is too old) (workaround for #4867)
|
||||||
# Switching to testing repo is no longer working, as the testing repo is not bookworm anymore.
|
# Switching to testing repo is no longer working, as the testing repo is not bookworm anymore.
|
||||||
# python3-paho-mqtt (#4859)
|
# python3-paho-mqtt (#4859)
|
||||||
RUN curl http://ftp.debian.org/debian/pool/main/a/apprise/apprise_1.8.0-2_all.deb --output apprise.deb && \
|
RUN curl http://ftp.debian.org/debian/pool/main/a/apprise/apprise_1.8.0-2_all.deb --output apprise.deb && \
|
||||||
apt update && \
|
apt update && \
|
||||||
apt --yes --no-install-recommends install ./apprise.deb python3-paho-mqtt && \
|
apt --yes --no-install-recommends install ./apprise.deb python3-paho-mqtt && \
|
||||||
rm -rf /var/lib/apt/lists/* && \
|
rm -rf /var/lib/apt/lists/* && \
|
||||||
rm -f apprise.deb && \
|
rm -f apprise.deb && \
|
||||||
apt --yes autoremove
|
apt --yes autoremove
|
||||||
|
|
||||||
# Install cloudflared
|
# Install cloudflared
|
||||||
RUN curl https://pkg.cloudflare.com/cloudflare-main.gpg --output /usr/share/keyrings/cloudflare-main.gpg && \
|
RUN curl https://pkg.cloudflare.com/cloudflare-main.gpg --output /usr/share/keyrings/cloudflare-main.gpg && \
|
||||||
echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared bullseye main' | tee /etc/apt/sources.list.d/cloudflared.list && \
|
echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared bullseye main' | tee /etc/apt/sources.list.d/cloudflared.list && \
|
||||||
apt update && \
|
apt update && \
|
||||||
apt install --yes --no-install-recommends -t stable cloudflared && \
|
apt install --yes --no-install-recommends -t stable cloudflared && \
|
||||||
cloudflared version && \
|
cloudflared version && \
|
||||||
rm -rf /var/lib/apt/lists/* && \
|
rm -rf /var/lib/apt/lists/* && \
|
||||||
apt --yes autoremove
|
apt --yes autoremove
|
||||||
|
|
||||||
# For nscd
|
# For nscd
|
||||||
COPY ./docker/etc/nscd.conf /etc/nscd.conf
|
COPY ./docker/etc/nscd.conf /etc/nscd.conf
|
||||||
COPY ./docker/etc/sudoers /etc/sudoers
|
COPY ./docker/etc/sudoers /etc/sudoers
|
||||||
|
|
||||||
|
|
||||||
# Full Base Image
|
# Full Base Image
|
||||||
# MariaDB, Chromium and fonts
|
# MariaDB, Chromium and fonts
|
||||||
# Make sure to reuse the slim image here. Uncomment the above line if you want to build it from scratch.
|
# Make sure to reuse the slim image here. Uncomment the above line if you want to build it from scratch.
|
||||||
# FROM base2-slim AS base2
|
# FROM base2-slim AS base2
|
||||||
FROM louislam/uptime-kuma:base2-slim AS base2
|
FROM louislam/uptime-kuma:base2-slim AS base2
|
||||||
ENV UPTIME_KUMA_ENABLE_EMBEDDED_MARIADB=1
|
ENV UPTIME_KUMA_ENABLE_EMBEDDED_MARIADB=1
|
||||||
RUN apt update && \
|
RUN apt update && \
|
||||||
apt --yes --no-install-recommends install chromium fonts-indic fonts-noto fonts-noto-cjk mariadb-server && \
|
apt --yes --no-install-recommends install chromium fonts-indic fonts-noto fonts-noto-cjk mariadb-server && \
|
||||||
rm -rf /var/lib/apt/lists/* && \
|
rm -rf /var/lib/apt/lists/* && \
|
||||||
apt --yes autoremove && \
|
apt --yes autoremove && \
|
||||||
chown -R node:node /var/lib/mysql
|
chown -R node:node /var/lib/mysql
|
||||||
|
|
35380
package-lock.json
generated
35380
package-lock.json
generated
File diff suppressed because it is too large
Load diff
428
package.json
428
package.json
|
@ -1,214 +1,214 @@
|
||||||
{
|
{
|
||||||
"name": "uptime-kuma",
|
"name": "uptime-kuma",
|
||||||
"version": "2.0.0-dev",
|
"version": "2.0.0-dev",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/louislam/uptime-kuma.git"
|
"url": "https://github.com/louislam/uptime-kuma.git"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "18 || >= 20.4.0"
|
"node": "18 || >= 20.4.0"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"lint:js": "eslint --ext \".js,.vue\" --ignore-path .gitignore .",
|
"lint:js": "eslint --ext \".js,.vue\" --ignore-path .gitignore .",
|
||||||
"lint:js-prod": "npm run lint:js -- --max-warnings 0",
|
"lint:js-prod": "npm run lint:js -- --max-warnings 0",
|
||||||
"lint-fix:js": "eslint --ext \".js,.vue\" --fix --ignore-path .gitignore .",
|
"lint-fix:js": "eslint --ext \".js,.vue\" --fix --ignore-path .gitignore .",
|
||||||
"lint:style": "stylelint \"**/*.{vue,css,scss}\" --ignore-path .gitignore",
|
"lint:style": "stylelint \"**/*.{vue,css,scss}\" --ignore-path .gitignore",
|
||||||
"lint-fix:style": "stylelint \"**/*.{vue,css,scss}\" --fix --ignore-path .gitignore",
|
"lint-fix:style": "stylelint \"**/*.{vue,css,scss}\" --fix --ignore-path .gitignore",
|
||||||
"lint": "npm run lint:js && npm run lint:style",
|
"lint": "npm run lint:js && npm run lint:style",
|
||||||
"lint:prod": "npm run lint:js-prod && npm run lint:style",
|
"lint:prod": "npm run lint:js-prod && npm run lint:style",
|
||||||
"dev": "concurrently -k -r \"wait-on tcp:3000 && npm run start-server-dev \" \"npm run start-frontend-dev\"",
|
"dev": "concurrently -k -r \"wait-on tcp:3000 && npm run start-server-dev \" \"npm run start-frontend-dev\"",
|
||||||
"start-frontend-dev": "cross-env NODE_ENV=development vite --host --config ./config/vite.config.js",
|
"start-frontend-dev": "cross-env NODE_ENV=development vite --host --config ./config/vite.config.js",
|
||||||
"start-frontend-devcontainer": "cross-env NODE_ENV=development DEVCONTAINER=1 vite --host --config ./config/vite.config.js",
|
"start-frontend-devcontainer": "cross-env NODE_ENV=development DEVCONTAINER=1 vite --host --config ./config/vite.config.js",
|
||||||
"start": "npm run start-server",
|
"start": "npm run start-server",
|
||||||
"start-server": "node server/server.js",
|
"start-server": "node server/server.js",
|
||||||
"start-server-dev": "cross-env NODE_ENV=development node server/server.js",
|
"start-server-dev": "cross-env NODE_ENV=development node server/server.js",
|
||||||
"start-server-dev:watch": "cross-env NODE_ENV=development node --watch server/server.js",
|
"start-server-dev:watch": "cross-env NODE_ENV=development node --watch server/server.js",
|
||||||
"build": "vite build --config ./config/vite.config.js",
|
"build": "vite build --config ./config/vite.config.js",
|
||||||
"test": "npm run test-backend && npm run test-e2e",
|
"test": "npm run test-backend && npm run test-e2e",
|
||||||
"test-with-build": "npm run build && npm test",
|
"test-with-build": "npm run build && npm test",
|
||||||
"test-backend": "cross-env TEST_BACKEND=1 node --test test/backend-test",
|
"test-backend": "cross-env TEST_BACKEND=1 node --test test/backend-test",
|
||||||
"test-e2e": "playwright test --config ./config/playwright.config.js",
|
"test-e2e": "playwright test --config ./config/playwright.config.js",
|
||||||
"test-e2e-ui": "playwright test --config ./config/playwright.config.js --ui --ui-port=51063",
|
"test-e2e-ui": "playwright test --config ./config/playwright.config.js --ui --ui-port=51063",
|
||||||
"playwright-codegen": "playwright codegen localhost:3000 --save-storage=./private/e2e-auth.json",
|
"playwright-codegen": "playwright codegen localhost:3000 --save-storage=./private/e2e-auth.json",
|
||||||
"playwright-show-report": "playwright show-report ./private/playwright-report",
|
"playwright-show-report": "playwright show-report ./private/playwright-report",
|
||||||
"tsc": "tsc",
|
"tsc": "tsc",
|
||||||
"vite-preview-dist": "vite preview --host --config ./config/vite.config.js",
|
"vite-preview-dist": "vite preview --host --config ./config/vite.config.js",
|
||||||
"build-docker": "npm run build && npm run build-docker-full && npm run build-docker-slim",
|
"build-docker": "npm run build && npm run build-docker-full && npm run build-docker-slim",
|
||||||
"build-docker-base": "docker buildx build -f docker/debian-base.dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:base2 --target base2 . --push",
|
"build-docker-base": "docker buildx build -f docker/debian-base.dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:base2 --target base2 . --push",
|
||||||
"build-docker-base-slim": "docker buildx build -f docker/debian-base.dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:base2-slim --target base2-slim . --push",
|
"build-docker-base-slim": "docker buildx build -f docker/debian-base.dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:base2-slim --target base2-slim . --push",
|
||||||
"build-docker-builder-go": "docker buildx build -f docker/builder-go.dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:builder-go . --push",
|
"build-docker-builder-go": "docker buildx build -f docker/builder-go.dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:builder-go . --push",
|
||||||
"build-docker-slim": "node ./extra/env2arg.js docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:2-slim -t louislam/uptime-kuma:$VERSION-slim --target release --build-arg BASE_IMAGE=louislam/uptime-kuma:base2-slim . --push",
|
"build-docker-slim": "node ./extra/env2arg.js docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:2-slim -t louislam/uptime-kuma:$VERSION-slim --target release --build-arg BASE_IMAGE=louislam/uptime-kuma:base2-slim . --push",
|
||||||
"build-docker-full": "node ./extra/env2arg.js docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:2 -t louislam/uptime-kuma:$VERSION --target release . --push",
|
"build-docker-full": "node ./extra/env2arg.js docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:2 -t louislam/uptime-kuma:$VERSION --target release . --push",
|
||||||
"build-docker-nightly": "node ./extra/test-docker.js && npm run build && docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly2 --target nightly . --push",
|
"build-docker-nightly": "node ./extra/test-docker.js && npm run build && docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly2 --target nightly . --push",
|
||||||
"build-docker-slim-rootless": "node ./extra/env2arg.js docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:2-slim-rootless -t louislam/uptime-kuma:$VERSION-slim-rootless --target rootless --build-arg BASE_IMAGE=louislam/uptime-kuma:base2-slim . --push",
|
"build-docker-slim-rootless": "node ./extra/env2arg.js docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:2-slim-rootless -t louislam/uptime-kuma:$VERSION-slim-rootless --target rootless --build-arg BASE_IMAGE=louislam/uptime-kuma:base2-slim . --push",
|
||||||
"build-docker-full-rootless": "node ./extra/env2arg.js docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:2-rootless -t louislam/uptime-kuma:$VERSION-rootless --target rootless . --push",
|
"build-docker-full-rootless": "node ./extra/env2arg.js docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:2-rootless -t louislam/uptime-kuma:$VERSION-rootless --target rootless . --push",
|
||||||
"build-docker-nightly-rootless": "node ./extra/test-docker.js && npm run build && docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly2-rootless --target nightly-rootless . --push",
|
"build-docker-nightly-rootless": "node ./extra/test-docker.js && npm run build && docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly2-rootless --target nightly-rootless . --push",
|
||||||
"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-test2 --target pr-test2 . --push",
|
"build-docker-pr-test": "docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64 -t louislam/uptime-kuma:pr-test2 --target pr-test2 . --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.14 && npm ci --production && npm run download-dist",
|
"setup": "git checkout 1.23.14 && 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",
|
||||||
"remove-2fa": "node extra/remove-2fa.js",
|
"remove-2fa": "node extra/remove-2fa.js",
|
||||||
"simple-dns-server": "node extra/simple-dns-server.js",
|
"simple-dns-server": "node extra/simple-dns-server.js",
|
||||||
"simple-mqtt-server": "node extra/simple-mqtt-server.js",
|
"simple-mqtt-server": "node extra/simple-mqtt-server.js",
|
||||||
"simple-mongo": "docker run --rm -p 27017:27017 mongo",
|
"simple-mongo": "docker run --rm -p 27017:27017 mongo",
|
||||||
"simple-postgres": "docker run --rm -p 5432:5432 -e POSTGRES_PASSWORD=postgres postgres",
|
"simple-postgres": "docker run --rm -p 5432:5432 -e POSTGRES_PASSWORD=postgres postgres",
|
||||||
"simple-mariadb": "docker run --rm -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mariadb# mariadb",
|
"simple-mariadb": "docker run --rm -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mariadb# mariadb",
|
||||||
"update-language-files": "cd extra/update-language-files && node index.js && cross-env-shell eslint ../../src/languages/$npm_config_language.js --fix",
|
"update-language-files": "cd extra/update-language-files && node index.js && cross-env-shell eslint ../../src/languages/$npm_config_language.js --fix",
|
||||||
"release-final": "node ./extra/test-docker.js && node extra/update-version.js && npm run build-docker && node ./extra/press-any-key.js && npm run upload-artifacts && node ./extra/update-wiki-version.js",
|
"release-final": "node ./extra/test-docker.js && node extra/update-version.js && npm run build-docker && node ./extra/press-any-key.js && npm run upload-artifacts && node ./extra/update-wiki-version.js",
|
||||||
"release-beta": "node ./extra/test-docker.js && node extra/beta/update-version.js && npm run build && node ./extra/env2arg.js docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:$VERSION -t louislam/uptime-kuma:beta . --target release --push && node ./extra/press-any-key.js && npm run upload-artifacts",
|
"release-beta": "node ./extra/test-docker.js && node extra/beta/update-version.js && npm run build && node ./extra/env2arg.js docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:$VERSION -t louislam/uptime-kuma:beta . --target release --push && node ./extra/press-any-key.js && npm run upload-artifacts",
|
||||||
"git-remove-tag": "git tag -d",
|
"git-remove-tag": "git tag -d",
|
||||||
"build-dist-and-restart": "npm run build && npm run start-server-dev",
|
"build-dist-and-restart": "npm run build && npm run start-server-dev",
|
||||||
"start-pr-test": "node extra/checkout-pr.js && npm install && npm run dev",
|
"start-pr-test": "node extra/checkout-pr.js && npm install && npm run dev",
|
||||||
"build-healthcheck-armv7": "cross-env GOOS=linux GOARCH=arm GOARM=7 go build -x -o ./extra/healthcheck-armv7 ./extra/healthcheck.go",
|
"build-healthcheck-armv7": "cross-env GOOS=linux GOARCH=arm GOARM=7 go build -x -o ./extra/healthcheck-armv7 ./extra/healthcheck.go",
|
||||||
"deploy-demo-server": "node extra/deploy-demo-server.js",
|
"deploy-demo-server": "node extra/deploy-demo-server.js",
|
||||||
"sort-contributors": "node extra/sort-contributors.js",
|
"sort-contributors": "node extra/sort-contributors.js",
|
||||||
"quick-run-nightly": "docker run --rm --env NODE_ENV=development -p 3001:3001 louislam/uptime-kuma:nightly2",
|
"quick-run-nightly": "docker run --rm --env NODE_ENV=development -p 3001:3001 louislam/uptime-kuma:nightly2",
|
||||||
"start-dev-container": "cd docker && docker-compose -f docker-compose-dev.yml up --force-recreate",
|
"start-dev-container": "cd docker && docker-compose -f docker-compose-dev.yml up --force-recreate",
|
||||||
"rebase-pr-to-1.23.X": "node extra/rebase-pr.js 1.23.X"
|
"rebase-pr-to-1.23.X": "node extra/rebase-pr.js 1.23.X"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@grpc/grpc-js": "~1.8.22",
|
"@grpc/grpc-js": "~1.8.22",
|
||||||
"@louislam/ping": "~0.4.4-mod.1",
|
"@louislam/ping": "~0.4.4-mod.1",
|
||||||
"@louislam/sqlite3": "15.1.6",
|
"@louislam/sqlite3": "15.1.6",
|
||||||
"@vvo/tzdb": "^6.125.0",
|
"@vvo/tzdb": "^6.125.0",
|
||||||
"args-parser": "~1.3.0",
|
"args-parser": "~1.3.0",
|
||||||
"axios": "~0.28.1",
|
"axios": "~0.28.1",
|
||||||
"badge-maker": "~3.3.1",
|
"badge-maker": "~3.3.1",
|
||||||
"bcryptjs": "~2.4.3",
|
"bcryptjs": "~2.4.3",
|
||||||
"chardet": "~1.4.0",
|
"chardet": "~1.4.0",
|
||||||
"check-password-strength": "^2.0.5",
|
"check-password-strength": "^2.0.5",
|
||||||
"cheerio": "~1.0.0-rc.12",
|
"cheerio": "~1.0.0-rc.12",
|
||||||
"chroma-js": "~2.4.2",
|
"chroma-js": "~2.4.2",
|
||||||
"command-exists": "~1.2.9",
|
"command-exists": "~1.2.9",
|
||||||
"compare-versions": "~3.6.0",
|
"compare-versions": "~3.6.0",
|
||||||
"compression": "~1.7.4",
|
"compression": "~1.7.4",
|
||||||
"croner": "~8.1.0",
|
"croner": "~8.1.0",
|
||||||
"dayjs": "~1.11.5",
|
"dayjs": "~1.11.5",
|
||||||
"dev-null": "^0.1.1",
|
"dev-null": "^0.1.1",
|
||||||
"dotenv": "~16.0.3",
|
"dotenv": "~16.0.3",
|
||||||
"express": "~4.21.0",
|
"express": "~4.21.0",
|
||||||
"express-basic-auth": "~1.2.1",
|
"express-basic-auth": "~1.2.1",
|
||||||
"express-static-gzip": "~2.1.7",
|
"express-static-gzip": "~2.1.7",
|
||||||
"feed": "^4.2.2",
|
"feed": "^4.2.2",
|
||||||
"form-data": "~4.0.0",
|
"form-data": "~4.0.0",
|
||||||
"gamedig": "^4.2.0",
|
"gamedig": "^4.2.0",
|
||||||
"html-escaper": "^3.0.3",
|
"html-escaper": "^3.0.3",
|
||||||
"http-cookie-agent": "~5.0.4",
|
"http-cookie-agent": "~5.0.4",
|
||||||
"http-graceful-shutdown": "~3.1.7",
|
"http-graceful-shutdown": "~3.1.7",
|
||||||
"http-proxy-agent": "~5.0.0",
|
"http-proxy-agent": "~5.0.0",
|
||||||
"https-proxy-agent": "~5.0.1",
|
"https-proxy-agent": "~5.0.1",
|
||||||
"iconv-lite": "~0.6.3",
|
"iconv-lite": "~0.6.3",
|
||||||
"isomorphic-ws": "^5.0.0",
|
"isomorphic-ws": "^5.0.0",
|
||||||
"jsesc": "~3.0.2",
|
"jsesc": "~3.0.2",
|
||||||
"jsonata": "^2.0.3",
|
"jsonata": "^2.0.3",
|
||||||
"jsonwebtoken": "~9.0.0",
|
"jsonwebtoken": "~9.0.0",
|
||||||
"jwt-decode": "~3.1.2",
|
"jwt-decode": "~3.1.2",
|
||||||
"kafkajs": "^2.2.4",
|
"kafkajs": "^2.2.4",
|
||||||
"knex": "^2.4.2",
|
"knex": "^2.4.2",
|
||||||
"limiter": "~2.1.0",
|
"limiter": "~2.1.0",
|
||||||
"liquidjs": "^10.7.0",
|
"liquidjs": "^10.7.0",
|
||||||
"marked": "^14.0.0",
|
"marked": "^14.0.0",
|
||||||
"mitt": "~3.0.1",
|
"mitt": "~3.0.1",
|
||||||
"mongodb": "~4.17.1",
|
"mongodb": "~4.17.1",
|
||||||
"mqtt": "~4.3.7",
|
"mqtt": "~4.3.7",
|
||||||
"mssql": "~11.0.0",
|
"mssql": "~11.0.0",
|
||||||
"mysql2": "~3.9.6",
|
"mysql2": "~3.9.6",
|
||||||
"nanoid": "~3.3.4",
|
"nanoid": "~3.3.4",
|
||||||
"net-snmp": "^3.11.2",
|
"net-snmp": "^3.11.2",
|
||||||
"node-cloudflared-tunnel": "~1.0.9",
|
"node-cloudflared-tunnel": "~1.0.9",
|
||||||
"node-radius-client": "~1.0.0",
|
"node-radius-client": "~1.0.0",
|
||||||
"nodemailer": "~6.9.13",
|
"nodemailer": "~6.9.13",
|
||||||
"nostr-tools": "^1.13.1",
|
"nostr-tools": "^1.13.1",
|
||||||
"notp": "~2.0.3",
|
"notp": "~2.0.3",
|
||||||
"openid-client": "^5.4.2",
|
"openid-client": "^5.4.2",
|
||||||
"password-hash": "~1.2.2",
|
"password-hash": "~1.2.2",
|
||||||
"pg": "~8.11.3",
|
"pg": "~8.11.3",
|
||||||
"pg-connection-string": "~2.6.2",
|
"pg-connection-string": "~2.6.2",
|
||||||
"playwright-core": "~1.39.0",
|
"playwright-core": "~1.39.0",
|
||||||
"prom-client": "~13.2.0",
|
"prom-client": "~13.2.0",
|
||||||
"prometheus-api-metrics": "~3.2.1",
|
"prometheus-api-metrics": "~3.2.1",
|
||||||
"promisify-child-process": "~4.1.2",
|
"promisify-child-process": "~4.1.2",
|
||||||
"protobufjs": "~7.2.4",
|
"protobufjs": "~7.2.4",
|
||||||
"qs": "~6.10.4",
|
"qs": "~6.10.4",
|
||||||
"redbean-node": "~0.3.0",
|
"redbean-node": "~0.3.0",
|
||||||
"redis": "~4.5.1",
|
"redis": "~4.5.1",
|
||||||
"semver": "~7.5.4",
|
"semver": "~7.5.4",
|
||||||
"socket.io": "~4.8.0",
|
"socket.io": "~4.8.0",
|
||||||
"socket.io-client": "~4.8.0",
|
"socket.io-client": "~4.8.0",
|
||||||
"socks-proxy-agent": "6.1.1",
|
"socks-proxy-agent": "6.1.1",
|
||||||
"tar": "~6.2.1",
|
"tar": "~6.2.1",
|
||||||
"tcp-ping": "~0.1.1",
|
"tcp-ping": "~0.1.1",
|
||||||
"thirty-two": "~1.0.2",
|
"thirty-two": "~1.0.2",
|
||||||
"tough-cookie": "~4.1.3",
|
"tough-cookie": "~4.1.3",
|
||||||
"ws": "^8.13.0"
|
"ws": "^8.13.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@actions/github": "~5.1.1",
|
"@actions/github": "~5.1.1",
|
||||||
"@fortawesome/fontawesome-svg-core": "~1.2.36",
|
"@fortawesome/fontawesome-svg-core": "~1.2.36",
|
||||||
"@fortawesome/free-regular-svg-icons": "~5.15.4",
|
"@fortawesome/free-regular-svg-icons": "~5.15.4",
|
||||||
"@fortawesome/free-solid-svg-icons": "~5.15.4",
|
"@fortawesome/free-solid-svg-icons": "~5.15.4",
|
||||||
"@fortawesome/vue-fontawesome": "~3.0.0-5",
|
"@fortawesome/vue-fontawesome": "~3.0.0-5",
|
||||||
"@playwright/test": "~1.39.0",
|
"@playwright/test": "~1.39.0",
|
||||||
"@popperjs/core": "~2.10.2",
|
"@popperjs/core": "~2.10.2",
|
||||||
"@testcontainers/hivemq": "^10.13.1",
|
"@testcontainers/hivemq": "^10.13.1",
|
||||||
"@types/bootstrap": "~5.1.9",
|
"@types/bootstrap": "~5.1.9",
|
||||||
"@types/node": "^20.8.6",
|
"@types/node": "^20.8.6",
|
||||||
"@typescript-eslint/eslint-plugin": "^6.7.5",
|
"@typescript-eslint/eslint-plugin": "^6.7.5",
|
||||||
"@typescript-eslint/parser": "^6.7.5",
|
"@typescript-eslint/parser": "^6.7.5",
|
||||||
"@vitejs/plugin-vue": "~5.0.1",
|
"@vitejs/plugin-vue": "~5.0.1",
|
||||||
"@vue/compiler-sfc": "~3.4.2",
|
"@vue/compiler-sfc": "~3.4.2",
|
||||||
"@vuepic/vue-datepicker": "~3.4.8",
|
"@vuepic/vue-datepicker": "~3.4.8",
|
||||||
"aedes": "^0.46.3",
|
"aedes": "^0.46.3",
|
||||||
"bootstrap": "5.1.3",
|
"bootstrap": "5.1.3",
|
||||||
"chart.js": "~4.2.1",
|
"chart.js": "~4.2.1",
|
||||||
"chartjs-adapter-dayjs-4": "~1.0.4",
|
"chartjs-adapter-dayjs-4": "~1.0.4",
|
||||||
"concurrently": "^7.1.0",
|
"concurrently": "^7.1.0",
|
||||||
"core-js": "~3.26.1",
|
"core-js": "~3.26.1",
|
||||||
"cronstrue": "~2.24.0",
|
"cronstrue": "~2.24.0",
|
||||||
"cross-env": "~7.0.3",
|
"cross-env": "~7.0.3",
|
||||||
"delay": "^5.0.0",
|
"delay": "^5.0.0",
|
||||||
"dns2": "~2.0.1",
|
"dns2": "~2.0.1",
|
||||||
"dompurify": "~3.1.7",
|
"dompurify": "~3.1.7",
|
||||||
"eslint": "~8.14.0",
|
"eslint": "~8.14.0",
|
||||||
"eslint-plugin-jsdoc": "~46.4.6",
|
"eslint-plugin-jsdoc": "~46.4.6",
|
||||||
"eslint-plugin-vue": "~8.7.1",
|
"eslint-plugin-vue": "~8.7.1",
|
||||||
"favico.js": "~0.3.10",
|
"favico.js": "~0.3.10",
|
||||||
"get-port-please": "^3.1.1",
|
"get-port-please": "^3.1.1",
|
||||||
"node-ssh": "~13.1.0",
|
"node-ssh": "~13.1.0",
|
||||||
"postcss-html": "~1.5.0",
|
"postcss-html": "~1.5.0",
|
||||||
"postcss-rtlcss": "~3.7.2",
|
"postcss-rtlcss": "~3.7.2",
|
||||||
"postcss-scss": "~4.0.4",
|
"postcss-scss": "~4.0.4",
|
||||||
"prismjs": "~1.29.0",
|
"prismjs": "~1.29.0",
|
||||||
"qrcode": "~1.5.0",
|
"qrcode": "~1.5.0",
|
||||||
"rollup-plugin-visualizer": "^5.6.0",
|
"rollup-plugin-visualizer": "^5.6.0",
|
||||||
"sass": "~1.42.1",
|
"sass": "~1.42.1",
|
||||||
"stylelint": "^15.10.1",
|
"stylelint": "^15.10.1",
|
||||||
"stylelint-config-standard": "~25.0.0",
|
"stylelint-config-standard": "~25.0.0",
|
||||||
"terser": "~5.15.0",
|
"terser": "~5.15.0",
|
||||||
"test": "~3.3.0",
|
"test": "~3.3.0",
|
||||||
"testcontainers": "^10.13.1",
|
"testcontainers": "^10.13.1",
|
||||||
"typescript": "~4.4.4",
|
"typescript": "~4.4.4",
|
||||||
"v-pagination-3": "~0.1.7",
|
"v-pagination-3": "~0.1.7",
|
||||||
"vite": "~5.2.8",
|
"vite": "~5.2.8",
|
||||||
"vite-plugin-compression": "^0.5.1",
|
"vite-plugin-compression": "^0.5.1",
|
||||||
"vite-plugin-vue-devtools": "^7.0.15",
|
"vite-plugin-vue-devtools": "^7.0.15",
|
||||||
"vue": "~3.4.2",
|
"vue": "~3.4.2",
|
||||||
"vue-chartjs": "~5.2.0",
|
"vue-chartjs": "~5.2.0",
|
||||||
"vue-confirm-dialog": "~1.0.2",
|
"vue-confirm-dialog": "~1.0.2",
|
||||||
"vue-contenteditable": "~3.0.4",
|
"vue-contenteditable": "~3.0.4",
|
||||||
"vue-i18n": "~9.2.2",
|
"vue-i18n": "~9.2.2",
|
||||||
"vue-image-crop-upload": "~3.0.3",
|
"vue-image-crop-upload": "~3.0.3",
|
||||||
"vue-multiselect": "~3.0.0-alpha.2",
|
"vue-multiselect": "~3.0.0-alpha.2",
|
||||||
"vue-prism-editor": "~2.0.0-alpha.2",
|
"vue-prism-editor": "~2.0.0-alpha.2",
|
||||||
"vue-qrcode": "~1.0.0",
|
"vue-qrcode": "~1.0.0",
|
||||||
"vue-router": "~4.2.5",
|
"vue-router": "~4.2.5",
|
||||||
"vue-toastification": "~2.0.0-rc.5",
|
"vue-toastification": "~2.0.0-rc.5",
|
||||||
"vuedraggable": "~4.1.0",
|
"vuedraggable": "~4.1.0",
|
||||||
"wait-on": "^7.2.0",
|
"wait-on": "^7.2.0",
|
||||||
"whatwg-url": "~12.0.1"
|
"whatwg-url": "~12.0.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
1432
server/database.js
1432
server/database.js
File diff suppressed because it is too large
Load diff
|
@ -1,57 +1,57 @@
|
||||||
const { R } = require("redbean-node");
|
const { R } = require("redbean-node");
|
||||||
const { log } = require("../../src/util");
|
const { log } = require("../../src/util");
|
||||||
const { setSetting, setting } = require("../util-server");
|
const { setSetting, setting } = require("../util-server");
|
||||||
const Database = require("../database");
|
const Database = require("../database");
|
||||||
|
|
||||||
const DEFAULT_KEEP_PERIOD = 180;
|
const DEFAULT_KEEP_PERIOD = 180;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clears old data from the heartbeat table of the database.
|
* Clears old data from the heartbeat table of the database.
|
||||||
* @returns {Promise<void>} A promise that resolves when the data has been cleared.
|
* @returns {Promise<void>} A promise that resolves when the data has been cleared.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const clearOldData = async () => {
|
const clearOldData = async () => {
|
||||||
let period = await setting("keepDataPeriodDays");
|
let period = await setting("keepDataPeriodDays");
|
||||||
|
|
||||||
// Set Default Period
|
// Set Default Period
|
||||||
if (period == null) {
|
if (period == null) {
|
||||||
await setSetting("keepDataPeriodDays", DEFAULT_KEEP_PERIOD, "general");
|
await setSetting("keepDataPeriodDays", DEFAULT_KEEP_PERIOD, "general");
|
||||||
period = DEFAULT_KEEP_PERIOD;
|
period = DEFAULT_KEEP_PERIOD;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try parse setting
|
// Try parse setting
|
||||||
let parsedPeriod;
|
let parsedPeriod;
|
||||||
try {
|
try {
|
||||||
parsedPeriod = parseInt(period);
|
parsedPeriod = parseInt(period);
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
log.warn("clearOldData", "Failed to parse setting, resetting to default..");
|
log.warn("clearOldData", "Failed to parse setting, resetting to default..");
|
||||||
await setSetting("keepDataPeriodDays", DEFAULT_KEEP_PERIOD, "general");
|
await setSetting("keepDataPeriodDays", DEFAULT_KEEP_PERIOD, "general");
|
||||||
parsedPeriod = DEFAULT_KEEP_PERIOD;
|
parsedPeriod = DEFAULT_KEEP_PERIOD;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parsedPeriod < 1) {
|
if (parsedPeriod < 1) {
|
||||||
log.info("clearOldData", `Data deletion has been disabled as period is less than 1. Period is ${parsedPeriod} days.`);
|
log.info("clearOldData", `Data deletion has been disabled as period is less than 1. Period is ${parsedPeriod} days.`);
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
log.debug("clearOldData", `Clearing Data older than ${parsedPeriod} days...`);
|
log.debug("clearOldData", `Clearing Data older than ${parsedPeriod} days...`);
|
||||||
|
|
||||||
const sqlHourOffset = Database.sqlHourOffset();
|
const sqlHourOffset = Database.sqlHourOffset();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await R.exec(
|
await R.exec(
|
||||||
"DELETE FROM heartbeat WHERE time < " + sqlHourOffset,
|
"DELETE FROM heartbeat WHERE time < " + sqlHourOffset,
|
||||||
[ parsedPeriod * -24 ]
|
[ parsedPeriod * -24 ]
|
||||||
);
|
);
|
||||||
|
|
||||||
if (Database.dbConfig.type === "sqlite") {
|
if (Database.dbConfig.type === "sqlite") {
|
||||||
await R.exec("PRAGMA optimize;");
|
await R.exec("PRAGMA optimize;");
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
log.error("clearOldData", `Failed to clear old data: ${e.message}`);
|
log.error("clearOldData", `Failed to clear old data: ${e.message}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
clearOldData,
|
clearOldData,
|
||||||
};
|
};
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,50 +1,50 @@
|
||||||
const NotificationProvider = require("./notification-provider");
|
const NotificationProvider = require("./notification-provider");
|
||||||
const axios = require("axios");
|
const axios = require("axios");
|
||||||
const { DOWN, UP } = require("../../src/util");
|
const { DOWN, UP } = require("../../src/util");
|
||||||
|
|
||||||
class ServerChan extends NotificationProvider {
|
class ServerChan extends NotificationProvider {
|
||||||
name = "ServerChan";
|
name = "ServerChan";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @inheritdoc
|
* @inheritdoc
|
||||||
*/
|
*/
|
||||||
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
|
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
|
||||||
const okMsg = "Sent Successfully.";
|
const okMsg = "Sent Successfully.";
|
||||||
|
|
||||||
// serverchan3 requires sending via ft07.com
|
// serverchan3 requires sending via ft07.com
|
||||||
const url = String(notification.serverChanSendKey).startsWith("sctp")
|
const url = String(notification.serverChanSendKey).startsWith("sctp")
|
||||||
? `https://${notification.serverChanSendKey}.push.ft07.com/send`
|
? `https://${notification.serverChanSendKey}.push.ft07.com/send`
|
||||||
: `https://sctapi.ftqq.com/${notification.serverChanSendKey}.send`;
|
: `https://sctapi.ftqq.com/${notification.serverChanSendKey}.send`;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await axios.post(url, {
|
await axios.post(url, {
|
||||||
"title": this.checkStatus(heartbeatJSON, monitorJSON),
|
"title": this.checkStatus(heartbeatJSON, monitorJSON),
|
||||||
"desp": msg,
|
"desp": msg,
|
||||||
});
|
});
|
||||||
|
|
||||||
return okMsg;
|
return okMsg;
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
this.throwGeneralAxiosError(error);
|
this.throwGeneralAxiosError(error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the formatted title for message
|
* Get the formatted title for message
|
||||||
* @param {?object} heartbeatJSON Heartbeat details (For Up/Down only)
|
* @param {?object} heartbeatJSON Heartbeat details (For Up/Down only)
|
||||||
* @param {?object} monitorJSON Monitor details (For Up/Down only)
|
* @param {?object} monitorJSON Monitor details (For Up/Down only)
|
||||||
* @returns {string} Formatted title
|
* @returns {string} Formatted title
|
||||||
*/
|
*/
|
||||||
checkStatus(heartbeatJSON, monitorJSON) {
|
checkStatus(heartbeatJSON, monitorJSON) {
|
||||||
let title = "UptimeKuma Message";
|
let title = "UptimeKuma Message";
|
||||||
if (heartbeatJSON != null && heartbeatJSON["status"] === UP) {
|
if (heartbeatJSON != null && heartbeatJSON["status"] === UP) {
|
||||||
title = "UptimeKuma Monitor Up " + monitorJSON["name"];
|
title = "UptimeKuma Monitor Up " + monitorJSON["name"];
|
||||||
}
|
}
|
||||||
if (heartbeatJSON != null && heartbeatJSON["status"] === DOWN) {
|
if (heartbeatJSON != null && heartbeatJSON["status"] === DOWN) {
|
||||||
title = "UptimeKuma Monitor Down " + monitorJSON["name"];
|
title = "UptimeKuma Monitor Down " + monitorJSON["name"];
|
||||||
}
|
}
|
||||||
return title;
|
return title;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = ServerChan;
|
module.exports = ServerChan;
|
||||||
|
|
3732
server/server.js
3732
server/server.js
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,328 +1,328 @@
|
||||||
<template>
|
<template>
|
||||||
<div ref="wrap" class="wrap" :style="wrapStyle">
|
<div ref="wrap" class="wrap" :style="wrapStyle">
|
||||||
<div class="hp-bar-big" :style="barStyle">
|
<div class="hp-bar-big" :style="barStyle">
|
||||||
<div
|
<div
|
||||||
v-for="(beat, index) in shortBeatList"
|
v-for="(beat, index) in shortBeatList"
|
||||||
:key="index"
|
:key="index"
|
||||||
class="beat"
|
class="beat"
|
||||||
:class="{ 'empty': (beat === 0), 'down': (beat.status === 0), 'pending': (beat.status === 2), 'maintenance': (beat.status === 3) }"
|
:class="{ 'empty': (beat === 0), 'down': (beat.status === 0), 'pending': (beat.status === 2), 'maintenance': (beat.status === 3) }"
|
||||||
:style="beatStyle"
|
:style="beatStyle"
|
||||||
:title="getBeatTitle(beat)"
|
:title="getBeatTitle(beat)"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-if="!$root.isMobile && size !== 'small' && beatList.length > 4 && $root.styleElapsedTime !== 'none'"
|
v-if="!$root.isMobile && size !== 'small' && beatList.length > 4 && $root.styleElapsedTime !== 'none'"
|
||||||
class="d-flex justify-content-between align-items-center word" :style="timeStyle"
|
class="d-flex justify-content-between align-items-center word" :style="timeStyle"
|
||||||
>
|
>
|
||||||
<div>{{ timeSinceFirstBeat }}</div>
|
<div>{{ timeSinceFirstBeat }}</div>
|
||||||
<div v-if="$root.styleElapsedTime === 'with-line'" class="connecting-line"></div>
|
<div v-if="$root.styleElapsedTime === 'with-line'" class="connecting-line"></div>
|
||||||
<div>{{ timeSinceLastBeat }}</div>
|
<div>{{ timeSinceLastBeat }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
props: {
|
props: {
|
||||||
/** Size of the heartbeat bar */
|
/** Size of the heartbeat bar */
|
||||||
size: {
|
size: {
|
||||||
type: String,
|
type: String,
|
||||||
default: "big",
|
default: "big",
|
||||||
},
|
},
|
||||||
/** ID of the monitor */
|
/** ID of the monitor */
|
||||||
monitorId: {
|
monitorId: {
|
||||||
type: Number,
|
type: Number,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
/** Array of the monitors heartbeats */
|
/** Array of the monitors heartbeats */
|
||||||
heartbeatList: {
|
heartbeatList: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default: null,
|
default: null,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
beatWidth: 10,
|
beatWidth: 10,
|
||||||
beatHeight: 30,
|
beatHeight: 30,
|
||||||
hoverScale: 1.5,
|
hoverScale: 1.5,
|
||||||
beatMargin: 4,
|
beatMargin: 4,
|
||||||
move: false,
|
move: false,
|
||||||
maxBeat: -1,
|
maxBeat: -1,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If heartbeatList is null, get it from $root.heartbeatList
|
* If heartbeatList is null, get it from $root.heartbeatList
|
||||||
* @returns {object} Heartbeat list
|
* @returns {object} Heartbeat list
|
||||||
*/
|
*/
|
||||||
beatList() {
|
beatList() {
|
||||||
if (this.heartbeatList === null) {
|
if (this.heartbeatList === null) {
|
||||||
return this.$root.heartbeatList[this.monitorId];
|
return this.$root.heartbeatList[this.monitorId];
|
||||||
} else {
|
} else {
|
||||||
return this.heartbeatList;
|
return this.heartbeatList;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculates the amount of beats of padding needed to fill the length of shortBeatList.
|
* Calculates the amount of beats of padding needed to fill the length of shortBeatList.
|
||||||
* @returns {number} The amount of beats of padding needed to fill the length of shortBeatList.
|
* @returns {number} The amount of beats of padding needed to fill the length of shortBeatList.
|
||||||
*/
|
*/
|
||||||
numPadding() {
|
numPadding() {
|
||||||
if (!this.beatList) {
|
if (!this.beatList) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
let num = this.beatList.length - this.maxBeat;
|
let num = this.beatList.length - this.maxBeat;
|
||||||
|
|
||||||
if (this.move) {
|
if (this.move) {
|
||||||
num = num - 1;
|
num = num - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (num > 0) {
|
if (num > 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1 * num;
|
return -1 * num;
|
||||||
},
|
},
|
||||||
|
|
||||||
shortBeatList() {
|
shortBeatList() {
|
||||||
if (!this.beatList) {
|
if (!this.beatList) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
let placeholders = [];
|
let placeholders = [];
|
||||||
|
|
||||||
let start = this.beatList.length - this.maxBeat;
|
let start = this.beatList.length - this.maxBeat;
|
||||||
|
|
||||||
if (this.move) {
|
if (this.move) {
|
||||||
start = start - 1;
|
start = start - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (start < 0) {
|
if (start < 0) {
|
||||||
// Add empty placeholder
|
// Add empty placeholder
|
||||||
for (let i = start; i < 0; i++) {
|
for (let i = start; i < 0; i++) {
|
||||||
placeholders.push(0);
|
placeholders.push(0);
|
||||||
}
|
}
|
||||||
start = 0;
|
start = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return placeholders.concat(this.beatList.slice(start));
|
return placeholders.concat(this.beatList.slice(start));
|
||||||
},
|
},
|
||||||
|
|
||||||
wrapStyle() {
|
wrapStyle() {
|
||||||
let topBottom = (((this.beatHeight * this.hoverScale) - this.beatHeight) / 2);
|
let topBottom = (((this.beatHeight * this.hoverScale) - this.beatHeight) / 2);
|
||||||
let leftRight = (((this.beatWidth * this.hoverScale) - this.beatWidth) / 2);
|
let leftRight = (((this.beatWidth * this.hoverScale) - this.beatWidth) / 2);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
padding: `${topBottom}px ${leftRight}px`,
|
padding: `${topBottom}px ${leftRight}px`,
|
||||||
width: "100%",
|
width: "100%",
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
barStyle() {
|
barStyle() {
|
||||||
if (this.move && this.shortBeatList.length > this.maxBeat) {
|
if (this.move && this.shortBeatList.length > this.maxBeat) {
|
||||||
let width = -(this.beatWidth + this.beatMargin * 2);
|
let width = -(this.beatWidth + this.beatMargin * 2);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
transition: "all ease-in-out 0.25s",
|
transition: "all ease-in-out 0.25s",
|
||||||
transform: `translateX(${width}px)`,
|
transform: `translateX(${width}px)`,
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
transform: "translateX(0)",
|
transform: "translateX(0)",
|
||||||
};
|
};
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
beatStyle() {
|
beatStyle() {
|
||||||
return {
|
return {
|
||||||
width: this.beatWidth + "px",
|
width: this.beatWidth + "px",
|
||||||
height: this.beatHeight + "px",
|
height: this.beatHeight + "px",
|
||||||
margin: this.beatMargin + "px",
|
margin: this.beatMargin + "px",
|
||||||
"--hover-scale": this.hoverScale,
|
"--hover-scale": this.hoverScale,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the style object for positioning the time element.
|
* Returns the style object for positioning the time element.
|
||||||
* @returns {object} The style object containing the CSS properties for positioning the time element.
|
* @returns {object} The style object containing the CSS properties for positioning the time element.
|
||||||
*/
|
*/
|
||||||
timeStyle() {
|
timeStyle() {
|
||||||
return {
|
return {
|
||||||
"margin-left": this.numPadding * (this.beatWidth + this.beatMargin * 2) + "px",
|
"margin-left": this.numPadding * (this.beatWidth + this.beatMargin * 2) + "px",
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculates the time elapsed since the first valid beat.
|
* Calculates the time elapsed since the first valid beat.
|
||||||
* @returns {string} The time elapsed in minutes or hours.
|
* @returns {string} The time elapsed in minutes or hours.
|
||||||
*/
|
*/
|
||||||
timeSinceFirstBeat() {
|
timeSinceFirstBeat() {
|
||||||
const firstValidBeat = this.shortBeatList.at(this.numPadding);
|
const firstValidBeat = this.shortBeatList.at(this.numPadding);
|
||||||
const minutes = dayjs().diff(dayjs.utc(firstValidBeat?.time), "minutes");
|
const minutes = dayjs().diff(dayjs.utc(firstValidBeat?.time), "minutes");
|
||||||
if (minutes > 60) {
|
if (minutes > 60) {
|
||||||
return (minutes / 60).toFixed(0) + "h";
|
return (minutes / 60).toFixed(0) + "h";
|
||||||
} else {
|
} else {
|
||||||
return minutes + "m";
|
return minutes + "m";
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculates the elapsed time since the last valid beat was registered.
|
* Calculates the elapsed time since the last valid beat was registered.
|
||||||
* @returns {string} The elapsed time in a minutes, hours or "now".
|
* @returns {string} The elapsed time in a minutes, hours or "now".
|
||||||
*/
|
*/
|
||||||
timeSinceLastBeat() {
|
timeSinceLastBeat() {
|
||||||
const lastValidBeat = this.shortBeatList.at(-1);
|
const lastValidBeat = this.shortBeatList.at(-1);
|
||||||
const seconds = dayjs().diff(dayjs.utc(lastValidBeat?.time), "seconds");
|
const seconds = dayjs().diff(dayjs.utc(lastValidBeat?.time), "seconds");
|
||||||
|
|
||||||
let tolerance = 60 * 2; // default for when monitorList not available
|
let tolerance = 60 * 2; // default for when monitorList not available
|
||||||
if (this.$root.monitorList[this.monitorId] != null) {
|
if (this.$root.monitorList[this.monitorId] != null) {
|
||||||
tolerance = this.$root.monitorList[this.monitorId].interval * 2;
|
tolerance = this.$root.monitorList[this.monitorId].interval * 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (seconds < tolerance) {
|
if (seconds < tolerance) {
|
||||||
return this.$t("now");
|
return this.$t("now");
|
||||||
} else if (seconds < 60 * 60) {
|
} else if (seconds < 60 * 60) {
|
||||||
return this.$t("time ago", [ (seconds / 60).toFixed(0) + "m" ]);
|
return this.$t("time ago", [ (seconds / 60).toFixed(0) + "m" ]);
|
||||||
} else {
|
} else {
|
||||||
return this.$t("time ago", [ (seconds / 60 / 60).toFixed(0) + "h" ]);
|
return this.$t("time ago", [ (seconds / 60 / 60).toFixed(0) + "h" ]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
beatList: {
|
beatList: {
|
||||||
handler(val, oldVal) {
|
handler(val, oldVal) {
|
||||||
this.move = true;
|
this.move = true;
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.move = false;
|
this.move = false;
|
||||||
}, 300);
|
}, 300);
|
||||||
},
|
},
|
||||||
deep: true,
|
deep: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
unmounted() {
|
unmounted() {
|
||||||
window.removeEventListener("resize", this.resize);
|
window.removeEventListener("resize", this.resize);
|
||||||
},
|
},
|
||||||
beforeMount() {
|
beforeMount() {
|
||||||
if (this.heartbeatList === null) {
|
if (this.heartbeatList === null) {
|
||||||
if (!(this.monitorId in this.$root.heartbeatList)) {
|
if (!(this.monitorId in this.$root.heartbeatList)) {
|
||||||
this.$root.heartbeatList[this.monitorId] = [];
|
this.$root.heartbeatList[this.monitorId] = [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
mounted() {
|
mounted() {
|
||||||
if (this.size !== "big") {
|
if (this.size !== "big") {
|
||||||
this.beatWidth = 5;
|
this.beatWidth = 5;
|
||||||
this.beatHeight = 16;
|
this.beatHeight = 16;
|
||||||
this.beatMargin = 2;
|
this.beatMargin = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Suddenly, have an idea how to handle it universally.
|
// Suddenly, have an idea how to handle it universally.
|
||||||
// If the pixel * ratio != Integer, then it causes render issue, round it to solve it!!
|
// If the pixel * ratio != Integer, then it causes render issue, round it to solve it!!
|
||||||
const actualWidth = this.beatWidth * window.devicePixelRatio;
|
const actualWidth = this.beatWidth * window.devicePixelRatio;
|
||||||
const actualMargin = this.beatMargin * window.devicePixelRatio;
|
const actualMargin = this.beatMargin * window.devicePixelRatio;
|
||||||
|
|
||||||
if (!Number.isInteger(actualWidth)) {
|
if (!Number.isInteger(actualWidth)) {
|
||||||
this.beatWidth = Math.round(actualWidth) / window.devicePixelRatio;
|
this.beatWidth = Math.round(actualWidth) / window.devicePixelRatio;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Number.isInteger(actualMargin)) {
|
if (!Number.isInteger(actualMargin)) {
|
||||||
this.beatMargin = Math.round(actualMargin) / window.devicePixelRatio;
|
this.beatMargin = Math.round(actualMargin) / window.devicePixelRatio;
|
||||||
}
|
}
|
||||||
|
|
||||||
window.addEventListener("resize", this.resize);
|
window.addEventListener("resize", this.resize);
|
||||||
this.resize();
|
this.resize();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
/**
|
/**
|
||||||
* Resize the heartbeat bar
|
* Resize the heartbeat bar
|
||||||
* @returns {void}
|
* @returns {void}
|
||||||
*/
|
*/
|
||||||
resize() {
|
resize() {
|
||||||
if (this.$refs.wrap) {
|
if (this.$refs.wrap) {
|
||||||
this.maxBeat = Math.floor(this.$refs.wrap.clientWidth / (this.beatWidth + this.beatMargin * 2));
|
this.maxBeat = Math.floor(this.$refs.wrap.clientWidth / (this.beatWidth + this.beatMargin * 2));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the title of the beat.
|
* Get the title of the beat.
|
||||||
* Used as the hover tooltip on the heartbeat bar.
|
* Used as the hover tooltip on the heartbeat bar.
|
||||||
* @param {object} beat Beat to get title from
|
* @param {object} beat Beat to get title from
|
||||||
* @returns {string} Beat title
|
* @returns {string} Beat title
|
||||||
*/
|
*/
|
||||||
getBeatTitle(beat) {
|
getBeatTitle(beat) {
|
||||||
return `${this.$root.datetime(beat.time)}` + ((beat.msg) ? ` - ${beat.msg}` : "");
|
return `${this.$root.datetime(beat.time)}` + ((beat.msg) ? ` - ${beat.msg}` : "");
|
||||||
},
|
},
|
||||||
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@import "../assets/vars.scss";
|
@import "../assets/vars.scss";
|
||||||
|
|
||||||
.wrap {
|
.wrap {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hp-bar-big {
|
.hp-bar-big {
|
||||||
.beat {
|
.beat {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
background-color: $primary;
|
background-color: $primary;
|
||||||
border-radius: $border-radius;
|
border-radius: $border-radius;
|
||||||
|
|
||||||
&.empty {
|
&.empty {
|
||||||
background-color: aliceblue;
|
background-color: aliceblue;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.down {
|
&.down {
|
||||||
background-color: $danger;
|
background-color: $danger;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.pending {
|
&.pending {
|
||||||
background-color: $warning;
|
background-color: $warning;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.maintenance {
|
&.maintenance {
|
||||||
background-color: $maintenance;
|
background-color: $maintenance;
|
||||||
}
|
}
|
||||||
|
|
||||||
&:not(.empty):hover {
|
&:not(.empty):hover {
|
||||||
transition: all ease-in-out 0.15s;
|
transition: all ease-in-out 0.15s;
|
||||||
opacity: 0.8;
|
opacity: 0.8;
|
||||||
transform: scale(var(--hover-scale));
|
transform: scale(var(--hover-scale));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.dark {
|
.dark {
|
||||||
.hp-bar-big .beat.empty {
|
.hp-bar-big .beat.empty {
|
||||||
background-color: #848484;
|
background-color: #848484;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.word {
|
.word {
|
||||||
color: $secondary-text;
|
color: $secondary-text;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.connecting-line {
|
.connecting-line {
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
height: 1px;
|
height: 1px;
|
||||||
background-color: #ededed;
|
background-color: #ededed;
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
margin-top: 2px;
|
margin-top: 2px;
|
||||||
|
|
||||||
.dark & {
|
.dark & {
|
||||||
background-color: #333;
|
background-color: #333;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
2108
src/lang/bg-BG.json
2108
src/lang/bg-BG.json
File diff suppressed because it is too large
Load diff
2104
src/lang/de-CH.json
2104
src/lang/de-CH.json
File diff suppressed because it is too large
Load diff
2110
src/lang/de-DE.json
2110
src/lang/de-DE.json
File diff suppressed because it is too large
Load diff
2114
src/lang/en.json
2114
src/lang/en.json
File diff suppressed because it is too large
Load diff
|
@ -1,320 +1,320 @@
|
||||||
{
|
{
|
||||||
"languageName": "eesti",
|
"languageName": "eesti",
|
||||||
"retryCheckEverySecond": "Kontrolli {0} sekundilise vahega",
|
"retryCheckEverySecond": "Kontrolli {0} sekundilise vahega",
|
||||||
"retriesDescription": "Mitu korda tuleb kontrollida, mille järel märkida 'maas' ja saata välja teavitus",
|
"retriesDescription": "Mitu korda tuleb kontrollida, mille järel märkida 'maas' ja saata välja teavitus",
|
||||||
"ignoreTLSError": "Eira TLS/SSL viga HTTPS veebisaitidel",
|
"ignoreTLSError": "Eira TLS/SSL viga HTTPS veebisaitidel",
|
||||||
"upsideDownModeDescription": "Käitle teenuse saadavust rikkena, teenuse kättesaamatust töötavaks.",
|
"upsideDownModeDescription": "Käitle teenuse saadavust rikkena, teenuse kättesaamatust töötavaks.",
|
||||||
"maxRedirectDescription": "Suurim arv ümbersuunamisi, millele järgida. 0 ei luba ühtegi.",
|
"maxRedirectDescription": "Suurim arv ümbersuunamisi, millele järgida. 0 ei luba ühtegi.",
|
||||||
"acceptedStatusCodesDescription": "Vali välja HTTP koodid, mida arvestada kõlblikuks.",
|
"acceptedStatusCodesDescription": "Vali välja HTTP koodid, mida arvestada kõlblikuks.",
|
||||||
"passwordNotMatchMsg": "Salasõnad ei kattu.",
|
"passwordNotMatchMsg": "Salasõnad ei kattu.",
|
||||||
"notificationDescription": "Teavitusteenuse kasutamiseks seo see seirega.",
|
"notificationDescription": "Teavitusteenuse kasutamiseks seo see seirega.",
|
||||||
"keywordDescription": "Jälgi võtmesõna HTML või JSON vastustes. (tõstutundlik)",
|
"keywordDescription": "Jälgi võtmesõna HTML või JSON vastustes. (tõstutundlik)",
|
||||||
"pauseDashboardHome": "Seisatud",
|
"pauseDashboardHome": "Seisatud",
|
||||||
"deleteMonitorMsg": "Kas soovid eemaldada seire?",
|
"deleteMonitorMsg": "Kas soovid eemaldada seire?",
|
||||||
"deleteNotificationMsg": "Kas soovid eemaldada selle teavitusteenuse kõikidelt seiretelt?",
|
"deleteNotificationMsg": "Kas soovid eemaldada selle teavitusteenuse kõikidelt seiretelt?",
|
||||||
"resolverserverDescription": "Cloudflare on vaikimisi pöördserver.",
|
"resolverserverDescription": "Cloudflare on vaikimisi pöördserver.",
|
||||||
"rrtypeDescription": "Vali kirje tüüp, mida soovid jälgida.",
|
"rrtypeDescription": "Vali kirje tüüp, mida soovid jälgida.",
|
||||||
"pauseMonitorMsg": "Kas soovid peatada seire?",
|
"pauseMonitorMsg": "Kas soovid peatada seire?",
|
||||||
"Settings": "Seaded",
|
"Settings": "Seaded",
|
||||||
"Status Page": "Ülevaade",
|
"Status Page": "Ülevaade",
|
||||||
"Status Pages": "Ülevaated",
|
"Status Pages": "Ülevaated",
|
||||||
"Dashboard": "Töölaud",
|
"Dashboard": "Töölaud",
|
||||||
"New Update": "Uuem tarkvara versioon on saadaval",
|
"New Update": "Uuem tarkvara versioon on saadaval",
|
||||||
"Language": "Keel",
|
"Language": "Keel",
|
||||||
"Appearance": "Välimus",
|
"Appearance": "Välimus",
|
||||||
"Theme": "Teema",
|
"Theme": "Teema",
|
||||||
"General": "Üldine",
|
"General": "Üldine",
|
||||||
"Version": "Versioon",
|
"Version": "Versioon",
|
||||||
"Check Update On GitHub": "Otsi uuendusi GitHub'ist",
|
"Check Update On GitHub": "Otsi uuendusi GitHub'ist",
|
||||||
"List": "Nimekiri",
|
"List": "Nimekiri",
|
||||||
"Add": "Lisa",
|
"Add": "Lisa",
|
||||||
"Add New Monitor": "Lisa seire",
|
"Add New Monitor": "Lisa seire",
|
||||||
"Add a monitor": "Lisa seire",
|
"Add a monitor": "Lisa seire",
|
||||||
"Quick Stats": "Ülevaade",
|
"Quick Stats": "Ülevaade",
|
||||||
"Up": "Töökorras",
|
"Up": "Töökorras",
|
||||||
"Down": "Rikkis",
|
"Down": "Rikkis",
|
||||||
"Pending": "Määramisel",
|
"Pending": "Määramisel",
|
||||||
"Unknown": "Kahtlast",
|
"Unknown": "Kahtlast",
|
||||||
"Pause": "Seiska",
|
"Pause": "Seiska",
|
||||||
"Name": "Nimi",
|
"Name": "Nimi",
|
||||||
"Status": "Olek",
|
"Status": "Olek",
|
||||||
"DateTime": "Kuupäev",
|
"DateTime": "Kuupäev",
|
||||||
"Message": "Tulemus",
|
"Message": "Tulemus",
|
||||||
"No important events": "Märkimisväärsed juhtumid puuduvad",
|
"No important events": "Märkimisväärsed juhtumid puuduvad",
|
||||||
"Resume": "Taasta",
|
"Resume": "Taasta",
|
||||||
"Edit": "Muuda",
|
"Edit": "Muuda",
|
||||||
"Delete": "Eemalda",
|
"Delete": "Eemalda",
|
||||||
"Current": "Hetkeseisund",
|
"Current": "Hetkeseisund",
|
||||||
"Uptime": "Eluiga",
|
"Uptime": "Eluiga",
|
||||||
"Cert Exp.": "Sert. aegumine",
|
"Cert Exp.": "Sert. aegumine",
|
||||||
"day": "päev | päeva",
|
"day": "päev | päeva",
|
||||||
"-day": "-päev",
|
"-day": "-päev",
|
||||||
"hour": "tund",
|
"hour": "tund",
|
||||||
"-hour": "-tund",
|
"-hour": "-tund",
|
||||||
"Response": "Reaktsiooniaeg",
|
"Response": "Reaktsiooniaeg",
|
||||||
"Ping": "Ping",
|
"Ping": "Ping",
|
||||||
"Monitor Type": "Seire tüüp",
|
"Monitor Type": "Seire tüüp",
|
||||||
"Keyword": "Võtmesõna",
|
"Keyword": "Võtmesõna",
|
||||||
"Friendly Name": "Sõbralik nimi",
|
"Friendly Name": "Sõbralik nimi",
|
||||||
"URL": "URL",
|
"URL": "URL",
|
||||||
"Hostname": "Hostname",
|
"Hostname": "Hostname",
|
||||||
"Port": "Port",
|
"Port": "Port",
|
||||||
"Heartbeat Interval": "Tukse sagedus",
|
"Heartbeat Interval": "Tukse sagedus",
|
||||||
"Retries": "Korduskatsed",
|
"Retries": "Korduskatsed",
|
||||||
"Advanced": "Rohkem",
|
"Advanced": "Rohkem",
|
||||||
"Upside Down Mode": "Tagurpidi seire",
|
"Upside Down Mode": "Tagurpidi seire",
|
||||||
"Max. Redirects": "Max. ümbersuunamine",
|
"Max. Redirects": "Max. ümbersuunamine",
|
||||||
"Accepted Status Codes": "Kõlblikud HTTP koodid",
|
"Accepted Status Codes": "Kõlblikud HTTP koodid",
|
||||||
"Save": "Salvesta",
|
"Save": "Salvesta",
|
||||||
"Notifications": "Teavitused",
|
"Notifications": "Teavitused",
|
||||||
"Not available, please setup.": "Ühtegi teavitusteenust pole saadaval.",
|
"Not available, please setup.": "Ühtegi teavitusteenust pole saadaval.",
|
||||||
"Setup Notification": "Lisa teavitusteenus",
|
"Setup Notification": "Lisa teavitusteenus",
|
||||||
"Light": "hele",
|
"Light": "hele",
|
||||||
"Dark": "tume",
|
"Dark": "tume",
|
||||||
"Auto": "automaatne",
|
"Auto": "automaatne",
|
||||||
"Theme - Heartbeat Bar": "Teemasäte — tuksete riba",
|
"Theme - Heartbeat Bar": "Teemasäte — tuksete riba",
|
||||||
"Normal": "tavaline",
|
"Normal": "tavaline",
|
||||||
"Bottom": "all",
|
"Bottom": "all",
|
||||||
"None": "puudub",
|
"None": "puudub",
|
||||||
"Timezone": "Ajatsoon",
|
"Timezone": "Ajatsoon",
|
||||||
"Search Engine Visibility": "Otsimootorite ligipääs",
|
"Search Engine Visibility": "Otsimootorite ligipääs",
|
||||||
"Allow indexing": "Luba indekseerimine",
|
"Allow indexing": "Luba indekseerimine",
|
||||||
"Discourage search engines from indexing site": "Keela selle saidi indekseerimine otsimootorite poolt",
|
"Discourage search engines from indexing site": "Keela selle saidi indekseerimine otsimootorite poolt",
|
||||||
"Change Password": "Muuda parooli",
|
"Change Password": "Muuda parooli",
|
||||||
"Current Password": "Praegune parool",
|
"Current Password": "Praegune parool",
|
||||||
"New Password": "Uus parool",
|
"New Password": "Uus parool",
|
||||||
"Repeat New Password": "Korda uut parooli",
|
"Repeat New Password": "Korda uut parooli",
|
||||||
"Update Password": "Uuenda parooli",
|
"Update Password": "Uuenda parooli",
|
||||||
"Disable Auth": "Lülita autentimine välja",
|
"Disable Auth": "Lülita autentimine välja",
|
||||||
"Enable Auth": "Lülita autentimine sisse",
|
"Enable Auth": "Lülita autentimine sisse",
|
||||||
"disableauth.message1": "Kas soovid {disableAuth}?",
|
"disableauth.message1": "Kas soovid {disableAuth}?",
|
||||||
"disable authentication": "lülitada autentimise välja",
|
"disable authentication": "lülitada autentimise välja",
|
||||||
"disableauth.message2": "Kastuamiseks {intendThirdPartyAuth}, näiteks Cloudflare Access.",
|
"disableauth.message2": "Kastuamiseks {intendThirdPartyAuth}, näiteks Cloudflare Access.",
|
||||||
"where you intend to implement third-party authentication": "välise autentimispakkujaga",
|
"where you intend to implement third-party authentication": "välise autentimispakkujaga",
|
||||||
"Please use this option carefully!": "Palun kasuta seda valikut vastutustundlikult!",
|
"Please use this option carefully!": "Palun kasuta seda valikut vastutustundlikult!",
|
||||||
"Logout": "Logi välja",
|
"Logout": "Logi välja",
|
||||||
"Leave": "Lahku",
|
"Leave": "Lahku",
|
||||||
"I understand, please disable": "Olen tutvunud riskidega, lülita välja",
|
"I understand, please disable": "Olen tutvunud riskidega, lülita välja",
|
||||||
"Confirm": "Kinnita",
|
"Confirm": "Kinnita",
|
||||||
"Yes": "Jah",
|
"Yes": "Jah",
|
||||||
"No": "Ei",
|
"No": "Ei",
|
||||||
"Username": "Kasutajanimi",
|
"Username": "Kasutajanimi",
|
||||||
"Password": "Parool",
|
"Password": "Parool",
|
||||||
"Remember me": "Mäleta mind",
|
"Remember me": "Mäleta mind",
|
||||||
"Login": "Logi sisse",
|
"Login": "Logi sisse",
|
||||||
"No Monitors, please": "Seired puuduvad, palun",
|
"No Monitors, please": "Seired puuduvad, palun",
|
||||||
"add one": "Lisa esimene",
|
"add one": "Lisa esimene",
|
||||||
"Notification Type": "Teavituse tüüp",
|
"Notification Type": "Teavituse tüüp",
|
||||||
"Email": "e-posti aadress",
|
"Email": "e-posti aadress",
|
||||||
"Test": "Saada prooviteavitus",
|
"Test": "Saada prooviteavitus",
|
||||||
"Certificate Info": "Sertifikaadi teave",
|
"Certificate Info": "Sertifikaadi teave",
|
||||||
"Resolver Server": "Server, mis vastab DNS päringutele.",
|
"Resolver Server": "Server, mis vastab DNS päringutele.",
|
||||||
"Resource Record Type": "DNS kirje tüüp",
|
"Resource Record Type": "DNS kirje tüüp",
|
||||||
"Last Result": "Viimane",
|
"Last Result": "Viimane",
|
||||||
"Create your admin account": "Admininstraatori konto loomine",
|
"Create your admin account": "Admininstraatori konto loomine",
|
||||||
"Repeat Password": "korda salasõna",
|
"Repeat Password": "korda salasõna",
|
||||||
"respTime": "Reageerimisaeg (ms)",
|
"respTime": "Reageerimisaeg (ms)",
|
||||||
"notAvailableShort": "N/A",
|
"notAvailableShort": "N/A",
|
||||||
"enableDefaultNotificationDescription": "Kõik järgnevalt lisatud seired kasutavad seda teavitusteenuset. Seiretelt võib teavitusteenuse ühekaupa eemaldada.",
|
"enableDefaultNotificationDescription": "Kõik järgnevalt lisatud seired kasutavad seda teavitusteenuset. Seiretelt võib teavitusteenuse ühekaupa eemaldada.",
|
||||||
"clearEventsMsg": "Kas soovid seire kõik sündmused kustutada?",
|
"clearEventsMsg": "Kas soovid seire kõik sündmused kustutada?",
|
||||||
"clearHeartbeatsMsg": "Kas soovid seire kõik tuksed kustutada?",
|
"clearHeartbeatsMsg": "Kas soovid seire kõik tuksed kustutada?",
|
||||||
"confirmClearStatisticsMsg": "Kas soovid TERVE ajaloo kustutada?",
|
"confirmClearStatisticsMsg": "Kas soovid TERVE ajaloo kustutada?",
|
||||||
"Export": "Eksport",
|
"Export": "Eksport",
|
||||||
"Import": "Import",
|
"Import": "Import",
|
||||||
"Default enabled": "Kasuta vaikimisi",
|
"Default enabled": "Kasuta vaikimisi",
|
||||||
"Apply on all existing monitors": "Kõik praegused seired hakkavad kasutama seda teavitusteenust",
|
"Apply on all existing monitors": "Kõik praegused seired hakkavad kasutama seda teavitusteenust",
|
||||||
"Create": "Loo konto",
|
"Create": "Loo konto",
|
||||||
"Clear Data": "Eemalda andmed",
|
"Clear Data": "Eemalda andmed",
|
||||||
"Events": "Sündmused",
|
"Events": "Sündmused",
|
||||||
"Heartbeats": "Tuksed",
|
"Heartbeats": "Tuksed",
|
||||||
"Auto Get": "Hangi automaatselt",
|
"Auto Get": "Hangi automaatselt",
|
||||||
"backupDescription": "Varunda kõik seired ja teavitused JSON faili.",
|
"backupDescription": "Varunda kõik seired ja teavitused JSON faili.",
|
||||||
"backupDescription2": "PS: Varukoopia EI sisalda seirete ajalugu ja sündmustikku.",
|
"backupDescription2": "PS: Varukoopia EI sisalda seirete ajalugu ja sündmustikku.",
|
||||||
"backupDescription3": "Varukoopiad sisaldavad teavitusteenusete pääsuvõtmeid.",
|
"backupDescription3": "Varukoopiad sisaldavad teavitusteenusete pääsuvõtmeid.",
|
||||||
"alertNoFile": "Palun lisa fail, mida importida.",
|
"alertNoFile": "Palun lisa fail, mida importida.",
|
||||||
"alertWrongFileType": "Palun lisa JSON-formaadis fail.",
|
"alertWrongFileType": "Palun lisa JSON-formaadis fail.",
|
||||||
"twoFAVerifyLabel": "2FA kinnitamiseks sisesta pääsukood",
|
"twoFAVerifyLabel": "2FA kinnitamiseks sisesta pääsukood",
|
||||||
"tokenValidSettingsMsg": "Kood õige. Akna võib sulgeda.",
|
"tokenValidSettingsMsg": "Kood õige. Akna võib sulgeda.",
|
||||||
"confirmEnableTwoFAMsg": "Kas soovid 2FA sisse lülitada?",
|
"confirmEnableTwoFAMsg": "Kas soovid 2FA sisse lülitada?",
|
||||||
"confirmDisableTwoFAMsg": "Kas soovid 2FA välja lülitada?",
|
"confirmDisableTwoFAMsg": "Kas soovid 2FA välja lülitada?",
|
||||||
"Verify Token": "Kontrolli",
|
"Verify Token": "Kontrolli",
|
||||||
"Setup 2FA": "Kaksikautentimise seadistamine",
|
"Setup 2FA": "Kaksikautentimise seadistamine",
|
||||||
"Enable 2FA": "Seadista 2FA",
|
"Enable 2FA": "Seadista 2FA",
|
||||||
"Disable 2FA": "Lülita 2FA välja",
|
"Disable 2FA": "Lülita 2FA välja",
|
||||||
"2FA Settings": "2FA seaded",
|
"2FA Settings": "2FA seaded",
|
||||||
"Two Factor Authentication": "Kaksikautentimine",
|
"Two Factor Authentication": "Kaksikautentimine",
|
||||||
"Active": "Aktiivne",
|
"Active": "Aktiivne",
|
||||||
"Inactive": "Mitteaktiivne",
|
"Inactive": "Mitteaktiivne",
|
||||||
"Token": "Kaksikautentimise kood",
|
"Token": "Kaksikautentimise kood",
|
||||||
"Show URI": "Näita URId",
|
"Show URI": "Näita URId",
|
||||||
"Clear all statistics": "Tühjenda ajalugu",
|
"Clear all statistics": "Tühjenda ajalugu",
|
||||||
"importHandleDescription": "'kombineeri' täiendab varukoopiast ja kirjutab üle samanimelised seireid ja teavitusteenused; 'lisa praegustele' jätab olemasolevad puutumata; 'asenda' kustutab ja asendab kõik seired ja teavitusteenused.",
|
"importHandleDescription": "'kombineeri' täiendab varukoopiast ja kirjutab üle samanimelised seireid ja teavitusteenused; 'lisa praegustele' jätab olemasolevad puutumata; 'asenda' kustutab ja asendab kõik seired ja teavitusteenused.",
|
||||||
"confirmImportMsg": "Käkerdistest hoidumiseks lae enne taastamist alla uus varukoopia. Kas soovid taastada üles laetud?",
|
"confirmImportMsg": "Käkerdistest hoidumiseks lae enne taastamist alla uus varukoopia. Kas soovid taastada üles laetud?",
|
||||||
"Heartbeat Retry Interval": "Korduskatsete intervall",
|
"Heartbeat Retry Interval": "Korduskatsete intervall",
|
||||||
"Import Backup": "Varukoopia importimine",
|
"Import Backup": "Varukoopia importimine",
|
||||||
"Export Backup": "Varukoopia eksportimine",
|
"Export Backup": "Varukoopia eksportimine",
|
||||||
"Skip existing": "lisa praegustele",
|
"Skip existing": "lisa praegustele",
|
||||||
"Overwrite": "Asenda",
|
"Overwrite": "Asenda",
|
||||||
"Options": "Mestimisviis",
|
"Options": "Mestimisviis",
|
||||||
"Keep both": "Kombineeri",
|
"Keep both": "Kombineeri",
|
||||||
"Tags": "Sildid",
|
"Tags": "Sildid",
|
||||||
"Add New below or Select...": "Leia või lisa all uus…",
|
"Add New below or Select...": "Leia või lisa all uus…",
|
||||||
"Tag with this name already exist.": "Selle nimega silt on juba olemas.",
|
"Tag with this name already exist.": "Selle nimega silt on juba olemas.",
|
||||||
"Tag with this value already exist.": "Selle väärtusega silt on juba olemas.",
|
"Tag with this value already exist.": "Selle väärtusega silt on juba olemas.",
|
||||||
"color": "värvus",
|
"color": "värvus",
|
||||||
"value (optional)": "väärtus (fakultatiivne)",
|
"value (optional)": "väärtus (fakultatiivne)",
|
||||||
"Gray": "hall",
|
"Gray": "hall",
|
||||||
"Red": "punane",
|
"Red": "punane",
|
||||||
"Orange": "oranž",
|
"Orange": "oranž",
|
||||||
"Green": "roheline",
|
"Green": "roheline",
|
||||||
"Blue": "sinine",
|
"Blue": "sinine",
|
||||||
"Indigo": "indigo",
|
"Indigo": "indigo",
|
||||||
"Purple": "lilla",
|
"Purple": "lilla",
|
||||||
"Pink": "roosa",
|
"Pink": "roosa",
|
||||||
"Search...": "Otsi…",
|
"Search...": "Otsi…",
|
||||||
"Avg. Ping": "Keskmine ping",
|
"Avg. Ping": "Keskmine ping",
|
||||||
"Avg. Response": "Keskmine reaktsiooniaeg",
|
"Avg. Response": "Keskmine reaktsiooniaeg",
|
||||||
"Entry Page": "Avaleht",
|
"Entry Page": "Avaleht",
|
||||||
"statusPageNothing": "Kippu ega kõppu; siia saab lisada seireid või -gruppe.",
|
"statusPageNothing": "Kippu ega kõppu; siia saab lisada seireid või -gruppe.",
|
||||||
"No Services": "Teenused puuduvad",
|
"No Services": "Teenused puuduvad",
|
||||||
"All Systems Operational": "Kõik töökorras",
|
"All Systems Operational": "Kõik töökorras",
|
||||||
"Partially Degraded Service": "Teenuse töö osaliselt häiritud",
|
"Partially Degraded Service": "Teenuse töö osaliselt häiritud",
|
||||||
"Degraded Service": "Teenuse töö häiritud",
|
"Degraded Service": "Teenuse töö häiritud",
|
||||||
"Add Group": "Lisa grupp",
|
"Add Group": "Lisa grupp",
|
||||||
"Edit Status Page": "Muuda lehte",
|
"Edit Status Page": "Muuda lehte",
|
||||||
"Go to Dashboard": "Töölauale",
|
"Go to Dashboard": "Töölauale",
|
||||||
"checkEverySecond": "Kontrolli peale tõrget {0} sekundilise vahega",
|
"checkEverySecond": "Kontrolli peale tõrget {0} sekundilise vahega",
|
||||||
"telegram": "Telegram",
|
"telegram": "Telegram",
|
||||||
"webhook": "Webhook",
|
"webhook": "Webhook",
|
||||||
"smtp": "elektronpost (SMTP)",
|
"smtp": "elektronpost (SMTP)",
|
||||||
"discord": "Discord",
|
"discord": "Discord",
|
||||||
"teams": "Microsoft Teams",
|
"teams": "Microsoft Teams",
|
||||||
"signal": "Signal",
|
"signal": "Signal",
|
||||||
"gotify": "Gotify",
|
"gotify": "Gotify",
|
||||||
"slack": "Slack",
|
"slack": "Slack",
|
||||||
"rocket.chat": "Rocket.chat",
|
"rocket.chat": "Rocket.chat",
|
||||||
"pushover": "Pushover",
|
"pushover": "Pushover",
|
||||||
"pushy": "Pushy",
|
"pushy": "Pushy",
|
||||||
"octopush": "Octopush",
|
"octopush": "Octopush",
|
||||||
"promosms": "PromoSMS",
|
"promosms": "PromoSMS",
|
||||||
"lunasea": "LunaSea",
|
"lunasea": "LunaSea",
|
||||||
"apprise": "Apprise (vahendab üle 65 teavitusteenust)",
|
"apprise": "Apprise (vahendab üle 65 teavitusteenust)",
|
||||||
"pushbullet": "Pushbullet",
|
"pushbullet": "Pushbullet",
|
||||||
"line": "LINE",
|
"line": "LINE",
|
||||||
"mattermost": "Mattermost",
|
"mattermost": "Mattermost",
|
||||||
"alerta": "Alerta",
|
"alerta": "Alerta",
|
||||||
"alertaApiEndpoint": "API otsik",
|
"alertaApiEndpoint": "API otsik",
|
||||||
"alertaEnvironment": "Keskkond",
|
"alertaEnvironment": "Keskkond",
|
||||||
"alertaApiKey": "API võti",
|
"alertaApiKey": "API võti",
|
||||||
"alertaAlertState": "Häireseisund",
|
"alertaAlertState": "Häireseisund",
|
||||||
"alertaRecoverState": "Taasta algolek",
|
"alertaRecoverState": "Taasta algolek",
|
||||||
"Game": "Mäng",
|
"Game": "Mäng",
|
||||||
"Primary Base URL": "Peamine baas URL",
|
"Primary Base URL": "Peamine baas URL",
|
||||||
"Passive Monitor Type": "Passiivne monitori tüüp",
|
"Passive Monitor Type": "Passiivne monitori tüüp",
|
||||||
"Specific Monitor Type": "Spetsiifiline monitori tüüp",
|
"Specific Monitor Type": "Spetsiifiline monitori tüüp",
|
||||||
"resendDisabled": "Uuesti saatmine keelatud",
|
"resendDisabled": "Uuesti saatmine keelatud",
|
||||||
"Push URL": "Lükka URL",
|
"Push URL": "Lükka URL",
|
||||||
"needPushEvery": "Sa peaksid kutsuma seda URL-i iga {0} sekundi tagant.",
|
"needPushEvery": "Sa peaksid kutsuma seda URL-i iga {0} sekundi tagant.",
|
||||||
"pushOptionalParams": "Valikulised parameetrid: {0}",
|
"pushOptionalParams": "Valikulised parameetrid: {0}",
|
||||||
"Schedule maintenance": "Planeeri hooldus",
|
"Schedule maintenance": "Planeeri hooldus",
|
||||||
"All Status Pages": "Kõik staatuse lehed",
|
"All Status Pages": "Kõik staatuse lehed",
|
||||||
"Select status pages...": "Vali staatuse lehed…",
|
"Select status pages...": "Vali staatuse lehed…",
|
||||||
"Custom": "Kohandatud",
|
"Custom": "Kohandatud",
|
||||||
"here": "siin",
|
"here": "siin",
|
||||||
"Required": "Nõutud",
|
"Required": "Nõutud",
|
||||||
"Post URL": "Postita URL",
|
"Post URL": "Postita URL",
|
||||||
"Affected Monitors": "Mõjutatud monitorid",
|
"Affected Monitors": "Mõjutatud monitorid",
|
||||||
"Pick Affected Monitors...": "Vali mõjutatud monitorid…",
|
"Pick Affected Monitors...": "Vali mõjutatud monitorid…",
|
||||||
"Start of maintenance": "Hoolduse algus",
|
"Start of maintenance": "Hoolduse algus",
|
||||||
"Content Type": "Sisu tüüp",
|
"Content Type": "Sisu tüüp",
|
||||||
"webhookJsonDesc": "{0} on hea iga modernse HTTP serveri jaoks nagu Express.js",
|
"webhookJsonDesc": "{0} on hea iga modernse HTTP serveri jaoks nagu Express.js",
|
||||||
"webhookAdditionalHeadersTitle": "Täiendavad päised",
|
"webhookAdditionalHeadersTitle": "Täiendavad päised",
|
||||||
"setAsDefault": "Lisa vaikimisi",
|
"setAsDefault": "Lisa vaikimisi",
|
||||||
"deleteProxyMsg": "Kas Sa oled kindel, et soovid kustutada seda puhverserverit kõkidel monitoridel?",
|
"deleteProxyMsg": "Kas Sa oled kindel, et soovid kustutada seda puhverserverit kõkidel monitoridel?",
|
||||||
"proxyDescription": "Puhverserverid tuleb lisada monitorile selle töötamiseks.",
|
"proxyDescription": "Puhverserverid tuleb lisada monitorile selle töötamiseks.",
|
||||||
"setAsDefaultProxyDescription": "See puhverserver aktiveeritakse vaikimisi uutel monitoridel. Sa saad keelata seda puhverserverit igal monitoril eraldi.",
|
"setAsDefaultProxyDescription": "See puhverserver aktiveeritakse vaikimisi uutel monitoridel. Sa saad keelata seda puhverserverit igal monitoril eraldi.",
|
||||||
"Certificate Chain": "Sertifikaadi kett",
|
"Certificate Chain": "Sertifikaadi kett",
|
||||||
"Valid": "Kehtiv",
|
"Valid": "Kehtiv",
|
||||||
"Invalid": "Kehtetu",
|
"Invalid": "Kehtetu",
|
||||||
"User": "Kasutaja",
|
"User": "Kasutaja",
|
||||||
"Installed": "Paigaldatud",
|
"Installed": "Paigaldatud",
|
||||||
"Not installed": "Ei ole installeeritud",
|
"Not installed": "Ei ole installeeritud",
|
||||||
"Running": "Töötab",
|
"Running": "Töötab",
|
||||||
"resendEveryXTimes": "Saada uuesti {0} korda",
|
"resendEveryXTimes": "Saada uuesti {0} korda",
|
||||||
"statusMaintenance": "Hooldus",
|
"statusMaintenance": "Hooldus",
|
||||||
"Webhook URL": "",
|
"Webhook URL": "",
|
||||||
"Server URL": "Serveri URL",
|
"Server URL": "Serveri URL",
|
||||||
"Priority": "Tähtsus",
|
"Priority": "Tähtsus",
|
||||||
"emojiCheatSheet": "Emotikoni spikker: {0}",
|
"emojiCheatSheet": "Emotikoni spikker: {0}",
|
||||||
"appriseInstalled": "Apprise on installitud.",
|
"appriseInstalled": "Apprise on installitud.",
|
||||||
"appriseNotInstalled": "Apprise ei ole installitud. {0}",
|
"appriseNotInstalled": "Apprise ei ole installitud. {0}",
|
||||||
"Method": "Meetod",
|
"Method": "Meetod",
|
||||||
"Body": "Keha",
|
"Body": "Keha",
|
||||||
"Headers": "Päis",
|
"Headers": "Päis",
|
||||||
"PushUrl": "Lükka URL",
|
"PushUrl": "Lükka URL",
|
||||||
"Monitor History": "Monitori ajalugu",
|
"Monitor History": "Monitori ajalugu",
|
||||||
"PasswordsDoNotMatch": "Paroolid ei ühti.",
|
"PasswordsDoNotMatch": "Paroolid ei ühti.",
|
||||||
"records": "",
|
"records": "",
|
||||||
"Current User": "Praegune kasutaja",
|
"Current User": "Praegune kasutaja",
|
||||||
"topic": "Teema",
|
"topic": "Teema",
|
||||||
"successMessage": "Edukas sõnum",
|
"successMessage": "Edukas sõnum",
|
||||||
"recent": "Hiljutine",
|
"recent": "Hiljutine",
|
||||||
"Info": "Info",
|
"Info": "Info",
|
||||||
"Security": "Turvalisus",
|
"Security": "Turvalisus",
|
||||||
"Steam API Key": "Steam API võti",
|
"Steam API Key": "Steam API võti",
|
||||||
"Pick a RR-Type...": "Vali RR-tüüp…",
|
"Pick a RR-Type...": "Vali RR-tüüp…",
|
||||||
"Default": "Vaikimisi",
|
"Default": "Vaikimisi",
|
||||||
"HTTP Options": "HTTP valikud",
|
"HTTP Options": "HTTP valikud",
|
||||||
"Create Incident": "Loo intsident",
|
"Create Incident": "Loo intsident",
|
||||||
"Title": "Pealkiri",
|
"Title": "Pealkiri",
|
||||||
"Content": "Sisu",
|
"Content": "Sisu",
|
||||||
"Style": "Stiil",
|
"Style": "Stiil",
|
||||||
"info": "info",
|
"info": "info",
|
||||||
"warning": "hoiatus",
|
"warning": "hoiatus",
|
||||||
"danger": "oht",
|
"danger": "oht",
|
||||||
"error": "viga",
|
"error": "viga",
|
||||||
"critical": "kriitiline",
|
"critical": "kriitiline",
|
||||||
"primary": "peamine",
|
"primary": "peamine",
|
||||||
"dark": "tume",
|
"dark": "tume",
|
||||||
"light": "hele",
|
"light": "hele",
|
||||||
"Post": "Postita",
|
"Post": "Postita",
|
||||||
"Please input title and content": "Palun lisa pealkiri ja sisu",
|
"Please input title and content": "Palun lisa pealkiri ja sisu",
|
||||||
"Created": "Loodud",
|
"Created": "Loodud",
|
||||||
"Last Updated": "Viimati uuendatud",
|
"Last Updated": "Viimati uuendatud",
|
||||||
"Unpin": "Vabastada",
|
"Unpin": "Vabastada",
|
||||||
"Switch to Dark Theme": "Vaheta tumedale teemale",
|
"Switch to Dark Theme": "Vaheta tumedale teemale",
|
||||||
"Hide Tags": "Peida tagid",
|
"Hide Tags": "Peida tagid",
|
||||||
"Show Tags": "Näita tagid",
|
"Show Tags": "Näita tagid",
|
||||||
"Description": "Kirjeldus",
|
"Description": "Kirjeldus",
|
||||||
"No monitors available.": "Ühtegi monitori ei ole saadaval.",
|
"No monitors available.": "Ühtegi monitori ei ole saadaval.",
|
||||||
"Add one": "Lisa üks",
|
"Add one": "Lisa üks",
|
||||||
"No Monitors": "Ei ole monitore",
|
"No Monitors": "Ei ole monitore",
|
||||||
"Untitled Group": "Nimetamata grupp",
|
"Untitled Group": "Nimetamata grupp",
|
||||||
"Services": "Teenused",
|
"Services": "Teenused",
|
||||||
"Cancel": "Tühista",
|
"Cancel": "Tühista",
|
||||||
"Customize": "Kohanda",
|
"Customize": "Kohanda",
|
||||||
"Custom Footer": "Kohandatud jalus",
|
"Custom Footer": "Kohandatud jalus",
|
||||||
"Custom CSS": "Kohandatud CSS",
|
"Custom CSS": "Kohandatud CSS",
|
||||||
"Proxies": "Puhverserverid",
|
"Proxies": "Puhverserverid",
|
||||||
"default": "Vaikimisi",
|
"default": "Vaikimisi",
|
||||||
"enabled": "Lubatud",
|
"enabled": "Lubatud",
|
||||||
"Not running": "Ei tööta",
|
"Not running": "Ei tööta",
|
||||||
"Start": "Alusta",
|
"Start": "Alusta",
|
||||||
"Stop": "Peata",
|
"Stop": "Peata",
|
||||||
"Add New Status Page": "Lisa uus staatuse leht",
|
"Add New Status Page": "Lisa uus staatuse leht",
|
||||||
"Shrink Database": "Vähenda andmebaasi",
|
"Shrink Database": "Vähenda andmebaasi",
|
||||||
"Help": "Abi",
|
"Help": "Abi",
|
||||||
"Maintenance": "Hooldus",
|
"Maintenance": "Hooldus",
|
||||||
"General Monitor Type": "Üldine monitori tüüp",
|
"General Monitor Type": "Üldine monitori tüüp",
|
||||||
"webhookAdditionalHeadersDesc": "Lisab täiendavad päised saadetud webhookiga.",
|
"webhookAdditionalHeadersDesc": "Lisab täiendavad päised saadetud webhookiga.",
|
||||||
"Read more": "Loe rohkem",
|
"Read more": "Loe rohkem",
|
||||||
"HeadersInvalidFormat": "",
|
"HeadersInvalidFormat": "",
|
||||||
"clearDataOlderThan": "Hoia monitori ajalugu alles {0} päeva.",
|
"clearDataOlderThan": "Hoia monitori ajalugu alles {0} päeva.",
|
||||||
"steamApiKeyDescription": "Steam Game Serveri monitoorimiseks on vaja sul Steam Web-API võtit. Sa saad registreerida enda API võtme siin: ",
|
"steamApiKeyDescription": "Steam Game Serveri monitoorimiseks on vaja sul Steam Web-API võtit. Sa saad registreerida enda API võtme siin: ",
|
||||||
"Done": "Tehtud",
|
"Done": "Tehtud",
|
||||||
"Pick Accepted Status Codes...": "Vali vastu võetud staatuse koodid…",
|
"Pick Accepted Status Codes...": "Vali vastu võetud staatuse koodid…",
|
||||||
"Switch to Light Theme": "Vaheta heledale teemale",
|
"Switch to Light Theme": "Vaheta heledale teemale",
|
||||||
"Discard": "Loobu",
|
"Discard": "Loobu",
|
||||||
"deleteStatusPageMsg": "Kas Sa oled kindel, et soovid kustutada seda staatuse lehte?",
|
"deleteStatusPageMsg": "Kas Sa oled kindel, et soovid kustutada seda staatuse lehte?",
|
||||||
"Resend Notification if Down X times consecutively": "Saada teavitus uuesti kui monitor on rikkis X korda järjest"
|
"Resend Notification if Down X times consecutively": "Saada teavitus uuesti kui monitor on rikkis X korda järjest"
|
||||||
}
|
}
|
||||||
|
|
2104
src/lang/fi.json
2104
src/lang/fi.json
File diff suppressed because it is too large
Load diff
2110
src/lang/fr-FR.json
2110
src/lang/fr-FR.json
File diff suppressed because it is too large
Load diff
1974
src/lang/hr-HR.json
1974
src/lang/hr-HR.json
File diff suppressed because it is too large
Load diff
2100
src/lang/id-ID.json
2100
src/lang/id-ID.json
File diff suppressed because it is too large
Load diff
1352
src/lang/ja.json
1352
src/lang/ja.json
File diff suppressed because it is too large
Load diff
1994
src/lang/pl.json
1994
src/lang/pl.json
File diff suppressed because it is too large
Load diff
1968
src/lang/pt-BR.json
1968
src/lang/pt-BR.json
File diff suppressed because it is too large
Load diff
1950
src/lang/ru-RU.json
1950
src/lang/ru-RU.json
File diff suppressed because it is too large
Load diff
1922
src/lang/sv-SE.json
1922
src/lang/sv-SE.json
File diff suppressed because it is too large
Load diff
2110
src/lang/tr-TR.json
2110
src/lang/tr-TR.json
File diff suppressed because it is too large
Load diff
2122
src/lang/uk-UA.json
2122
src/lang/uk-UA.json
File diff suppressed because it is too large
Load diff
2114
src/lang/zh-CN.json
2114
src/lang/zh-CN.json
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -11,6 +11,18 @@ export default {
|
||||||
components: {
|
components: {
|
||||||
MonitorList,
|
MonitorList,
|
||||||
},
|
},
|
||||||
|
mounted() {
|
||||||
|
if (!this.$root.isMobile && this.$route.path === '/list') {
|
||||||
|
this.$router.push('/dashboard');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
'$root.isMobile'(newVal) {
|
||||||
|
if (!newVal && this.$route.path === '/list') {
|
||||||
|
this.$router.push('/dashboard');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -21,4 +33,11 @@ export default {
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.slide-fade-enter-active, .slide-fade-leave-active {
|
||||||
|
transition: all 0.5s ease;
|
||||||
|
}
|
||||||
|
.slide-fade-enter, .slide-fade-leave-to {
|
||||||
|
transform: translateX(10px);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
Loading…
Add table
Reference in a new issue