当前位置: 首页 > news >正文

golang集成sentry: go-redis

网上没有找到go-redis集成sentry的库, 所以我简单实现了一个

代码: https://github.com/Shujie-Tan/go-redis-sentry
使用方法:

import (redis_sentry "github.com/Shujie-Tan/go-redis-sentry"
)
rdb := redis.NewClient(&redis.Options{Addr:     "127.0.0.1:6379",Password: "",DB:       0,})
hook := redis_sentry.NewHook(rdb)
rdb.AddHook(hook)

示例如下

package mainimport ("context""fmt""log""time"redis_sentry "github.com/Shujie-Tan/go-redis-sentry""github.com/getsentry/sentry-go""github.com/go-redis/redis/v8"
)func main() {err := sentry.Init(sentry.ClientOptions{Debug:              true,Dsn:                "https://a5eac4fa3396cbfac8fb4baa6a9c03a3@o4504291071688704.ingest.sentry.io/4506715873804288",AttachStacktrace:   true,EnableTracing:      true,SampleRate:         1.0,TracesSampleRate:   1.0,ProfilesSampleRate: 1.0,})if err != nil {log.Fatalf("sentry.Init: %s", err)}defer sentry.Flush(2 * time.Second)ctx := context.Background()rdb := initRedis(ctx)testSimpleCmd(rdb)testCmdPipeline(rdb)sentry.CaptureMessage("test")}func testSimpleCmd(rdb *redis.Client) {ctx := context.Background()tx := sentry.StartTransaction(ctx, "test_signle_cmd")defer tx.Finish()ctx = tx.Context()status := rdb.Set(ctx, "a", 1, 2*time.Second)// assert ctxfmt.Printf("status %v\n", status)
}func testCmdPipeline(rdb *redis.Client) {ctx := context.Background()tx := sentry.StartTransaction(ctx, "test_pipeline")defer tx.Finish()ctx = tx.Context()pipe := rdb.Pipeline()incr := pipe.Incr(ctx, "pipeline_counter")pipe.Expire(ctx, "pipeline_counter", time.Hour)cmds, err := pipe.Exec(ctx)if err != nil {panic(err)}fmt.Printf("cmds %v\n", cmds)// The value is available only after Exec is called.fmt.Println(incr.Val())
}func initRedis(ctx context.Context) *redis.Client {rdb := redis.NewClient(&redis.Options{Addr:     "127.0.0.1:6379",Password: "",DB:       0,})pong, err := rdb.Ping(ctx).Result()if err != nil {fmt.Printf("connect to redis error")}fmt.Printf("connect to redis success, pong is %v\n", pong)hook := redis_sentry.NewHook(rdb)rdb.AddHook(hook)return rdb}

效果如下图
在这里插入图片描述

相关文章:

golang集成sentry: go-redis

网上没有找到go-redis集成sentry的库, 所以我简单实现了一个 代码: https://github.com/Shujie-Tan/go-redis-sentry 使用方法: import (redis_sentry "github.com/Shujie-Tan/go-redis-sentry" ) rdb : redis.NewClient(&re…...

用EXCEL从地址(上海)中提取各区(浦东新区等区)信息

背景: 朋友工作需要经常用EXCEL把各上海用户收货地址中的区提取出来,之前一直手动处理,希望我帮忙用EXCEL公式直接提取处理。 数据样式: 中国上海市浦东新区A小区 上海徐汇区B小区 中国,上海,浦东新区&a…...

关于在分布式环境中RVN和使用场景的介绍3

简介 在《关于在分布式环境中RVN和使用场景的介绍2》和《关于在分布式环境中RVN和使用场景的介绍1》中我们介绍了RVN的概念和在一些具体用例中的使用。在本文中我们讨论一下在分布式环境中使用RVN需要注意的问题。 问题 我们在收到一条待处理的事件时,需要检查该…...

