Browse Source

Format touched files with eslint

deefdragon/Template-Engine
Jeffrey Koehler 3 years ago
parent
commit
3b15a1a7a1
  1. 84
      server/notification.js
  2. 11
      src/components/NotificationDialog.vue

84
server/notification.js

@ -1,5 +1,5 @@
const { R } = require("redbean-node");
const { Liquid } = require( 'liquidjs');
const { Liquid } = require( "liquidjs");
const { UP } = require("../src/util");
const dayjs = require("dayjs");
@ -28,9 +28,8 @@ const Feishu = require("./notification-providers/feishu");
const AliyunSms = require("./notification-providers/aliyun-sms");
const DingDing = require("./notification-providers/dingding");
const MinimalDetailTemplate = "{{monitor.name}}: {{monitor.health}}"
const LowDetailTemplate = "[{{monitor.name}}] [{{monitor.health}}] {{heartbeat.msg}}"
const MinimalDetailTemplate = "{{monitor.name}}: {{monitor.health}}";
const LowDetailTemplate = "[{{monitor.name}}] [{{monitor.health}}] {{heartbeat.msg}}";
const MediumDetailTemplate = `Monitor: {{monitor.name}}
Health: {{monitor.health}}
Address: {{monitor.url}}
@ -45,7 +44,7 @@ Address: {{monitor.url}}
Your {{monitor.type}} monitor is unexpectedly down.
{%- endif %}
Time: {{heartbeat.time}}
Uptime Message: {{heartbeat.msg}}`
Uptime Message: {{heartbeat.msg}}`;
const FullDetailTemplate = `Monitor: {{monitor.name}}
Health: {{monitor.health}}
@ -70,7 +69,7 @@ Tags
{%- if tag.value and tag.value != "" -%}
: {{tag.value}}
{%- endif %}
{% endfor -%}`
{% endfor -%}`;
class Notification {
@ -85,6 +84,7 @@ class Notification {
duration: 8,
};
}
static generateTestMonitor() {
return {
id: 5,
@ -110,10 +110,17 @@ class Notification {
dns_resolve_server: "1.1.1.1",
dns_last_result: null,
pushToken: null,
notificationIDList:{"1":true,"5":true},
tags: [{"id":21,"monitor_id":16,"tag_id":2,"value":"","name":"Internal","color":"#059669"}],
notificationIDList: { "1": true,
"5": true },
tags: [{ "id": 21,
"monitor_id": 16,
"tag_id": 2,
"value": "",
"name": "Internal",
"color": "#059669" }],
};
}
providerList = {};
static init() {
@ -158,7 +165,6 @@ class Notification {
}
}
/**
*
* @param notification : BeanModel
@ -170,23 +176,25 @@ class Notification {
*/
static async send(notification, msg, monitorJSON, heartbeatJSON) {
if (this.providerList[notification.type]) {
try {
monitorJSON.health = ((heartbeatJSON.status == 1) !== monitorJSON.upsideDown) ? "✅ Healthy": "❌ Unhealthy"
monitorJSON.health = ((heartbeatJSON.status == 1) !== monitorJSON.upsideDown) ? "✅ Healthy" : "❌ Unhealthy";
let parseData = {
// I actually dont think that it is necessary to put the notification in the data sent to the template.
// notification: notification,
monitor: monitorJSON,
heartbeat: heartbeatJSON,
}
let template = this.getTemplateFromNotification(notification)
console.log(`Template: (${template})`)
let message = await engine.parseAndRender(template, parseData)
};
let template = this.getTemplateFromNotification(notification);
console.log(`Template: (${template})`);
let message = await engine.parseAndRender(template, parseData);
return this.providerList[notification.type].send(notification, message, monitorJSON, heartbeatJSON);
} catch (e) {
throw e
}
//Removed try-catch here. I am not sure what the default should be in the case of a broken template.
//switch to manually building the message?
//the problem is that it would still need to send a message after the template fails of if it failed to send completely..
//im not sure if that is the desired result on a template fail.
} else {
throw new Error("Notification type is not supported");
@ -195,49 +203,49 @@ class Notification {
static getTemplateFromNotification(notification) {
let template = notification.template
let detail = notification.detail
console.log(`Detail: (${detail}) Template: (${template})`)
let template = notification.template;
let detail = notification.detail;
console.log(`Detail: (${detail}) Template: (${template})`);
switch (detail) {
case "Minimal Detail":
return MinimalDetailTemplate
return MinimalDetailTemplate;
case "Low Detail":
return LowDetailTemplate
return LowDetailTemplate;
case "Medium Detail":
return MediumDetailTemplate
return MediumDetailTemplate;
case "Full Detail":
return FullDetailTemplate
return FullDetailTemplate;
case "Custom Template":
if (template) {
return template
return template;
}
//returns low in the case of a template being empty string or undefined.
}
return LowDetailTemplate
return LowDetailTemplate;
}
static async save(notification, notificationID, userID) {
let bean
let bean;
if (notificationID) {
bean = await R.findOne("notification", " id = ? AND user_id = ? ", [
notificationID,
userID,
])
]);
if (! bean) {
throw new Error("notification not found")
throw new Error("notification not found");
}
} else {
bean = R.dispense("notification")
bean = R.dispense("notification");
}
bean.name = notification.name;
bean.user_id = userID;
bean.config = JSON.stringify(notification);
bean.is_default = notification.isDefault || false;
await R.store(bean)
await R.store(bean);
if (notification.applyExisting) {
await applyNotificationEveryMonitor(bean.id, userID);
@ -250,13 +258,13 @@ class Notification {
let bean = await R.findOne("notification", " id = ? AND user_id = ? ", [
notificationID,
userID,
])
]);
if (! bean) {
throw new Error("notification not found")
throw new Error("notification not found");
}
await R.trash(bean)
await R.trash(bean);
}
static checkApprise() {
@ -276,17 +284,17 @@ async function applyNotificationEveryMonitor(notificationID, userID) {
let checkNotification = await R.findOne("monitor_notification", " monitor_id = ? AND notification_id = ? ", [
monitors[i].id,
notificationID,
])
]);
if (! checkNotification) {
let relation = R.dispense("monitor_notification");
relation.monitor_id = monitors[i].id;
relation.notification_id = notificationID;
await R.store(relation)
await R.store(relation);
}
}
}
module.exports = {
Notification,
}
};

