First of all, thank you everyone who made pull requests for Uptime Kuma, I never thought GitHub Community can be that nice! And also because of this, I also never thought other people actually read my code and edit my code. It is not structured and commented so well, lol. Sorry about that.
First of all, thank you everyone who made pull requests for Uptime Kuma, I never thought GitHub Community can be that nice! And also because of this, I also never thought other people actually read my code and edit my code. It is not structured and commented so well, lol. Sorry about that.
The project was created with vite.js (vue3). Then I created a sub-directory called "server" for server part. Both frontend and backend share the same package.json.
The project was created with vite.js (vue3). Then I created a subdirectory called "server" for server part. Both frontend and backend share the same package.json.
The frontend code build into "dist" directory. The server (express.js) exposes the "dist" directory as root of the endpoint. This is how production is working.
The frontend code build into "dist" directory. The server (express.js) exposes the "dist" directory as root of the endpoint. This is how production is working.
@ -27,11 +27,10 @@ The frontend code build into "dist" directory. The server (express.js) exposes t
## Can I create a pull request for Uptime Kuma?
## Can I create a pull request for Uptime Kuma?
Generally, if the pull request is working fine and it do not affect any existing logic, workflow and performance, I will merge into the master branch once it is tested.
Generally, if the pull request is working fine, and it does not affect any existing logic, workflow and performance, I will merge into the master branch once it is tested.
If you are not sure whether I will accept your pull request, feel free to create an empty pull request draft first.
If you are not sure whether I will accept your pull request, feel free to create an empty pull request draft first.
### Recommended Pull Request Guideline
### Recommended Pull Request Guideline
1. Fork the project
1. Fork the project
@ -41,7 +40,7 @@ If you are not sure whether I will accept your pull request, feel free to create
1. Create a pull request: https://github.com/louislam/uptime-kuma/compare
1. Create a pull request: https://github.com/louislam/uptime-kuma/compare
1. Write a proper description
1. Write a proper description
1. Click "Change to draft"
1. Click "Change to draft"
### Pull Request Examples
### Pull Request Examples
@ -66,7 +65,7 @@ I do not have such knowledge to test it.
#### ⚠ Low Priority - Harsh Mode
#### ⚠ Low Priority - Harsh Mode
Some pull requests are required to modify the core. To be honest, I do not want anyone to try to do that, because it would spend a lot of your time. I will review your pull request harshly. Also you may need to write a lot of unit tests to ensure that there is no breaking change.
Some pull requests are required to modify the core. To be honest, I do not want anyone to try to do that, because it would spend a lot of your time. I will review your pull request harshly. Also, you may need to write a lot of unit tests to ensure that there is no breaking change.
- Touch large parts of code of any very important features
- Touch large parts of code of any very important features
- Touch monitoring logic
- Touch monitoring logic
@ -74,7 +73,6 @@ Some pull requests are required to modify the core. To be honest, I do not want
- Touch the entry point of Docker or Node.js
- Touch the entry point of Docker or Node.js
- Modify auth
- Modify auth
#### *️⃣ Low Priority
#### *️⃣ Low Priority
It changed my current workflow and require further studies.
It changed my current workflow and require further studies.
@ -143,7 +141,7 @@ express.js is just used for serving the frontend built files (index.html, .js an
It is a temporary live demo, all data will be deleted after 10 minutes. The server is located at Tokyo, so if you live far from there it may affect your experience. I suggest that you should install and try it out for the best demo experience.
It is a temporary live demo, all data will be deleted after 10 minutes. The server is located in Tokyo, so if you live far from there, it may affect your experience. I suggest that you should install and try it out for the best demo experience.
VPS is sponsored by Uptime Kuma sponsors on [Open Collective](https://opencollective.com/uptime-kuma)! 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
* Monitoring uptime for HTTP(s) / TCP / Ping / DNS Record / Push.
* Monitoring uptime for HTTP(s) / TCP / HTTP(s) Keyword / Ping / DNS Record / Push / Steam Game Server.
* Fancy, Reactive, Fast UI/UX.
* Fancy, Reactive, Fast UI/UX.
* Notifications via Telegram, Discord, Gotify, Slack, Pushover, Email (SMTP), and [70+ notification services, click here for the full list](https://github.com/louislam/uptime-kuma/tree/master/src/components/notifications).
* Notifications via Telegram, Discord, Gotify, Slack, Pushover, Email (SMTP), and [70+ notification services, click here for the full list](https://github.com/louislam/uptime-kuma/tree/master/src/components/notifications).
* 20 second intervals.
* 20 second intervals.
@ -67,7 +67,7 @@ Browse to http://localhost:3001 after starting.
### Advanced Installation
### Advanced Installation
If you need more options or need to browse via a reserve proxy, please read:
If you need more options or need to browse via a reverse proxy, please read:
steamApiKeyDescription:"For monitoring a Steam Game Server you need a Steam Web-API key. You can register your API key here: ",
steamApiKeyDescription:"For monitoring a Steam Game Server you need a Steam Web-API key. You can register your API key here: ",
"Current User":"Current User",
"Current User":"Current User",
recent:"Recent",
recent:"Recent",
Done:"Done",
Info:"Info",
Security:"Security",
"Steam API Key":"Steam API Key",
"Shrink Database":"Shrink Database",
"Pick a RR-Type...":"Pick a RR-Type...",
"Pick Accepted Status Codes...":"Pick Accepted Status Codes...",
Default:"Default",
"HTTP Options":"HTTP Options",
"Create Incident":"Create Incident",
Title:"Title",
Content:"Content",
Style:"Style",
info:"info",
warning:"warning",
danger:"danger",
primary:"primary",
light:"light",
dark:"dark",
Post:"Post",
"Please input title and content":"Please input title and content",
Created:"Created",
"Last Updated":"Last Updated",
Unpin:"Unpin",
"Switch to Light Theme":"Switch to Light Theme",
"Switch to Dark Theme":"Switch to Dark Theme",
"Show Tags":"Show Tags",
"Hide Tags":"Hide Tags",
Description:"Description",
"No monitors available.":"No monitors available.",
"Add one":"Add one",
"No Monitors":"No Monitors",
"Add one":"Add one",
"Untitled Group":"Untitled Group",
Services:"Services",
Discard:"Discard",
Cancel:"Cancel",
"Powered by":"Powered by",
shrinkDatabaseDescription:"Trigger database VACUUM for SQLite. If your database is created after 1.10.0, AUTO_VACUUM is already enabled and this action is not needed.",
shrinkDatabaseDescription:"Trigger database VACUUM for SQLite. If your database is created after 1.10.0, AUTO_VACUUM is already enabled and this action is not needed.",
retriesDescription:"Maximális próbálkozás mielőtt a szolgáltatás leállt jelőlést kap és értesítés kerül kiküldésre",
retriesDescription:"Maximális próbálkozás mielőtt a szolgáltatás 'Leállt' jelölést kap és értesítés kerül kiküldésre",
ignoreTLSError:"TLS/SSL hibák figyelnen kívül hagyása HTTPS weboldalaknál",
ignoreTLSError:"TLS/SSL hibák figyelmen kívül hagyása HTTPS weboldalaknál",
upsideDownModeDescription:"Az állapot megfordítása. Ha a szolgáltatás elérhető, akkor lesz leállt állapotú.",
upsideDownModeDescription:"Az állapot megfordítása. Ha a szolgáltatás elérhető, akkor lesz leállt állapotú.",
maxRedirectDescription:"Az átirányítások maximális száma. állítsa 0-ra az átirányítás tiltásához.",
maxRedirectDescription:"Az átirányítások maximális száma. állítsa 0-ra az átirányítás tiltásához.",
acceptedStatusCodesDescription:"Válassza ki az állapot kódokat amelyek sikeres válasznak fognak számítani.",
acceptedStatusCodesDescription:"Válassza ki az állapot kódokat amelyek sikeres válasznak fognak számítani.",
passwordNotMatchMsg:"A megismételt jelszó nem egyezik.",
passwordNotMatchMsg:"A megismételt jelszó nem egyezik.",
notificationDescription:"Kérem, rendeljen egy értesítést a figyeléshez, hogy működjön.",
notificationDescription:"Kérem, rendeljen egy értesítést a figyeléshez, hogy működjön.",
keywordDescription:"Kulcsszó keresése a html-ben vagy a JSON válaszban. (kis-nagybetű érzékeny)",
keywordDescription:"Kulcsszó keresése a HTML-ben vagy a JSON válaszban. (kis-nagybetű érzékeny)",
pauseDashboardHome:"Szünetel",
pauseDashboardHome:"Szünetel",
deleteMonitorMsg:"Biztos, hogy törölni akarja ezt a figyelőt?",
deleteMonitorMsg:"Biztos, hogy törölni akarja ezt a figyelőt?",
deleteNotificationMsg:"Biztos, hogy törölni akarja ezt az értesítést az összes figyelőnél?",
deleteNotificationMsg:"Biztos, hogy törölni akarja ezt az értesítést az összes figyelőnél?",
resoverserverDescription:"A Cloudflare az alapértelmezett szerver, bármikor meg tudja változtatni a resolver server-t.",
resoverserverDescription:"A Cloudflare az alapértelmezett szerver, bármikor meg tudja változtatni a resolver server-t.",
rrtypeDescription:"Válassza ki az RR-Típust a figyelőhöz",
rrtypeDescription:"Válassza ki az RR-típust a figyelőhöz",
pauseMonitorMsg:"Biztos, hogy szüneteltetni akarja?",
pauseMonitorMsg:"Biztos, hogy szüneteltetni akarja?",
enableDefaultNotificationDescription:"Minden új figyelőhöz ez az értesítés engedélyezett lesz alapértelmezetten. Kikapcsolhatja az értesítést külön minden figyelőnél.",
enableDefaultNotificationDescription:"Minden új figyelőhöz ez az értesítés engedélyezett lesz alapértelmezetten. Kikapcsolhatja az értesítést külön minden figyelőnél.",
clearEventsMsg:"Biztos, hogy törölni akar miden eseményt ennél a figyelnél?",
clearEventsMsg:"Biztos, hogy törölni akar miden eseményt ennél a figyelnél?",
clearHeartbeatsMsg:"Biztos, hogy törölni akar minden heartbeat-et ennél a figyelőnél?",
clearHeartbeatsMsg:"Biztos, hogy törölni akar minden életjelet ennél a figyelőnél?",
confirmClearStatisticsMsg:"Biztos, hogy törölni akat MINDEN statisztikát?",
confirmClearStatisticsMsg:"Biztos, hogy törölni akar MINDEN statisztikát?",
importHandleDescription:"Válassza a 'Meglévő kihagyását', ha ki szeretné hagyni az azonos nevő figyelőket vagy értesítésket. A 'Felülírás' törölni fog minden meglévő figyelőt és értesítést.",
importHandleDescription:"Válassza a 'Meglévő kihagyását', ha ki szeretné hagyni az azonos nevő figyelőket vagy értesítésket. A 'Felülírás' törölni fog minden meglévő figyelőt és értesítést.",
confirmImportMsg:"Biztos, hogy importálja a mentést? Győzödjön meg róla, hogy jól választotta ki az importálás opciót.",
confirmImportMsg:"Biztos, hogy importálja a mentést? Győződjön meg róla, hogy jól választotta ki az importálás opciót.",
twoFAVerifyLabel:"Kérem, adja meg a token-t, hogy a 2FA működését ellenőrizzük",
twoFAVerifyLabel:"Kérem, adja meg a token-t, hogy a 2FA működését ellenőrizzük",
tokenValidSettingsMsg:"A token érvényes! El tudja menteni a 2FA beállításait.",
tokenValidSettingsMsg:"A token érvényes! El tudja menteni a 2FA beállításait.",
confirmEnableTwoFAMsg:"Biztosan engedélyezi a 2FA-t?",
confirmEnableTwoFAMsg:"Biztosan engedélyezi a 2FA-t?",
wayToGetLineChannelToken:"{0} első eléréséhez készítsen egy Provider-t és csatornát (Messaging API), utána kaphatja meg a csatorna elérési token-t és felhasználó ID-t az alábbi menüpontban.",
"Icon URL":"Ikon cím (URL)",
aboutIconURL:"Megadhat egy webcímet az Ikon cím mezőben, ezzel felülírva az alapértelmezet képet. Nem kerül felhasználásra, ha az Emoji-k be vannak állítva.",
aboutMattermostChannelName:"Felülírhatja az alapértelmezett csatornát, ahova a webhook az adatokat küldi. Ehhez töltse ki a \"Csatorna neve\" mezőt (pl: #egyeb-csatorna). A Mattermost webhook beállításaiban további engedélyek szükségesek",
matrix:"Matrix",
promosmsTypeEco:"SMS ECO - olcsó, de lassú, gyakran túlterhelt. Csak lengyel címzettekhez.",
promosmsTypeFlash:"SMS FLASH - Az üzenet automatikusan megjelenik a fogadó eszközön. Csak lengyel címzettekhez.",
promosmsTypeFull:"SMS FULL - Prémium szintje az SMS-nek. Megadható a feladó neve, de előtte jóváhagyás szükséges. Ideális értesítésekhez.",
promosmsTypeSpeed:"SMS SPEED - A legmagasabb prioritás a rendszerben. Nagyon gyors és pontos, de költséges (kb. duplája a hagyományos SMS-nek).",
promosmsPhoneNumber:"Telefonszám (lengyel címzett esetén az országkód elhagyható)",
promosmsSMSSender:"SMS feladónév: Előre beállított név vagy az alábbiak egyike: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
"Feishu WebHookUrl":"Feishu webhook cím (URL)",
matrixHomeserverURL:"Homeserver cím (URL http(s):// előtaggal és opcionálisan port-tal)",
"Internal Room Id":"Belső Szoba ID",
matrixDesc1:"A belső szoba ID-t a szpbák speciális beállítások között találja meg a Matrix kliens programban. Így kell kinéznie: !QMdRCpUIfLwsfjxye6:home.server.",
matrixDesc2:"Erősen ajánlott készíteni egy új felhasználót és nem a teljes joggal rendelkező felhasználót használni. Az új felhasználó létrehozása után csak azokba a szobákba kell megjhívni a felhasználót, ahol értesítéseket szeretne kapni. Ezzel a művelettel lehet elérési token-t kérni: {0}",
Method:"Metódus",
Body:"Törzs",
Headers:"Fejlécek",
PushUrl:"Push cím (URL)",
HeadersInvalidFormat:"A kérés fejléc nem egy valós JSON: ",
BodyInvalidFormat:"A kérés törzse nem egy valós JSON: ",
steamApiKeyDescription:"Steam Game Server ellenőrzéséhez szükséges egy Steam Web-API kulcs. Itt létrehozhat egy API kulcsot: ",
"Current User":"Felhasználó",
recent:"Legújabb",
Done:"Kész",
Info:"Infó",
Security:"Biztonság",
"Steam API Key":"Steam API kulcs",
"Shrink Database":"Adatbázis tömörítése",
"Pick a RR-Type...":"Válasszon egy RR-típust...",
"Pick Accepted Status Codes...":"Válasszon olyan kódot, ami elfogadottnak számít...",
Default:"Alapért.",
"HTTP Options":"HTTP beállítások",
"Create Incident":"Incidens létrehozása",
Title:"Cím",
Content:"Tartalom",
Style:"Stílus",
info:"info",
warning:"warning",
danger:"danger",
primary:"primary",
light:"light",
dark:"dark",
Post:"Bejegyzés",
"Please input title and content":"Adjon meg címet és tartalmat",
Created:"Létrehozva",
"Last Updated":"Utolsó mód.",
Unpin:"Leválaszt",
"Switch to Light Theme":"Világos témára váltás",
"Switch to Dark Theme":"Sötét témára váltás",
"Show Tags":"Címkék mutatása",
"Hide Tags":"Címkék elrejtése",
Description:"Leírás",
"No monitors available.":"Nincs még figyelő beállítva.",
"Add one":"Adjon hozzá egyet",
"No Monitors":"Nincs figyelő",
"Untitled Group":"Névtelen csoport",
Services:"Szolgáltatások",
Discard:"Elvet",
Cancel:"Mégsem",
"Powered by":"A megoldást szállítja az",
shrinkDatabaseDescription:"VACUUM futtatása az SQLite-on. Ha az adatbázisod 1.10.0-nál újabb, akkor az AUTO_VACUUM engedélyezve van, nincs szükség a műveletre.",
matrixDesc2:"È altamente raccomandata la creazione di un nuovo utente e di non utilizare il proprio token di accesso Matrix poiché darà pieno controllo al proprio account e a tutte le stanze in cui si ha accesso. Piuttosto, si crei un nuovo utente per invitarlo nella stanza dove si vuole ricevere le notifiche. Si può accedere al token eseguendo {0}",
matrixDesc2:"È altamente raccomandata la creazione di un nuovo utente e di non utilizare il proprio token di accesso Matrix poiché darà pieno controllo al proprio account e a tutte le stanze in cui si ha accesso. Piuttosto, si crei un nuovo utente per invitarlo nella stanza dove si vuole ricevere le notifiche. Si può accedere al token eseguendo {0}",
Method:"Metodo",
Method:"Metodo",
Body:"Corpo",
Body:"Corpo",
Headers:"Headers",
Headers:"Intestazioni",
PushUrl:"URL di Push",
PushUrl:"URL di Push",
HeadersInvalidFormat:"L'header di richiesta non è un JSON valido: ",
HeadersInvalidFormat:"L'intestazione di richiesta non è un JSON valido: ",
BodyInvalidFormat:"Il corpo di richiesta non è un JSON valido: ",
BodyInvalidFormat:"Il corpo di richiesta non è un JSON valido: ",
"Monitor History":"Storico monitoraggio",
"Monitor History":"Storico monitoraggio",
clearDataOlderThan:"Mantieni lo storico per {0} giorni.",
clearDataOlderThan:"Mantieni lo storico per {0} giorni.",
@ -307,5 +307,48 @@ export default {
steamApiKeyDescription:"Per monitorare un server di gioco Steam si necessita della chiave Web-API di Steam. È possibile registrare la propria chiave API qui: ",
steamApiKeyDescription:"Per monitorare un server di gioco Steam si necessita della chiave Web-API di Steam. È possibile registrare la propria chiave API qui: ",
"Current User":"Utente corrente",
"Current User":"Utente corrente",
recent:"Recenti",
recent:"Recenti",
Done:"Fatto",
Info:"Info",
Security:"Sicurezza",
"Steam API Key":"Chiave API di Steam",
"Shrink Database":"Comprimi Database",
"Pick a RR-Type...":"Scegli un tipo di RR...",
"Pick Accepted Status Codes...":"Scegli i codici di Stato Accettati...",
Default:"Predefinito",
"HTTP Options":"Opzioni HTTP",
"Create Incident":"Crea Incident",
Title:"Titolo",
Content:"Contenuto",
Style:"Stile",
info:"informativo",
warning:"attenzione",
danger:"critico",
primary:"primario",
light:"chiaro",
dark:"scuro",
Post:"Posta",
"Please input title and content":"Inserire il titolo e il contenuto",
Created:"Creato",
"Last Updated":"Ultima modifica",
Unpin:"Stacca",
"Switch to Light Theme":"Utilizza tema chiaro",
"Switch to Dark Theme":"Utilizza tema scuro",
"Show Tags":"Mostra etichette",
"Hide Tags":"Nascondi etichette",
Description:"Descrizione",
"No monitors available.":"Nessun monitoraggio disponibile.",
"Add one":"Aggiungi",
"No Monitors":"Nessun monitoraggio",
"Add one":"Aggiungi",
"Untitled Group":"Gruppo senza titolo",
Services:"Servizi",
Discard:"Scarta",
Cancel:"Annulla",
"Powered by":"Servito da",
shrinkDatabaseDescription:"Lancia il comando VACUUM sul database SQLite. Se il database è stato creato dopo la versione 1.10.0, AUTO_VACUUM è già abilitato e questa azione non è necessaria.",
shrinkDatabaseDescription:"Lancia il comando VACUUM sul database SQLite. Se il database è stato creato dopo la versione 1.10.0, AUTO_VACUUM è già abilitato e questa azione non è necessaria.",
serwersms:"SerwerSMS.pl",
serwersmsAPIUser:"Nome utente API (incl. prefisso webapi_)",
serwersmsAPIPassword:"Password API",
serwersmsPhoneNumber:"Numero di Telefono",
serwersmsSenderName:"Nome del mittente SMS (registrato via portale cliente)",