From 3dda5938f2180c4af2b9edd6f165c196c707da1c Mon Sep 17 00:00:00 2001 From: Raphael Bernhart Date: Fri, 21 Jan 2022 15:39:49 +0100 Subject: [PATCH 001/103] =?UTF-8?q?=F0=9F=92=84=20Add=20condition=20to=20d?= =?UTF-8?q?iv=20tag=20for=20styling=20reasons?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/PublicGroupList.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/PublicGroupList.vue b/src/components/PublicGroupList.vue index f30edcef5..bd68e94e0 100644 --- a/src/components/PublicGroupList.vue +++ b/src/components/PublicGroupList.vue @@ -41,7 +41,7 @@ {{ monitor.element.name }} -
+
From c57b2c4d287ac1ac9242ca3bc99a72236bc0606c Mon Sep 17 00:00:00 2001 From: Raphael Bernhart Date: Fri, 21 Jan 2022 17:13:24 +0100 Subject: [PATCH 002/103] =?UTF-8?q?=F0=9F=92=84=20Fix=20spacing=20to=20get?= =?UTF-8?q?=20pixel=20perfectness?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/app.scss | 2 +- src/components/PublicGroupList.vue | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/assets/app.scss b/src/assets/app.scss index cec644676..f4d994629 100644 --- a/src/assets/app.scss +++ b/src/assets/app.scss @@ -339,7 +339,7 @@ textarea.form-control { .item { display: block; text-decoration: none; - padding: 13px 15px 10px 15px; + padding: 15px; border-radius: 10px; transition: all ease-in-out 0.15s; diff --git a/src/components/PublicGroupList.vue b/src/components/PublicGroupList.vue index bd68e94e0..334282d82 100644 --- a/src/components/PublicGroupList.vue +++ b/src/components/PublicGroupList.vue @@ -33,8 +33,8 @@ + + From f23baf9c2241284fed55b2b47a88c5efe7970574 Mon Sep 17 00:00:00 2001 From: DasCanard Date: Tue, 24 May 2022 23:14:27 +0200 Subject: [PATCH 065/103] Added Push Monitor to Discord Notifications --- server/notification-providers/discord.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/server/notification-providers/discord.js b/server/notification-providers/discord.js index 77b04d9d3..28ead7b7a 100644 --- a/server/notification-providers/discord.js +++ b/server/notification-providers/discord.js @@ -55,8 +55,8 @@ class Discord extends NotificationProvider { value: monitorJSON["name"], }, { - name: "Service URL / Address", - value: address, + name: monitorJSON["type"] === "push" ? "Service Type" : "Service URL", + value: monitorJSON["type"] === "push" ? "Heartbeat" : address, }, { name: "Time (UTC)", @@ -90,8 +90,8 @@ class Discord extends NotificationProvider { value: monitorJSON["name"], }, { - name: "Service URL", - value: address.startsWith("http") ? "[Visit Service](" + address + ")" : address, + name: monitorJSON["type"] === "push" ? "Service Type" : "Service URL", + value: monitorJSON["type"] === "push" ? "Heartbeat" : address.startsWith("http") ? "[Visit Service](" + address + ")" : address, }, { name: "Time (UTC)", @@ -99,7 +99,7 @@ class Discord extends NotificationProvider { }, { name: "Ping", - value: heartbeatJSON["ping"] + "ms", + value: heartbeatJSON["ping"] == null ? "N/A" : heartbeatJSON["ping"] + " ms", }, ], }], From 5830f1e0b5c0bced9904e2db67af875d0d224422 Mon Sep 17 00:00:00 2001 From: Marc Hagen Date: Wed, 16 Feb 2022 23:09:22 +0100 Subject: [PATCH 066/103] [feat] Adding PagerDuty notification --- server/notification-providers/pagerduty.js | 113 +++++++++++++++++++++ server/notification.js | 2 + src/components/notifications/PagerDuty.vue | 40 ++++++++ src/components/notifications/index.js | 2 + src/languages/en.js | 9 ++ 5 files changed, 166 insertions(+) create mode 100644 server/notification-providers/pagerduty.js create mode 100644 src/components/notifications/PagerDuty.vue diff --git a/server/notification-providers/pagerduty.js b/server/notification-providers/pagerduty.js new file mode 100644 index 000000000..86e9a0992 --- /dev/null +++ b/server/notification-providers/pagerduty.js @@ -0,0 +1,113 @@ +const NotificationProvider = require("./notification-provider"); +const axios = require("axios"); +const { UP, DOWN, getMonitorRelativeURL } = require("../../src/util"); +const { setting } = require("../util-server"); +let successMessage = "Sent Successfully."; + +class PagerDuty extends NotificationProvider { + name = "PagerDuty"; + + /** + * @inheritdoc + */ + async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { + try { + if (heartbeatJSON == null) { + const title = "Uptime Kuma Alert"; + const monitor = { + type: "ping", + url: "Uptime Kuma Test Button", + }; + return this.postNotification(notification, title, msg, monitor); + } + + if (heartbeatJSON.status === UP) { + const title = "Uptime Kuma Monitor ✅ Up"; + const eventAction = notification.pagerdutyAutoResolve || null; + + return this.postNotification(notification, title, heartbeatJSON.msg, monitorJSON, eventAction); + } + + if (heartbeatJSON.status === DOWN) { + const title = "Uptime Kuma Monitor 🔴 Down"; + return this.postNotification(notification, title, heartbeatJSON.msg, monitorJSON, "trigger"); + } + } catch (error) { + this.throwGeneralAxiosError(error); + } + } + + /** + * Check if result is successful, result code should be in range 2xx + * @param {Object} result Axios response object + * @throws {Error} The status code is not in range 2xx + */ + checkResult(result) { + if (result.status == null) { + throw new Error("PagerDuty notification failed with invalid response!"); + } + if (result.status < 200 || result.status >= 300) { + throw new Error("PagerDuty notification failed with status code " + result.status); + } + } + + /** + * Send the message + * @param {BeanModel} notification Message title + * @param {string} title Message title + * @param {string} body Message + * @param {Object} monitorInfo Monitor details (For Up/Down only) + * @param {?string} eventAction Action event for PagerDuty (trigger, acknowledge, resolve) + * @returns {string} + */ + async postNotification(notification, title, body, monitorInfo, eventAction = "trigger") { + + if (eventAction == null) { + return "No action required"; + } + + let monitorUrl; + if (monitorInfo.type === "port") { + monitorUrl = monitorInfo.hostname; + if (monitorInfo.port) { + monitorUrl += ":" + monitorInfo.port; + } + } else if (monitorInfo.hostname != null) { + monitorUrl = monitorInfo.hostname; + } else { + monitorUrl = monitorInfo.url; + } + + const options = { + method: "POST", + url: notification.pagerdutyIntegrationUrl, + headers: { "Content-Type": "application/json" }, + data: { + payload: { + summary: `[${title}] [${monitorInfo.name}] ${body}`, + severity: notification.pagerdutyPriority || "warning", + source: monitorUrl, + }, + routing_key: notification.pagerdutyIntegrationKey, + event_action: eventAction, + dedup_key: "Uptime Kuma/" + monitorInfo.id, + } + }; + + const baseURL = await setting("primaryBaseURL"); + if (baseURL && monitorInfo) { + options.client = "Uptime Kuma"; + options.client_url = baseURL + getMonitorRelativeURL(monitorInfo.id); + } + + let result = await axios.request(options); + this.checkResult(result); + if (result.statusText != null) { + return "PagerDuty notification succeed: " + result.statusText; + } + + return successMessage; + } +} + +module.exports = PagerDuty; diff --git a/server/notification.js b/server/notification.js index 269e94440..d0b6f40d9 100644 --- a/server/notification.js +++ b/server/notification.js @@ -29,6 +29,7 @@ const SerwerSMS = require("./notification-providers/serwersms"); const Stackfield = require("./notification-providers/stackfield"); const WeCom = require("./notification-providers/wecom"); const GoogleChat = require("./notification-providers/google-chat"); +const PagerDuty = require("./notification-providers/pagerduty"); const Gorush = require("./notification-providers/gorush"); const Alerta = require("./notification-providers/alerta"); const OneBot = require("./notification-providers/onebot"); @@ -74,6 +75,7 @@ class Notification { new Stackfield(), new WeCom(), new GoogleChat(), + new PagerDuty(), new Gorush(), new Alerta(), new OneBot(), diff --git a/src/components/notifications/PagerDuty.vue b/src/components/notifications/PagerDuty.vue new file mode 100644 index 000000000..73f604437 --- /dev/null +++ b/src/components/notifications/PagerDuty.vue @@ -0,0 +1,40 @@ + + + diff --git a/src/components/notifications/index.js b/src/components/notifications/index.js index 496d35fa0..37beb24d3 100644 --- a/src/components/notifications/index.js +++ b/src/components/notifications/index.js @@ -27,6 +27,7 @@ import SerwerSMS from "./SerwerSMS.vue"; import Stackfield from "./Stackfield.vue"; import WeCom from "./WeCom.vue"; import GoogleChat from "./GoogleChat.vue"; +import PagerDuty from "./PagerDuty.vue"; import Gorush from "./Gorush.vue"; import Alerta from "./Alerta.vue"; import OneBot from "./OneBot.vue"; @@ -67,6 +68,7 @@ const NotificationFormList = { "stackfield": Stackfield, "WeCom": WeCom, "GoogleChat": GoogleChat, + "PagerDuty": PagerDuty, "gorush": Gorush, "alerta": Alerta, "OneBot": OneBot, diff --git a/src/languages/en.js b/src/languages/en.js index d634e5456..aa6737dd8 100644 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -331,6 +331,8 @@ export default { info: "info", warning: "warning", danger: "danger", + error: "error", + critical: "critical", primary: "primary", light: "light", dark: "dark", @@ -371,6 +373,13 @@ export default { smtpDkimHashAlgo: "Hash Algorithm (Optional)", smtpDkimheaderFieldNames: "Header Keys to sign (Optional)", smtpDkimskipFields: "Header Keys not to sign (Optional)", + wayToGetPagerDutyKey: "You can get this by going to Service -> Service Directory -> (Select a service) -> Integrations -> Add integration. Here you can search for \"Events API V2\". More info {0}", + "Integration Key": "Integration Key", + "Integration URL": "Integration URL", + "Auto resolve or acknowledged": "Auto resolve or acknowledged", + "do nothing": "do nothing", + "auto acknowledged": "auto acknowledged", + "auto resolve": "auto resolve", gorush: "Gorush", alerta: "Alerta", alertaApiEndpoint: "API Endpoint", From 5566b038c84792a7f59502e050d5eafa89641fd3 Mon Sep 17 00:00:00 2001 From: burakurer <58211081+burakurer@users.noreply.github.com> Date: Wed, 25 May 2022 17:35:05 +0300 Subject: [PATCH 067/103] Update tr-TR.js --- src/languages/tr-TR.js | 399 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 383 insertions(+), 16 deletions(-) diff --git a/src/languages/tr-TR.js b/src/languages/tr-TR.js index 0edd60206..08cafa2c3 100644 --- a/src/languages/tr-TR.js +++ b/src/languages/tr-TR.js @@ -1,6 +1,7 @@ export default { languageName: "Türkçe", checkEverySecond: "{0} Saniyede bir kontrol et.", + retryCheckEverySecond: "{0} Saniyede bir dene.", retriesDescription: "Servisin kapalı olarak işaretlenmeden ve bir bildirim gönderilmeden önce maksimum yeniden deneme sayısı", ignoreTLSError: "HTTPS web siteleri için TLS/SSL hatasını yoksay", upsideDownModeDescription: "Servisin durumunu tersine çevirir. Servis çalışıyorsa kapalı olarak işaretler.", @@ -12,12 +13,20 @@ export default { pauseDashboardHome: "Durdur", deleteMonitorMsg: "Servisi silmek istediğinden emin misin?", deleteNotificationMsg: "Bu bildirimi tüm servisler için silmek istediğinden emin misin?", + dnsPortDescription: "DNS sunucusu bağlantı noktası. Varsayılan değer 53'tür. Bağlantı noktasını istediğiniz zaman değiştirebilirsiniz.", resolverserverDescription: "Cloudflare varsayılan sunucudur, çözümleyici sunucusunu istediğiniz zaman değiştirebilirsiniz.", rrtypeDescription: "İzlemek istediğiniz servisin RR-Tipini seçin", pauseMonitorMsg: "Durdurmak istediğinden emin misin?", + enableDefaultNotificationDescription: "Bu bildirim her yeni serviste aktif olacaktır. Bildirimi servisler için ayrı ayrı deaktive edebilirsiniz. ", clearEventsMsg: "Bu servisin bütün kayıtlarını silmek istediğinden emin misin?", clearHeartbeatsMsg: "Bu servis için tüm sağlık durumunu silmek istediğinden emin misin?", confirmClearStatisticsMsg: "Tüm istatistikleri silmek istediğinden emin misin?", + importHandleDescription: "Aynı isimdeki bütün servisleri ve bildirimleri atlamak için 'Var olanı atla' seçiniz. 'Üzerine yaz' var olan bütün servisleri ve bildirimleri silecektir. ", + confirmImportMsg: "Yedeği içeri aktarmak istediğinize emin misiniz? Lütfen doğru içeri aktarma seçeneğini seçtiğinizden emin olunuz. ", + twoFAVerifyLabel: "Lütfen tokeni yazarak 2FA doğrulamanın çalıştığından emin olunuz.", + tokenValidSettingsMsg: "Token geçerli! Şimdi 2FA ayarlarını kaydedebilirsiniz. ", + confirmEnableTwoFAMsg: "2FA'ı etkinleştirmek istediğinizden emin misiniz?", + confirmDisableTwoFAMsg: "2FA'ı devre dışı bırakmak istediğinize emin misiniz?", Settings: "Ayarlar", Dashboard: "Panel", "New Update": "Yeni Güncelleme", @@ -25,6 +34,7 @@ export default { Appearance: "Görünüm", Theme: "Tema", General: "Genel", + "Primary Base URL": "Birincil Temel URL", Version: "Versiyon", "Check Update On GitHub": "GitHub'da Güncellemeyi Kontrol Edin", List: "Liste", @@ -62,10 +72,14 @@ export default { Port: "Port", "Heartbeat Interval": "Servis Test Aralığı", Retries: "Yeniden deneme", + "Heartbeat Retry Interval": "Sağlık Durumları Tekrar Deneme Sıklığı", Advanced: "Gelişmiş", "Upside Down Mode": "Ters/Düz Modu", "Max. Redirects": "Maksimum Yönlendirme", "Accepted Status Codes": "Kabul Edilen Durum Kodları", + "Push URL": "Push URL", + needPushEvery: "Bu URL'yi her {0} saniyede bir aramalısınız.", + pushOptionalParams: "İsteğe bağlı parametreler: {0}", Save: "Kaydet", Notifications: "Bildirimler", "Not available, please setup.": "Atanmış bildirim yöntemi yok. Ayarlardan belirleyebilirsiniz.", @@ -109,28 +123,19 @@ export default { "Last Result": "En son sonuçlar", "Create your admin account": "Yönetici hesabınızı oluşturun", "Repeat Password": "Şifrenizi tekrar girin", - respTime: "Cevap Süresi (ms)", - notAvailableShort: "N/A", - Create: "Yarat", - "Clear Data": "Verileri Temizle", - Events: "Olaylar", - Heartbeats: "Sağlık Durumları", - "Auto Get": "Otomatik Al", - retryCheckEverySecond: "{0} Saniyede bir dene.", - enableDefaultNotificationDescription: "Bu bildirim her yeni serviste aktif olacaktır. Bildirimi servisler için ayrı ayrı deaktive edebilirsiniz. ", - importHandleDescription: "Aynı isimdeki bütün servisleri ve bildirimleri atlamak için 'Var olanı atla' seçiniz. 'Üzerine yaz' var olan bütün servisleri ve bildirimleri silecektir. ", - confirmImportMsg: "Yedeği içeri aktarmak istediğinize emin misiniz? Lütfen doğru içeri aktarma seçeneğini seçtiğinizden emin olunuz. ", - twoFAVerifyLabel: "Lütfen tokeni yazarak 2FA doğrulamanın çalıştığından emin olunuz.", - tokenValidSettingsMsg: "Token geçerli! Şimdi 2FA ayarlarını kaydedebilirsiniz. ", - confirmEnableTwoFAMsg: "2FA'ı etkinleştirmek istediğinizden emin misiniz?", - confirmDisableTwoFAMsg: "2FA'ı devre dışı bırakmak istediğinize emin misiniz?", - "Heartbeat Retry Interval": "Sağlık Durumları Tekrar Deneme Sıklığı", "Import Backup": "Yedeği içe aktar", "Export Backup": "Yedeği dışa aktar", Export: "Dışa aktar", Import: "İçe aktar", + respTime: "Cevap Süresi (ms)", + notAvailableShort: "N/A", "Default enabled": "Varsayılan etkinleştirilmiş", "Apply on all existing monitors": "Var olan bütün servislere uygula", + Create: "Oluştur", + "Clear Data": "Verileri Temizle", + Events: "Olaylar", + Heartbeats: "Sağlık Durumları", + "Auto Get": "Otomatik Al", backupDescription: "Bütün servisleri ve bildirimleri JSON dosyasına yedekleyebilirsiniz.", backupDescription2: "Not: Geçmiş ve etkinlik verileri içinde değildir.", backupDescription3: "Dışa aktarma dosyasında bildirim tokeni gibi hassas veriler bulunur, dikkatli bir şekilde saklayınız.", @@ -149,4 +154,366 @@ export default { "Two Factor Authentication": "İki Faktörlü Kimlik Doğrulama (2FA)", Active: "Aktif", Inactive: "İnaktif", + Token: "Token", + "Show URI": "URI'yi göster", + Tags: "Etiketler", + "Add New below or Select...": "Aşağıya Yeni Ekle veya Seç...", + "Tag with this name already exist.": "Bu ada sahip etiket zaten var.", + "Tag with this value already exist.": "Bu değere sahip etiket zaten var.", + color: "renk", + "value (optional)": "değer (isteğe bağlı)", + Gray: "Gri", + Red: "Kırmızı", + Orange: "Turuncu", + Green: "Yeşil", + Blue: "Mavi", + Indigo: "Çivit mavisi", + Purple: "Mor", + Pink: "Pembe", + "Search...": "Ara...", + "Avg. Ping": "Ortalama Ping", + "Avg. Response": "Ortalama Cevap Süresi", + "Entry Page": "Giriş Sayfası", + statusPageNothing: "Burada hiçbir şey yok, lütfen bir grup veya servis ekleyin.", + "No Services": "Hizmet Yok", + "All Systems Operational": "Tüm Sistemler Operasyonel", + "Partially Degraded Service": "Kısmen Bozulmuş Hizmet", + "Degraded Service": "Bozulmuş Hizmet", + "Add Group": "Grup Ekle", + "Add a monitor": "Servis Ekle", + "Edit Status Page": "Durum Sayfasını Düzenle", + "Go to Dashboard": "Panele Git", + "Status Page": "Durum Sayfası", + "Status Pages": "Durum Sayfaları", + defaultNotificationName: "My {notification} Alert ({number})", + here: "burada", + Required: "Gerekli", + telegram: "Telegram", + "Bot Token": "Bot Token", + wayToGetTelegramToken: "{0} adresinden bir token alabilirsiniz.", + "Chat ID": "Chat ID", + supportTelegramChatID: "Doğrudan Sohbet / Grup / Kanalın Sohbet Kimliğini Destekleyin", + wayToGetTelegramChatID: "Bot'a bir mesaj göndererek ve chat_id'yi görüntülemek için bu URL'ye giderek sohbet kimliğinizi alabilirsiniz:", + "YOUR BOT TOKEN HERE": "BOT TOKENİNİZ BURADA", + chatIDNotFound: "Chat ID bulunamadı; lütfen önce bu bota bir mesaj gönderin", + webhook: "Webhook", + "Post URL": "Post URL", + "Content Type": "Content Type", + webhookJsonDesc: "{0}, Express.js gibi tüm modern HTTP sunucuları için iyidir", + webhookFormDataDesc: "{multipart} PHP için iyidir. JSON'un {decodeFunction} ile ayrıştırılması gerekecek", + smtp: "E-mail (SMTP)", + secureOptionNone: "Hiçbiri / STARTTLS (25, 587)", + secureOptionTLS: "TLS (465)", + "Ignore TLS Error": "TLS Hatasını Yoksay", + "From Email": "E-postadan", + emailCustomSubject: "Özel Konu", + "To Email": "E-postaya", + smtpCC: "CC", + smtpBCC: "BCC", + discord: "Discord", + "Discord Webhook URL": "Discord Webhook URL", + wayToGetDiscordURL: "Bunu Sunucu Ayarları -> Entegrasyonlar -> Webhook Oluştur'a giderek alabilirsiniz.", + "Bot Display Name": "Botun Görünecek Adı", + "Prefix Custom Message": "Önek Özel Mesaj", + "Hello @everyone is...": "Merhaba {'@'}everyone ...", + teams: "Microsoft Teams", + "Webhook URL": "Webhook URL", + wayToGetTeamsURL: "Bir webhook URL'sinin nasıl oluşturulacağını öğrenebilirsiniz {0}.", + signal: "Signal", + Number: "Numara", + Recipients: "Alıcılar", + needSignalAPI: "REST API ile bir signal istemciniz olması gerekiyor.", + wayToCheckSignalURL: "Nasıl kurulacağını görmek için bu URL'yi kontrol edebilirsiniz:", + signalImportant: "ÖNEMLİ: Alıcılarda grupları ve sayıları karıştıramazsınız!", + gotify: "Gotify", + "Application Token": "Uygulama Tokeni", + "Server URL": "Sunucu URL", + Priority: "Öncelik", + slack: "Slack", + "Icon Emoji": "İkon Emoji", + "Channel Name": "Kanal Adı", + "Uptime Kuma URL": "Uptime Kuma URL", + aboutWebhooks: "Webhook hakkında daha fazla bilgi: {0}", + aboutChannelName: "Webhook kanalını atlamak istiyorsanız, {0} Kanal Adı alanına kanal adını girin. Ör: #diğer-kanal", + aboutKumaURL: "Uptime Kuma URL alanını boş bırakırsanız, varsayılan olarak Project GitHub sayfası olur.", + emojiCheatSheet: "Emoji cheat sheet: {0}", + "rocket.chat": "Rocket.Chat", + pushover: "Pushover", + pushy: "Pushy", + PushByTechulus: "Push by Techulus", + octopush: "Octopush", + promosms: "PromoSMS", + clicksendsms: "ClickSend SMS", + lunasea: "LunaSea", + apprise: "Apprise (50'den fazla Bildirim hizmetini destekler)", + GoogleChat: "Google Chat (sadece Google Workspace)", + pushbullet: "Pushbullet", + line: "Line Messenger", + mattermost: "Mattermost", + "User Key": "Kullancı Anahtarı", + Device: "Cihaz", + "Message Title": "Mesaj Başlığı", + "Notification Sound": "Bilgilendirme sesi", + "More info on:": "Daha fazla bilgi: {0}", + pushoverDesc1: "Acil durum önceliği (2), yeniden denemeler arasında varsayılan olarak 30 saniyelik bir zaman aşımına sahiptir ve 1 saat sonra sona erecektir.", + pushoverDesc2: "Farklı cihazlara bildirim göndermek istiyorsanız Cihaz alanını doldurunuz.", + "SMS Type": "SMS Tipi", + octopushTypePremium: "Premium (Hızlı - uyarı için önerilir)", + octopushTypeLowCost: "Düşük Maliyet (Yavaş - bazen operatör tarafından engellenir)", + checkPrice: "{0} fiyatlarını kontrol edin:", + apiCredentials: "API kimlik bilgileri", + octopushLegacyHint: "Octopush'un (2011-2020) eski sürümünü mü yoksa yeni sürümünü mü kullanıyorsunuz?", + "Check octopush prices": "Octopush fiyatlarını kontrol edin {0}.", + octopushPhoneNumber: "Telefon numarası (uluslararası biçim, örneğin: +33612345678) ", + octopushSMSSender: "SMS Gönderici Adı : 3-11 alfanümerik karakter ve boşluk (a-zA-Z0-9)", + "LunaSea Device ID": "LunaSea Cihaz ID", + "Apprise URL": "Apprise URL", + "Example:": "Örnek: {0}", + "Read more:": "Daha fazla oku: {0}", + "Status:": "Durum: {0}", + "Read more": "Daha fazla oku", + appriseInstalled: "Apprise yüklendi.", + appriseNotInstalled: "Appris yüklü değil. {0}", + "Access Token": "Erişim Tokeni", + "Channel access token": "Kanal erişim tokeni", + "Line Developers Console": "Line Geliştirici Konsolu", + lineDevConsoleTo: "Line Geliştirici Konsolu - {0}", + "Basic Settings": "Temel Ayarlar", + "User ID": "Kullanıcı ID", + "Messaging API": "Messaging API", + wayToGetLineChannelToken: "Önce {0}'e erişin, bir sağlayıcı ve kanal (Messaging API) oluşturun, ardından yukarıda belirtilen menü öğelerinden kanal erişim tokenini ve kullanıcı id alabilirsiniz.", + "Icon URL": "Simge URL", + aboutIconURL: "Varsayılan profil resmini geçersiz kılmak için \"Simge URL\" bölümünde bir resme bağlantı sağlayabilirsiniz. Simge Emojisi ayarlanmışsa kullanılmayacaktır.", + aboutMattermostChannelName: "Kanal adını \"Kanal Adı\" alanına girerek Webhook'un gönderi yaptığı varsayılan kanalı geçersiz kılabilirsiniz. Bunun Mattermost Webhook ayarlarında etkinleştirilmesi gerekir. Ör: #diğer-kanal", + matrix: "Matrix", + promosmsTypeEco: "SMS ECO - ucuz ama yavaş ve genellikle aşırı yüklü. Yalnızca Polonyalı alıcılarla sınırlıdır.", + promosmsTypeFlash: "SMS FLASH - Mesaj, alıcı cihazda otomatik olarak gösterilecektir. Yalnızca Polonyalı alıcılarla sınırlıdır.", + promosmsTypeFull: "SMS FULL - Premium SMS katmanı, Gönderici Adınızı kullanabilirsiniz (Önce adınızı kaydetmeniz gerekir). Uyarılar için güvenilir.", + promosmsTypeSpeed: "SMS HIZI - Sistemde en yüksek öncelik. Çok hızlı ve güvenilir ancak maliyetli (SMS FULL fiyatının yaklaşık iki katı).", + promosmsPhoneNumber: "Telefon numarası (Polonyalı alıcı için Alan kodlarını atlayabilirsiniz)", + promosmsSMSSender: "SMS Gönderici Adı : Ön kayıtlı ad veya varsayılanlardan biri: InfoSMS, SMS Info, MaxSMS, INFO, SMS", + "Feishu WebHookUrl": "Feishu WebHookURL", + matrixHomeserverURL: "Homeserver URL (http(s):// ve isteğe bağlı olarak bağlantı noktası ile)", + "Internal Room Id": "Internal Room ID", + matrixDesc1: "Internal Room ID'sini, Matrix istemcinizdeki oda ayarlarının gelişmiş bölümüne bakarak bulabilirsiniz. !QMdRCpUIfLwsfjxye6:home.server gibi görünmelidir.", + matrixDesc2: "Hesabınıza ve katıldığınız tüm odalara tam erişime izin vereceğinden, yeni bir kullanıcı oluşturmanız ve kendi Matrix kullanıcınızın erişim belirtecini kullanmamanız şiddetle tavsiye edilir. Bunun yerine, yeni bir kullanıcı oluşturun ve onu yalnızca bildirimi almak istediğiniz odaya davet edin. {0} komutunu çalıştırarak erişim tokenini alabilirsiniz.", + Method: "Yöntem", + Body: "Gövde", + Headers: "Başlıklar", + PushUrl: "Push URL", + HeadersInvalidFormat: "İstek başlıkları geçerli JSON değil:", + BodyInvalidFormat: "İstek gövdesi geçerli JSON değil:", + "Monitor History": "Servis Geçmişi", + clearDataOlderThan: "{0} gün boyunca izleme geçmişi verilerini saklayın.", + PasswordsDoNotMatch: "Parolalar uyuşmuyor.", + records: "kayıtlar", + "One record": "Bir Kayıt", + steamApiKeyDescription: "Bir Steam Oyun Sunucusunu izlemek için bir Steam Web-API anahtarına ihtiyacınız vardır. API anahtarınızı buradan kaydedebilirsiniz: ", + "Current User": "Şu anki kullanıcı", + topic: "Başlık", + topicExplanation: "İzlenecek MQTT servisi", + successMessage: "Başarılı Mesaj", + successMessageExplanation: "Başarılı olarak kabul edilecek MQTT mesajı", + recent: "Son", + Done: "Tamamlandı", + Info: "Bilgi", + Security: "Güvenlik", + "Steam API Key": "Steam API Anahtarı", + "Shrink Database": "Veritabanını Küçült", + "Pick a RR-Type...": "Bir RR-Tipi seçin...", + "Pick Accepted Status Codes...": "Kabul Edilen Durum Kodlarını Seçin...", + Default: "Varsayılan", + "HTTP Options": "HTTP Ayarları", + "Create Incident": "Olay Oluştur", + Title: "Başlık", + Content: "İçerik", + Style: "Stil", + info: "info", + warning: "warning", + danger: "danger", + primary: "primary", + light: "light", + dark: "dark", + Post: "Post", + "Please input title and content": "Lütfen başlık ve içerik girin", + Created: "Oluşturuldu", + "Last Updated": "Son Güncelleme", + Unpin: "Unpin", + "Switch to Light Theme": "Açık Temaya Geç", + "Switch to Dark Theme": "Karanlık Temaya Geç", + "Show Tags": "Etiketleri Göster", + "Hide Tags": "Etiketleri Gizle", + Description: "Açıklama", + "No monitors available.": "Kullanılabilir servis yok.", + "Add one": "Bir tane ekle", + "No Monitors": "Servis Yok", + "Untitled Group": "Adsız Grup", + Services: "Hizmetler", + Discard: "İptal Et", + Cancel: "İptal Et", + "Powered by": "Powered by", + shrinkDatabaseDescription: "SQLite için veritabanı VACUUM'unu tetikleyin. Veritabanınız 1.10.0'dan sonra oluşturulduysa, AUTO_VACUUM zaten etkinleştirilmiştir ve bu eyleme gerek yoktur.", + serwersms: "SerwerSMS.pl", + serwersmsAPIUser: "API Kullanıcı Adı (webapi_ öneki dahil)", + serwersmsAPIPassword: "API Şifre", + serwersmsPhoneNumber: "Telefon numarası", + serwersmsSenderName: "SMS Gönderici Adı (müşteri portalı üzerinden kayıtlı)", + stackfield: "Stackfield", + Customize: "Özelleştirme", + "Custom Footer": "Özel Altbilgi", + "Custom CSS": "Özel CSS", + smtpDkimSettings: "DKIM Ayarları", + smtpDkimDesc: "Kullanım için lütfen Nodemailer DKIM'e {0} bakın.", + documentation: "belgeler", + smtpDkimDomain: "Alan adı", + smtpDkimKeySelector: "Anahtar Seçici", + smtpDkimPrivateKey: "Özel anahtar", + smtpDkimHashAlgo: "Hash Algoritması (Opsiyonel)", + smtpDkimheaderFieldNames: "İmzalanacak Başlık Anahtarları (Opsiyonel)", + smtpDkimskipFields: "İmzalamayacak Başlık Anahtarları (Opsiyonel)", + gorush: "Gorush", + alerta: "Alerta", + alertaApiEndpoint: "API Endpoint", + alertaEnvironment: "Environment", + alertaApiKey: "API Key", + alertaAlertState: "Uyarı Durumu", + alertaRecoverState: "Kurtarma Durumu", + deleteStatusPageMsg: "Bu durum sayfasını silmek istediğinizden emin misiniz?", + Proxies: "Proxy'ler", + default: "Varsayılan", + enabled: "Etkinleştirilmiş", + setAsDefault: "Varsayılan Olarak Ayarla", + deleteProxyMsg: "Bu proxy'yi tüm servisler için silmek istediğinizden emin misiniz?", + proxyDescription: "Proxy'lerin çalışması için bir servise atanması gerekir.", + enableProxyDescription: "Bu proxy, etkinleştirilene kadar izleme isteklerini etkilemeyecektir. Aktivasyon durumuna göre proxy'yi tüm servislerden geçici olarak devre dışı bırakabilirsiniz.", + setAsDefaultProxyDescription: "Bu proxy, yeni servisler için varsayılan olarak etkinleştirilecektir. Yine de proxy'yi her servis için ayrı ayrı devre dışı bırakabilirsiniz.", + "Certificate Chain": "Sertifika Zinciri", + Valid: "Geçerli", + Invalid: "Geçersiz", + AccessKeyId: "AccessKey ID", + SecretAccessKey: "AccessKey Secret", + PhoneNumbers: "PhoneNumbers", + TemplateCode: "TemplateCode", + SignName: "SignName", + "Sms template must contain parameters: ": "Sms şablonu parametreleri içermelidir:", + "Bark Endpoint": "Bark Endpoint", + WebHookUrl: "WebHookUrl", + SecretKey: "SecretKey", + "For safety, must use secret key": "Güvenlik için gizli anahtar kullanılmalıdır", + "Device Token": "Cihaz Tokeni", + Platform: "Platform", + iOS: "iOS", + Android: "Android", + Huawei: "Huawei", + High: "High", + Retry: "Retry", + Topic: "Topic", + "WeCom Bot Key": "WeCom Bot Key", + "Setup Proxy": "Proxy kur", + "Proxy Protocol": "Proxy Protokolü", + "Proxy Server": "Proxy Sunucusu", + "Proxy server has authentication": "Proxy sunucusunun kimlik doğrulaması var", + User: "Kullanıcı", + Installed: "Yüklenmiş", + "Not installed": "Yüklü değil", + Running: "Çalışıyor", + "Not running": "Çalışmıyor", + "Remove Token": "Tokeni Kaldır", + Start: "Başlat", + Stop: "Durdur", + "Uptime Kuma": "Uptime Kuma", + "Add New Status Page": "Yeni Durum Sayfası Ekle", + Slug: "Slug", + "Accept characters:": "Kabul edilen karakterler:", + startOrEndWithOnly: "Yalnızca {0} ile başlayın veya bitirin", + "No consecutive dashes": "Ardışık tire yok", + Next: "Sonraki", + "The slug is already taken. Please choose another slug.": "Slug zaten alındı. Lütfen başka bir slug seçin.", + "No Proxy": "Proxy Yok", + "HTTP Basic Auth": "HTTP Temel Yetkilendirme", + "New Status Page": "Yeni Durum Sayfası", + "Page Not Found": "Sayfa bulunamadı", + "Reverse Proxy": "Ters Proxy", + Backup: "Yedek", + About: "Hakkında", + wayToGetCloudflaredURL: "(Cloudflared'i {0} adresinden indirin)", + cloudflareWebsite: "Cloudflare Website", + "Message:": "Mesaj:", + "Don't know how to get the token? Please read the guide:": "Tokeni nasıl alacağınızı bilmiyor musunuz? Lütfen kılavuzu okuyun:", + "The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "Halihazırda Cloudflare Tüneli üzerinden bağlanıyorsanız mevcut bağlantı kesilebilir. Durdurmak istediğinden emin misin? Onaylamak için mevcut şifrenizi yazın.", + "Other Software": "Diğer Yazılımlar", + "For example: nginx, Apache and Traefik.": "Örneğin: nginx, Apache ve Traefik.", + "Please read": "Lütfen oku", + "Subject:": "Başlık:", + "Valid To:": "Geçerlilik:", + "Days Remaining:": "Kalan günler:", + "Issuer:": "Veren:", + "Fingerprint:": "Parmak izi:", + "No status pages": "Durum sayfası yok", + "Domain Name Expiry Notification": "Alan Adı Sona Erme Bildirimi", + Proxy: "Proxy", + "Date Created": "Tarih Oluşturuldu", + onebotHttpAddress: "OneBot HTTP Adresi", + onebotMessageType: "OneBot Mesaj Türü", + onebotGroupMessage: "Grup", + onebotPrivateMessage: "Özel", + onebotUserOrGroupId: "Grup/Kullanıcı Kimliği", + onebotSafetyTips: "Güvenlik için erişim tokeni ayarlamalısınız", + "PushDeer Key": "PushDeer Anahtarı", + "Footer Text": "Altbilgi metni", + "Show Powered By": "\"Powered by\" kısmını göster", + "Domain Names": "Alan isimleri", + signedInDisp: "{0} olarak oturum açıldı", + signedInDispDisabled: "Yetkilendirme Devre Dışı.", + "Certificate Expiry Notification": "Sertifika Sona Erme Bildirimi", + "API Username": "API Kullanıc Adı", + "API Key": "API Anahtarı", + "Recipient Number": "Alıcı Numarası", + "From Name/Number": "İsimden/Numaradan", + "Leave blank to use a shared sender number.": "Paylaşılan bir gönderen numarası kullanmak için boş bırakın.", + "Octopush API Version": "Octopush API Sürümü", + "Legacy Octopush-DM": "Eski Octopush-DM", + "endpoint": "endpoint", + octopushAPIKey: "Kontrol panelindeki HTTP API kimlik bilgilerinden \"API Key\"", + octopushLogin: "Kontrol panelindeki HTTP API kimlik bilgilerinden \"Login\"", + promosmsLogin: "API Oturum Açma Adı", + promosmsPassword: "API Şifresi", + "pushoversounds pushover": "Pushover (varsayılan)", + "pushoversounds bike": "Bisiklet", + "pushoversounds bugle": "Boru", + "pushoversounds cashregister": "Yazar kasa", + "pushoversounds classical": "Klasik", + "pushoversounds cosmic": "Kozmik", + "pushoversounds falling": "Düşme", + "pushoversounds gamelan": "Oyun Alanı", + "pushoversounds incoming": "Gelen", + "pushoversounds intermission": "Ara", + "pushoversounds magic": "Büyü", + "pushoversounds mechanical": "Mekanik", + "pushoversounds pianobar": "Piano", + "pushoversounds siren": "Siren", + "pushoversounds spacealarm": "Uzay Alarmı", + "pushoversounds tugboat": "Römorkör", + "pushoversounds alien": "Uzaylı Alarmı (uzun)", + "pushoversounds climb": "Tırmanış (uzun)", + "pushoversounds persistent": "Sürekli (uzun)", + "pushoversounds echo": "Pushover Yankı (uzun)", + "pushoversounds updown": "Yukarı Aşağı (uzun)", + "pushoversounds vibrate": "Sadece titreşim", + "pushoversounds none": "Yok (sessiz)", + pushyAPIKey: "Gizli API Anahtarı", + pushyToken: "Cihaz tokeni", + "Show update if available": "Varsa güncellemeyi göster", + "Also check beta release": "Ayrıca beta sürümünü kontrol edin", + "Using a Reverse Proxy?": "Ters Proxy mi Kullanıyorsunuz?", + "Check how to config it for WebSocket": "WebSocket için nasıl yapılandırılacağını kontrol edin", + "Steam Game Server": "Steam Oyun Sunucusu", + "Most likely causes:": "En olası nedenler:", + "The resource is no longer available.": "Kaynak artık mevcut değil.", + "There might be a typing error in the address.": "Adreste bir yazım hatası olabilir.", + "What you can try:": "Ne deneyebilirsin:", + "Retype the address.": "Adresi tekrar yazın.", + "Go back to the previous page.": "Bir önceki sayfaya geri git.", + "Coming Soon": "Yakında gelecek", + wayToGetClickSendSMSToken: "API Kullanıcı Adı ve API Anahtarını {0} adresinden alabilirsiniz.", }; From 0a8c922abf0b5919d4b6df83b08de133f164eb4d Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Wed, 25 May 2022 23:34:47 +0800 Subject: [PATCH 068/103] Fix default value of pagerduty-integration-url --- src/components/notifications/PagerDuty.vue | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/components/notifications/PagerDuty.vue b/src/components/notifications/PagerDuty.vue index 73f604437..059a9aef2 100644 --- a/src/components/notifications/PagerDuty.vue +++ b/src/components/notifications/PagerDuty.vue @@ -8,7 +8,7 @@
- +
@@ -36,5 +36,10 @@ export default { components: { HiddenInput, }, + mounted() { + if (typeof this.$parent.notification.pagerdutyIntegrationUrl === "undefined") { + this.$parent.notification.pagerdutyIntegrationUrl = "https://events.pagerduty.com/v2/enqueue"; + } + } }; From 46ee149b700e26c517eaabb1ccf6db111e1f5482 Mon Sep 17 00:00:00 2001 From: Nelson Chan Date: Thu, 26 May 2022 12:12:29 +0800 Subject: [PATCH 069/103] Chore: Slightly improve design --- src/components/settings/Notifications.vue | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/components/settings/Notifications.vue b/src/components/settings/Notifications.vue index 187f4b7d5..9e9553c3a 100644 --- a/src/components/settings/Notifications.vue +++ b/src/components/settings/Notifications.vue @@ -26,7 +26,7 @@
{{ day }} {{ $t("day(s)") }} -
@@ -95,6 +95,11 @@ export default {