11
src/components/NotificationDialog.vue

@ -22,7 +22,7 @@
<input id="notification-name" v-model="notification.name" type="text" class="form-control" required>
</div>
<div class="mb-3" v-show="enableTemplateOptions" >
<div v-show="enableTemplateOptions" class="mb-3">
<label for="notification-detail" class="form-label">{{ $t("Notification Message Detail") }}</label>
<select id="notification-detail" v-model="notification.detail" class="form-select">
<option v-for="detail in detailLevels" :key="detail" :value="detail">{{ $t(detail) }}</option>
@ -30,7 +30,7 @@
</div>
<!-- using show so that if the user toggels to a different template level, they dont loose what is in the field. -->
<div class="mb-3" v-show="notification.detail === 'Custom Template' && enableTemplateOptions">
<div v-show="notification.detail === 'Custom Template' && enableTemplateOptions" class="mb-3">
<label for="notification-text" class="form-label">{{ $t("Custom Message Template") }}</label>
<textarea id="notification-text" v-model="notification.template" type="text" class="form-control"></textarea>
<div v-pre class="form-text">
@ -92,7 +92,6 @@ import Confirm from "./Confirm.vue";
import { NotificationFormList, NotificationDetailList, TemplateEnabledList } from "./notifications";
// import from "./notifications";
export default {
components: {
Confirm,
@ -125,7 +124,7 @@ export default {
return NotificationFormList[this.notification.type];
},
enableTemplateOptions() {
return (TemplateEnabledList.includes(this.notification.type))
return (TemplateEnabledList.includes(this.notification.type));
}
},
@ -143,7 +142,7 @@ export default {
}
},
"notification.detail"(to, from) {
this.notification.detail = to
this.notification.detail = to;
}
},
mounted() {
@ -177,7 +176,7 @@ export default {
// Set Default value here
this.notification.type = this.notificationTypes[0];
this.notification.detail = this.detailLevels[1];
this.notification.template = "[{{monitor.name}}] [{{monitor.health}}] {{monitor.msg}}"
this.notification.template = "[{{monitor.name}}] [{{monitor.health}}] {{monitor.msg}}";
}

Loading…
Cancel
Save