thingboard告警信息格式美化



原始报警json内容:
{ "severity": "CRITICAL","acknowledged": false,"cleared": false,"assigneeId": null,"startTs": 1739801102349,"endTs": 1739801102349,"ackTs": 0,"clearTs": 0,"assignTs": 0,"propagate": false,"propagateToOwner": false,"propagateToTenant": false,"propagateRelationTypes": [],"originatorName": "DTU-863569063344204","originatorLabel": "DTU-863569063344204","assignee": null,"name": "Inactivity TimeOut","status": "ACTIVE_UNACK","details": {}
}
报警格式美化js代码:
var date = new Date();
var year = date.getFullYear();
var month = ('0' + (date.getMonth() + 1)).slice(-2);
var day = ('0' + date.getDate()).slice(-2);
var hours = ('0' + date.getHours()).slice(-2);
var minutes = ('0' + date.getMinutes()).slice(-2);
var seconds = ('0' + date.getSeconds()).slice(-2);var currentTime = year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds;// 解析告警时间
function formatUnixTime(unixTimestamp) {var date = new Date(unixTimestamp);var year = date.getFullYear();var month = ('0' + (date.getMonth() + 1)).slice(-2);var day = ('0' + date.getDate()).slice(-2);var hours = ('0' + date.getHours()).slice(-2);var minutes = ('0' + date.getMinutes()).slice(-2);var seconds = ('0' + date.getSeconds()).slice(-2);return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds;
}// 格式化报警级别
var severityMap = {"CRITICAL": "🔥 **严重告警**","MAJOR": "⚠ **主要告警**","MINOR": "🔶 **次要告警**","WARNING": "ℹ **警告**"
};
var severity = severityMap[msg.severity] || "⚠ **未知级别**";// 确认状态
var acknowledged = msg.acknowledged ? "✅ 已确认" : "❌ 未确认";
var cleared = msg.cleared ? "✅ 已清除" : "❌ 未清除";// 组装格式化的告警信息
var messageContent ="📢 **设备告警通知** 📢\n" +"------------------------------\n" +"📅 **当前时间**: " + currentTime + "\n" +"📍 **设备名称**: " + msg.originatorName + "\n" +"🔖 **设备标识**: " + msg.originatorLabel + "\n" +"⚠ **告警名称**: " + msg.name + "\n" +"🚨 **告警级别**: " + severity + "\n" +"🕒 **告警开始时间**: " + formatUnixTime(msg.startTs) + "\n" +"🕒 **告警结束时间**: " + formatUnixTime(msg.endTs) + "\n" +"🔎 **告警状态**: " + msg.status + "\n" +"📌 **确认状态**: " + acknowledged + "\n" +"📌 **清除状态**: " + cleared + "\n" +"------------------------------";var newMsg = {"msgtype": "text","text": {"content": messageContent,"mentioned_list": ["wangqing", "@all"],"mentioned_mobile_list": ["13800001111", "@all"]}
};return {msg: newMsg
};
输出到企业微信消息:

