Rebrand to PSS Uptime: Add custom logo and favicon, update all references from Uptime Kuma to PSS Uptime

- Add custom logo.png and favicon.ico for Marshall Islands Public School System
- Update all application references from 'Uptime Kuma' to 'PSS Uptime'
- Update README.md with PSS Uptime branding and credits to original Uptime Kuma project
- Update Docker configuration to build from source
- Update all notification providers to use PSS Uptime branding
- Update UI components, layouts, and pages with new branding
- Update language files (en, zh-CN, zh-TW) with PSS Uptime translations
- Add logo URL input field in status page settings
- Update default icon references from icon.svg to logo.png
This commit is contained in:
Newton Langidrik 2026-01-20 13:47:09 +12:00
parent a86789be6c
commit 8cdf7a905a
57 changed files with 319 additions and 196 deletions

136
README.md
View File

@ -1,21 +1,18 @@
<div align="center" width="100%">
<img src="./public/icon.svg" width="128" alt="Uptime Kuma Logo" />
<img src="./public/logo.png" width="128" alt="PSS Uptime Logo" />
</div>
# Uptime Kuma
# PSS Uptime
Uptime Kuma is an easy-to-use self-hosted monitoring tool.
PSS Uptime is an easy-to-use self-hosted monitoring tool for the Marshall Islands Public School System.
<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/2?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/">
<img src="https://weblate.kuma.pet/widgets/uptime-kuma/-/svg-badge.svg" alt="Translation status" />
</a>
> **Note:** This project is based on [Uptime Kuma](https://github.com/louislam/uptime-kuma), an open-source monitoring tool created by [louislam](https://github.com/louislam). We extend our gratitude to the Uptime Kuma project and its contributors for their excellent work.
<img src="https://user-images.githubusercontent.com/1336778/212262296-e6205815-ad62-488c-83ec-a5b0d0689f7c.jpg" width="700" alt="Uptime Kuma Dashboard Screenshot" />
<img src="https://user-images.githubusercontent.com/1336778/212262296-e6205815-ad62-488c-83ec-a5b0d0689f7c.jpg" width="700" alt="PSS Uptime Dashboard Screenshot" />
## 🥔 Live Demo
Try it!
For a live demo of the original Uptime Kuma project, visit:
Demo Server (Location: Frankfurt - Germany): <https://demo.kuma.pet/start-demo>
@ -23,9 +20,11 @@ It is a temporary live demo, all data will be deleted after 10 minutes. Sponsore
## ⭐ Features
PSS Uptime includes all the powerful features from Uptime Kuma:
- Monitoring uptime for HTTP(s) / TCP / HTTP(s) Keyword / HTTP(s) Json Query / Websocket / Ping / DNS Record / Push / Steam Game Server / Docker Containers
- Fancy, Reactive, Fast UI/UX
- Notifications via Telegram, Discord, Gotify, Slack, Pushover, Email (SMTP), and [90+ notification services, click here for the full list](https://github.com/louislam/uptime-kuma/tree/master/src/components/notifications)
- Notifications via Telegram, Discord, Gotify, Slack, Pushover, Email (SMTP), and [90+ notification services](https://github.com/louislam/uptime-kuma/tree/master/src/components/notifications)
- 20-second intervals
- [Multi Languages](https://github.com/louislam/uptime-kuma/tree/master/src/lang)
- Multiple status pages
@ -40,13 +39,12 @@ It is a temporary live demo, all data will be deleted after 10 minutes. Sponsore
### 🐳 Docker Compose
```bash
mkdir uptime-kuma
cd uptime-kuma
curl -o compose.yaml https://raw.githubusercontent.com/louislam/uptime-kuma/master/compose.yaml
docker compose up -d
git clone <your-repo-url>
cd PSS-Uptime
docker compose up -d --build
```
Uptime Kuma is now running on all network interfaces (e.g. http://localhost:3001 or http://your-ip:3001).
PSS Uptime is now running on all network interfaces (e.g. http://localhost:3001 or http://your-ip:3001).
> [!WARNING]
> File Systems like **NFS** (Network File System) are **NOT** supported. Please map to a local directory or volume.
@ -54,10 +52,11 @@ Uptime Kuma is now running on all network interfaces (e.g. http://localhost:3001
### 🐳 Docker Command
```bash
docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:2
docker build -t pss-uptime -f docker/dockerfile --target release .
docker run -d --restart=always -p 3001:3001 -v pss-uptime:/app/data --name pss-uptime pss-uptime
```
Uptime Kuma is now running on all network interfaces (e.g. http://localhost:3001 or http://your-ip:3001).
PSS Uptime is now running on all network interfaces (e.g. http://localhost:3001 or http://your-ip:3001).
If you want to limit exposure to localhost only:
@ -76,11 +75,11 @@ Requirements:
- ❌ Replit / Heroku
- [Node.js](https://nodejs.org/en/download/) >= 20.4
- [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 PSS Uptime in the background
```bash
git clone https://github.com/louislam/uptime-kuma.git
cd uptime-kuma
git clone <your-repo-url>
cd PSS-Uptime
npm run setup
# Option 1. Try it
@ -91,10 +90,10 @@ node server/server.js
npm install pm2 -g && pm2 install pm2-logrotate
# Start Server
pm2 start server/server.js --name uptime-kuma
pm2 start server/server.js --name pss-uptime
```
Uptime Kuma is now running on all network interfaces (e.g. http://localhost:3001 or http://your-ip:3001).
PSS Uptime is now running on all network interfaces (e.g. http://localhost:3001 or http://your-ip:3001).
More useful PM2 Commands
@ -108,96 +107,97 @@ pm2 startup && pm2 save
### Advanced Installation
If you need more options or need to browse via a reverse proxy, please read:
If you need more options or need to browse via a reverse proxy, please refer to the original Uptime Kuma documentation:
<https://github.com/louislam/uptime-kuma/wiki/%F0%9F%94%A7-How-to-Install>
## 🆙 How to Update
Please read:
For update instructions, please refer to the original Uptime Kuma documentation:
<https://github.com/louislam/uptime-kuma/wiki/%F0%9F%86%99-How-to-Update>
## 🆕 What's Next?
I will assign requests/issues to the next milestone.
For the latest features and roadmap, please check the original Uptime Kuma project:
<https://github.com/louislam/uptime-kuma/milestones>
## ❤️ Sponsors
## ❤️ Credits & Acknowledgments
Thank you so much! (GitHub Sponsors will be updated manually. OpenCollective sponsors will be updated automatically, the list will be cached by GitHub though. It may need some time to be updated)
PSS Uptime is based on [Uptime Kuma](https://github.com/louislam/uptime-kuma), an excellent open-source monitoring tool created by [louislam](https://github.com/louislam) and maintained by a dedicated community of contributors.
<img src="https://uptime.kuma.pet/sponsors?v=6" alt="Uptime Kuma Sponsors" />
We would like to express our gratitude to:
- [louislam](https://github.com/louislam) for creating and maintaining Uptime Kuma
- All contributors to the Uptime Kuma project
- The open-source community that makes projects like this possible
If you find PSS Uptime useful, please consider supporting the original Uptime Kuma project:
- [GitHub Sponsors](https://github.com/sponsors/louislam)
- [Open Collective](https://opencollective.com/uptime-kuma)
## 🖼 More Screenshots
Light Mode:
<img src="https://uptime.kuma.pet/img/light.jpg" width="512" alt="Uptime Kuma Light Mode Screenshot of how the Dashboard looks" />
<img src="https://uptime.kuma.pet/img/light.jpg" width="512" alt="PSS Uptime Light Mode Screenshot of how the Dashboard looks" />
Status Page:
<img src="https://user-images.githubusercontent.com/1336778/134628766-a3fe0981-0926-4285-ab46-891a21c3e4cb.png" width="512" alt="Uptime Kuma Status Page Screenshot" />
<img src="https://user-images.githubusercontent.com/1336778/134628766-a3fe0981-0926-4285-ab46-891a21c3e4cb.png" width="512" alt="PSS Uptime Status Page Screenshot" />
Settings Page:
<img src="https://louislam.net/uptimekuma/2.jpg" width="400" alt="Uptime Kuma Settings Page Screenshot" />
<img src="https://louislam.net/uptimekuma/2.jpg" width="400" alt="PSS Uptime Settings Page Screenshot" />
Telegram Notification Sample:
<img src="https://louislam.net/uptimekuma/3.jpg" width="400" alt="Uptime Kuma Telegram Notification Sample Screenshot" />
<img src="https://louislam.net/uptimekuma/3.jpg" width="400" alt="PSS Uptime Telegram Notification Sample Screenshot" />
## Motivation
## About PSS Uptime
- 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.
- Wanted to build a fancy UI.
- Learn Vue 3 and vite.js.
- Show the power of Bootstrap 5.
- Try to use WebSocket with SPA instead of a REST API.
- Deploy my first Docker image to Docker Hub.
PSS Uptime is a customized version of Uptime Kuma for the Marshall Islands Public School System. This project maintains all the powerful features of the original Uptime Kuma while being tailored for the specific needs of the PSS organization.
If you love this project, please consider giving it a ⭐.
### Original Uptime Kuma Motivation
The original Uptime Kuma project was created with the following motivations:
- A need for a self-hosted monitoring tool like "Uptime Robot"
- Building a fancy, modern UI
- Learning Vue 3 and vite.js
- Showcasing Bootstrap 5 capabilities
- Using WebSocket with SPA instead of REST API
- Deploying Docker images to Docker Hub
If you love this project, please consider:
- Giving the original [Uptime Kuma project](https://github.com/louislam/uptime-kuma) a ⭐
- Supporting the Uptime Kuma project through [GitHub Sponsors](https://github.com/sponsors/louislam) or [Open Collective](https://opencollective.com/uptime-kuma)
## 🗣️ 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 ask questions there.
For questions about PSS Uptime, please use the appropriate channels for this project.
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)
For questions about the original Uptime Kuma project, please refer to:
- [Uptime Kuma GitHub Issues](https://github.com/louislam/uptime-kuma/issues)
- [Subreddit (r/UptimeKuma)](https://www.reddit.com/r/UptimeKuma/)
My Reddit account: [u/louislamlam](https://reddit.com/u/louislamlam)
You can mention me if you ask a question on the subreddit.
⚠️ For any general or technical questions about Uptime Kuma, please don't send emails to the original author, as they are unable to provide support in that manner.
## Contributions
### Create Pull Requests
### Contributing to PSS Uptime
Pull requests are awesome.
To keep reviews fast and effective, please make sure youve [read our pull request guidelines](https://github.com/louislam/uptime-kuma/blob/master/CONTRIBUTING.md#can-i-create-a-pull-request-for-uptime-kuma).
Contributions to PSS Uptime are welcome! Please follow the project's contribution guidelines.
### Test Pull Requests
### Contributing to Uptime Kuma
There are a lot of pull requests right now, but I don't have time to test them all.
If you'd like to contribute to the original Uptime Kuma project (which benefits this project as well), please refer to:
If you want to help, you can check this:
<https://github.com/louislam/uptime-kuma/wiki/Test-Pull-Requests>
- [Uptime Kuma Contributing Guidelines](https://github.com/louislam/uptime-kuma/blob/master/CONTRIBUTING.md#can-i-create-a-pull-request-for-uptime-kuma)
- [Test Pull Requests](https://github.com/louislam/uptime-kuma/wiki/Test-Pull-Requests)
- [Latest Beta Releases](https://github.com/louislam/uptime-kuma/releases)
- [Report Bugs / Feature Requests](https://github.com/louislam/uptime-kuma/issues)
- [Translations](https://github.com/louislam/uptime-kuma/blob/master/src/lang/README.md)
### Test Beta Version
## License
Check out the latest beta release here: <https://github.com/louislam/uptime-kuma/releases>
### Bug Reports / Feature Requests
If you want to report a bug or request a new feature, feel free to open a [new issue](https://github.com/louislam/uptime-kuma/issues).
### Translations
If you want to translate Uptime Kuma into your language, please visit [Weblate Readme](https://github.com/louislam/uptime-kuma/blob/master/src/lang/README.md).
### Spelling & Grammar
Feel free to correct the grammar in the documentation or code.
My mother language is not English and my grammar is not that great.
This project is based on Uptime Kuma and follows the same license. Please refer to the [LICENSE](LICENSE) file for details.

View File

@ -1,6 +1,9 @@
services:
uptime-kuma:
image: louislam/uptime-kuma:2
build:
context: .
dockerfile: docker/dockerfile
target: release
restart: unless-stopped
volumes:
- ./data:/app/data

View File

@ -18,9 +18,10 @@ ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1
COPY --chown=node:node .npmrc .npmrc
COPY --chown=node:node package.json package.json
COPY --chown=node:node package-lock.json package-lock.json
RUN npm ci --omit=dev
RUN npm ci
COPY . .
COPY --chown=node:node --from=build_healthcheck /app/extra/healthcheck /app/extra/healthcheck
RUN npm run build
RUN mkdir ./data
############################################

View File

@ -4,11 +4,12 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/svg+xml" href="/icon.svg" />
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
<link rel="icon" type="image/png" href="/logo.png" />
<link rel="manifest" href="/manifest.json" />
<meta name="theme-color" id="theme-color" content="" />
<meta name="description" content="Uptime Kuma monitoring tool" />
<title>Uptime Kuma</title>
<meta name="description" content="PSS Uptime monitoring tool" />
<title>PSS Uptime</title>
<style>
.noscript-message {
font-size: 20px;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -1,9 +1,102 @@
<svg width="640" height="640" viewBox="0 0 640 640" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 320 320)">
<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">
<stop stop-color="#5CDD8B"/>
<stop offset="1" stop-color="#86E6A9"/>
</linearGradient>
<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 width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="skyGrad" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" style="stop-color:#87CEEB;stop-opacity:1" />
<stop offset="100%" style="stop-color:#4682B4;stop-opacity:1" />
</linearGradient>
<linearGradient id="oceanGrad" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" style="stop-color:#1E90FF;stop-opacity:1" />
<stop offset="100%" style="stop-color:#003366;stop-opacity:1" />
</linearGradient>
</defs>
<!-- Outer dark blue border -->
<circle cx="320" cy="320" r="310" fill="#003366" stroke="#ffffff" stroke-width="8"/>
<!-- Inner white circle border -->
<circle cx="320" cy="320" r="300" fill="none" stroke="#ffffff" stroke-width="3"/>
<!-- Central illustration area -->
<g transform="translate(320, 320)">
<!-- Sky -->
<rect x="-200" y="-200" width="400" height="150" fill="url(#skyGrad)"/>
<!-- Sun -->
<circle cx="-80" cy="-120" r="20" fill="#FFD700"/>
<path d="M -80,-120 L -80,-95 M -80,-120 L -65,-110 M -80,-120 L -95,-110 M -80,-120 L -80,-145 M -80,-120 L -65,-130 M -80,-120 L -95,-130"
stroke="#FFD700" stroke-width="2" stroke-linecap="round"/>
<!-- Ocean -->
<rect x="-200" y="-50" width="400" height="100" fill="url(#oceanGrad)"/>
<!-- Land -->
<rect x="-200" y="50" width="400" height="150" fill="#228B22"/>
<!-- Outrigger canoe (left side) -->
<g transform="translate(-140, -15)">
<!-- Sail -->
<path d="M -15,0 L -15,-35 L 8,-35 L 8,0 Z" fill="#D2B48C" stroke="#8B7355" stroke-width="1.5"/>
<!-- Hull -->
<ellipse cx="0" cy="5" rx="25" ry="7" fill="#654321"/>
<!-- Outrigger -->
<ellipse cx="-22" cy="8" rx="7" ry="4" fill="#654321"/>
<line x1="-18" y1="5" x2="-22" y2="8" stroke="#654321" stroke-width="1.5"/>
<!-- Navigator -->
<circle cx="-3" cy="-3" r="5" fill="#8B4513"/>
<rect x="-6" y="3" width="5" height="7" fill="#F5DEB3"/>
</g>
<!-- Stick chart (center) - simplified -->
<g transform="translate(0, -5)">
<line x1="-25" y1="-15" x2="25" y2="15" stroke="#D2B48C" stroke-width="2.5"/>
<line x1="25" y1="-15" x2="-25" y2="15" stroke="#D2B48C" stroke-width="2.5"/>
<line x1="0" y1="-25" x2="0" y2="25" stroke="#D2B48C" stroke-width="2.5"/>
<line x1="-25" y1="0" x2="25" y2="0" stroke="#D2B48C" stroke-width="2.5"/>
<circle cx="0" cy="0" r="6" fill="#D2B48C"/>
</g>
<!-- Left student (sitting) -->
<g transform="translate(-110, 65)">
<circle cx="0" cy="0" r="7" fill="#8B4513"/>
<rect x="-5" y="8" width="10" height="12" fill="#FFFFFF"/>
<rect x="-3" y="0" width="6" height="8" fill="#FF0000"/>
</g>
<!-- Right student (reading) -->
<g transform="translate(110, 75)">
<circle cx="0" cy="0" r="7" fill="#8B4513"/>
<rect x="-7" y="8" width="14" height="10" fill="#FFFF00"/>
<rect x="-5" y="18" width="10" height="7" fill="#003366"/>
<!-- Book -->
<rect x="-4" y="12" width="8" height="6" fill="#FFFFFF" stroke="#000000" stroke-width="0.8"/>
</g>
<!-- Palm tree (right side) -->
<g transform="translate(140, 55)">
<!-- Trunk -->
<rect x="-2.5" y="0" width="5" height="35" fill="#8B4513"/>
<!-- Fronds -->
<path d="M 0,0 Q -12,-8 -16,-16 Q -8,-12 0,0" fill="#228B22"/>
<path d="M 0,0 Q 12,-8 16,-16 Q 8,-12 0,0" fill="#228B22"/>
<path d="M 0,0 Q -8,-12 -12,-20 Q -4,-16 0,0" fill="#228B22"/>
<path d="M 0,0 Q 8,-12 12,-20 Q 4,-16 0,0" fill="#228B22"/>
</g>
</g>
<!-- Top text arc -->
<path id="topTextPath" d="M 150,200 A 200,200 0 0,1 490,200" fill="none" stroke="none"/>
<text font-family="Arial, sans-serif" font-size="20" font-weight="bold" fill="#003366">
<textPath href="#topTextPath" startOffset="50%" text-anchor="middle">
<tspan dy="-5">MARSHALL ISLANDS</tspan>
<tspan x="0" dy="18">PUBLIC SCHOOL SYSTEM</tspan>
</textPath>
</text>
<!-- Bottom text arc -->
<path id="bottomTextPath" d="M 490,440 A 200,200 0 0,1 150,440" fill="none" stroke="none"/>
<text font-family="Arial, sans-serif" font-size="16" font-weight="bold" fill="#003366">
<textPath href="#bottomTextPath" startOffset="50%" text-anchor="middle">
<tspan dy="5">"EJ JU EL BWE EN LONJAT"</tspan>
</textPath>
</text>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

BIN
public/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 KiB

View File

@ -1,6 +1,6 @@
{
"name": "Uptime Kuma",
"short_name": "Uptime Kuma",
"name": "PSS Uptime",
"short_name": "PSS Uptime",
"description": "An easy-to-use self-hosted monitoring tool.",
"theme_color": "#5cdd8b",
"start_url": "/",

View File

@ -935,7 +935,7 @@ class Monitor extends BeanModel {
{
allowAutoTopicCreation: this.kafkaProducerAllowAutoTopicCreation,
ssl: this.kafkaProducerSsl,
clientId: `Uptime-Kuma/${version}`,
clientId: `PSS-Uptime/${version}`,
interval: this.interval,
},
JSON.parse(this.kafkaProducerSaslOptions)

View File

@ -493,7 +493,7 @@ class StatusPage extends BeanModel {
*/
getIcon() {
if (!this.icon) {
return "/icon.svg";
return "/logo.png";
} else {
return this.icon;
}

View File

@ -167,7 +167,7 @@ class MqttMonitorType extends MonitorType {
let client = mqtt.connect(mqttUrl, {
username,
password,
clientId: "uptime-kuma_" + Math.random().toString(16).substr(2, 8),
clientId: "pss-uptime_" + Math.random().toString(16).substr(2, 8),
});
client.on("connect", () => {

View File

@ -22,11 +22,11 @@ class Alerta extends NotificationProvider {
environment: notification.alertaEnvironment,
severity: "critical",
correlate: [],
service: ["UptimeKuma"],
service: ["PSS Uptime"],
value: "Timeout",
tags: ["uptimekuma"],
tags: ["pss-uptime"],
attributes: {},
origin: "uptimekuma",
origin: "pss-uptime",
type: "exceptionAlert",
};
@ -37,7 +37,7 @@ class Alerta extends NotificationProvider {
{
event: "msg",
text: msg,
group: "uptimekuma-msg",
group: "pss-uptime-msg",
resource: "Message",
},
data
@ -49,7 +49,7 @@ class Alerta extends NotificationProvider {
{
correlate: ["service_up", "service_down"],
event: monitorJSON["type"],
group: "uptimekuma-" + monitorJSON["type"],
group: "pss-uptime-" + monitorJSON["type"],
resource: monitorJSON["name"],
},
data

View File

@ -9,10 +9,9 @@
const NotificationProvider = require("./notification-provider");
const { DOWN, UP } = require("../../src/util");
const { default: axios } = require("axios");
const { setting } = require("../util-server");
// bark is an APN bridge that sends notifications to Apple devices.
const barkNotificationAvatar = "https://github.com/louislam/uptime-kuma/raw/master/public/icon.png";
const successMessage = "Successes!";
class Bark extends NotificationProvider {
@ -30,17 +29,17 @@ class Bark extends NotificationProvider {
}
if (msg != null && heartbeatJSON != null && heartbeatJSON["status"] === UP) {
let title = "UptimeKuma Monitor Up";
let title = "PSS Uptime Monitor Up";
return await this.postNotification(notification, title, msg, barkEndpoint);
}
if (msg != null && heartbeatJSON != null && heartbeatJSON["status"] === DOWN) {
let title = "UptimeKuma Monitor Down";
let title = "PSS Uptime Monitor Down";
return await this.postNotification(notification, title, msg, barkEndpoint);
}
if (msg != null) {
let title = "UptimeKuma Message";
let title = "PSS Uptime Message";
return await this.postNotification(notification, title, msg, barkEndpoint);
}
}
@ -51,15 +50,17 @@ class Bark extends NotificationProvider {
* @param {BeanModel} notification Notification to send
* @returns {string} Additional URL parameters
*/
additionalParameters(notification) {
// set icon to uptime kuma icon, 11kb should be fine
let params = "?icon=" + barkNotificationAvatar;
async additionalParameters(notification) {
// set icon to PSS Uptime icon, 11kb should be fine
const baseURL = await setting("primaryBaseURL");
const iconUrl = baseURL ? baseURL + "/icon.png" : "https://github.com/louislam/uptime-kuma/raw/master/public/icon.png";
let params = "?icon=" + iconUrl;
// grouping all our notifications
if (notification.barkGroup != null) {
params += "&group=" + notification.barkGroup;
} else {
// default name
params += "&group=" + "UptimeKuma";
params += "&group=" + "PSS Uptime";
}
// picked a sound, this should follow system's mute status when arrival
if (notification.barkSound != null) {
@ -101,17 +102,19 @@ class Bark extends NotificationProvider {
// url encode title and subtitle
title = encodeURIComponent(title);
subtitle = encodeURIComponent(subtitle);
const params = this.additionalParameters(notification);
const params = await this.additionalParameters(notification);
result = await axios.get(`${endpoint}/${title}/${subtitle}${params}`, config);
} else {
const baseURL = await setting("primaryBaseURL");
const iconUrl = baseURL ? baseURL + "/icon.png" : "https://github.com/louislam/uptime-kuma/raw/master/public/icon.png";
result = await axios.post(
endpoint,
{
title,
body: subtitle,
icon: barkNotificationAvatar,
icon: iconUrl,
sound: notification.barkSound || "telegraph", // default sound is telegraph
group: notification.barkGroup || "UptimeKuma", // default group is UptimeKuma
group: notification.barkGroup || "PSS Uptime", // default group is PSS Uptime
},
config
);

View File

@ -1,6 +1,7 @@
const NotificationProvider = require("./notification-provider");
const axios = require("axios");
const { DOWN, UP } = require("../../src/util");
const { setting } = require("../util-server");
class Discord extends NotificationProvider {
name = "discord";
@ -41,7 +42,8 @@ class Discord extends NotificationProvider {
content: msg,
};
if (!webhookHasAvatar) {
discordtestdata.avatar_url = "https://github.com/louislam/uptime-kuma/raw/master/public/icon.png";
const baseURL = await setting("primaryBaseURL");
discordtestdata.avatar_url = baseURL ? baseURL + "/icon.png" : "https://github.com/louislam/uptime-kuma/raw/master/public/icon.png";
}
if (notification.discordChannelType === "createNewForumPost") {
discordtestdata.thread_name = notification.postName;
@ -96,7 +98,8 @@ class Discord extends NotificationProvider {
],
};
if (!webhookHasAvatar) {
discorddowndata.avatar_url = "https://github.com/louislam/uptime-kuma/raw/master/public/icon.png";
const baseURL = await setting("primaryBaseURL");
discorddowndata.avatar_url = baseURL ? baseURL + "/icon.png" : "https://github.com/louislam/uptime-kuma/raw/master/public/icon.png";
}
if (notification.discordChannelType === "createNewForumPost") {
discorddowndata.thread_name = notification.postName;
@ -169,7 +172,8 @@ class Discord extends NotificationProvider {
],
};
if (!webhookHasAvatar) {
discordupdata.avatar_url = "https://github.com/louislam/uptime-kuma/raw/master/public/icon.png";
const baseURL = await setting("primaryBaseURL");
discordupdata.avatar_url = baseURL ? baseURL + "/icon.png" : "https://github.com/louislam/uptime-kuma/raw/master/public/icon.png";
}
if (notification.discordChannelType === "createNewForumPost") {

View File

@ -35,7 +35,7 @@ class Feishu extends NotificationProvider {
header: {
title: {
tag: "plain_text",
content: "UptimeKuma Alert: [Down] " + monitorJSON["name"],
content: "PSS Uptime Alert: [Down] " + monitorJSON["name"],
},
template: "red",
},
@ -65,7 +65,7 @@ class Feishu extends NotificationProvider {
header: {
title: {
tag: "plain_text",
content: "UptimeKuma Alert: [UP] " + monitorJSON["name"],
content: "PSS Uptime Alert: [UP] " + monitorJSON["name"],
},
template: "green",
},

View File

@ -20,7 +20,7 @@ class Gotify extends NotificationProvider {
{
message: msg,
priority: notification.gotifyPriority || 8,
title: "Uptime-Kuma",
title: "PSS Uptime",
},
config
);

View File

@ -25,14 +25,14 @@ class HomeAssistant extends NotificationProvider {
await axios.post(
`${notification.homeAssistantUrl.trim().replace(/\/*$/, "")}/api/services/notify/${notificationService}`,
{
title: "Uptime Kuma",
title: "PSS Uptime",
message: msg,
...(notificationService !== "persistent_notification" && {
data: {
name: monitorJSON?.name,
status: heartbeatJSON?.status,
channel: "Uptime Kuma",
icon_url: "https://github.com/louislam/uptime-kuma/blob/master/public/icon.png?raw=true",
channel: "PSS Uptime",
icon_url: (await setting("primaryBaseURL")) ? (await setting("primaryBaseURL")) + "/icon.png" : "https://github.com/louislam/uptime-kuma/blob/master/public/icon.png?raw=true",
},
}),
},

View File

@ -29,7 +29,7 @@ class Keep extends NotificationProvider {
url = url.slice(0, -1);
}
let webhookURL = url + "/alerts/event/uptimekuma";
let webhookURL = url + "/alerts/event/pss-uptime";
config = this.getAxiosConfigWithProxy(config);

View File

@ -38,7 +38,7 @@ class Line extends NotificationProvider {
{
type: "text",
text:
"UptimeKuma Alert: [🔴 Down]\n" +
"PSS Uptime Alert: [🔴 Down]\n" +
"Name: " +
monitorJSON["name"] +
" \n" +
@ -55,7 +55,7 @@ class Line extends NotificationProvider {
{
type: "text",
text:
"UptimeKuma Alert: [✅ Up]\n" +
"PSS Uptime Alert: [✅ Up]\n" +
"Name: " +
monitorJSON["name"] +
" \n" +

View File

@ -26,7 +26,7 @@ class LunaSea extends NotificationProvider {
if (heartbeatJSON["status"] === DOWN) {
let downdata = {
title: "UptimeKuma Alert: " + monitorJSON["name"],
title: "PSS Uptime Alert: " + monitorJSON["name"],
body:
"[🔴 Down] " +
heartbeatJSON["msg"] +
@ -38,7 +38,7 @@ class LunaSea extends NotificationProvider {
if (heartbeatJSON["status"] === UP) {
let updata = {
title: "UptimeKuma Alert: " + monitorJSON["name"],
title: "PSS Uptime Alert: " + monitorJSON["name"],
body:
"[✅ Up] " +
heartbeatJSON["msg"] +

View File

@ -35,7 +35,7 @@ class Ntfy extends NotificationProvider {
if (heartbeatJSON == null) {
let ntfyTestData = {
topic: notification.ntfytopic,
title: (monitorJSON?.name || notification.ntfytopic) + " [Uptime-Kuma]",
title: (monitorJSON?.name || notification.ntfytopic) + " [PSS Uptime]",
message: msg,
priority: notification.ntfyPriority,
tags: ["test_tube"],
@ -61,7 +61,7 @@ class Ntfy extends NotificationProvider {
topic: notification.ntfytopic,
message: heartbeatJSON.msg,
priority: priority,
title: monitorJSON.name + " " + status + " [Uptime-Kuma]",
title: monitorJSON.name + " " + status + " [PSS Uptime]",
tags: tags,
};

View File

@ -26,7 +26,7 @@ class OneBot extends NotificationProvider {
},
};
config = this.getAxiosConfigWithProxy(config);
let pushText = "UptimeKuma Alert: " + msg;
let pushText = "PSS Uptime Alert: " + msg;
let data = {
auto_escape: true,
message: pushText,

View File

@ -33,7 +33,7 @@ class OneChat extends NotificationProvider {
to: notification.recieverId,
bot_id: notification.botId,
type: "text",
message: `UptimeKuma Alert:
message: `PSS Uptime Alert:
[🔴 Down]
Name: ${monitorJSON["name"]}
${heartbeatJSON["msg"]}
@ -45,7 +45,7 @@ Time (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}`,
to: notification.recieverId,
bot_id: notification.botId,
type: "text",
message: `UptimeKuma Alert:
message: `PSS Uptime Alert:
[🟢 Up]
Name: ${monitorJSON["name"]}
${heartbeatJSON["msg"]}

View File

@ -31,7 +31,7 @@ class Pushbullet extends NotificationProvider {
} else if (heartbeatJSON["status"] === DOWN) {
let downData = {
type: "note",
title: "UptimeKuma Alert: " + monitorJSON["name"],
title: "PSS Uptime Alert: " + monitorJSON["name"],
body:
"[🔴 Down] " +
heartbeatJSON["msg"] +
@ -41,7 +41,7 @@ class Pushbullet extends NotificationProvider {
} else if (heartbeatJSON["status"] === UP) {
let upData = {
type: "note",
title: "UptimeKuma Alert: " + monitorJSON["name"],
title: "PSS Uptime Alert: " + monitorJSON["name"],
body:
"[✅ Up] " +
heartbeatJSON["msg"] +

View File

@ -43,12 +43,12 @@ class PushPlus extends NotificationProvider {
* @returns {string} Formatted title
*/
checkStatus(heartbeatJSON, monitorJSON) {
let title = "UptimeKuma Message";
let title = "PSS Uptime Message";
if (heartbeatJSON != null && heartbeatJSON["status"] === UP) {
title = "UptimeKuma Monitor Up " + monitorJSON["name"];
title = "PSS Uptime Monitor Up " + monitorJSON["name"];
}
if (heartbeatJSON != null && heartbeatJSON["status"] === DOWN) {
title = "UptimeKuma Monitor Down " + monitorJSON["name"];
title = "PSS Uptime Monitor Down " + monitorJSON["name"];
}
return title;
}

View File

@ -17,7 +17,7 @@ class Pushy extends NotificationProvider {
{
to: notification.pushyToken,
data: {
message: "Uptime-Kuma",
message: "PSS Uptime",
},
notification: {
body: msg,

View File

@ -42,12 +42,12 @@ class ServerChan extends NotificationProvider {
* @returns {string} Formatted title
*/
checkStatus(heartbeatJSON, monitorJSON) {
let title = "UptimeKuma Message";
let title = "PSS Uptime Message";
if (heartbeatJSON != null && heartbeatJSON["status"] === UP) {
title = "UptimeKuma Monitor Up " + monitorJSON["name"];
title = "PSS Uptime Monitor Up " + monitorJSON["name"];
}
if (heartbeatJSON != null && heartbeatJSON["status"] === DOWN) {
title = "UptimeKuma Monitor Down " + monitorJSON["name"];
title = "PSS Uptime Monitor Down " + monitorJSON["name"];
}
return title;
}

View File

@ -17,7 +17,7 @@ class SIGNL4 extends NotificationProvider {
monitor: monitorJSON,
msg,
// Source system
"X-S4-SourceSystem": "UptimeKuma",
"X-S4-SourceSystem": "PSS Uptime",
monitorUrl: this.extractAddress(monitorJSON),
};
@ -34,11 +34,11 @@ class SIGNL4 extends NotificationProvider {
data.message = msg;
} else if (heartbeatJSON.status === UP) {
data.title = "Uptime Kuma Monitor ✅ Up";
data["X-S4-ExternalID"] = "UptimeKuma-" + monitorJSON.monitorID;
data["X-S4-ExternalID"] = "PSS Uptime-" + monitorJSON.monitorID;
data["X-S4-Status"] = "resolved";
} else if (heartbeatJSON.status === DOWN) {
data.title = "Uptime Kuma Monitor 🔴 Down";
data["X-S4-ExternalID"] = "UptimeKuma-" + monitorJSON.monitorID;
data["X-S4-ExternalID"] = "PSS Uptime-" + monitorJSON.monitorID;
data["X-S4-Status"] = "new";
}

View File

@ -41,9 +41,9 @@ class Slack extends NotificationProvider {
type: "button",
text: {
type: "plain_text",
text: "Visit Uptime Kuma",
text: "Visit PSS Uptime",
},
value: "Uptime-Kuma",
value: "PSS Uptime",
url: baseURL + getMonitorRelativeURL(monitorJSON.id),
});
}

View File

@ -96,7 +96,7 @@ class Splunk extends NotificationProvider {
const baseURL = await setting("primaryBaseURL");
if (baseURL && monitorInfo) {
options.client = "Uptime Kuma";
options.client = "PSS Uptime";
options.client_url = baseURL + getMonitorRelativeURL(monitorInfo.id);
}

View File

@ -17,10 +17,10 @@ class SpugPush extends NotificationProvider {
};
if (heartbeatJSON) {
if (heartbeatJSON["status"] === UP) {
formData.title = `UptimeKuma${monitorJSON["name"]}」 is Up`;
formData.title = `PSS Uptime 「${monitorJSON["name"]}」 is Up`;
formData.content = `[✅ Up] ${heartbeatJSON["msg"]}`;
} else if (heartbeatJSON["status"] === DOWN) {
formData.title = `UptimeKuma${monitorJSON["name"]}」 is Down`;
formData.title = `PSS Uptime 「${monitorJSON["name"]}」 is Down`;
formData.content = `[🔴 Down] ${heartbeatJSON["msg"]}`;
}
}

View File

@ -121,8 +121,8 @@ class Teams extends NotificationProvider {
type: "Image",
width: "32px",
style: "Person",
url: "https://raw.githubusercontent.com/louislam/uptime-kuma/master/public/icon.png",
altText: "Uptime Kuma Logo",
url: iconUrl,
altText: "PSS Uptime Logo",
},
],
},

View File

@ -11,7 +11,7 @@ class TechulusPush extends NotificationProvider {
const okMsg = "Sent Successfully.";
let data = {
title: notification?.pushTitle?.length ? notification.pushTitle : "Uptime-Kuma",
title: notification?.pushTitle?.length ? notification.pushTitle : "PSS Uptime",
body: msg,
timeSensitive: notification.pushTimeSensitive ?? true,
};

View File

@ -38,12 +38,12 @@ class WeCom extends NotificationProvider {
* @returns {object} Message
*/
composeMessage(notification, heartbeatJSON, msg) {
let title = "UptimeKuma Message";
let title = "PSS Uptime Message";
if (msg != null && heartbeatJSON != null && heartbeatJSON["status"] === UP) {
title = "UptimeKuma Monitor Up";
title = "PSS Uptime Monitor Up";
}
if (msg != null && heartbeatJSON != null && heartbeatJSON["status"] === DOWN) {
title = "UptimeKuma Monitor Down";
title = "PSS Uptime Monitor Down";
}
let textObj = {

View File

@ -37,12 +37,12 @@ class WPush extends NotificationProvider {
* @returns {string} Formatted title
*/
checkStatus(heartbeatJSON, monitorJSON) {
let title = "UptimeKuma Message";
let title = "PSS Uptime Message";
if (heartbeatJSON != null && heartbeatJSON["status"] === UP) {
title = "UptimeKuma Monitor Up " + monitorJSON["name"];
title = "PSS Uptime Monitor Up " + monitorJSON["name"];
}
if (heartbeatJSON != null && heartbeatJSON["status"] === DOWN) {
title = "UptimeKuma Monitor Down " + monitorJSON["name"];
title = "PSS Uptime Monitor Down " + monitorJSON["name"];
}
return title;
}

View File

@ -533,7 +533,7 @@ class UptimeKumaServer {
* @returns {string} User-Agent
*/
getUserAgent() {
return "Uptime-Kuma/" + require("../package.json").version;
return "PSS-Uptime/" + require("../package.json").version;
}
/**

View File

@ -212,7 +212,7 @@ exports.pingAsync = function (
*/
exports.kafkaProducerAsync = function (brokers, topic, message, options = {}, saslOptions = {}) {
return new Promise((resolve, reject) => {
const { interval = 20, allowAutoTopicCreation = false, ssl = false, clientId = "Uptime-Kuma" } = options;
const { interval = 20, allowAutoTopicCreation = false, ssl = false, clientId = "PSS-Uptime" } = options;
let connectedToKafka = false;

View File

@ -72,7 +72,7 @@ export default {
this.$parent.notification.brevoSubject = "Notification from Your Uptime Kuma";
}
if (typeof this.$parent.notification.brevoFromName === "undefined") {
this.$parent.notification.brevoFromName = "Uptime Kuma";
this.$parent.notification.brevoFromName = "PSS Uptime";
}
},
};

View File

@ -114,7 +114,7 @@ export default {
},
mounted() {
this.$parent.notification.cellsyntOriginatortype ||= "alpha";
this.$parent.notification.cellsyntOriginator ||= "uptimekuma";
this.$parent.notification.cellsyntOriginator ||= "pss-uptime";
},
};
</script>

View File

@ -60,7 +60,7 @@ export default {
this.$parent.notification.resendSubject = "Notification from Your Uptime Kuma";
}
if (typeof this.$parent.notification.resendFromName === "undefined") {
this.$parent.notification.resendFromName = "Uptime Kuma";
this.$parent.notification.resendFromName = "PSS Uptime";
}
},
};

View File

@ -86,7 +86,7 @@
class="form-control"
required
autocomplete="false"
placeholder='"Uptime Kuma" &lt;example@kuma.pet&gt;'
placeholder='"PSS Uptime" &lt;example@kuma.pet&gt;'
/>
<div class="form-text"></div>
</div>

View File

@ -20,7 +20,7 @@
type="text"
class="form-control"
autocomplete="false"
placeholder="Uptime Kuma"
placeholder="PSS Uptime"
/>
</div>

View File

@ -80,10 +80,10 @@ export default {
},
mounted() {
if (typeof this.$parent.notification.pushTitle === "undefined") {
this.$parent.notification.pushTitle = "Uptime-Kuma";
this.$parent.notification.pushTitle = "PSS Uptime";
}
if (typeof this.$parent.notification.pushChannel === "undefined") {
this.$parent.notification.pushChannel = "uptime-kuma";
this.$parent.notification.pushChannel = "pss-uptime";
}
if (typeof this.$parent.notification.pushSound === "undefined") {
this.$parent.notification.pushSound = "default";

View File

@ -1,8 +1,8 @@
<template>
<div class="d-flex justify-content-center align-items-center">
<div class="logo d-flex flex-column justify-content-center align-items-center">
<object class="my-4" width="200" height="200" data="/icon.svg" />
<div class="fs-4 fw-bold">Uptime Kuma</div>
<img class="my-4" width="200" height="200" src="/logo.png" alt="PSS Uptime Logo" />
<div class="fs-4 fw-bold">PSS Uptime</div>
<div>{{ $t("versionIs", { version: $root.info.version }) }}</div>
<div class="frontend-version">{{ $t("frontendVersionIs", { version: $root.frontendVersion }) }}</div>

View File

@ -1,9 +1,9 @@
{
"languageName": "English",
"setupDatabaseChooseDatabase": "Which database would you like to use?",
"setupDatabaseEmbeddedMariaDB": "You don't need to set anything. This Docker image has embedded and configured MariaDB for you automatically. Uptime Kuma will connect to this database via Unix socket.",
"setupDatabaseEmbeddedMariaDB": "You don't need to set anything. This Docker image has embedded and configured MariaDB for you automatically. PSS Uptime will connect to this database via Unix socket.",
"setupDatabaseMariaDB": "Connect to an external MariaDB database. You need to set the database connection information.",
"setupDatabaseSQLite": "A simple database file, recommended for small-scale deployments. Prior to v2.0.0, Uptime Kuma used SQLite as the default database.",
"setupDatabaseSQLite": "A simple database file, recommended for small-scale deployments. Prior to v2.0.0, PSS Uptime used SQLite as the default database.",
"settingUpDatabaseMSG": "Setting up the database. It may take a while, please be patient.",
"dbName": "Database Name",
"enableSSL": "Enable SSL/TLS",
@ -142,7 +142,7 @@
"Enable Auth": "Enable Auth",
"disableauth.message1": "Are you sure want to {disableAuth}?",
"disable authentication": "disable authentication",
"disableauth.message2": "It is designed for scenarios {intendThirdPartyAuth} in front of Uptime Kuma such as Cloudflare Access, Authelia or other authentication mechanisms.",
"disableauth.message2": "It is designed for scenarios {intendThirdPartyAuth} in front of PSS Uptime such as Cloudflare Access, Authelia or other authentication mechanisms.",
"where you intend to implement third-party authentication": "where you intend to implement third-party authentication",
"Please use this option carefully!": "Please use this option carefully!",
"Logout": "Log out",
@ -411,6 +411,8 @@
"Leave blank to use status page title": "Leave blank to use status page title",
"Refresh Interval": "Refresh Interval",
"Refresh Interval Description": "The status page will do a full site refresh every {0} seconds",
"Logo URL": "Logo URL",
"Enter a logo URL (e.g., /logo.png) or upload using the logo above": "Enter a logo URL (e.g., /logo.png) or upload using the logo above",
"Show Powered By": "Show Powered By",
"Domain Names": "Domain Names",
"signedInDisp": "Signed in as {0}",
@ -449,8 +451,8 @@
"deleteDockerHostMsg": "Are you sure want to delete this docker host for all monitors?",
"socket": "Socket",
"tcp": "TCP / HTTP",
"tailscalePingWarning": "In order to use the Tailscale Ping monitor, you need to install Uptime Kuma without Docker and also install Tailscale client on your server.",
"sipsakPingWarning": "In order to use the SIP Options Ping monitor, you need to install Uptime Kuma without Docker and also install Sipsak client on your server.",
"tailscalePingWarning": "In order to use the Tailscale Ping monitor, you need to install PSS Uptime without Docker and also install Tailscale client on your server.",
"sipsakPingWarning": "In order to use the SIP Options Ping monitor, you need to install PSS Uptime without Docker and also install Sipsak client on your server.",
"Docker Container": "Docker Container",
"Container Name / ID": "Container Name / ID",
"Docker Host": "Docker Host",
@ -477,7 +479,7 @@
"YOUR BOT TOKEN HERE": "YOUR BOT TOKEN HERE",
"chatIDNotFound": "Chat ID is not found; please send a message to this bot first",
"disableCloudflaredNoAuthMsg": "You are in No Auth mode, a password is not required.",
"trustProxyDescription": "Trust 'X-Forwarded-*' headers. If you want to get the correct client IP and your Uptime Kuma is behind a proxy such as Nginx or Apache, you should enable this.",
"trustProxyDescription": "Trust 'X-Forwarded-*' headers. If you want to get the correct client IP and your PSS Uptime is behind a proxy such as Nginx or Apache, you should enable this.",
"wayToGetLineNotifyToken": "You can get an access token from {0}",
"Examples:": "Examples: {0}",
"supportBaleChatID": "Support Direct Chat / Group / Channel's Chat ID",
@ -814,7 +816,7 @@
"Channel Name": "Channel Name",
"Notify Channel": "Notify Channel",
"aboutNotifyChannel": "Notify channel will trigger a desktop or mobile notification for all members of the channel, whether their availability is set to active or away.",
"Uptime Kuma URL": "Uptime Kuma URL",
"Uptime Kuma URL": "PSS Uptime URL",
"setup a new monitor group": "set up a new monitor group",
"openModalTo": "open modal to {0}",
"Add a domain": "Add a domain",
@ -824,7 +826,7 @@
"aboutWebhooks": "More info about Webhooks on: {0}",
"aboutSlackUsername": "Changes the display name of the message sender. If you want to mention someone, include it in the friendly name instead.",
"aboutChannelName": "Enter the channel name on {0} Channel Name field if you want to bypass the Webhook channel. Ex: #other-channel",
"aboutKumaURL": "If you leave the Uptime Kuma URL field blank, it will default to the Project GitHub page.",
"aboutKumaURL": "If you leave the PSS Uptime URL field blank, it will default to the Project GitHub page.",
"smtpDkimSettings": "DKIM Settings",
"smtpDkimDesc": "Please refer to the Nodemailer DKIM {0} for usage.",
"documentation": "documentation",
@ -937,7 +939,7 @@
"pagertreeCritical": "Critical",
"pagertreeResolve": "Auto Resolve",
"pagertreeDoNothing": "Do Nothing",
"wayToGetPagerTreeIntegrationURL": "After creating the Uptime Kuma integration in PagerTree, copy the Endpoint. See full details {0}",
"wayToGetPagerTreeIntegrationURL": "After creating the PSS Uptime integration in PagerTree, copy the Endpoint. See full details {0}",
"lunaseaTarget": "Target",
"lunaseaDeviceID": "Device ID",
"lunaseaUserID": "User ID",
@ -1008,8 +1010,8 @@
"Request Body": "Request Body",
"HTTP Method": "HTTP Method",
"webhookPostMethodDesc": "POST is good for most modern HTTP servers.",
"webhookGetMethodDesc": "GET sends data as query parameters and does not allow configuring a body. Useful for triggering Uptime Kuma Push monitors.",
"wayToGetFlashDutyKey": "To integrate Uptime Kuma with Flashduty: Go to Channels > Select a channel > Integrations > Add a new integration, choose Uptime Kuma, and copy the Push URL.",
"webhookGetMethodDesc": "GET sends data as query parameters and does not allow configuring a body. Useful for triggering PSS Uptime Push monitors.",
"wayToGetFlashDutyKey": "To integrate PSS Uptime with Flashduty: Go to Channels > Select a channel > Integrations > Add a new integration, choose PSS Uptime, and copy the Push URL.",
"FlashDuty Severity": "Severity",
"FlashDuty Push URL": "Push URL",
"FlashDuty Push URL Placeholder": "Copy from the alerting integration page",
@ -1054,7 +1056,7 @@
"Remote Browser not found!": "Remote Browser not found!",
"remoteBrowsersDescription": "Remote Browsers are an alternative to running Chromium locally. Set up with a service like browserless.io or connect to your own",
"self-hosted container": "self-hosted container",
"remoteBrowserToggle": "By default Chromium runs inside the Uptime Kuma container. You can use a remote browser by toggling this switch.",
"remoteBrowserToggle": "By default Chromium runs inside the PSS Uptime container. You can use a remote browser by toggling this switch.",
"useRemoteBrowser": "Use a Remote Browser",
"deleteRemoteBrowserMessage": "Are you sure want to delete this Remote Browser for all monitors?",
"Screenshot Delay": "Screenshot Delay (waits {milliseconds})",
@ -1328,7 +1330,8 @@
"mtls-auth-server-ca-label": "CA",
"mtls-auth-server-ca-placeholder": "Server CA",
"avgPing": "Avg Ping",
"Uptime Kuma": "Uptime Kuma",
"Uptime Kuma": "PSS Uptime",
"PSS Uptime": "PSS Uptime",
"maxPing": "Max Ping",
"minPing": "Min Ping",
"Setup Instructions": "Setup Instructions",

View File

@ -473,7 +473,8 @@
"Remove Token": "移除 Token",
"Start": "启动",
"Stop": "停止",
"Uptime Kuma": "Uptime Kuma",
"Uptime Kuma": "PSS Uptime",
"PSS Uptime": "PSS Uptime",
"Add New Status Page": "添加新的状态页",
"Slug": "路径",
"Accept characters:": "可接受的字符:",

View File

@ -463,7 +463,8 @@
"Remove Token": "移除權杖",
"Start": "開始",
"Stop": "停止",
"Uptime Kuma": "Uptime Kuma",
"Uptime Kuma": "PSS Uptime",
"PSS Uptime": "PSS Uptime",
"Add New Status Page": "新增狀態頁",
"Slug": "Slug",
"Accept characters:": "可用字元:",

View File

@ -18,8 +18,8 @@
to="/dashboard"
class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none"
>
<object class="bi me-2 ms-4" width="40" height="40" data="/icon.svg" />
<span class="fs-4 title">{{ $t("Uptime Kuma") }}</span>
<img class="bi me-2 ms-4" width="40" height="40" src="/logo.png" alt="PSS Uptime Logo" />
<span class="fs-4 title">{{ $t("PSS Uptime") }}</span>
</router-link>
<a
@ -120,8 +120,8 @@
<!-- Mobile header -->
<header v-else class="d-flex flex-wrap justify-content-center pt-2 pb-2 mb-3">
<router-link to="/dashboard" class="d-flex align-items-center text-dark text-decoration-none">
<object class="bi" width="40" height="40" data="/icon.svg" />
<span class="fs-4 title ms-2">Uptime Kuma</span>
<img class="bi" width="40" height="40" src="/logo.png" alt="PSS Uptime Logo" />
<span class="fs-4 title ms-2">PSS Uptime</span>
</router-link>
</header>

View File

@ -154,7 +154,7 @@ export default {
* @returns {string} Correctly formatted path including port numbers
*/
icon(icon) {
if (icon === "/icon.svg") {
if (icon === "/logo.png") {
return icon;
} else {
return getResBaseURL() + icon;

View File

@ -83,7 +83,7 @@ export default {
* @returns {string} Correctly formatted path including port numbers
*/
icon(icon) {
if (icon === "/icon.svg") {
if (icon === "/logo.png") {
return icon;
} else {
return getResBaseURL() + icon;

View File

@ -6,16 +6,16 @@
to="/"
class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none"
>
<object class="bi me-2 ms-4" width="40" height="40" data="/icon.svg" />
<span class="fs-4 title">Uptime Kuma</span>
<img class="bi me-2 ms-4" width="40" height="40" src="/logo.png" alt="PSS Uptime Logo" />
<span class="fs-4 title">PSS Uptime</span>
</router-link>
</header>
<!-- Mobile header -->
<header v-else class="d-flex flex-wrap justify-content-center pt-2 pb-2 mb-3">
<router-link to="/dashboard" class="d-flex align-items-center text-dark text-decoration-none">
<object class="bi" width="40" height="40" data="/icon.svg" />
<span class="fs-4 title ms-2">Uptime Kuma</span>
<img class="bi" width="40" height="40" src="/logo.png" alt="PSS Uptime Logo" />
<span class="fs-4 title ms-2">PSS Uptime</span>
</router-link>
</header>

View File

@ -3,8 +3,8 @@
<div class="form">
<form @submit.prevent="submit">
<div>
<object width="64" height="64" data="/icon.svg" />
<div style="font-size: 28px; font-weight: bold; margin-top: 5px">Uptime Kuma</div>
<img width="64" height="64" src="/logo.png" alt="PSS Uptime Logo" />
<div style="font-size: 28px; font-weight: bold; margin-top: 5px">PSS Uptime</div>
</div>
<p class="mt-3">

View File

@ -2,8 +2,8 @@
<div v-if="show" class="form-container">
<form @submit.prevent="submit">
<div>
<object width="64" height="64" data="/icon.svg" />
<div style="font-size: 28px; font-weight: bold; margin-top: 5px">Uptime Kuma</div>
<img width="64" height="64" src="/logo.png" alt="PSS Uptime Logo" />
<div style="font-size: 28px; font-weight: bold; margin-top: 5px">PSS Uptime</div>
</div>
<div v-if="info.runningSetup" class="mt-5">

View File

@ -64,6 +64,20 @@
</select>
</div>
<!-- Logo URL Input -->
<div class="my-3">
<label for="logo-url" class="form-label">{{ $t("Logo URL") }}</label>
<input
id="logo-url"
v-model="imgDataUrl"
type="text"
class="form-control"
placeholder="/logo.png or data:image/..."
data-testid="logo-url-input"
/>
<div class="form-text">{{ $t("Enter a logo URL (e.g., /logo.png) or upload using the logo above") }}</div>
</div>
<div class="my-3 form-check form-switch">
<input
id="showTags"
@ -261,7 +275,6 @@
:width="128"
:height="128"
:langType="$i18n.locale"
img-format="png"
:noCircle="true"
:noSquare="false"
@crop-success="cropSuccess"
@ -569,7 +582,7 @@
<p v-if="config.showPoweredBy" data-testid="powered-by">
{{ $t("Powered by") }}
<a target="_blank" rel="noopener noreferrer" href="https://github.com/louislam/uptime-kuma">
{{ $t("Uptime Kuma") }}
{{ $t("PSS Uptime") }}
</a>
</p>
@ -685,7 +698,7 @@ export default {
incident: null,
previousIncident: null,
showImageCropUpload: false,
imgDataUrl: "/icon.svg",
imgDataUrl: "/logo.png",
loadedTheme: false,
loadedData: false,
baseURL: "",
@ -1200,7 +1213,7 @@ export default {
},
/**
* Reset logo image to default (public/icon.svg)
* Reset logo image to default (public/logo.png)
* @returns {void}
*/
resetToDefaultImage() {
@ -1208,7 +1221,7 @@ export default {
return;
}
this.imgDataUrl = "/icon.svg";
this.imgDataUrl = "/logo.png";
this.config.icon = this.imgDataUrl;
toast.success(this.$t("imageResetConfirmation"));
},

View File

@ -17,7 +17,7 @@ const jsonata = require("jsonata");
exports.isDev = process.env.NODE_ENV === "development";
exports.isNode = typeof process !== "undefined" && ((_a = process === null || process === void 0 ? void 0 : process.versions) === null || _a === void 0 ? void 0 : _a.node);
const dayjs = exports.isNode ? require("dayjs") : dayjs_1.default;
exports.appName = "Uptime Kuma";
exports.appName = "PSS Uptime";
exports.DOWN = 0;
exports.UP = 1;
exports.PENDING = 2;

View File

@ -28,7 +28,7 @@ export const isNode = typeof process !== "undefined" && process?.versions?.node;
*/
const dayjs = isNode ? require("dayjs") : dayjsFrontend;
export const appName = "Uptime Kuma";
export const appName = "PSS Uptime";
export const DOWN = 0;
export const UP = 1;
export const PENDING = 2;

View File

@ -1,7 +1,7 @@
import { test } from "@playwright/test";
import { getSqliteDatabaseExists, login, screenshot, takeSqliteSnapshot } from "../util-test";
test.describe("Uptime Kuma Setup", () => {
test.describe("PSS Uptime Setup", () => {
test.skip(() => getSqliteDatabaseExists(), "Must only run once per session");
test.afterEach(async ({ page }, testInfo) => {