Compare commits

..

812 commits

Author SHA1 Message Date
Wampie Driessen
1557f58118 Appease vue linter 2024-11-18 12:35:28 +01:00
Wampie Driessen
836199dea5 Fix that localeSelector hides/shows on config change 2024-11-18 12:31:44 +01:00
Wampie Driessen
b75580003f Fix linter warning 2024-11-18 12:07:00 +01:00
Wampie Driessen
c3b4ad85e5 Convert migration to knex migration 2024-11-18 12:07:00 +01:00
Wampie Driessen
7226686bde Update src/mixins/lang.js 2024-11-18 12:05:28 +01:00
Wampie Driessen
24968f331b Update src/mixins/lang.js 2024-11-18 12:05:28 +01:00
Wampie Driessen
995b115d27 Update src/mixins/lang.js
Co-authored-by: Matthew Nickson <mnickson@sidingsmedia.com>
2024-11-18 12:05:28 +01:00
Wampie Driessen
a483ea6a8f Fix linter issues 2024-11-18 12:05:28 +01:00
Wampie Driessen
457a3e75dd Allow a 'default locale' and locale switcher on status pages 2024-11-18 12:05:24 +01:00
Ionys
8a432ac937
fix(status page): Make sure the group deletion is correctly handled when groupIDList is empty (#5340)
Some checks failed
Auto Test / check-linters (push) Has been cancelled
Auto Test / armv7-simple-test (18, ARMv7) (push) Has been cancelled
Auto Test / armv7-simple-test (20, ARMv7) (push) Has been cancelled
Auto Test / e2e-test (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
Merge Conflict Labeler / Labeling (push) Has been cancelled
validate / json-yaml-validate (push) Has been cancelled
validate / validate (push) Has been cancelled
Auto Test / auto-test (18, ARM64) (push) Has been cancelled
Auto Test / auto-test (18, macos-latest) (push) Has been cancelled
Auto Test / auto-test (18, ubuntu-latest) (push) Has been cancelled
Auto Test / auto-test (18, windows-latest) (push) Has been cancelled
Auto Test / auto-test (20, ARM64) (push) Has been cancelled
Auto Test / auto-test (20, macos-latest) (push) Has been cancelled
Auto Test / auto-test (20, ubuntu-latest) (push) Has been cancelled
Auto Test / auto-test (20, windows-latest) (push) Has been cancelled
2024-11-12 19:00:09 +01:00
Dorence Deng
778363a948
fix(notification): #5323 fix EditMonitor.vue useToast error (#5333)
Some checks failed
Auto Test / e2e-test (push) Has been cancelled
Auto Test / armv7-simple-test (18, ARMv7) (push) Has been cancelled
Auto Test / armv7-simple-test (20, ARMv7) (push) Has been cancelled
Auto Test / check-linters (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
Merge Conflict Labeler / Labeling (push) Has been cancelled
validate / json-yaml-validate (push) Has been cancelled
validate / validate (push) Has been cancelled
Auto Test / auto-test (18, ARM64) (push) Has been cancelled
Auto Test / auto-test (18, macos-latest) (push) Has been cancelled
Auto Test / auto-test (18, ubuntu-latest) (push) Has been cancelled
Auto Test / auto-test (18, windows-latest) (push) Has been cancelled
Auto Test / auto-test (20, ARM64) (push) Has been cancelled
Auto Test / auto-test (20, macos-latest) (push) Has been cancelled
Auto Test / auto-test (20, ubuntu-latest) (push) Has been cancelled
Auto Test / auto-test (20, windows-latest) (push) Has been cancelled
2024-11-11 11:08:43 +01:00
Abhigyan Mohanta
6899603eb7
fix #5314 Email Address Friendly Name Error (#5318)
Some checks failed
CodeQL / Analyze (push) Has been cancelled
Merge Conflict Labeler / Labeling (push) Has been cancelled
validate / json-yaml-validate (push) Has been cancelled
validate / validate (push) Has been cancelled
Auto Test / armv7-simple-test (18, ARMv7) (push) Has been cancelled
Auto Test / armv7-simple-test (20, ARMv7) (push) Has been cancelled
Auto Test / check-linters (push) Has been cancelled
Auto Test / e2e-test (push) Has been cancelled
Auto Test / auto-test (18, ARM64) (push) Has been cancelled
Auto Test / auto-test (18, macos-latest) (push) Has been cancelled
Auto Test / auto-test (18, ubuntu-latest) (push) Has been cancelled
Auto Test / auto-test (18, windows-latest) (push) Has been cancelled
Auto Test / auto-test (20, ARM64) (push) Has been cancelled
Auto Test / auto-test (20, macos-latest) (push) Has been cancelled
Auto Test / auto-test (20, ubuntu-latest) (push) Has been cancelled
Auto Test / auto-test (20, windows-latest) (push) Has been cancelled
2024-11-09 23:30:08 +08:00
Daan Meijer
13ea190298
only allow for valid urls in slack button (#5312)
Some checks failed
Auto Test / armv7-simple-test (18, ARMv7) (push) Has been cancelled
Auto Test / armv7-simple-test (20, ARMv7) (push) Has been cancelled
Auto Test / check-linters (push) Has been cancelled
Auto Test / e2e-test (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
Merge Conflict Labeler / Labeling (push) Has been cancelled
validate / json-yaml-validate (push) Has been cancelled
validate / validate (push) Has been cancelled
Auto Test / auto-test (18, ARM64) (push) Has been cancelled
Auto Test / auto-test (18, macos-latest) (push) Has been cancelled
Auto Test / auto-test (18, ubuntu-latest) (push) Has been cancelled
Auto Test / auto-test (18, windows-latest) (push) Has been cancelled
Auto Test / auto-test (20, ARM64) (push) Has been cancelled
Auto Test / auto-test (20, macos-latest) (push) Has been cancelled
Auto Test / auto-test (20, ubuntu-latest) (push) Has been cancelled
Auto Test / auto-test (20, windows-latest) (push) Has been cancelled
2024-11-05 20:50:47 +01:00
Frank Elsinga
a7407a1b65
fix not setting a default for json monitor operations (#5295)
Some checks are pending
Auto Test / armv7-simple-test (18, ARMv7) (push) Waiting to run
Auto Test / auto-test (18, ARM64) (push) Blocked by required conditions
Auto Test / auto-test (18, macos-latest) (push) Blocked by required conditions
Auto Test / auto-test (18, ubuntu-latest) (push) Blocked by required conditions
Auto Test / auto-test (18, windows-latest) (push) Blocked by required conditions
Auto Test / auto-test (20, ARM64) (push) Blocked by required conditions
Auto Test / auto-test (20, macos-latest) (push) Blocked by required conditions
Auto Test / auto-test (20, ubuntu-latest) (push) Blocked by required conditions
Auto Test / auto-test (20, windows-latest) (push) Blocked by required conditions
Auto Test / armv7-simple-test (20, ARMv7) (push) Waiting to run
Auto Test / check-linters (push) Waiting to run
Auto Test / e2e-test (push) Waiting to run
CodeQL / Analyze (push) Waiting to run
Merge Conflict Labeler / Labeling (push) Waiting to run
validate / json-yaml-validate (push) Waiting to run
validate / validate (push) Waiting to run
2024-11-05 20:35:42 +08:00
Louis Lam
5bcde56a0f
Publish docker images to ghcr.io (#5311) 2024-11-05 20:26:26 +08:00
Louis Lam
5864c6dd88
Fix: Embedded MariaDB startup issue (#5283) 2024-11-05 20:25:08 +08:00
Ionys
595b35fb15
fix(tags): Fix the tag deletion (#5298)
Some checks failed
Auto Test / armv7-simple-test (18, ARMv7) (push) Has been cancelled
Auto Test / armv7-simple-test (20, ARMv7) (push) Has been cancelled
Auto Test / check-linters (push) Has been cancelled
Auto Test / e2e-test (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
Merge Conflict Labeler / Labeling (push) Has been cancelled
validate / json-yaml-validate (push) Has been cancelled
validate / validate (push) Has been cancelled
Auto Test / auto-test (18, ARM64) (push) Has been cancelled
Auto Test / auto-test (18, macos-latest) (push) Has been cancelled
Auto Test / auto-test (18, ubuntu-latest) (push) Has been cancelled
Auto Test / auto-test (18, windows-latest) (push) Has been cancelled
Auto Test / auto-test (20, ARM64) (push) Has been cancelled
Auto Test / auto-test (20, macos-latest) (push) Has been cancelled
Auto Test / auto-test (20, ubuntu-latest) (push) Has been cancelled
Auto Test / auto-test (20, windows-latest) (push) Has been cancelled
2024-11-02 13:09:23 +01:00
Louis Lam
0254e72177
Fix: Upload Artifact issue (#5271)
Some checks failed
Auto Test / armv7-simple-test (18, ARMv7) (push) Has been cancelled
Auto Test / armv7-simple-test (20, ARMv7) (push) Has been cancelled
Auto Test / check-linters (push) Has been cancelled
Auto Test / e2e-test (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
Merge Conflict Labeler / Labeling (push) Has been cancelled
validate / json-yaml-validate (push) Has been cancelled
validate / validate (push) Has been cancelled
Auto Test / auto-test (18, ARM64) (push) Has been cancelled
Auto Test / auto-test (18, macos-latest) (push) Has been cancelled
Auto Test / auto-test (18, ubuntu-latest) (push) Has been cancelled
Auto Test / auto-test (18, windows-latest) (push) Has been cancelled
Auto Test / auto-test (20, ARM64) (push) Has been cancelled
Auto Test / auto-test (20, macos-latest) (push) Has been cancelled
Auto Test / auto-test (20, ubuntu-latest) (push) Has been cancelled
Auto Test / auto-test (20, windows-latest) (push) Has been cancelled
2024-10-29 22:10:05 +08:00
Louis Lam
06a272c119 Update to 2.0.0-beta.0 2024-10-29 21:20:32 +08:00
Louis Lam
93cf63cb06 Fix release script 2024-10-29 21:20:32 +08:00
Louis Lam
03bdaf70ca
Translations Update from Weblate (#5198) 2024-10-29 19:31:02 +08:00
Harry Suryapambagya
65663e201b Translated using Weblate (Indonesian)
Currently translated at 100.0% (1053 of 1053 strings)

Co-authored-by: Harry Suryapambagya <harsxv@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/id/
Translation: Uptime Kuma/Uptime Kuma
2024-10-29 11:19:44 +00:00
Shubham Mishra
351a48c6a4 Translated using Weblate (Hindi)
Currently translated at 10.2% (108 of 1052 strings)

Co-authored-by: Shubham Mishra <shubhammishralpu@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hi/
Translation: Uptime Kuma/Uptime Kuma
2024-10-29 11:19:44 +00:00
Ömer Faruk Genç
88b312c882 Translated using Weblate (Turkish)
Currently translated at 100.0% (1062 of 1062 strings)

Co-authored-by: Ömer Faruk Genç <omer@farukgenc.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/tr/
Translation: Uptime Kuma/Uptime Kuma
2024-10-29 11:19:44 +00:00
netzencatura
186f150cba Translated using Weblate (Czech)
Currently translated at 96.0% (1020 of 1062 strings)

Co-authored-by: netzencatura <info@netzen.cz>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/cs/
Translation: Uptime Kuma/Uptime Kuma
2024-10-29 11:19:44 +00:00
Cyril59310
121b235056 Translated using Weblate (French)
Currently translated at 100.0% (1062 of 1062 strings)

Co-authored-by: Cyril59310 <archas.cyril@hotmail.fr>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fr/
Translation: Uptime Kuma/Uptime Kuma
2024-10-29 11:19:44 +00:00
Ilkka Myller
3df37151d8 Translated using Weblate (Finnish)
Currently translated at 100.0% (1062 of 1062 strings)

Co-authored-by: Ilkka Myller <ilkka.myller@nodefield.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fi/
Translation: Uptime Kuma/Uptime Kuma
2024-10-29 11:19:44 +00:00
AnnAngela
d6d13936f7 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1053 of 1053 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1062 of 1062 strings)

Co-authored-by: AnnAngela <naganjue@vip.qq.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/
Translation: Uptime Kuma/Uptime Kuma
2024-10-29 11:19:44 +00:00
stanol
6786466b65 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1062 of 1062 strings)

Co-authored-by: stanol <stanol777@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/uk/
Translation: Uptime Kuma/Uptime Kuma
2024-10-29 11:19:44 +00:00
Ivan Bratović
7ab7000253 Translated using Weblate (Croatian)
Currently translated at 100.0% (1062 of 1062 strings)

Co-authored-by: Ivan Bratović <ivanbratovic4@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hr/
Translation: Uptime Kuma/Uptime Kuma
2024-10-29 11:19:44 +00:00
Marco
1a75267138 Translated using Weblate (German)
Currently translated at 100.0% (1053 of 1053 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (1053 of 1053 strings)

Translated using Weblate (German)

Currently translated at 100.0% (1062 of 1062 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (1062 of 1062 strings)

Co-authored-by: Marco <marco@nanoweb.ch>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de_CH/
Translation: Uptime Kuma/Uptime Kuma
2024-10-29 11:19:44 +00:00
MrEddX
fea02d0512 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (1062 of 1062 strings)

Co-authored-by: MrEddX <mreddx@chatrix.one>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/bg/
Translation: Uptime Kuma/Uptime Kuma
2024-10-29 11:19:44 +00:00
Louis Lam
c79a3ef794
Drop exe source code (#5268) 2024-10-29 19:19:38 +08:00
Louis Lam
fed6e4bdb3
Improve the build process (#5267) 2024-10-29 19:02:49 +08:00
Ryo Hanafusa
e99fbf1ab7
docs: add slack username helptext (#5259)
Some checks are pending
Auto Test / auto-test (18, ARM64) (push) Blocked by required conditions
Auto Test / auto-test (18, macos-latest) (push) Blocked by required conditions
Auto Test / auto-test (18, ubuntu-latest) (push) Blocked by required conditions
Auto Test / auto-test (18, windows-latest) (push) Blocked by required conditions
Auto Test / auto-test (20, ARM64) (push) Blocked by required conditions
Auto Test / auto-test (20, macos-latest) (push) Blocked by required conditions
Auto Test / auto-test (20, ubuntu-latest) (push) Blocked by required conditions
Auto Test / auto-test (20, windows-latest) (push) Blocked by required conditions
Auto Test / armv7-simple-test (18, ARMv7) (push) Waiting to run
Auto Test / armv7-simple-test (20, ARMv7) (push) Waiting to run
Auto Test / check-linters (push) Waiting to run
Auto Test / e2e-test (push) Waiting to run
CodeQL / Analyze (push) Waiting to run
Merge Conflict Labeler / Labeling (push) Waiting to run
validate / json-yaml-validate (push) Waiting to run
validate / validate (push) Waiting to run
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-10-29 00:29:47 +01:00
Louis Lam
be6e5211e5
Revert #5152 (#5264)
Some checks are pending
Auto Test / check-linters (push) Waiting to run
Auto Test / e2e-test (push) Waiting to run
Auto Test / auto-test (18, ARM64) (push) Blocked by required conditions
Auto Test / auto-test (18, macos-latest) (push) Blocked by required conditions
Auto Test / auto-test (18, ubuntu-latest) (push) Blocked by required conditions
Auto Test / auto-test (18, windows-latest) (push) Blocked by required conditions
Auto Test / auto-test (20, ARM64) (push) Blocked by required conditions
Auto Test / auto-test (20, macos-latest) (push) Blocked by required conditions
Auto Test / auto-test (20, ubuntu-latest) (push) Blocked by required conditions
Auto Test / auto-test (20, windows-latest) (push) Blocked by required conditions
Auto Test / armv7-simple-test (18, ARMv7) (push) Waiting to run
Auto Test / armv7-simple-test (20, ARMv7) (push) Waiting to run
CodeQL / Analyze (push) Waiting to run
Merge Conflict Labeler / Labeling (push) Waiting to run
validate / json-yaml-validate (push) Waiting to run
validate / validate (push) Waiting to run
2024-10-28 15:21:33 +08:00
Louis Lam
5ee986c58e
Check knex filenames and rename json-yaml-validate.yml → validate.yml for general purposes (#5263) 2024-10-28 14:20:29 +08:00
Louis Lam
ca094296f2
Fix: Knex cannot set a default value for TEXT field (MariaDB) (#5261) 2024-10-28 13:16:22 +08:00
Louis Lam
277d6fe0ce
Fix #5087 and fix migration state (#5260)
Some checks failed
Auto Test / auto-test (18, ARM64) (push) Blocked by required conditions
Auto Test / auto-test (18, macos-latest) (push) Blocked by required conditions
Auto Test / auto-test (18, ubuntu-latest) (push) Blocked by required conditions
Auto Test / auto-test (18, windows-latest) (push) Blocked by required conditions
Auto Test / auto-test (20, ARM64) (push) Blocked by required conditions
Auto Test / auto-test (20, macos-latest) (push) Blocked by required conditions
Auto Test / auto-test (20, ubuntu-latest) (push) Blocked by required conditions
Auto Test / auto-test (20, windows-latest) (push) Blocked by required conditions
Auto Test / armv7-simple-test (18, ARMv7) (push) Waiting to run
Auto Test / armv7-simple-test (20, ARMv7) (push) Waiting to run
Auto Test / check-linters (push) Waiting to run
Auto Test / e2e-test (push) Waiting to run
CodeQL / Analyze (push) Waiting to run
Merge Conflict Labeler / Labeling (push) Waiting to run
json-yaml-validate / json-yaml-validate (push) Has been cancelled
json-yaml-validate / check-lang-json (push) Has been cancelled
2024-10-27 20:30:44 +08:00
Louis Lam
46d8744fa4
Fix: Docker Healthcheck is not happy during migration (#5258)
Some checks are pending
Auto Test / auto-test (18, ARM64) (push) Blocked by required conditions
Auto Test / auto-test (18, macos-latest) (push) Blocked by required conditions
Auto Test / auto-test (18, ubuntu-latest) (push) Blocked by required conditions
Auto Test / auto-test (18, windows-latest) (push) Blocked by required conditions
Auto Test / auto-test (20, ARM64) (push) Blocked by required conditions
Auto Test / auto-test (20, macos-latest) (push) Blocked by required conditions
Auto Test / auto-test (20, ubuntu-latest) (push) Blocked by required conditions
Auto Test / auto-test (20, windows-latest) (push) Blocked by required conditions
Auto Test / armv7-simple-test (18, ARMv7) (push) Waiting to run
Auto Test / armv7-simple-test (20, ARMv7) (push) Waiting to run
Auto Test / check-linters (push) Waiting to run
Auto Test / e2e-test (push) Waiting to run
CodeQL / Analyze (push) Waiting to run
Merge Conflict Labeler / Labeling (push) Waiting to run
json-yaml-validate / json-yaml-validate (push) Waiting to run
json-yaml-validate / check-lang-json (push) Waiting to run
2024-10-27 13:22:23 +08:00
Louis Lam
7d8dc55dbe
Fix: the rootless user put in the wrong place (#5257) 2024-10-27 11:47:30 +08:00
Louis Lam
459fb138f2
Add next and next-slim tags (#5253)
Some checks are pending
Auto Test / auto-test (20, ubuntu-latest) (push) Blocked by required conditions
Auto Test / auto-test (20, windows-latest) (push) Blocked by required conditions
Auto Test / armv7-simple-test (18, ARMv7) (push) Waiting to run
Auto Test / armv7-simple-test (20, ARMv7) (push) Waiting to run
Auto Test / check-linters (push) Waiting to run
Auto Test / e2e-test (push) Waiting to run
Auto Test / auto-test (18, ARM64) (push) Blocked by required conditions
Auto Test / auto-test (18, macos-latest) (push) Blocked by required conditions
Auto Test / auto-test (18, ubuntu-latest) (push) Blocked by required conditions
Auto Test / auto-test (18, windows-latest) (push) Blocked by required conditions
Auto Test / auto-test (20, ARM64) (push) Blocked by required conditions
Auto Test / auto-test (20, macos-latest) (push) Blocked by required conditions
CodeQL / Analyze (push) Waiting to run
Merge Conflict Labeler / Labeling (push) Waiting to run
json-yaml-validate / json-yaml-validate (push) Waiting to run
json-yaml-validate / check-lang-json (push) Waiting to run
2024-10-26 22:12:55 +08:00
Louis Lam
8f950a5145
Update dependencies (#5252) 2024-10-26 21:53:53 +08:00
Louis Lam
4d779cfc69
Data migration and history retention for 2.0.0 (#5075) 2024-10-26 20:50:29 +08:00
Louis Lam
2470451f6d
Fix Apprise download issue (#5251) 2024-10-26 20:47:38 +08:00
Louis Lam
79a26180af
Verify language json files format (#5233)
Some checks failed
json-yaml-validate / check-lang-json (push) Has been cancelled
Auto Test / auto-test (18, ARM64) (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
Auto Test / auto-test (18, macos-latest) (push) Has been cancelled
Auto Test / auto-test (18, ubuntu-latest) (push) Has been cancelled
Auto Test / auto-test (18, windows-latest) (push) Has been cancelled
Auto Test / auto-test (20, ARM64) (push) Has been cancelled
Auto Test / auto-test (20, macos-latest) (push) Has been cancelled
Auto Test / auto-test (20, ubuntu-latest) (push) Has been cancelled
Merge Conflict Labeler / Labeling (push) Has been cancelled
Auto Test / auto-test (20, windows-latest) (push) Has been cancelled
Auto Test / armv7-simple-test (18, ARMv7) (push) Has been cancelled
Auto Test / armv7-simple-test (20, ARMv7) (push) Has been cancelled
Auto Test / check-linters (push) Has been cancelled
Auto Test / e2e-test (push) Has been cancelled
json-yaml-validate / json-yaml-validate (push) Has been cancelled
2024-10-23 12:47:04 +08:00
Louis Lam
7a82ae039c
Fix weblate conflict and new translations (#5232)
Co-authored-by: Jochem Pluim <jochem@pluim.nu>
Co-authored-by: Zandor Smith <info@zsinfo.nl>
Co-authored-by: Anonymous <noreply@weblate.org>
Co-authored-by: Ryo Hanafusa <ryo7gumi@gmail.com>
Co-authored-by: Eduard Dev <legocuedy09@gmail.com>
Co-authored-by: Gunnar Norin <gunnar.norin@gmail.com>
Co-authored-by: AmadeusGraves <angelfx19@gmail.com>
Co-authored-by: Dan Misener <dan@misener.org>
Co-authored-by: Алексей Добрый <support@diera.ru>
Co-authored-by: Ilkka Myller <ilkka.myller@nodefield.com>
Co-authored-by: Nelson Chan <chakflying@hotmail.com>
Co-authored-by: Lance <2124757129@qq.com>
Co-authored-by: Peter Dave Hello <hsu@peterdavehello.org>
Co-authored-by: PhongPham <pttphong1202@gmail.com>
2024-10-23 08:36:22 +08:00
Easy
d2f71d11d6
Update API URL to compatible with the latest version of ServerChan (#5227)
Some checks are pending
Auto Test / auto-test (18, ARM64) (push) Blocked by required conditions
Auto Test / auto-test (18, macos-latest) (push) Blocked by required conditions
Auto Test / auto-test (18, ubuntu-latest) (push) Blocked by required conditions
Auto Test / auto-test (18, windows-latest) (push) Blocked by required conditions
Auto Test / auto-test (20, ARM64) (push) Blocked by required conditions
Auto Test / auto-test (20, macos-latest) (push) Blocked by required conditions
Auto Test / auto-test (20, ubuntu-latest) (push) Blocked by required conditions
Auto Test / auto-test (20, windows-latest) (push) Blocked by required conditions
Auto Test / armv7-simple-test (18, ARMv7) (push) Waiting to run
Auto Test / armv7-simple-test (20, ARMv7) (push) Waiting to run
Auto Test / check-linters (push) Waiting to run
Auto Test / e2e-test (push) Waiting to run
CodeQL / Analyze (push) Waiting to run
Merge Conflict Labeler / Labeling (push) Waiting to run
json-yaml-validate / json-yaml-validate (push) Waiting to run
2024-10-22 10:48:51 +02:00
Suven-p
c01494ec33
feat: add RabbitMQ monitor (#5199)
Some checks failed
Auto Test / auto-test (18, ARM64) (push) Has been cancelled
Auto Test / auto-test (18, macos-latest) (push) Has been cancelled
Auto Test / auto-test (18, ubuntu-latest) (push) Has been cancelled
Auto Test / auto-test (18, windows-latest) (push) Has been cancelled
Auto Test / auto-test (20, ARM64) (push) Has been cancelled
Auto Test / auto-test (20, macos-latest) (push) Has been cancelled
Auto Test / auto-test (20, ubuntu-latest) (push) Has been cancelled
Auto Test / auto-test (20, windows-latest) (push) Has been cancelled
Auto Test / armv7-simple-test (18, ARMv7) (push) Has been cancelled
Auto Test / armv7-simple-test (20, ARMv7) (push) Has been cancelled
Auto Test / check-linters (push) Has been cancelled
Auto Test / e2e-test (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
Merge Conflict Labeler / Labeling (push) Has been cancelled
json-yaml-validate / json-yaml-validate (push) Has been cancelled
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-10-20 15:57:03 +02:00
Ryo Hanafusa
a7e9bdd43e
fix: expand hover trigger area of beat (#5223)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-10-20 15:30:03 +02:00
sctnightcore
d7ffa33950
feat: add notification provider SendGrid (#5205)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-10-18 02:25:23 +02:00
Frank Elsinga
a20a43b8aa
tests: add testcase for the mqtt monitor with testcontainers (#4451) 2024-10-17 16:25:45 +02:00
Frank Elsinga
ed6087e233
fix: slack rich notification not working correctly (#5209) 2024-10-16 16:50:41 +02:00
Frank Elsinga
42e77798e5
Revert "Extend length of status bars in status page" (#5207) 2024-10-16 14:58:44 +02:00
Peace
85dfe1f5d1
fix: some errors from the performance optimization (#5196) 2024-10-16 13:25:35 +02:00
Louis Lam
b719d11500 Merge branch 'master' into fix-weblate-conflict2
# Conflicts:
#	src/lang/bg-BG.json
#	src/lang/cs-CZ.json
#	src/lang/de-CH.json
#	src/lang/de-DE.json
#	src/lang/fr-FR.json
#	src/lang/ga.json
#	src/lang/id-ID.json
#	src/lang/tr-TR.json
#	src/lang/uk-UA.json
#	src/lang/zh-CN.json
2024-10-15 00:56:41 +08:00
Ömer Faruk Genç
b7d2cedf2e Translated using Weblate (Turkish)
Currently translated at 100.0% (1016 of 1016 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/tr/
2024-10-14 15:53:13 +00:00
Buchtič
f3ee9c2cad Translated using Weblate (Czech)
Currently translated at 100.0% (1016 of 1016 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/cs/
2024-10-14 15:53:13 +00:00
Mohit Nagaraj
582fb6c5ad Added translation using Weblate (English (Middle)) 2024-10-12 03:23:55 +00:00
Erlaan
dda40610c7
feat: new notification provider 46elks (#5184)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-10-11 11:07:34 +02:00
Arjun Komath
bafca6bd37
feat: support sound and title in TechulusPush (#5178) 2024-10-11 00:19:58 +02:00
Jason Michael
bbc75b840b
docs: grammatical improvements in contribution guide (#5183)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-10-10 08:57:59 +02:00
Dj Isaac
019702f8e5
fix: misspelling of 'address' (#5180) 2024-10-10 01:24:32 +02:00
YangHongYu
365aa8d814 Added translation using Weblate (Abkhazian) 2024-10-09 13:42:02 +00:00
YangHongYu
7e37dacb9a Added translation using Weblate (Uyghur) 2024-10-09 13:40:32 +00:00
Tanmay Shinde
e8c650797c
refactor: removed unnecessary todo comment, modified jsdoc of utility func (#5164) 2024-10-09 09:47:00 +02:00
Louis Lam
eca90a2b00
Revert "feat: structured logging (JSON)" (#5175) 2024-10-09 07:43:44 +08:00
Louis Lam
4829ad8c5d
Revert "Extend Prometheus Labels to include tags (requires restart for NEW labels on the monitor to be visible)" (#5174) 2024-10-09 07:17:11 +08:00
Daan Meijer
59e70cb763
[slack] allow the user to choose the message format to send (#5167)
Co-authored-by: Louis Lam <louislam@users.noreply.github.com>
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-10-08 12:09:58 +02:00
Xiaoyu
6476e58907
Fix: Resolve notice title definition issue and add newline between title and content in notification (#5166) 2024-10-08 11:39:22 +02:00
Louis Lam
e773e454e9
Fix #5157 and cleanup some devcontainer code (#5162) 2024-10-07 19:06:28 +08:00
AnnAngela
958f96f06d Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1016 of 1016 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/
2024-10-07 08:42:10 +00:00
vishalsabhaya
d0067a0a12
improve page load performance of large amount urls (#5025)
Co-authored-by: vishal sabhaya <vishals@vebuin.com>
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-10-06 03:36:54 +02:00
Txopi
130d8d0177 Translated using Weblate (Basque)
Currently translated at 54.8% (557 of 1016 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/eu/
2024-10-06 00:27:20 +00:00
nekojanai
f791d4a9bf
feat: monitor debug curl (#5152)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-10-06 02:27:15 +02:00
Aindriú Mac Giolla Eoin
9905ca574c Translated using Weblate (Irish)
Currently translated at 100.0% (1016 of 1016 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ga/
2024-10-05 14:27:30 +00:00
janinainfa
fc429108ac Translated using Weblate (Polish)
Currently translated at 94.2% (958 of 1016 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pl/
2024-10-05 14:27:30 +00:00
Cyril59310
10ffde2595 Translated using Weblate (French)
Currently translated at 100.0% (1016 of 1016 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fr/
2024-10-05 14:27:30 +00:00
Tanmay Shinde
a5faa4b225
refactor: removed fs-rmsync extra func used for node <14 (#5159) 2024-10-05 16:27:17 +02:00
Frank Elsinga
da168fc220
fix: Both Add and Home being shown as selected on the homescreen (#3256) 2024-10-04 14:33:21 +02:00
stanol
b9b48e1b2d Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1016 of 1016 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/uk/
2024-10-04 11:50:37 +00:00
Harry Suryapambagya
a760898281 Translated using Weblate (Indonesian)
Currently translated at 100.0% (1016 of 1016 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/id/
2024-10-04 11:50:37 +00:00
Marco
289b72d07d Translated using Weblate (German)
Currently translated at 100.0% (1016 of 1016 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/
2024-10-04 11:50:37 +00:00
Marco
9257a7a19e Translated using Weblate (German (Switzerland))
Currently translated at 100.0% (1016 of 1016 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de_CH/
2024-10-04 11:50:37 +00:00
MrEddX
8084c7e61c Translated using Weblate (Bulgarian)
Currently translated at 100.0% (1016 of 1016 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/bg/
2024-10-04 11:50:31 +00:00
Suven-p
1cf88f4fea
Disable certificate expiry notification when SSL errors are ignored (#5156) 2024-10-04 13:50:24 +02:00
Frank Elsinga
0f6cb15561
removed node 22 from ci to debug a testcase failiour 2024-10-04 04:20:22 +02:00
Frank Elsinga
14199dc2cb
bumped the node versions tested in CI and removed a few of the needs constraints making CI run slower than it can 2024-10-04 04:05:18 +02:00
UptimeKumaBot
e8e83808d3
Translations Update from Weblate (#5072)
Co-authored-by: Louis Lam <louislam@users.noreply.github.com>
Co-authored-by: Cyril59310 <archas.cyril@hotmail.fr>
Co-authored-by: Marco <marco@nanoweb.ch>
Co-authored-by: Ilkka Myller <ilkka.myller@nodefield.com>
Co-authored-by: Michal <black23@gmail.com>
Co-authored-by: Harry Suryapambagya <harsxv@gmail.com>
Co-authored-by: Lee Min Waan <rakis9076@gmail.com>
Co-authored-by: AnnAngela <naganjue@vip.qq.com>
Co-authored-by: kindercat <156439718+kindercat@users.noreply.github.com>
Co-authored-by: stanol <stanol777@gmail.com>
Co-authored-by: Hyeonho Kang <hyeonhokang10@o365.ice.go.kr>
Co-authored-by: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Co-authored-by: MrEddX <mreddx@chatrix.one>
Co-authored-by: Sajjad Jazini <s.jazini@vatanmail.ir>
Co-authored-by: Ossie Stinga <ossie.stinga@gmail.com>
Co-authored-by: Elia Ronchetti <e.ronchetti@campus.unimib.it>
Co-authored-by: B3CKDOOR <B3CKDOOR@users.noreply.weblate.kuma.pet>
Co-authored-by: Ivan M <ivan.meishutovich@gmail.com>
Co-authored-by: AlanFarley <alanfarley2010@live.com>
Co-authored-by: Mohammad Hesam Imani <hesamimany@gmail.com>
Co-authored-by: Shinwoo PARK <devpysweb@gmail.com>
Co-authored-by: Lucius Gaitán <lucius@luciusgaitan.com>
Co-authored-by: Ömer Faruk GÖL <omerfarukgol@hotmail.com>
Co-authored-by: Satveek Gupta <guptasatveek@gmail.com>
Co-authored-by: Aung ko <aungko.use@gmail.com>
2024-10-04 02:59:48 +02:00
Aung ko
324d879aad Translated using Weblate (Burmese)
Currently translated at 7.3% (75 of 1016 strings)

Translated using Weblate (English)

Currently translated at 99.9% (1015 of 1016 strings)

Co-authored-by: Aung ko <aungko.use@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/en/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/my/
Translation: Uptime Kuma/Uptime Kuma
2024-10-04 00:54:34 +00:00
Satveek Gupta
d2a44487b3 Translated using Weblate (Hindi)
Currently translated at 5.9% (60 of 1016 strings)

Co-authored-by: Satveek Gupta <guptasatveek@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hi/
Translation: Uptime Kuma/Uptime Kuma
2024-10-04 00:54:34 +00:00
Ömer Faruk GÖL
35668219ec Translated using Weblate (Turkish)
Currently translated at 100.0% (1016 of 1016 strings)

Co-authored-by: Ömer Faruk GÖL <omerfarukgol@hotmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/tr/
Translation: Uptime Kuma/Uptime Kuma
2024-10-04 00:54:34 +00:00
Lucius Gaitán
895f6d2ff1 Translated using Weblate (Portuguese (Brazil))
Currently translated at 96.2% (978 of 1016 strings)

Co-authored-by: Lucius Gaitán <lucius@luciusgaitan.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_BR/
Translation: Uptime Kuma/Uptime Kuma
2024-10-04 00:54:34 +00:00
Shinwoo PARK
3088cc6141 Translated using Weblate (Korean)
Currently translated at 73.3% (745 of 1016 strings)

Co-authored-by: Shinwoo PARK <devpysweb@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ko/
Translation: Uptime Kuma/Uptime Kuma
2024-10-04 00:54:34 +00:00
Mohammad Hesam Imani
98415bd419 Translated using Weblate (Persian)
Currently translated at 100.0% (1016 of 1016 strings)

Co-authored-by: Mohammad Hesam Imani <hesamimany@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fa/
Translation: Uptime Kuma/Uptime Kuma
2024-10-04 00:54:34 +00:00
AlanFarley
087d20b775 Translated using Weblate (Portuguese (Brazil))
Currently translated at 94.9% (965 of 1016 strings)

Co-authored-by: AlanFarley <alanfarley2010@live.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_BR/
Translation: Uptime Kuma/Uptime Kuma
2024-10-04 00:54:34 +00:00
Ivan M
ec7923f4fd Translated using Weblate (Belarusian)
Currently translated at 91.8% (933 of 1016 strings)

Co-authored-by: Ivan M <ivan.meishutovich@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/be/
Translation: Uptime Kuma/Uptime Kuma
2024-10-04 00:54:34 +00:00
B3CKDOOR
86b3ff6bfd Translated using Weblate (Dutch)
Currently translated at 99.0% (1006 of 1016 strings)

Co-authored-by: B3CKDOOR <B3CKDOOR@users.noreply.weblate.kuma.pet>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
Translation: Uptime Kuma/Uptime Kuma
2024-10-04 00:54:34 +00:00
Elia Ronchetti
e6159d9ab4 Translated using Weblate (Italian)
Currently translated at 69.3% (705 of 1016 strings)

Co-authored-by: Elia Ronchetti <e.ronchetti@campus.unimib.it>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/it/
Translation: Uptime Kuma/Uptime Kuma
2024-10-04 00:54:34 +00:00
Ossie Stinga
e781325633 Translated using Weblate (Italian)
Currently translated at 69.3% (705 of 1016 strings)

Co-authored-by: Ossie Stinga <ossie.stinga@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/it/
Translation: Uptime Kuma/Uptime Kuma
2024-10-04 00:54:34 +00:00
Sajjad Jazini
72478090e7 Translated using Weblate (Persian)
Currently translated at 98.1% (997 of 1016 strings)

Co-authored-by: Sajjad Jazini <s.jazini@vatanmail.ir>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fa/
Translation: Uptime Kuma/Uptime Kuma
2024-10-04 00:54:34 +00:00
MrEddX
50ec9fec05 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (1016 of 1016 strings)

Co-authored-by: MrEddX <mreddx@chatrix.one>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/bg/
Translation: Uptime Kuma/Uptime Kuma
2024-10-04 00:54:34 +00:00
Aindriú Mac Giolla Eoin
62c55f0e25 Translated using Weblate (Irish)
Currently translated at 100.0% (1016 of 1016 strings)

Co-authored-by: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ga/
Translation: Uptime Kuma/Uptime Kuma
2024-10-04 00:54:34 +00:00
Hyeonho Kang
3ab35c38fc Translated using Weblate (Korean)
Currently translated at 72.9% (741 of 1016 strings)

Co-authored-by: Hyeonho Kang <hyeonhokang10@o365.ice.go.kr>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ko/
Translation: Uptime Kuma/Uptime Kuma
2024-10-04 00:54:34 +00:00
stanol
1d86fa2b5c Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1016 of 1016 strings)

Co-authored-by: stanol <stanol777@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/uk/
Translation: Uptime Kuma/Uptime Kuma
2024-10-04 00:54:34 +00:00
kindercat
cef072cae9 Translated using Weblate (Romanian)
Currently translated at 100.0% (1016 of 1016 strings)

Translated using Weblate (Romanian)

Currently translated at 95.5% (971 of 1016 strings)

Co-authored-by: kindercat <156439718+kindercat@users.noreply.github.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ro/
Translation: Uptime Kuma/Uptime Kuma
2024-10-04 00:54:34 +00:00
AnnAngela
abcc98c836 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1016 of 1016 strings)

Co-authored-by: AnnAngela <naganjue@vip.qq.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/
Translation: Uptime Kuma/Uptime Kuma
2024-10-04 00:54:34 +00:00
Lee Min Waan
aa38344c3d Translated using Weblate (Vietnamese)
Currently translated at 51.8% (527 of 1016 strings)

Co-authored-by: Lee Min Waan <rakis9076@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/vi/
Translation: Uptime Kuma/Uptime Kuma
2024-10-04 00:54:34 +00:00
Harry Suryapambagya
9ff0ae67df Translated using Weblate (Indonesian)
Currently translated at 100.0% (1016 of 1016 strings)

Translated using Weblate (Indonesian)

Currently translated at 95.1% (967 of 1016 strings)

Co-authored-by: Harry Suryapambagya <harsxv@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/id/
Translation: Uptime Kuma/Uptime Kuma
2024-10-04 00:54:34 +00:00
Michal
a14d05daab Translated using Weblate (Czech)
Currently translated at 96.1% (977 of 1016 strings)

Co-authored-by: Michal <black23@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/cs/
Translation: Uptime Kuma/Uptime Kuma
2024-10-04 00:54:34 +00:00
Ilkka Myller
93c5ab0bd8 Translated using Weblate (Finnish)
Currently translated at 100.0% (1016 of 1016 strings)

Co-authored-by: Ilkka Myller <ilkka.myller@nodefield.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fi/
Translation: Uptime Kuma/Uptime Kuma
2024-10-04 00:54:34 +00:00
Marco
d27a9e7d7f Translated using Weblate (German)
Currently translated at 100.0% (1016 of 1016 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (1016 of 1016 strings)

Co-authored-by: Marco <marco@nanoweb.ch>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de_CH/
Translation: Uptime Kuma/Uptime Kuma
2024-10-04 00:54:34 +00:00
Cyril59310
c120c37030 Translated using Weblate (French)
Currently translated at 100.0% (1016 of 1016 strings)

Translated using Weblate (French)

Currently translated at 100.0% (1016 of 1016 strings)

Co-authored-by: Cyril59310 <archas.cyril@hotmail.fr>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fr/
Translation: Uptime Kuma/Uptime Kuma
2024-10-04 00:54:34 +00:00
Louis Lam
acd1e7211a Translated using Weblate (Chinese (Traditional, Hong Kong))
Currently translated at 70.9% (721 of 1016 strings)

Co-authored-by: Louis Lam <louislam@users.noreply.github.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hant_HK/
Translation: Uptime Kuma/Uptime Kuma
2024-10-04 00:54:34 +00:00
Frank Elsinga
e40ce59e66
Better description for shrink database button (#4814)
Co-authored-by: Adam Stachowicz <saibamenppl@gmail.com>
2024-10-04 02:54:28 +02:00
artshllaku
a309cf0e2c
tests: improve playwright test readability (#5149) 2024-10-03 11:20:27 +02:00
Easy
0071775525
Add serverchan3 support for serverchan notification provider (#5145)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-10-01 10:28:47 +02:00
Louis Lam
46d90a6a99
1.23.14 changes merge to 2.0.0 (#5138) 2024-09-29 23:06:09 +08:00
Louis Lam
3479992302 Resolve conflict of package-lock.json 2024-09-29 22:13:05 +08:00
Louis Lam
030bb1c0b8 Merge branch 'master' into 1.23.14-to-2.0.0
# Conflicts:
#	package-lock.json
2024-09-29 22:12:25 +08:00
Louis Lam
7da401662f Merge branch '1.23.X' into 1.23.14-to-2.0.0
# Conflicts:
#	package-lock.json
#	package.json
2024-09-29 22:05:23 +08:00
Louis Lam
243726b03c Update to 1.23.14 2024-09-29 21:46:19 +08:00
Louis Lam
936665aac3
[1.23.X] Update dependencies (#5132) 2024-09-28 03:43:54 +08:00
Cassandra
b287a25de7
feat: structured logging (JSON) (#5118) 2024-09-24 17:51:21 +08:00
Ivan M.
dd75890364
Added a Belarusian language code (#5103) 2024-09-12 05:05:18 +08:00
David Luhmer
3c23a34fff
Fix missing monitors in subgroups due to missing filterFunc (#5084)
Co-authored-by: David Luhmer <david.luhmer@wetteronline.de>
2024-09-04 14:33:53 +02:00
Jakob Lindskog
935194bca3
feat: implement very crude and bare-bones RSS feed (#5047) 2024-09-03 13:51:34 +02:00
Louis Lam
11f108b501
Remove .devcontainer (#5074) 2024-09-02 10:26:17 +08:00
Shaun
c567e8eb8e
Status Page E2E spec (#5068) 2024-09-01 02:20:55 +02:00
Louis Lam
ba46945ea9
Fix weblate conflict and new translations (#5071) 2024-08-31 21:00:08 +08:00
Louis Lam
362a890bc3 Merge remote-tracking branch 'origin/master' into master-weblate
# Conflicts:
#	src/lang/pl.json
#	src/lang/uk-UA.json
2024-08-31 20:56:27 +08:00
Shaun
36f8be040d
Monitor Conditions (#5048) 2024-08-30 21:48:13 +02:00
s3rgi
3346111090 Translated using Weblate (Catalan)
Currently translated at 22.4% (215 of 957 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ca/
2024-08-29 13:48:41 +00:00
Frank Elsinga
032ac161f7
Fixed the url of the SIGNL4 docs as requested in a PR 2024-08-29 15:48:35 +02:00
Prabhsharan Singh
562de6abb4
fix: undefined in log while creating a new monitor (#5053)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-08-28 23:23:01 +02:00
Ron
716832b9f3
New Notification Provider SIGNL4 (#5058)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-08-28 23:18:25 +02:00
Shaun
3d9bbe1a62
Improve Playwright/E2E testing setup (#5056)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-08-28 23:18:04 +02:00
Aizat Faiz
01210ce88d
Add url to pushover notification (#5055)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-08-28 03:24:29 +02:00
SIEEKUU
f8d34f22e3 Translated using Weblate (Polish)
Currently translated at 100.0% (957 of 957 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pl/
2024-08-27 21:58:49 +00:00
Alone88
b059c19069
Add WPush Notification Provider (#5049)
Signed-off-by: Alone88 <anhaoyl@qq.com>
2024-08-26 04:57:56 +02:00
Dan Sullivan
dc3ad88fe1
Add option to pass cache bust param (#3525)
Co-authored-by: Dan Sullivan <dan@symbiosgroup.co.uk>
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-08-24 22:57:31 +02:00
Cyril59310
4cb264afca
Add translation keys (#5046) 2024-08-24 22:56:42 +02:00
Jay Bhanushali
3e88772e5d
Fix: name column in the dashboad being squashed in some aspect ratios (#4193) 2024-08-24 19:44:51 +02:00
Frank Elsinga
9486fa22ee
made sure that the socket handlers have consitent names (#4818) 2024-08-24 18:40:50 +02:00
Frank Elsinga
0ddf35e7b5
Removed now unnecessary version checking (#4815) 2024-08-24 18:38:50 +02:00
amyyeung17
4b68a86524
Extend length of status bars in status page (#4376)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
Co-authored-by: mobeicanyue <81098819+mobeicanyue@users.noreply.github.com>
2024-08-24 18:36:09 +02:00
Frank Elsinga
bde3d0e5ef
Add translation key for time ago (#4813)
Co-authored-by: Cyril59310 <archas.cyril@hotmail.fr>
2024-08-24 18:32:21 +02:00
Thomas Spalinger
643d28cebc
Extend Prometheus Labels to include tags (requires restart for NEW labels on the monitor to be visible) (#4704)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-08-24 18:02:57 +02:00
Ilya
fe5035d9b3 Translated using Weblate (Russian)
Currently translated at 93.4% (894 of 957 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/
2024-08-23 18:58:54 +00:00
vishalsabhaya
2a820ab16d
marked library move devDependencies → dependencies (#5029) 2024-08-19 21:11:27 +08:00
15159617213
8e4b9dd9c1 Added translation using Weblate (Chinese (Literary)) 2024-08-14 20:03:49 +00:00
solidsniper
bab771df05
fix: !important in the prim-css editor is rendered incorrectly (#5018) 2024-08-14 16:58:33 +02:00
Leonardo Dimitrov
5fcc8cf34f Translated using Weblate (Macedonian)
Currently translated at 9.4% (90 of 957 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/mk/
2024-08-09 17:58:47 +00:00
Brook
895bf7c550 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (957 of 957 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/
2024-08-08 16:41:55 +00:00
Leonardo Dimitrov
d6e254dfd6 Added translation using Weblate (Macedonian) 2024-08-08 16:41:44 +00:00
Dom Jasaitis
3a2385bc2b Translated using Weblate (Lithuanian)
Currently translated at 22.9% (220 of 957 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/lt/
2024-08-08 00:48:42 +00:00
Hasan Basri
92e982a910
Add OneSender Webhook notification (#4971)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-08-08 02:48:37 +02:00
Ikko Eltociear Ashimine
13f67462ad
docs: fixed typo in the contribution guide (#4988) 2024-08-03 09:49:49 +02:00
pipemsn
f5f86e5524 Translated using Weblate (Thai)
Currently translated at 67.9% (650 of 957 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/th/
2024-08-03 04:56:45 +00:00
taisei
cd5644d6d2
Remove markdown with meta tags (#4968)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-07-31 17:58:13 +02:00
Dom Jasaitis
6dddf0319a Translated using Weblate (Lithuanian)
Currently translated at 12.5% (120 of 957 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/lt/
2024-07-30 04:56:31 +00:00
Dom Jasaitis
6e8d4e8d76 Added translation using Weblate (Lithuanian) 2024-07-30 01:31:05 +00:00
Ethan Figliola
74bb44e96e Translated using Weblate (Xhosa)
Currently translated at 0.5% (5 of 957 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/xh/
2024-07-29 05:34:11 +00:00
Ethan Figliola
e8c74457df Translated using Weblate (Spanish)
Currently translated at 100.0% (957 of 957 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/es/
2024-07-29 05:34:10 +00:00
Marco Beretta
48539c4cce Translated using Weblate (Italian)
Currently translated at 69.2% (663 of 957 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/it/
2024-07-26 17:56:41 +00:00
Fabio Bassan
8138316b7d Translated using Weblate (Italian)
Currently translated at 69.2% (663 of 957 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/it/
2024-07-26 17:56:41 +00:00
Alex Javadi
8b096a5754 Translated using Weblate (Persian)
Currently translated at 100.0% (957 of 957 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fa/
2024-07-25 14:24:06 +00:00
Phiton
36e7266fa4 Translated using Weblate (Slovak)
Currently translated at 58.3% (558 of 957 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/sk/
2024-07-25 03:56:41 +00:00
Zandor Smith
50ec9e568c Translated using Weblate (Dutch)
Currently translated at 100.0% (957 of 957 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
2024-07-25 03:56:41 +00:00
J. Mulder
b690376750 Translated using Weblate (Dutch)
Currently translated at 100.0% (957 of 957 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
2024-07-25 03:56:41 +00:00
Harry Suryapambagya
58971335d0 Translated using Weblate (Indonesian)
Currently translated at 98.8% (946 of 957 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/id/
2024-07-25 03:56:40 +00:00
Arian Ardeshiri
26ff2c3802 Translated using Weblate (Persian)
Currently translated at 92.2% (883 of 957 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fa/
2024-07-25 03:56:40 +00:00
Phiton
da805ce097 Translated using Weblate (Slovak)
Currently translated at 36.2% (347 of 957 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/sk/
2024-07-20 21:56:40 +00:00
SrIzan10
5ae45902e0 Translated using Weblate (Spanish)
Currently translated at 92.2% (883 of 957 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/es/
2024-07-20 21:56:40 +00:00
Michal
ff37c68c1f Translated using Weblate (Czech)
Currently translated at 99.8% (956 of 957 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/cs/
2024-07-20 21:56:40 +00:00
Frank Elsinga
2c31f3a2ff
Update Stale GitHub Action from v8 to v9 (#4950) 2024-07-18 08:42:31 +02:00
Ole
64073eaf71
Update Stale GitHub Action from v8 to v9 2024-07-18 02:40:56 +02:00
Frank Elsinga
ba448c765a
Updated croner to 8.1.0 and fixed "recurring-interval" type maintenance (#4939) 2024-07-16 00:34:56 +02:00
Frank Elsinga
1822b55846
Merge branch 'master' into master 2024-07-16 00:30:48 +02:00
Frank Elsinga
e791c70c47
Fixed the package-lock.json 2024-07-16 00:29:56 +02:00
John Campbell
76deb6e0fa
package.json - Update dependency version range for croner
Co-authored-by: Louis Lam <louislam@users.noreply.github.com>
2024-07-15 17:21:27 -04:00
buzzinJohnnyBoi
30f7b48987 updated comments and ran linter on inferDuration 2024-07-15 17:04:16 -04:00
buzzinJohnnyBoi
4836f72cb8 added inferDuration to calculate cron duration 2024-07-15 16:56:41 -04:00
Frank Elsinga
4aef6780ed
feat: Add SNMP Monitor (#4717) 2024-07-15 22:15:03 +02:00
Frank Elsinga
c82de20c7b
fixed merge-typo 2024-07-15 22:07:13 +02:00
Frank Elsinga
71f9384c09
Merge branch 'master' into snmp-monitor 2024-07-15 21:57:12 +02:00
erphise
1d295441bb Translated using Weblate (Catalan)
Currently translated at 9.2% (89 of 957 strings)

Co-authored-by: erphise <github@erphise.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ca/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Michał Pietrzak
3bec59a205 Translated using Weblate (Polish)
Currently translated at 100.0% (957 of 957 strings)

Co-authored-by: Michał Pietrzak <michal.pietrzak@mphs.pl>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pl/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Zoltán Nagy
dab26b1cc8 Translated using Weblate (Hungarian)
Currently translated at 85.4% (818 of 957 strings)

Co-authored-by: Zoltán Nagy <pofagyalu@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hu/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Ivan Bratović
2bdd862340 Translated using Weblate (Croatian)
Currently translated at 100.0% (957 of 957 strings)

Co-authored-by: Ivan Bratović <ivanbratovic4@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hr/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Oton
921f1a2eb4 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (957 of 957 strings)

Translated using Weblate (Portuguese)

Currently translated at 9.2% (89 of 957 strings)

Co-authored-by: Oton <oms.moreira@outlook.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_BR/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Aindriú Mac Giolla Eoin
cc8c409489 Translated using Weblate (Irish)
Currently translated at 100.0% (957 of 957 strings)

Co-authored-by: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ga/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
J. Mulder
3028d9b054 Translated using Weblate (Dutch)
Currently translated at 99.1% (949 of 957 strings)

Co-authored-by: J. Mulder <info@xoric.nl>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Leonardo Garcia
157e100bd0 Translated using Weblate (Portuguese)
Currently translated at 9.1% (87 of 956 strings)

Translated using Weblate (Xhosa)

Currently translated at 0.3% (3 of 956 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (956 of 956 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (956 of 956 strings)

Co-authored-by: Leonardo Garcia <leosgarcia@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pl/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_BR/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/xh/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Yahor Haurylenka
6fe03585cc Translated using Weblate (Belarusian)
Currently translated at 97.5% (933 of 956 strings)

Added translation using Weblate (Belarusian)

Co-authored-by: Yahor Haurylenka <k1llo2810@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/be/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Max
73873d4580 Translated using Weblate (Chinese (Traditional))
Currently translated at 94.5% (904 of 956 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 94.3% (902 of 956 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 91.9% (879 of 956 strings)

Co-authored-by: Max <max.tsai@alfred.camera>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hant/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
AnnAngela
cada9aaef8 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (957 of 957 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (956 of 956 strings)

Co-authored-by: AnnAngela <naganjue@vip.qq.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Lucas Elias Baccan
e08cee2dcb Translated using Weblate (Portuguese (Brazil))
Currently translated at 98.9% (946 of 956 strings)

Co-authored-by: Lucas Elias Baccan <naccabbaccan@hotmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_BR/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
KEINOS
a6980694bc Translated using Weblate (Japanese)
Currently translated at 70.9% (670 of 944 strings)

Co-authored-by: KEINOS <github@keinos.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ja/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
nazo6
032ba4a03e Translated using Weblate (Japanese)
Currently translated at 70.9% (670 of 944 strings)

Translated using Weblate (Japanese)

Currently translated at 69.9% (660 of 944 strings)

Co-authored-by: nazo6 <git@nazo6.dev>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ja/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Hugo Lee
ee54a3b843 Translated using Weblate (Chinese (Traditional, Hong Kong))
Currently translated at 75.8% (716 of 944 strings)

Co-authored-by: Hugo Lee <hohimster@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hant_HK/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Savvas Mantzouranidis
54acfaed2b Translated using Weblate (Greek)
Currently translated at 70.4% (665 of 944 strings)

Co-authored-by: Savvas Mantzouranidis <mohito6@hotmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/el/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Andy Chatziliadis
2c9782d1e8 Translated using Weblate (Greek)
Currently translated at 70.4% (665 of 944 strings)

Co-authored-by: Andy Chatziliadis <chatzeiliadis@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/el/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Nick Tzallas
71bb19dcba Translated using Weblate (Greek)
Currently translated at 70.4% (665 of 944 strings)

Co-authored-by: Nick Tzallas <tzallas@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/el/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Arian Ardeshiri
e3c4f6d9bd Translated using Weblate (Persian)
Currently translated at 93.5% (883 of 944 strings)

Co-authored-by: Arian Ardeshiri <arian.fawiki@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fa/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
ChobPT
c0ff5965ee Translated using Weblate (Portuguese (Portugal))
Currently translated at 48.9% (462 of 944 strings)

Co-authored-by: ChobPT <usteamchob@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_PT/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Navid Anindya
1cb6616f5c Translated using Weblate (Bengali)
Currently translated at 1.4% (14 of 944 strings)

Co-authored-by: Navid Anindya <navid@sayburgh.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/bn/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
DevMirza
a2eee1f440 Translated using Weblate (Urdu)
Currently translated at 59.4% (561 of 944 strings)

Co-authored-by: DevMirza <pzhafeez@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ur/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
hamx01
504e8dbd09 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (944 of 944 strings)

Translated using Weblate (Russian)

Currently translated at 93.2% (880 of 944 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (944 of 944 strings)

Co-authored-by: hamx01 <asolianik2015@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pl/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/uk/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
KEINOS
215c572988 Translated using Weblate (Japanese)
Currently translated at 69.9% (660 of 944 strings)

Translated using Weblate (Japanese)

Currently translated at 67.9% (641 of 944 strings)

Translated using Weblate (Japanese)

Currently translated at 67.7% (640 of 944 strings)

Co-authored-by: KEINOS <github@keinos.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ja/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Gerge
5113b3f22b Translated using Weblate (Hungarian)
Currently translated at 85.5% (808 of 944 strings)

Co-authored-by: Gerge <gerge.palfi@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hu/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Adam Stachowicz
f84aaf7576 Translated using Weblate (Polish)
Currently translated at 100.0% (944 of 944 strings)

Co-authored-by: Adam Stachowicz <saibamenppl@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pl/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Michal
96e7c13bb2 Translated using Weblate (Czech)
Currently translated at 99.5% (953 of 957 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (944 of 944 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (944 of 944 strings)

Co-authored-by: Michal <black23@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/cs/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Ilkka Myller
9de3e7b803 Translated using Weblate (Finnish)
Currently translated at 100.0% (957 of 957 strings)

Translated using Weblate (Finnish)

Currently translated at 100.0% (956 of 956 strings)

Translated using Weblate (Finnish)

Currently translated at 100.0% (944 of 944 strings)

Co-authored-by: Ilkka Myller <ilkka.myller@nodefield.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fi/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Gunnar Norin
7d728c23ed Translated using Weblate (Swedish)
Currently translated at 100.0% (957 of 957 strings)

Translated using Weblate (Swedish)

Currently translated at 100.0% (956 of 956 strings)

Translated using Weblate (Swedish)

Currently translated at 100.0% (944 of 944 strings)

Co-authored-by: Gunnar Norin <gunnar.norin@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/sv/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Nicolas Verlhiac
fba3eac97a Translated using Weblate (French)
Currently translated at 100.0% (944 of 944 strings)

Co-authored-by: Nicolas Verlhiac <nicolas.verlhiac@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fr/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
kindercat
a87b836aa9 Translated using Weblate (Romanian)
Currently translated at 100.0% (957 of 957 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (956 of 956 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (944 of 944 strings)

Translated using Weblate (Romanian)

Currently translated at 99.8% (944 of 945 strings)

Co-authored-by: kindercat <156439718+kindercat@users.noreply.github.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ro/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
stanol
a5775df2cd Translated using Weblate (Ukrainian)
Currently translated at 100.0% (957 of 957 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (956 of 956 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (945 of 945 strings)

Co-authored-by: stanol <stanol777@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/uk/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Ömer Faruk Genç
ae4dc0678a Translated using Weblate (Turkish)
Currently translated at 100.0% (957 of 957 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (956 of 956 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (944 of 944 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (945 of 945 strings)

Co-authored-by: Ömer Faruk Genç <omer@farukgenc.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/tr/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Frank Elsinga
74f8a2474f Translated using Weblate (Russian)
Currently translated at 87.5% (827 of 945 strings)

Co-authored-by: Frank Elsinga <CommanderStorm@users.noreply.weblate.kuma.pet>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Cyril59310
f19be09aae Translated using Weblate (French)
Currently translated at 100.0% (957 of 957 strings)

Translated using Weblate (French)

Currently translated at 100.0% (956 of 956 strings)

Translated using Weblate (French)

Currently translated at 100.0% (945 of 945 strings)

Co-authored-by: Cyril59310 <archas.cyril@hotmail.fr>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fr/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Marco
239c2693ca Translated using Weblate (German)
Currently translated at 100.0% (957 of 957 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (957 of 957 strings)

Translated using Weblate (German)

Currently translated at 100.0% (956 of 956 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (956 of 956 strings)

Translated using Weblate (German)

Currently translated at 100.0% (945 of 945 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (945 of 945 strings)

Co-authored-by: Marco <marco@nanoweb.ch>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de_CH/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
MrEddX
633a64043c Translated using Weblate (Bulgarian)
Currently translated at 100.0% (957 of 957 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (956 of 956 strings)

Translated using Weblate (Bulgarian)

Currently translated at 99.8% (943 of 944 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (945 of 945 strings)

Co-authored-by: MrEddX <mreddx@chatrix.one>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/bg/
Translation: Uptime Kuma/Uptime Kuma
2024-07-15 00:06:18 +00:00
Frank Elsinga
6f1b8b469d
Show URL for "real-browser" type monitor on details page (#4942) 2024-07-15 02:06:13 +02:00
persuasive0pest
4436b0ba8e
Show URL for "real-browser" type monitor on details page 2024-07-14 19:38:48 -04:00
John Campbell
7f64badb06
Update comment on recurring-interval type maintenance
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-07-13 22:03:13 -04:00
buzzinJohnnyBoi
4750bd1e36 Fixed "recurring-interval" type maintenance - added comments 2024-07-13 14:08:53 -04:00
buzzinJohnnyBoi
d61688315d Updated croner to 8.1.0 and fixed "recurring-interval" type maintenance 2024-07-13 13:58:36 -04:00
Frank Elsinga
1a5a1a6e5d
Fix uptime & ping badge duration (#4850) 2024-07-05 00:12:37 +02:00
Frank Elsinga
1ef61068c7
Merge branch 'master' into master 2024-07-04 03:13:43 +02:00
Frank Elsinga
ae224f9e18
Fix Slack notifications when URL is present (#4871) 2024-06-28 01:17:34 +02:00
Frank Elsinga
132f68a370
Merge branch 'master' into 4864-slack-button-broken 2024-06-28 01:14:46 +02:00
Brodie Davis
6eaf6b409c fix not utilizing fetched address 2024-06-27 14:04:03 -04:00
Brodie Davis
4b3ad53512 revert using url getter in monitor json 2024-06-27 14:03:34 -04:00
Louis Lam
8efbe95d62
1.23.14 to 2.0.0 (#4886) 2024-06-26 10:34:23 +08:00
Louis Lam
88ba9755a6 Resolve conflict 2024-06-26 10:02:39 +08:00
Louis Lam
cc52ee3feb Merge branch 'master' into 1.23.14-to-2.0.0
# Conflicts:
#	src/lang/en.json
#	src/util.js
#	src/util.ts
2024-06-26 10:00:30 +08:00
Louis Lam
1185b259c2
Fix dayjs issue on frontend (#4881) 2024-06-25 18:08:02 +08:00
Louis Lam
6e30f71947
Follow up the Apprise issue (#4880) 2024-06-24 19:49:37 +08:00
Louis Lam
953058c6a5
Drop out the testing repo from apt (#4878) 2024-06-24 16:20:12 +08:00
Louis Lam
85c67b6866
Revert "Switch back to TryGhost/node-sqlite3 from louislam/node-sqlite3" (#4879) 2024-06-24 15:52:07 +08:00
Brodie Davis
a19f417896 utilize extractAdress helper 2024-06-23 21:18:42 -04:00
Brodie Davis
0325c14d42 remove unneeded validation 2024-06-23 21:16:27 -04:00
Louis Lam
83969d2112
Update dependencies and embed axios-ntlm 1.3.0 into the project (#4877) 2024-06-24 02:08:39 +08:00
Louis Lam
dc15443716
Revert "Fix: Use retryInterval when a monitor is DOWN" (#4875) 2024-06-23 23:46:52 +08:00
Brodie Davis
2c8cefc784 use string url in json, not url object 2024-06-20 12:10:49 -04:00
Brodie Davis
94f75b2fbc invalidate url field for irrelevant monitor types 2024-06-20 12:05:15 -04:00
Brodie Davis
1488b1f17b prevent invalid url strings in monitorJSON 2024-06-20 11:54:20 -04:00
Qi Zhao
4941b17a46 perf: ️ revert some overengineer code 2024-06-20 10:50:35 +08:00
Qi Zhao
58533e8f06 Update server/routers/api-router.js
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-06-20 10:50:35 +08:00
Qi Zhao
3f425dc160 Update server/routers/api-router.js
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-06-20 10:50:35 +08:00
Qi Zhao
f63d36478d Update server/routers/api-router.js
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-06-20 10:50:35 +08:00
Qi Zhao
7270caccae Update server/routers/api-router.js
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-06-20 10:50:35 +08:00
Qi Zhao
53c4bba387 fix: 🐛 badge requestedDuration 2024-06-20 10:50:35 +08:00
Qi Zhao
e5ff86e6ac fix: 🐛 status & ping badge duration 2024-06-20 10:50:35 +08:00
Frank Elsinga
39c1283ba6
New notification provider: Threema Gateway (#4854) 2024-06-17 16:55:45 +02:00
booooza
add0ef7be0
Update threema provider translations to better match threema terminology 2024-06-17 10:16:38 +02:00
booooza
0960ec62b7
Adjust Threema notification view to conform with project standards 2024-06-17 08:46:08 +02:00
booooza
39b0c62c1d
Refactor error handling to improve clarity and maintainability 2024-06-17 08:34:53 +02:00
Matt Visnovsky
8d8ce23f2b Robustness and edge-case handling 2024-06-14 16:45:51 -06:00
Matt Visnovsky
a0374487ce C&P typo from review 2024-06-14 16:44:36 -06:00
booooza
2e5e103434
New notification provider: Threema Gateway 2024-06-14 12:25:19 +02:00
Matt Visnovsky
e237d66bfc "Hostname or IP Address" back to "Hostname"
Revert change from "Hostname" to "Hostname or IP Address" from efb1642e3c
2024-06-13 12:26:05 -06:00
Matt Visnovsky
a1f31f9373 Remove jsonQueryDescription from lang files
jsonQueryDescription requires re-translation
2024-06-13 12:20:54 -06:00
Matt Visnovsky
46ecb822ba "Hostname or IP Address" back to "Hostname"
Revert change from "Hostname" to "Hostname or IP Address" from efb1642e3c
2024-06-13 12:17:49 -06:00
Matt Visnovsky
092688a5c8 ES Lint 2024-06-13 12:15:13 -06:00
Matt Visnovsky
6fc0cbf415 ES Lint 2024-06-13 12:12:17 -06:00
Matt Visnovsky
9820f57c64 Truncate long responses 2024-06-13 12:10:28 -06:00
Frank Elsinga
fbf7b77ceb
improved zoho-cliq message format (#4848) 2024-06-13 17:10:46 +02:00
Frank Elsinga
9f563adc1a
fixed formatting mistakes 2024-06-13 17:04:38 +02:00
Frank Elsinga
c9132adfc7
made sure that the address extraction is extracted into its own method 2024-06-13 17:00:11 +02:00
Frank Elsinga
c124f3a43e
Formtting fix 2024-06-12 23:24:10 +02:00
Frank Elsinga
248aec8803
Formtting fix 2024-06-12 23:24:01 +02:00
Matt Visnovsky
b5a73e5ad7
Apply suggestions from code review
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-06-12 14:25:25 -06:00
Frank Elsinga
5dc4bb64d5
Merge branch 'master' into snmp-monitor 2024-06-12 19:55:31 +02:00
Matt Visnovsky
69c22edf23 Removed "Control Value"
No longer used.
2024-06-12 11:46:31 -06:00
Francesco M
bd95ccdc64
Update server/notification-providers/zoho-cliq.js
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-06-12 18:14:05 +02:00
Francesco M
82fb7b2816
improved zoho-cliq message format:
- show PORT (cloned switchcase from discord,squadcast,servenio)
- show monitorName in the first row to get on point also from messagge preview notification
- avoid duplication of monitorName and monitorName in the message content
2024-06-12 08:46:48 +02:00
Matt Visnovsky
43bd09be2c Update 2024-04-26-0000-snmp-monitor.js 2024-06-10 16:15:12 -06:00
Matt Visnovsky
e2e81091c3 Helpful error when query returns object or array 2024-06-10 12:49:41 -06:00
Matt Visnovsky
82352910bf Fix: Cast to string then eval 2024-06-10 12:25:55 -06:00
Matt Visnovsky
23f844d871 Error handling robustness
Cleanup of some things I missed yesterday...
2024-06-07 16:35:06 -06:00
Frank Elsinga
bc25b719db
removed some monitor drift in terms of code comments (#4820) 2024-06-07 16:03:12 +02:00
Frank Elsinga
b6cd21c71a
Removed where I was wrong about imports 2024-06-07 15:54:28 +02:00
Matt Visnovsky
fdc145bffd Added Robustness
There are a lot of changes here:
-Fixed a lot of issues encountered during my testing
-JSON path is evaluated BEFORE making comparisons (this was the true intended behavior by @chakflying)
-Variable name changes (cosmetic)
-Added != operator
-Changed jsonQueryDescription (again)
2024-06-06 18:52:33 -06:00
Matt Visnovsky
eaa935cba0 Also return result of the evaluation
-Maximum compatibility with @chakflying's existing json-query monitor code.
2024-06-06 10:09:35 -06:00
Matt Visnovsky
10d3188dd3 Query json directly rather than with $.value
-This is less abstract
-Maximum compatibility with @chakflying's existing json-query monitor code.
2024-06-06 10:08:07 -06:00
Matt Visnovsky
36dc94b8f2 Better type handling 2024-06-06 10:04:20 -06:00
Matt Visnovsky
efb1642e3c Blend json-query and snmp monitors
Utilizes the JSON Query library to handle comparison logic.
2024-06-05 16:09:53 -06:00
Matt Visnovsky
2d2c1866df Fix: a typo 2024-06-05 15:40:07 -06:00
Matt Visnovsky
b2d76bc60a Refactor line for conciseness 2024-06-05 15:39:55 -06:00
Matt Visnovsky
7eee5db4d2 Variable changes
-Reuse expected_value for snmpControlValue
-Create jsonPathOperator for snmpCondition
2024-06-05 15:37:47 -06:00
Frank Elsinga
d74facded6 removed some monitor drift in terms of imports and documentation 2024-06-04 05:01:53 +02:00
Frank Elsinga
4794f9eb0b
Removed the last reminents of cypress (#4819) 2024-06-04 03:09:52 +02:00
Frank Elsinga
77d82ec30f removed the last reminents of cypress 2024-06-04 03:02:34 +02:00
Frank Elsinga
c7b83e729b
Fixed smspartner not having fully working translations (#4816) 2024-06-04 01:28:33 +02:00
Frank Elsinga
f43fe53d28 Fixed smspartner not having fully working translations 2024-06-04 01:10:20 +02:00
Frank Elsinga
10ebdcacaa
Fix: Use retryInterval when a monitor is DOWN (#4476) 2024-06-03 21:47:43 +02:00
Frank Elsinga
a00b4ed285
Feat: Add background color change on hover to nav links (#4494) 2024-06-03 21:06:23 +02:00
Frank Elsinga
a26d93ac52
Merge branch 'master' into nav-link-hover 2024-06-03 21:04:50 +02:00
DevMirza
c919d2c990
fix(ci): Prevent ARM runner from running in Forks (#4803) 2024-05-30 14:46:04 +08:00
Frank Elsinga
40d24e7837
feat: update feishu notification template (#4800) 2024-05-29 18:19:53 +02:00
nino
30bf7a5e23 fix: update Feishu notification provider configuration 2024-05-29 22:22:05 +08:00
nino
4e63d00007 feat: update feishu notification template 2024-05-29 18:20:33 +08:00
Frank Elsinga
9f35290c68
made sure that the Set up a Docker Builder section in the contribution guide is layouted like the rest 2024-05-29 11:03:37 +02:00
Frank Elsinga
11007823e7
feat: added HTTP method option for push monitor (#1991) 2024-05-24 10:26:58 +02:00
Stefan Ottosson
9ce0911e34
Merge branch 'master' into feature/http-method-push-monitor 2024-05-24 09:05:11 +02:00
Stefan Ottosson
df663a81cd
Update src/pages/EditMonitor.vue
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-05-24 09:04:12 +02:00
Stefan Ottosson
8b648a3ed1
Revert "fix: hide body options for monitor type push"
This reverts commit e670b5f4cf.
2024-05-24 08:29:22 +02:00
Stefan Ottosson
9c7aa13190
fix: remove check that method is correct 2024-05-24 08:29:09 +02:00
Stefan Ottosson
823aeda9fe
Revert "fix: update some examples"
This reverts commit b2ede38269.
2024-05-24 08:26:28 +02:00
Frank Elsinga
1590ca6c02
made sure that json-query for the mqtt monitor is translated properly (#4791) 2024-05-23 20:37:02 +02:00
Frank Elsinga
359e961aa7
Fixed flipflopping between having needs:resolve-merge-conflict and not having needs:resolve-merge-conflict 2024-05-23 20:16:37 +02:00
Stefan Ottosson
e670b5f4cf
fix: hide body options for monitor type push 2024-05-23 17:49:18 +02:00
Stefan Ottosson
b2ede38269
fix: update some examples 2024-05-23 17:42:36 +02:00
Stefan Ottosson
1ac5696463
Merge branch 'master' into feature/http-method-push-monitor
# Conflicts:
#	src/pages/EditMonitor.vue
2024-05-23 17:34:45 +02:00
Frank Elsinga
63b8c52a65
made sure that json-query for the mqtt monitor is translated properly 2024-05-23 14:48:12 +02:00
Frank Elsinga
4df71af34f
Update en.json: "setup" -> "set up" (#4436) 2024-05-23 14:13:53 +02:00
Frank Elsinga
07a0718272
Translation unpin incident -> delete incident (#4565) 2024-05-23 14:13:28 +02:00
Frank Elsinga
46e4b16a7e
Translations Update from Weblate (#4394) 2024-05-23 14:10:39 +02:00
TheSkout001
5473bc9689 Translated using Weblate (Russian)
Currently translated at 89.4% (826 of 923 strings)

Co-authored-by: TheSkout001 <daniil.afg@yandex.ru>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:58 +00:00
dnlweijers
9f07011200 Translated using Weblate (Dutch)
Currently translated at 100.0% (923 of 923 strings)

Co-authored-by: dnlweijers <dnlweijers5@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:58 +00:00
Ilkka Myller
029944c655 Translated using Weblate (Finnish)
Currently translated at 100.0% (940 of 940 strings)

Translated using Weblate (Finnish)

Currently translated at 100.0% (923 of 923 strings)

Translated using Weblate (Finnish)

Currently translated at 100.0% (923 of 923 strings)

Co-authored-by: Ilkka Myller <ilkka.myller@nodefield.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fi/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:58 +00:00
glauder
b02a4055b8 Translated using Weblate (Russian)
Currently translated at 89.4% (826 of 923 strings)

Translated using Weblate (Russian)

Currently translated at 96.2% (888 of 923 strings)

Co-authored-by: glauder <glauder@mail.ru>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:58 +00:00
Bram Van Mol
82c59da16a Translated using Weblate (Dutch)
Currently translated at 99.5% (919 of 923 strings)

Co-authored-by: Bram Van Mol <bram.vanmol@cawantwerpen.be>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:58 +00:00
gclme
888585dcef Translated using Weblate (Malayalam)
Currently translated at 5.3% (49 of 923 strings)

Translated using Weblate (Malayalam)

Currently translated at 3.6% (34 of 923 strings)

Co-authored-by: gclme <github@cloudlink.media>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ml/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:58 +00:00
TheSkout001
dd1eab1c6c Translated using Weblate (Russian)
Currently translated at 96.0% (887 of 923 strings)

Co-authored-by: TheSkout001 <daniil.afg@yandex.ru>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:58 +00:00
Ilkka Myller
a56c4ffa36 Translated using Weblate (Finnish)
Currently translated at 100.0% (923 of 923 strings)

Translated using Weblate (English)

Currently translated at 100.0% (923 of 923 strings)

Co-authored-by: Ilkka Myller <ilkka@myller.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/en/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fi/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:58 +00:00
eballester
4e49dccd15 Translated using Weblate (Catalan)
Currently translated at 7.8% (72 of 923 strings)

Co-authored-by: eballester <eduard.ballester@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ca/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:58 +00:00
Rumplin
96560fff20 Translated using Weblate (Slovenian)
Currently translated at 65.6% (606 of 923 strings)

Co-authored-by: Rumplin <rumplin@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/sl/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:58 +00:00
Karim guezlane
f5c59f403d Translated using Weblate (Arabic (ar_SY))
Currently translated at 71.7% (662 of 923 strings)

Co-authored-by: Karim guezlane <k.guezlane@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ar_SY/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:58 +00:00
Adrian \"Rootovsky\" Korzeniowski
798be2a4a8 Translated using Weblate (Polish)
Currently translated at 96.6% (891 of 922 strings)

Co-authored-by: Adrian \"Rootovsky\" Korzeniowski <adikorzeniowski@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pl/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:57 +00:00
Luc Dogge
ed69842939 Translated using Weblate (Dutch)
Currently translated at 99.1% (914 of 922 strings)

Co-authored-by: Luc Dogge <l.j.dogge@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:57 +00:00
Michal
5e1d2736eb Translated using Weblate (Czech)
Currently translated at 99.6% (919 of 922 strings)

Co-authored-by: Michal <black23@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/cs/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:57 +00:00
AnnAngela
9a83a9d6e7 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (945 of 945 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (940 of 940 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (923 of 923 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (922 of 922 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.8% (921 of 922 strings)

Co-authored-by: AnnAngela <naganjue@vip.qq.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:57 +00:00
凯观生活
325f3520e1 Translated using Weblate (Chinese (Simplified))
Currently translated at 99.8% (921 of 922 strings)

Co-authored-by: 凯观生活 <niujinkai@vip.qq.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:57 +00:00
Facundo Ortiz Gallego
52036394a5 Translated using Weblate (Spanish)
Currently translated at 97.5% (890 of 912 strings)

Co-authored-by: Facundo Ortiz Gallego <faq.ortiz@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/es/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:57 +00:00
Marco
b112afba9b Translated using Weblate (German)
Currently translated at 100.0% (940 of 940 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (940 of 940 strings)

Translated using Weblate (German)

Currently translated at 100.0% (923 of 923 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (923 of 923 strings)

Translated using Weblate (German)

Currently translated at 100.0% (922 of 922 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (922 of 922 strings)

Translated using Weblate (German)

Currently translated at 100.0% (914 of 914 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (914 of 914 strings)

Translated using Weblate (German)

Currently translated at 100.0% (912 of 912 strings)

Co-authored-by: Marco <marco@nanoweb.ch>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de_CH/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:57 +00:00
Justman100
d0e1e40717 Translated using Weblate (German)
Currently translated at 100.0% (912 of 912 strings)

Co-authored-by: Justman100 <justmegaliga10000@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:57 +00:00
aditya wahyudi
fff47248f0 Translated using Weblate (Indonesian)
Currently translated at 99.4% (907 of 912 strings)

Co-authored-by: aditya wahyudi <aditbaco@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/id/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:57 +00:00
Zandor Smith
48a1314de1 Translated using Weblate (Dutch)
Currently translated at 100.0% (912 of 912 strings)

Co-authored-by: Zandor Smith <info@zsinfo.nl>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:57 +00:00
Piet Jan
9a204fbfa9 Translated using Weblate (German)
Currently translated at 100.0% (912 of 912 strings)

Translated using Weblate (Dutch)

Currently translated at 98.4% (898 of 912 strings)

Co-authored-by: Piet Jan <piet2001@fireman.net>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:57 +00:00
Buchtič
9e6e21243f Translated using Weblate (Czech)
Currently translated at 100.0% (912 of 912 strings)

Co-authored-by: Buchtič <martin.buchta@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/cs/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:57 +00:00
gabichan
e355452b5c Translated using Weblate (Spanish)
Currently translated at 96.9% (884 of 912 strings)

Co-authored-by: gabichan <gabichan@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/es/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:57 +00:00
Lucas Elias Baccan
0279331326 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (912 of 912 strings)

Translated using Weblate (English)

Currently translated at 100.0% (912 of 912 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 99.7% (910 of 912 strings)

Co-authored-by: Lucas Elias Baccan <naccabbaccan@hotmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/en/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_BR/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:57 +00:00
gmesml
ec66dca19b Translated using Weblate (Albanian)
Currently translated at 27.8% (254 of 912 strings)

Co-authored-by: gmesml <gme@sml.at>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/sq/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:57 +00:00
stanol
d36e6b09ae Translated using Weblate (Ukrainian)
Currently translated at 100.0% (940 of 940 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (923 of 923 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (923 of 923 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (922 of 922 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (917 of 917 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (914 of 914 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (912 of 912 strings)

Co-authored-by: stanol <stanol777@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/uk/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:57 +00:00
pashanchannel
f4e80dbd02 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (912 of 912 strings)

Co-authored-by: pashanchannel <pavlonimetrons@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/uk/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:57 +00:00
basmulder03
7dc17bd796 Translated using Weblate (Dutch)
Currently translated at 100.0% (889 of 889 strings)

Co-authored-by: basmulder03 <bas.d.mulder@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:57 +00:00
amin Kazemi
68f9dfbcef Translated using Weblate (Persian)
Currently translated at 100.0% (889 of 889 strings)

Co-authored-by: amin Kazemi <amin.kazemi.ir@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fa/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:57 +00:00
Ömer Faruk Genç
f85c9b6b1d Translated using Weblate (Turkish)
Currently translated at 100.0% (940 of 940 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (923 of 923 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (923 of 923 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (922 of 922 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (912 of 912 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (889 of 889 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (887 of 887 strings)

Co-authored-by: Ömer Faruk Genç <omer@farukgenc.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/tr/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:57 +00:00
Marco Beretta
75426ffbe7 Translated using Weblate (Italian)
Currently translated at 73.0% (648 of 887 strings)

Co-authored-by: Marco Beretta <marco13beretta@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/it/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:57 +00:00
Michal
05c67d07c3 Translated using Weblate (Czech)
Currently translated at 99.8% (911 of 912 strings)

Translated using Weblate (Czech)

Currently translated at 99.4% (884 of 889 strings)

Translated using Weblate (Czech)

Currently translated at 99.5% (883 of 887 strings)

Co-authored-by: Michal <black23@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/cs/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:56 +00:00
AnnAngela
e6c85d3afc Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (912 of 912 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (907 of 907 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (894 of 894 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (889 of 889 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (887 of 887 strings)

Co-authored-by: AnnAngela <naganjue@vip.qq.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:56 +00:00
stanol
5d06378c11 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (894 of 894 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (889 of 889 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (887 of 887 strings)

Co-authored-by: stanol <stanol777@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/uk/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:56 +00:00
Gunnar Norin
3c85d86cda Translated using Weblate (Swedish)
Currently translated at 100.0% (923 of 923 strings)

Translated using Weblate (Swedish)

Currently translated at 100.0% (922 of 922 strings)

Translated using Weblate (Swedish)

Currently translated at 100.0% (912 of 912 strings)

Translated using Weblate (Swedish)

Currently translated at 100.0% (889 of 889 strings)

Translated using Weblate (Swedish)

Currently translated at 100.0% (887 of 887 strings)

Co-authored-by: Gunnar Norin <gunnar.norin@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/sv/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:56 +00:00
René Vlugt
6fdcb1b909 Translated using Weblate (Dutch)
Currently translated at 100.0% (887 of 887 strings)

Co-authored-by: René Vlugt <vashiru@pm.me>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:56 +00:00
flyingfeng
1527a15dde Translated using Weblate (Japanese)
Currently translated at 62.9% (558 of 887 strings)

Co-authored-by: flyingfeng <2917268843@qq.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ja/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:56 +00:00
MrEddX
5281dd47f7 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (940 of 940 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (923 of 923 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (922 of 922 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (917 of 917 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (914 of 914 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (912 of 912 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (907 of 907 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (894 of 894 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (889 of 889 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (887 of 887 strings)

Co-authored-by: MrEddX <mreddx@chatrix.one>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/bg/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:56 +00:00
DevMirza
43c10287a4 Translated using Weblate (Urdu)
Currently translated at 61.6% (546 of 885 strings)

Co-authored-by: DevMirza <pzhafeez@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ur/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:56 +00:00
Akashubham09
721234b5f6 Translated using Weblate (English)
Currently translated at 99.8% (884 of 885 strings)

Co-authored-by: Akashubham09 <Shubhamkumar56169@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/en/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:56 +00:00
demonisius
ac4e1d890c Translated using Weblate (Russian)
Currently translated at 100.0% (885 of 885 strings)

Co-authored-by: demonisius <demonisius@mail.ru>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:56 +00:00
Peter Paul
584c8b05ca Translated using Weblate (Afrikaans)
Currently translated at 6.8% (61 of 885 strings)

Added translation using Weblate (Afrikaans)

Co-authored-by: Peter Paul <henco@techguide.co.za>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/af/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:56 +00:00
JC
25b17e5dde Translated using Weblate (Catalan)
Currently translated at 4.7% (42 of 885 strings)

Co-authored-by: JC <jjsuscc@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ca/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:56 +00:00
Ismael
17424f4e74 Translated using Weblate (Spanish)
Currently translated at 99.8% (884 of 885 strings)

Co-authored-by: Ismael <ismaellambertymuniz@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/es/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:56 +00:00
Marco
476d869321 Translated using Weblate (German (Switzerland))
Currently translated at 100.0% (912 of 912 strings)

Translated using Weblate (German)

Currently translated at 100.0% (912 of 912 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (912 of 912 strings)

Translated using Weblate (German)

Currently translated at 100.0% (912 of 912 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (912 of 912 strings)

Translated using Weblate (German)

Currently translated at 100.0% (907 of 907 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (907 of 907 strings)

Translated using Weblate (German)

Currently translated at 100.0% (894 of 894 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (894 of 894 strings)

Translated using Weblate (German)

Currently translated at 100.0% (889 of 889 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (889 of 889 strings)

Translated using Weblate (German)

Currently translated at 100.0% (887 of 887 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (887 of 887 strings)

Translated using Weblate (German)

Currently translated at 100.0% (887 of 887 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (887 of 887 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (885 of 885 strings)

Co-authored-by: Marco <marco@nanoweb.ch>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de_CH/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:56 +00:00
Finn
c9a32bcdb2 Translated using Weblate (German)
Currently translated at 100.0% (885 of 885 strings)

Co-authored-by: Finn <git@finn.gg>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:56 +00:00
Aindriú Mac Giolla Eoin
ca28bee05f Translated using Weblate (Irish)
Currently translated at 100.0% (940 of 940 strings)

Translated using Weblate (Irish)

Currently translated at 96.4% (890 of 923 strings)

Translated using Weblate (Irish)

Currently translated at 100.0% (885 of 885 strings)

Translated using Weblate (Irish)

Currently translated at 80.0% (708 of 885 strings)

Translated using Weblate (Irish)

Currently translated at 47.4% (420 of 885 strings)

Translated using Weblate (Irish)

Currently translated at 7.7% (69 of 885 strings)

Co-authored-by: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ga/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:56 +00:00
John Doe
57c8656d32 Translated using Weblate (Bavarian)
Currently translated at 0.4% (4 of 885 strings)

Added translation using Weblate (Bavarian)

Co-authored-by: John Doe <weplaet@candymail.de>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/bar/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:56 +00:00
Louis Lam
a7f7aa1ce9 Added translation using Weblate (Irish)
Co-authored-by: Louis Lam <louislam@users.noreply.github.com>
2024-05-23 02:35:55 +00:00
letterlock
6bf5d97d66 Translated using Weblate (Danish)
Currently translated at 71.6% (634 of 885 strings)

Co-authored-by: letterlock <max@letterlock.eu>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/da/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:55 +00:00
Cosmo Abdon
1c438c91d5 Translated using Weblate (Portuguese (Portugal))
Currently translated at 50.8% (450 of 885 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (885 of 885 strings)

Co-authored-by: Cosmo Abdon <cosmo.webp2@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_BR/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_PT/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:55 +00:00
Adam Stachowicz
561d307fb8 Translated using Weblate (Polish)
Currently translated at 100.0% (885 of 885 strings)

Co-authored-by: Adam Stachowicz <saibamenppl@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pl/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:55 +00:00
Filip Rojek
49605cd061 Translated using Weblate (Czech)
Currently translated at 99.5% (881 of 885 strings)

Co-authored-by: Filip Rojek <filip@filiprojek.cz>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/cs/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:55 +00:00
Kisem
320d9712cd Translated using Weblate (Hungarian)
Currently translated at 89.8% (795 of 885 strings)

Co-authored-by: Kisem <kiss.m.aron@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hu/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:55 +00:00
Mohannad Faihan Otaibi
b0a855e218 Translated using Weblate (Arabic)
Currently translated at 82.9% (734 of 885 strings)

Co-authored-by: Mohannad Faihan Otaibi <mohannad.otaibi@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ar/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:55 +00:00
Máté Tallósi
04d46b6a43 Translated using Weblate (Hungarian)
Currently translated at 89.8% (795 of 885 strings)

Translated using Weblate (Hungarian)

Currently translated at 87.7% (777 of 885 strings)

Co-authored-by: Máté Tallósi <tallosimate@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hu/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:55 +00:00
Jochem Pluim
50c8dd95c2 Translated using Weblate (Dutch)
Currently translated at 100.0% (885 of 885 strings)

Co-authored-by: Jochem Pluim <jochem@pluim.nu>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:55 +00:00
Jonne Saloranta
668aa49343 Translated using Weblate (Finnish)
Currently translated at 76.3% (676 of 885 strings)

Co-authored-by: Jonne Saloranta <saloranta.jonne@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fi/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:55 +00:00
vahidxo
e2a2234504 Translated using Weblate (Persian)
Currently translated at 100.0% (885 of 885 strings)

Co-authored-by: vahidxo <s.v.morsali@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fa/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:55 +00:00
Aji Priyo Wibowo
8ccf536498 Translated using Weblate (Indonesian)
Currently translated at 100.0% (885 of 885 strings)

Co-authored-by: Aji Priyo Wibowo <aji.wibowo@ionmobility.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/id/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:55 +00:00
Patrick van Halderen
f828fee27e Translated using Weblate (Dutch)
Currently translated at 99.6% (882 of 885 strings)

Co-authored-by: Patrick van Halderen <patrick@vanhalderen.net>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:55 +00:00
Ivan Bratović
5df75b37ab Translated using Weblate (Croatian)
Currently translated at 100.0% (940 of 940 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (912 of 912 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (885 of 885 strings)

Co-authored-by: Ivan Bratović <ivanbratovic4@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hr/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:55 +00:00
Dan Misener
b1f2e25188 Translated using Weblate (English)
Currently translated at 100.0% (885 of 885 strings)

Co-authored-by: Dan Misener <dan@misener.org>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/en/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:55 +00:00
kindercat
c9eb483a58 Translated using Weblate (Romanian)
Currently translated at 100.0% (923 of 923 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (914 of 914 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (912 of 912 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (907 of 907 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (894 of 894 strings)

Translated using Weblate (English)

Currently translated at 100.0% (889 of 889 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (889 of 889 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (887 of 887 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (885 of 885 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (885 of 885 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (885 of 885 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (885 of 885 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (885 of 885 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (885 of 885 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (885 of 885 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (885 of 885 strings)

Co-authored-by: kindercat <156439718+kindercat@users.noreply.github.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/en/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ro/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:55 +00:00
Alex Javadi
22d97318c2 Translated using Weblate (Persian)
Currently translated at 100.0% (885 of 885 strings)

Co-authored-by: Alex Javadi <15309978+aljvdi@users.noreply.github.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fa/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:55 +00:00
Alejandro Vásquez Neira
1d75d7cace Translated using Weblate (Spanish)
Currently translated at 100.0% (885 of 885 strings)

Co-authored-by: Alejandro Vásquez Neira <alejandro.vasquez@neurotools.cl>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/es/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:55 +00:00
Cyril59310
5c72176ee4 Translated using Weblate (French)
Currently translated at 100.0% (940 of 940 strings)

Translated using Weblate (French)

Currently translated at 100.0% (936 of 936 strings)

Translated using Weblate (French)

Currently translated at 100.0% (932 of 932 strings)

Translated using Weblate (French)

Currently translated at 100.0% (923 of 923 strings)

Translated using Weblate (French)

Currently translated at 100.0% (922 of 922 strings)

Translated using Weblate (French)

Currently translated at 100.0% (917 of 917 strings)

Translated using Weblate (French)

Currently translated at 100.0% (914 of 914 strings)

Translated using Weblate (French)

Currently translated at 100.0% (912 of 912 strings)

Translated using Weblate (French)

Currently translated at 100.0% (908 of 908 strings)

Translated using Weblate (French)

Currently translated at 100.0% (907 of 907 strings)

Translated using Weblate (French)

Currently translated at 100.0% (894 of 894 strings)

Translated using Weblate (French)

Currently translated at 100.0% (889 of 889 strings)

Translated using Weblate (French)

Currently translated at 100.0% (887 of 887 strings)

Translated using Weblate (French)

Currently translated at 100.0% (885 of 885 strings)

Translated using Weblate (French)

Currently translated at 100.0% (885 of 885 strings)

Co-authored-by: Cyril59310 <archas.cyril@hotmail.fr>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fr/
Translation: Uptime Kuma/Uptime Kuma
2024-05-23 02:35:54 +00:00
Nicolas Verlhiac
b1e95968c0
New notification provider: SMS Partner API (#4769)
Co-authored-by: Nicolas Verlhiac <nicolas@novariom.com>
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-05-22 22:53:49 +02:00
Louis Lam
88b7c047a8
Switch back to TryGhost/node-sqlite3 from louislam/node-sqlite3 (#4773) 2024-05-20 10:42:37 +08:00
Gauvino
533af0f56c
feat: Add merge conflict labeler workflow (#4694)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-05-20 00:16:42 +02:00
HdroguettA
daca38a554
Ignore TLS/SSL error for Redis (#3878)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-05-19 23:34:01 +02:00
Furkan İ
55b2d4b907
Add Bitrix24 Webhook notification (#3620)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
Co-authored-by: Matthew Nickson <mnickson@sidingsmedia.com>
2024-05-19 23:33:32 +02:00
Damon
168d1ca24f
refactor: upload check label when monitor empty (#3661)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-05-19 23:17:09 +02:00
Jed Fox
668e8bafed
Gray out label for up/down/maintenance labels when they are zero (#3037)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-05-19 23:01:14 +02:00
Nelson Chan
a581a85633
Feat: Use UptimeCalculator for PingChart (#4264)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-05-19 22:03:32 +02:00
Sebastian Lang
a3ac954140
Add support for custom mongodb commands (#4445)
Co-authored-by: Sebastian Lang <sebastian.lang@damovo.com>
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-05-19 21:59:57 +02:00
Laurent Aupse
e856cb6007
Make auto refresh interval customizable (#4260)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-05-19 21:56:55 +02:00
TheDanniCraft
4e24e96dab
[discord] thread/forum channel support (#4099) 2024-05-19 21:14:13 +02:00
Louis Lam
6bfb1be71a
Improve MariaDB's connection (#4728) 2024-05-19 22:46:22 +08:00
jmolnar-comparative
a81f949f98
chore: fixed a typo for internal, unused part of the file upload icon for status page (#4757) 2024-05-13 19:24:13 +02:00
jmolnar-comparative
237a6e8da9
chore: fixed a typo for internal, unused part of the file upload icon for status page (#4750) 2024-05-10 20:35:36 +02:00
Matt Visnovsky
d25ee8f128 Using JSON Query Expressions
Equivalent functionality as before, but we're now building json-query expressions for the user.
2024-05-10 10:56:38 -06:00
Matt Visnovsky
c4759948ec Fix ES Lint 2024-05-08 11:00:18 -06:00
Matt Visnovsky
1c4740748c Re-use monitor.radiusPassword for community string 2024-05-08 11:00:10 -06:00
Matt Visnovsky
da8f0d1c31
Apply suggestions from code review
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-05-08 10:06:20 -06:00
Matt Visnovsky
8b4b27f359 Final cleanup of changes to EditMonitor.vue
Reverts unintentional changes committed in: d92003e172
2024-05-07 10:05:36 -06:00
Matt Visnovsky
2015142b00 Maybe don't helptext all the things...
Addresses https://github.com/louislam/uptime-kuma/pull/4717#discussion_r1589866321
2024-05-07 09:23:23 -06:00
Matt Visnovsky
e5fb726160 Missed changes leftover from removal of getKey() 2024-05-07 09:16:23 -06:00
Matt Visnovsky
2b5d100cd3 Ensure SNMP session is closed properly
Addresses https://github.com/louislam/uptime-kuma/pull/4717#discussion_r1589858252

Co-Authored-By: Frank Elsinga <frank.elsinga@tum.de>
2024-05-06 15:56:41 -06:00
Matt Visnovsky
f4842ead68 Translation key for OID 2024-05-06 15:38:14 -06:00
Matt Visnovsky
56e7fa8bd5 Helptext ALL THE THINGS 2024-05-06 14:33:48 -06:00
Matt Visnovsky
19f21a9a39 SNMP OID helptext 2024-05-06 14:19:33 -06:00
Matt Visnovsky
4ef66b3760 SNMP version helptext 2024-05-06 14:17:46 -06:00
Matt Visnovsky
e9b52eb0e7 Separate error cases for SNMP varbind returns 2024-05-06 14:06:40 -06:00
Matt Visnovsky
c68b1c6274 Remove unnecessary func getKey 2024-05-06 12:05:12 -06:00
Matt Visnovsky
6037912085 Consistent placeholder text
Co-Authored-By: Frank Elsinga <frank.elsinga@tum.de>
2024-05-06 09:58:39 -06:00
Matt Visnovsky
433e317eee Simplify error catch
Co-Authored-By: Frank Elsinga <frank.elsinga@tum.de>
2024-05-06 09:57:13 -06:00
Matt Visnovsky
1fe1bb5864 Given that above throws, the else case is not nessesary
Co-Authored-By: Frank Elsinga <frank.elsinga@tum.de>
2024-05-06 09:53:14 -06:00
Matt Visnovsky
997791bc78 Default: invalid condition error
Co-Authored-By: Frank Elsinga <frank.elsinga@tum.de>
2024-05-06 09:51:37 -06:00
Matt Visnovsky
0384b34007 Remove unnecessary func getKey
Addresses:
- https://github.com/louislam/uptime-kuma/pull/4717#discussion_r1589856311
- https://github.com/louislam/uptime-kuma/pull/4717#discussion_r1589862733
2024-05-06 09:49:36 -06:00
Matt Visnovsky
86b997c664 Limit to <= SNMPv2c for now 2024-05-06 09:47:51 -06:00
Matt Visnovsky
0280b2ad3f A comment about varbinds[0] for clarification
Addresses https://github.com/louislam/uptime-kuma/pull/4717#discussion_r1589855126
2024-05-06 09:21:49 -06:00
Matt Visnovsky
4386d0afad Apply suggestions from code review
Addresses:
-https://github.com/louislam/uptime-kuma/pull/4717#discussion_r1589805237
-https://github.com/louislam/uptime-kuma/pull/4717#discussion_r1589806199
-https://github.com/louislam/uptime-kuma/pull/4717#discussion_r1589853470
-https://github.com/louislam/uptime-kuma/pull/4717#discussion_r1589854032
2024-05-05 15:47:43 -06:00
Matt Visnovsky
9053b48030
Merge branch 'louislam:master' into snmp-monitor 2024-05-03 16:13:40 -06:00
Matt Visnovsky
407f7291b0 New dependency for net-snmp 2024-05-03 11:58:03 -06:00
Matt Visnovsky
09fd816aae Updated code comments 2024-05-03 11:52:02 -06:00
Matt Visnovsky
c87ac2f043 Move getKey() to util.ts 2024-05-03 11:39:14 -06:00
Matt Visnovsky
8e56a81ef1 Refactor how strings/numerics are parsed
Fixes issue `toString() radix argument must be between 2 and 36` due to `.toString("ascii")` conversion. This issue was introduced in 704ffd3f4b.
2024-05-02 15:11:03 -06:00
Matt Visnovsky
f059d54349 Use frontend timeout
Addresses https://github.com/louislam/uptime-kuma/pull/4717#discussion_r1585616669
2024-05-02 15:07:22 -06:00
Matt Visnovsky
d83c2b90c9 Revert unintentional changes to EditMonitor.vue
Reverts unintentional changes committed in: d92003e172
2024-05-02 09:50:09 -06:00
Frank Elsinga
dbbc79a05a
Fixed a typo introduced in #3836 (#4729)
Co-authored-by: Nelson Chan <3271800+chakflying@users.noreply.github.com>
2024-05-02 12:11:49 +08:00
Matt Visnovsky
4699a1ccd8 ES Lint Compliant
Also changed line endings from 'LF' to 'CRLF'
2024-05-01 10:29:13 -06:00
Matt Visnovsky
ba84f01444 Delete .EditMonitor.vue.swp
Co-Authored-By: Frank Elsinga <frank.elsinga@tum.de>
2024-05-01 09:15:35 -06:00
Matt Visnovsky
9ba0f68a86 Remove supurfluous log.debug
Co-Authored-By: Frank Elsinga <frank.elsinga@tum.de>
2024-04-30 18:19:18 -06:00
Matt Visnovsky
97a9094d7c ES Lint Compliant 2024-04-30 18:14:58 -06:00
Matt Visnovsky
e944492da8 Corrected down function
b4bd003626 (r1585590243)
2024-04-30 18:06:03 -06:00
Matt Visnovsky
7459654e11 ES Lint Compliant 2024-04-30 18:04:59 -06:00
Matt Visnovsky
ba47aca51f
Apply suggestions from code review
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-04-30 17:54:29 -06:00
Frank Elsinga
b4bd003626
Merge branch 'master' into snmp-monitor 2024-05-01 00:01:03 +02:00
Matt Visnovsky
704ffd3f4b Finalized SNMP monitor 2024-04-30 15:18:25 -06:00
Matt Visnovsky
9848ce49f3 Minor frontend styling 2024-04-30 15:16:45 -06:00
Matt Visnovsky
4593afbdbb Frontend input validation 2024-04-30 15:15:37 -06:00
Matt Visnovsky
9d28fcff1a Update bean model backend
Updates appropriate values async when editing the SNMP monitor
2024-04-30 15:13:16 -06:00
Matt Visnovsky
9c8024c7fa Update db migration: down function
knex requires down function
2024-04-30 15:11:21 -06:00
Matt Visnovsky
138075a2af Update db migration: allow nulls
DB must allow nulls otherwise this will break other monitors.
2024-04-30 15:10:57 -06:00
Rakovskij Stanislav
9f2cf28a76
Making docker usage with localhost and external ip more clear (#3836)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-04-30 22:53:27 +02:00
Nelson Chan
59f10d542b
Fix: Show API Keys disabled msg. when disabled Auth (#4723)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-04-30 22:11:09 +02:00
Ezhil Shanmugham
988ba79679
feat: keephq notification provider (#4722) 2024-04-30 16:17:34 +02:00
Matt Visnovsky
99dc4cfb46 Wrong variable used
Thanks for pointing it out @CommanderStorm!
2024-04-29 22:24:51 -06:00
Matt Visnovsky
4a882be6ba Further SNMP monitor development
Further testing of SNMP feat, however I'm running into the issue `Error in SNMP check: RequestTimedOutError: Request timed out` when the check function is called. I am unsure as to why since my local SNMP script works great with very similar code.
2024-04-29 15:59:59 -06:00
Matt Visnovsky
ff5890a11f Updated a comment 2024-04-29 15:59:21 -06:00
Matt Visnovsky
a3cdd69995 Use net-snmp instead of snmp-native
net-snmp over snmp-native is:
-more robust
-more popular
-better documented
-supports v3
2024-04-29 13:58:43 -06:00
Joschua Becker
19e8c75c3b
SevenIO Notification Provider (#4219)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-04-27 23:40:59 +02:00
凯观生活
126d6cd912
Add the ability to notify @everyone in DingTalk notifications (#4718)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-04-27 17:16:39 +02:00
Matt Visnovsky
d92003e172 SNMP Initial Commits
This commit introduces a new SNMP monitor feature to the application, allowing users to monitor devices using SNMP (Simple Network Management Protocol).
2024-04-26 19:05:56 -06:00
Louis Lam
c86706f189
1.23.13 changes merge to 2.0.0 (#4708) 2024-04-26 15:11:26 +08:00
Louis Lam
1d091739c8
Update server/model/monitor.js
Co-authored-by: Adam Stachowicz <saibamenppl@gmail.com>
2024-04-26 15:01:03 +08:00
Louis Lam
27bcc968ec
Update server/util-server.js
Co-authored-by: Adam Stachowicz <saibamenppl@gmail.com>
2024-04-25 23:45:30 +08:00
Louis Lam
c0db036187
Update server/model/monitor.js
Co-authored-by: Adam Stachowicz <saibamenppl@gmail.com>
2024-04-25 23:45:24 +08:00
Louis Lam
7da5b2311c Fix merge issue 2024-04-25 15:49:32 +08:00
Louis Lam
996db6281b Update dependencies and remove an empty file 2024-04-25 15:46:18 +08:00
Louis Lam
63a380326d Merge branch '1.23.X' into 1.23.13-to-2.0.0
# Conflicts:
#	.github/workflows/auto-test.yml
#	package-lock.json
#	package.json
#	server/database.js
#	server/model/monitor.js
#	server/monitor-types/real-browser-monitor-type.js
#	server/util-server.js
#	test/cypress/unit/i18n.spec.js
2024-04-25 15:42:53 +08:00
Louis Lam
2778929f74 Update to 1.23.13 2024-04-25 15:27:28 +08:00
Louis Lam
f71d35e53e Update dependencies 2024-04-25 15:26:49 +08:00
Nelson Chan
1490443618
Fix: Getting TLS certificate through proxy & prometheus update (#4700) 2024-04-24 14:37:17 +08:00
BigBoot
bab427f715
Add loginRequired SocketIO event (#4636) 2024-04-21 20:39:44 +02:00
Frank Elsinga
add5c128ce
fix: Localisation-matching algorithm missing some edgecase (#4692) 2024-04-21 20:23:34 +08:00
Louis Lam
29575343ca
Update CONTRIBUTING.md for how to set up a Docker builder (#4668)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-04-19 17:37:12 +08:00
Louis Lam
e797abd108 Update to 1.23.12 2024-04-19 01:17:13 +08:00
Louis Lam
7a9e2f5de6
Merge pull request from GHSA-23q2-5gf8-gjpp 2024-04-19 01:08:31 +08:00
Louis Lam
7b5d2a71ff Update dependencies 2024-04-18 20:48:07 +08:00
CoolCu
b25ac55a2f
chore: fix some typos in comments (#4679)
Signed-off-by: CoolCu <coolcui@qq.com>
2024-04-16 16:59:07 +02:00
msrl2000
05606c69e7
Update i18n.js (#4666) 2024-04-10 21:49:19 +02:00
Nelson Chan
893278bd3d
Feat: Use keylog event to obtain TLS certificate for better reliability [1.23.X] (#4630)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-04-06 18:43:08 +08:00
Adam Stachowicz
0e30ea830d
fix: Update nodemailer to fix GHSA-9h6g-pr28-7cqp [1.23.X] (#4653) 2024-04-05 17:38:24 +02:00
Louis Lam
c67a2070b8 Update deps 2024-04-05 12:12:36 +08:00
Adam Stachowicz
9863a10321
fix: Update axios, @actions/github and dompurify [1.23.X] (#4652) 2024-04-05 11:47:46 +08:00
Edoardo Ridolfi
822ce5384b
Add support for Whapi notification provider (#4323)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-04-03 02:22:01 +02:00
Merlin
937c8a9a7b
New notification provider: CallMeBot API (#4605)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-04-02 21:39:45 +02:00
Daan Meijer
effd0197ac
[Slack] restructure alert actions, add 'visit site' button (#3886)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
Co-authored-by: Nelson Chan <3271800+chakflying@users.noreply.github.com>
2024-04-02 02:43:54 +02:00
Nelson Chan
ee7f8680c1
Fix: Add missing FK for monitor-tls-info table [1.23.X] (#4631) 2024-03-31 12:05:38 +08:00
Nelson Chan
08f75b0b99
Fix: Add missing FK for monitor-tls-info table (#4632) 2024-03-31 12:04:22 +08:00
Nelson Chan
c1301804d4
Fix: Fix CI on Windows Runner [1.23.X] (#4633) 2024-03-31 10:33:59 +08:00
Simon Nilsson
0923d05317
Cellsynt mobile services (#4625)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-03-29 16:27:54 +01:00
Chongyi Zheng
88187b66eb
Drop Node.js 14 and 16 (#3747)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
Co-authored-by: Adam Stachowicz <saibamenppl@gmail.com>
2024-03-28 07:30:33 +08:00
Nelson Chan
b8858f4605
Feat: Handle maintenance in UptimeCalculator (#4406)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-03-27 10:19:25 +08:00
Christoph Fichtmüller
49b6dacb4d
Add gtxmessaging Notification Support (#4481)
Signed-off-by: Christoph Fichtmüller <cf@cfichtmueller.com>
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-03-26 23:59:09 +01:00
Louis Lam
e927327bad
Some minor changes for 2.0.0 (#4621) 2024-03-26 15:17:52 +08:00
DevMirza
45690a25a0
fix(ci): Fix for the Actions failing on Windows Runner (#4557) 2024-03-20 22:20:40 +08:00
Elliot Matson
5bc68fe0a7
Google chat cards (#3928)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-03-20 12:58:28 +01:00
OptimusGREEN
bc077cc536
add notification channel for home assistant (#4541)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
Co-authored-by: Seb <144435+rmtsrc@users.noreply.github.com>
2024-03-18 23:31:37 +01:00
Frank Elsinga
975761b448
made sure to use Promise.allSettled instead of sleeping for 500ms after login (#4592) 2024-03-19 00:16:04 +08:00
Frank Elsinga
0e3b3a9ab8
Made sure that more of the async usages are awaited (#4574) 2024-03-15 15:02:55 +01:00
Frank Elsinga
a9a1cf1353
Chore: General notification reformatting (#3182)
- I unified where in file the name of `NotificationProvider.name` is placed
- I made sure that all the providers adhere to the signature of `NotificationProvider.send()`
- I made sure that all the providers use `okMsg` if returning success messages directly from the function.
  Here a discussion should be had:
  Should this be refactored into a constant of `NotificationProvider`? I could imagine that `NotificationProvider.SENDING_SUCCESSFULL`  could be a suitable alternative.
- I made sure all providers have the URL they `POST`/`GET` to be extraced into a variable.
  => refactored this way due to Nelsons suggestion
2024-03-14 14:21:15 +01:00
Frank Elsinga
bfd65ab6e3
Add Heii On-Call Notification Provider (#4485) 2024-03-11 20:51:34 +01:00
Frank Elsinga
1db750a2e1
Merge branch 'master' into hevans/add-heii-on-call-notification-provider 2024-03-11 20:49:42 +01:00
LeoThies
abd62a12e4
edit unpin to delete 2024-03-11 11:52:22 +01:00
Frank Elsinga
ca14c34977
Set mqtt-clientId to uptime-kuma_.. instead of mqttjs_.. (#4503) 2024-03-10 15:16:07 +01:00
Frank Elsinga
2a3a2201e6
make monitor start() and stop() async (#2830) 2024-03-09 23:36:00 +01:00
Frank Elsinga
6eef2192b0
Refactor MS-Teams notification to use AdaptiveCards (#4538) 2024-03-07 15:36:32 +01:00
taschenuhr
9789931edf
Merge branch 'master' into feature/msteams-adaptivecards 2024-03-07 15:30:26 +01:00
taschenuhr
4aaa0b92fb fix test notification after method refactoring 2024-03-07 15:11:19 +01:00
Frank Elsinga
fdf562fe39
Test for db file existance instead of creating a new one in password-restet.js (#4519)
Test for db file existance instead of creating a new one in `password-restet.js`
2024-03-06 13:03:07 +01:00
Frank Elsinga
b385e81608
Improved helptext of how to send mail via the systems mail subsystem (#4477) 2024-03-05 19:40:45 +01:00
Frank Elsinga
e2239bc7b7
Merge branch 'master' into hevans/add-heii-on-call-notification-provider 2024-03-05 19:20:14 +01:00
Frank Elsinga
da92400401
[Ntfy] Only include action link if monitor url is defined #3274 (#4411) 2024-03-05 19:19:18 +01:00
Humberto Evans
daa59b812c
Update en.json
Fix misspelled "Trigger"
2024-03-04 14:54:17 -08:00
Frank Elsinga
574705a4c3
Updated strings for LINE Messenger as changed in their developer portal (#4527) 2024-03-03 18:29:24 +01:00
Andi Pätzold
a0c62d8ab0
Fix: handle monitor names with slashes (#4472)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-03-03 17:59:38 +08:00
Huzaifa Azim
8fd713d642
migrate timezones-list lib to @vvo/tzdb issue #4479 (#4521) 2024-03-03 17:54:14 +08:00
Frank Elsinga
4c683da0dd
Refactored the Can I create a pull request for Uptime Kuma section (#4545) 2024-03-03 17:45:35 +08:00
Frank Elsinga
507ff76728
More readable Contribution guide (#4525)
Co-authored-by: Nelson Chan <3271800+chakflying@users.noreply.github.com>
2024-03-03 17:44:53 +08:00
taschenuhr
8bd69d78a8 some more tweaking of the card content and notification summary 2024-02-28 17:41:00 +01:00
taschenuhr
cc09147b4b fix adding optional ActionSet 2024-02-28 16:31:47 +01:00
taschenuhr
b8941403d1 code cleanup 2024-02-28 16:30:48 +01:00
taschenuhr
5b87da94b3 push notificationMessage to card header and add action button to dashboard 2024-02-28 14:19:32 +01:00
Vista2003
9209210e7c
Merge branch 'master' into master 2024-02-28 13:00:03 +00:00
Nelson Chan
c7b8bb9e4a
Fix: Incorrect handling of status page not found (#4537) 2024-02-28 18:57:58 +08:00
taschenuhr
7756070c57 refactor MS-Teams notification to use adaptive cards 2024-02-28 09:47:14 +01:00
Louis Lam
d88e7702b9
Update axios from 0.27.x to 0.28.x (#4532) 2024-02-27 22:07:43 +08:00
Frank Elsinga
ee99ee9460
changed which translation we are using 2024-02-27 00:09:56 +01:00
Vista2003
800847d0df Correcting label to fit what it says on the page 2024-02-26 20:23:57 +00:00
Vista2003
3fd0c822d6 Removed trailing space 2024-02-25 16:31:25 +00:00
Vista2003
e74d6a7471 Fixing strings as reported on issue #4526 2024-02-25 10:35:32 +00:00
Huzaifa Azim
99dccd9e90 reset-password-issue-4518 2024-02-23 18:10:09 +05:00
Louis Lam
e61589d02e
Add Vue DevTools (#4509) 2024-02-21 09:13:49 +08:00
NihadBadalov
17dfdacd93 Fix: Correct colors 2024-02-20 17:52:59 +01:00
Stefan Heine
6bfc58674a MQTT monitor, set the MQTT clientId to make it easier in the MQTT broker to identify where the connections are coming from 2024-02-19 07:57:34 +01:00
Stefan Heine
1b293f2754 MQTT monitor, set the MQTT clientId to make it easier in the MQTT broker to identify where the connections are coming from 2024-02-19 07:42:37 +01:00
Humberto Evans
9a52a8761c
Apply suggestions from code review
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-02-16 15:08:59 -07:00
NihadBadalov
94154c49aa Feat: Change hover colors to shades of gray 2024-02-15 08:21:54 +01:00
Frank Elsinga
1fdb7e48ed
Formatting fixes 2024-02-14 23:45:23 +01:00
Frank Elsinga
cc000117ca
Updated the code to look more like the other notification providers 2024-02-14 23:41:35 +01:00
NihadBadalov
4d6ea433e6 Feat: Add background color change on hover to nav links 2024-02-14 22:51:06 +01:00
Frank Elsinga
cf2d603e27
Stale, incorrect issue template and cannot-reproduce Comments (#4490) 2024-02-14 13:43:31 +08:00
Humberto Evans
5a9c3ad353 move try/catch into main control flow and more from code review comments 2024-02-13 17:27:59 -08:00
Humberto Evans
4cdc8f344b
Apply suggestions from code review
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-02-13 16:54:52 -08:00
Aindriú Mac Giolla Eoin
0efdfc4497
Added Irish language (#4487) 2024-02-13 19:44:53 +08:00
Humberto Evans
673f9a7744 get the linter to be happy with my vue file 2024-02-12 18:12:07 -08:00
Humberto Evans
f254940b64 spell things correctly 2024-02-12 18:01:06 -08:00
Humberto Evans
71dd5e2369 do not assume missing heartbeat is a test 2024-02-12 17:54:36 -08:00
Humberto Evans
09d249ca36 add form to NotificationDialog 2024-02-12 17:48:53 -08:00
Humberto Evans
5f25a75f65 remove line at end of file 2024-02-12 17:39:41 -08:00
Humberto Evans
92488290fa add newline at end of file 2024-02-12 17:38:50 -08:00
Humberto Evans
246316f55b Undo my overzelous linter 2024-02-12 17:24:42 -08:00
Humberto Evans
10659d07b2 add link to documentation explaining how to get id and token 2024-02-12 16:56:41 -08:00
Humberto Evans
80bdc455da lint 2024-02-12 16:31:58 -08:00
Humberto Evans
e8fada9386 set url to heii on call prod 2024-02-12 16:14:41 -08:00
Humberto Evans
93ac212aef Add Heii On-Call 2024-02-12 15:58:54 -08:00
Frank Elsinga
f37f55e06c
Fixed lining issues introduced by code reivew 2024-02-11 22:44:57 +01:00
Frank Elsinga
87d7a780e3
changed the helptext a bit to make it more usefull for novice users 2024-02-11 22:40:47 +01:00
apio-sys
0fc372f558 #2793 2024-02-11 20:20:52 +01:00
Joris Le Blansch
67a13e1259 #2793 2024-02-11 20:03:17 +01:00
Frank Elsinga
81e465f418
Removed debug statement 2024-02-11 20:02:09 +01:00
Neel Bhanushali
a5d0f7a7db console added with double quotes and semicolons. console added with username so i can remove later 2024-02-11 21:42:20 +05:30
Neel Bhanushali
a16b42f98c poc done 2024-02-11 21:33:58 +05:30
Neel Bhanushali
65ff08b38e lower heartbeat interval when monitor is down #4025 2024-02-11 20:19:56 +05:30
Nelson Chan
56aa81e337
UI: Improve maintenace actions design (#4407) 2024-02-03 06:16:14 +08:00
Frank Elsinga
dc3abc68f0
Fixed type anotation 2024-01-30 17:54:04 +01:00
Frank Elsinga
89158be7de
Merge branch 'master' into monitor_async_start_stop 2024-01-30 17:53:21 +01:00
Robert Martin
ac4355114a
Update en.json
Grammar fix: "set up" should be two words when used as a verb
2024-01-29 22:14:06 -06:00
Louis Lam
3cea7d4eb2 Update dependencies 2024-01-30 01:38:45 +08:00
Nelson Chan
2bccae415f
Feat: Show monitor ID in Details (#4331) 2024-01-28 18:15:29 +08:00
Nelson Chan
2b8f55194f
Fix: [JSON-Query] Prevent parsing string-only JSON (#4425) 2024-01-28 03:18:24 +08:00
Frank Elsinga
538f83205d
chore/issue template modification for v2 (#4240)
Co-authored-by: Nelson Chan <3271800+chakflying@users.noreply.github.com>
2024-01-26 06:57:36 +08:00
Nelson Chan
cf075a8793
Fix: missing await in getRemoteBrowser() (#4418) 2024-01-26 06:53:15 +08:00
Nelson Chan
288cab6dd7
Fix: Make sure browser is connected before returning (#4417) 2024-01-25 07:59:42 +08:00
Philip Klostermann
95125cc417 [Ntfy] don't include url action with defaut URL value 2024-01-23 11:16:10 -05:00
Philip Klostermann
20b69acde2 [Ntfy] Only include action link if monitor url is defined #3274 2024-01-23 10:10:31 -05:00
AnnAngela
b4e45c7ce8
fix(notification-dingding): throw error when failed (#3598) 2024-01-20 03:29:13 +08:00
Louis Lam
36196f632d
Translations Update from Weblate (#4386) 2024-01-18 03:48:14 +08:00
Paco Culebras
c31475e020 Translated using Weblate (Catalan)
Currently translated at 3.7% (33 of 885 strings)

Co-authored-by: Paco Culebras <pculebras@me.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ca/
Translation: Uptime Kuma/Uptime Kuma
2024-01-18 03:32:38 +08:00
kindercat
9e21c7cb02 Translated using Weblate (Romanian)
Currently translated at 100.0% (885 of 885 strings)

Co-authored-by: kindercat <156439718+kindercat@users.noreply.github.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ro/
Translation: Uptime Kuma/Uptime Kuma
2024-01-18 03:32:38 +08:00
Nima Shayanfar
669fc02baa Translated using Weblate (Persian)
Currently translated at 96.8% (857 of 885 strings)

Co-authored-by: Nima Shayanfar <nsh20100@yahoo.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fa/
Translation: Uptime Kuma/Uptime Kuma
2024-01-18 03:32:38 +08:00
kindercat
371eb38198 Translated using Weblate (Romanian)
Currently translated at 87.2% (772 of 885 strings)

Co-authored-by: kindercat <156439718+kindercat@users.noreply.github.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ro/
Translation: Uptime Kuma/Uptime Kuma
2024-01-18 03:32:37 +08:00
Белич Дмитрий
64fe00f9f2 Translated using Weblate (Russian)
Currently translated at 100.0% (885 of 885 strings)

Co-authored-by: Белич Дмитрий <belicdima8@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/
Translation: Uptime Kuma/Uptime Kuma
2024-01-18 03:28:33 +08:00
Kisem
2fbdf4886e Translated using Weblate (Hungarian)
Currently translated at 84.5% (748 of 885 strings)

Co-authored-by: Kisem <kiss.m.aron@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hu/
Translation: Uptime Kuma/Uptime Kuma
2024-01-18 03:28:33 +08:00
ItzAndriss
5ebb160597 Translated using Weblate (Hungarian)
Currently translated at 84.5% (748 of 885 strings)

Co-authored-by: ItzAndriss <itzandriss@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hu/
Translation: Uptime Kuma/Uptime Kuma
2024-01-18 03:28:33 +08:00
Louis Lam
e47e3cf479 Translated using Weblate (Yue)
Currently translated at 11.8% (105 of 885 strings)

Co-authored-by: Louis Lam <louislam@users.noreply.github.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/yue/
Translation: Uptime Kuma/Uptime Kuma
2024-01-18 03:28:33 +08:00
kindercat
ef573d057b Translated using Weblate (Romanian)
Currently translated at 66.7% (590 of 884 strings)

Co-authored-by: kindercat <156439718+kindercat@users.noreply.github.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ro/
Translation: Uptime Kuma/Uptime Kuma
2024-01-18 03:28:32 +08:00
alejandro vasquez
2d64204ff1 Translated using Weblate (Spanish)
Currently translated at 100.0% (884 of 884 strings)

Co-authored-by: alejandro vasquez <rootltsm@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/es/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:36 +00:00
Zandor Smith
2afd743a6d Translated using Weblate (Dutch)
Currently translated at 100.0% (884 of 884 strings)

Translated using Weblate (English)

Currently translated at 100.0% (884 of 884 strings)

Co-authored-by: Zandor Smith <info@zsinfo.nl>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/en/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:36 +00:00
ITQ
08da5ad5d8 Translated using Weblate (Russian)
Currently translated at 100.0% (884 of 884 strings)

Co-authored-by: ITQ <itq.dev@ya.ru>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:36 +00:00
JC
83c7b593da Translated using Weblate (Catalan)
Currently translated at 3.5% (31 of 884 strings)

Co-authored-by: JC <jjsuscc@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ca/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:36 +00:00
Adam Stachowicz
a2905b0686 Translated using Weblate (Polish)
Currently translated at 100.0% (884 of 884 strings)

Co-authored-by: Adam Stachowicz <saibamenppl@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pl/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:36 +00:00
Fabien BERNARD
7f4a23a5ac Translated using Weblate (French)
Currently translated at 100.0% (884 of 884 strings)

Co-authored-by: Fabien BERNARD <fabien.bernard@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fr/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:36 +00:00
Markus Fenes
465531ad98 Translated using Weblate (Norwegian Bokmål)
Currently translated at 61.3% (542 of 884 strings)

Translated using Weblate (Norwegian Bokmål)

Currently translated at 60.4% (534 of 884 strings)

Translated using Weblate (Norwegian Bokmål)

Currently translated at 54.9% (486 of 884 strings)

Co-authored-by: Markus Fenes <mafen@users.noreply.github.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nb_NO/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:36 +00:00
Itay-Asudi
f491879214 Translated using Weblate (Hebrew)
Currently translated at 0.3% (3 of 884 strings)

Co-authored-by: Itay-Asudi <itay.asudi@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/he/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:36 +00:00
Lê Huy Mạnh Tân
5ea712e826 Translated using Weblate (Vietnamese)
Currently translated at 56.2% (497 of 884 strings)

Co-authored-by: Lê Huy Mạnh Tân <tanmanh350@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/vi/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:36 +00:00
dng-nguyn
423e66d609 Translated using Weblate (Vietnamese)
Currently translated at 56.2% (497 of 884 strings)

Co-authored-by: dng-nguyn <dungnguyen@dinhcap.dev>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/vi/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:36 +00:00
Elia Ronchetti
05f9f35cb3 Translated using Weblate (Italian)
Currently translated at 72.5% (641 of 884 strings)

Co-authored-by: Elia Ronchetti <e.ronchetti@campus.unimib.it>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/it/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:36 +00:00
Salvatore Cahyo
3b0800b78e Translated using Weblate (Indonesian)
Currently translated at 100.0% (884 of 884 strings)

Co-authored-by: Salvatore Cahyo <salvacmp18@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/id/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:36 +00:00
renph
c33840fc9f Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (884 of 884 strings)

Co-authored-by: renph <renph96@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:36 +00:00
Michal
44f8a8f8e9 Translated using Weblate (Czech)
Currently translated at 99.5% (881 of 885 strings)

Translated using Weblate (Czech)

Currently translated at 99.5% (880 of 884 strings)

Translated using Weblate (Czech)

Currently translated at 97.7% (864 of 884 strings)

Co-authored-by: Michal <black23@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/cs/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:36 +00:00
AnnAngela
ca0385c449 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (885 of 885 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (884 of 884 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (884 of 884 strings)

Co-authored-by: AnnAngela <naganjue@vip.qq.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:36 +00:00
Abner Santana
ceb1d90095 Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.8% (883 of 884 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (884 of 884 strings)

Co-authored-by: Abner Santana <abnerss@outlook.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_BR/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:36 +00:00
Jong Ryul Oh
b6a75e198c Translated using Weblate (Korean)
Currently translated at 84.6% (748 of 884 strings)

Co-authored-by: Jong Ryul Oh <hydromix@hotmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ko/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:36 +00:00
Alanimdeo
999ed525e5 Translated using Weblate (Korean)
Currently translated at 84.6% (748 of 884 strings)

Co-authored-by: Alanimdeo <alan@imdeo.kr>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ko/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:35 +00:00
MrEddX
8773eed790 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (885 of 885 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (884 of 884 strings)

Co-authored-by: MrEddX <mreddx@chatrix.one>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/bg/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:35 +00:00
Marco
f9b3f9766e Translated using Weblate (German)
Currently translated at 100.0% (885 of 885 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (885 of 885 strings)

Translated using Weblate (German)

Currently translated at 100.0% (884 of 884 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (884 of 884 strings)

Translated using Weblate (German)

Currently translated at 100.0% (884 of 884 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (884 of 884 strings)

Co-authored-by: Marco <marco@nanoweb.ch>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de_CH/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:35 +00:00
demonisius
eaa8939098 Translated using Weblate (Russian)
Currently translated at 100.0% (884 of 884 strings)

Co-authored-by: demonisius <demonisius@mail.ru>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:35 +00:00
Aji Priyo Wibowo
055aa8d2da Translated using Weblate (Indonesian)
Currently translated at 100.0% (884 of 884 strings)

Co-authored-by: Aji Priyo Wibowo <aji.wibowo@ionmobility.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/id/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:35 +00:00
Ivan Bratović
e815ee9192 Translated using Weblate (Croatian)
Currently translated at 100.0% (884 of 884 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (884 of 884 strings)

Co-authored-by: Ivan Bratović <ivanbratovic4@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hr/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:35 +00:00
stanol
3b7e3e093b Translated using Weblate (Ukrainian)
Currently translated at 100.0% (885 of 885 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (884 of 884 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (884 of 884 strings)

Co-authored-by: stanol <stanol777@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/uk/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:35 +00:00
Thanassis Zografos
8cce068224 Translated using Weblate (Greek)
Currently translated at 76.0% (672 of 884 strings)

Co-authored-by: Thanassis Zografos <tzografos@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/el/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:35 +00:00
Ömer Faruk Genç
f8650239a6 Translated using Weblate (Turkish)
Currently translated at 100.0% (885 of 885 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (884 of 884 strings)

Co-authored-by: Ömer Faruk Genç <omer@farukgenc.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/tr/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:35 +00:00
Rumplin
2a001d1aae Translated using Weblate (Slovenian)
Currently translated at 59.1% (523 of 884 strings)

Co-authored-by: Rumplin <rumplin@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/sl/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:35 +00:00
leonsk29
0eca97f690 Translated using Weblate (Spanish)
Currently translated at 100.0% (884 of 884 strings)

Co-authored-by: leonsk29 <leonsk29@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/es/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:35 +00:00
ConfusedAlex
f296d8f533 Translated using Weblate (German)
Currently translated at 99.5% (880 of 884 strings)

Co-authored-by: ConfusedAlex <alex@epostnet.de>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:35 +00:00
Gunnar Norin
8150700906 Translated using Weblate (Swedish)
Currently translated at 100.0% (885 of 885 strings)

Translated using Weblate (Swedish)

Currently translated at 100.0% (884 of 884 strings)

Translated using Weblate (Swedish)

Currently translated at 100.0% (884 of 884 strings)

Translated using Weblate (Swedish)

Currently translated at 97.0% (858 of 884 strings)

Translated using Weblate (English)

Currently translated at 100.0% (884 of 884 strings)

Co-authored-by: Gunnar Norin <gunnar.norin@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/en/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/sv/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:35 +00:00
Cyril59310
0ffa150c5d Translated using Weblate (French)
Currently translated at 100.0% (885 of 885 strings)

Translated using Weblate (French)

Currently translated at 100.0% (884 of 884 strings)

Translated using Weblate (French)

Currently translated at 100.0% (884 of 884 strings)

Translated using Weblate (French)

Currently translated at 100.0% (884 of 884 strings)

Co-authored-by: Cyril59310 <archas.cyril@hotmail.fr>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fr/
Translation: Uptime Kuma/Uptime Kuma
2024-01-17 19:01:35 +00:00
James Cocker
8456912ae3
Corrected "Login" & "Logout" to verbs (EN) (#4320)
Co-authored-by: Louis Lam <louislam@users.noreply.github.com>
2024-01-14 05:35:11 +08:00
Cyril59310
17e284f011
Missing translation key (#4363) 2024-01-14 04:59:13 +08:00
Louis Lam
d4c21a2259
[GitHub] Minor issue template wording 2024-01-09 01:35:10 +08:00
Frank Elsinga
7635ab54a0
made sure that the i18n does use navigator.languages instead of navigator.language for automatic language detection (#4244) 2024-01-07 23:55:10 +08:00
Louis Lam
f3dcdb6332
Update the demo server (#4296) 2024-01-07 23:24:28 +08:00
Adam Stachowicz
458cdf9f9b
Fix encodeBase64 for empty password or user in HTTP Basic Authentication (#4326) 2024-01-07 02:06:06 +08:00
Louis Lam
9356e7dd4f
Update clear stats (#4324) 2024-01-05 20:51:05 +08:00
Ben Scobie
25cb78796a
Fix incorrect ping log (#4322) 2024-01-05 20:43:03 +08:00
Nelson Chan
bf1e3a3d5e
Feat: Add stat_hourly & min. max. ping (#4267)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2024-01-05 20:42:24 +08:00
Louis Lam
0060e46b91
[README.md] Fix star badge 2024-01-04 03:13:31 +08:00
Abhishek Srinivasan
23e80882c6
Changed the color of delete button in dashboard from red to grey (#4307) 2024-01-04 00:29:38 +08:00
Louis Lam
5ebea3134a
Merge 1.23.11 to master (#4306) 2024-01-03 03:04:12 +08:00
Louis Lam
2a315d4c84 Merge branch '1.23.X' into merge
# Conflicts:
#	package-lock.json
#	package.json
2024-01-03 02:10:01 +08:00
Louis Lam
f1e2ee74ea Update to 1.23.11 2023-12-31 05:46:54 +08:00
Louis Lam
8d847abf35 Update dependencies 2023-12-31 05:09:45 +08:00
Louis Lam
d7d57eafe3
Update Vue to 3.4 (#4300) 2023-12-30 23:13:21 +08:00
Louis Lam
329e2042bc
Update to respect docker compose v2 (#4289) 2023-12-27 22:39:04 +08:00
Nelson Chan
d830fa4a0e
Feat: Countup display fixed value (#4266) 2023-12-21 20:09:59 +08:00
Nelson Chan
c9fe6b5d01
Feat: Refresh login token for the client initiating password change (#4214) 2023-12-18 19:52:49 +08:00
Louis Lam
996ff28ed9
Playwright + Native Node Test Runner (#3893) 2023-12-17 19:02:22 +08:00
HdroguettA
f24c3583fb
Attempt an OAuth2 Refresh on 401 (#3903) 2023-12-17 17:21:07 +08:00
Frank Elsinga
e2fdfd2937
Migrate all v-html translations to componentised translations (#4135)
Co-authored-by: Louis Lam <louislam@users.noreply.github.com>
2023-12-15 18:38:57 +08:00
Louis Lam
dd7a5064e3
Translations Update from Weblate (#3891) 2023-12-15 18:22:54 +08:00
Vincent
6833594592 Translated using Weblate (Dutch)
Currently translated at 100.0% (877 of 877 strings)

Co-authored-by: Vincent <vincent0512@outlook.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
Marco Beretta
d1d6357453 Translated using Weblate (Italian)
Currently translated at 72.7% (638 of 877 strings)

Co-authored-by: Marco Beretta <marco13beretta@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/it/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
renph
8acbd14439 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (877 of 877 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (877 of 877 strings)

Co-authored-by: renph <renph96@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
Rumplin
239b8f4c71 Translated using Weblate (Slovenian)
Currently translated at 50.6% (444 of 877 strings)

Co-authored-by: Rumplin <rumplin@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/sl/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
Abner Santana
5b277ce4a4 Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.8% (876 of 877 strings)

Co-authored-by: Abner Santana <abnerss@outlook.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_BR/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
AmadeusGraves
3962617d74 Translated using Weblate (Spanish)
Currently translated at 99.4% (872 of 877 strings)

Co-authored-by: AmadeusGraves <angelfx19@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/es/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
Gunnar Norin
2f982aad53 Translated using Weblate (Swedish)
Currently translated at 86.5% (759 of 877 strings)

Translated using Weblate (Swedish)

Currently translated at 86.3% (757 of 877 strings)

Translated using Weblate (English)

Currently translated at 100.0% (877 of 877 strings)

Translated using Weblate (Swedish)

Currently translated at 49.0% (430 of 877 strings)

Co-authored-by: Gunnar Norin <gunnar.norin@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/en/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/sv/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
Marco
1b1ceeae1d Translated using Weblate (German (Switzerland))
Currently translated at 100.0% (877 of 877 strings)

Co-authored-by: Marco <marco@nanoweb.ch>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de_CH/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
Alanimdeo
85138679b1 Translated using Weblate (Korean)
Currently translated at 83.1% (729 of 877 strings)

Co-authored-by: Alanimdeo <alan@imdeo.kr>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ko/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
abosaad11
9fb92123e5 Translated using Weblate (Arabic)
Currently translated at 83.7% (722 of 862 strings)

Co-authored-by: abosaad11 <abosaad@hotmail.co.uk>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ar/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
bjornclauw
0bba5810a4 Translated using Weblate (Dutch)
Currently translated at 100.0% (862 of 862 strings)

Co-authored-by: bjornclauw <bjorn.clauw.1@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
MaxX
6c95140db1 Translated using Weblate (Vietnamese)
Currently translated at 56.3% (486 of 862 strings)

Translated using Weblate (Thai)

Currently translated at 75.2% (649 of 862 strings)

Translated using Weblate (Slovenian)

Currently translated at 42.2% (364 of 862 strings)

Translated using Weblate (Norwegian Bokmål)

Currently translated at 31.6% (273 of 862 strings)

Translated using Weblate (Basque)

Currently translated at 64.6% (557 of 862 strings)

Co-authored-by: MaxX <github@levantinlynx.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/eu/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nb_NO/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/sl/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/th/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/vi/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
Bartosz Gajdemski
8fc693dab3 Translated using Weblate (Polish)
Currently translated at 99.6% (859 of 862 strings)

Co-authored-by: Bartosz Gajdemski <veroneczek@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pl/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
Gregor Godler
406e5d5fdd Translated using Weblate (Slovenian)
Currently translated at 41.6% (359 of 861 strings)

Co-authored-by: Gregor Godler <gregor@godler.si>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/sl/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
aditya wahyudi
b801d22cd3 Translated using Weblate (Indonesian)
Currently translated at 100.0% (861 of 861 strings)

Co-authored-by: aditya wahyudi <aditbaco@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/id/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
Harry Suryapambagya
a3bb0243cf Translated using Weblate (Indonesian)
Currently translated at 99.8% (876 of 877 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (861 of 861 strings)

Co-authored-by: Harry Suryapambagya <harsxv@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/id/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
Marcus Vechiato
1f441fa3a4 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (861 of 861 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (861 of 861 strings)

Co-authored-by: Marcus Vechiato <vechiato@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_BR/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
Buchtič
b0a771e341 Translated using Weblate (Czech)
Currently translated at 100.0% (861 of 861 strings)

Co-authored-by: Buchtič <martin.buchta@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/cs/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
0n1cOn3
0065effc26 Translated using Weblate (German (Switzerland))
Currently translated at 100.0% (861 of 861 strings)

Co-authored-by: 0n1cOn3 <0n1cOn3@gmx.ch>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de_CH/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
geovanedev5
976b6e684b Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.7% (859 of 861 strings)

Co-authored-by: geovanedev5 <geovanedev5@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_BR/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
william luqui
3e14c77b59 Translated using Weblate (Portuguese)
Currently translated at 5.8% (50 of 861 strings)

Co-authored-by: william luqui <william.luqui@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
Jochem Pluim
e21aa12fb1 Translated using Weblate (Dutch)
Currently translated at 100.0% (861 of 861 strings)

Translated using Weblate (Dutch)

Currently translated at 95.2% (820 of 861 strings)

Translated using Weblate (English)

Currently translated at 100.0% (861 of 861 strings)

Co-authored-by: Jochem Pluim <jochem@pluim.nu>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/en/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
Peter Dave Hello
d53d818321 Translated using Weblate (Chinese (Traditional))
Currently translated at 98.7% (866 of 877 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 99.8% (860 of 861 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 87.6% (755 of 861 strings)

Co-authored-by: Peter Dave Hello <hsu@peterdavehello.org>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hant/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
sander732
05eb5b0884 Translated using Weblate (Dutch)
Currently translated at 90.8% (782 of 861 strings)

Co-authored-by: sander732 <eligiussander@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
Haim Cohen
2f595e464b Translated using Weblate (Hebrew)
Currently translated at 0.1% (1 of 861 strings)

Translated using Weblate (Hebrew (Israel))

Currently translated at 86.5% (745 of 861 strings)

Added translation using Weblate (Hebrew)

Co-authored-by: Haim Cohen <haim1979@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/he/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/he_IL/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
Listum
b63305315a Translated using Weblate (Russian)
Currently translated at 100.0% (862 of 862 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (859 of 859 strings)

Co-authored-by: Listum <listum@orudo.ru>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
G'olib Narzullayev
60503d0676 Translated using Weblate (Uzbek)
Currently translated at 10.9% (94 of 861 strings)

Translated using Weblate (Uzbek)

Currently translated at 8.6% (74 of 859 strings)

Translated using Weblate (Uzbek)

Currently translated at 0.2% (2 of 859 strings)

Co-authored-by: G'olib Narzullayev <gnarzullayev2000@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/uz/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
Alex Campo
9113c049d4 Translated using Weblate (Portuguese (Brazil))
Currently translated at 96.8% (832 of 859 strings)

Co-authored-by: Alex Campo <alex.mdcampo@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_BR/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
Kisem
b7ab17bf5e Translated using Weblate (Hungarian)
Currently translated at 63.3% (544 of 859 strings)

Co-authored-by: Kisem <kiss.m.aron@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hu/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
Andy Chatziliadis
61f32f5bbe Translated using Weblate (Greek)
Currently translated at 77.9% (670 of 859 strings)

Co-authored-by: Andy Chatziliadis <chatzeiliadis@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/el/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
Michal
3dbc15cb69 Translated using Weblate (Czech)
Currently translated at 99.4% (856 of 861 strings)

Translated using Weblate (Czech)

Currently translated at 97.9% (841 of 859 strings)

Co-authored-by: Michal <black23@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/cs/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
AnnAngela
caf4584311 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (877 of 877 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 98.0% (860 of 877 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (862 of 862 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (861 of 861 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (859 of 859 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (858 of 858 strings)

Co-authored-by: AnnAngela <naganjue@vip.qq.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
wc7086
2637f6665b Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (858 of 858 strings)

Co-authored-by: wc7086 <j19981106@protonmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
Bond
cfe35c382e Translated using Weblate (Vietnamese)
Currently translated at 56.5% (485 of 858 strings)

Co-authored-by: Bond <xuantan97@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/vi/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
Marco
643ebea0a6 Translated using Weblate (German)
Currently translated at 100.0% (877 of 877 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (877 of 877 strings)

Translated using Weblate (German)

Currently translated at 100.0% (877 of 877 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (877 of 877 strings)

Translated using Weblate (German)

Currently translated at 100.0% (862 of 862 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (862 of 862 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (861 of 861 strings)

Translated using Weblate (German)

Currently translated at 100.0% (861 of 861 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (861 of 861 strings)

Translated using Weblate (German)

Currently translated at 100.0% (859 of 859 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (859 of 859 strings)

Translated using Weblate (German)

Currently translated at 100.0% (858 of 858 strings)

Co-authored-by: Marco <marco@nanoweb.ch>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de_CH/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
Алексей Добрый
92324e94da Translated using Weblate (Russian)
Currently translated at 97.8% (823 of 841 strings)

Co-authored-by: Алексей Добрый <support@diera.ru>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
Regis Vieira Delgado
43bfb366f2 Translated using Weblate (Portuguese (Brazil))
Currently translated at 95.8% (806 of 841 strings)

Co-authored-by: Regis Vieira Delgado <finallf@hotmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_BR/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
DevMirza
5820c472cb Translated using Weblate (Punjabi)
Currently translated at 0.5% (5 of 861 strings)

Translated using Weblate (Punjabi (Pakistan))

Currently translated at 1.1% (10 of 861 strings)

Translated using Weblate (Urdu)

Currently translated at 62.4% (538 of 861 strings)

Translated using Weblate (Urdu)

Currently translated at 61.3% (528 of 861 strings)

Translated using Weblate (Punjabi (Pakistan))

Currently translated at 0.4% (4 of 841 strings)

Translated using Weblate (Urdu)

Currently translated at 60.2% (507 of 841 strings)

Added translation using Weblate (Punjabi)

Added translation using Weblate (Punjabi (Pakistan))

Co-authored-by: DevMirza <pzhafeez@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pa/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pa_PK/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ur/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
AnnAngela
127608ffe9 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (841 of 841 strings)

Co-authored-by: AnnAngela <naganjue@vip.qq.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
stanol
917b20fe3d Translated using Weblate (Ukrainian)
Currently translated at 100.0% (877 of 877 strings)

Translated using Weblate (Ukrainian)

Currently translated at 99.8% (876 of 877 strings)

Translated using Weblate (Ukrainian)

Currently translated at 99.8% (876 of 877 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (862 of 862 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (861 of 861 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (861 of 861 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (859 of 859 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (858 of 858 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (841 of 841 strings)

Co-authored-by: stanol <stanol777@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/uk/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:32 +00:00
Ömer Faruk Genç
221f625db1 Translated using Weblate (Turkish)
Currently translated at 100.0% (877 of 877 strings)

Translated using Weblate (Turkish)

Currently translated at 99.8% (876 of 877 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (862 of 862 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (861 of 861 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (861 of 861 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (859 of 859 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (858 of 858 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (841 of 841 strings)

Co-authored-by: Ömer Faruk Genç <omer@farukgenc.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/tr/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:31 +00:00
Adam Stachowicz
45c83fdd49 Translated using Weblate (Polish)
Currently translated at 100.0% (858 of 858 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (841 of 841 strings)

Co-authored-by: Adam Stachowicz <saibamenppl@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pl/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:31 +00:00
Davide Pirelli
a06d88832c Translated using Weblate (Italian)
Currently translated at 76.2% (641 of 841 strings)

Co-authored-by: Davide Pirelli <info@inkstudio.it>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/it/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:31 +00:00
OlevO1
59cadc20d0 Translated using Weblate (Hungarian)
Currently translated at 58.8% (495 of 841 strings)

Co-authored-by: OlevO1 <imagyarcsik@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hu/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:31 +00:00
Ivan Bratović
2557cd3c3e Translated using Weblate (Croatian)
Currently translated at 100.0% (862 of 862 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (861 of 861 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (859 of 859 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (841 of 841 strings)

Co-authored-by: Ivan Bratović <ivanbratovic4@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hr/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:31 +00:00
Cyril59310
8b1324493e Translated using Weblate (French)
Currently translated at 100.0% (877 of 877 strings)

Translated using Weblate (French)

Currently translated at 100.0% (877 of 877 strings)

Translated using Weblate (French)

Currently translated at 100.0% (862 of 862 strings)

Translated using Weblate (French)

Currently translated at 100.0% (861 of 861 strings)

Translated using Weblate (French)

Currently translated at 100.0% (861 of 861 strings)

Translated using Weblate (French)

Currently translated at 100.0% (859 of 859 strings)

Translated using Weblate (French)

Currently translated at 100.0% (858 of 858 strings)

Translated using Weblate (French)

Currently translated at 100.0% (841 of 841 strings)

Co-authored-by: Cyril59310 <archas.cyril@hotmail.fr>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fr/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:31 +00:00
Louis Lam
f80168e0de Translated using Weblate (Uzbek)
Currently translated at 0.2% (2 of 859 strings)

Added translation using Weblate (Uzbek)

Translated using Weblate (German)

Currently translated at 100.0% (841 of 841 strings)

Co-authored-by: Louis Lam <louislam@users.noreply.github.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/uz/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:31 +00:00
Marco
332bc43bbc Translated using Weblate (German (Switzerland))
Currently translated at 100.0% (858 of 858 strings)

Translated using Weblate (German)

Currently translated at 100.0% (841 of 841 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (841 of 841 strings)

Co-authored-by: Marco <marco@nanoweb.ch>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de_CH/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:31 +00:00
simonghpub
d28627e855 Translated using Weblate (Danish)
Currently translated at 75.3% (634 of 841 strings)

Co-authored-by: simonghpub <simonpmt@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/da/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:31 +00:00
MrEddX
26c3b79d5c Translated using Weblate (Bulgarian)
Currently translated at 100.0% (877 of 877 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (877 of 877 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (862 of 862 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (861 of 861 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (859 of 859 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (858 of 858 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (841 of 841 strings)

Co-authored-by: MrEddX <mreddx@chatrix.one>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/bg/
Translation: Uptime Kuma/Uptime Kuma
2023-12-15 10:18:31 +00:00
Louis Lam
8151ac0e25
Fix Async child process output issue (#4231) 2023-12-14 04:54:34 +08:00
Louis Lam
207847505a
1.23.10 to master (#4226) 2023-12-13 02:10:04 +08:00
Louis Lam
1a47563eb8 Merge branch '1.23.X' into version-merge
# Conflicts:
#	package-lock.json
#	package.json
#	server/server.js
#	server/uptime-kuma-server.js
2023-12-13 01:54:08 +08:00
Nelson Chan
4185ec20b0
Fix: Origin undefined on error handling (#4224) 2023-12-13 01:35:39 +08:00
Louis Lam
4245ea86e7 Update to 1.23.10 2023-12-13 00:55:58 +08:00
Louis Lam
f861a48dfc
Smoothing the update for origin check (#4216) 2023-12-12 16:23:41 +08:00
Louis Lam
fa1214ae5e
Rebse #4213 (#4215)
Co-authored-by: Nelson Chan <chakflying@hotmail.com>
2023-12-11 19:30:01 +08:00
Nelson Chan
99adac3eb9
Fix: typo for disconnectAllSocketClients (#4213) 2023-12-11 19:26:20 +08:00
Nelson Chan
89beb5f264
Fix: Handle trailing slash for status page routing (#4185)
* Fix: Handle trailing slash

* Chore: Add desc for default slug

* Chore: Use margin instead of space

* Minor
2023-12-11 03:05:13 +08:00
Louis Lam
65e57e5621
Merge pull request #4208 from louislam/1.23.X-merge-to-2.X.X
1.23.9 changes merge to master
2023-12-11 02:40:12 +08:00
Louis Lam
719ef856e8 Merge manually 2023-12-11 02:36:08 +08:00
Louis Lam
869ee8ec50 Merge branch '1.23.X' into 1.23.X-merge-to-2.X.X
# Conflicts:
#	.github/workflows/auto-test.yml
#	extra/reset-password.js
#	package-lock.json
#	package.json
#	server/routers/status-page-router.js
#	server/server.js
#	server/socket-handlers/general-socket-handler.js
#	server/uptime-kuma-server.js
#	src/components/ActionInput.vue
#	src/util.js
#	src/util.ts
2023-12-11 02:13:47 +08:00
Louis Lam
530c8e5328
Drop cacheable-lookup (#4178)
* WIP

* WIP
2023-12-11 02:01:56 +08:00
Louis Lam
621419e434 Update to 1.23.9 2023-12-10 20:43:29 +08:00
Louis Lam
482049c72b
Merge pull request from GHSA-88j4-pcx8-q4q3
* WIP, still need to handle npm run reset-password

* Implement it for "npm run reset-password"

Bug fixes and change along with this commit
- Move `ssl`, `hostname`, `port` to ./server/config.js, so `reset-password` is able to read it
- Fix: FBSD is missing, no idea who dropped it.
- Fix: Frontend code should not require any backend code (./server/config.js), moved "badgeConstants" to the common util (./src/util.ts) and drop vite-common.js

* Minor
2023-12-10 20:40:40 +08:00
Louis Lam
2815cc73cf
Merge pull request from GHSA-mj22-23ff-2hrr
* WIP

* WIP

* Handle parsing error

* Fix matching origin issue
2023-12-10 20:39:43 +08:00
Cyril59310
97ed0a96d8
Missing translation key (#4200) 2023-12-10 14:33:01 +08:00
Louis Lam
e1147c06aa Update denpendecies 2023-12-10 02:45:42 +08:00
Ritik Singh
abc8f2b131
Fix: Correct Maintenance Start/End Time Input to Use Explicitly Specified Timezone (#4186) 2023-12-09 18:27:07 +08:00
Nelson Chan
46b300808d
Chore: Fix console colors & add JSDoc (#4170) 2023-12-09 17:48:25 +08:00
Frank Elsinga
777ef6bc7b
chore: added a helptext for ntfy's priority field (#4175)
* added a helptext for `ntfy`'s `priority` field

* linting fixes

* removed an unnecessary `Math.max` call
2023-12-09 17:37:33 +08:00
Louis Lam
b244e8fcbb Re-export the icon on vectr.com, so it can be editable again. The current icon.svg was reduced size by a contributor previously, but the border is detached after that, which cannot edit by any svg editor anymore. 2023-12-09 04:24:19 +08:00
Louis Lam
ad4629cb03
Fix UPTIME_KUMA_DB_NAME issue (#4169) 2023-12-05 05:16:55 +08:00
Duvergier Claude
478403ef63
Adding a way to reset the admin password via CLI without any user interaction (#3912)
* feat(cli): Allow unattended password reset via CLI

This commit adds a way to reset the admin password via CLI without any
user interaction (unattended operation).

It adds an optional `new_password` CLI argument that, when present is
used instead of prompting the user for password and password
confirmation.

It also makes sure the user is informed the password could leak into
it's shell history (it's up to him to do some cleaning if
needed/wanted).

* Change to dash style

* Add dry-run

* Fix number password issue

---------

Co-authored-by: Louis Lam <louislam@users.noreply.github.com>
2023-12-05 04:23:42 +08:00
Nelson Chan
81b84a3c53
Fix: Filtering works with group monitors (again) (#3685)
* Fix: Group monitors use nested filtering

* Chore: Fix lint
2023-12-05 04:04:54 +08:00
Frank Elsinga
031947319a
Add an aria-label to the monitor search box (#4163)
* added the `Search monitored sites` label

* rebase
2023-12-05 01:15:28 +08:00
Adam Stachowicz
74a908a069
Max ESLint warnings 0 (#4158)
* Fix ESLint warnings. Update workflows. 0 ESLint warnings for auto-test

* json-yaml-validate: Fix `unable to find version `v2``
2023-12-04 18:19:18 +08:00
Louis Lam
20a68a16f5
Update CONTRIBUTING.md 2023-12-04 02:32:11 +08:00
Louis Lam
8aa497fb89
Update actions/stale from v7 to v8 and disable it for pull request 2023-12-04 02:11:52 +08:00
Frank Elsinga
9c56c9b346
Fixed the buttons of ActionsSelect and ActionsInput having a default type="submit" (#4162)
* fixed the buttons having a default type="submit"

* fixed linting issue
2023-12-04 01:15:40 +08:00
DevMirza
db7a92a74c
🐛 fix(remote-browser): Remove unused test() function (#4155)
* fix

* fix lint

* Update Notifications.vue

* Update ActionInput.vue
2023-12-03 20:27:09 +08:00
Nelson Chan
46432618e1
Feat: Add json-query to MQTT monitor type (#3857)
* Feat: Add json-query MQTT monitor type

* Fix: Allow result to be null

* Fix: Remove unused parameter

* Chore: Update JSDoc

* Fix: Add default if checkType is not set

---------

Co-authored-by: Louis Lam <louislam@users.noreply.github.com>
2023-12-03 01:36:19 +08:00
Nelson Chan
35479c7690
Fix: Disable timezone conversion for mariadb (#3756) 2023-12-03 01:34:26 +08:00
Louis Lam
7772a546db
Merge 1.23.8 (#4142)
1.23.x merge to master
2023-12-02 18:47:26 +08:00
Louis Lam
c3260bbf51 Merge lock file 2023-12-02 18:43:41 +08:00
Louis Lam
c5d9c54a04 Merge branch 'master' into 1.23.X-merge-to-2.X.X-2
# Conflicts:
#	package.json
2023-12-02 18:43:06 +08:00
Louis Lam
0110c4d57a Merge branch '1.23.X' into 1.23.X-merge-to-2.X.X-2
# Conflicts:
#	package-lock.json
#	package.json
2023-12-02 18:42:40 +08:00
Louis Lam
37666bf35f Update to 1.23.8 2023-12-02 17:51:06 +08:00
Louis Lam
90badfabee Update dependencies 2023-12-02 15:41:59 +08:00
Louis Lam
81c9900e23 Merge branch '1.23.X' into 1.23.X-merge-to-2.X.X-2
# Conflicts:
#	docker/debian-base.dockerfile
2023-12-01 15:50:35 +08:00
Adam Hancock
62780001f7
Feature: remote browser support (#3904)
* [empty commit] pull request for remote browser support

* Remote browser: Added UI screens and DB tables.

* Remote browser working

* Fixing tests

* Fix tests

* Fix tests

* fix tests

* Test browser

* revert init_db.js

* Changed drop down to ActionSelect

* Fix translations

* added remote browsers toggle

* revert changes package-lock

* Fix bad english

* Set default remote browser

* Remote browsers Requested changes

* fixed description.
2023-12-01 15:29:10 +08:00
Frank Elsinga
e3396251a8
accessible domain selector (#4133)
* made the status domain selector more accessible

* linting fix

* implemented the suggested changes

---------

Co-authored-by: Louis Lam <louislam@users.noreply.github.com>
2023-12-01 15:05:01 +08:00
Frank Elsinga
9c9a086788
accessible ActionSelect/ ActionInput (#4132)
* made sure that the ActionSelect'or has correct accessibiltiy tags

* fixed linting error

* improved the ActionInputs accessibility
2023-12-01 14:34:37 +08:00
Louis Lam
9fb95fe95e
Add support for /snap/bin/chromium (#4141) 2023-12-01 14:25:41 +08:00
Louis Lam
1e75d81bcf
Update apprise from 1.4.5 to 1.6.0 (#4140) 2023-12-01 14:16:35 +08:00
Louis Lam
cb3a104dc0
Default Retries from 1 to 0 (#4139)
* Default "Retries" from 1 to 0
2023-12-01 14:09:13 +08:00
Louis Lam
57a18958d6
Update gamedig from ~4.1.0 to ^4.2.0 (#4136) 2023-12-01 11:42:31 +08:00
Louis Lam
0294118cbf
Update README.md 2023-11-30 20:37:07 +08:00
Louis Lam
1708b67949
Change execSync/spawnSync to async (#4123)
* WIP

* Add missing await

* Update package-lock.json
2023-11-30 16:12:04 +08:00
Nenad Gal
01855e0ffe
monitor path as a notification title mattermost (#3801) 2023-11-30 15:58:01 +08:00
dakriy
80efe9b831
Handle cookies on redirection (#3589)
* feat: Set and send cookies on redirection (louislam#3587).

* feat: Make proxy agents handle cookies

* Merge package-lock.json

* Merge package-lock.json

* Fix lint

---------

Co-authored-by: Louis Lam <louislam@users.noreply.github.com>
2023-11-29 17:25:33 +08:00
Nelson Chan
b8bd17ddbd
Fix: Add timeout to testDockerHost (#4097) 2023-11-26 18:47:56 +08:00
Ikko Eltociear Ashimine
2ad8af9d14
Minor (#4104)
infomation -> information
2023-11-25 22:08:21 +08:00
Louis Lam
5bc8c0c66f
Merge 1.23.7 (#4102)
1.23.x merge to 2.x.x
2023-11-25 03:32:12 +08:00
Louis Lam
60be875edd Fix a merge issue 2023-11-25 03:28:45 +08:00
Louis Lam
676587b7fb Merge package-lock.json 2023-11-25 03:25:50 +08:00
Louis Lam
e9bf02fc2c Merge branch '1.23.X' into 1.23.X-merge-to-2.X.X-2
# Conflicts:
#	package-lock.json
#	package.json
#	server/model/monitor.js
#	server/monitor-types/tailscale-ping.js
#	server/socket-handlers/general-socket-handler.js
#	server/uptime-kuma-server.js
2023-11-25 03:25:03 +08:00
Louis Lam
73239d441d Update to 1.23.7 2023-11-24 18:49:27 +08:00
Louis Lam
4ceeb304f1 Add a script to prepare a changelog 2023-11-24 18:44:54 +08:00
Nelson Chan
67250d6302
Feat: Retries persistence (#3814)
* Feat: Retries persistence

* Fix: Set duration for first beat of push monitor

* Feat: Update UptimeCalculator in push route

* Fix: Handle resend in push route

* Chore: Remove debug log
2023-11-24 18:11:36 +08:00
Louis Lam
711380bbbe
Merge pull request #4095 from louislam/update-3
Rewrite Tailscale ping using spawnSync
2023-11-24 17:44:24 +08:00
Louis Lam
9536c6aa6a Minor 2023-11-24 17:33:13 +08:00
Louis Lam
4255496b11 Rewrite Tailscale ping using spawnSync 2023-11-24 17:29:42 +08:00
Louis Lam
f28dccf4e1
Merge pull request from GHSA-v4v2-8h88-65qj 2023-11-24 17:18:01 +08:00
Louis Lam
b689733d59 Fix getGameList, testChrome without checkLogin 2023-11-24 16:37:52 +08:00
Louis Lam
afaa7bb2f0 Do not process debug log for production 2023-11-24 16:03:35 +08:00
Adam Hancock
ac452bbcb9
Zoom in on real browser screenshot (#3925)
* Screenshot in modal

* Update src/components/ScreenshotDialog.vue

Co-authored-by: Frank Elsinga <frank@elsinga.de>

* Update src/pages/Details.vue

Co-authored-by: Frank Elsinga <frank@elsinga.de>

* Added title

* Update ScreenshotDialog.vue

Co-authored-by: Frank Elsinga <frank@elsinga.de>

* Add translations

---------

Co-authored-by: Frank Elsinga <frank@elsinga.de>
2023-11-24 02:58:33 +08:00
Louis Lam
121d1a11af
Revert "Restart running monitors if no heartbeat (#3952)" (#4088)
This reverts commit c43223a16d.
2023-11-24 02:23:38 +08:00
Louis Lam
8e61158758
Close the client postgresql connection after rejection. (#4084)
Co-authored-by: Manuel Vázquez Acosta <manuel@merchise.org>
2023-11-22 19:50:03 +08:00
Louis Lam
dc42420193 Change version to 2.0.0-dev 2023-11-22 19:35:56 +08:00
Louis Lam
d810a74d70
Move rootless images to an another set (#4052) 2023-11-22 16:12:15 +08:00
Louis Lam
bf58838b89
+10 seconds for Abort signal (#4053)
* Debug only

* Remove debug
2023-11-22 16:03:03 +08:00
Nelson Chan
33ce0ef02c
Fix: Improve error message on timeout (#4054)
* Fix: Improve error message on timeout

* Chore: Format
2023-11-21 23:56:17 +08:00
Louis Lam
1550a5f792
Merge pull request #4064 from louislam/1.23.X-merge-to-2.X.X
1.23.x merge to 2.x.x
2023-11-20 14:50:37 +08:00
Louis Lam
92e0eec6d4 Merge branch '1.23.X' into 1.23.X-merge-to-2.X.X
# Conflicts:
#	package.json
#	server/model/monitor.js
2023-11-20 14:49:45 +08:00
Louis Lam
9973d73dd7 Fix a merge issue 2023-11-20 14:48:20 +08:00
Rakibul Yeasin
e2782810cf
fix: Clickable link monitors aren't underlined when editing status page (#3820) 2023-11-20 14:45:34 +08:00
Louis Lam
c1aaad0d85 Update to 1.23.6 2023-11-18 11:37:14 +08:00
Louis Lam
954e05b72f Fix #4051 2023-11-18 11:33:34 +08:00
Louis Lam
2918f723c9
Merge pull request #4050 from louislam/1.23.X-merge-to-2.X.X
1.23.x merge to 2.x.x
2023-11-18 01:38:35 +08:00
Louis Lam
2aa15ea635 Merge branch '1.23.X' into 1.23.X-merge-to-2.X.X
# Conflicts:
#	server/database.js
2023-11-18 01:37:30 +08:00
Louis Lam
6d4a45f18c Update to 1.23.5 2023-11-18 01:23:53 +08:00
Louis Lam
f0975cd929
Should be a final ulitmate fix for request timeout issue (#4045)
* Try to fix timeout again

* Ops
2023-11-18 01:17:54 +08:00
Louis Lam
40d6a21453
Fix kafka migration script again (#4043) 2023-11-17 15:21:29 +08:00
Louis Lam
b383392e8f
Remains Node.js 16' SSL behavior for 1.23.X (#4044) 2023-11-17 15:21:08 +08:00
Nelson Chan
9964b6c4d8
Fix: Update monitor object on pause (#4032) 2023-11-16 20:41:35 +08:00
William Harrison
2547515a37
feat: grammar fixes (#4042)
* feat: grammar fixes

* Update PULL_REQUEST_TEMPLATE.md
2023-11-16 20:31:20 +08:00
Louis Lam
014231ef86
Merge pull request #3883 from louislam/1.23.X-merge-to-2.X.X
Merge 1.23.4 changes to 2.0.0
2023-11-13 21:26:40 +08:00
Louis Lam
188fdcb6ad Merge branch 'master' into 1.23.X-merge-to-2.X.X
# Conflicts:
#	server/model/monitor.js
#	server/util-server.js
2023-11-13 21:25:49 +08:00
Louis Lam
0f980e97b1 Merge dependencies 2023-11-13 21:25:00 +08:00
Louis Lam
65cbc7b318 Migrate kafka_producer patch 2023-11-13 21:19:43 +08:00
Louis Lam
ace1fe00c2 Merge branch 'master' into 1.23.X-merge-to-2.X.X
# Conflicts:
#	docker/debian-base.dockerfile
#	package-lock.json
#	server/database.js
#	server/model/monitor.js
#	server/uptime-kuma-server.js
#	server/util-server.js
2023-11-13 21:15:51 +08:00
Louis Lam
d56bf08cd7 Update to 1.23.4 2023-11-13 15:23:32 +08:00
Louis Lam
291d5d7c55 Update dependencies 2023-11-13 15:22:51 +08:00
Louis Lam
8e3ff25f7b
Followup #3864, rebase for 1.23.x (#4016)
* Fix: Use ActionSelect Docker Host & validate input

* Fix: Handle docker host deleted while editing

* UI: Use add for ActionSelect & prevent delete instead

---------

Co-authored-by: Nelson Chan <chakflying@hotmail.com>
2023-11-12 20:32:40 +08:00
Louis Lam
6e80c850f4
Should be an ulitmate fix for request timeout issue (#4011) 2023-11-12 13:50:51 +08:00
Muhammed Hussein karimi
0608881954
🐛 fix: kafka producer booleans migration null values (#3984)
Signed-off-by: Muhammed Hussein Karimi <info@karimi.dev>
2023-11-10 00:32:54 +08:00
Nelson Chan
38efd97b28
Fix: Support float ping in push route (#3987) 2023-11-09 23:39:44 +08:00
Nelson Chan
5b6522a54e
Fix: entryPage setting can be null (#3994) 2023-11-08 20:46:10 +08:00
Nelson Chan
b534fde265
Fix: Use ActionSelect for Docker Host & validate input (#3864)
* Fix: Use ActionSelect Docker Host & validate input

* Fix: Handle docker host deleted while editing

* UI: Use add for ActionSelect & prevent delete instead
2023-11-03 21:25:28 +08:00
Louis Lam
ce0ba6c0ca
Fix/axios abort signal for 1.23.X (#3971)
* Fix: Add axios abort signal

* Chore: Fix comment

---------

Co-authored-by: Nelson Chan <chakflying@hotmail.com>
2023-11-01 10:10:48 +08:00
Nelson Chan
fdfb572e09
Fix: Add axios abort signal (#3961)
* Fix: Add axios abort signal

* Chore: Fix comment
2023-11-01 09:48:13 +08:00
Louis Lam
c43223a16d
Restart running monitors if no heartbeat (#3952) 2023-11-01 09:36:12 +08:00
Louis Lam
df832f15fe
Add Uzbek language (#3959)
* Add uz

* Update i18n.js
2023-10-30 09:23:47 +08:00
Louis Lam
d7b9bcf4b4
Drop install.sh and related files (#3955) 2023-10-29 15:28:47 +08:00
Muhammed Hussein karimi
9f170a68d7
🐛 fix: boolean fields in kafka producer monitor (#3949)
* 🐛 fix: boolean fields in kafka producer monitor

Signed-off-by: Muhammed Hussein Karimi <info@karimi.dev>

* 🐛 fix: boolean fields db patch table modify

Signed-off-by: Muhammed Hussein Karimi <info@karimi.dev>

* ✏️  typo: remove `_old` COLUMNs in patch-fix-kafka-producer-booleans

Signed-off-by: Muhammed Hussein Karimi <info@karimi.dev>

---------

Signed-off-by: Muhammed Hussein Karimi <info@karimi.dev>
2023-10-28 14:42:55 +08:00
Nelson Chan
201c10416e
Fix: Entry page setting in Dev mode (#3940) 2023-10-28 10:34:15 +08:00
check bot
b32d869823
Fix: sentence framing (#3945) 2023-10-28 08:16:53 +08:00
Chongyi Zheng
ddd135efa8
Confirm chrome path in macOS is correct (#3950) 2023-10-28 08:15:49 +08:00
Nelson Chan
9379498b49
Chore: Allow MS Edge for real-browser monitor (#3941) 2023-10-27 18:46:13 +08:00
Louis Lam
1a862e47ab Check if the password changed when user is not null 2023-10-23 06:21:39 +08:00
Louis Lam
87b2e45fbf Check if the password changed when user is not null 2023-10-22 00:51:03 +08:00
atmaniak
9b599ccd1d
Add Grafana Oncall notification provider (#2783)
* Add Grafana Oncall notification provider

* Fix linter errors

* Remove useless variables

* Remove test message

Co-authored-by: Frank Elsinga <frank@elsinga.de>

* spelling consistency

* Update server/notification-providers/grafana-oncall.js

Co-authored-by: Frank Elsinga <frank@elsinga.de>

* Update server/notification-providers/grafana-oncall.js

Co-authored-by: Frank Elsinga <frank@elsinga.de>

* eslint requirements

Co-authored-by: Matthew Nickson <mnickson@sidingsmedia.com>

* Add Grafana Oncall translation

* Update src/components/notifications/GrafanaOncall.vue

Co-authored-by: Frank Elsinga <frank@elsinga.de>

* Check empty url

---------

Co-authored-by: Emmanuel Cohen <emmanuel.cohen@bso.co>
Co-authored-by: Frank Elsinga <frank@elsinga.de>
Co-authored-by: Matthew Nickson <mnickson@sidingsmedia.com>
Co-authored-by: Louis Lam <louislam@users.noreply.github.com>
2023-10-19 19:32:42 +08:00
Louis Lam
8412e19fe6 Add a comment 2023-10-19 09:41:30 +08:00
Louis Lam
bbaba29222 Set default ua for axios: Uptime-Kuma/version instead of axios/version 2023-10-18 21:54:49 +08:00
Louis Lam
e11aad2d60 Add some comments 2023-10-18 21:54:48 +08:00
DevMirza
8c7dea5219
🚀 Add CodeQL Action to analyze code (#3910)
* Create codeql-analysis.yml

* Update codeql-analysis.yml
2023-10-18 18:45:14 +08:00
Louis Lam
adc3548e9d
Update README.md 2023-10-17 20:23:58 +08:00
Frank Elsinga
1515f4e121
chore:Webhook custom documentation (#3636)
* improved the documentation

* fixed the `customBodyPlaceholder` not being translated

* fixed required not being set where necessary

* changed the docs that `monitorJSON` is also avalibale for cert-expiry
2023-10-16 22:24:47 +08:00
Frank Elsinga
3fcb7bf181
Feature: SMTP-templating of customBody and customHeader via liquidjs (#3414)
* replaced the regex replacement engine with `Liquid`

* added custom bodys

* fixed a typo

* formatting fixes

* switched all template-variables to be camelCase
2023-10-16 22:16:49 +08:00
Nelson Chan
e64bf0e3fe
Fix: Stop notification check on root certs (#3874)
* Fix: Stop notification check on root certs

* Chore: Use Set for optimization

* Fix: Manually calculate SHA256 to support node v14
2023-10-16 02:20:38 +08:00
Louis Lam
523d137e2b Lint 2023-10-16 00:43:07 +08:00
Louis Lam
18169c59a1
[MySQL monitor] Split password into a standalone field (#3899) 2023-10-16 00:38:56 +08:00
Louis Lam
4ccf263481
Update docker image base from Node.js 16 to Node.js 18 for Uptime Kuma v1 (#3901) 2023-10-16 00:27:47 +08:00
Louis Lam
1c13a75970
Fix #3868 postgres monitor could possibly crash Uptime Kuma (#3880)
* Bump pg

* Handle uncaughtException

* Fix parsing issue of postgres connection and fix the query example
2023-10-13 02:50:10 +08:00
Thomas Spalinger
7f88aacbe7 make monitor start() and stop() async 2023-02-23 16:16:49 +00:00
Stefan Ottosson
f89ed0a3a4 feat: added HTTP method option for push monitor 2022-08-12 18:52:23 +02:00
392 changed files with 29800 additions and 14656 deletions

View file

@ -1,28 +0,0 @@
# Codespaces
You can modifiy Uptime Kuma in your browser without setting up a local development.
![image](https://github.com/louislam/uptime-kuma/assets/1336778/31d9f06d-dd0b-4405-8e0d-a96586ee4595)
1. Click `Code` -> `Create codespace on master`
2. Wait a few minutes until you see there are two exposed ports
3. Go to the `3000` url, see if it is working
![image](https://github.com/louislam/uptime-kuma/assets/1336778/909b2eb4-4c5e-44e4-ac26-6d20ed856e7f)
## Frontend
Since the frontend is using [Vite.js](https://vitejs.dev/), all changes in this area will be hot-reloaded.
You don't need to restart the frontend, unless you try to add a new frontend dependency.
## Backend
The backend does not automatically hot-reload.
You will need to restart the backend after changing something using these steps:
1. Click `Terminal`
2. Click `Codespaces: server-dev` in the right panel
3. Press `Ctrl + C` to stop the server
4. Press `Up` to run `npm run start-server-dev`
![image](https://github.com/louislam/uptime-kuma/assets/1336778/e0c0a350-fe46-4588-9f37-e053c85834d1)

View file

@ -1,23 +0,0 @@
{
"image": "mcr.microsoft.com/devcontainers/javascript-node:dev-18-bookworm",
"features": {
"ghcr.io/devcontainers/features/github-cli:1": {}
},
"updateContentCommand": "npm ci",
"postCreateCommand": "",
"postAttachCommand": {
"frontend-dev": "npm run start-frontend-devcontainer",
"server-dev": "npm run start-server-dev",
"open-port": "gh codespace ports visibility 3001:public -c $CODESPACE_NAME"
},
"customizations": {
"vscode": {
"extensions": [
"streetsidesoftware.code-spell-checker",
"dbaeumer.vscode-eslint",
"GitHub.copilot-chat"
]
}
},
"forwardPorts": [3000, 3001]
}

View file

@ -1,7 +1,6 @@
/.idea /.idea
/node_modules /node_modules
/data* /data*
/cypress
/out /out
/test /test
/kubernetes /kubernetes
@ -18,7 +17,6 @@ README.md
.vscode .vscode
.eslint* .eslint*
.stylelint* .stylelint*
/.devcontainer
/.github /.github
yarn.lock yarn.lock
app.json app.json

View file

@ -1,8 +1,7 @@
module.exports = { module.exports = {
ignorePatterns: [ ignorePatterns: [
"test/*.js", "test/*.js",
"test/cypress", "server/modules/*",
"server/modules/apicache/*",
"src/util.js" "src/util.js"
], ],
root: true, root: true,
@ -84,7 +83,7 @@ module.exports = {
"checkLoops": false, "checkLoops": false,
}], }],
"space-before-blocks": "warn", "space-before-blocks": "warn",
//'no-console': 'warn', //"no-console": "warn",
"no-extra-boolean-cast": "off", "no-extra-boolean-cast": "off",
"no-multiple-empty-lines": [ "warn", { "no-multiple-empty-lines": [ "warn", {
"max": 1, "max": 1,
@ -96,7 +95,8 @@ module.exports = {
"no-unneeded-ternary": "error", "no-unneeded-ternary": "error",
"array-bracket-newline": [ "error", "consistent" ], "array-bracket-newline": [ "error", "consistent" ],
"eol-last": [ "error", "always" ], "eol-last": [ "error", "always" ],
//'prefer-template': 'error', //"prefer-template": "error",
"template-curly-spacing": [ "warn", "never" ],
"comma-dangle": [ "warn", "only-multiline" ], "comma-dangle": [ "warn", "only-multiline" ],
"no-empty": [ "error", { "no-empty": [ "error", {
"allowEmptyCatch": true "allowEmptyCatch": true
@ -149,23 +149,6 @@ module.exports = {
} }
}, },
// Override for jest puppeteer
{
"files": [
"**/*.spec.js",
"**/*.spec.jsx"
],
env: {
jest: true,
},
globals: {
page: true,
browser: true,
context: true,
jestPuppeteer: true,
},
},
// Override for TypeScript // Override for TypeScript
{ {
"files": [ "files": [

View file

@ -6,7 +6,7 @@ body:
- type: checkboxes - type: checkboxes
id: no-duplicate-issues id: no-duplicate-issues
attributes: attributes:
label: "⚠️ Please verify that this bug has NOT been raised before." label: "⚠️ Please verify that this question has NOT been raised before."
description: "Search in the issues sections by clicking [HERE](https://github.com/louislam/uptime-kuma/issues?q=)" description: "Search in the issues sections by clicking [HERE](https://github.com/louislam/uptime-kuma/issues?q=)"
options: options:
- label: "I checked and didn't find similar issue" - label: "I checked and didn't find similar issue"
@ -24,7 +24,7 @@ body:
required: true required: true
attributes: attributes:
label: "📝 Describe your problem" label: "📝 Describe your problem"
description: "Please walk us through it step by step." description: "Please walk us through it step by step. Include all important details and add screenshots where appropriate"
placeholder: "Describe what are you asking for..." placeholder: "Describe what are you asking for..."
- type: textarea - type: textarea
id: error-msg id: error-msg
@ -56,19 +56,20 @@ body:
placeholder: "Ex. Google Chrome 95.0.4638.69" placeholder: "Ex. Google Chrome 95.0.4638.69"
validations: validations:
required: true required: true
- type: input - type: textarea
id: docker-version id: deployment-info
attributes: attributes:
label: "🐋 Docker Version" label: "🖥️ Deployment Environment"
description: "If running with Docker, which version are you running?" description: |
placeholder: "Ex. Docker 20.10.9 / K8S / Podman" examples:
- **Runtime**: Docker 20.10.9 / nodejs 14.18.0 / K8S via ... v1.3.3 / ..
- **Database**: sqlite/embedded mariadb/external mariadb
- **Filesystem used to store the database on**: Windows/ZFS/btrfs/NFSv3 on a SSD/HDD/eMMC
- **number of monitors**: 42
value: |
- Runtime:
- Database:
- Filesystem used to store the database on:
- number of monitors:
validations: validations:
required: false required: true
- type: input
id: nodejs-version
attributes:
label: "🟩 NodeJS Version"
description: "If running with Node.js? which version are you running?"
placeholder: "Ex. 14.18.0"
validations:
required: false

View file

@ -3,14 +3,14 @@ description: "Submit a bug report to help us improve"
#title: "[Bug] " #title: "[Bug] "
labels: [bug] labels: [bug]
body: body:
- type: checkboxes - type: textarea
id: no-duplicate-issues id: related-issues
attributes: validations:
label: "⚠️ Please verify that this bug has NOT been raised before."
description: "Search in the issues sections by clicking [HERE](https://github.com/louislam/uptime-kuma/issues?q=)"
options:
- label: "I checked and didn't find similar issue"
required: true required: true
attributes:
label: "📑 I have found these related issues/pull requests"
description: "Search related issues by clicking [HERE](https://github.com/louislam/uptime-kuma/issues?q=) and explain what the difference between them or explain that you are unable to find any related issues"
placeholder: "Related to #1 by also touching the ... system. They should not be merged because ..."
- type: checkboxes - type: checkboxes
attributes: attributes:
label: "🛡️ Security Policy" label: "🛡️ Security Policy"
@ -31,7 +31,7 @@ body:
required: true required: true
attributes: attributes:
label: "👟 Reproduction steps" label: "👟 Reproduction steps"
description: "How do you trigger this bug? Please walk us through it step by step." description: "How do you trigger this bug? Please walk us through it step by step. Include all important details and add screenshots where appropriate"
placeholder: "..." placeholder: "..."
- type: textarea - type: textarea
id: expected-behavior id: expected-behavior
@ -73,22 +73,23 @@ body:
placeholder: "Ex. Google Chrome 95.0.4638.69" placeholder: "Ex. Google Chrome 95.0.4638.69"
validations: validations:
required: true required: true
- type: input - type: textarea
id: docker-version id: deployment-info
attributes: attributes:
label: "🐋 Docker Version" label: "🖥️ Deployment Environment"
description: "If running with Docker, which version are you running?" description: |
placeholder: "Ex. Docker 20.10.9 / K8S / Podman" examples:
- **Runtime**: Docker 20.10.9 / nodejs 18.17.1 / K8S via ... v1.3.3 / ..
- **Database**: sqlite/embedded mariadb/external mariadb
- **Filesystem used to store the database on**: Windows/ZFS/btrfs/NFSv3 on a SSD/HDD/eMMC
- **number of monitors**: 42
value: |
- Runtime:
- Database:
- Filesystem used to store the database on:
- number of monitors:
validations: validations:
required: false required: true
- type: input
id: nodejs-version
attributes:
label: "🟩 NodeJS Version"
description: "If running with Node.js? which version are you running?"
placeholder: "Ex. 14.18.0"
validations:
required: false
- type: textarea - type: textarea
id: logs id: logs
attributes: attributes:

View file

@ -3,14 +3,14 @@ description: "Submit a proposal for a new feature"
#title: "[Feature] " #title: "[Feature] "
labels: [feature-request] labels: [feature-request]
body: body:
- type: checkboxes - type: textarea
id: no-duplicate-issues id: related-issues
attributes: validations:
label: "⚠️ Please verify that this feature request has NOT been suggested before."
description: "Search in the issues sections by clicking [HERE](https://github.com/louislam/uptime-kuma/issues?q=)"
options:
- label: "I checked and didn't find similar feature request"
required: true required: true
attributes:
label: "📑 I have found these related issues/pull requests"
description: "Search related issues by clicking [HERE](https://github.com/louislam/uptime-kuma/issues?q=) and explain what the difference between them or explain that you are unable to find any related issues"
placeholder: "Related to #1 by also touching the ... system. They should not be merged because ..."
- type: dropdown - type: dropdown
id: feature-area id: feature-area
attributes: attributes:
@ -18,10 +18,17 @@ body:
description: "What kind of feature request is this?" description: "What kind of feature request is this?"
multiple: true multiple: true
options: options:
- API - API / automation options
- New Notification - New notification-provider
- New Monitor - Change to existing notification-provider
- UI Feature - New monitor
- Change to existing monitor
- Dashboard
- Status-page
- Maintenance
- Deployment
- Certificate expiry
- Settings
- Other - Other
validations: validations:
required: true required: true

View file

@ -15,7 +15,7 @@ Please delete any options that are not relevant.
- Bug fix (non-breaking change which fixes an issue) - Bug fix (non-breaking change which fixes an issue)
- User interface (UI) - User interface (UI)
- New feature (non-breaking change which adds functionality) - New feature (non-breaking change which adds functionality)
- Breaking change (fix or feature that would cause existing functionality to not work as expected) - Breaking change (a fix or feature that would cause existing functionality to not work as expected)
- Other - Other
- This change requires a documentation update - This change requires a documentation update
@ -24,9 +24,8 @@ Please delete any options that are not relevant.
- [ ] My code follows the style guidelines of this project - [ ] My code follows the style guidelines of this project
- [ ] I ran ESLint and other linters for modified files - [ ] I ran ESLint and other linters for modified files
- [ ] I have performed a self-review of my own code and tested it - [ ] I have performed a self-review of my own code and tested it
- [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have commented my code, particularly in hard-to-understand areas (including JSDoc for methods)
(including JSDoc for methods) - [ ] My changes generates no new warnings
- [ ] My changes generate no new warnings
- [ ] My code needed automated testing. I have added them (this is optional task) - [ ] My code needed automated testing. I have added them (this is optional task)
## Screenshots (if any) ## Screenshots (if any)

View file

@ -22,46 +22,44 @@ jobs:
strategy: strategy:
matrix: matrix:
os: [macos-latest, ubuntu-latest, windows-latest, ARM64] os: [macos-latest, ubuntu-latest, windows-latest, ARM64]
node: [ 14, 20.5 ] node: [ 18, 20 ]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/ # See supported Node.js release schedule at https://nodejs.org/en/about/releases/
steps: steps:
- run: git config --global core.autocrlf false # Mainly for Windows - run: git config --global core.autocrlf false # Mainly for Windows
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node }} - name: Use Node.js ${{ matrix.node }}
uses: actions/setup-node@v3 uses: actions/setup-node@v4
with: with:
node-version: ${{ matrix.node }} node-version: ${{ matrix.node }}
- run: npm install npm@9 -g
- run: npm install - run: npm install
- run: npm run build - run: npm run build
- run: npm test - run: npm run test-backend
env: env:
HEADLESS_TEST: 1 HEADLESS_TEST: 1
JUST_FOR_TEST: ${{ secrets.JUST_FOR_TEST }} JUST_FOR_TEST: ${{ secrets.JUST_FOR_TEST }}
# As a lot of dev dependencies are not supported on ARMv7, we have to test it separately and just test if `npm ci --production` works # As a lot of dev dependencies are not supported on ARMv7, we have to test it separately and just test if `npm ci --production` works
armv7-simple-test: armv7-simple-test:
needs: [ check-linters ] needs: [ ]
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
timeout-minutes: 15 timeout-minutes: 15
if: ${{ github.repository == 'louislam/uptime-kuma' }}
strategy: strategy:
matrix: matrix:
os: [ ARMv7 ] os: [ ARMv7 ]
node: [ 14, 20 ] node: [ 18, 20 ]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/ # See supported Node.js release schedule at https://nodejs.org/en/about/releases/
steps: steps:
- run: git config --global core.autocrlf false # Mainly for Windows - run: git config --global core.autocrlf false # Mainly for Windows
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node }} - name: Use Node.js ${{ matrix.node }}
uses: actions/setup-node@v3 uses: actions/setup-node@v4
with: with:
node-version: ${{ matrix.node }} node-version: ${{ matrix.node }}
- run: npm install npm@9 -g
- run: npm ci --production - run: npm ci --production
check-linters: check-linters:
@ -69,42 +67,27 @@ jobs:
steps: steps:
- run: git config --global core.autocrlf false # Mainly for Windows - run: git config --global core.autocrlf false # Mainly for Windows
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Use Node.js 20 - name: Use Node.js 20
uses: actions/setup-node@v3 uses: actions/setup-node@v4
with: with:
node-version: 20 node-version: 20
- run: npm install - run: npm install
- run: npm run lint - run: npm run lint:prod
# TODO: Temporarily disable, as it cannot pass the test in 2.0.0 yet e2e-test:
# e2e-tests: needs: [ ]
# needs: [ check-linters ] runs-on: ARM64
# runs-on: ubuntu-latest
# steps:
# - run: git config --global core.autocrlf false # Mainly for Windows
# - uses: actions/checkout@v3
#
# - name: Use Node.js 14
# uses: actions/setup-node@v3
# with:
# node-version: 14
# - run: npm install
# - run: npm run build
# - run: npm run cy:test
frontend-unit-tests:
needs: [ check-linters ]
runs-on: ubuntu-latest
steps: steps:
- run: git config --global core.autocrlf false # Mainly for Windows - run: git config --global core.autocrlf false # Mainly for Windows
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Use Node.js 14 - name: Use Node.js 20
uses: actions/setup-node@v3 uses: actions/setup-node@v4
with: with:
node-version: 14 node-version: 20
- run: npm install - run: npm install
- run: npx playwright install
- run: npm run build - run: npm run build
- run: npm run cy:run:unit - run: npm run test-e2e

View file

@ -11,13 +11,13 @@ jobs:
strategy: strategy:
matrix: matrix:
os: [ubuntu-latest] os: [ubuntu-latest]
node-version: [16] node-version: [18]
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }} - name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3 uses: actions/setup-node@v4
with: with:
node-version: ${{ matrix.node-version }} node-version: ${{ matrix.node-version }}
cache: 'npm' cache: 'npm'

43
.github/workflows/codeql-analysis.yml vendored Normal file
View file

@ -0,0 +1,43 @@
name: "CodeQL"
on:
push:
branches: [ "master", "1.23.X"]
pull_request:
branches: [ "master", "1.23.X"]
schedule:
- cron: '16 22 * * 0'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
timeout-minutes: 360
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'go', 'javascript-typescript' ]
steps:
- name: Checkout repository
uses: actions/checkout@v3
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
- name: Autobuild
uses: github/codeql-action/autobuild@v2
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
with:
category: "/language:${{matrix.language}}"

25
.github/workflows/conflict_labeler.yml vendored Normal file
View file

@ -0,0 +1,25 @@
name: Merge Conflict Labeler
on:
push:
branches:
- master
pull_request_target:
branches:
- master
types: [synchronize]
jobs:
label:
name: Labeling
runs-on: ubuntu-latest
if: ${{ github.repository == 'louislam/uptime-kuma' }}
permissions:
contents: read
pull-requests: write
steps:
- name: Apply label
uses: eps1lon/actions-label-merge-conflict@v3
with:
dirtyLabel: 'needs:resolve-merge-conflict'
repoToken: '${{ secrets.GITHUB_TOKEN }}'

View file

@ -1,27 +0,0 @@
name: json-yaml-validate
on:
push:
branches:
- master
pull_request:
branches:
- master
- 2.0.X
workflow_dispatch:
permissions:
contents: read
pull-requests: write # enable write permissions for pull request comments
jobs:
json-yaml-validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: json-yaml-validate
id: json-yaml-validate
uses: GrantBirki/json-yaml-validate@v1.3.0
with:
comment: "true" # enable comment mode
exclude_file: ".github/config/exclude.txt" # gitignore style file for exclusions

View file

@ -1,4 +1,4 @@
name: 'Automatically close stale issues and PRs' name: 'Automatically close stale issues'
on: on:
workflow_dispatch: workflow_dispatch:
schedule: schedule:
@ -9,14 +9,34 @@ jobs:
stale: stale:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/stale@v7 - uses: actions/stale@v9
with: with:
stale-issue-message: 'We are clearing up our old issues and your ticket has been open for 3 months with no activity. Remove stale label or comment or this will be closed in 2 days.' stale-issue-message: |-
close-issue-message: 'This issue was closed because it has been stalled for 2 days with no activity.' We are clearing up our old `help`-issues and your issue has been open for 60 days with no activity.
days-before-stale: 90 If no comment is made and the stale label is not removed, this issue will be closed in 7 days.
days-before-close: 2 days-before-stale: 60
days-before-pr-stale: 999999999 days-before-close: 7
days-before-pr-close: 1 days-before-pr-stale: -1
days-before-pr-close: -1
exempt-issue-labels: 'News,Medium,High,discussion,bug,doc,feature-request' exempt-issue-labels: 'News,Medium,High,discussion,bug,doc,feature-request'
exempt-issue-assignees: 'louislam' exempt-issue-assignees: 'louislam'
operations-per-run: 200 operations-per-run: 200
- uses: actions/stale@v9
with:
stale-issue-message: |-
This issue was marked as `cannot-reproduce` by a maintainer.
If an issue is non-reproducible, we cannot fix it, as we do not know what the underlying issue is.
If you have any ideas how we can reproduce this issue, we would love to hear them.
We don't have a good way to deal with truely unreproducible issues and are going to close this issue in a month.
If think there might be other differences in our environment or in how we tried to reproduce this, we would appreciate any ideas.
close-issue-message: |-
This issue will be closed as no way to reproduce it has been found.
If you/somebody finds a way how to (semi-reliably) reproduce this, we can reopen this issue. ^^
days-before-stale: 180
days-before-close: 30
days-before-pr-stale: -1
days-before-pr-close: -1
any-of-issue-labels: 'cannot-reproduce'
operations-per-run: 200

43
.github/workflows/validate.yml vendored Normal file
View file

@ -0,0 +1,43 @@
name: validate
on:
push:
branches:
- master
pull_request:
branches:
- master
- 1.23.X
workflow_dispatch:
permissions:
contents: read
pull-requests: write # enable write permissions for pull request comments
jobs:
json-yaml-validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: json-yaml-validate
id: json-yaml-validate
uses: GrantBirki/json-yaml-validate@v2.4.0
with:
comment: "true" # enable comment mode
exclude_file: ".github/config/exclude.txt" # gitignore style file for exclusions
# General validations
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js 20
uses: actions/setup-node@v4
with:
node-version: 20
- name: Validate language JSON files
run: node ./extra/check-lang-json.js
- name: Validate knex migrations filename
run: node ./extra/check-knex-filenames.mjs

3
.gitignore vendored
View file

@ -15,9 +15,6 @@ dist-ssr
/tmp /tmp
.env .env
cypress/videos
cypress/screenshots
/extra/healthcheck.exe /extra/healthcheck.exe
/extra/healthcheck /extra/healthcheck
/extra/healthcheck-armv7 /extra/healthcheck-armv7

View file

@ -1,94 +1,216 @@
# Project Info # Project Info
First of all, I want to thank everyone who made pull requests for Uptime Kuma. I never thought the GitHub Community would be so nice! Because of this, I also never thought that other people would actually read and edit my code. It is not very well structured or commented, sorry about that. First of all, I want to thank everyone who has submitted issues or shared pull requests for Uptime Kuma.
I never thought the GitHub community would be so nice!
Because of this, I also never thought that other people would actually read and edit my code.
Parts of the code are not very well-structured or commented, sorry about that.
The project was created with vite.js (vue3). Then I created a subdirectory called "server" for the server part. Both frontend and backend share the same package.json. The project was created with `vite.js` and is written in `vue3`.
Our backend lives in the `server`-directory and mostly communicates via websockets.
Both frontend and backend share the same `package.json`.
The frontend code builds into "dist" directory. The server (express.js) exposes the "dist" directory as the root of the endpoint. This is how production is working. For production, the frontend is built into the `dist`-directory and the server (`express.js`) exposes the `dist` directory as the root of the endpoint.
For development, we run vite in development mode on another port.
## Key Technical Skills
- Node.js (You should know about promise, async/await and arrow function etc.)
- Socket.io
- SCSS
- Vue.js
- Bootstrap
- SQLite
## Directories ## Directories
- config (dev config files) - `config` (dev config files)
- data (App data) - `data` (App data)
- db (Base database and migration scripts) - `db` (Base database and migration scripts)
- dist (Frontend build) - `dist` (Frontend build)
- docker (Dockerfiles) - `docker` (Dockerfiles)
- extra (Extra useful scripts) - `extra` (Extra useful scripts)
- public (Frontend resources for dev only) - `public` (Frontend resources for dev only)
- server (Server source code) - `server` (Server source code)
- src (Frontend source code) - `src` (Frontend source code)
- test (unit test) - `test` (unit test)
## Can I create a pull request for Uptime Kuma? ## Can I create a pull request for Uptime Kuma?
Yes or no, it depends on what you will try to do. Since I don't want to waste your time, be sure to **create an empty draft pull request or open an issue, so we can have a discussion first**. Especially for a large pull request or you don't know if it will be merged or not. Yes or no, it depends on what you will try to do.
Both yours and our maintainers' time is precious, and we don't want to waste either.
Here are some references: If you have any questions about any process/.. is not clear, you are likely not alone => please ask them ^^
### ✅ Usually accepted Different guidelines exist for different types of pull requests (PRs):
- <details><summary><b>security fixes</b></summary>
<p>
- Bug fix Submitting security fixes is something that may put the community at risk.
- Security fix Please read through our [security policy](SECURITY.md) and submit vulnerabilities via an [advisory](https://github.com/louislam/uptime-kuma/security/advisories/new) + [issue](https://github.com/louislam/uptime-kuma/issues/new?assignees=&labels=help&template=security.md) instead.
- Adding notification providers We encourage you to submit how to fix a vulnerability if you know how to, this is not required.
- Adding new language files (see [these instructions](https://github.com/louislam/uptime-kuma/blob/master/src/lang/README.md)) Following the security policy allows us to properly test, fix bugs.
- Adding new language keys: `$t("...")` This review allows us to notice, if there are any changes necessary to unrelated parts like the documentation.
[**PLEASE SEE OUR SECURITY POLICY.**](SECURITY.md)
### ⚠️ Discussion required </p>
</details>
- <details><summary><b>small, non-breaking bug fixes</b></summary>
<p>
- Large pull requests If you come across a bug and think you can solve, we appreciate your work.
- New features Please make sure that you follow these rules:
- keep the PR as small as possible, fix only one thing at a time => keeping it reviewable
- test that your code does what you claim it does.
### ❌ Won't be merged <sub>Because maintainer time is precious, junior maintainers may merge uncontroversial PRs in this area.</sub>
</p>
</details>
- <details><summary><b>translations / internationalisation (i18n)</b></summary>
<p>
- A dedicated PR for translating existing languages (see [these instructions](https://github.com/louislam/uptime-kuma/blob/master/src/lang/README.md)) We use weblate to localise this project into many languages.
- Do not pass the auto-test If you are unhappy with a translation this is the best start.
- Any breaking changes On how to translate using weblate, please see [these instructions](https://github.com/louislam/uptime-kuma/blob/master/src/lang/README.md).
- Duplicated pull requests
- Buggy
- UI/UX is not close to Uptime Kuma
- Modifications or deletions of existing logic without a valid reason.
- Adding functions that is completely out of scope
- Converting existing code into other programming languages
- Unnecessarily large code changes that are hard to review and cause conflicts with other PRs.
The above cases may not cover all possible situations. There are two cases in which a change cannot be done in weblate and requires a PR:
- A text may not be currently localisable. In this case, **adding a new language key** via `$t("languageKey")` might be nessesary
- language keys need to be **added to `en.json`** to be visible in weblate. If this has not happened, a PR is appreciated.
- **Adding a new language** requires a new file see [these instructions](https://github.com/louislam/uptime-kuma/blob/master/src/lang/README.md)
I (@louislam) have the final say. If your pull request does not meet my expectations, I will reject it, no matter how much time you spend on it. Therefore, it is essential to have a discussion beforehand. <sub>Because maintainer time is precious, junior maintainers may merge uncontroversial PRs in this area.</sub>
</p>
</details>
- <details><summary><b>new notification providers</b></summary>
<p>
To set up a new notification provider these files need to be modified/created:
- `server/notification-providers/PROVIDER_NAME.js` is where the heart of the notification provider lives.
- Both `monitorJSON` and `heartbeatJSON` can be `null` for some events.
If both are `null`, this is a general testing message, but if just `heartbeatJSON` is `null` this is a certificate expiry.
- Please wrap the axios call into a
```js
try {
let result = await axios.post(...);
if (result.status === ...) ...
} catch (error) {
this.throwGeneralAxiosError(error);
}
```
- `server/notification.js` is where the backend of the notification provider needs to be registered.
*If you have an idea how we can skip this step, we would love to hear about it ^^*
- `src/components/NotificationDialog.vue` you need to decide if the provider is a regional or a global one and add it with a name to the respective list
- `src/components/notifications/PROVIDER_NAME.vue` is where the frontend of each provider lives.
Please make sure that you have:
- used `HiddenInput` for secret credentials
- included all the necessary helptexts/placeholder/.. to make sure the notification provider is simple to setup for new users.
- include all translations (`{{ $t("Translation key") }}`, [`i18n-t keypath="Translation key">`](https://vue-i18n.intlify.dev/guide/advanced/component.html)) in `src/lang/en.json` to enable our translators to translate this
- `src/components/notifications/index.js` is where the frontend of the provider needs to be registered.
*If you have an idea how we can skip this step, we would love to hear about it ^^*
Offering notifications is close to the core of what we are as an uptime monitor.
Therefore, making sure that they work is also really important.
Because testing notification providers is quite time intensive, we mostly offload this onto the person contributing a notification provider.
To make sure you have tested the notification provider, please include screenshots of the following events in the pull-request description:
- `UP`/`DOWN`
- Certificate Expiry via https://expired.badssl.com/
- Testing (the test button on the notification provider setup page)
Using the following way to format this is encouraged:
```md
| Event | Before | After |
------------------
| `UP` | paste-image-here | paste-image-here |
| `DOWN` | paste-image-here | paste-image-here |
| Certificate-expiry | paste-image-here | paste-image-here |
| Testing | paste-image-here | paste-image-here |
```
<sub>Because maintainer time is precious, junior maintainers may merge uncontroversial PRs in this area.</sub>
</p>
</details>
- <details><summary><b>new monitoring types</b></summary>
<p>
To set up a new notification provider these files need to be modified/created:
- `server/monitor-types/MONITORING_TYPE.js` is the core of each monitor.
the `async check(...)`-function should:
- throw an error for each fault that is detected with an actionable error message
- in the happy-path, you should set `heartbeat.msg` to a successful message and set `heartbeat.status = UP`
- `server/uptime-kuma-server.js` is where the monitoring backend needs to be registered.
*If you have an idea how we can skip this step, we would love to hear about it ^^*
- `src/pages/EditMonitor.vue` is the shared frontend users interact with.
Please make sure that you have:
- used `HiddenInput` for secret credentials
- included all the necessary helptexts/placeholder/.. to make sure the notification provider is simple to setup for new users.
- include all translations (`{{ $t("Translation key") }}`, [`i18n-t keypath="Translation key">`](https://vue-i18n.intlify.dev/guide/advanced/component.html)) in `src/lang/en.json` to enable our translators to translate this
-
<sub>Because maintainer time is precious, junior maintainers may merge uncontroversial PRs in this area.</sub>
</p>
</details>
- <details><summary><b>new features/ major changes / breaking bugfixes</b></summary>
<p>
be sure to **create an empty draft pull request or open an issue, so we can have a discussion first**.
This is especially important for a large pull request or when you don't know if it will be merged or not.
<sub>Because of the large impact of this work, only senior maintainers may merge PRs in this area.</sub>
</p>
</details>
The following rules are essential for making your PR mergable:
- Merging multiple issues by a huge PR is more difficult to review and causes conflicts with other PRs. Please
- (if possible) **create one PR for one issue** or
- (if not possible) **explain which issues a PR addresses and why this PR should not be broken apart**
- Make sure your **PR passes our continuous integration**.
PRs will not be merged unless all CI-Checks are green.
- **Breaking changes** (unless for a good reason and discussed beforehand) will not get merged / not get merged quickly.
Such changes require a major version release.
- **Test your code** before submitting a PR.
Buggy PRs will not be merged.
- Make sure the **UI/UX is close to Uptime Kuma**.
- **Think about the maintainability**:
Don't add functionality that is completely **out of scope**.
Keep in mind that we need to be able to maintain the functionality.
- Don't modify or delete existing logic without a valid reason.
- Don't convert existing code into other programming languages for no reason.
I ([@louislam](https://github.com/louislam)) have the final say.
If your pull request does not meet my expectations, I will reject it, no matter how much time you spent on it.
Therefore, it is essential to have a discussion beforehand.
I will assign your pull request to a [milestone](https://github.com/louislam/uptime-kuma/milestones), if I plan to review and merge it. I will assign your pull request to a [milestone](https://github.com/louislam/uptime-kuma/milestones), if I plan to review and merge it.
Also, please don't rush or ask for an ETA, because I have to understand the pull request, make sure it is no breaking changes and stick to my vision of this project, especially for large pull requests. Please don't rush or ask for an ETA.
We have to understand the pull request, make sure it has no breaking changes and stick to the vision of this project, especially for large pull requests.
## I'd like to work on an issue. How do I do that?
We have found that assigning people to issues is management-overhead that we don't need.
A short comment that you want to try your hand at this issue is appreciated to save other devs time.
If you come across any problem during development, feel free to leave a comment with what you are stuck on.
### Recommended Pull Request Guideline ### Recommended Pull Request Guideline
Before deep into coding, discussion first is preferred. Creating an empty pull request for discussion would be recommended. Before diving deep into coding, having a discussion first by creating an empty pull request for discussion is preferred.
The rationale behind this is that we can align the direction and scope of the feature to eliminate any conflicts with existing and planned work, and can help by pointing out any potential pitfalls.
1. Fork the project 1. Fork the project
1. Clone your fork repo to local 2. Clone your fork repo to local
1. Create a new branch 3. Create a new branch
1. Create an empty commit 4. Create an empty commit: `git commit -m "<YOUR TASK NAME>" --allow-empty`
`git commit -m "[empty commit] pull request for <YOUR TASK NAME>" --allow-empty` 5. Push to your fork repo
1. Push to your fork repo 6. Prepare a pull request: https://github.com/louislam/uptime-kuma/compare
1. Create a pull request: https://github.com/louislam/uptime-kuma/compare 7. Write a proper description. You can mention @louislam in it, so @louislam will get the notification.
1. Write a proper description 8. Create your pull request as a Draft
1. Click "Change to draft" 9. Wait for the discussion
1. Discussion
## Project Styles ## Project Styles
I personally do not like something that requires so many configurations before you can finally start the app. I hope Uptime Kuma installation will be as easy as like installing a mobile app. I personally do not like something that requires a lot of configuration before you can finally start the app.
The goal is to make the Uptime Kuma installation as easy as installing a mobile app.
- Easy to install for non-Docker users, no native build dependency is needed (for x86_64/armv7/arm64), no extra config, and no extra effort required to get it running - Easy to install for non-Docker users
- Single container for Docker users, no very complex docker-compose file. Just map the volume and expose the port, then good to go - no native build dependency is needed (for `x86_64`/`armv7`/`arm64`)
- no extra configuration and
- no extra effort required to get it running
- Single container for Docker users
- no complex docker-compose file
- mapping the volume and exposing the port should be the only requirements
- Settings should be configurable in the frontend. Environment variables are discouraged, unless it is related to startup such as `DATA_DIR` - Settings should be configurable in the frontend. Environment variables are discouraged, unless it is related to startup such as `DATA_DIR`
- Easy to use - Easy to use
- The web UI styling should be consistent and nice - The web UI styling should be consistent and nice
@ -108,18 +230,12 @@ I personally do not like something that requires so many configurations before y
## Tools ## Tools
- [`Node.js`](https://nodejs.org/) >= 14 - [`Node.js`](https://nodejs.org/) >= 18
- [`npm`](https://www.npmjs.com/) >= 8.5 - [`npm`](https://www.npmjs.com/) >= 9.3
- [`git`](https://git-scm.com/) - [`git`](https://git-scm.com/)
- IDE that supports [`ESLint`](https://eslint.org/) and EditorConfig (I am using [`IntelliJ IDEA`](https://www.jetbrains.com/idea/)) - IDE that supports [`ESLint`](https://eslint.org/) and EditorConfig (I am using [`IntelliJ IDEA`](https://www.jetbrains.com/idea/))
- A SQLite GUI tool (f.ex. [`SQLite Expert Personal`](https://www.sqliteexpert.com/download.html) or [`DBeaver Community`](https://dbeaver.io/download/)) - A SQLite GUI tool (f.ex. [`SQLite Expert Personal`](https://www.sqliteexpert.com/download.html) or [`DBeaver Community`](https://dbeaver.io/download/))
### GitHub Codespace
If you don't want to setup an local environment, you can now develop on GitHub Codespace, read more:
https://github.com/louislam/uptime-kuma/tree/master/.devcontainer
## Git Branches ## Git Branches
- `master`: 2.X.X development. If you want to add a new feature, your pull request should base on this. - `master`: 2.X.X development. If you want to add a new feature, your pull request should base on this.
@ -144,7 +260,7 @@ Port `3000` and port `3001` will be used.
npm run dev npm run dev
``` ```
But sometimes, you would like to restart the server, but not the frontend, you can run these commands in two terminals: But sometimes you may want to restart the server without restarting the frontend. In that case, you can run these commands in two terminals:
```bash ```bash
npm run start-frontend-dev npm run start-frontend-dev
@ -155,25 +271,25 @@ npm run start-server-dev
It binds to `0.0.0.0:3001` by default. It binds to `0.0.0.0:3001` by default.
It is mainly a socket.io app + express.js. The backend is an `express.js` server with `socket.io` integrated.
It uses `socket.io` to communicate with clients, and most server logic is encapsulated in the `socket.io` handlers.
`express.js` is also used to serve:
express.js is used for: - as an entry point for redirecting to a status page or the dashboard
- the frontend built files (`index.html`, `*.js`, `*.css`, etc.)
- internal APIs of the status page
- entry point such as redirecting to a status page or the dashboard ### Structure in `/server/`
- serving the frontend built files (index.html, .js and .css etc.)
- serving internal APIs of the status page
### Structure in /server/ - `jobs/` (Jobs that are running in another process)
- `model/` (Object model, auto-mapping to the database table name)
- jobs/ (Jobs that are running in another process) - `modules/` (Modified 3rd-party modules)
- model/ (Object model, auto-mapping to the database table name) - `monitor_types/` (Monitor Types)
- modules/ (Modified 3rd-party modules) - `notification-providers/` (individual notification logic)
- monitor_types (Monitor Types) - `routers/` (Express Routers)
- notification-providers/ (individual notification logic) - `socket-handler/` (Socket.io Handlers)
- routers/ (Express Routers) - `server.js` (Server entry point)
- socket-handler (Socket.io Handlers) - `uptime-kuma-server.js` (UptimeKumaServer class, main logic should be here, but some still in `server.js`)
- server.js (Server entry point)
- uptime-kuma-server.js (UptimeKumaServer class, main logic should be here, but some still in `server.js`)
## Frontend Dev Server ## Frontend Dev Server
@ -212,14 +328,15 @@ npm test
## Dependencies ## Dependencies
Both frontend and backend share the same package.json. However, the frontend dependencies are eventually not used in the production environment, because it is usually also baked into dist files. So: Both frontend and backend share the same `package.json`.
However, the frontend dependencies are eventually not used in the production environment, because it is usually also baked into `dist` files. So:
- Frontend dependencies = "devDependencies" - Frontend dependencies = "devDependencies"
- Examples: vue, chart.js - Examples: `vue`, `chart.js`
- Backend dependencies = "dependencies" - Backend dependencies = "dependencies"
- Examples: socket.io, sqlite3 - Examples: `socket.io`, `sqlite3`
- Development dependencies = "devDependencies" - Development dependencies = "devDependencies"
- Examples: eslint, sass - Examples: `eslint`, `sass`
### Update Dependencies ### Update Dependencies
@ -231,9 +348,9 @@ If for security / bug / other reasons, a library must be updated, breaking chang
## Translations ## Translations
Please add **all** the strings which are translatable to `src/lang/en.json` (If translation keys are omitted, they can not be translated). Please add **all** the strings which are translatable to `src/lang/en.json` (if translation keys are omitted, they can not be translated.)
**Don't include any other languages in your initial Pull-Request** (even if this is your mother tongue), to avoid merge-conflicts between weblate and `master`. **Don't include any other languages in your initial pull request** (even if this is your mother tongue), to avoid merge-conflicts between weblate and `master`.
The translations can then (after merging a PR into `master`) be translated by awesome people donating their language skills. The translations can then (after merging a PR into `master`) be translated by awesome people donating their language skills.
If you want to help by translating Uptime Kuma into your language, please visit the [instructions on how to translate using weblate](https://github.com/louislam/uptime-kuma/blob/master/src/lang/README.md). If you want to help by translating Uptime Kuma into your language, please visit the [instructions on how to translate using weblate](https://github.com/louislam/uptime-kuma/blob/master/src/lang/README.md).
@ -245,7 +362,7 @@ My mother language is not English and my grammar is not that great.
## Wiki ## Wiki
Since there is no way to make a pull request to wiki's repo, I have set up another repo to do that. Since there is no way to make a pull request to the wiki, I have set up another repo to do that.
https://github.com/louislam/uptime-kuma-wiki https://github.com/louislam/uptime-kuma-wiki
@ -290,54 +407,106 @@ https://github.com/louislam/uptime-kuma-wiki
Check the latest issues and pull requests: Check the latest issues and pull requests:
https://github.com/louislam/uptime-kuma/issues?q=sort%3Aupdated-desc https://github.com/louislam/uptime-kuma/issues?q=sort%3Aupdated-desc
### Release Procedures ### What is a maintainer and what are their roles?
1. Draft a release note This project has multiple maintainers who specialise in different areas.
2. Make sure the repo is cleared Currently, there are 3 maintainers:
3. If the healthcheck is updated, remember to re-compile it: `npm run build-docker-builder-go`
4. `npm run release-final` with env vars: `VERSION` and `GITHUB_TOKEN`
5. Wait until the `Press any key to continue`
6. `git push`
7. Publish the release note as 1.X.X
8. Press any key to continue
9. Deploy to the demo server: `npm run deploy-demo-server`
Checking: | Person | Role | Main Area |
|-------------------|-------------------|------------------|
| `@louislam` | senior maintainer | major features |
| `@chakflying` | junior maintainer | fixing bugs |
| `@commanderstorm` | junior maintainer | issue-management |
- Check all tags is fine on https://hub.docker.com/r/louislam/uptime-kuma/tags ### Procedures
- Try the Docker image with tag 1.X.X (Clean install / amd64 / arm64 / armv7)
- Try clean installation with Node.js
### Release Beta Procedures We have a few procedures we follow. These are documented here:
- <details><summary>Set up a Docker Builder</summary>
<p>
1. Draft a release note, check "This is a pre-release" - amd64, armv7 using local.
2. Make sure the repo is cleared - arm64 using remote arm64 cpu, as the emulator is too slow and can no longer pass the `npm ci` command.
3. `npm run release-beta` with env vars: `VERSION` and `GITHUB_TOKEN` 1. Add the public key to the remote server.
4. Wait until the `Press any key to continue` 2. Add the remote context. The remote machine must be arm64 and installed Docker CE.
5. Publish the release note as 1.X.X-beta.X ```
6. Press any key to continue docker context create oracle-arm64-jp --docker "host=ssh://root@100.107.174.88"
```
3. Create a new builder.
```
docker buildx create --name kuma-builder --platform linux/amd64,linux/arm/v7
docker buildx use kuma-builder
docker buildx inspect --bootstrap
```
4. Append the remote context to the builder.
```
docker buildx create --append --name kuma-builder --platform linux/arm64 oracle-arm64-jp
```
5. Verify the builder and check if the builder is using `kuma-builder`.
```
docker buildx inspect kuma-builder
docker buildx ls
```
</p>
</details>
- <details><summary>Release</summary>
<p>
### Release Wiki 1. Draft a release note
2. Make sure the repo is cleared
3. If the healthcheck is updated, remember to re-compile it: `npm run build-docker-builder-go`
4. `npm run release-final` with env vars: `VERSION` and `GITHUB_TOKEN`
5. Wait until the `Press any key to continue`
6. `git push`
7. Publish the release note as `1.X.X`
8. Press any key to continue
9. Deploy to the demo server: `npm run deploy-demo-server`
#### Setup Repo These Items need to be checked:
```bash - [ ] Check all tags is fine on https://hub.docker.com/r/louislam/uptime-kuma/tags
git clone https://github.com/louislam/uptime-kuma-wiki.git - [ ] Try the Docker image with tag 1.X.X (Clean install / amd64 / arm64 / armv7)
cd uptime-kuma-wiki - [ ] Try clean installation with Node.js
git remote add production https://github.com/louislam/uptime-kuma.wiki.git
```
#### Push to Production Wiki </p>
</details>
- <details><summary>Release Beta</summary>
<p>
```bash 1. Draft a release note, check `This is a pre-release`
git pull 2. Make sure the repo is cleared
git push production master 3. `npm run release-beta` with env vars: `VERSION` and `GITHUB_TOKEN`
``` 4. Wait until the `Press any key to continue`
5. Publish the release note as `1.X.X-beta.X`
6. Press any key to continue
## Useful Commands </p>
</details>
- <details><summary>Release Wiki</summary>
<p>
Change the base of a pull request such as `master` to `1.23.X` **Setup Repo**
```bash ```bash
git rebase --onto <new parent> <old parent> git clone https://github.com/louislam/uptime-kuma-wiki.git
``` cd uptime-kuma-wiki
git remote add production https://github.com/louislam/uptime-kuma.wiki.git
```
**Push to Production Wiki**
```bash
git pull
git push production master
```
</p>
</details>
- <details><summary>Change the base of a pull request such as <code>master</code> to <code>1.23.X</code></summary>
<p>
```bash
git rebase --onto <new parent> <old parent>
```
</p>
</details>

View file

@ -6,7 +6,7 @@
Uptime Kuma is an easy-to-use self-hosted monitoring tool. Uptime Kuma is an easy-to-use self-hosted monitoring tool.
<a target="_blank" href="https://github.com/louislam/uptime-kuma"><img src="https://img.shields.io/github/stars/louislam/uptime-kuma" /></a> <a target="_blank" href="https://hub.docker.com/r/louislam/uptime-kuma"><img src="https://img.shields.io/docker/pulls/louislam/uptime-kuma" /></a> <a target="_blank" href="https://hub.docker.com/r/louislam/uptime-kuma"><img src="https://img.shields.io/docker/v/louislam/uptime-kuma/latest?label=docker%20image%20ver." /></a> <a target="_blank" href="https://github.com/louislam/uptime-kuma"><img src="https://img.shields.io/github/last-commit/louislam/uptime-kuma" /></a> <a target="_blank" href="https://opencollective.com/uptime-kuma"><img src="https://opencollective.com/uptime-kuma/total/badge.svg?label=Open%20Collective%20Backers&color=brightgreen" /></a> <a target="_blank" href="https://github.com/louislam/uptime-kuma"><img src="https://img.shields.io/github/stars/louislam/uptime-kuma?style=flat" /></a> <a target="_blank" href="https://hub.docker.com/r/louislam/uptime-kuma"><img src="https://img.shields.io/docker/pulls/louislam/uptime-kuma" /></a> <a target="_blank" href="https://hub.docker.com/r/louislam/uptime-kuma"><img src="https://img.shields.io/docker/v/louislam/uptime-kuma/latest?label=docker%20image%20ver." /></a> <a target="_blank" href="https://github.com/louislam/uptime-kuma"><img src="https://img.shields.io/github/last-commit/louislam/uptime-kuma" /></a> <a target="_blank" href="https://opencollective.com/uptime-kuma"><img src="https://opencollective.com/uptime-kuma/total/badge.svg?label=Open%20Collective%20Backers&color=brightgreen" /></a>
[![GitHub Sponsors](https://img.shields.io/github/sponsors/louislam?label=GitHub%20Sponsors)](https://github.com/sponsors/louislam) <a href="https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/"> [![GitHub Sponsors](https://img.shields.io/github/sponsors/louislam?label=GitHub%20Sponsors)](https://github.com/sponsors/louislam) <a href="https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/">
<img src="https://weblate.kuma.pet/widgets/uptime-kuma/-/svg-badge.svg" alt="Translation status" /> <img src="https://weblate.kuma.pet/widgets/uptime-kuma/-/svg-badge.svg" alt="Translation status" />
</a> </a>
@ -17,9 +17,9 @@ Uptime Kuma is an easy-to-use self-hosted monitoring tool.
Try it! Try it!
- Tokyo Demo Server: https://demo.uptime.kuma.pet (Sponsored by [Uptime Kuma Sponsors](https://github.com/louislam/uptime-kuma#%EF%B8%8F-sponsors)) Demo Server (Location: Frankfurt - Germany): https://demo.kuma.pet/start-demo
It is a temporary live demo, all data will be deleted after 10 minutes. Use the one that is closer to you, but 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. Sponsored by [Uptime Kuma Sponsors](https://github.com/louislam/uptime-kuma#%EF%B8%8F-sponsors).
## ⭐ Features ## ⭐ Features
@ -43,10 +43,17 @@ It is a temporary live demo, all data will be deleted after 10 minutes. Use the
docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1 docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1
``` ```
Uptime Kuma is now running on http://localhost:3001 Uptime Kuma is now running on <http://0.0.0.0:3001>.
> [!WARNING] > [!WARNING]
> **NFS** (Network File System) are **NOT** supported. Please map to a local directory or volume. > File Systems like **NFS** (Network File System) are **NOT** supported. Please map to a local directory or volume.
> [!NOTE]
> If you want to limit exposure to localhost (without exposing port for other users or to use a [reverse proxy](https://github.com/louislam/uptime-kuma/wiki/Reverse-Proxy)), you can expose the port like this:
>
> ```bash
> docker run -d --restart=always -p 127.0.0.1:3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1
> ```
### 💪🏻 Non-Docker ### 💪🏻 Non-Docker
@ -56,15 +63,12 @@ Requirements:
- ✅ Major Linux distros such as Debian, Ubuntu, CentOS, Fedora and ArchLinux etc. - ✅ Major Linux distros such as Debian, Ubuntu, CentOS, Fedora and ArchLinux etc.
- ✅ Windows 10 (x64), Windows Server 2012 R2 (x64) or higher - ✅ Windows 10 (x64), Windows Server 2012 R2 (x64) or higher
- ❌ Replit / Heroku - ❌ Replit / Heroku
- [Node.js](https://nodejs.org/en/download/) 14 / 16 / 18 / 20.4 - [Node.js](https://nodejs.org/en/download/) 18 / 20.4
- [npm](https://docs.npmjs.com/cli/) 9 - [npm](https://docs.npmjs.com/cli/) 9
- [Git](https://git-scm.com/downloads) - [Git](https://git-scm.com/downloads)
- [pm2](https://pm2.keymetrics.io/) - For running Uptime Kuma in the background - [pm2](https://pm2.keymetrics.io/) - For running Uptime Kuma in the background
```bash ```bash
# Update your npm
npm install npm@9 -g
git clone https://github.com/louislam/uptime-kuma.git git clone https://github.com/louislam/uptime-kuma.git
cd uptime-kuma cd uptime-kuma
npm run setup npm run setup
@ -136,28 +140,33 @@ Telegram Notification Sample:
## Motivation ## Motivation
- I was looking for a self-hosted monitoring tool like "Uptime Robot", but it is hard to find a suitable one. One of the close ones is statping. Unfortunately, it is not stable and no longer maintained. - I was looking for a self-hosted monitoring tool like "Uptime Robot", but it is hard to find a suitable one. One of the closest ones is statping. Unfortunately, it is not stable and no longer maintained.
- Want to build a fancy UI. - Wanted to build a fancy UI.
- Learn Vue 3 and vite.js. - Learn Vue 3 and vite.js.
- Show the power of Bootstrap 5. - Show the power of Bootstrap 5.
- Try to use WebSocket with SPA instead of REST API. - Try to use WebSocket with SPA instead of a REST API.
- Deploy my first Docker image to Docker Hub. - Deploy my first Docker image to Docker Hub.
If you love this project, please consider giving me a ⭐. If you love this project, please consider giving it a ⭐.
## 🗣️ Discussion / Ask for Help ## 🗣️ Discussion / Ask for Help
⚠️ For any general or technical questions, please don't send me an email, as I am unable to provide support in that manner. I will not respond if you asked such questions. ⚠️ For any general or technical questions, please don't send me an email, as I am unable to provide support in that manner. I will not respond if you ask questions there.
I recommend using Google, GitHub Issues, or Uptime Kuma's Subreddit for finding answers to your question. If you cannot find the information you need, feel free to ask: I recommend using Google, GitHub Issues, or Uptime Kuma's subreddit for finding answers to your question. If you cannot find the information you need, feel free to ask:
- [GitHub Issues](https://github.com/louislam/uptime-kuma/issues) - [GitHub Issues](https://github.com/louislam/uptime-kuma/issues)
- [Subreddit r/Uptime kuma](https://www.reddit.com/r/UptimeKuma/) - [Subreddit (r/UptimeKuma)](https://www.reddit.com/r/UptimeKuma/)
My Reddit account: [u/louislamlam](https://reddit.com/u/louislamlam). My Reddit account: [u/louislamlam](https://reddit.com/u/louislamlam)
You can mention me if you ask a question on Reddit. You can mention me if you ask a question on the subreddit.
## Contribute ## Contributions
### Create Pull Requests
We DO NOT accept all types of pull requests and do not want to waste your time. Please be sure that you have read and follow pull request rules:
[CONTRIBUTING.md#can-i-create-a-pull-request-for-uptime-kuma](https://github.com/louislam/uptime-kuma/blob/master/CONTRIBUTING.md#can-i-create-a-pull-request-for-uptime-kuma)
### Test Pull Requests ### Test Pull Requests
@ -181,8 +190,6 @@ If you want to translate Uptime Kuma into your language, please visit [Weblate R
### Spelling & Grammar ### Spelling & Grammar
Feel free to correct the grammar in the documentation or code. Feel free to correct the grammar in the documentation or code.
My mother language is not english and my grammar is not that great. My mother language is not English and my grammar is not that great.
### Create Pull Requests
If you want to modify Uptime Kuma, please read this guide and follow the rules here: https://github.com/louislam/uptime-kuma/blob/master/CONTRIBUTING.md

View file

@ -3,7 +3,7 @@
## Reporting a Vulnerability ## Reporting a Vulnerability
1. Please report security issues to https://github.com/louislam/uptime-kuma/security/advisories/new. 1. Please report security issues to https://github.com/louislam/uptime-kuma/security/advisories/new.
1. Please also create an empty security issue to alert me, as GitHub Advisories do not send a notification, I probably will miss it without this. https://github.com/louislam/uptime-kuma/issues/new?assignees=&labels=help&template=security.md 2. Please also create an empty security issue to alert me, as GitHub Advisories do not send a notification, I probably will miss it without this. https://github.com/louislam/uptime-kuma/issues/new?assignees=&labels=help&template=security.md
Do not use the public issue tracker or discuss it in public as it will cause more damage. Do not use the public issue tracker or discuss it in public as it will cause more damage.
@ -20,7 +20,7 @@ You should use or upgrade to the latest version of Uptime Kuma. All `1.X.X` vers
### Upgradable Docker Tags ### Upgradable Docker Tags
| Tag | Supported | | Tag | Supported |
| ------- | ------------------ | |-|-|
| 1 | :white_check_mark: | | 1 | :white_check_mark: |
| 1-debian | :white_check_mark: | | 1-debian | :white_check_mark: |
| latest | :white_check_mark: | | latest | :white_check_mark: |

9
compose.yaml Normal file
View file

@ -0,0 +1,9 @@
services:
uptime-kuma:
image: louislam/uptime-kuma:1
volumes:
- ./data:/app/data
ports:
# <Host Port>:<Container Port>
- 3001:3001
restart: unless-stopped

View file

@ -1,28 +0,0 @@
const { defineConfig } = require("cypress");
module.exports = defineConfig({
projectId: "vyjuem",
e2e: {
experimentalStudio: true,
setupNodeEvents(on, config) {
},
fixturesFolder: "test/cypress/fixtures",
screenshotsFolder: "test/cypress/screenshots",
videosFolder: "test/cypress/videos",
downloadsFolder: "test/cypress/downloads",
supportFile: "test/cypress/support/e2e.js",
baseUrl: "http://localhost:3002",
defaultCommandTimeout: 10000,
pageLoadTimeout: 60000,
viewportWidth: 1920,
viewportHeight: 1080,
specPattern: [
"test/cypress/e2e/setup.cy.js",
"test/cypress/e2e/**/*.js"
],
},
env: {
baseUrl: "http://localhost:3002",
},
});

View file

@ -1,10 +0,0 @@
const { defineConfig } = require("cypress");
module.exports = defineConfig({
e2e: {
supportFile: false,
specPattern: [
"test/cypress/unit/**/*.js"
],
}
});

View file

@ -0,0 +1,66 @@
import { defineConfig, devices } from "@playwright/test";
const port = 30001;
export const url = `http://localhost:${port}`;
export default defineConfig({
// Look for test files in the "tests" directory, relative to this configuration file.
testDir: "../test/e2e/specs",
outputDir: "../private/playwright-test-results",
fullyParallel: false,
locale: "en-US",
// Fail the build on CI if you accidentally left test.only in the source code.
forbidOnly: !!process.env.CI,
// Retry on CI only.
retries: process.env.CI ? 2 : 0,
// Opt out of parallel tests on CI.
workers: 1,
// Reporter to use
reporter: [
[
"html", {
outputFolder: "../private/playwright-report",
open: "never",
}
],
],
use: {
// Base URL to use in actions like `await page.goto('/')`.
baseURL: url,
// Collect trace when retrying the failed test.
trace: "on-first-retry",
},
// Configure projects for major browsers.
projects: [
{
name: "run-once setup",
testMatch: /setup-process\.once\.js/,
use: { ...devices["Desktop Chrome"] },
},
{
name: "specs",
use: { ...devices["Desktop Chrome"] },
dependencies: [ "run-once setup" ],
},
/*
{
name: "firefox",
use: { browserName: "firefox" }
},*/
],
// Run your local dev server before starting the tests.
webServer: {
command: `node extra/remove-playwright-test-data.js && cross-env NODE_ENV=development node server/server.js --port=${port} --data-dir=./data/playwright-test`,
url,
reuseExistingServer: false,
cwd: "../",
},
});

View file

@ -2,7 +2,7 @@ import vue from "@vitejs/plugin-vue";
import { defineConfig } from "vite"; import { defineConfig } from "vite";
import visualizer from "rollup-plugin-visualizer"; import visualizer from "rollup-plugin-visualizer";
import viteCompression from "vite-plugin-compression"; import viteCompression from "vite-plugin-compression";
import commonjs from "vite-plugin-commonjs"; import VueDevTools from "vite-plugin-vue-devtools";
const postCssScss = require("postcss-scss"); const postCssScss = require("postcss-scss");
const postcssRTLCSS = require("postcss-rtlcss"); const postcssRTLCSS = require("postcss-rtlcss");
@ -16,12 +16,9 @@ export default defineConfig({
}, },
define: { define: {
"FRONTEND_VERSION": JSON.stringify(process.env.npm_package_version), "FRONTEND_VERSION": JSON.stringify(process.env.npm_package_version),
"DEVCONTAINER": JSON.stringify(process.env.DEVCONTAINER), "process.env": {},
"GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN": JSON.stringify(process.env.GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN),
"CODESPACE_NAME": JSON.stringify(process.env.CODESPACE_NAME),
}, },
plugins: [ plugins: [
commonjs(),
vue(), vue(),
visualizer({ visualizer({
filename: "tmp/dist-stats.html" filename: "tmp/dist-stats.html"
@ -34,6 +31,7 @@ export default defineConfig({
algorithm: "brotliCompress", algorithm: "brotliCompress",
filter: viteCompressionFilter, filter: viteCompressionFilter,
}), }),
VueDevTools(),
], ],
css: { css: {
postcss: { postcss: {

View file

@ -318,7 +318,10 @@ async function createTables() {
// monitor_tls_info // monitor_tls_info
await knex.schema.createTable("monitor_tls_info", (table) => { await knex.schema.createTable("monitor_tls_info", (table) => {
table.increments("id"); table.increments("id");
table.integer("monitor_id").unsigned().notNullable(); //TODO: no fk ? table.integer("monitor_id").unsigned().notNullable()
.references("id").inTable("monitor")
.onDelete("CASCADE")
.onUpdate("CASCADE");
table.text("info_json"); table.text("info_json");
}); });
@ -493,8 +496,11 @@ ALTER TABLE monitor
await knex.schema.table("monitor", function (table) { await knex.schema.table("monitor", function (table) {
table.string("kafka_producer_topic", 255); table.string("kafka_producer_topic", 255);
table.text("kafka_producer_brokers"); table.text("kafka_producer_brokers");
table.integer("kafka_producer_ssl");
table.string("kafka_producer_allow_auto_topic_creation", 255); // patch-fix-kafka-producer-booleans.sql
table.boolean("kafka_producer_ssl").defaultTo(0).notNullable();
table.boolean("kafka_producer_allow_auto_topic_creation").defaultTo(0).notNullable();
table.text("kafka_producer_sasl_options"); table.text("kafka_producer_sasl_options");
table.text("kafka_producer_message"); table.text("kafka_producer_message");
}); });

View file

@ -0,0 +1,15 @@
exports.up = function (knex) {
// Add new column heartbeat.retries
return knex.schema
.alterTable("heartbeat", function (table) {
table.integer("retries").notNullable().defaultTo(0);
});
};
exports.down = function (knex) {
return knex.schema
.alterTable("heartbeat", function (table) {
table.dropColumn("retries");
});
};

View file

@ -0,0 +1,16 @@
exports.up = function (knex) {
// Add new column monitor.mqtt_check_type
return knex.schema
.alterTable("monitor", function (table) {
table.string("mqtt_check_type", 255).notNullable().defaultTo("keyword");
});
};
exports.down = function (knex) {
// Drop column monitor.mqtt_check_type
return knex.schema
.alterTable("monitor", function (table) {
table.dropColumn("mqtt_check_type");
});
};

View file

@ -0,0 +1,21 @@
exports.up = function (knex) {
return knex.schema
.createTable("remote_browser", function (table) {
table.increments("id");
table.string("name", 255).notNullable();
table.string("url", 255).notNullable();
table.integer("user_id").unsigned();
}).alterTable("monitor", function (table) {
// Add new column monitor.remote_browser
table.integer("remote_browser").nullable().defaultTo(null).unsigned()
.index()
.references("id")
.inTable("remote_browser");
});
};
exports.down = function (knex) {
return knex.schema.dropTable("remote_browser").alterTable("monitor", function (table) {
table.dropColumn("remote_browser");
});
};

View file

@ -0,0 +1,12 @@
exports.up = function (knex) {
return knex.schema
.alterTable("status_page", function (table) {
table.integer("auto_refresh_interval").defaultTo(300).unsigned();
});
};
exports.down = function (knex) {
return knex.schema.alterTable("status_page", function (table) {
table.dropColumn("auto_refresh_interval");
});
};

View file

@ -0,0 +1,24 @@
exports.up = function (knex) {
return knex.schema
.alterTable("stat_daily", function (table) {
table.float("ping_min").notNullable().defaultTo(0).comment("Minimum ping during this period in milliseconds");
table.float("ping_max").notNullable().defaultTo(0).comment("Maximum ping during this period in milliseconds");
})
.alterTable("stat_minutely", function (table) {
table.float("ping_min").notNullable().defaultTo(0).comment("Minimum ping during this period in milliseconds");
table.float("ping_max").notNullable().defaultTo(0).comment("Maximum ping during this period in milliseconds");
});
};
exports.down = function (knex) {
return knex.schema
.alterTable("stat_daily", function (table) {
table.dropColumn("ping_min");
table.dropColumn("ping_max");
})
.alterTable("stat_minutely", function (table) {
table.dropColumn("ping_min");
table.dropColumn("ping_max");
});
};

View file

@ -0,0 +1,26 @@
exports.up = function (knex) {
return knex.schema
.createTable("stat_hourly", function (table) {
table.increments("id");
table.comment("This table contains the hourly aggregate statistics for each monitor");
table.integer("monitor_id").unsigned().notNullable()
.references("id").inTable("monitor")
.onDelete("CASCADE")
.onUpdate("CASCADE");
table.integer("timestamp")
.notNullable()
.comment("Unix timestamp rounded down to the nearest hour");
table.float("ping").notNullable().comment("Average ping in milliseconds");
table.float("ping_min").notNullable().defaultTo(0).comment("Minimum ping during this period in milliseconds");
table.float("ping_max").notNullable().defaultTo(0).comment("Maximum ping during this period in milliseconds");
table.smallint("up").notNullable();
table.smallint("down").notNullable();
table.unique([ "monitor_id", "timestamp" ]);
});
};
exports.down = function (knex) {
return knex.schema
.dropTable("stat_hourly");
};

View file

@ -0,0 +1,26 @@
exports.up = function (knex) {
return knex.schema
.alterTable("stat_daily", function (table) {
table.text("extras").defaultTo(null).comment("Extra statistics during this time period");
})
.alterTable("stat_minutely", function (table) {
table.text("extras").defaultTo(null).comment("Extra statistics during this time period");
})
.alterTable("stat_hourly", function (table) {
table.text("extras").defaultTo(null).comment("Extra statistics during this time period");
});
};
exports.down = function (knex) {
return knex.schema
.alterTable("stat_daily", function (table) {
table.dropColumn("extras");
})
.alterTable("stat_minutely", function (table) {
table.dropColumn("extras");
})
.alterTable("stat_hourly", function (table) {
table.dropColumn("extras");
});
};

View file

@ -0,0 +1,16 @@
exports.up = function (knex) {
return knex.schema
.alterTable("monitor", function (table) {
table.string("snmp_oid").defaultTo(null);
table.enum("snmp_version", [ "1", "2c", "3" ]).defaultTo("2c");
table.string("json_path_operator").defaultTo(null);
});
};
exports.down = function (knex) {
return knex.schema.alterTable("monitor", function (table) {
table.dropColumn("snmp_oid");
table.dropColumn("snmp_version");
table.dropColumn("json_path_operator");
});
};

View file

@ -0,0 +1,13 @@
exports.up = function (knex) {
return knex.schema
.alterTable("monitor", function (table) {
table.boolean("cache_bust").notNullable().defaultTo(false);
});
};
exports.down = function (knex) {
return knex.schema
.alterTable("monitor", function (table) {
table.dropColumn("cache_bust");
});
};

View file

@ -0,0 +1,12 @@
exports.up = function (knex) {
return knex.schema
.alterTable("monitor", function (table) {
table.text("conditions").notNullable().defaultTo("[]");
});
};
exports.down = function (knex) {
return knex.schema.alterTable("monitor", function (table) {
table.dropColumn("conditions");
});
};

View file

@ -0,0 +1,17 @@
exports.up = function (knex) {
return knex.schema.alterTable("monitor", function (table) {
table.text("rabbitmq_nodes");
table.string("rabbitmq_username");
table.string("rabbitmq_password");
});
};
exports.down = function (knex) {
return knex.schema.alterTable("monitor", function (table) {
table.dropColumn("rabbitmq_nodes");
table.dropColumn("rabbitmq_username");
table.dropColumn("rabbitmq_password");
});
};

View file

@ -0,0 +1,7 @@
exports.up = function (knex) {
return knex("monitor").whereNull("json_path_operator").update("json_path_operator", "==");
};
exports.down = function (knex) {
// changing the json_path_operator back to null for all "==" is not possible anymore
// we have lost the context which fields have been set explicitely in >= v2.0 and which would need to be reverted
};

View file

@ -0,0 +1,13 @@
// Update info_json column to LONGTEXT mainly for MariaDB
exports.up = function (knex) {
return knex.schema
.alterTable("monitor_tls_info", function (table) {
table.text("info_json", "longtext").alter();
});
};
exports.down = function (knex) {
return knex.schema.alterTable("monitor_tls_info", function (table) {
table.text("info_json", "text").alter();
});
};

View file

@ -0,0 +1,34 @@
-- You should not modify if this have pushed to Github, unless it does serious wrong with the db.
BEGIN TRANSACTION;
-- Rename COLUMNs to another one (suffixed by `_old`)
ALTER TABLE monitor
RENAME COLUMN kafka_producer_ssl TO kafka_producer_ssl_old;
ALTER TABLE monitor
RENAME COLUMN kafka_producer_allow_auto_topic_creation TO kafka_producer_allow_auto_topic_creation_old;
-- Add correct COLUMNs
ALTER TABLE monitor
ADD COLUMN kafka_producer_ssl BOOLEAN default 0 NOT NULL;
ALTER TABLE monitor
ADD COLUMN kafka_producer_allow_auto_topic_creation BOOLEAN default 0 NOT NULL;
-- These SQL is still not fully safe. See https://github.com/louislam/uptime-kuma/issues/4039.
-- Set bring old values from `_old` COLUMNs to correct ones
-- UPDATE monitor SET kafka_producer_allow_auto_topic_creation = monitor.kafka_producer_allow_auto_topic_creation_old
-- WHERE monitor.kafka_producer_allow_auto_topic_creation_old IS NOT NULL;
-- UPDATE monitor SET kafka_producer_ssl = monitor.kafka_producer_ssl_old
-- WHERE monitor.kafka_producer_ssl_old IS NOT NULL;
-- Remove old COLUMNs
ALTER TABLE monitor
DROP COLUMN kafka_producer_allow_auto_topic_creation_old;
ALTER TABLE monitor
DROP COLUMN kafka_producer_ssl_old;
COMMIT;

View file

@ -0,0 +1,18 @@
BEGIN TRANSACTION;
PRAGMA writable_schema = TRUE;
UPDATE
SQLITE_MASTER
SET
sql = replace(sql,
'monitor_id INTEGER NOT NULL',
'monitor_id INTEGER NOT NULL REFERENCES [monitor] ([id]) ON DELETE CASCADE ON UPDATE CASCADE'
)
WHERE
name = 'monitor_tls_info'
AND type = 'table';
PRAGMA writable_schema = RESET;
COMMIT;

View file

@ -0,0 +1,7 @@
-- You should not modify if this have pushed to Github, unless it does serious wrong with the db.
BEGIN TRANSACTION;
UPDATE monitor SET timeout = (interval * 0.8)
WHERE timeout IS NULL OR timeout <= 0;
COMMIT;

View file

@ -0,0 +1,18 @@
BEGIN TRANSACTION;
PRAGMA writable_schema = TRUE;
UPDATE
SQLITE_MASTER
SET
sql = replace(sql,
'monitor_id INTEGER NOT NULL',
'monitor_id INTEGER NOT NULL REFERENCES [monitor] ([id]) ON DELETE CASCADE ON UPDATE CASCADE'
)
WHERE
name = 'monitor_tls_info'
AND type = 'table';
PRAGMA writable_schema = RESET;
COMMIT;

View file

@ -1,9 +1,18 @@
# Download Apprise deb package
FROM node:20-bookworm-slim AS download-apprise
WORKDIR /app
COPY ./extra/download-apprise.mjs ./download-apprise.mjs
RUN apt update && \
apt --yes --no-install-recommends install curl && \
npm install cheerio semver && \
node ./download-apprise.mjs
# Base Image (Slim)
# 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!
# apprise = for notifications (From testing repo)
# 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?)
@ -12,10 +21,10 @@ ARG TARGETPLATFORM
# 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 echo "deb http://deb.debian.org/debian testing main" >> /etc/apt/sources.list && \ RUN apt update && \
apt update && \ apt --yes --no-install-recommends install \
apt --yes --no-install-recommends -t testing install apprise sqlite3 ca-certificates && \ sqlite3 \
apt --yes --no-install-recommends -t stable install \ ca-certificates \
iputils-ping \ iputils-ping \
util-linux \ util-linux \
dumb-init \ dumb-init \
@ -25,6 +34,16 @@ RUN echo "deb http://deb.debian.org/debian testing main" >> /etc/apt/sources.lis
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)
# Switching to testing repo is no longer working, as the testing repo is not bookworm anymore.
# python3-paho-mqtt (#4859)
# TODO: no idea how to delete the deb file after installation as it becomes a layer already
COPY --from=download-apprise /app/apprise.deb ./apprise.deb
RUN apt update && \
apt --yes --no-install-recommends install ./apprise.deb python3-paho-mqtt && \
rm -rf /var/lib/apt/lists/* && \
rm -f apprise.deb && \
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 && \
@ -42,7 +61,9 @@ COPY ./docker/etc/sudoers /etc/sudoers
# Full Base Image # Full Base Image
# MariaDB, Chromium and fonts # MariaDB, Chromium and fonts
FROM base2-slim AS base2 # 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 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 && \

View file

@ -1,15 +0,0 @@
version: '3.8'
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
volumes:
- uptime-kuma:/app/data
ports:
- "3001:3001" # <Host Port>:<Container Port>
restart: always
volumes:
uptime-kuma:

View file

@ -27,7 +27,6 @@ RUN mkdir ./data
# ⭐ Main Image # ⭐ Main Image
############################################ ############################################
FROM $BASE_IMAGE AS release FROM $BASE_IMAGE AS release
USER node
WORKDIR /app WORKDIR /app
LABEL org.opencontainers.image.source="https://github.com/louislam/uptime-kuma" LABEL org.opencontainers.image.source="https://github.com/louislam/uptime-kuma"
@ -42,13 +41,21 @@ HEALTHCHECK --interval=60s --timeout=30s --start-period=180s --retries=5 CMD ext
ENTRYPOINT ["/usr/bin/dumb-init", "--"] ENTRYPOINT ["/usr/bin/dumb-init", "--"]
CMD ["node", "server/server.js"] CMD ["node", "server/server.js"]
############################################
# Rootless Image
############################################
FROM release AS rootless
USER node
############################################ ############################################
# Mark as Nightly # Mark as Nightly
############################################ ############################################
FROM release AS nightly FROM release AS nightly
USER node
RUN npm run mark-as-nightly RUN npm run mark-as-nightly
FROM nightly AS nightly-rootless
USER node
############################################ ############################################
# Build an image for testing pr # Build an image for testing pr
############################################ ############################################

View file

@ -5,7 +5,7 @@ const util = require("../../src/util");
util.polyfill(); util.polyfill();
const version = process.env.VERSION; const version = process.env.RELEASE_BETA_VERSION;
console.log("Beta Version: " + version); console.log("Beta Version: " + version);

View file

@ -0,0 +1,72 @@
import fs from "fs";
const dir = "./db/knex_migrations";
// Get the file list (ending with .js) from the directory
const files = fs.readdirSync(dir).filter((file) => file !== "README.md");
// They are wrong, but they had been merged, so allowed.
const exceptionList = [
"2024-08-24-000-add-cache-bust.js",
"2024-10-1315-rabbitmq-monitor.js",
];
// Correct format: YYYY-MM-DD-HHmm-description.js
for (const file of files) {
if (exceptionList.includes(file)) {
continue;
}
// Check ending with .js
if (!file.endsWith(".js")) {
console.error(`It should end with .js: ${file}`);
process.exit(1);
}
const parts = file.split("-");
// Should be at least 5 parts
if (parts.length < 5) {
console.error(`Invalid format: ${file}`);
process.exit(1);
}
// First part should be a year >= 2024
const year = parseInt(parts[0], 10);
if (isNaN(year) || year < 2023) {
console.error(`Invalid year: ${file}`);
process.exit(1);
}
// Second part should be a month
const month = parseInt(parts[1], 10);
if (isNaN(month) || month < 1 || month > 12) {
console.error(`Invalid month: ${file}`);
process.exit(1);
}
// Third part should be a day
const day = parseInt(parts[2], 10);
if (isNaN(day) || day < 1 || day > 31) {
console.error(`Invalid day: ${file}`);
process.exit(1);
}
// Fourth part should be HHmm
const time = parts[3];
// Check length is 4
if (time.length !== 4) {
console.error(`Invalid time: ${file}`);
process.exit(1);
}
const hour = parseInt(time.substring(0, 2), 10);
const minute = parseInt(time.substring(2), 10);
if (isNaN(hour) || hour < 0 || hour > 23 || isNaN(minute) || minute < 0 || minute > 59) {
console.error(`Invalid time: ${file}`);
process.exit(1);
}
}
console.log("All knex filenames are correct.");

27
extra/check-lang-json.js Normal file
View file

@ -0,0 +1,27 @@
// For #5231
const fs = require("fs");
let path = "./src/lang";
// list directories in the lang directory
let jsonFileList = fs.readdirSync(path);
for (let jsonFile of jsonFileList) {
if (!jsonFile.endsWith(".json")) {
continue;
}
let jsonPath = path + "/" + jsonFile;
let originalContent = fs.readFileSync(jsonPath, "utf8");
let langData = JSON.parse(originalContent);
let formattedContent = JSON.stringify(langData, null, 4) + "\n";
if (originalContent !== formattedContent) {
console.error(`File ${jsonFile} is not formatted correctly.`);
process.exit(1);
}
}
console.log("All lang json files are formatted correctly.");

View file

@ -37,7 +37,7 @@ const github = require("@actions/github");
owner: issue.owner, owner: issue.owner,
repo: issue.repo, repo: issue.repo,
issue_number: issue.number, issue_number: issue.number,
body: `@${username}: Hello! :wave:\n\nThis issue is being automatically closed because it does not follow the issue template. Please DO NOT open a blank issue.` body: `@${username}: Hello! :wave:\n\nThis issue is being automatically closed because it does not follow the issue template. Please **DO NOT open blank issues and use our [issue-templates](https://github.com/louislam/uptime-kuma/issues/new/choose) instead**.\nBlank Issues do not contain the context nessesary for a good discussions.`
}); });
// Close the issue // Close the issue

View file

@ -0,0 +1,57 @@
// Go to http://ftp.debian.org/debian/pool/main/a/apprise/ using fetch api, where it is a apache directory listing page
// Use cheerio to parse the html and get the latest version of Apprise
// call curl to download the latest version of Apprise
// Target file: the latest version of Apprise, which the format is apprise_{VERSION}_all.deb
import * as cheerio from "cheerio";
import semver from "semver";
import * as childProcess from "child_process";
const baseURL = "http://ftp.debian.org/debian/pool/main/a/apprise/";
const response = await fetch(baseURL);
if (!response.ok) {
throw new Error("Failed to fetch page of Apprise Debian repository.");
}
const html = await response.text();
const $ = cheerio.load(html);
// Get all the links in the page
const linkElements = $("a");
// Filter the links which match apprise_{VERSION}_all.deb
const links = [];
const pattern = /apprise_(.*?)_all.deb/;
for (let i = 0; i < linkElements.length; i++) {
const link = linkElements[i];
if (link.attribs.href.match(pattern) && !link.attribs.href.includes("~")) {
links.push({
filename: link.attribs.href,
version: link.attribs.href.match(pattern)[1],
});
}
}
console.log(links);
// semver compare and download
let latestLink = {
filename: "",
version: "0.0.0",
};
for (const link of links) {
if (semver.gt(link.version, latestLink.version)) {
latestLink = link;
}
}
const downloadURL = baseURL + latestLink.filename;
console.log(`Downloading ${downloadURL}...`);
let result = childProcess.spawnSync("curl", [ downloadURL, "--output", "apprise.deb" ]);
console.log(result.stdout?.toString());
console.error(result.stderr?.toString());
process.exit(result.status !== null ? result.status : 1);

View file

@ -4,7 +4,6 @@ const tar = require("tar");
const packageJSON = require("../package.json"); const packageJSON = require("../package.json");
const fs = require("fs"); const fs = require("fs");
const rmSync = require("./fs-rmSync.js");
const version = packageJSON.version; const version = packageJSON.version;
const filename = "dist.tar.gz"; const filename = "dist.tar.gz";
@ -29,8 +28,9 @@ function download(url) {
if (fs.existsSync("./dist")) { if (fs.existsSync("./dist")) {
if (fs.existsSync("./dist-backup")) { if (fs.existsSync("./dist-backup")) {
rmSync("./dist-backup", { fs.rmSync("./dist-backup", {
recursive: true recursive: true,
force: true,
}); });
} }
@ -43,8 +43,9 @@ function download(url) {
tarStream.on("close", () => { tarStream.on("close", () => {
if (fs.existsSync("./dist-backup")) { if (fs.existsSync("./dist-backup")) {
rmSync("./dist-backup", { fs.rmSync("./dist-backup", {
recursive: true recursive: true,
force: true,
}); });
} }
console.log("Done"); console.log("Done");

View file

@ -1,19 +0,0 @@
#!/usr/bin/env node
const childProcess = require("child_process");
let env = process.env;
let cmd = process.argv[2];
let args = process.argv.slice(3);
let replacedArgs = [];
for (let arg of args) {
for (let key in env) {
arg = arg.replaceAll(`$${key}`, env[key]);
}
replacedArgs.push(arg);
}
let child = childProcess.spawn(cmd, replacedArgs);
child.stdout.pipe(process.stdout);
child.stderr.pipe(process.stderr);

View file

@ -1 +0,0 @@
packages/

View file

@ -1,35 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.Tracing" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.1" newVersion="4.1.1.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.InteropServices" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

View file

@ -1,84 +0,0 @@
using System.ComponentModel;
namespace UptimeKuma {
partial class DownloadForm {
/// <summary>
/// Required designer variable.
/// </summary>
private IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing) {
if (disposing && (components != null)) {
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent() {
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DownloadForm));
this.progressBar = new System.Windows.Forms.ProgressBar();
this.label = new System.Windows.Forms.Label();
this.labelData = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// progressBar
//
this.progressBar.Location = new System.Drawing.Point(12, 12);
this.progressBar.Name = "progressBar";
this.progressBar.Size = new System.Drawing.Size(472, 41);
this.progressBar.TabIndex = 0;
//
// label
//
this.label.Location = new System.Drawing.Point(12, 59);
this.label.Name = "label";
this.label.Size = new System.Drawing.Size(472, 23);
this.label.TabIndex = 1;
this.label.Text = "Preparing...";
//
// labelData
//
this.labelData.Location = new System.Drawing.Point(12, 82);
this.labelData.Name = "labelData";
this.labelData.Size = new System.Drawing.Size(472, 23);
this.labelData.TabIndex = 2;
//
// DownloadForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(496, 117);
this.Controls.Add(this.labelData);
this.Controls.Add(this.label);
this.Controls.Add(this.progressBar);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.Name = "DownloadForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Uptime Kuma";
this.Load += new System.EventHandler(this.DownloadForm_Load);
this.ResumeLayout(false);
}
private System.Windows.Forms.Label labelData;
private System.Windows.Forms.Label label;
private System.Windows.Forms.ProgressBar progressBar;
#endregion
}
}

View file

@ -1,204 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.IO.Compression;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Newtonsoft.Json;
namespace UptimeKuma {
public partial class DownloadForm : Form {
private readonly Queue<DownloadItem> downloadQueue = new();
private readonly WebClient webClient = new();
private DownloadItem currentDownloadItem;
public DownloadForm() {
InitializeComponent();
}
private void DownloadForm_Load(object sender, EventArgs e) {
webClient.DownloadProgressChanged += DownloadProgressChanged;
webClient.DownloadFileCompleted += DownloadFileCompleted;
label.Text = "Reading latest version...";
// Read json from https://uptime.kuma.pet/version
var versionJson = new WebClient().DownloadString("https://uptime.kuma.pet/version");
var versionObj = JsonConvert.DeserializeObject<Version>(versionJson);
var nodeVersion = versionObj.nodejs;
var uptimeKumaVersion = versionObj.latest;
var hasUpdateFile = File.Exists("update");
if (!Directory.Exists("node")) {
downloadQueue.Enqueue(new DownloadItem {
URL = $"https://nodejs.org/dist/v{nodeVersion}/node-v{nodeVersion}-win-x64.zip",
Filename = "node.zip",
TargetFolder = "node"
});
}
if (!Directory.Exists("core") || hasUpdateFile) {
// It is update, rename the core folder to core.old
if (Directory.Exists("core")) {
// Remove the old core.old folder
if (Directory.Exists("core.old")) {
Directory.Delete("core.old", true);
}
Directory.Move("core", "core.old");
}
downloadQueue.Enqueue(new DownloadItem {
URL = $"https://github.com/louislam/uptime-kuma/archive/refs/tags/{uptimeKumaVersion}.zip",
Filename = "core.zip",
TargetFolder = "core"
});
File.WriteAllText("version.json", versionJson);
// Delete the update file
if (hasUpdateFile) {
File.Delete("update");
}
}
DownloadNextFile();
}
void DownloadNextFile() {
if (downloadQueue.Count > 0) {
var item = downloadQueue.Dequeue();
currentDownloadItem = item;
// Download if the zip file is not existing
if (!File.Exists(item.Filename)) {
label.Text = item.URL;
webClient.DownloadFileAsync(new Uri(item.URL), item.Filename);
} else {
progressBar.Value = 100;
label.Text = "Use local " + item.Filename;
DownloadFileCompleted(null, null);
}
} else {
npmSetup();
}
}
void npmSetup() {
labelData.Text = "";
var npm = "..\\node\\npm.cmd";
var cmd = $"{npm} ci --production & {npm} run download-dist & exit";
var startInfo = new ProcessStartInfo {
FileName = "cmd.exe",
Arguments = $"/k \"{cmd}\"",
RedirectStandardOutput = false,
RedirectStandardError = false,
RedirectStandardInput = true,
UseShellExecute = false,
CreateNoWindow = false,
WorkingDirectory = "core"
};
var process = new Process();
process.StartInfo = startInfo;
process.EnableRaisingEvents = true;
process.Exited += (_, e) => {
progressBar.Value = 100;
if (process.ExitCode == 0) {
Task.Delay(2000).ContinueWith(_ => {
Application.Restart();
});
label.Text = "Done";
} else {
label.Text = "Failed, exit code: " + process.ExitCode;
}
};
process.Start();
label.Text = "Installing dependencies and download dist files";
progressBar.Value = 50;
process.WaitForExit();
}
void DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) {
progressBar.Value = e.ProgressPercentage;
var total = e.TotalBytesToReceive / 1024;
var current = e.BytesReceived / 1024;
if (total > 0) {
labelData.Text = $"{current}KB/{total}KB";
}
}
void DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) {
Extract(currentDownloadItem);
DownloadNextFile();
}
void Extract(DownloadItem item) {
if (Directory.Exists(item.TargetFolder)) {
var dir = new DirectoryInfo(item.TargetFolder);
dir.Delete(true);
}
if (Directory.Exists("temp")) {
var dir = new DirectoryInfo("temp");
dir.Delete(true);
}
labelData.Text = $"Extracting {item.Filename}...";
ZipFile.ExtractToDirectory(item.Filename, "temp");
string[] dirList;
// Move to the correct level
dirList = Directory.GetDirectories("temp");
if (dirList.Length > 0) {
var dir = dirList[0];
// As sometime ExtractToDirectory is still locking the directory, loop until ok
while (true) {
try {
Directory.Move(dir, item.TargetFolder);
break;
} catch (Exception exception) {
Thread.Sleep(1000);
}
}
} else {
MessageBox.Show("Unexcepted Error: Cannot move extracted files, folder not found.");
}
labelData.Text = $"Extracted";
if (Directory.Exists("temp")) {
var dir = new DirectoryInfo("temp");
dir.Delete(true);
}
File.Delete(item.Filename);
}
}
public class DownloadItem {
public string URL { get; set; }
public string Filename { get; set; }
public string TargetFolder { get; set; }
}
}

View file

@ -1,377 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAMAMDAAAAEAIACoJQAANgAAACAgAAABACAAqBAAAN4lAAAQEAAAAQAgAGgEAACGNgAAKAAAADAA
AABgAAAAAQAgAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA////BPT09Bfu7u4e8fHxJPPz8yv19fUy9fX1M/Pz8yvx8fEk9vb2HPPz8xXMzMwFAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
/wHv7+8f7u7uPPPz81Tx8fFs8fHxgPHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGB8fHxcfHx8V3x8fFI9PT0MOvr6w0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AADy8vIU8fHxS/Dw8Hbx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fFr9PT0R/Dw8CIAAAABAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA8vLyFPHx8Vnx8fGB8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fFs9fX1Mb+/vwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAICAgALy8vI88fHxfvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvLy8nby8vI8gICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAzMzMBfHx8Vrx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8vLyYf///wwAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMwF8vLyYPHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8W/z8/MWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADv7+9R8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLw8PB26urqDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPLy8ijx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgu7w7Ifj79ud2u7PtNLrw83P677dzeu85c3r
u+rM67rwzOu68c7rverQ68Dj0uvD3NbuyM3b7c+64u7apujv5ZPx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxXgAAAAEAAAAAAAAAAAAAAAAAAAAA4+PjCfDw
8Hfx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLd7tSmzeu92MbqsvvG6bH/xumy/8fq
s//H6rP/yOq0/8jqtf/J6rb/yeq2/8rrt//K67j/y+u4/8vruf/M67r/zOu7/83ru//Q7MDx1u7Kz9/t
163s8OuJ8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgu/v7y8AAAAAAAAAAAAA
AAAAAAAA7u7uPfHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC5PDdl8jqtuTE6a7/xOmv/8Xp
sP/G6bH/xumx/8bpsv/H6rP/x+qz/8jqtP/I6rX/yeq2/8nqtv/K67f/yuu4/8vruP/L67n/zOu6/8zr
u//N67v/zey8/87svf/P67742e3Mx+jv5ZLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvDw
8HWAgIACAAAAAAAAAACqqqoD8vLyc/Hx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLf7degxOiu+cPo
rf/D6a7/xOmu/8Xpr//F6bD/xumx/8bpsf/G6bL/x+qz/8fqs//I6rT/yOq1/8nqtv/J6rb/yuu3/8rr
uP/L67j/y+u5/8zruv/M67v/zeu7/83svP/O7L3/zuy9/87svfzc7tK28fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fEkAAAAAAAAAADz8/Mq8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgunv
5o3D6a/0wuis/8Lorf/D6K3/xOmu/8Tprv/F6a//xemw/8bpsf/G6bH/xumy/8fqs//H6rP/yOq0/8jq
tf/J6rb/yeq2/8rrt//K67j/y+u4/8vruf/M67r/zOu7/83ru//N7Lz/zuy9/87svf/O7L3/3e/TtPHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLy8vJNAAAAAAAAAADy8vJM8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgszqutDB6Kv/weir/8LorP/D6K3/w+it/8Tprv/E6a7/xemv/8XpsP/G6bH/xumx/8bp
sv/H6rP/x+qz/8jqtP/I6rX/yeq2/8nqtv/K67f/yuu4/8vruP/L67n/zOu6/8zru//N67v/zey8/87s
vf/O7L3/zuy++u3w6Yzx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLy8vJ1AAAAAAAAAADx8fFr8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC6O/kjsDoqvzA6Kr/weir/8Loq//C6Kz/w+it/8Porf/E6a7/xOmu/8Xp
r//F6bD/xumx/8bpsf/G6bL/x+qz/8fqtP/I6rT/yOq1/8nqtv/J6rb/yuu3/8rruP/L67n/y+u5/8zr
uv/M67v/zeu7/83svP/O7L3/zuy9/93u07Xx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC////Bv//
/wfx8fGB8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC1ezJsr/nqf/A56n/weiq/8Hoq//C6Kv/wuis/8Po
rf/D6K3/xOmu/8Pprv+856T/uOed/7bmmv+05Zf/teWZ/7jnnf+86KP/wOio/8fqs//J6rb/yeq2/8rr
t//K67j/y+u5/8vruf/M67r/zOu7/83ru//N7Lz/zuy9/9buyNLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8vLyE/Ly8hPx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGCy+q6zr/nqP/A56n/wOep/8Ho
qv/B6Kv/wuir/8LorP+u5Y//neF2/5bgav+V4Gr/luBr/5fhbP+Y4W7/meFv/5rhcf+b4nL/nOJ0/53i
dv+j5H//reaM/7nnnf/E6q//y+y4/8vruf/L67n/zOu6/8zru//N67v/zey8/9Lsxd/x8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC7+/vIPb29hzx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGCx+m03L/n
qP+/56j/wOep/8Dnqf/B6Kr/weir/7nmn/+R32T/kt9l/5PfZ/+U4Gj/leBq/5bga/+X4W3/mOFu/5nh
b/+a4XH/m+Jy/5zidP+d4nX/nuN3/5/jeP+f4nn/weqq/8rruP/L67n/y+u5/8zruv/M67v/zeu7/9Ls
w+Lx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8PDwI/Hx8SXx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGCxeix5L/nqP+/56j/v+eo/8Dnqf/A56n/weiq/7Pllv+Q3mP/kd9k/5LfZf+T32f/lOBo/5Xg
av+W4Gv/l+Ft/5jhbv+Z4W//muFx/5vicv+c4nT/neJ1/57jd/+f43j/xOmu/8rrt//K67j/y+u5/8vr
uf/M67r/zOu7/9Tsxtfx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC9PT0GO/v7yDx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGCx+m037/nqP+/56j/v+eo/7/nqP/A56n/wOip/7TmmP+P3mH/kN5j/5Hf
ZP+S32b/k99n/5TgaP+V4Gr/luBr/5fhbf+Y4W7/meFw/5rhcf+b4nL/nOJ0/53idf+h5Hz/yuu2/8nq
t//K67f/yuu4/8vruf/L67n/zOu6/9ftysrx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC7e3tDvT0
9Bfx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGCyOq117/nqP+/56j/v+eo/7/nqP+/56j/wOep/7vn
of+O3mD/j95h/5DeY/+R32T/kt9m/5PfZ/+U4Gj/leBq/5bga/+X4W3/mOFu/5nhcP+a4nH/m+Jy/5zi
dP+r5Yr/yOq1/8nqtv/J6rf/yuu3/8rruP/L67n/y+u5/9zu1LHx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLz8/OA////A+7u7g/x8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGCz+q+xb/nqP+/56j/v+eo/7/n
qP+/56j/v+eo/8Dnqf+S4Gb/jt5g/4/eYf+Q3mP/kd9k/5LfZv+T32f/lOBo/5Xgav+W4Gv/l+Ft/5jh
bv+Z4XD/muJx/5vic/+4553/yOq0/8jqtf/J6rb/yeq3/8rrt//K67j/y+u5/+bw4Zfx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fFrAAAAAP///wHz8/N88fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC1+zMrr/n
qP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+f4Xn/jd5f/47eYP+P3mH/kN5j/5HfZP+S32b/k99n/5Tg
af+V4Gr/luBr/5fhbf+Y4W7/meFw/5vic//F6rD/x+q0/8jqtP/I6rX/yeq2/8nqt//K67f/zOu88u/x
74Px8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLv7+9QAAAAAAAAAADw8PBm8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC5e7gk7/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+u5I//jN1d/43eX/+O3mD/j95h/5De
Y/+R32T/kt9m/5PfZ/+U4Gn/leBq/5bga/+X4W3/mOFu/6rliP/G6rL/x+qz/8fqtP/I6rT/yOq1/8nq
tv/J6rf/1OzGy/Hx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YL19fUzAAAAAAAAAADy8vJO8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgsPoru2/56j/v+eo/7/nqP+/56j/v+eo/7/nqP++6Kf/j95i/4zd
Xf+N3l//jt5g/4/eYv+Q3mP/kd9k/5LfZv+T32f/lOBp/5Xgav+W4Gz/l+Ft/7voov/G6bL/xuqy/8fq
s//H6rT/yOq1/8jqtf/J6rb/4e/Zo/Hx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLw8PARAAAAAAAA
AADu7u4u8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgszpvMm/56j/v+eo/7/nqP+/56j/v+eo/7/n
qP+/56j/q+SL/4vdXP+M3V3/jd5f/47eYP+P3mL/kN9j/5HfZP+S32b/k99n/5Tgaf+V4Gr/qOOH/8Xp
sP/G6bH/xumy/8bqsv/H6rP/x+q0/8jqtf/K67jy8PHwhPHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8WoAAAAAAAAAAAAAAADo6OgL8fHxgfHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxguDv2J2/56j/v+eo/7/n
qP+/56j/v+eo/7/nqP+/56j/v+eo/6Xjgv+L3Vz/jN1d/43eX/+O3mD/j95i/5DfY/+R32T/kt9m/5Pf
Z/+k44D/xOmu/8XpsP/F6bD/xumx/8bpsv/G6rL/x+qz/8fqtP/W7cnB8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvPz80AAAAAAAAAAAAAAAAAAAAAA8PDwZ/Hx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLD6K/rv+eo/7/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+u5I//kt5n/4zdXf+N3l//jt5g/4/e
Yv+Q32P/luFs/67kj//D6K3/xOmu/8Tpr//F6bD/xemw/8bpsf/G6bL/xuqy/8fqtP7o7+WR8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvPz8xYAAAAAAAAAAAAAAAAAAAAA8vLyPPHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLV7ci0v+eo/7/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+/56j/wOio/7Xl
mv+u5I7/rOSM/67kj/+35pz/wumr/8Lorf/D6K3/w+it/8Tprv/E6a//xemw/8XpsP/G6bH/xumy/9Ds
wNPx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8vLyZQAAAAAAAAAAAAAAAAAAAAAAAAAA////DPHx
8YDx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGCx+m03L/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/n
qP+/56j/v+eo/7/nqP+/56j/wOep/8Doqv/B6Kr/weir/8LorP/C6K3/w+it/8Porv/E6a7/xOmv/8Xp
sP/F6bD/yOq18uvw6Yvx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC7+/vMQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAPHx8Vzx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC6O/ij8LorPG/56j/v+eo/7/n
qP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+/56j/v+eo/8Dnqf/A6Kr/weiq/8Hoq//C6Kz/wuit/8Po
rf/D6K7/xOmu/8Tpr//F6bH74u/anvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLw8PB6////BQAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPPz8yrx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxguHu
2pnB56v2v+eo/7/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP/A56n/wOiq/8Ho
q//B6Kv/wuis/8Lorf/D6K3/w+mu/8Tprv3b7dKq8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fFJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHy8vJf8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLi7tyXwumt8L/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/n
qP+/56j/wOep/8Doqv/B6Kv/weir/8LorP/C6K3/xOiv+d7u1aTx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvLy8nb///8KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADv7+8Q8/Pze/Hx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC6/Dpiszqu82/56j/v+eo/7/nqP+/56j/v+eo/7/n
qP+/56j/v+eo/7/nqP+/56j/v+eo/8Dnqf/A6Kr/weir/8Hoq//H6bTj5e7elfHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvPz8yoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA9fX1MvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLe7tShx+mz3r/n
qP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP/A56n/xumy5drtz6rv8e+D8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8vLyTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPHx8Unx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgubv45DU68e2y+q6z8XoseTD6a7uweir9MPpru7F6bHly+q50tLsxLrl796U8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLy8vJh////AwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wHx8fFZ8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8Wzf398IAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8D8/PzVfHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8PDwZujo
6AsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA////AfHx8Ujx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fFa////BQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADz8/Mp8vLydvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8/PzfPHx8TcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////CvLy8lDz8/N/8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvPz84Hx8fFa8PDwEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AADw8PAR8vLyTvHx8X3x8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fF/8/PzVvT09BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wXz8/Mq8/PzU/Hx8XDx8fGB8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLy8vJz8fHxWO/v7y////8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8G7e3tHfLy
8ifu7u4u8PDwNPT09C/y8vIo7+/vH+Pj4wkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAP///////wAA////////AAD///////8AAP//gAf//wAA//gAAD//AAD/wAAAB/8AAP+A
AAAB/wAA/gAAAAB/AAD8AAAAAD8AAPgAAAAAHwAA8AAAAAAPAADwAAAAAAcAAOAAAAAABwAA4AAAAAAD
AADAAAAAAAMAAMAAAAAAAwAAwAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAA
AAAAAQAAgAAAAAABAACAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAABwAAwAAAAAAH
AADgAAAAAAcAAOAAAAAADwAA4AAAAAAPAADwAAAAAB8AAPAAAAAAHwAA+AAAAAA/AAD8AAAAAD8AAPwA
AAAAfwAA/gAAAAD/AAD/AAAAAf8AAP+AAAAD/wAA/8AAAAf/AAD/8AAAH/8AAP/8AAA//wAA//8AAf//
AAD//+AP//8AAP///////wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAgICAAu/v7xD09PQX7u7uHvDw8CP29vYb8vLyFOrq6gwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICA
gALy8vIm7+/vT/Pz82fz8/N98fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvDw8Hrw8PBm7+/vUPT0
9C3o6OgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPj
4wnz8/NC8vLydPHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YHy8vJj8/PzKoCAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AADx8fEl8vLydfHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxcfHx8SUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA9PT0LfHx8YDx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8/PzgPLy8j0AAAABAAAAAAAA
AAAAAAAAAAAAAO3t7Rzx8fGA8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLr8OmM5O7emeTv
3Z7h79mj5fDem+nv45Tu8u6H8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvLy
8joAAAAAAAAAAAAAAAD///8E8fHxbvHx8YLx8fGC8fHxgvHx8YLx8fGC7vDshtns0K7N67zayeq288fq
s//I6rT/yOq1/8nqtv/K67f/y+u4/8vruf/P7L7w0+zF29vv0Lrn8OKX8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8/PzfvPz8xUAAAAAAAAAAPX19TLx8fGC8fHxgvHx8YLx8fGC8fHxgt3u1KXF6rHzxOmv/8Xp
sP/G6bH/xumy/8fqs//I6rT/yOq1/8nqtv/K67f/y+u4/8vruf/M67v/zey8/87svf/S7MPj4u7Zp/Hx
8YLx8fGC8fHxgvHx8YLx8fGC8/PzVQAAAAAAAAAA8fHxavHx8YLx8fGC8fHxgvHx8YLf7defwuis/cPo
rf/E6a7/xOmv/8XpsP/G6bH/xumy/8fqs//I6rT/yOq1/8nqtv/K67f/y+u4/8vruv/M67v/zey8/87s
vf/N67z/3e7SufHx8YLx8fGC8fHxgvHx8YLz8/N8////Bf///w3x8fGC8fHxgvHx8YLx8fGC8fHxgsXp
sOnB6Kv/wuis/8Porf/E6a7/xOmv/8XpsP/G6bH/xumy/8fqs//I6rT/yOq1/8nqtv/K67f/y+u4/8vr
uv/M67v/zey8/87svf/O67z96/Hoj/Hx8YLx8fGC8fHxgvHx8YLy8vIm8/PzK/Hx8YLx8fGC8fHxgvHx
8YLg79icwOep/8Hoqv/B6Kv/wuis/8Porf/E6a7/wuit/73opP+76KL/u+eh/77opv/D6a3/yeu1/8nq
tv/K67f/y+u5/8zruv/M67v/zey8/87svf/d7tSz8fHxgvHx8YLx8fGC8fHxgvHx8Tby8vI68fHxgvHx
8YLx8fGC8fHxgtTrxre/56j/wOep/8Hoqv/B6Kv/uOad/53idv+V4Gn/leBq/5fhbP+Y4W//muFx/5vi
c/+e4Xb/puWD/7PmlP/D6a3/y+u5/8zruv/M67v/zey8/9rtzsHx8fGC8fHxgvHx8YLx8fGC8/PzQfPz
80Lx8fGC8fHxgvHx8YLx8fGC0OvAwr/nqP+/56j/wOep/8Hoqv+o44b/kd9k/5LfZv+U4Gj/leBq/5fh
bf+Y4W//muFx/5vic/+d4nX/n+N3/7fnm//K67j/y+u5/8zruv/M67v/2u3QvPHx8YLx8fGC8fHxgvHx
8YLy8vI98/PzP/Hx8YLx8fGC8fHxgvHx8YLQ6sK/v+eo/7/nqP+/56j/wOep/6jjhv+P3mL/kd9k/5Lf
Zv+U4Gj/leBr/5fhbf+Y4W//muFx/5zic/+d4nX/v+mm/8nqt//K67j/y+u5/8zruv/f79au8fHxgvHx
8YLx8fGC8fHxgvX19TLx8fE38fHxgvHx8YLx8fGC8fHxgtTrybO/56j/v+eo/7/nqP+/56j/sOSS/47e
YP+P3mL/kd9k/5LfZv+U4Gj/leBr/5fhbf+Z4W//muJx/5/jd//H6bP/yeq2/8nqt//K67j/y+u5/+nv
45Tx8fGC8fHxgvHx8YLx8fGC7+/vIPHx8SXx8fGC8fHxgvHx8YLx8fGC4e/Zm7/nqP+/56j/v+eo/7/n
qP+956X/jt5h/47eYP+P3mL/kd9k/5LfZv+U4Gn/luBr/5fhbf+Z4W//q+aK/8fqs//I6rT/yeq2/8nq
t//N7Lvw8fHxgvHx8YLx8fGC8fHxgvPz84D///8G6+vrDfHx8YLx8fGC8fHxgvHx8YLv8e+Dweis87/n
qP+/56j/v+eo/7/nqP+d4XX/jN1e/47eYP+P3mL/kd9k/5PfZ/+U4Gn/luBr/5fhbf+86KP/xuqy/8fq
s//I6rX/yeq2/9Tsx8nx8fGC8fHxgvHx8YLx8fGC8PDwaAAAAAAAAAAA8fHxbPHx8YLx8fGC8fHxgvHx
8YLM6rrMv+eo/7/nqP+/56j/v+eo/7blmv+N3V//jN1e/47eYP+Q3mL/kd9k/5PfZ/+U4Gn/qeSH/8Xp
sP/G6bH/xuqy/8fqs//I6rX/5fDem/Hx8YLx8fGC8fHxgvHx8YLz8/M/AAAAAAAAAADz8/NB8fHxgvHx
8YLx8fGC8fHxgt3s06O/56j/v+eo/7/nqP+/56j/v+eo/7Xmmf+U32n/jN1e/47eYP+Q3mL/k99o/6zk
i//D6a7/xemv/8XpsP/G6bH/xuqy/8vqu+jx8fGC8fHxgvHx8YLx8fGC8fHxgvPz8xUAAAAAAAAAAPT0
9Bfx8fGC8fHxgvHx8YLx8fGC8fHvg8Tpsee/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+35pz/suWV/7Xm
mf/A6Kj/wuit/8Porf/E6a7/xemv/8XpsP/G6bH/3e3UqvHx8YLx8fGC8fHxgvHx8YLw8PBmAAAAAAAA
AAAAAAAAAAAAAPHx8W7x8fGC8fHxgvHx8YLx8fGC4u7cmMHnqvm/56j/v+eo/7/nqP+/56j/v+eo/7/n
qP+/56j/wOep/8Hoqv/C6Kz/wuit/8Porf/E6a7/xemv/9Hrwszx8fGC8fHxgvHx8YLx8fGC8fHxgvX1
9TEAAAAAAAAAAAAAAAAAAAAA7u7uO/Hx8YLx8fGC8fHxgvHx8YLx8fGC3e7SpMHoqfq/56j/v+eo/7/n
qP+/56j/v+eo/7/nqP+/56j/wOip/8Hoq//C6Kz/wuit/8Porf/O67zV8PHwhPHx8YLx8fGC8fHxgvHx
8YLy8vJ2////BQAAAAAAAAAAAAAAAAAAAACqqqoD8PDwafHx8YLx8fGC8fHxgvHx8YLx8fGC4O/YnMTo
ruy/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+/56j/wOip/8Hoq//C6Kz90uvEwe/x74Px8fGC8fHxgvHx
8YLx8fGC8fHxgvPz8ykAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADz8/MW8fHxfPHx8YLx8fGC8fHxgvHx
8YLx8fGC8PLuhdXtyLXF6bHlv+eo/7/nqP+/56j/v+eo/7/nqP/B6Kv0zeq8zOXv4JTx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLy8vJNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADy8vIm8fHxgPHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLs8OmJ4e/Zm93u06Pf7def5+/hkvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxXf///wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AADy8vIo8/PzffHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8VnMzMwFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAD29vYb8fHxbvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvPz83/v7+9BgICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMwF8/PzQPLy8nnx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvPz84Hx8fFc9PT0GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////B/X19TLx8fFc8PDwevHx
8YLx8fGC8fHxgvHx8YLx8fGC8fHxgPHx8Wv09PRE9PT0FwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA7+/vEPb29hvw8PAj7+/vH/T09Be/v78EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////8B///wAA//wAAD/wAAAP4AAAB+AA
AAfAAAADwAAAA4AAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAADwAAAA8AAAAPAAAAH4AAAB+AA
AA/wAAAP+AAAH/gAAD/+AAB//wAB///AA///+B////////////8oAAAAEAAAACAAAAABACAAAAAAAAAE
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////CfDw8BH///8GAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAAu7u7i7x8fFe8PDwevHx8YLx8fGC8fHxgvDw
8Hvx8fFs7+/vT/Dw8CMAAAABAAAAAAAAAAAAAAAA5ubmCvLy8l/x8fGC8fHxgvHx8YLx8fGC8fHxgvHx
8YLx8fGC8fHxgvHx8YLx8fGC8/PzZu7u7g8AAAAAAAAAAPHx8V3x8fGC8fHxgunv5o7Z7c200+vFytTs
xc7W7cnH2+7QueLu2qbu8OyH8fHxgvHx8YLx8fFu////BfHx8STx8fGC8fHxgtrtzq3D6a/8xemw/8bp
sv/I6rT/yeq2/8vruP/M67v/z+u++Nzu0bjx8fGC8fHxgu/v7zDx8fFI8fHxguzw6ojC56z3wuis/8Tp
rv/E6q3/weiq/8fqsv/J6rb/y+u5/8zru//N67z/6/HpjfHx8YLy8vJN8fHxXPHx8YLg79icv+eo/8Ho
qv+k4n//lOBo/5fhbf+a4XH/n+J5/7Pmlv/L67n/zOu7/+Xw353x8fGC8fHxXvHx8Vrx8fGC4O3Zm7/n
qP+/56j/nuF3/5HfZP+U4Gj/l+Ft/5ricf+x5pL/yeq3/8vruf/r8emN8fHxgu/v70/x8fFK8fHxguzw
6ojA6Kn8v+eo/6njiP+O3mD/kd9k/5Tgaf+X4W3/vuim/8jqtP/N67zr8fHxgvHx8YLy8vI68/PzK/Hx
8YLx8fGCx+m03L/nqP++6Kb/meBw/47eYP+S32X/q+SL/8XpsP/G6rL/1+zLvvHx8YLz8/OB8PDwEdXV
1Qbx8fF98fHxgt/t1Z/A56j9v+eo/7/nqP+656H/vuim/8Lorf/E6a7/yOq18Ovw6Yvx8fGC8vLyYwAA
AAAAAAAA8fHxR/Hx8YLx8fGC2O3NrMDnqfq/56j/v+eo/7/nqP/B6Kv/xumy7OTu3Zfx8fGC8/PzgfLy
8icAAAAAAAAAAP///wPz8/Nm8fHxgvHx8YLo7+SO0+zFuczquszM6bzJ1+zMru7w7Ibx8fGC8fHxgvHx
8UcAAAAAAAAAAAAAAAAAAAAA4+PjCfHx8Vzx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgfPz
80D///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8/PzK/Ly8mDz8/N+8fHxgvHx8YLy8vJ68vLyUezs
7BsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAevr6w3j4+MJAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD8fwAA4AcAAMADAACAAQAAgAEAAIABAACAAQAAgAEAAIAB
AADAAwAAwAMAAOAHAADwDwAA/n8AAP//AAA=
</value>
</data>
</root>

View file

@ -1,3 +0,0 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<Costura DisableCompression='true' IncludeDebugSymbols='false' />
</Weavers>

View file

@ -1,141 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->
<xs:element name="Weavers">
<xs:complexType>
<xs:all>
<xs:element name="Costura" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:all>
<xs:element minOccurs="0" maxOccurs="1" name="ExcludeAssemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="IncludeAssemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="ExcludeRuntimeAssemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="IncludeRuntimeAssemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="Unmanaged32Assemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of unmanaged 32 bit assembly names to include, delimited with line breaks.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="Unmanaged64Assemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of unmanaged 64 bit assembly names to include, delimited with line breaks.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="PreloadOrder" type="xs:string">
<xs:annotation>
<xs:documentation>The order of preloaded assemblies, delimited with line breaks.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:all>
<xs:attribute name="CreateTemporaryAssemblies" type="xs:boolean">
<xs:annotation>
<xs:documentation>This will copy embedded files to disk before loading them into memory. This is helpful for some scenarios that expected an assembly to be loaded from a physical file.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="IncludeDebugSymbols" type="xs:boolean">
<xs:annotation>
<xs:documentation>Controls if .pdbs for reference assemblies are also embedded.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="IncludeRuntimeReferences" type="xs:boolean">
<xs:annotation>
<xs:documentation>Controls if runtime assemblies are also embedded.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="UseRuntimeReferencePaths" type="xs:boolean">
<xs:annotation>
<xs:documentation>Controls whether the runtime assemblies are embedded with their full path or only with their assembly name.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="DisableCompression" type="xs:boolean">
<xs:annotation>
<xs:documentation>Embedded assemblies are compressed by default, and uncompressed when they are loaded. You can turn compression off with this option.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="DisableCleanup" type="xs:boolean">
<xs:annotation>
<xs:documentation>As part of Costura, embedded assemblies are no longer included as part of the build. This cleanup can be turned off.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="LoadAtModuleInit" type="xs:boolean">
<xs:annotation>
<xs:documentation>Costura by default will load as part of the module initialization. This flag disables that behavior. Make sure you call CosturaUtility.Initialize() somewhere in your code.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="IgnoreSatelliteAssemblies" type="xs:boolean">
<xs:annotation>
<xs:documentation>Costura will by default use assemblies with a name like 'resources.dll' as a satellite resource and prepend the output path. This flag disables that behavior.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="ExcludeAssemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with |</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="IncludeAssemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of assembly names to include from the default action of "embed all Copy Local references", delimited with |.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="ExcludeRuntimeAssemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with |</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="IncludeRuntimeAssemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with |.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Unmanaged32Assemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of unmanaged 32 bit assembly names to include, delimited with |.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Unmanaged64Assemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of unmanaged 64 bit assembly names to include, delimited with |.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="PreloadOrder" type="xs:string">
<xs:annotation>
<xs:documentation>The order of preloaded assemblies, delimited with |.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:all>
<xs:attribute name="VerifyAssembly" type="xs:boolean">
<xs:annotation>
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="VerifyIgnoreCodes" type="xs:string">
<xs:annotation>
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="GenerateXsd" type="xs:boolean">
<xs:annotation>
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>

View file

@ -1,262 +0,0 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Win32;
using Newtonsoft.Json;
using UptimeKuma.Properties;
namespace UptimeKuma {
static class Program {
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args) {
var cwd = Path.GetDirectoryName(Application.ExecutablePath);
if (cwd != null) {
Environment.CurrentDirectory = cwd;
}
bool isIntranet = args.Contains("--intranet");
if (isIntranet) {
Console.WriteLine("The --intranet argument was provided, so we will not try to access the internet. The first time this application runs you'll need to run it without the --intranet param or copy the result from another machine to the intranet server.");
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new UptimeKumaApplicationContext(isIntranet));
}
}
public class UptimeKumaApplicationContext : ApplicationContext
{
private static Mutex mutex = null;
const string appName = "Uptime Kuma";
private NotifyIcon trayIcon;
private Process process;
private MenuItem statusMenuItem;
private MenuItem runWhenStarts;
private MenuItem openMenuItem;
private RegistryKey registryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
private readonly bool intranetOnly;
public UptimeKumaApplicationContext(bool intranetOnly) {
// Single instance only
bool createdNew;
mutex = new Mutex(true, appName, out createdNew);
if (!createdNew) {
return;
}
this.intranetOnly = intranetOnly;
var startingText = "Starting server...";
trayIcon = new NotifyIcon();
trayIcon.Text = startingText;
runWhenStarts = new MenuItem("Run when system starts", RunWhenStarts);
runWhenStarts.Checked = registryKey.GetValue(appName) != null;
statusMenuItem = new MenuItem(startingText);
statusMenuItem.Enabled = false;
openMenuItem = new MenuItem("Open", Open);
openMenuItem.Enabled = false;
trayIcon.Icon = Icon.ExtractAssociatedIcon(Assembly.GetExecutingAssembly().Location);
trayIcon.ContextMenu = new ContextMenu(new MenuItem[] {
statusMenuItem,
openMenuItem,
//new("Debug Console", DebugConsole),
runWhenStarts,
new("Check for Update...", CheckForUpdate),
new("Visit GitHub...", VisitGitHub),
new("About", About),
new("Exit", Exit),
});
trayIcon.MouseDoubleClick += new MouseEventHandler(Open);
trayIcon.Visible = true;
var hasUpdateFile = File.Exists("update");
if (!hasUpdateFile && Directory.Exists("core") && Directory.Exists("node") && Directory.Exists("core/node_modules") && Directory.Exists("core/dist")) {
// Go go go
StartProcess();
} else {
DownloadFiles();
}
}
void DownloadFiles() {
if (intranetOnly) {
return;
}
var form = new DownloadForm();
form.Closed += Exit;
form.Show();
}
private void RunWhenStarts(object sender, EventArgs e) {
if (registryKey == null) {
MessageBox.Show("Error: Unable to set startup registry key.");
return;
}
if (runWhenStarts.Checked) {
registryKey.DeleteValue(appName, false);
runWhenStarts.Checked = false;
} else {
registryKey.SetValue(appName, Application.ExecutablePath);
runWhenStarts.Checked = true;
}
}
void StartProcess() {
var startInfo = new ProcessStartInfo {
FileName = "node/node.exe",
Arguments = "server/server.js --data-dir=\"../data/\"",
RedirectStandardOutput = false,
RedirectStandardError = false,
UseShellExecute = false,
CreateNoWindow = true,
WorkingDirectory = "core"
};
process = new Process();
process.StartInfo = startInfo;
process.EnableRaisingEvents = true;
process.Exited += ProcessExited;
try {
process.Start();
//Open(null, null);
// Async task to check if the server is ready
Task.Run(() => {
var runningText = "Server is running";
using TcpClient tcpClient = new TcpClient();
while (true) {
try {
tcpClient.Connect("127.0.0.1", 3001);
statusMenuItem.Text = runningText;
openMenuItem.Enabled = true;
trayIcon.Text = runningText;
break;
} catch (Exception) {
System.Threading.Thread.Sleep(2000);
}
}
});
} catch (Exception e) {
MessageBox.Show("Startup failed: " + e.Message, "Uptime Kuma Error");
}
}
void StopProcess() {
process?.Kill();
}
void Open(object sender, EventArgs e) {
Process.Start("http://localhost:3001");
}
void DebugConsole(object sender, EventArgs e) {
}
void CheckForUpdate(object sender, EventArgs e) {
if (intranetOnly) {
return;
}
// Check version.json exists
if (File.Exists("version.json")) {
// Load version.json and compare with the latest version from GitHub
var currentVersionObj = JsonConvert.DeserializeObject<Version>(File.ReadAllText("version.json"));
var versionJson = new WebClient().DownloadString("https://uptime.kuma.pet/version");
var latestVersionObj = JsonConvert.DeserializeObject<Version>(versionJson);
// Compare version, if the latest version is newer, then update
if (new System.Version(latestVersionObj.latest).CompareTo(new System.Version(currentVersionObj.latest)) > 0) {
var result = MessageBox.Show("A new version is available. Do you want to update?", "Update", MessageBoxButtons.YesNo);
if (result == DialogResult.Yes) {
// Create a empty file `update`, so the app will download the core files again at startup
File.Create("update").Close();
trayIcon.Visible = false;
process?.Kill();
// Restart the app, it will download the core files again at startup
Application.Restart();
}
} else {
MessageBox.Show("You are using the latest version.");
}
}
}
void VisitGitHub(object sender, EventArgs e) {
if (intranetOnly) {
MessageBox.Show("You have parsed in --intranet so we will not try to access the internet or visit github.com, please go to https://github.com/louislam/uptime-kuma if you want to visit github.");
return;
}
Process.Start("https://github.com/louislam/uptime-kuma");
}
void About(object sender, EventArgs e)
{
MessageBox.Show("Uptime Kuma Windows Runtime v1.0.0" + Environment.NewLine + "© 2023 Louis Lam", "Info");
}
void Exit(object sender, EventArgs e)
{
// Hide tray icon, otherwise it will remain shown until user mouses over it
trayIcon.Visible = false;
process?.Kill();
Application.Exit();
}
void ProcessExited(object sender, EventArgs e) {
if (process.ExitCode != 0) {
var line = "";
while (!process.StandardOutput.EndOfStream)
{
line += process.StandardOutput.ReadLine();
}
MessageBox.Show("Uptime Kuma exited unexpectedly. Exit code: " + process.ExitCode + " " + line);
}
trayIcon.Visible = false;
Application.Exit();
}
}
}

View file

@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Uptime Kuma")]
[assembly: AssemblyDescription("A portable executable for running Uptime Kuma")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Uptime Kuma")]
[assembly: AssemblyProduct("Uptime Kuma")]
[assembly: AssemblyCopyright("Copyright © 2023 Louis Lam")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("86B40AFB-61FC-433D-8C31-650B0F32EA8F")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.2.0")]
[assembly: AssemblyFileVersion("1.0.2.0")]

View file

@ -1,62 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace UptimeKuma.Properties {
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder",
"4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance",
"CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState
.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if ((resourceMan == null)) {
global::System.Resources.ResourceManager temp =
new global::System.Resources.ResourceManager("UptimeKuma.Properties.Resources",
typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState
.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get { return resourceCulture; }
set { resourceCulture = value; }
}
}
}

View file

@ -1,117 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View file

@ -1,23 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace UptimeKuma.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute(
"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance =
((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get { return defaultInstance; }
}
}
}

View file

@ -1,7 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

View file

@ -1,203 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{2DB53988-1D93-4AC0-90C4-96ADEAAC5C04}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>UptimeKuma</RootNamespace>
<AssemblyName>uptime-kuma</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<ApplicationIcon>..\..\public\favicon.ico</ApplicationIcon>
<LangVersion>9</LangVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup>
<PropertyGroup>
<PostBuildEvent>COPY "$(SolutionDir)bin\Debug\uptime-kuma.exe" "%UserProfile%\Desktop\uptime-kuma-win64\"</PostBuildEvent>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.Win32.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll</HintPath>
</Reference>
<Reference Include="mscorlib" />
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>packages\Newtonsoft.Json.13.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.AppContext, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.AppContext.4.3.0\lib\net463\System.AppContext.dll</HintPath>
</Reference>
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Console, Version=4.0.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Console.4.3.1\lib\net46\System.Console.dll</HintPath>
</Reference>
<Reference Include="System.Core" />
<Reference Include="System.Diagnostics.DiagnosticSource, Version=7.0.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>packages\System.Diagnostics.DiagnosticSource.7.0.1\lib\net462\System.Diagnostics.DiagnosticSource.dll</HintPath>
</Reference>
<Reference Include="System.Diagnostics.Tracing, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Diagnostics.Tracing.4.3.0\lib\net462\System.Diagnostics.Tracing.dll</HintPath>
</Reference>
<Reference Include="System.Globalization.Calendars, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll</HintPath>
</Reference>
<Reference Include="System.IO, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.IO.4.3.0\lib\net462\System.IO.dll</HintPath>
</Reference>
<Reference Include="System.IO.Compression, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll</HintPath>
</Reference>
<Reference Include="System.IO.Compression.FileSystem" />
<Reference Include="System.IO.Compression.ZipFile, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll</HintPath>
</Reference>
<Reference Include="System.IO.FileSystem, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll</HintPath>
</Reference>
<Reference Include="System.IO.FileSystem.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll</HintPath>
</Reference>
<Reference Include="System.Linq, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Linq.4.3.0\lib\net463\System.Linq.dll</HintPath>
</Reference>
<Reference Include="System.Linq.Expressions, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Linq.Expressions.4.3.0\lib\net463\System.Linq.Expressions.dll</HintPath>
</Reference>
<Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Net.Http, Version=4.1.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll</HintPath>
</Reference>
<Reference Include="System.Net.Sockets, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Reflection, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll</HintPath>
</Reference>
<Reference Include="System.Runtime, Version=4.1.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Runtime.4.3.1\lib\net462\System.Runtime.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.Extensions, Version=4.1.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Runtime.Extensions.4.3.1\lib\net462\System.Runtime.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.InteropServices, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Runtime.InteropServices.4.3.0\lib\net463\System.Runtime.InteropServices.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>
</Reference>
<Reference Include="System.Security.Cryptography.Algorithms, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Security.Cryptography.Algorithms.4.3.1\lib\net463\System.Security.Cryptography.Algorithms.dll</HintPath>
</Reference>
<Reference Include="System.Security.Cryptography.Encoding, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll</HintPath>
</Reference>
<Reference Include="System.Security.Cryptography.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll</HintPath>
</Reference>
<Reference Include="System.Security.Cryptography.X509Certificates, Version=4.1.1.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Security.Cryptography.X509Certificates.4.3.2\lib\net461\System.Security.Cryptography.X509Certificates.dll</HintPath>
</Reference>
<Reference Include="System.Text.RegularExpressions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Text.RegularExpressions.4.3.1\lib\net463\System.Text.RegularExpressions.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Xml.ReaderWriter, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Xml.ReaderWriter.4.3.1\lib\net46\System.Xml.ReaderWriter.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="DownloadForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="DownloadForm.Designer.cs">
<DependentUpon>DownloadForm.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Version.cs" />
<EmbeddedResource Include="DownloadForm.resx">
<DependentUpon>DownloadForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<None Include="..\..\public\favicon.ico">
<Link>favicon.ico</Link>
</None>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Content Include=".gitignore" />
<Content Include="app.manifest" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105.The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets'))" />
</Target>
<Import Project="packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets" Condition="Exists('packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets')" />
</Project>

View file

@ -1,16 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UptimeKuma", "UptimeKuma.csproj", "{2DB53988-1D93-4AC0-90C4-96ADEAAC5C04}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{2DB53988-1D93-4AC0-90C4-96ADEAAC5C04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2DB53988-1D93-4AC0-90C4-96ADEAAC5C04}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2DB53988-1D93-4AC0-90C4-96ADEAAC5C04}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2DB53988-1D93-4AC0-90C4-96ADEAAC5C04}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

View file

@ -1,3 +0,0 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=UptimeKuma_002FProperties_002FResources/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/Initialized/@EntryValue">True</s:Boolean></wpf:ResourceDictionary>

View file

@ -1,9 +0,0 @@
namespace UptimeKuma {
public class Version {
public string latest { get; set; }
public string slow { get; set; }
public string beta { get; set; }
public string nodejs { get; set; }
public string exe { get; set; }
}
}

View file

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<asmv3:application>
<asmv3:windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
</asmv3:windowsSettings>
</asmv3:application>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Specifying requestedExecutionLevel element will disable file and registry virtualization.
Remove this element if your application requires this virtualization for backwards
compatibility.
-->
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>

View file

@ -1,54 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.NETCore.Platforms" version="7.0.0" targetFramework="net472" />
<package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="net472" />
<package id="NETStandard.Library" version="2.0.3" targetFramework="net472" />
<package id="Newtonsoft.Json" version="13.0.2" targetFramework="net472" />
<package id="System.AppContext" version="4.3.0" targetFramework="net472" />
<package id="System.Console" version="4.3.1" targetFramework="net472" />
<package id="System.Diagnostics.DiagnosticSource" version="7.0.1" targetFramework="net472" />
<package id="System.Net.Http" version="4.3.4" targetFramework="net472" />
<package id="System.Runtime.Extensions" version="4.3.1" targetFramework="net472" />
<package id="System.Security.Cryptography.Algorithms" version="4.3.1" targetFramework="net472" />
<package id="System.Security.Cryptography.X509Certificates" version="4.3.2" targetFramework="net472" />
<package id="System.Text.RegularExpressions" version="4.3.1" targetFramework="net472" />
<package id="System.Xml.ReaderWriter" version="4.3.1" targetFramework="net472" />
<package id="System.Memory" version="4.5.5" targetFramework="net472" />
<package id="System.Net.Primitives" version="4.3.1" targetFramework="net472" />
<package id="System.Runtime" version="4.3.1" targetFramework="net472" />
<package id="System.Buffers" version="4.5.1" targetFramework="net472" />
<package id="System.Collections" version="4.3.0" targetFramework="net472" />
<package id="System.Collections.Concurrent" version="4.3.0" targetFramework="net472" />
<package id="System.Diagnostics.Debug" version="4.3.0" targetFramework="net472" />
<package id="System.Diagnostics.Tools" version="4.3.0" targetFramework="net472" />
<package id="System.Diagnostics.Tracing" version="4.3.0" targetFramework="net472" />
<package id="System.Globalization" version="4.3.0" targetFramework="net472" />
<package id="System.Globalization.Calendars" version="4.3.0" targetFramework="net472" />
<package id="System.IO" version="4.3.0" targetFramework="net472" />
<package id="System.IO.Compression" version="4.3.0" targetFramework="net472" />
<package id="System.IO.Compression.ZipFile" version="4.3.0" targetFramework="net472" />
<package id="System.IO.FileSystem" version="4.3.0" targetFramework="net472" />
<package id="System.IO.FileSystem.Primitives" version="4.3.0" targetFramework="net472" />
<package id="System.Linq" version="4.3.0" targetFramework="net472" />
<package id="System.Linq.Expressions" version="4.3.0" targetFramework="net472" />
<package id="System.Net.Sockets" version="4.3.0" targetFramework="net472" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
<package id="System.ObjectModel" version="4.3.0" targetFramework="net472" />
<package id="System.Reflection" version="4.3.0" targetFramework="net472" />
<package id="System.Reflection.Extensions" version="4.3.0" targetFramework="net472" />
<package id="System.Reflection.Primitives" version="4.3.0" targetFramework="net472" />
<package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="net472" />
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net472" />
<package id="System.Runtime.Handles" version="4.3.0" targetFramework="net472" />
<package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="net472" />
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net472" />
<package id="System.Runtime.Numerics" version="4.3.0" targetFramework="net472" />
<package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="net472" />
<package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net472" />
<package id="System.Text.Encoding" version="4.3.0" targetFramework="net472" />
<package id="System.Text.Encoding.Extensions" version="4.3.0" targetFramework="net472" />
<package id="System.Threading" version="4.3.0" targetFramework="net472" />
<package id="System.Threading.Tasks" version="4.3.0" targetFramework="net472" />
<package id="System.Threading.Timer" version="4.3.0" targetFramework="net472" />
<package id="System.Xml.XDocument" version="4.3.0" targetFramework="net472" />
</packages>

View file

@ -1,23 +0,0 @@
const fs = require("fs");
/**
* Detect if `fs.rmSync` is available
* to avoid the runtime deprecation warning triggered for using `fs.rmdirSync` with `{ recursive: true }` in Node.js v16,
* or the `recursive` property removing completely in the future Node.js version.
* See the link below.
* @todo Once we drop the support for Node.js v14 (or at least versions before v14.14.0), we can safely replace this function with `fs.rmSync`, since `fs.rmSync` was add in Node.js v14.14.0 and currently we supports all the Node.js v14 versions that include the versions before the v14.14.0, and this function have almost the same signature with `fs.rmSync`.
* @link https://nodejs.org/docs/latest-v16.x/api/deprecations.html#dep0147-fsrmdirpath--recursive-true- the deprecation infomation of `fs.rmdirSync`
* @link https://nodejs.org/docs/latest-v16.x/api/fs.html#fsrmsyncpath-options the document of `fs.rmSync`
* @param {fs.PathLike} path Valid types for path values in "fs".
* @param {fs.RmDirOptions} options options for `fs.rmdirSync`, if `fs.rmSync` is available and property `recursive` is true, it will automatically have property `force` with value `true`.
* @returns {void}
*/
const rmSync = (path, options) => {
if (typeof fs.rmSync === "function") {
if (options.recursive) {
options.force = true;
}
return fs.rmSync(path, options);
}
return fs.rmdirSync(path, options);
};
module.exports = rmSync;

View file

@ -6,7 +6,7 @@
* Deprecated: Changed to healthcheck.go, it will be deleted in the future. * Deprecated: Changed to healthcheck.go, it will be deleted in the future.
* This script should be run after a period of time (180s), because the server may need some time to prepare. * This script should be run after a period of time (180s), because the server may need some time to prepare.
*/ */
const { FBSD } = require("../server/util-server"); const FBSD = /^freebsd/.test(process.platform);
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

View file

@ -1,276 +0,0 @@
// install.sh is generated by ./extra/install.batsh, do not modify it directly.
// "npm run compile-install-script" to compile install.sh
// The command is working on Windows PowerShell and Docker for Windows only.
// curl -o kuma_install.sh https://raw.githubusercontent.com/louislam/uptime-kuma/master/install.sh && sudo bash kuma_install.sh
println("=====================");
println("Uptime Kuma Install Script");
println("=====================");
println("Supported OS: Ubuntu >= 16.04, Debian and CentOS/RHEL 7/8");
println("---------------------------------------");
println("This script is designed for Linux and basic usage.");
println("For advanced usage, please go to https://github.com/louislam/uptime-kuma/wiki/Installation");
println("---------------------------------------");
println("");
println("Local - Install Uptime Kuma on your current machine with git, Node.js and pm2");
println("Docker - Install Uptime Kuma Docker container");
println("");
if ("$1" != "") {
type = "$1";
} else {
call("read", "-p", "Which installation method do you prefer? [DOCKER/local]: ", "type");
}
defaultPort = "3001";
function checkNode() {
bash("nodeVersion=$(node -e 'console.log(process.versions.node.split(`.`)[0])')");
println("Node Version: " ++ nodeVersion);
if (nodeVersion <= "12") {
println("Error: Required Node.js 14");
call("exit", "1");
}
}
function deb() {
bash("nodeCheck=$(node -v)");
bash("apt --yes update");
if (nodeCheck != "") {
checkNode();
} else {
// Old nodejs binary name is "nodejs"
bash("check=$(nodejs --version)");
if (check != "") {
println("Error: 'node' command is not found, but 'nodejs' command is found. Your NodeJS should be too old.");
bash("exit 1");
}
bash("curlCheck=$(curl --version)");
if (curlCheck == "") {
println("Installing Curl");
bash("apt --yes install curl");
}
println("Installing Node.js 16");
bash("curl -sL https://deb.nodesource.com/setup_16.x | bash - > log.txt");
bash("apt --yes install nodejs");
bash("node -v");
bash("nodeCheckAgain=$(node -v)");
if (nodeCheckAgain == "") {
println("Error during Node.js installation");
bash("exit 1");
}
}
bash("check=$(git --version)");
if (check == "") {
println("Installing Git");
bash("apt --yes install git");
}
}
if (type == "local") {
defaultInstallPath = "/opt/uptime-kuma";
if (exists("/etc/redhat-release")) {
os = call("cat", "/etc/redhat-release");
distribution = "rhel";
} else if (exists("/etc/issue")) {
bash("os=$(head -n1 /etc/issue | cut -f 1 -d ' ')");
if (os == "Ubuntu") {
distribution = "ubuntu";
// Get ubuntu version
bash(". /etc/lsb-release");
version = DISTRIB_RELEASE;
}
if (os == "Debian") {
distribution = "debian";
}
}
bash("arch=$(uname -i)");
println("Your OS: " ++ os);
println("Distribution: " ++ distribution);
println("Version: " ++ version);
println("Arch: " ++ arch);
if ("$3" != "") {
port = "$3";
} else {
call("read", "-p", "Listening Port [$defaultPort]: ", "port");
if (port == "") {
port = defaultPort;
}
}
if ("$2" != "") {
installPath = "$2";
} else {
call("read", "-p", "Installation Path [$defaultInstallPath]: ", "installPath");
if (installPath == "") {
installPath = defaultInstallPath;
}
}
// CentOS
if (distribution == "rhel") {
bash("nodeCheck=$(node -v)");
if (nodeCheck != "") {
checkNode();
} else {
bash("dnfCheck=$(dnf --version)");
// Use yum
if (dnfCheck == "") {
bash("curlCheck=$(curl --version)");
if (curlCheck == "") {
println("Installing Curl");
bash("yum -y -q install curl");
}
println("Installing Node.js 16");
bash("curl -sL https://rpm.nodesource.com/setup_16.x | bash - > log.txt");
bash("yum install -y -q nodejs");
} else {
bash("curlCheck=$(curl --version)");
if (curlCheck == "") {
println("Installing Curl");
bash("dnf -y install curl");
}
println("Installing Node.js 16");
bash("curl -sL https://rpm.nodesource.com/setup_16.x | bash - > log.txt");
bash("dnf install -y nodejs");
}
bash("node -v");
bash("nodeCheckAgain=$(node -v)");
if (nodeCheckAgain == "") {
println("Error during Node.js installation");
bash("exit 1");
}
}
bash("check=$(git --version)");
if (check == "") {
println("Installing Git");
bash("yum -y -q install git");
}
// Ubuntu
} else if (distribution == "ubuntu") {
deb();
// Debian
} else if (distribution == "debian") {
deb();
} else {
// Unknown distribution
error = 0;
bash("check=$(git --version)");
if (check == "") {
error = 1;
println("Error: git is not found!");
println("help: an installation guide is available at https://git-scm.com/book/en/v2/Getting-Started-Installing-Git");
}
bash("check=$(node -v)");
if (check == "") {
error = 1;
println("Error: node is not found");
println("help: an installation guide is available at https://nodejs.org/en/download");
}
if (error > 0) {
println("Please install above missing software");
bash("exit 1");
}
}
bash("check=$(pm2 --version)");
if (check == "") {
println("Installing PM2");
bash("npm install pm2 -g && pm2 install pm2-logrotate");
bash("pm2 startup");
}
// Check again
bash("check=$(pm2 --version)");
if (check == "") {
println("Error: pm2 is not found!");
println("help: an installation guide is available at https://pm2.keymetrics.io/docs/usage/quick-start/");
bash("exit 1");
}
bash("mkdir -p $installPath");
bash("cd $installPath");
bash("git clone https://github.com/louislam/uptime-kuma.git .");
bash("npm run setup");
bash("pm2 start server/server.js --name uptime-kuma -- --port=$port");
} else {
defaultVolume = "uptime-kuma";
bash("check=$(docker -v)");
if (check == "") {
println("Error: docker is not found!");
println("help: an installation guide is available at https://docs.docker.com/desktop/");
bash("exit 1");
}
bash("check=$(docker info)");
bash("if [[ \"$check\" == *\"Is the docker daemon running\"* ]]; then
\"echo\" \"Error: docker is not running\"
\"echo\" \"help: a troubleshooting guide is available at https://docs.docker.com/config/daemon/troubleshoot/\"
\"exit\" \"1\"
fi");
if ("$3" != "") {
port = "$3";
} else {
call("read", "-p", "Expose Port [$defaultPort]: ", "port");
if (port == "") {
port = defaultPort;
}
}
if ("$2" != "") {
volume = "$2";
} else {
call("read", "-p", "Volume Name [$defaultVolume]: ", "volume");
if (volume == "") {
volume = defaultVolume;
}
}
println("Port: $port");
println("Volume: $volume");
bash("docker volume create $volume");
bash("docker run -d --restart=always -p $port:3001 -v $volume:/app/data --name uptime-kuma louislam/uptime-kuma:1");
}
println("http://localhost:$port");

View file

@ -15,7 +15,6 @@ if (newVersion) {
// Process package.json // Process package.json
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);
fs.writeFileSync("package.json", JSON.stringify(pkg, null, 4) + "\n"); fs.writeFileSync("package.json", JSON.stringify(pkg, null, 4) + "\n");
// Process README.md // Process README.md

View file

@ -1,6 +0,0 @@
console.log("Git Push and Publish the release note on github, then press any key to continue");
process.stdin.setRawMode(true);
process.stdin.resume();
process.stdin.on("data", process.exit.bind(process, 0));

View file

@ -0,0 +1,44 @@
// Generate on GitHub
const input = `
* Add Korean translation by @Alanimdeo in https://github.com/louislam/dockge/pull/86
`;
const template = `
### 🆕 New Features
### 💇 Improvements
### 🐞 Bug Fixes
### Security Fixes
### 🦎 Translation Contributions
### Others
- Other small changes, code refactoring and comment/doc updates in this repo:
`;
const lines = input.split("\n").filter((line) => line.trim() !== "");
for (const line of lines) {
// Split the last " by "
const usernamePullRequesURL = line.split(" by ").pop();
if (!usernamePullRequesURL) {
console.log("Unable to parse", line);
continue;
}
const [ username, pullRequestURL ] = usernamePullRequesURL.split(" in ");
const pullRequestID = "#" + pullRequestURL.split("/").pop();
let message = line.split(" by ").shift();
if (!message) {
console.log("Unable to parse", line);
continue;
}
message = message.split("* ").pop();
console.log("-", pullRequestID, message, `(Thanks ${username})`);
}
console.log(template);

64
extra/release/beta.mjs Normal file
View file

@ -0,0 +1,64 @@
import "dotenv/config";
import {
ver,
buildDist,
buildImage,
checkDocker,
checkTagExists,
checkVersionFormat,
getRepoNames,
pressAnyKey,
execSync, uploadArtifacts,
} from "./lib.mjs";
import semver from "semver";
const repoNames = getRepoNames();
const version = process.env.RELEASE_BETA_VERSION;
const githubToken = process.env.RELEASE_GITHUB_TOKEN;
console.log("RELEASE_BETA_VERSION:", version);
if (!githubToken) {
console.error("GITHUB_TOKEN is required");
process.exit(1);
}
// Check if the version is a valid semver
checkVersionFormat(version);
// Check if the semver identifier is "beta"
const semverIdentifier = semver.prerelease(version);
console.log("Semver identifier:", semverIdentifier);
if (semverIdentifier[0] !== "beta") {
console.error("VERSION should have a semver identifier of 'beta'");
process.exit(1);
}
// Check if docker is running
checkDocker();
// Check if the tag exists
await checkTagExists(repoNames, version);
// node extra/beta/update-version.js
execSync("node ./extra/beta/update-version.js");
// Build frontend dist
buildDist();
// Build slim image (rootless)
buildImage(repoNames, [ "beta-slim-rootless", ver(version, "slim-rootless") ], "rootless", "BASE_IMAGE=louislam/uptime-kuma:base2-slim");
// Build full image (rootless)
buildImage(repoNames, [ "beta-rootless", ver(version, "rootless") ], "rootless");
// Build slim image
buildImage(repoNames, [ "beta-slim", ver(version, "slim") ], "release", "BASE_IMAGE=louislam/uptime-kuma:base2-slim");
// Build full image
buildImage(repoNames, [ "beta", version ], "release");
await pressAnyKey();
// npm run upload-artifacts
uploadArtifacts(version, githubToken);

57
extra/release/final.mjs Normal file
View file

@ -0,0 +1,57 @@
import "dotenv/config";
import {
ver,
buildDist,
buildImage,
checkDocker,
checkTagExists,
checkVersionFormat,
getRepoNames,
pressAnyKey, execSync, uploadArtifacts
} from "./lib.mjs";
const repoNames = getRepoNames();
const version = process.env.RELEASE_VERSION;
const githubToken = process.env.RELEASE_GITHUB_TOKEN;
console.log("RELEASE_VERSION:", version);
if (!githubToken) {
console.error("GITHUB_TOKEN is required");
process.exit(1);
}
// Check if the version is a valid semver
checkVersionFormat(version);
// Check if docker is running
checkDocker();
// Check if the tag exists
await checkTagExists(repoNames, version);
// node extra/beta/update-version.js
execSync("node extra/update-version.js");
// Build frontend dist
buildDist();
// Build slim image (rootless)
buildImage(repoNames, [ "2-slim-rootless", ver(version, "slim-rootless") ], "rootless", "BASE_IMAGE=louislam/uptime-kuma:base2-slim");
// Build full image (rootless)
buildImage(repoNames, [ "2-rootless", ver(version, "rootless") ], "rootless");
// Build slim image
buildImage(repoNames, [ "next-slim", "2-slim", ver(version, "slim") ], "release", "BASE_IMAGE=louislam/uptime-kuma:base2-slim");
// Build full image
buildImage(repoNames, [ "next", "2", version ], "release");
await pressAnyKey();
// npm run upload-artifacts
uploadArtifacts(version, githubToken);
// node extra/update-wiki-version.js
execSync("node extra/update-wiki-version.js");

233
extra/release/lib.mjs Normal file
View file

@ -0,0 +1,233 @@
import "dotenv/config";
import * as childProcess from "child_process";
import semver from "semver";
export const dryRun = process.env.RELEASE_DRY_RUN === "1";
if (dryRun) {
console.info("Dry run enabled.");
}
/**
* Check if docker is running
* @returns {void}
*/
export function checkDocker() {
try {
childProcess.execSync("docker ps");
} catch (error) {
console.error("Docker is not running. Please start docker and try again.");
process.exit(1);
}
}
/**
* Get Docker Hub repository name
*/
export function getRepoNames() {
if (process.env.RELEASE_REPO_NAMES) {
// Split by comma
return process.env.RELEASE_REPO_NAMES.split(",").map((name) => name.trim());
}
return [
"louislam/uptime-kuma",
"ghcr.io/louislam/uptime-kuma",
];
}
/**
* Build frontend dist
* @returns {void}
*/
export function buildDist() {
if (!dryRun) {
childProcess.execSync("npm run build", { stdio: "inherit" });
} else {
console.info("[DRY RUN] npm run build");
}
}
/**
* Build docker image and push to Docker Hub
* @param {string[]} repoNames Docker Hub repository names
* @param {string[]} tags Docker image tags
* @param {string} target Dockerfile's target name
* @param {string} buildArgs Docker build args
* @param {string} dockerfile Path to Dockerfile
* @param {string} platform Build platform
* @returns {void}
*/
export function buildImage(repoNames, tags, target, buildArgs = "", dockerfile = "docker/dockerfile", platform = "linux/amd64,linux/arm64,linux/arm/v7") {
let args = [
"buildx",
"build",
"-f",
dockerfile,
"--platform",
platform,
];
for (let repoName of repoNames) {
// Add tags
for (let tag of tags) {
args.push("-t", `${repoName}:${tag}`);
}
}
args = [
...args,
"--target",
target,
];
// Add build args
if (buildArgs) {
args.push("--build-arg", buildArgs);
}
args = [
...args,
".",
"--push",
];
if (!dryRun) {
childProcess.spawnSync("docker", args, { stdio: "inherit" });
} else {
console.log(`[DRY RUN] docker ${args.join(" ")}`);
}
}
/**
* Check if the version already exists on Docker Hub
* TODO: use semver to compare versions if it is greater than the previous?
* @param {string} repoName Docker Hub repository name
* @param {string} version Version to check
* @returns {void}
*/
export async function checkTagExists(repoName, version) {
console.log(`Checking if version ${version} exists on Docker Hub`);
// Get a list of tags from the Docker Hub repository
let tags = [];
// It is mainly to check my careless mistake that I forgot to update the release version in .env, so `page_size` is set to 100 is enough, I think.
const response = await fetch(`https://hub.docker.com/v2/repositories/${repoName}/tags/?page_size=100`);
if (response.ok) {
const data = await response.json();
tags = data.results.map((tag) => tag.name);
} else {
console.error("Failed to get tags from Docker Hub");
process.exit(1);
}
// Check if the version already exists
if (tags.includes(version)) {
console.error(`Version ${version} already exists`);
process.exit(1);
}
}
/**
* Check the version format
* @param {string} version Version to check
* @returns {void}
*/
export function checkVersionFormat(version) {
if (!version) {
console.error("VERSION is required");
process.exit(1);
}
// Check the version format, it should be a semver and must be like this: "2.0.0-beta.0"
if (!semver.valid(version)) {
console.error("VERSION is not a valid semver version");
process.exit(1);
}
}
/**
* Press any key to continue
* @returns {Promise<void>}
*/
export function pressAnyKey() {
console.log("Git Push and Publish the release note on github, then press any key to continue");
process.stdin.setRawMode(true);
process.stdin.resume();
return new Promise(resolve => process.stdin.once("data", data => {
process.stdin.setRawMode(false);
process.stdin.pause();
resolve();
}));
}
/**
* Append version identifier
* @param {string} version Version
* @param {string} identifier Identifier
* @returns {string} Version with identifier
*/
export function ver(version, identifier) {
const obj = semver.parse(version);
if (obj.prerelease.length === 0) {
obj.prerelease = [ identifier ];
} else {
obj.prerelease[0] = [ obj.prerelease[0], identifier ].join("-");
}
return obj.format();
}
/**
* Upload artifacts to GitHub
* 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
* @param {string} version Version
* @param {string} githubToken GitHub token
* @returns {void}
*/
export function uploadArtifacts(version, githubToken) {
let args = [
"buildx",
"build",
"-f",
"docker/dockerfile",
"--platform",
"linux/amd64",
"-t",
"louislam/uptime-kuma:upload-artifact",
"--build-arg",
`VERSION=${version}`,
"--build-arg",
"GITHUB_TOKEN",
"--target",
"upload-artifact",
".",
"--progress",
"plain",
];
if (!dryRun) {
childProcess.spawnSync("docker", args, {
stdio: "inherit",
env: {
...process.env,
GITHUB_TOKEN: githubToken,
},
});
} else {
console.log(`[DRY RUN] docker ${args.join(" ")}`);
}
}
/**
* Execute a command
* @param {string} cmd Command to execute
* @returns {void}
*/
export function execSync(cmd) {
if (!dryRun) {
childProcess.execSync(cmd, { stdio: "inherit" });
} else {
console.info(`[DRY RUN] ${cmd}`);
}
}

16
extra/release/nightly.mjs Normal file
View file

@ -0,0 +1,16 @@
import { buildDist, buildImage, checkDocker, getRepoNames } from "./lib.mjs";
// Docker Hub repository name
const repoNames = getRepoNames();
// Check if docker is running
checkDocker();
// Build frontend dist (it will build on the host machine, TODO: build on a container?)
buildDist();
// Build full image (rootless)
buildImage(repoNames, [ "nightly2-rootless" ], "nightly-rootless");
// Build full image
buildImage(repoNames, [ "nightly2" ], "nightly");

View file

@ -0,0 +1,6 @@
import { uploadArtifacts } from "./lib.mjs";
const version = process.env.RELEASE_BETA_VERSION;
const githubToken = process.env.RELEASE_GITHUB_TOKEN;
uploadArtifacts(version, githubToken);

View file

@ -0,0 +1,6 @@
import { uploadArtifacts } from "./lib.mjs";
const version = process.env.RELEASE_VERSION;
const githubToken = process.env.RELEASE_GITHUB_TOKEN;
uploadArtifacts(version, githubToken);

View file

@ -0,0 +1,25 @@
// For #5231
const fs = require("fs");
let path = "../src/lang";
// list directories in the lang directory
let jsonFileList = fs.readdirSync(path);
for (let jsonFile of jsonFileList) {
if (!jsonFile.endsWith(".json")) {
continue;
}
let jsonPath = path + "/" + jsonFile;
let langData = JSON.parse(fs.readFileSync(jsonPath, "utf8"));
for (let key in langData) {
if (langData[key] === "") {
delete langData[key];
}
}
fs.writeFileSync(jsonPath, JSON.stringify(langData, null, 4) + "\n");
}

View file

@ -0,0 +1,6 @@
const fs = require("fs");
fs.rmSync("./data/playwright-test", {
recursive: true,
force: true,
});

View file

@ -0,0 +1,24 @@
const { R } = require("redbean-node");
const Database = require("../server/database");
const args = require("args-parser")(process.argv);
const { Settings } = require("../server/settings");
const main = async () => {
console.log("Connecting the database");
Database.initDataDir(args);
await Database.connect(false, false, true);
console.log("Deleting all data from aggregate tables");
await R.exec("DELETE FROM stat_minutely");
await R.exec("DELETE FROM stat_hourly");
await R.exec("DELETE FROM stat_daily");
console.log("Resetting the aggregate table state");
await Settings.set("migrateAggregateTableState", "");
await Database.close();
console.log("Done");
};
main();

View file

@ -5,18 +5,25 @@ const { R } = require("redbean-node");
const readline = require("readline"); const readline = require("readline");
const { initJWTSecret } = require("../server/util-server"); const { initJWTSecret } = require("../server/util-server");
const User = require("../server/model/user"); const User = require("../server/model/user");
const { io } = require("socket.io-client");
const { localWebSocketURL } = require("../server/config");
const args = require("args-parser")(process.argv); const args = require("args-parser")(process.argv);
const rl = readline.createInterface({ const rl = readline.createInterface({
input: process.stdin, input: process.stdin,
output: process.stdout output: process.stdout
}); });
const main = async () => { const main = async () => {
if ("dry-run" in args) {
console.log("Dry run mode, no changes will be made.");
}
console.log("Connecting the database"); console.log("Connecting the database");
Database.initDataDir(args);
await Database.connect(false, false, true);
try { try {
Database.initDataDir(args);
await Database.connect(false, false, true);
// No need to actually reset the password for testing, just make sure no connection problem. It is ok for now. // No need to actually reset the password for testing, just make sure no connection problem. It is ok for now.
if (!process.env.TEST_BACKEND) { if (!process.env.TEST_BACKEND) {
const user = await R.findOne("user"); const user = await R.findOne("user");
@ -27,21 +34,36 @@ const main = async () => {
console.log("Found user: " + user.username); console.log("Found user: " + user.username);
while (true) { while (true) {
let password = await question("New Password: "); let password;
let confirmPassword = await question("Confirm New Password: "); let confirmPassword;
// When called with "--new-password" argument for unattended modification (e.g. npm run reset-password -- --new_password=secret)
if ("new-password" in args) {
console.log("Using password from argument");
console.warn("\x1b[31m%s\x1b[0m", "Warning: the password might be stored, in plain text, in your shell's history");
password = confirmPassword = args["new-password"] + "";
} else {
password = await question("New Password: ");
confirmPassword = await question("Confirm New Password: ");
}
if (password === confirmPassword) { if (password === confirmPassword) {
if (!("dry-run" in args)) {
await User.resetPassword(user.id, password); await User.resetPassword(user.id, password);
// Reset all sessions by reset jwt secret // Reset all sessions by reset jwt secret
await initJWTSecret(); await initJWTSecret();
// Disconnect all other socket clients of the user
await disconnectAllSocketClients(user.username, password);
}
break; break;
} else { } else {
console.log("Passwords do not match, please try again."); console.log("Passwords do not match, please try again.");
} }
} }
console.log("Password reset successfully."); console.log("Password reset successfully.");
} }
} catch (e) { } catch (e) {
console.error("Error: " + e.message); console.error("Error: " + e.message);
@ -66,6 +88,50 @@ function question(question) {
}); });
} }
/**
* Disconnect all socket clients of the user
* @param {string} username Username
* @param {string} password Password
* @returns {Promise<void>} Promise
*/
function disconnectAllSocketClients(username, password) {
return new Promise((resolve) => {
console.log("Connecting to " + localWebSocketURL + " to disconnect all other socket clients");
// Disconnect all socket connections
const socket = io(localWebSocketURL, {
reconnection: false,
timeout: 5000,
});
socket.on("connect", () => {
socket.emit("login", {
username,
password,
}, (res) => {
if (res.ok) {
console.log("Logged in.");
socket.emit("disconnectOtherSocketClients");
} else {
console.warn("Login failed.");
console.warn("Please restart the server to disconnect all sessions.");
}
socket.close();
});
});
socket.on("connect_error", function () {
// The localWebSocketURL is not guaranteed to be working for some complicated Uptime Kuma setup
// Ask the user to restart the server manually
console.warn("Failed to connect to " + localWebSocketURL);
console.warn("Please restart the server to disconnect all sessions manually.");
resolve();
});
socket.on("disconnect", () => {
resolve();
});
});
}
if (!process.env.TEST_BACKEND) { if (!process.env.TEST_BACKEND) {
main(); main();
} }

View file

@ -1,9 +0,0 @@
// Check if docker is running
const { exec } = require("child_process");
exec("docker ps", (err, stdout, stderr) => {
if (err) {
console.error("Docker is not running. Please start docker and try again.");
process.exit(1);
}
});

View file

@ -2,7 +2,6 @@
import fs from "fs"; import fs from "fs";
import util from "util"; import util from "util";
import rmSync from "../fs-rmSync.js";
/** /**
* Copy across the required language files * Copy across the required language files
@ -16,7 +15,10 @@ import rmSync from "../fs-rmSync.js";
*/ */
function copyFiles(langCode, baseLang) { function copyFiles(langCode, baseLang) {
if (fs.existsSync("./languages")) { if (fs.existsSync("./languages")) {
rmSync("./languages", { recursive: true }); fs.rmSync("./languages", {
recursive: true,
force: true,
});
} }
fs.mkdirSync("./languages"); fs.mkdirSync("./languages");
@ -93,6 +95,9 @@ console.log("Updating: " + langCode);
copyFiles(langCode, baseLangCode); copyFiles(langCode, baseLangCode);
await updateLanguage(langCode, baseLangCode); await updateLanguage(langCode, baseLangCode);
rmSync("./languages", { recursive: true }); fs.rmSync("./languages", {
recursive: true,
force: true,
});
console.log("Done. Fixing formatting by ESLint..."); console.log("Done. Fixing formatting by ESLint...");

View file

@ -5,7 +5,7 @@ const util = require("../src/util");
util.polyfill(); util.polyfill();
const newVersion = process.env.VERSION; const newVersion = process.env.RELEASE_VERSION;
console.log("New Version: " + newVersion); console.log("New Version: " + newVersion);

View file

@ -1,7 +1,7 @@
const childProcess = require("child_process"); const childProcess = require("child_process");
const fs = require("fs"); const fs = require("fs");
const newVersion = process.env.VERSION; const newVersion = process.env.RELEASE_VERSION;
if (!newVersion) { if (!newVersion) {
console.log("Missing version"); console.log("Missing version");

View file

@ -1,228 +0,0 @@
# install.sh is generated by ./extra/install.batsh, do not modify it directly.
# "npm run compile-install-script" to compile install.sh
# The command is working on Windows PowerShell and Docker for Windows only.
# curl -o kuma_install.sh https://raw.githubusercontent.com/louislam/uptime-kuma/master/install.sh && sudo bash kuma_install.sh
"echo" "-e" "====================="
"echo" "-e" "Uptime Kuma Install Script"
"echo" "-e" "====================="
"echo" "-e" "Supported OS: Ubuntu >= 16.04, Debian and CentOS/RHEL 7/8"
"echo" "-e" "---------------------------------------"
"echo" "-e" "This script is designed for Linux and basic usage."
"echo" "-e" "For advanced usage, please go to https://github.com/louislam/uptime-kuma/wiki/Installation"
"echo" "-e" "---------------------------------------"
"echo" "-e" ""
"echo" "-e" "Local - Install Uptime Kuma on your current machine with git, Node.js and pm2"
"echo" "-e" "Docker - Install Uptime Kuma Docker container"
"echo" "-e" ""
if [ "$1" != "" ]; then
type="$1"
else
"read" "-p" "Which installation method do you prefer? [DOCKER/local]: " "type"
fi
defaultPort="3001"
function checkNode {
local _0
nodeVersion=$(node -e 'console.log(process.versions.node.split(`.`)[0])')
"echo" "-e" "Node Version: ""$nodeVersion"
_0="12"
if [ $(($nodeVersion <= $_0)) == 1 ]; then
"echo" "-e" "Error: Required Node.js 14"
"exit" "1"
fi
}
function deb {
nodeCheck=$(node -v)
apt --yes update
if [ "$nodeCheck" != "" ]; then
"checkNode"
else
# Old nodejs binary name is "nodejs"
check=$(nodejs --version)
if [ "$check" != "" ]; then
"echo" "-e" "Error: 'node' command is not found, but 'nodejs' command is found. Your NodeJS should be too old."
exit 1
fi
curlCheck=$(curl --version)
if [ "$curlCheck" == "" ]; then
"echo" "-e" "Installing Curl"
apt --yes install curl
fi
"echo" "-e" "Installing Node.js 16"
curl -sL https://deb.nodesource.com/setup_16.x | bash - > log.txt
apt --yes install nodejs
node -v
nodeCheckAgain=$(node -v)
if [ "$nodeCheckAgain" == "" ]; then
"echo" "-e" "Error during Node.js installation"
exit 1
fi
fi
check=$(git --version)
if [ "$check" == "" ]; then
"echo" "-e" "Installing Git"
apt --yes install git
fi
}
if [ "$type" == "local" ]; then
defaultInstallPath="/opt/uptime-kuma"
if [ -e "/etc/redhat-release" ]; then
os=$("cat" "/etc/redhat-release")
distribution="rhel"
else
if [ -e "/etc/issue" ]; then
os=$(head -n1 /etc/issue | cut -f 1 -d ' ')
if [ "$os" == "Ubuntu" ]; then
distribution="ubuntu"
# Get ubuntu version
. /etc/lsb-release
version="$DISTRIB_RELEASE"
fi
if [ "$os" == "Debian" ]; then
distribution="debian"
fi
fi
fi
arch=$(uname -i)
"echo" "-e" "Your OS: ""$os"
"echo" "-e" "Distribution: ""$distribution"
"echo" "-e" "Version: ""$version"
"echo" "-e" "Arch: ""$arch"
if [ "$3" != "" ]; then
port="$3"
else
"read" "-p" "Listening Port [$defaultPort]: " "port"
if [ "$port" == "" ]; then
port="$defaultPort"
fi
fi
if [ "$2" != "" ]; then
installPath="$2"
else
"read" "-p" "Installation Path [$defaultInstallPath]: " "installPath"
if [ "$installPath" == "" ]; then
installPath="$defaultInstallPath"
fi
fi
# CentOS
if [ "$distribution" == "rhel" ]; then
nodeCheck=$(node -v)
if [ "$nodeCheck" != "" ]; then
"checkNode"
else
dnfCheck=$(dnf --version)
# Use yum
if [ "$dnfCheck" == "" ]; then
curlCheck=$(curl --version)
if [ "$curlCheck" == "" ]; then
"echo" "-e" "Installing Curl"
yum -y -q install curl
fi
"echo" "-e" "Installing Node.js 16"
curl -sL https://rpm.nodesource.com/setup_16.x | bash - > log.txt
yum install -y -q nodejs
else
curlCheck=$(curl --version)
if [ "$curlCheck" == "" ]; then
"echo" "-e" "Installing Curl"
dnf -y install curl
fi
"echo" "-e" "Installing Node.js 16"
curl -sL https://rpm.nodesource.com/setup_16.x | bash - > log.txt
dnf install -y nodejs
fi
node -v
nodeCheckAgain=$(node -v)
if [ "$nodeCheckAgain" == "" ]; then
"echo" "-e" "Error during Node.js installation"
exit 1
fi
fi
check=$(git --version)
if [ "$check" == "" ]; then
"echo" "-e" "Installing Git"
yum -y -q install git
fi
# Ubuntu
else
if [ "$distribution" == "ubuntu" ]; then
"deb"
# Debian
else
if [ "$distribution" == "debian" ]; then
"deb"
else
# Unknown distribution
error=$((0))
check=$(git --version)
if [ "$check" == "" ]; then
error=$((1))
"echo" "-e" "Error: git is not found!"
"echo" "-e" "help: an installation guide is available at https://git-scm.com/book/en/v2/Getting-Started-Installing-Git"
fi
check=$(node -v)
if [ "$check" == "" ]; then
error=$((1))
"echo" "-e" "Error: node is not found"
"echo" "-e" "help: an installation guide is available at https://nodejs.org/en/download"
fi
if [ $(($error > 0)) == 1 ]; then
"echo" "-e" "Please install above missing software"
exit 1
fi
fi
fi
fi
check=$(pm2 --version)
if [ "$check" == "" ]; then
"echo" "-e" "Installing PM2"
npm install pm2 -g && pm2 install pm2-logrotate
pm2 startup
fi
# Check again
check=$(pm2 --version)
if [ "$check" == "" ]; then
"echo" "-e" "Error: pm2 is not found!"
"echo" "-e" "help: an installation guide is available at https://pm2.keymetrics.io/docs/usage/quick-start/"
exit 1
fi
mkdir -p $installPath
cd $installPath
git clone https://github.com/louislam/uptime-kuma.git .
npm run setup
pm2 start server/server.js --name uptime-kuma -- --port=$port
else
defaultVolume="uptime-kuma"
check=$(docker -v)
if [ "$check" == "" ]; then
"echo" "-e" "Error: docker is not found!"
"echo" "-e" "help: an installation guide is available at https://docs.docker.com/desktop/"
exit 1
fi
check=$(docker info)
if [[ "$check" == *"Is the docker daemon running"* ]]; then
"echo" "Error: docker is not running"
"echo" "help: a troubleshooting guide is available at https://docs.docker.com/config/daemon/troubleshoot/"
"exit" "1"
fi
if [ "$3" != "" ]; then
port="$3"
else
"read" "-p" "Expose Port [$defaultPort]: " "port"
if [ "$port" == "" ]; then
port="$defaultPort"
fi
fi
if [ "$2" != "" ]; then
volume="$2"
else
"read" "-p" "Volume Name [$defaultVolume]: " "volume"
if [ "$volume" == "" ]; then
volume="$defaultVolume"
fi
fi
"echo" "-e" "Port: $port"
"echo" "-e" "Volume: $volume"
docker volume create $volume
docker run -d --restart=always -p $port:3001 -v $volume:/app/data --name uptime-kuma louislam/uptime-kuma:1
fi
"echo" "-e" "http://localhost:$port"

14818
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,20 +1,22 @@
{ {
"name": "uptime-kuma", "name": "uptime-kuma",
"version": "1.23.3", "version": "2.0.0-beta.0",
"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": "14 || 16 || 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-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",
"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",
@ -23,67 +25,56 @@
"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": "node test/prepare-test-server.js && npm run test-backend", "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": "node test/backend-test-entry.js && npm run jest-backend", "test-backend": "cross-env TEST_BACKEND=1 node --test test/backend-test",
"test-backend:14": "cross-env TEST_BACKEND=1 NODE_OPTIONS=\"--experimental-abortcontroller --no-warnings\" node--test test/backend-test", "test-e2e": "playwright test --config ./config/playwright.config.js",
"test-backend:18": "cross-env TEST_BACKEND=1 node --test test/backend-test", "test-e2e-ui": "playwright test --config ./config/playwright.config.js --ui --ui-port=51063",
"jest-backend": "cross-env TEST_BACKEND=1 jest --runInBand --detectOpenHandles --forceExit --config=./config/jest-backend.config.js", "playwright-codegen": "playwright codegen localhost:3000 --save-storage=./private/e2e-auth.json",
"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-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-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-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": "node extra/release/upload-artifacts.mjs",
"setup": "git checkout 1.23.3 && npm ci --production && npm run download-dist", "upload-artifacts-beta": "node extra/release/upload-artifacts-beta.mjs",
"setup": "git checkout 1.23.15 && 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",
"compile-install-script": "@powershell -NoProfile -ExecutionPolicy Unrestricted -Command ./extra/compile-install-script.ps1",
"test-install-script-rockylinux": "npm run compile-install-script && docker build --progress plain -f test/test_install_script/rockylinux.dockerfile .",
"test-install-script-centos7": "npm run compile-install-script && docker build --progress plain -f test/test_install_script/centos7.dockerfile .",
"test-install-script-debian": "npm run compile-install-script && docker build --progress plain -f test/test_install_script/debian.dockerfile .",
"test-install-script-debian-buster": "npm run compile-install-script && docker build --progress plain -f test/test_install_script/debian-buster.dockerfile .",
"test-install-script-ubuntu": "npm run compile-install-script && docker build --progress plain -f test/test_install_script/ubuntu.dockerfile .",
"test-install-script-ubuntu1804": "npm run compile-install-script && docker build --progress plain -f test/test_install_script/ubuntu1804.dockerfile .",
"test-install-script-ubuntu1604": "npm run compile-install-script && docker build --progress plain -f test/test_install_script/ubuntu1604.dockerfile .",
"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-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/release/final.mjs",
"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/release/beta.mjs",
"release-nightly": "node ./extra/release/nightly.mjs",
"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",
"cy:test": "node test/prepare-test-server.js && node server/server.js --port=3002 --data-dir=./data/test/ --e2e",
"cy:run": "npx cypress run --browser chrome --headless --config-file ./config/cypress.config.js",
"cy:run:unit": "npx cypress run --browser chrome --headless --config-file ./config/cypress.frontend.config.js",
"cypress-open": "concurrently -k -r \"node test/prepare-test-server.js && node server/server.js --port=3002 --data-dir=./data/test/\" \"cypress open --config-file ./config/cypress.config.js\"",
"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",
"reset-migrate-aggregate-table-state": "node extra/reset-migrate-aggregate-table-state.js"
}, },
"dependencies": { "dependencies": {
"@grpc/grpc-js": "~1.7.3", "@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",
"args-parser": "~1.3.0", "args-parser": "~1.3.0",
"axios": "~0.27.0", "axios": "~0.28.1",
"axios-ntlm": "1.3.0",
"badge-maker": "~3.3.1", "badge-maker": "~3.3.1",
"bcryptjs": "~2.4.3", "bcryptjs": "~2.4.3",
"cacheable-lookup": "~6.0.4",
"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",
@ -91,14 +82,18 @@
"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": "~6.0.5", "croner": "~8.1.0",
"dayjs": "~1.11.5", "dayjs": "~1.11.5",
"dev-null": "^0.1.1",
"dotenv": "~16.0.3", "dotenv": "~16.0.3",
"express": "~4.17.3", "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",
"form-data": "~4.0.0", "form-data": "~4.0.0",
"gamedig": "~4.1.0", "gamedig": "^4.2.0",
"html-escaper": "^3.0.3",
"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",
@ -109,52 +104,60 @@
"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": "~3.1.0",
"limiter": "~2.1.0", "limiter": "~2.1.0",
"liquidjs": "^10.7.0", "liquidjs": "^10.7.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": "~8.1.4", "mssql": "~11.0.0",
"mysql2": "~2.3.3", "mysql2": "~3.11.3",
"nanoid": "~3.3.4", "nanoid": "~3.3.4",
"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.6.5", "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.8.0", "pg": "~8.11.3",
"pg-connection-string": "~2.5.0", "pg-connection-string": "~2.6.2",
"playwright-core": "~1.35.1", "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",
"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.6.1", "socket.io": "~4.8.0",
"socket.io-client": "~4.6.1", "socket.io-client": "~4.8.0",
"socks-proxy-agent": "6.1.1", "socks-proxy-agent": "6.1.1",
"tar": "~6.1.11", "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",
"ws": "^8.13.0" "ws": "^8.13.0"
}, },
"devDependencies": { "devDependencies": {
"@actions/github": "~5.0.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",
"@popperjs/core": "~2.10.2", "@popperjs/core": "~2.10.2",
"@testcontainers/hivemq": "^10.13.1",
"@testcontainers/rabbitmq": "^10.13.2",
"@types/bootstrap": "~5.1.9", "@types/bootstrap": "~5.1.9",
"@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": "~4.2.3", "@vitejs/plugin-vue": "~5.0.1",
"@vue/compiler-sfc": "~3.3.4", "@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",
@ -164,16 +167,14 @@
"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",
"cypress": "^13.2.0",
"delay": "^5.0.0", "delay": "^5.0.0",
"dns2": "~2.0.1", "dns2": "~2.0.1",
"dompurify": "~2.4.3", "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",
"jest": "~29.6.1", "get-port-please": "^3.1.1",
"marked": "~4.2.5",
"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",
@ -186,13 +187,13 @@
"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",
"timezones-list": "~3.0.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": "~4.4.1", "vite": "~5.2.8",
"vite-plugin-commonjs": "^0.8.0",
"vite-plugin-compression": "^0.5.1", "vite-plugin-compression": "^0.5.1",
"vue": "~3.3.4", "vite-plugin-vue-devtools": "^7.0.15",
"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",
@ -201,10 +202,10 @@
"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.0.14", "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": "^6.0.1", "wait-on": "^7.2.0",
"whatwg-url": "~12.0.1" "whatwg-url": "~12.0.1"
} }
} }

View file

@ -1,10 +1,9 @@
<svg width="640" height="640" viewBox="0 0 640 640" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="640" height="640" viewBox="0 0 640 640" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<path d="M490.4 235.64C544.09 358.38 544.09 435.34 490.4 466.5C409.85 513.24 199.96 527.49 139.54 455.64C99.2601 407.74 99.2601 334.4 139.54 235.64C180.5 168.18 238.71 134.45 314.17 134.45C389.64 134.45 448.38 168.18 490.4 235.64Z" fill="url(#paint0_linear_381_799)"/> <g transform="matrix(1 0 0 1 320 320)">
<path d="M490.4 235.64C544.09 358.38 544.09 435.34 490.4 466.5C409.85 513.24 199.96 527.49 139.54 455.64C99.2601 407.74 99.2601 334.4 139.54 235.64C180.5 168.18 238.71 134.45 314.17 134.45C389.64 134.45 448.38 168.18 490.4 235.64Z" stroke="#F2F2F2" stroke-opacity="0.51" stroke-width="200"/> <linearGradient id="S3" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1 0 0 1 -319.99875 -320.0001577393)" x1="259.78" y1="261.15" x2="463.85" y2="456.49">
<defs>
<linearGradient id="paint0_linear_381_799" x1="259.78" y1="261.15" x2="463.85" y2="456.49" gradientUnits="userSpaceOnUse">
<stop stop-color="#5CDD8B"/> <stop stop-color="#5CDD8B"/>
<stop offset="1" stop-color="#86E6A9"/> <stop offset="1" stop-color="#86E6A9"/>
</linearGradient> </linearGradient>
</defs> <path style="stroke: rgb(242,242,242); stroke-opacity: 0.51; stroke-width: 200; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: url(#S3); fill-rule: nonzero; opacity: 1;" transform=" translate(0, 0)" d="M 170.40125 -84.36016 C 224.09125 38.37984 224.09125 115.33984 170.40125 146.49984 C 89.85125000000001 193.23984000000002 -120.03875 207.48984000000002 -180.45875 135.63984 C -220.73875 87.73983999999999 -220.73875 14.399839999999998 -180.45875 -84.36016000000001 C -139.49875 -151.82016 -81.28875000000001 -185.55016 -5.828750000000014 -185.55016 C 69.64124999999999 -185.55016 128.38125 -151.82016000000002 170.40124999999998 -84.36016000000001 z" stroke-linecap="round" />
</g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 893 B

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -130,7 +130,7 @@ function userAuthorizer(username, password, callback) {
* @param {express.Request} req Express request object * @param {express.Request} req Express request object
* @param {express.Response} res Express response object * @param {express.Response} res Express response object
* @param {express.NextFunction} next Next handler in chain * @param {express.NextFunction} next Next handler in chain
* @returns {void} * @returns {Promise<void>}
*/ */
exports.basicAuth = async function (req, res, next) { exports.basicAuth = async function (req, res, next) {
const middleware = basicAuth({ const middleware = basicAuth({
@ -153,7 +153,7 @@ exports.basicAuth = async function (req, res, next) {
* @param {express.Request} req Express request object * @param {express.Request} req Express request object
* @param {express.Response} res Express response object * @param {express.Response} res Express response object
* @param {express.NextFunction} next Next handler in chain * @param {express.NextFunction} next Next handler in chain
* @returns {void} * @returns {Promise<void>}
*/ */
exports.apiAuth = async function (req, res, next) { exports.apiAuth = async function (req, res, next) {
if (!await Settings.get("disableAuth")) { if (!await Settings.get("disableAuth")) {

View file

@ -1,88 +0,0 @@
const https = require("https");
const http = require("http");
const CacheableLookup = require("cacheable-lookup");
const { Settings } = require("./settings");
const { log } = require("../src/util");
class CacheableDnsHttpAgent {
static cacheable = new CacheableLookup();
static httpAgentList = {};
static httpsAgentList = {};
static enable = false;
/**
* Register/Disable cacheable to global agents
* @returns {void}
*/
static async update() {
log.debug("CacheableDnsHttpAgent", "update");
let isEnable = await Settings.get("dnsCache");
if (isEnable !== this.enable) {
log.debug("CacheableDnsHttpAgent", "value changed");
if (isEnable) {
log.debug("CacheableDnsHttpAgent", "enable");
this.cacheable.install(http.globalAgent);
this.cacheable.install(https.globalAgent);
} else {
log.debug("CacheableDnsHttpAgent", "disable");
this.cacheable.uninstall(http.globalAgent);
this.cacheable.uninstall(https.globalAgent);
}
}
this.enable = isEnable;
}
/**
* Attach cacheable to HTTP agent
* @param {http.Agent} agent Agent to install
* @returns {void}
*/
static install(agent) {
this.cacheable.install(agent);
}
/**
* @param {https.AgentOptions} agentOptions Options to pass to HTTPS agent
* @returns {https.Agent} The new HTTPS agent
*/
static getHttpsAgent(agentOptions) {
if (!this.enable) {
return new https.Agent(agentOptions);
}
let key = JSON.stringify(agentOptions);
if (!(key in this.httpsAgentList)) {
this.httpsAgentList[key] = new https.Agent(agentOptions);
this.cacheable.install(this.httpsAgentList[key]);
}
return this.httpsAgentList[key];
}
/**
* @param {http.AgentOptions} agentOptions Options to pass to the HTTP agent
* @returns {https.Agents} The new HTTP agent
*/
static getHttpAgent(agentOptions) {
if (!this.enable) {
return new http.Agent(agentOptions);
}
let key = JSON.stringify(agentOptions);
if (!(key in this.httpAgentList)) {
this.httpAgentList[key] = new http.Agent(agentOptions);
this.cacheable.install(this.httpAgentList[key]);
}
return this.httpAgentList[key];
}
}
module.exports = {
CacheableDnsHttpAgent,
};

View file

@ -8,6 +8,7 @@ const server = UptimeKumaServer.getInstance();
const io = server.io; const io = server.io;
const { setting } = require("./util-server"); const { setting } = require("./util-server");
const checkVersion = require("./check-version"); const checkVersion = require("./check-version");
const Database = require("./database");
/** /**
* Send list of notification providers to client * Send list of notification providers to client
@ -144,17 +145,20 @@ async function sendInfo(socket, hideVersion = false) {
let version; let version;
let latestVersion; let latestVersion;
let isContainer; let isContainer;
let dbType;
if (!hideVersion) { if (!hideVersion) {
version = checkVersion.version; version = checkVersion.version;
latestVersion = checkVersion.latestVersion; latestVersion = checkVersion.latestVersion;
isContainer = (process.env.UPTIME_KUMA_IS_CONTAINER === "1"); isContainer = (process.env.UPTIME_KUMA_IS_CONTAINER === "1");
dbType = Database.dbConfig.type;
} }
socket.emit("info", { socket.emit("info", {
version, version,
latestVersion, latestVersion,
isContainer, isContainer,
dbType,
primaryBaseURL: await setting("primaryBaseURL"), primaryBaseURL: await setting("primaryBaseURL"),
serverTimezone: await server.getTimezone(), serverTimezone: await server.getTimezone(),
serverTimezoneOffset: server.getTimezoneOffset(), serverTimezoneOffset: server.getTimezoneOffset(),
@ -185,6 +189,56 @@ async function sendDockerHostList(socket) {
return list; return list;
} }
/**
* Send list of docker hosts to client
* @param {Socket} socket Socket.io socket instance
* @returns {Promise<Bean[]>} List of docker hosts
*/
async function sendRemoteBrowserList(socket) {
const timeLogger = new TimeLogger();
let result = [];
let list = await R.find("remote_browser", " user_id = ? ", [
socket.userID,
]);
for (let bean of list) {
result.push(bean.toJSON());
}
io.to(socket.userID).emit("remoteBrowserList", result);
timeLogger.print("Send Remote Browser List");
return list;
}
/**
* Send list of monitor types to client
* @param {Socket} socket Socket.io socket instance
* @returns {Promise<void>}
*/
async function sendMonitorTypeList(socket) {
const result = Object.entries(UptimeKumaServer.monitorTypeList).map(([ key, type ]) => {
return [ key, {
supportsConditions: type.supportsConditions,
conditionVariables: type.conditionVariables.map(v => {
return {
id: v.id,
operators: v.operators.map(o => {
return {
id: o.id,
caption: o.caption,
};
}),
};
}),
}];
});
io.to(socket.userID).emit("monitorTypeList", Object.fromEntries(result));
}
module.exports = { module.exports = {
sendNotificationList, sendNotificationList,
sendImportantHeartbeatList, sendImportantHeartbeatList,
@ -192,5 +246,7 @@ module.exports = {
sendProxyList, sendProxyList,
sendAPIKeyList, sendAPIKeyList,
sendInfo, sendInfo,
sendDockerHostList sendDockerHostList,
sendRemoteBrowserList,
sendMonitorTypeList,
}; };

View file

@ -1,29 +1,46 @@
const isFreeBSD = /^freebsd/.test(process.platform);
// Interop with browser // Interop with browser
const args = (typeof process !== "undefined") ? require("args-parser")(process.argv) : {}; const args = (typeof process !== "undefined") ? require("args-parser")(process.argv) : {};
const demoMode = args["demo"] || false;
const badgeConstants = { // If host is omitted, the server will accept connections on the unspecified IPv6 address (::) when IPv6 is available and the unspecified IPv4 address (0.0.0.0) otherwise.
naColor: "#999", // Dual-stack support for (::)
defaultUpColor: "#66c20a", // Also read HOST if not FreeBSD, as HOST is a system environment variable in FreeBSD
defaultWarnColor: "#eed202", let hostEnv = isFreeBSD ? null : process.env.HOST;
defaultDownColor: "#c2290a", const hostname = args.host || process.env.UPTIME_KUMA_HOST || hostEnv;
defaultPendingColor: "#f8a306",
defaultMaintenanceColor: "#1747f5", const port = [ args.port, process.env.UPTIME_KUMA_PORT, process.env.PORT, 3001 ]
defaultPingColor: "blue", // as defined by badge-maker / shields.io .map(portValue => parseInt(portValue))
defaultStyle: "flat", .find(portValue => !isNaN(portValue));
defaultPingValueSuffix: "ms",
defaultPingLabelSuffix: "h", const sslKey = args["ssl-key"] || process.env.UPTIME_KUMA_SSL_KEY || process.env.SSL_KEY || undefined;
defaultUptimeValueSuffix: "%", const sslCert = args["ssl-cert"] || process.env.UPTIME_KUMA_SSL_CERT || process.env.SSL_CERT || undefined;
defaultUptimeLabelSuffix: "h", const sslKeyPassphrase = args["ssl-key-passphrase"] || process.env.UPTIME_KUMA_SSL_KEY_PASSPHRASE || process.env.SSL_KEY_PASSPHRASE || undefined;
defaultCertExpValueSuffix: " days",
defaultCertExpLabelSuffix: "h", const isSSL = sslKey && sslCert;
// Values Come From Default Notification Times
defaultCertExpireWarnDays: "14", /**
defaultCertExpireDownDays: "7" * Get the local WebSocket URL
}; * @returns {string} The local WebSocket URL
*/
function getLocalWebSocketURL() {
const protocol = isSSL ? "wss" : "ws";
const host = hostname || "localhost";
return `${protocol}://${host}:${port}`;
}
const localWebSocketURL = getLocalWebSocketURL();
const demoMode = args["demo"] || false;
module.exports = { module.exports = {
args, args,
hostname,
port,
sslKey,
sslCert,
sslKeyPassphrase,
isSSL,
localWebSocketURL,
demoMode, demoMode,
badgeConstants,
}; };

View file

@ -6,28 +6,51 @@ const knex = require("knex");
const path = require("path"); const path = require("path");
const { EmbeddedMariaDB } = require("./embedded-mariadb"); const { EmbeddedMariaDB } = require("./embedded-mariadb");
const mysql = require("mysql2/promise"); const mysql = require("mysql2/promise");
const { Settings } = require("./settings");
const { UptimeCalculator } = require("./uptime-calculator");
const dayjs = require("dayjs");
const { SimpleMigrationServer } = require("./utils/simple-migration-server");
const KumaColumnCompiler = require("./utils/knex/lib/dialects/mysql2/schema/mysql2-columncompiler");
/** /**
* Database & App Data Folder * Database & App Data Folder
*/ */
class Database { class Database {
/**
* Boostrap database for SQLite
* @type {string}
*/
static templatePath = "./db/kuma.db"; static templatePath = "./db/kuma.db";
/** /**
* Data Dir (Default: ./data) * Data Dir (Default: ./data)
* @type {string}
*/ */
static dataDir; static dataDir;
/** /**
* User Upload Dir (Default: ./data/upload) * User Upload Dir (Default: ./data/upload)
* @type {string}
*/ */
static uploadDir; static uploadDir;
/**
* Chrome Screenshot Dir (Default: ./data/screenshots)
* @type {string}
*/
static screenshotDir; static screenshotDir;
/**
* SQLite file path (Default: ./data/kuma.db)
* @type {string}
*/
static sqlitePath; static sqlitePath;
/**
* For storing Docker TLS certs (Default: ./data/docker-tls)
* @type {string}
*/
static dockerTLSDir; static dockerTLSDir;
/** /**
@ -84,8 +107,11 @@ class Database {
"patch-add-certificate-expiry-status-page.sql": true, "patch-add-certificate-expiry-status-page.sql": true,
"patch-monitor-oauth-cc.sql": true, "patch-monitor-oauth-cc.sql": true,
"patch-add-timeout-monitor.sql": true, "patch-add-timeout-monitor.sql": true,
"patch-add-gamedig-given-port.sql": true, // The last file so far converted to a knex migration file "patch-add-gamedig-given-port.sql": true,
"patch-notification-config.sql": true, "patch-notification-config.sql": true,
"patch-fix-kafka-producer-booleans.sql": true,
"patch-timeout.sql": true,
"patch-monitor-tls-info-add-fk.sql": true, // The last file so far converted to a knex migration file
}; };
/** /**
@ -173,6 +199,14 @@ class Database {
* @returns {Promise<void>} * @returns {Promise<void>}
*/ */
static async connect(testMode = false, autoloadModels = true, noLog = false) { static async connect(testMode = false, autoloadModels = true, noLog = false) {
// Patch "mysql2" knex client
// Workaround: Tried extending the ColumnCompiler class, but it didn't work for unknown reasons, so I override the function via prototype
const { getDialectByNameOrAlias } = require("knex/lib/dialects");
const mysql2 = getDialectByNameOrAlias("mysql2");
mysql2.prototype.columnCompiler = function () {
return new KumaColumnCompiler(this, ...arguments);
};
const acquireConnectionTimeout = 120 * 1000; const acquireConnectionTimeout = 120 * 1000;
let dbConfig; let dbConfig;
try { try {
@ -188,9 +222,9 @@ class Database {
let config = {}; let config = {};
let mariadbPoolConfig = { let mariadbPoolConfig = {
afterCreate: function (conn, done) { min: 0,
max: 10,
} idleTimeoutMillis: 30000,
}; };
log.info("db", `Database Type: ${dbConfig.type}`); log.info("db", `Database Type: ${dbConfig.type}`);
@ -243,7 +277,14 @@ class Database {
user: dbConfig.username, user: dbConfig.username,
password: dbConfig.password, password: dbConfig.password,
database: dbConfig.dbName, database: dbConfig.dbName,
timezone: "+00:00", timezone: "Z",
typeCast: function (field, next) {
if (field.type === "DATETIME") {
// Do not perform timezone conversion
return field.string();
}
return next();
},
}, },
pool: mariadbPoolConfig, pool: mariadbPoolConfig,
}; };
@ -255,8 +296,16 @@ class Database {
client: "mysql2", client: "mysql2",
connection: { connection: {
socketPath: embeddedMariaDB.socketPath, socketPath: embeddedMariaDB.socketPath,
user: "node", user: embeddedMariaDB.username,
database: "kuma", database: "kuma",
timezone: "Z",
typeCast: function (field, next) {
if (field.type === "DATETIME") {
// Do not perform timezone conversion
return field.string();
}
return next();
},
}, },
pool: mariadbPoolConfig, pool: mariadbPoolConfig,
}; };
@ -343,9 +392,11 @@ class Database {
/** /**
* Patch the database * Patch the database
* @returns {void} * @param {number} port Start the migration server for aggregate tables on this port if provided
* @param {string} hostname Start the migration server for aggregate tables on this hostname if provided
* @returns {Promise<void>}
*/ */
static async patch() { static async patch(port = undefined, hostname = undefined) {
// Still need to keep this for old versions of Uptime Kuma // Still need to keep this for old versions of Uptime Kuma
if (Database.dbConfig.type === "sqlite") { if (Database.dbConfig.type === "sqlite") {
await this.patchSqlite(); await this.patchSqlite();
@ -355,9 +406,23 @@ class Database {
// https://knexjs.org/guide/migrations.html // https://knexjs.org/guide/migrations.html
// https://gist.github.com/NigelEarle/70db130cc040cc2868555b29a0278261 // https://gist.github.com/NigelEarle/70db130cc040cc2868555b29a0278261
try { try {
// Disable foreign key check for SQLite
// Known issue of knex: https://github.com/drizzle-team/drizzle-orm/issues/1813
if (Database.dbConfig.type === "sqlite") {
await R.exec("PRAGMA foreign_keys = OFF");
}
await R.knex.migrate.latest({ await R.knex.migrate.latest({
directory: Database.knexMigrationsPath, directory: Database.knexMigrationsPath,
}); });
// Enable foreign key check for SQLite
if (Database.dbConfig.type === "sqlite") {
await R.exec("PRAGMA foreign_keys = ON");
}
await this.migrateAggregateTable(port, hostname);
} catch (e) { } catch (e) {
// Allow missing patch files for downgrade or testing pr. // Allow missing patch files for downgrade or testing pr.
if (e.message.includes("the following files are missing:")) { if (e.message.includes("the following files are missing:")) {
@ -675,6 +740,173 @@ class Database {
} }
} }
/**
* Migrate the old data in the heartbeat table to the new format (stat_daily, stat_hourly, stat_minutely)
* It should be run once while upgrading V1 to V2
*
* Normally, it should be in transaction, but UptimeCalculator wasn't designed to be in transaction before that.
* I don't want to heavily modify the UptimeCalculator, so it is not in transaction.
* Run `npm run reset-migrate-aggregate-table-state` to reset, in case the migration is interrupted.
* @param {number} port Start the migration server on this port if provided
* @param {string} hostname Start the migration server on this hostname if provided
* @returns {Promise<void>}
*/
static async migrateAggregateTable(port, hostname = undefined) {
log.debug("db", "Enter Migrate Aggregate Table function");
// Add a setting for 2.0.0-dev users to skip this migration
if (process.env.SET_MIGRATE_AGGREGATE_TABLE_TO_TRUE === "1") {
log.warn("db", "SET_MIGRATE_AGGREGATE_TABLE_TO_TRUE is set to 1, skipping aggregate table migration forever (for 2.0.0-dev users)");
await Settings.set("migrateAggregateTableState", "migrated");
}
let migrateState = await Settings.get("migrateAggregateTableState");
// Skip if already migrated
// If it is migrating, it possibly means the migration was interrupted, or the migration is in progress
if (migrateState === "migrated") {
log.debug("db", "Migrated aggregate table already, skip");
return;
} else if (migrateState === "migrating") {
log.warn("db", "Aggregate table migration is already in progress, or it was interrupted");
throw new Error("Aggregate table migration is already in progress");
}
/**
* Start migration server for displaying the migration status
* @type {SimpleMigrationServer}
*/
let migrationServer;
let msg;
if (port) {
migrationServer = new SimpleMigrationServer();
await migrationServer.start(port, hostname);
}
log.info("db", "Migrating Aggregate Table");
log.info("db", "Getting list of unique monitors");
// Get a list of unique monitors from the heartbeat table, using raw sql
let monitors = await R.getAll(`
SELECT DISTINCT monitor_id
FROM heartbeat
ORDER BY monitor_id ASC
`);
// Stop if stat_* tables are not empty
for (let table of [ "stat_minutely", "stat_hourly", "stat_daily" ]) {
let countResult = await R.getRow(`SELECT COUNT(*) AS count FROM ${table}`);
let count = countResult.count;
if (count > 0) {
log.warn("db", `Aggregate table ${table} is not empty, migration will not be started (Maybe you were using 2.0.0-dev?)`);
await migrationServer?.stop();
return;
}
}
await Settings.set("migrateAggregateTableState", "migrating");
let progressPercent = 0;
let part = 100 / monitors.length;
let i = 1;
for (let monitor of monitors) {
// Get a list of unique dates from the heartbeat table, using raw sql
let dates = await R.getAll(`
SELECT DISTINCT DATE(time) AS date
FROM heartbeat
WHERE monitor_id = ?
ORDER BY date ASC
`, [
monitor.monitor_id
]);
for (let date of dates) {
// New Uptime Calculator
let calculator = new UptimeCalculator();
calculator.monitorID = monitor.monitor_id;
calculator.setMigrationMode(true);
// Get all the heartbeats for this monitor and date
let heartbeats = await R.getAll(`
SELECT status, ping, time
FROM heartbeat
WHERE monitor_id = ?
AND DATE(time) = ?
ORDER BY time ASC
`, [ monitor.monitor_id, date.date ]);
if (heartbeats.length > 0) {
msg = `[DON'T STOP] Migrating monitor data ${monitor.monitor_id} - ${date.date} [${progressPercent.toFixed(2)}%][${i}/${monitors.length}]`;
log.info("db", msg);
migrationServer?.update(msg);
}
for (let heartbeat of heartbeats) {
await calculator.update(heartbeat.status, parseFloat(heartbeat.ping), dayjs(heartbeat.time));
}
progressPercent += (Math.round(part / dates.length * 100) / 100);
// Lazy to fix the floating point issue, it is acceptable since it is just a progress bar
if (progressPercent > 100) {
progressPercent = 100;
}
}
i++;
}
msg = "Clearing non-important heartbeats";
log.info("db", msg);
migrationServer?.update(msg);
await Database.clearHeartbeatData(true);
await Settings.set("migrateAggregateTableState", "migrated");
await migrationServer?.stop();
if (monitors.length > 0) {
log.info("db", "Aggregate Table Migration Completed");
} else {
log.info("db", "No data to migrate");
}
}
/**
* Remove all non-important heartbeats from heartbeat table, keep last 24-hour or {KEEP_LAST_ROWS} rows for each monitor
* @param {boolean} detailedLog Log detailed information
* @returns {Promise<void>}
*/
static async clearHeartbeatData(detailedLog = false) {
let monitors = await R.getAll("SELECT id FROM monitor");
const sqlHourOffset = Database.sqlHourOffset();
for (let monitor of monitors) {
if (detailedLog) {
log.info("db", "Deleting non-important heartbeats for monitor " + monitor.id);
}
await R.exec(`
DELETE FROM heartbeat
WHERE monitor_id = ?
AND important = 0
AND time < ${sqlHourOffset}
AND id NOT IN (
SELECT id
FROM heartbeat
WHERE monitor_id = ?
ORDER BY time DESC
LIMIT ?
)
`, [
monitor.id,
-24,
monitor.id,
100,
]);
}
}
} }
module.exports = Database; module.exports = Database;

Some files were not shown because too many files have changed in this diff Show more