计算最小公倍数math.lcm()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算最小公倍数 math.lcm() 请问以下代码输出的结果是? import math print("【执行】math.lcm(2, 4)") print(math.lcm(2, 4)) print("【执行】math.lcm(1, 2, 3…...

VUE SEO 几种方案经典面试题

1、SSR服务器渲染 Vue.js 是构建客户端应用程序的框架。默认情况下,可以再浏览器中输出Vue组件,进行生成DOM和操作DOM。然而,也可以将同一个组件渲染未服务器端的HTML字符串,将它们直接发送到浏览器,最后将这些静态标…...

Python和VBA批量提取Word中的表格

表格在word文档中常见的文档元素之一。操作word文件时有时需要提取文件中多个表格的内容到一个新的文件,甚至有时还会要提取题注信息。 今天,给大家分享两种批量提取文档中表格的两种方法,分别是VBA法和Python法两种。 一、VBA法提取word中…...

Swift Combine 有序的异步操作 从入门到精通十二

Combine 系列 Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二Swift Combine 管道 从入门到精通三Swift Combine 发布者publisher的生命周期 从入门到精通四Swift Combine 操作符operations和Subjects发布者的生命周期 从入门到精通五Swift Com…...

国产航顺HK32F030M: 超声波测距模块串口通信数据接收与处理

参考代码 /************************************************************************************************** * file usart_async_tx_no_int_rx_rxneint.c * brief 异步串口通信例程, 通过查询TXE标志发送数据,通过RXNE中断接收数据,当中断接收到数据后会将 * …...

idea:如何连接数据库

1、在idea中打开database: 2、点击 ‘’ ---> Data Source ---> MySQL 3、输入自己的账号和密码其他空白处可以不填,用户和密码可以在自己的mysql数据库中查看 4、最后选择自己需要用的数据库,点击运用ok,等待刷新即可 最后&#xff1a…...

JS中ES5和ES6的区别

前言 ES5是JavaScript的第五个修订版本,于2009年发布。而ES6是JavaScript的第六个修订版本,也称为ES2015,于2015年发布。以下是它们两个版本之前的一些区别: 变量声明方式 在ES5中,使用var关键字进行变量声明&#…...

软考24-上午题-图1

一、数据结构的回忆 线性结构:(一对一) 除首结点没有前驱、末尾结点没有后继外,一个结点只有唯一的一个直接前驱和唯一的一个直接后继。 树结构:(一对多) 除根节点没有前驱节点外,…...

书生·浦语大模型第四课作业

基础作业: 构建数据集,使用 XTuner 微调 InternLM-Chat-7B 模型, 让模型学习到它是你的智能小助手,效果如下图所示,本作业训练出来的模型的输出需要将不要葱姜蒜大佬替换成自己名字或昵称! 1.安装 # 如果你是在 Int…...

勒索攻击风起云涌,Sodinokibi深度分析

前言 Sodinokibi勒索病毒,又称为REvil勒索病毒,这款勒索病毒最早在国内被发现是2019年4月份,笔者在早期分析这款勒索病毒的时候就发现它与其他勒索病毒不同,于是被笔者称为GandCrab勒索病毒的“接班人”,为什么它是Ga…...

1124. 骑马修栅栏(欧拉路径,模板)

农民John每年有很多栅栏要修理。 他总是骑着马穿过每一个栅栏并修复它破损的地方。 John是一个与其他农民一样懒的人。 他讨厌骑马,因此从来不两次经过一个栅栏。 你必须编一个程序,读入栅栏网络的描述,并计算出一条修栅栏的路径&#xf…...

C# CAD2016获取数据操作BlockTableRecord、Polyline、DBObject

一、数据操作说明 //DBObject 基础类 DBObject dbObj (DBObject)tr.GetObject(outerId, OpenMode.ForRead); //Polyline 线段类 Polyline outerPolyline (Polyline)tr.GetObject(outerId, OpenMode.ForRead); //BlockTableRecord 块表类 BlockTableRecord modelSpace (Bloc…...

java SSM新闻管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM新闻管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S…...

Linux_线程

线程与进程 多级页表 线程控制 线程互斥 线程同步 生产者消费者模型 常见概念 下面选取32位系统举例。 一.线程与进程 上图是曾经我们认为进程所占用的资源的集合。 1.1 线程概念 线程是一个执行分支,执行粒度比进程细,调度成本比进程低线程是cpu…...

【selenium】

selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的。Selenium可以直接调用浏览器,它支持所有主流的浏览器。其本质是通过驱动浏览器,完成模拟浏览器操作,比如挑战,输入,点击等。 下载与打…...

HX711压力传感器学习一(STM32)

目录 原理图:​ 引脚介绍: HX711介绍工作原理: 程序讲解: 整套工程: 发送的代码工程,与博客的不一致,如果编译有报错请按照报错和博客进行修改 原理图: 引脚介绍: VCC和GND引…...

作业2.13

1、选择题 1.1、若有定义语句:int a[3][6]; ,按在内存中的存放顺序,a 数组的第10个元素是 D A)a[0][4] B) a[1][3] C)a[0][3] D)a[1][4] 1.2、有数组 int a[5] {10,20,30,40,50},…...

从Demo到实战:手把手教你用OpenMMLab的MMDetection训练自己的第一个目标检测模型(附数据集制作)

从零构建目标检测模型:OpenMMLab实战指南与数据集制作全流程 当你第一次成功运行OpenMMLab的Demo时,那种成就感可能很快会被新的困惑取代——如何让这套强大的工具识别你自己的数据?本文将带你跨越从"跑通示例"到"训练自定义模…...

Nodejs后端服务接入Taotoken实现AI功能的具体配置步骤

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Node.js 后端服务接入 Taotoken 实现 AI 功能的具体配置步骤 对于 Node.js 开发者而言,将大模型能力集成到后端服务中&…...

通达信缠论智能分析插件:5分钟实现专业K线结构可视化

通达信缠论智能分析插件:5分钟实现专业K线结构可视化 【免费下载链接】Indicator 通达信缠论可视化分析插件 项目地址: https://gitcode.com/gh_mirrors/ind/Indicator 你是否曾在K线图中迷失方向,看着密密麻麻的蜡烛图却不知如何判断市场趋势&am…...

从三维点胶机到桌面雕刻机:一个STM32+FPGA运动控制核心板的复用实战

从三维点胶机到桌面雕刻机:STM32FPGA运动控制核心板的复用实战 在工业自动化设备开发领域,运动控制器的复用性与平台化设计正成为工程师们关注的焦点。当我们完成一款基于STM32FPGA架构的运动控制核心板开发后,如何快速将其适配到不同应用场景…...

从Struts2漏洞看Java Web安全:一个OGNL表达式注入引发的十年“血案”

OGNL表达式注入:Struts2框架安全漏洞的十年演进与启示 2006年,当Struts2作为Struts框架的下一代产品首次亮相时,开发者社区对其寄予厚望。这个基于MVC架构的Java Web框架承诺提供更简洁的代码结构和更强大的功能扩展性。然而,很少…...

从混乱到清晰:用Nacos用户权限管理,为微服务团队划清‘责任田’

从混乱到清晰:用Nacos用户权限管理为微服务团队划清‘责任田’ 在数字化转型浪潮中,中大型企业往往面临微服务架构下的协作困境。想象一个典型场景:电商促销季来临,支付团队紧急调整流水线配置时,却意外覆盖了用户中心…...

3步高效解决Krita AI Diffusion插件IP-Adapter缺失问题

3步高效解决Krita AI Diffusion插件IP-Adapter缺失问题 【免费下载链接】krita-ai-diffusion Streamlined interface for generating images with AI in Krita. Inpaint and outpaint with optional text prompt, no tweaking required. 项目地址: https://gitcode.com/gh_mi…...

开源技能图谱引擎:构建个性化学习路径与人才发展系统

1. 项目概述:一个开源的技能图谱与学习路径引擎最近在整理个人技术栈和团队能力模型时,我一直在寻找一个能清晰映射技能关系、并据此规划学习路径的工具。市面上的商业产品要么太重、要么太封闭,直到我遇到了instavm/open-skills这个项目。简…...

30+输入法词库互转:一站式零门槛解决方案真的存在吗?

30输入法词库互转:一站式零门槛解决方案真的存在吗? 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 你是否曾因更换输入法而不得不放弃多年积…...

CircuitPython嵌入式开发实战:内存管理、BLE通信与异步编程优化

1. 项目概述:CircuitPython开发中的核心挑战与应对思路 在嵌入式硬件开发领域,CircuitPython以其对Python语法的友好支持,极大地降低了硬件编程的门槛。然而,从桌面环境转向资源极度受限的微控制器(MCU)世界…...