相关文章:
thingboard告警信息格式美化
原始报警json内容: { "severity": "CRITICAL","acknowledged": false,"cleared": false,"assigneeId": null,"startTs": 1739801102349,"endTs": 1739801102349,"ackTs": 0,&quo…...
OpenHarmonry 5.0.1源码下载与编译
预置环境:硬盘500G、内存32G、Ubuntu 20.04.6 LTS Ubuntu系统下载路径:ubuntu-releases安装包下载_开源镜像站-阿里云 一、必需环境 sudo apt-get update && sudo apt-get install binutils binutils-dev git git-lfs gnupg flex bison gperf…...
【Python深入浅出㊸】解锁Python3中的TensorFlow:开启深度学习之旅
目录 一、TensorFlow 简介1.1 定义与背景1.2 特点 二、Python 3 与 TensorFlow 的关系2.1 版本对应2.2 为何选择 Python 3 三、安装 TensorFlow3.1 安装步骤3.2 验证安装 四、TensorFlow 基本概念与使用方法4.1 计算图(Graph)4.2 会话(Sessio…...
STM32 外部中断和NVIC嵌套中断向量控制器
目录 背景 外部中断/事件控制器(EXTI) 主要特性 功能说明 外部中断线 嵌套向量中断控制器 特性 中断线(Interrupt Line) 中断线的定义和作用 STM32中断线的分类和数量 优先级分组 抢占优先级(Preemption Priority) …...
string类详解(上)
文章目录 目录1. STL简介1.1 什么是STL1.2 STL的版本1.3 STL的六大组件 2. 为什么学习string类3. 标准库中的string类3.1 string类3.2 string类的常用接口说明 目录 STL简介为什么学习string类标准库中的string类string类的模拟实现现代版写法的String类写时拷贝 1. STL简介 …...
DeepSeek教unity------Dotween
1、命名法 Tweener(补间器):一种控制某个值并对其进行动画处理的补间。 Sequence(序列):一种特殊的补间,它不直接控制某个值,而是控制其他补间并将它们作为一个组进行动画处理。 Tw…...
AIP-146 泛化域
编号146原文链接AIP-146: Generic fields状态批准创建日期2019-05-28更新日期2019-05-28 API中的大多数域,无论是在请求、资源还是自定义应答中,都有具体的类型或模式。这个模式是约定的一部分,开发者依此约定进行编码。 然而,偶…...
【Go并发编程】Goroutine 调度器揭秘:从 GMP 模型到 Work Stealing 算法
每天一篇Go语言干货,从核心到百万并发实战,快来关注魔法小匠,一起探索Go语言的无限可能! 在 Go 语言中,Goroutine 是一种轻量级的并发执行单元,它使得并发编程变得简单高效。而 Goroutine 的高效调度机制是…...
【前端】Vue组件库之Element: 一个现代化的 UI 组件库
文章目录 前言一、官网1、官网主页2、设计原则3、导航4、组件 二、核心功能:开箱即用的组件生态1、丰富的组件体系2、特色功能亮点 三、快速上手:三步开启组件化开发1、安装(使用Vue 3)2、全局引入3、按需导入(推荐&am…...
第十五天 学习并实践HarmonyOS应用的基本结构、页面导航和状态管理
HarmonyOS应用开发入门:从基本结构到状态管理实战指南 前言 (约300字,说明HarmonyOS的发展前景,应用开发的市场需求,以及本教程的核心价值。强调手把手教学特点,降低学习门槛) 一、HarmonyOS应…...
Cursor生成JAVA相关的关键词提示规则
在项目根目录创建一个.curstorrules文件(注意有个小数点),之后在该文件内填入下面内容 你是 Java 编程、Spring Boot、Spring Framework、Maven、JUnit 及相关 Java 技术的专家。 代码风格与结构 编写整洁、高效且文档完善的 Java 代码&am…...
数据结构:队列(Queue)及其实现
队列(Queue)是一种广泛使用的线性数据结构,它遵循先进先出(FIFO,First In, First Out)的原则。也就是说,最早插入队列的元素会最先被移除。队列是一种典型的顺序存取结构,它与栈&…...
MoE架构中的专家选择门控机制:稀疏激活如何实现百倍效率突破?
技术原理(数学公式与核心逻辑) 核心公式 门控网络输出: G ( x ) Softmax ( W g ⋅ x b g ) G(x) \text{Softmax}(W_g \cdot x b_g) G(x)Softmax(Wg⋅xbg) 最终输出: y ∑ i 1 n G i ( x ) ⋅ E i ( x ) (仅保留Top-…...
坐井说天阔---DeepSeek-R1
前言 DeepSeek-R1这么火,虽然网上很多介绍和解读,但听人家的总不如自己去看看原论文。于是花了大概一周的时间,下班后有进入了研究生的状态---读论文。 DeepSeek这次的目标是探索在没有任何监督数据的情况下训练具有推理能力的大模型&#…...
UART(一)——UART基础
一、定义 UART(Universal Asynchronous Receiver/Transmitter)是一种广泛使用的串行通信协议,用于在设备间通过异步方式传输数据。它无需共享时钟信号,而是依赖双方预先约定的参数(如波特率)完成通信。 功能和特点 基本的 UART 系统只需三个信号即可提供稳健的中速全双工…...
DeepSeek 的创新融合:多行业应用实践探索
引言 在数字化转型的浪潮中,技术的融合与创新成为推动各行业发展的关键力量。蓝耘平台作为行业内备受瞩目的创新平台,以其强大的资源整合能力和灵活的架构,为企业提供了高效的服务支持。而 DeepSeek 凭借先进的人工智能技术,在自然…...
C语言中的常量与只读变量,#define与const的区别
#include中的#表明C处理器需要在编译器接手工作之前先处理这条指令。 #define 这条定义宏的语句,是不是很熟悉,这条预处理指令会在编译器编译前把源文件中使用到这个宏的地方都先展开。 #define NUM 12 这个定义了一个宏常量,它的处理发生编…...
Python常见面试题的详解6
1. 按字典 value 值排序 要点:对于给定字典,使用 sorted() 函数结合 items() 方法,依据 value 进行排序,也可以定义一个通用函数,支持按 value 升序或降序排序。示例: python d {a: 1, b: 2, c: 3, d: …...
CentOS 7超详细安装教程(含镜像)
1. 安装前准备 1.1 CentOS简介 CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是一种基于 Red Hat Enterprise Linux(RHEL)源代码构建的免费开源操作系统。它在稳定性、安全…...
代码随想录day12
144.二叉树的前序遍历 //明确递归的函数,结束边界,单层逻辑 void traversal(TreeNode* node, vector<int>& list){if(node nullptr){return;}list.push_back(node->val);traversal(node->left, list);traversal(node->right, list)…...
langchain学习笔记之消息存储在内存中的实现方法
langchain学习笔记之消息存储在内存中的实现方法 引言背景消息存储在内存的实现方法消息完整存储:完整代码 引言 本节将介绍 langchain \text{langchain} langchain将历史消息存储在内存中的实现方法。 背景 在与大模型交互过程中,经常出现消息管理方…...
布隆过滤器(简单介绍)
布隆过滤器(Bloom Filter) 是一种高效的概率型数据结构,用于快速判断一个元素是否可能存在于某个集合中。它的核心特点是空间效率极高,但存在一定的误判率(可能误报存在,但不会漏报)。 核心原理…...
Qt中基于开源库QRencode生成二维码(附工程源码链接)
目录 1.QRencode简介 2.编译qrencode 3.在Qt中直接使用QRencode源码 3.1.添加源码 3.2.用字符串生成二维码 3.3.用二进制数据生成二维码 3.4.界面设计 3.5.效果展示 4.注意事项 5.源码下载 1.QRencode简介 QRencode是一个开源的库,专门用于生成二维码&…...
SpringBoot教程(三十二) SpringBoot集成Skywalking链路跟踪
SpringBoot教程(三十二) | SpringBoot集成Skywalking链路跟踪 一、Skywalking是什么?二、Skywalking与JDK版本的对应关系三、Skywalking下载四、Skywalking 数据存储五、Skywalking 的启动六、部署探针 前提: Agents 8.9.0 放入 …...
IntelliJ IDEA 接入 AI 编程助手(Copilot、DeepSeek、GPT-4o Mini)
IntelliJ IDEA 接入 AI 编程助手(Copilot、DeepSeek、GPT-4o Mini) 📊 引言 近年来,AI 编程助手已成为开发者的高效工具,它们可以加速代码编写、优化代码结构,并提供智能提示。本文介绍如何在 IntelliJ I…...
【机器学习】深入浅出KNN算法:原理解析与实践案例分享
在机器学习中,K-最近邻算法(K-Nearest Neighbors, KNN)是一种既直观又实用的算法。它既可以用于分类,也可以用于回归任务。本文将简单介绍KNN算法的基本原理、优缺点以及常见应用场景,并通过一个简单案例帮助大家快速入…...
vscode的一些实用操作
1. 焦点切换(比如主要用到使用快捷键在编辑区和终端区进行切换操作) 2. 跳转行号 使用ctrl g,然后输入指定的文件内容,即可跳转到相应位置。 使用ctrl p,然后输入指定的行号,回车即可跳转到相应行号位置。...
JavaEE基础 Tomcat与Http (下)
目录 1.HTTP 协议 1.1 HTTP 协议概念 1.2. 无状态协议 1.3. HTTP1.0 和 HTTP1.1 1.4 请求协议和响应协议 编辑 1.5 请求协议 1.5.1 常见的请求协议 1.5.2 GET 请求 1.5.3 POST请求 1.5.4 响应协议 1.HTTP 协议 Http浏览器访问东西都是遵循的Http协议。 1.1 HTTP 协议…...
【Linux】【进程】epoll内核实现总结+ET和LT模式内核实现方式
【Linux】【网络】epoll内核实现总结ET和LT模式内核实现方式 1.epoll的工作原理 eventpoll结构 当某一进程调用epoll_create方法时,Linux内核会创建一个eventpoll结构体,这个结构体中有两个成员与epoll的使用方式密切相关. struct eventpoll{..../*红…...
英码科技基于昇腾算力实现DeepSeek离线部署
DeepSeek-R1 模型以其创新架构和高效能技术迅速成为行业焦点。如果能够在边缘进行离线部署,不仅能发挥DeepSeek大模型的效果,还能确保数据处理的安全性和可控性。 英码科技作为AI算力产品和AI应用解决方案服务商,积极响应市场需求࿰…...
