Merge branch 'master' into clear-monitor-data

This commit is contained in:
LouisLam 2021-09-05 00:24:09 +08:00
commit ca8d4ab61b
13 changed files with 636 additions and 463 deletions

View file

@ -18,7 +18,7 @@ https://demo.uptime.kuma.pet
It is a 5 minutes live demo, all data will be deleted after that. The server is located at Tokyo, if you live far away from here, it may affact your experience. I suggest that you should install to try it. It is a 5 minutes live demo, all data will be deleted after that. The server is located at Tokyo, if you live far away from here, it may affact your experience. I suggest that you should install to try it.
VPS is sponsored by Uptime Kuma sponsors on Open Collective! Thank you so much! VPS is sponsored by Uptime Kuma sponsors on [Open Collective](https://opencollective.com/uptime-kuma)! Thank you so much!
## ⭐ Features ## ⭐ Features

28
dockerfile-debian Normal file
View file

@ -0,0 +1,28 @@
# DON'T UPDATE TO alpine3.13, 1.14, see #41.
FROM node:14-bullseye AS release
WORKDIR /app
RUN apt update
RUN apt --yes install python3 python3-pip python3-dev git g++ make
RUN ln -s /usr/bin/python3 /usr/bin/python
# split the sqlite install here, so that it can caches the arm prebuilt
RUN npm install mapbox/node-sqlite3#593c9d
# Install apprise
RUN apt --yes install python3 python3-pip python3-cryptography python3-six python3-yaml python3-click python3-markdown python3-requests python3-requests-oauthlib
RUN pip3 --no-cache-dir install apprise && \
rm -rf /root/.cache
RUN apt --yes install iputils-ping
COPY . .
RUN npm install --legacy-peer-deps && npm run build && npm prune
EXPOSE 3001
VOLUME ["/app/data"]
HEALTHCHECK --interval=60s --timeout=30s --start-period=300s CMD node extra/healthcheck.js
CMD ["node", "server/server.js"]
FROM release AS nightly
RUN npm run mark-as-nightly

View file

@ -23,6 +23,8 @@ if (! exists) {
pkg.version = newVersion; pkg.version = newVersion;
pkg.scripts.setup = pkg.scripts.setup.replaceAll(oldVersion, newVersion); pkg.scripts.setup = pkg.scripts.setup.replaceAll(oldVersion, newVersion);
pkg.scripts["build-docker"] = pkg.scripts["build-docker"].replaceAll(oldVersion, newVersion); pkg.scripts["build-docker"] = pkg.scripts["build-docker"].replaceAll(oldVersion, newVersion);
pkg.scripts["build-docker-alpine"] = pkg.scripts["build-docker-alpine"].replaceAll(oldVersion, newVersion);
pkg.scripts["build-docker-debian"] = pkg.scripts["build-docker-debian"].replaceAll(oldVersion, newVersion);
fs.writeFileSync("package.json", JSON.stringify(pkg, null, 4) + "\n"); fs.writeFileSync("package.json", JSON.stringify(pkg, null, 4) + "\n");
commit(newVersion); commit(newVersion);

867
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
{ {
"name": "uptime-kuma", "name": "uptime-kuma",
"version": "1.5.2", "version": "1.5.3",
"license": "MIT", "license": "MIT",
"repository": { "repository": {
"type": "git", "type": "git",
@ -18,11 +18,12 @@
"start-server": "node server/server.js", "start-server": "node server/server.js",
"build": "vite build", "build": "vite build",
"vite-preview-dist": "vite preview --host", "vite-preview-dist": "vite preview --host",
"build-docker": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma -t louislam/uptime-kuma:1 -t louislam/uptime-kuma:1.5.2 --target release . --push", "build-docker": "npm run build-docker-alpine && npm run build-docker-debian",
"build-docker-alpine": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma -t louislam/uptime-kuma:1 -t louislam/uptime-kuma:1.5.3 -t louislam/uptime-kuma:alpine -t louislam/uptime-kuma:1-alpine -t louislam/uptime-kuma:1.5.3-alpine --target release . --push",
"build-docker-debian": "docker buildx build -f dockerfile-debian --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:debian -t louislam/uptime-kuma:1-debian -t louislam/uptime-kuma:1.5.3-debian --target release . --push",
"build-docker-nightly": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly --target nightly . --push", "build-docker-nightly": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly --target nightly . --push",
"build-docker-nightly-amd64": "docker buildx build --platform linux/amd64 -t louislam/uptime-kuma:nightly-amd64 --target nightly . --push --progress plain", "build-docker-nightly-amd64": "docker buildx build --platform linux/amd64 -t louislam/uptime-kuma:nightly-amd64 --target nightly . --push --progress plain",
"build-docker-1.5.0-debian": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:1.5.0-debian --target release . --push", "setup": "git checkout 1.5.3 && npm install --legacy-peer-deps && node node_modules/esbuild/install.js && npm run build && npm prune",
"setup": "git checkout 1.5.2 && npm install --legacy-peer-deps && node node_modules/esbuild/install.js && npm run build && npm prune",
"update-version": "node extra/update-version.js", "update-version": "node extra/update-version.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",
@ -64,7 +65,7 @@
"sqlite3": "github:mapbox/node-sqlite3#593c9d", "sqlite3": "github:mapbox/node-sqlite3#593c9d",
"tcp-ping": "^0.1.1", "tcp-ping": "^0.1.1",
"v-pagination-3": "^0.1.6", "v-pagination-3": "^0.1.6",
"vue": "^3.2.6", "vue": "^3.2.8",
"vue-chart-3": "^0.5.7", "vue-chart-3": "^0.5.7",
"vue-confirm-dialog": "^1.0.2", "vue-confirm-dialog": "^1.0.2",
"vue-i18n": "^9.1.7", "vue-i18n": "^9.1.7",

View file

@ -31,7 +31,7 @@ export default {
beatWidth: 10, beatWidth: 10,
beatHeight: 30, beatHeight: 30,
hoverScale: 1.5, hoverScale: 1.5,
beatMargin: 3, // Odd number only, even = blurry beatMargin: 4,
move: false, move: false,
maxBeat: -1, maxBeat: -1,
} }
@ -122,11 +122,26 @@ export default {
this.$root.heartbeatList[this.monitorId] = []; this.$root.heartbeatList[this.monitorId] = [];
} }
}, },
mounted() { mounted() {
if (this.size === "small") { if (this.size === "small") {
this.beatWidth = 5.6; this.beatWidth = 5;
this.beatMargin = 2.4; this.beatHeight = 16;
this.beatHeight = 16 this.beatMargin = 2;
}
// Suddenly, have an idea how to handle it universally.
// If the pixel * ratio != Integer, then it causes render issue, round it to solve it!!
const actualWidth = this.beatWidth * window.devicePixelRatio;
const actualMargin = this.beatMargin * window.devicePixelRatio;
if (! Number.isInteger(actualWidth)) {
this.beatWidth = Math.round(actualWidth) / window.devicePixelRatio;
console.log(this.beatWidth);
}
if (! Number.isInteger(actualMargin)) {
this.beatMargin = Math.round(actualMargin) / window.devicePixelRatio;
} }
window.addEventListener("resize", this.resize); window.addEventListener("resize", this.resize);

View file

@ -8,5 +8,11 @@
8. Import your language file in `src/main.js` and add it to `languageList` constant. 8. Import your language file in `src/main.js` and add it to `languageList` constant.
9. Make a [pull request](https://github.com/louislam/uptime-kuma/pulls) when you have done. 9. Make a [pull request](https://github.com/louislam/uptime-kuma/pulls) when you have done.
One of good examples:
https://github.com/louislam/uptime-kuma/pull/316/files
If you do not have programming skills, let me know in [Issues section](https://github.com/louislam/uptime-kuma/issues). I will assist you. 😏 If you do not have programming skills, let me know in [Issues section](https://github.com/louislam/uptime-kuma/issues). I will assist you. 😏

View file

@ -70,7 +70,7 @@ export default {
Timezone: "Zeitzone", Timezone: "Zeitzone",
"Search Engine Visibility": "Suchmaschinensichtbarkeit", "Search Engine Visibility": "Suchmaschinensichtbarkeit",
"Allow indexing": "Indizierung zulassen", "Allow indexing": "Indizierung zulassen",
"Discourage search engines from indexing site": "Halte Suchmaschinen von der Indexierung der Site ab", "Discourage search engines from indexing site": "Halte Suchmaschinen von der Indexierung der Seite ab",
"Change Password": "Passwort ändern", "Change Password": "Passwort ändern",
"Current Password": "Dezeitiges Passwort", "Current Password": "Dezeitiges Passwort",
"New Password": "Neues Passwort", "New Password": "Neues Passwort",
@ -96,10 +96,10 @@ export default {
Email: "E-Mail", Email: "E-Mail",
Test: "Test", Test: "Test",
"Certificate Info": "Zertifikatsinfo", "Certificate Info": "Zertifikatsinfo",
keywordDescription: "Suche nach einen Schlüsselwort in einer schlichten HTML oder JSON Ausgabe. Bitte beachte, es wird in der Groß-/Kleinschreibung unterschieden.", keywordDescription: "Suche nach einem Schlüsselwort in der HTML oder JSON Ausgabe. Bitte beachte, es wird in der Groß-/Kleinschreibung unterschieden.",
deleteMonitorMsg: "Bist du sicher das du den Monitor löschen möchtest?", deleteMonitorMsg: "Bist du sicher das du den Monitor löschen möchtest?",
deleteNotificationMsg: "Möchtest du diese Benachrichtigung wirklich für alle Monitore löschen?", deleteNotificationMsg: "Möchtest du diese Benachrichtigung wirklich für alle Monitore löschen?",
resoverserverDescription: "Cloudflare ist der Standardserver, dieser kann jederzeit geändern werden.", resoverserverDescription: "Cloudflare ist als der Standardserver festgelegt, dieser kann jederzeit geändern werden.",
"Resolver Server": "Auflösungsserver", "Resolver Server": "Auflösungsserver",
rrtypeDescription: "Wähle den RR-Typ aus, welchen du überwachen möchtest.", rrtypeDescription: "Wähle den RR-Typ aus, welchen du überwachen möchtest.",
"Last Result": "Letztes Ergebnis", "Last Result": "Letztes Ergebnis",
@ -113,6 +113,6 @@ export default {
"Create your admin account": "Erstelle dein Admin Konto", "Create your admin account": "Erstelle dein Admin Konto",
"Repeat Password": "Wiederhole das Passwort", "Repeat Password": "Wiederhole das Passwort",
"Resource Record Type": "Resource Record Type", "Resource Record Type": "Resource Record Type",
respTime: "Resp. Time (ms)", respTime: "Antw. Zeit (ms)",
notAvailableShort: "N/A" notAvailableShort: "N/A"
} }

View file

@ -88,7 +88,7 @@ export default {
"Enable Auth": "인증 켜기", "Enable Auth": "인증 켜기",
Logout: "로그아웃", Logout: "로그아웃",
Leave: "나가기", Leave: "나가기",
"I understand, please disable": "기능에 대해 이해했요.", "I understand, please disable": "기능에 대해 이해했으니 꺼주세요.",
Confirm: "확인", Confirm: "확인",
Yes: "확인", Yes: "확인",
No: "취소", No: "취소",
@ -107,6 +107,6 @@ export default {
"Last Result": "최근 결과", "Last Result": "최근 결과",
"Create your admin account": "관리자 계정 만들기", "Create your admin account": "관리자 계정 만들기",
"Repeat Password": "비밀번호 재입력", "Repeat Password": "비밀번호 재입력",
respTime: "Resp. Time (ms)", respTime: "응답 시간 (ms)",
notAvailableShort: "N/A" notAvailableShort: "N/A"
} }

112
src/languages/nl-NL.js Normal file
View file

@ -0,0 +1,112 @@
export default {
languageName: "Nederlands",
checkEverySecond: "Controleer elke {0} seconden.",
"Avg.": "Gem. ",
retriesDescription: "Maximum aantal nieuwe pogingen voordat de service wordt gemarkeerd als niet beschikbaar en er een melding wordt verzonden",
ignoreTLSError: "Negeer TLS/SSL-fout voor HTTPS-websites",
upsideDownModeDescription: "Draai de status om. Als de service bereikbaar is, is deze OFFLINE.",
maxRedirectDescription: "Maximaal aantal te volgen omleidingen. Stel in op 0 om omleidingen uit te schakelen.",
acceptedStatusCodesDescription: "Selecteer statuscodes die als een succesvol antwoord worden beschouwd.",
passwordNotMatchMsg: "Het herhaalwachtwoord komt niet overeen.",
notificationDescription: "Wijs a.u.b. een melding toe aan de monitor(s) om het te laten werken.",
keywordDescription: "Zoek trefwoord in gewone html of JSON-response en het is hoofdlettergevoelig",
pauseDashboardHome: "Gepauzeerd",
deleteMonitorMsg: "Weet u zeker dat u deze monitor wilt verwijderen?",
deleteNotificationMsg: "Weet u zeker dat u deze melding voor alle monitoren wilt verwijderen?",
resoverserverDescription: "Cloudflare is de standaardserver, u kunt de resolver server op elk moment wijzigen.",
rrtypeDescription: "Selecteer het RR-type dat u wilt monitoren",
pauseMonitorMsg: "Weet je zeker dat je wilt pauzeren?",
Settings: "Instellingen",
Dashboard: "Dashboard",
"New Update": "Nieuwe update",
Language: "Taal",
Appearance: "Weergave",
Theme: "Thema",
General: "Algemeen",
Version: "Versie",
"Check Update On GitHub": "Controleer voor updates op GitHub",
List: "Lijst",
Add: "Toevoegen",
"Add New Monitor": "Nieuwe monitor toevoegen",
"Quick Stats": "Snelle statistieken",
Up: "Online",
Down: "Offline",
Pending: "In afwachting",
Unknown: "Onbekend",
Pause: "Pauze",
Name: "Naam",
Status: "Status",
DateTime: "Datum Tijd",
Message: "Bericht",
"No important events": "Geen belangrijke gebeurtenissen",
Resume: "Hervat",
Edit: "Wijzigen",
Delete: "Verwijderen",
Current: "Huidig",
Uptime: "Uptime",
"Cert Exp.": "Cert. verl.",
days: "dagen",
day: "dag",
"-day": "-dag",
hour: "uur",
"-hour": "-uur",
Response: "Antwoord",
Ping: "Ping",
"Monitor Type": "Monitortype:",
Keyword: "Trefwoord",
"Friendly Name": "Vriendelijke naam",
URL: "URL",
Hostname: "Hostnaam",
Port: "Poort",
"Heartbeat Interval": "Hartslaginterval",
Retries: "Pogingen",
Advanced: "Geavanceerd",
"Upside Down Mode": "Ondersteboven modus",
"Max. Redirects": "Max. Omleidingen",
"Accepted Status Codes": "Geaccepteerde statuscodes",
Save: "Opslaan",
Notifications: "Meldingen",
"Not available, please setup.": "Niet beschikbaar, stel a.u.b. in.",
"Setup Notification": "Melding instellen",
Light: "Licht",
Dark: "Donker",
Auto: "Auto",
"Theme - Heartbeat Bar": "Thema - Hartslagbalk",
Normal: "Normaal",
Bottom: "Onderkant",
None: "Geen",
Timezone: "Tijdzone",
"Search Engine Visibility": "Zichtbaarheid voor zoekmachines",
"Allow indexing": "Indexering toestaan",
"Discourage search engines from indexing site": "Ontmoedig zoekmachines om de site te indexeren",
"Change Password": "Verander wachtwoord",
"Current Password": "Huidig wachtwoord",
"New Password": "Nieuw wachtwoord",
"Repeat New Password": "Herhaal nieuw wachtwoord",
"Update Password": "Vernieuw wachtwoord",
"Disable Auth": "Autorisatie uitschakelen",
"Enable Auth": "Autorisatie inschakelen",
Logout: "Uitloggen",
Leave: "Vertrekken",
"I understand, please disable": "Ik begrijp het, schakel a.u.b. uit",
Confirm: "Bevestigen",
Yes: "Ja",
No: "Nee",
Username: "Gebruikersnaam",
Password: "Wachtwoord",
"Remember me": "Wachtwoord onthouden",
Login: "Inloggen",
"No Monitors, please": "Geen monitoren, ",
"add one": "voeg een toe",
"Notification Type": "Melding type",
Email: "E-mail",
Test: "Testen",
"Certificate Info": "Certificaat informatie",
"Resolver Server": "Resolver Server",
"Resource Record Type": "Type bronrecord",
"Last Result": "Laatste resultaat",
"Create your admin account": "Maak uw beheerdersaccount aan",
"Repeat Password": "Herhaal wachtwoord",
respTime: "resp. tijd (ms)",
notAvailableShort: "N.v.t."
}

View file

@ -1,14 +1,14 @@
export default { export default {
languageName: "Swedish", languageName: "Svenska",
checkEverySecond: "Uppdatera var {0} sekund.", checkEverySecond: "Uppdatera var {0} sekund.",
"Avg.": "Genomsnitt ", "Avg.": "Genomsnittligt ",
retriesDescription: "Max antal försök innan tjänsten markeras som nere och en notis skickas", retriesDescription: "Max antal försök innan tjänsten markeras som nere och en notis skickas",
ignoreTLSError: "Ignorera TLS/SSL-fel för webbsidor med HTTPS", ignoreTLSError: "Ignorera TLS/SSL-fel för webbsidor med HTTPS",
upsideDownModeDescription: "Vänd upp och ner på statusen. Om tjänsten är nåbar visas den som NERE.", upsideDownModeDescription: "Vänd upp och ner på statusen. Om tjänsten är nåbar visas den som NERE.",
maxRedirectDescription: "Max antal omdirigeringar att följa. Välj 0 för att avaktivera omdirigeringar.", maxRedirectDescription: "Max antal omdirigeringar att följa. Välj 0 för att avaktivera omdirigeringar.",
acceptedStatusCodesDescription: "Välj statuskoder som räknas som lyckade.", acceptedStatusCodesDescription: "Välj statuskoder som räknas som lyckade.",
passwordNotMatchMsg: "Det bekräftade lösenordet stämmer ej överens.", passwordNotMatchMsg: "Det bekräftade lösenordet stämmer ej överens.",
notificationDescription: "Vänligen lägg till en notistjänst till övervakaren.", notificationDescription: "Vänligen lägg till en notistjänst till dina övervakare.",
keywordDescription: "Sök efter nyckelord i ren HTML eller JSON-svar. Sökningen är skiftkänslig.", keywordDescription: "Sök efter nyckelord i ren HTML eller JSON-svar. Sökningen är skiftkänslig.",
pauseDashboardHome: "Pausa", pauseDashboardHome: "Pausa",
deleteMonitorMsg: "Är du säker på att du vill ta bort den här övervakningen?", deleteMonitorMsg: "Är du säker på att du vill ta bort den här övervakningen?",
@ -33,10 +33,10 @@ export default {
Down: "Nere", Down: "Nere",
Pending: "Pågående", Pending: "Pågående",
Unknown: "Okänt", Unknown: "Okänt",
Pause: "Paus", Pause: "Pausa",
Name: "Namn", Name: "Namn",
Status: "Status", Status: "Status",
DateTime: "DatumTid", DateTime: "Datum & Tid",
Message: "Meddelande", Message: "Meddelande",
"No important events": "Inga viktiga händelser", "No important events": "Inga viktiga händelser",
Resume: "Återuppta", Resume: "Återuppta",
@ -44,17 +44,17 @@ export default {
Delete: "Ta bort", Delete: "Ta bort",
Current: "Nuvarande", Current: "Nuvarande",
Uptime: "Drifttid", Uptime: "Drifttid",
"Cert Exp.": "Certifikatsutgång", "Cert Exp.": "Certifikat utgår",
days: "dagar", days: "dagar",
day: "dag", day: "dag",
"-day": "-dag", "-day": " dagar",
hour: "timme", hour: "timme",
"-hour": "-timme", "-hour": " timmar",
Response: "Svar", Response: "Svar",
Ping: "Ping", Ping: "Ping",
"Monitor Type": "Övervakningstyp", "Monitor Type": "Övervakningstyp",
Keyword: "Nyckelord", Keyword: "Nyckelord",
"Friendly Name": "Vänligt Namn", "Friendly Name": "Namn",
URL: "URL", URL: "URL",
Hostname: "Värdnamn", Hostname: "Värdnamn",
Port: "Port", Port: "Port",
@ -67,14 +67,14 @@ export default {
Save: "Spara", Save: "Spara",
Notifications: "Notiser", Notifications: "Notiser",
"Not available, please setup.": "Ej tillgänglig, vänligen konfigurera.", "Not available, please setup.": "Ej tillgänglig, vänligen konfigurera.",
"Setup Notification": "Konfigurera Notis", "Setup Notification": "Ny Notistjänst",
Light: "Ljust", Light: "Ljust",
Dark: "Mörkt", Dark: "Mörkt",
Auto: "Automatisk", Auto: "Automatiskt",
"Theme - Heartbeat Bar": "Tema - Heartbeat Bar", "Theme - Heartbeat Bar": "Tema - Heartbeat Bar",
Normal: "Normal", Normal: "Normal",
Bottom: "Botten", Bottom: "Botten",
None: "Ingen", None: "Tomt",
Timezone: "Tidszon", Timezone: "Tidszon",
"Search Engine Visibility": "Synlighet på Sökmotorer", "Search Engine Visibility": "Synlighet på Sökmotorer",
"Allow indexing": "Tillåt indexering", "Allow indexing": "Tillåt indexering",
@ -107,6 +107,6 @@ export default {
"Last Result": "Senaste resultat", "Last Result": "Senaste resultat",
"Create your admin account": "Skapa ditt administratörskonto", "Create your admin account": "Skapa ditt administratörskonto",
"Repeat Password": "Upprepa Lösenord", "Repeat Password": "Upprepa Lösenord",
respTime: "Resp. Time (ms)", respTime: "Svarstid (ms)",
notAvailableShort: "N/A" notAvailableShort: "Ej Tillg."
} }

View file

@ -26,6 +26,7 @@ import { appName } from "./util.ts";
import en from "./languages/en"; import en from "./languages/en";
import zhHK from "./languages/zh-HK"; import zhHK from "./languages/zh-HK";
import deDE from "./languages/de-DE"; import deDE from "./languages/de-DE";
import nlNL from "./languages/nl-NL";
import esEs from "./languages/es-ES"; import esEs from "./languages/es-ES";
import fr from "./languages/fr"; import fr from "./languages/fr";
import ja from "./languages/ja"; import ja from "./languages/ja";
@ -102,6 +103,7 @@ const languageList = {
en, en,
"zh-HK": zhHK, "zh-HK": zhHK,
"de-DE": deDE, "de-DE": deDE,
"nl-NL": nlNL,
"es-ES": esEs, "es-ES": esEs,
"fr": fr, "fr": fr,
"ja": ja, "ja": ja,

View file

@ -208,6 +208,12 @@
<p>To je za <strong>one koji imaju dodatu autentifikaciju</strong> ispred Uptime Kuma kao na primer Cloudflare Access.</p> <p>To je za <strong>one koji imaju dodatu autentifikaciju</strong> ispred Uptime Kuma kao na primer Cloudflare Access.</p>
<p>Molim Vas koristite ovo sa pažnjom.</p> <p>Molim Vas koristite ovo sa pažnjom.</p>
</template> </template>
<template v-if="$i18n.locale === 'ko-KR' ">
<p>정말로 <strong>인증 기능을 끌까요</strong>?</p>
<p> 기능은 <strong>Cloudflare Access와 같은 서드파티 인증</strong> Uptime Kuma 앞에 사용자를 위한 기능이에요.</p>
<p>신중하게 사용하세요.</p>
</template>
</Confirm> </Confirm>
<Confirm ref="confirmClearStatistics" btn-style="btn-danger" :yes-text="$t('Yes')" :no-text="$t('No')" @yes="clearStatistics"> <Confirm ref="confirmClearStatistics" btn-style="btn-danger" :yes-text="$t('Yes')" :no-text="$t('No')" @yes="clearStatistics">