commit
60e7824ff0
@ -0,0 +1,5 @@
|
||||
-- You should not modify if this have pushed to Github, unless it does serious wrong with the db.
|
||||
BEGIN TRANSACTION;
|
||||
ALTER TABLE monitor_group
|
||||
ADD send_url BOOLEAN DEFAULT 0 NOT NULL;
|
||||
COMMIT;
|
File diff suppressed because it is too large
Load Diff
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 893 B |
@ -0,0 +1,54 @@
|
||||
const https = require("https");
|
||||
const http = require("http");
|
||||
const CacheableLookup = require("cacheable-lookup");
|
||||
|
||||
class CacheableDnsHttpAgent {
|
||||
|
||||
static cacheable = new CacheableLookup();
|
||||
|
||||
static httpAgentList = {};
|
||||
static httpsAgentList = {};
|
||||
|
||||
/**
|
||||
* Register cacheable to global agents
|
||||
*/
|
||||
static registerGlobalAgent() {
|
||||
this.cacheable.install(http.globalAgent);
|
||||
this.cacheable.install(https.globalAgent);
|
||||
}
|
||||
|
||||
static install(agent) {
|
||||
this.cacheable.install(agent);
|
||||
}
|
||||
|
||||
/**
|
||||
* @var {https.AgentOptions} agentOptions
|
||||
* @return {https.Agent}
|
||||
*/
|
||||
static getHttpsAgent(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];
|
||||
}
|
||||
|
||||
/**
|
||||
* @var {http.AgentOptions} agentOptions
|
||||
* @return {https.Agents}
|
||||
*/
|
||||
static getHttpAgent(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,
|
||||
};
|
@ -0,0 +1,50 @@
|
||||
const NotificationProvider = require("./notification-provider");
|
||||
const axios = require("axios");
|
||||
const { setting } = require("../util-server");
|
||||
const { getMonitorRelativeURL, UP, DOWN } = require("../../src/util");
|
||||
|
||||
class AlertNow extends NotificationProvider {
|
||||
|
||||
name = "AlertNow";
|
||||
|
||||
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
|
||||
let okMsg = "Sent Successfully.";
|
||||
try {
|
||||
let textMsg = "";
|
||||
let status = "open";
|
||||
let eventType = "ERROR";
|
||||
let eventId = new Date().toISOString().slice(0, 10).replace(/-/g, "");
|
||||
|
||||
if (heartbeatJSON && heartbeatJSON.status === UP) {
|
||||
textMsg = `[${heartbeatJSON.name}] ✅ Application is back online`;
|
||||
status = "close";
|
||||
eventType = "INFO";
|
||||
eventId += `_${heartbeatJSON.name.replace(/\s/g, "")}`;
|
||||
} else if (heartbeatJSON && heartbeatJSON.status === DOWN) {
|
||||
textMsg = `[${heartbeatJSON.name}] 🔴 Application went down`;
|
||||
}
|
||||
|
||||
textMsg += ` - ${msg}`;
|
||||
|
||||
const baseURL = await setting("primaryBaseURL");
|
||||
if (baseURL && monitorJSON) {
|
||||
textMsg += ` >> ${baseURL + getMonitorRelativeURL(monitorJSON.id)}`;
|
||||
}
|
||||
|
||||
const data = {
|
||||
"summary": textMsg,
|
||||
"status": status,
|
||||
"event_type": eventType,
|
||||
"event_id": eventId,
|
||||
};
|
||||
|
||||
await axios.post(notification.alertNowWebhookURL, data);
|
||||
return okMsg;
|
||||
} catch (error) {
|
||||
this.throwGeneralAxiosError(error);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = AlertNow;
|
@ -0,0 +1,165 @@
|
||||
const { R } = require("redbean-node");
|
||||
const { log } = require("../src/util");
|
||||
|
||||
class Settings {
|
||||
|
||||
/**
|
||||
* Example:
|
||||
* {
|
||||
* key1: {
|
||||
* value: "value2",
|
||||
* timestamp: 12345678
|
||||
* },
|
||||
* key2: {
|
||||
* value: 2,
|
||||
* timestamp: 12345678
|
||||
* },
|
||||
* }
|
||||
* @type {{}}
|
||||
*/
|
||||
static cacheList = {
|
||||
|
||||
};
|
||||
|
||||
static cacheCleaner = null;
|
||||
|
||||
/**
|
||||
* Retrieve value of setting based on key
|
||||
* @param {string} key Key of setting to retrieve
|
||||
* @returns {Promise<any>} Value
|
||||
*/
|
||||
static async get(key) {
|
||||
|
||||
// Start cache clear if not started yet
|
||||
if (!Settings.cacheCleaner) {
|
||||
Settings.cacheCleaner = setInterval(() => {
|
||||
log.debug("settings", "Cache Cleaner is just started.");
|
||||
for (key in Settings.cacheList) {
|
||||
if (Date.now() - Settings.cacheList[key].timestamp > 60 * 1000) {
|
||||
log.debug("settings", "Cache Cleaner deleted: " + key);
|
||||
delete Settings.cacheList[key];
|
||||
}
|
||||
}
|
||||
|
||||
}, 60 * 1000);
|
||||
}
|
||||
|
||||
// Query from cache
|
||||
if (key in Settings.cacheList) {
|
||||
const v = Settings.cacheList[key].value;
|
||||
log.debug("settings", `Get Setting (cache): ${key}: ${v}`);
|
||||
return v;
|
||||
}
|
||||
|
||||
let value = await R.getCell("SELECT `value` FROM setting WHERE `key` = ? ", [
|
||||
key,
|
||||
]);
|
||||
|
||||
try {
|
||||
const v = JSON.parse(value);
|
||||
log.debug("settings", `Get Setting: ${key}: ${v}`);
|
||||
|
||||
Settings.cacheList[key] = {
|
||||
value: v,
|
||||
timestamp: Date.now()
|
||||
};
|
||||
|
||||
return v;
|
||||
} catch (e) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the specified setting to specified value
|
||||
* @param {string} key Key of setting to set
|
||||
* @param {any} value Value to set to
|
||||
* @param {?string} type Type of setting
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
static async set(key, value, type = null) {
|
||||
|
||||
let bean = await R.findOne("setting", " `key` = ? ", [
|
||||
key,
|
||||
]);
|
||||
if (!bean) {
|
||||
bean = R.dispense("setting");
|
||||
bean.key = key;
|
||||
}
|
||||
bean.type = type;
|
||||
bean.value = JSON.stringify(value);
|
||||
await R.store(bean);
|
||||
|
||||
Settings.deleteCache([ key ]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get settings based on type
|
||||
* @param {string} type The type of setting
|
||||
* @returns {Promise<Bean>}
|
||||
*/
|
||||
static async getSettings(type) {
|
||||
let list = await R.getAll("SELECT `key`, `value` FROM setting WHERE `type` = ? ", [
|
||||
type,
|
||||
]);
|
||||
|
||||
let result = {};
|
||||
|
||||
for (let row of list) {
|
||||
try {
|
||||
result[row.key] = JSON.parse(row.value);
|
||||
} catch (e) {
|
||||
result[row.key] = row.value;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set settings based on type
|
||||
* @param {string} type Type of settings to set
|
||||
* @param {Object} data Values of settings
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
static async setSettings(type, data) {
|
||||
let keyList = Object.keys(data);
|
||||
|
||||
let promiseList = [];
|
||||
|
||||
for (let key of keyList) {
|
||||
let bean = await R.findOne("setting", " `key` = ? ", [
|
||||
key
|
||||
]);
|
||||
|
||||
if (bean == null) {
|
||||
bean = R.dispense("setting");
|
||||
bean.type = type;
|
||||
bean.key = key;
|
||||
}
|
||||
|
||||
if (bean.type === type) {
|
||||
bean.value = JSON.stringify(data[key]);
|
||||
promiseList.push(R.store(bean));
|
||||
}
|
||||
}
|
||||
|
||||
await Promise.all(promiseList);
|
||||
|
||||
Settings.deleteCache(keyList);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {string[]} keyList
|
||||
*/
|
||||
static deleteCache(keyList) {
|
||||
for (let key of keyList) {
|
||||
delete Settings.cacheList[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
Settings,
|
||||
};
|
@ -0,0 +1,13 @@
|
||||
<template>
|
||||
<div class="mb-3">
|
||||
<label for="alertnow-webhook-url" class="form-label">{{ $t("Webhook URL") }}<span style="color: red;"><sup>*</sup></span></label>
|
||||
<input id="alertnow-webhook-url" v-model="$parent.notification.alertNowWebhookURL" type="text" class="form-control" required>
|
||||
|
||||
<div class="form-text">
|
||||
<span style="color: red;"><sup>*</sup></span>{{ $t("Required") }}
|
||||
<i18n-t tag="p" keypath="aboutWebhooks" style="margin-top: 8px;">
|
||||
<a href="https://service.opsnow.com/docs/alertnow/en/user-guide-alertnow-en.html#standard" target="_blank">{{ $t("here") }}</a>
|
||||
</i18n-t>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
@ -0,0 +1,539 @@
|
||||
export default {
|
||||
languageName: "Euskara",
|
||||
checkEverySecond: "Egiaztatu {0} segunduro",
|
||||
retryCheckEverySecond: "Errepikatu {0} segunduro",
|
||||
retriesDescription: "Zerbitzua erorita markatu eta jakinarazpena bidali aurretik egindako saiakera kopuru maximoa",
|
||||
ignoreTLSError: "Ezikusiarena egin TLS/SSL erroreei HTTPS webguneetan",
|
||||
upsideDownModeDescription: "Alderantzizkatu erortze egoera. Zerbitzua martxan badago, ERORITA markatuko du.",
|
||||
maxRedirectDescription: "Jarraitu beharreko berbideratze kopuru maximoa. Jarri 0 berbideratzeak desgaitzeko.",
|
||||
acceptedStatusCodesDescription: "Hautatu erantzun ona kontsideratzen diren egoera kodeak.",
|
||||
passwordNotMatchMsg: "Errepikatutako pasahitza ez dator bat.",
|
||||
notificationDescription: "Jakinarazpenak monitorizazio funtzio bati asignatu behar zaizkio.",
|
||||
keywordDescription: "Bilatu gako-hitza HTML edo JSON erantzunean. Bilaketan maiuskulak kontuan hartzen dira.",
|
||||
pauseDashboardHome: "Gelditu",
|
||||
deleteMonitorMsg: "Ziur zaude monitorizazio hau ezabatu nahi duzula?",
|
||||
deleteNotificationMsg: "Ziur zaude jakinarazpen hau monitorizazio guztientzat ezabatu nahi duzula?",
|
||||
dnsPortDescription: "DNS zerbitzari portua. Defektuz 53. Nahi duzunean aldatu dezakezu portua.",
|
||||
resolverserverDescription: "Cloudflare zerbitzari lehenetsia da. Edozein unetan alda dezakezu ebazteko zerbitzaria.",
|
||||
rrtypeDescription: "Hautatu kontrolatu nahi duzun RR mota",
|
||||
enableDefaultNotificationDescription: "Jakinarazpen hau monitore berrientzat gaituko da defektuz. Baina monitorizazio bakoitzarentzat jakinarazpena desgaitu dezakezu.",
|
||||
pauseMonitorMsg: "Ziur zaude gelditu egin nahi duzula?",
|
||||
clearEventsMsg: "Ziur zaude monitorizazio honen gertaera guztiak ezabatu nahi dituzula?",
|
||||
clearHeartbeatsMsg: "Ziur zaude monitorizazio honen pultsu guztiak ezabatu nahi dituzula?",
|
||||
confirmClearStatisticsMsg: "Ziur zaude estatistika GUZTIAK ezabatu nahi dituzula?",
|
||||
importHandleDescription: "Aukeratu 'existitzen bada', izen bereko monitore edo jakinarazpen bakoitza saltatu nahi baduzu. Lehendik dauden kontrol eta jakinarazpen guztiak ezabatuko ditu 'Gainidatzi' aukerak.",
|
||||
confirmImportMsg: "Ziur zaude segurtasun-kopia inportatu nahi duzula? Egiaztatu inportatzeko aukera zuzena hautatu duzula.",
|
||||
twoFAVerifyLabel: "Sartu zure tokena 2FA egiaztatzeko:",
|
||||
tokenValidSettingsMsg: "Tokenak balio du! Orain 2FA konfigurazioa gorde dezakezu.",
|
||||
confirmEnableTwoFAMsg: "Ziur zaude 2FA gaitu nahi duzula?",
|
||||
confirmDisableTwoFAMsg: "Ziur zaude 2FA desgaitu nahi duzula?",
|
||||
Settings: "Ezarpenak",
|
||||
Dashboard: "Arbela",
|
||||
"New Update": "Eguneraketa berria",
|
||||
Language: "Hizkuntza",
|
||||
Appearance: "Itxura",
|
||||
Theme: "Gaia",
|
||||
General: "Orokorra",
|
||||
"Primary Base URL": "Oinarrizkoa URL",
|
||||
Version: "Bertsioa",
|
||||
"Check Update On GitHub": "Egiaztatu eguneraketa GitHuben",
|
||||
List: "Zerrenda",
|
||||
Add: "Gehitu",
|
||||
"Add New Monitor": "Gehitu monitorizazio berria",
|
||||
"Quick Stats": "Estatistika azkarrak",
|
||||
Up: "Erabilgarri",
|
||||
Down: "Erorita",
|
||||
Pending: "Zain",
|
||||
Unknown: "Ezezaguna",
|
||||
Pause: "Gelditu",
|
||||
Name: "Izena",
|
||||
Status: "Egoera",
|
||||
DateTime: "Data eta ordua",
|
||||
Message: "Mezua",
|
||||
"No important events": "Gertaera garrantzitsurik ez",
|
||||
Resume: "Jarraitu",
|
||||
Edit: "Editatu",
|
||||
Delete: "Ezabatu",
|
||||
Current: "Unekoa",
|
||||
Uptime: "Martxan",
|
||||
"Cert Exp.": "Ziurtagiri iraun.",
|
||||
day: "egun | egun",
|
||||
"-day": "-egun",
|
||||
hour: "ordua",
|
||||
"-hour": "-ordu",
|
||||
Response: "Erantzuna",
|
||||
Ping: "Ping",
|
||||
"Monitor Type": "Monitorizazio mota",
|
||||
Keyword: "Gakohitza",
|
||||
"Friendly Name": "Izen xumea",
|
||||
URL: "URLa",
|
||||
Hostname: "Ostalari izena",
|
||||
Port: "Portua",
|
||||
"Heartbeat Interval": "Pultsu interbaloak",
|
||||
Retries: "Errepikapenak",
|
||||
"Heartbeat Retry Interval": "Pultsu errepikatze interbaloak",
|
||||
Advanced: "Aurreratua",
|
||||
"Upside Down Mode": "Alderantzizkako modua",
|
||||
"Max. Redirects": "Berbideratze max.",
|
||||
"Accepted Status Codes": "Onartutako egoera kodeak",
|
||||
"Push URL": "Push URLa",
|
||||
needPushEvery: "URL hau {0} segunduro deitu beharko zenuke.",
|
||||
pushOptionalParams: "Hautazko parametroak: {0}",
|
||||
Save: "Gorde",
|
||||
Notifications: "Jakinarazpenak",
|
||||
"Not available, please setup.": "Ez dago eskuragarri, ezarri mesedez.",
|
||||
"Setup Notification": "Ezarri jakinarazpenak",
|
||||
Light: "Argia",
|
||||
Dark: "Iluna",
|
||||
Auto: "Auto",
|
||||
"Theme - Heartbeat Bar": "Gaia - Pultsu barra",
|
||||
Normal: "Normala",
|
||||
Bottom: "Behean",
|
||||
None: "Bat ere ez",
|
||||
Timezone: "Timezone",
|
||||
"Search Engine Visibility": "Bilatzaile ikurgarritasuna",
|
||||
"Allow indexing": "Onartu indexatzea",
|
||||
"Discourage search engines from indexing site": "Discourage search engines from indexing site",
|
||||
"Change Password": "Aldatu pasahitza",
|
||||
"Current Password": "Uneko pasahitza",
|
||||
"New Password": "Pasahitz berria",
|
||||
"Repeat New Password": "Errepikatu pasahitz berria",
|
||||
"Update Password": "Eguneratu pasahitza",
|
||||
"Disable Auth": "Desgaitu Auth",
|
||||
"Enable Auth": "Gaitu Auth",
|
||||
"disableauth.message1": "Ziur zaude <strong>autentifikazioa desgaitu</strong> nahi duzula?",
|
||||
"disableauth.message2": "Egoera jakin batzuetarako diseinatuta dago, Uptime Kumaren <strong>aurrean hirugarrengo autentifikazio batzuek jartzeko</strong> (Cloudflare Access, Authelia edo beste autentifikazio-mekanismo batzuk).",
|
||||
"Please use this option carefully!": "Mesedez, kontuz erabili aukera hau!",
|
||||
Logout: "Saioa amaitu",
|
||||
Leave: "Utzi",
|
||||
"I understand, please disable": "Ulertzen dut, mesedez desgaitu",
|
||||
Confirm: "Baieztatu",
|
||||
Yes: "Bai",
|
||||
No: "Ez",
|
||||
Username: "Erabiltzailea",
|
||||
Password: "Pasahitza",
|
||||
"Remember me": "Gogora nazazu",
|
||||
Login: "Saioa hasi",
|
||||
"No Monitors, please": "Monitorizaziorik ez, mesedez",
|
||||
"add one": "gehitu bat",
|
||||
"Notification Type": "Jakinarazpen mota",
|
||||
Email: "Emaila",
|
||||
Test: "Testa",
|
||||
"Certificate Info": "Ziurtagiri informazioa",
|
||||
"Resolver Server": "Ebazpen-zerbitzaria",
|
||||
"Resource Record Type": "Baliabideen erregistro mota",
|
||||
"Last Result": "Azken emaitza",
|
||||
"Create your admin account": "Sortu zure admin kontua",
|
||||
"Repeat Password": "Errepikatu pasahitza",
|
||||
"Import Backup": "segurtasun-kopia inportatu",
|
||||
"Export Backup": "segurtasun-kopia esportatu",
|
||||
Export: "Esportatu",
|
||||
Import: "Inportatu",
|
||||
respTime: "Erantz. denbora (ms)",
|
||||
notAvailableShort: "N/A",
|
||||
"Default enabled": "Lehenetsia gaituta",
|
||||
"Apply on all existing monitors": "Aplikatu existitzen diren monitorizazio guztietan",
|
||||
Create: "Sortu",
|
||||
"Clear Data": "Garbitu datuak",
|
||||
Events: "Gertaerak",
|
||||
Heartbeats: "Pultsuak",
|
||||
"Auto Get": "Auto Get",
|
||||
backupDescription: "Monitore eta jakinarazpen guztien segurtasun-kopiak egin ditzakezu JSON fitxategi batean.",
|
||||
backupDescription2: "Oharra: ez dira historia eta gertaeren datuak sartzen.",
|
||||
backupDescription3: "Datu sentikorrak, hala nola jakinarazpen tokenak, esportazio-fitxategian sartzen dira; mesedez, gorde esportazioa modu seguruan.",
|
||||
alertNoFile: "Mesedez hautatu inportatzeko fitxategia.",
|
||||
alertWrongFileType: "Mesedez hautatu JSON fitxategia.",
|
||||
"Clear all statistics": "Garbitu estatistika guztiak",
|
||||
"Skip existing": "Saltatu existitzen bada",
|
||||
Overwrite: "Gainidatzi",
|
||||
Options: "Aukerak",
|
||||
"Keep both": "Biak mantendu",
|
||||
"Verify Token": "Egiaztatu Tokena",
|
||||
"Setup 2FA": "Ezarri 2FA",
|
||||
"Enable 2FA": "Gaitu 2FA",
|
||||
"Disable 2FA": "Desgaitu 2FA",
|
||||
"2FA Settings": "2FA ezarpenak",
|
||||
"Two Factor Authentication": "Bi aldetako autentifikazioa (2FA)",
|
||||
Active: "Aktibo",
|
||||
Inactive: "Inaktibo",
|
||||
Token: "Tokena",
|
||||
"Show URI": "Erakutsi URIa",
|
||||
Tags: "Etiketak",
|
||||
"Add New below or Select...": "Gehitu beste bat behean edo hautatu...",
|
||||
"Tag with this name already exist.": "Izen hau duen etiketa dagoeneko badago.",
|
||||
"Tag with this value already exist.": "Balio hau duen etiketa dagoeneko badago.",
|
||||
color: "kolorea",
|
||||
"value (optional)": "balioa (hautazkoa)",
|
||||
Gray: "Grisa",
|
||||
Red: "Gorria",
|
||||
Orange: "Naranja",
|
||||
Green: "Berdea",
|
||||
Blue: "Urdina",
|
||||
Indigo: "Indigo",
|
||||
Purple: "Morea",
|
||||
Pink: "Arrosa",
|
||||
"Search...": "Bilatu...",
|
||||
"Avg. Ping": "Batazbesteko Pinga",
|
||||
"Avg. Response": "Batazbesteko erantzuna",
|
||||
"Entry Page": "Sarrera orria",
|
||||
statusPageNothing: "Ezer ere ez hemen, mesedez gehitu taldea edo monitorizazioa.",
|
||||
"No Services": "Zerbitzurik ez",
|
||||
"All Systems Operational": "Sistema guztiak martxan",
|
||||
"Partially Degraded Service": "Zerbitzu partzialki degradatua",
|
||||
"Degraded Service": "Zerbitzu degradatua",
|
||||
"Add Group": "Gehitu taldea",
|
||||
"Add a monitor": "Gehitu monitorizazioa",
|
||||
"Edit Status Page": "Editatu egoera orria",
|
||||
"Go to Dashboard": "Joan arbelera",
|
||||
"Status Page": "Egoera orria",
|
||||
"Status Pages": "Egoera orriak",
|
||||
defaultNotificationName: "Nire {notification} Alerta ({number})",
|
||||
here: "Hemen",
|
||||
Required: "Beharrezkoa",
|
||||
telegram: "Telegram",
|
||||
"Bot Token": "Bot Tokena",
|
||||
wayToGetTelegramToken: "You can get a token from {0}.",
|
||||
"Chat ID": "Txat IDa",
|
||||
supportTelegramChatID: "Support Direct Chat / Group / Channel's Chat ID",
|
||||
wayToGetTelegramChatID: "You can get your chat ID by sending a message to the bot and going to this URL to view the chat_id:",
|
||||
"YOUR BOT TOKEN HERE": "YOUR BOT TOKEN HERE",
|
||||
chatIDNotFound: "Chat ID is not found; please send a message to this bot first",
|
||||
webhook: "Webhook",
|
||||
"Post URL": "Bidalketa URLa",
|
||||
"Content Type": "Eduki mota",
|
||||
webhookJsonDesc: "{0} is good for any modern HTTP servers such as Express.js",
|
||||
webhookFormDataDesc: "{multipart} is good for PHP. The JSON will need to be parsed with {decodeFunction}",
|
||||
smtp: "Emaila (SMTP)",
|
||||
secureOptionNone: "Bat ere ez / STARTTLS (25, 587)",
|
||||
secureOptionTLS: "TLS (465)",
|
||||
"Ignore TLS Error": "Ignore TLS Error",
|
||||
"From Email": "Email honetatik",
|
||||
emailCustomSubject: "Pertsonalizatutako gaia",
|
||||
"To Email": "Email honetara",
|
||||
smtpCC: "CC",
|
||||
smtpBCC: "BCC",
|
||||
discord: "Discord",
|
||||
"Discord Webhook URL": "Discord Webhook URL",
|
||||
wayToGetDiscordURL: "You can get this by going to Server Settings -> Integrations -> Create Webhook",
|
||||
"Bot Display Name": "Bot Display Name",
|
||||
"Prefix Custom Message": "Prefix Custom Message",
|
||||
"Hello @everyone is...": "Hello {'@'}everyone is...",
|
||||
teams: "Microsoft Teams",
|
||||
"Webhook URL": "Webhook URL",
|
||||
wayToGetTeamsURL: "You can learn how to create a webhook URL {0}.",
|
||||
signal: "Signal",
|
||||
Number: "Zenbakia",
|
||||
Recipients: "Recipients",
|
||||
needSignalAPI: "You need to have a signal client with REST API.",
|
||||
wayToCheckSignalURL: "You can check this URL to view how to set one up:",
|
||||
signalImportant: "IMPORTANT: You cannot mix groups and numbers in recipients!",
|
||||
gotify: "Gotify",
|
||||
"Application Token": "Aplikazio tokena",
|
||||
"Server URL": "Zerbitzari URLa",
|
||||
Priority: "Lehentasuna",
|
||||
slack: "Slack",
|
||||
"Icon Emoji": "Emoji ikonoa",
|
||||
"Channel Name": "Kanalaren izena",
|
||||
"Uptime Kuma URL": "Uptime Kuma URL",
|
||||
aboutWebhooks: "More info about Webhooks on: {0}",
|
||||
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.",
|
||||
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 (Support 50+ Notification services)",
|
||||
GoogleChat: "Google Chat (Google Workspace only)",
|
||||
pushbullet: "Pushbullet",
|
||||
line: "Line Messenger",
|
||||
mattermost: "Mattermost",
|
||||
"User Key": "Erabiltzaile gakoa",
|
||||
Device: "Gailua",
|
||||
"Message Title": "Mezuaren izenburua",
|
||||
"Notification Sound": "Jakinarazpen soinua",
|
||||
"More info on:": "More info on: {0}",
|
||||
pushoverDesc1: "Emergency priority (2) has default 30 second timeout between retries and will expire after 1 hour.",
|
||||
pushoverDesc2: "If you want to send notifications to different devices, fill out Device field.",
|
||||
"SMS Type": "SMS mota",
|
||||
octopushTypePremium: "Premium (Fast - recommended for alerting)",
|
||||
octopushTypeLowCost: "Low Cost (Slow - sometimes blocked by operator)",
|
||||
checkPrice: "Check {0} prices:",
|
||||
apiCredentials: "API credentials",
|
||||
octopushLegacyHint: "Do you use the legacy version of Octopush (2011-2020) or the new version?",
|
||||
"Check octopush prices": "Check octopush prices {0}.",
|
||||
octopushPhoneNumber: "Phone number (intl format, eg : +33612345678) ",
|
||||
octopushSMSSender: "SMS Sender Name : 3-11 alphanumeric characters and space (a-zA-Z0-9)",
|
||||
"LunaSea Device ID": "LunaSea Device ID",
|
||||
"Apprise URL": "Apprise URL",
|
||||
"Example:": "Adibidez: {0}",
|
||||
"Read more:": "Irakurri gehiago: {0}",
|
||||
"Status:": "Egoera: {0}",
|
||||
"Read more": "Irakurri gehiago",
|
||||
appriseInstalled: "Apprise instalatuta.",
|
||||
appriseNotInstalled: "Apprise ez dago instalatuta. {0}",
|
||||
"Access Token": "Access Token",
|
||||
"Channel access token": "Channel access token",
|
||||
"Line Developers Console": "Line Developers Console",
|
||||
lineDevConsoleTo: "Line Developers Console - {0}",
|
||||
"Basic Settings": "Oinarrizko ezarpenak",
|
||||
"User ID": "Erabiltzaile ID",
|
||||
"Messaging API": "Messaging API",
|
||||
wayToGetLineChannelToken: "First access the {0}, create a provider and channel (Messaging API), then you can get the channel access token and user ID from the above mentioned menu items.",
|
||||
"Icon URL": "Ikono URL",
|
||||
aboutIconURL: "You can provide a link to a picture in \"Icon URL\" to override the default profile picture. Will not be used if Icon Emoji is set.",
|
||||
aboutMattermostChannelName: "You can override the default channel that the Webhook posts to by entering the channel name into \"Channel Name\" field. This needs to be enabled in the Mattermost Webhook settings. Ex: #other-channel",
|
||||
matrix: "Matrix",
|
||||
promosmsTypeEco: "SMS ECO - cheap but slow and often overloaded. Limited only to Polish recipients.",
|
||||
promosmsTypeFlash: "SMS FLASH - Message will automatically show on recipient device. Limited only to Polish recipients.",
|
||||
promosmsTypeFull: "SMS FULL - Premium tier of SMS, You can use your Sender Name (You need to register name first). Reliable for alerts.",
|
||||
promosmsTypeSpeed: "SMS SPEED - Highest priority in system. Very quick and reliable but costly (about twice of SMS FULL price).",
|
||||
promosmsPhoneNumber: "Phone number (for Polish recipient You can skip area codes)",
|
||||
promosmsSMSSender: "SMS Sender Name : Pre-registred name or one of defaults: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
|
||||
"Feishu WebHookUrl": "Feishu WebHookURL",
|
||||
matrixHomeserverURL: "Hasiera zerbitzari URL (with http(s):// and optionally port)",
|
||||
"Internal Room Id": "Internal Room ID",
|
||||
matrixDesc1: "You can find the internal room ID by looking in the advanced section of the room settings in your Matrix client. It should look like !QMdRCpUIfLwsfjxye6:home.server.",
|
||||
matrixDesc2: "It is highly recommended you create a new user and do not use your own Matrix user's access token as it will allow full access to your account and all the rooms you joined. Instead, create a new user and only invite it to the room that you want to receive the notification in. You can get the access token by running {0}",
|
||||
Method: "Metodoa",
|
||||
Body: "Gorputza",
|
||||
Headers: "Goiburuak",
|
||||
PushUrl: "Push URL",
|
||||
HeadersInvalidFormat: "The request headers are not valid JSON: ",
|
||||
BodyInvalidFormat: "The request body is not valid JSON: ",
|
||||
"Monitor History": "Monitorizazio Historia",
|
||||
clearDataOlderThan: "Keep monitor history data for {0} days.",
|
||||
PasswordsDoNotMatch: "Pasahitzak ez datoz bat.",
|
||||
records: "records",
|
||||
"One record": "One record",
|
||||
steamApiKeyDescription: "For monitoring a Steam Game Server you need a Steam Web-API key. You can register your API key here: ",
|
||||
"Current User": "Uneko erabiltzailea",
|
||||
topic: "Topic",
|
||||
topicExplanation: "MQTT topic to monitor",
|
||||
successMessage: "Arrakasta mezua",
|
||||
successMessageExplanation: "MQTT message that will be considered as success",
|
||||
recent: "Duela gutxikoa",
|
||||
Done: "Egina",
|
||||
Info: "Info",
|
||||
Security: "Segurtasuna",
|
||||
"Steam API Key": "Steam API Giltza",
|
||||
"Shrink Database": "Shrink Datubasea",
|
||||
"Pick a RR-Type...": "Pick a RR-Type...",
|
||||
"Pick Accepted Status Codes...": "Hautatu onartutako egoera kodeak...",
|
||||
Default: "Lehenetsia",
|
||||
"HTTP Options": "HTTP Aukerak",
|
||||
"Create Incident": "Sortu inzidentzia",
|
||||
Title: "Titulua",
|
||||
Content: "Edukia",
|
||||
Style: "Estiloa",
|
||||
info: "info",
|
||||
warning: "kontuz",
|
||||
danger: "arriskua",
|
||||
error: "errorea",
|
||||
critical: "kritikoa",
|
||||
primary: "oinarrizkoa",
|
||||
light: "argia",
|
||||
dark: "iluna",
|
||||
Post: "Post",
|
||||
"Please input title and content": "Mesedez sartu titulua eta edukia",
|
||||
Created: "Sortuta",
|
||||
"Last Updated": "Azken eguneratzea",
|
||||
Unpin: "Unpin",
|
||||
"Switch to Light Theme": "Aldatu gai argira",
|
||||
"Switch to Dark Theme": "Aldatu gai ilunera",
|
||||
"Show Tags": "Erakutsi etiketak",
|
||||
"Hide Tags": "Ezkutatu etiketak",
|
||||
Description: "Deskribapena",
|
||||
"No monitors available.": "Monitorizaziorik eskuragarri ez.",
|
||||
"Add one": "Gehitu bat",
|
||||
"No Monitors": "Monitorizaziorik ez",
|
||||
"Untitled Group": "Titulurik gabeko taldea",
|
||||
Services: "Zerbitzuak",
|
||||
Discard: "Baztertu",
|
||||
Cancel: "Ezeztatu",
|
||||
"Powered by": "Honekin egina:",
|
||||
shrinkDatabaseDescription: "Trigger database VACUUM for SQLite. If your database is created after 1.10.0, AUTO_VACUUM is already enabled and this action is not needed.",
|
||||
serwersms: "SerwerSMS.pl",
|
||||
serwersmsAPIUser: "API erabiltzailea (webapi_ aurre-hizkia barne)",
|
||||
serwersmsAPIPassword: "API pasahitza",
|
||||
serwersmsPhoneNumber: "Telefono zenbakia",
|
||||
serwersmsSenderName: "SMS bidaltzaile izena (registered via customer portal)",
|
||||
stackfield: "Stackfield",
|
||||
Customize: "Pertsonalizatu",
|
||||
"Custom Footer": "Oin pertsonalizatua",
|
||||
"Custom CSS": "CSS pertsonalizatua",
|
||||
smtpDkimSettings: "DKIM ezarpenak",
|
||||
smtpDkimDesc: "Please refer to the Nodemailer DKIM {0} for usage.",
|
||||
documentation: "dokumentazioa",
|
||||
smtpDkimDomain: "Domeinu izena",
|
||||
smtpDkimKeySelector: "Gako hautatzailea",
|
||||
smtpDkimPrivateKey: "Gako pribatua",
|
||||
smtpDkimHashAlgo: "Hash algoritmoa (hautazkoa)",
|
||||
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": "Integrazio URLa",
|
||||
"Auto resolve or acknowledged": "Auto resolve or acknowledged",
|
||||
"do nothing": "ez egin ezer",
|
||||
"auto acknowledged": "auto acknowledged",
|
||||
"auto resolve": "auto resolve",
|
||||
gorush: "Gorush",
|
||||
alerta: "Alerta",
|
||||
alertaApiEndpoint: "API Endpoint",
|
||||
alertaEnvironment: "Ingurunea",
|
||||
alertaApiKey: "API Key",
|
||||
alertaAlertState: "Alerta egoera",
|
||||
alertaRecoverState: "Berreskuratze egoera",
|
||||
deleteStatusPageMsg: "Ziur zaude egoera orri hau ezabatu nahi duzula?",
|
||||
Proxies: "Proxiak",
|
||||
default: "Lehenetsia",
|
||||
enabled: "Gaituta",
|
||||
setAsDefault: "Ezarri lehenetsitzat",
|
||||
deleteProxyMsg: "Are you sure want to delete this proxy for all monitors?",
|
||||
proxyDescription: "Proxies must be assigned to a monitor to function.",
|
||||
enableProxyDescription: "This proxy will not effect on monitor requests until it is activated. You can control temporarily disable the proxy from all monitors by activation status.",
|
||||
setAsDefaultProxyDescription: "This proxy will be enabled by default for new monitors. You can still disable the proxy separately for each monitor.",
|
||||
"Certificate Chain": "Certificate Chain",
|
||||
Valid: "Baliozkoa",
|
||||
Invalid: "Baliogabea",
|
||||
AccessKeyId: "AccessKey ID",
|
||||
SecretAccessKey: "AccessKey Secret",
|
||||
PhoneNumbers: "TelefonoZenbakiak",
|
||||
TemplateCode: "TemplateCode",
|
||||
SignName: "SignName",
|
||||
"Sms template must contain parameters: ": "Sms txantiloiak parametroak eduki behar ditu: ",
|
||||
"Bark Endpoint": "Bark Endpoint",
|
||||
WebHookUrl: "WebHookUrl",
|
||||
SecretKey: "SecretKey",
|
||||
"For safety, must use secret key": "For safety, must use secret key",
|
||||
"Device Token": "Gailu tokena",
|
||||
Platform: "Plataforma",
|
||||
iOS: "iOS",
|
||||
Android: "Android",
|
||||
Huawei: "Huawei",
|
||||
High: "Altua",
|
||||
Retry: "Errepikatu",
|
||||
Topic: "Gaia",
|
||||
"WeCom Bot Key": "WeCom Bot Key",
|
||||
"Setup Proxy": "Ezarri Proxya",
|
||||
"Proxy Protocol": "Proxy protokoloa",
|
||||
"Proxy Server": "Proxy zerbitzaria",
|
||||
"Proxy server has authentication": "Proxy zerbitzariak autentifikazioa dauka",
|
||||
User: "Erabiltzailea",
|
||||
Installed: "Instalatuta",
|
||||
"Not installed": "Instalatu gabe",
|
||||
Running: "Martxan",
|
||||
"Not running": "Ez martxan",
|
||||
"Remove Token": "Ezabatu Tokena",
|
||||
Start: "Hasi",
|
||||
Stop: "Gelditu",
|
||||
"Uptime Kuma": "Uptime Kuma",
|
||||
"Add New Status Page": "Gehitu egoera orri berria",
|
||||
Slug: "Sluga",
|
||||
"Accept characters:": "Onartu karaktereak:",
|
||||
startOrEndWithOnly: "Start or end with {0} only",
|
||||
"No consecutive dashes": "No consecutive dashes",
|
||||
Next: "Hurrengoa",
|
||||
"The slug is already taken. Please choose another slug.": "Sluga dagoeneko hartuta dago. Mesedez beste bat hautatu.",
|
||||
"No Proxy": "Proxyrik ez",
|
||||
Authentication: "Authentication",
|
||||
"HTTP Basic Auth": "HTTP oinarrizko Auth",
|
||||
"New Status Page": "Egoera orri berria",
|
||||
"Page Not Found": "Orria ez da aurkitu",
|
||||
"Reverse Proxy": "Alderantzizkako Proxya",
|
||||
Backup: "Backup",
|
||||
About: "Honi buruz",
|
||||
wayToGetCloudflaredURL: "(Download cloudflared from {0})",
|
||||
cloudflareWebsite: "Cloudflare webgunea",
|
||||
"Message:": "Mezua:",
|
||||
"Don't know how to get the token? Please read the guide:": "Don't know how to get the token? Please read the guide:",
|
||||
"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.": "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.",
|
||||
"Other Software": "Beste softwarea",
|
||||
"For example: nginx, Apache and Traefik.": "Adibidez: nginx, Apache and Traefik.",
|
||||
"Please read": "Mesedez irakurri",
|
||||
"Subject:": "Gaia:",
|
||||
"Valid To:": "Balio-epea:",
|
||||
"Days Remaining:": "Egun faltan:",
|
||||
"Issuer:": "Issuer:",
|
||||
"Fingerprint:": "Hatzmarka:",
|
||||
"No status pages": "Egoera orririk ez",
|
||||
"Domain Name Expiry Notification": "Domeinu izen iraungitze jakinarazpena",
|
||||
Proxy: "Proxya",
|
||||
"Date Created": "Data sortuta",
|
||||
onebotHttpAddress: "OneBot HTTP helbidea",
|
||||
onebotMessageType: "OneBot mezu mota",
|
||||
onebotGroupMessage: "Taldea",
|
||||
onebotPrivateMessage: "Pribatua",
|
||||
onebotUserOrGroupId: "Talde/Erabiltzaile IDa",
|
||||
onebotSafetyTips: "For safety, must set access token",
|
||||
"PushDeer Key": "PushDeer Key",
|
||||
"Footer Text": "Oineko testua",
|
||||
"Show Powered By": "Erakutsi Honekin egina:",
|
||||
"Domain Names": "Domeinu izenak",
|
||||
signedInDisp: "Signed in as {0}",
|
||||
signedInDispDisabled: "Auth desgaituta.",
|
||||
"Certificate Expiry Notification": "Zertifikatu iraungitze jakinarazpena",
|
||||
"API Username": "API Erabiltzailea",
|
||||
"API Key": "API Gakoa",
|
||||
"Recipient Number": "Recipient Number",
|
||||
"From Name/Number": "From Name/Number",
|
||||
"Leave blank to use a shared sender number.": "Leave blank to use a shared sender number.",
|
||||
"Octopush API Version": "Octopush API Version",
|
||||
"Legacy Octopush-DM": "Legacy Octopush-DM",
|
||||
endpoint: "endpoint",
|
||||
octopushAPIKey: "\"API key\" from HTTP API credentials in control panel",
|
||||
octopushLogin: "\"Login\" from HTTP API credentials in control panel",
|
||||
promosmsLogin: "API Saio haste izena",
|
||||
promosmsPassword: "API Pasahitza",
|
||||
"pushoversounds pushover": "Pushover (defektuz)",
|
||||
"pushoversounds bike": "Bizikleta",
|
||||
"pushoversounds bugle": "Bugle",
|
||||
"pushoversounds cashregister": "Cash Register",
|
||||
"pushoversounds classical": "Klasikoa",
|
||||
"pushoversounds cosmic": "Kosmikoa",
|
||||
"pushoversounds falling": "Erortzen",
|
||||
"pushoversounds gamelan": "Gamelan",
|
||||
"pushoversounds incoming": "Incoming",
|
||||
"pushoversounds intermission": "Intermission",
|
||||
"pushoversounds magic": "Magia",
|
||||
"pushoversounds mechanical": "Mekanikoa",
|
||||
"pushoversounds pianobar": "Piano Bar",
|
||||
"pushoversounds siren": "Sirena",
|
||||
"pushoversounds spacealarm": "Espazio Alarma",
|
||||
"pushoversounds tugboat": "Tug Boat",
|
||||
"pushoversounds alien": "Alien Alarm (long)",
|
||||
"pushoversounds climb": "Climb (long)",
|
||||
"pushoversounds persistent": "Persistent (long)",
|
||||
"pushoversounds echo": "Pushover Echo (long)",
|
||||
"pushoversounds updown": "Up Down (long)",
|
||||
"pushoversounds vibrate": "Bibrazioa soilik",
|
||||
"pushoversounds none": "Bat ere ez (isilik)",
|
||||
pushyAPIKey: "Secret API giltza",
|
||||
pushyToken: "Gailu tokena",
|
||||
"Show update if available": "Erakutsi eguneratzea eskuragarri badago",
|
||||
"Also check beta release": "Beta bertsioak ere egiaztatu",
|
||||
"Using a Reverse Proxy?": "Proxy alderantzizkako zerbitzaria erabiltzen?",
|
||||
"Check how to config it for WebSocket": "Check how to config it for WebSocket",
|
||||
"Steam Game Server": "Steam joko zerbitzaria",
|
||||
"Most likely causes:": "Arrazoi probableenak:",
|
||||
"The resource is no longer available.": "Baliabidea ez dago erabilgarri.",
|
||||
"There might be a typing error in the address.": "Idazketa-akats bat egon daiteke helbidean.",
|
||||
"What you can try:": "Probatu dezakezuna:",
|
||||
"Retype the address.": "Berridatzi helbidea.",
|
||||
"Go back to the previous page.": "Itzuli aurreko orrialdera",
|
||||
"Coming Soon": "Laster",
|
||||
wayToGetClickSendSMSToken: "API erabiltzailea and API giltza hemendik lortu ditzakezu: {0} .",
|
||||
"Connection String": "Konexio katea",
|
||||
Query: "Kontsulta",
|
||||
settingsCertificateExpiry: "TLS irungitze zertifikatua",
|
||||
certificationExpiryDescription: "HTTPS Monitorizazio jakinarazpena martxan jarri TLS zertifikatua iraungitzeko hau falta denean:",
|
||||
"ntfy Topic": "ntfy Topic",
|
||||
Domain: "Domeinua",
|
||||
Workstation: "Lan gunea",
|
||||
disableCloudflaredNoAuthMsg: "Ez Auth moduan zaude, pasahitza ez da beharrezkoa.",
|
||||
};
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue