使用 Sentry 监控业务日志

Sentry 是一个错误日志收集和聚合的平台,我们可以在程序中捕获异常,并发送到 Sentry 服务端进行聚合统计、展示和报警。 相关文档参考:http://sentry.readthedocs.org/en/latest/ 准备工作 安装 Docker: 启动 Docker: 安装 redis Docker 镜像: 安装 PostgreSQL Docker 镜像: 生成 secret token(sentry会返回类似于 “9qa)zi)wrz5e9vrln=%fv3wlkyen5#nf-f10q#4h%1ygn!q8ha”的字符串,下文用 <token>代替): 初始化 PostgreSQL,过程中会提示创建用户: 启动 Sentry: 现在从浏览器访问 http://127.0.0.1:12000/,就可以看到 Sentry 的主界面了: 当然,只有界面是不够的,下面会说明如何完成一个上报异常的 demo 选择 “管理” => “项目” 左侧的某一个项目,点击进入设置选项卡,选择 “Client Keys”,右侧会展示 SDK 需要的 API Key: 记下 Sentry 提供的 Key,我们的 demo 中会用到: 运行1次,dashboard 中就会出现对应的记录了:  

Read More

cloudflare 面试题答案

cloudflare 面试题 答案如下: 1) What is the lowest TCP port number? 0 2) The TCP frame has an URG pointer field, when is it used? 使用URG标识的数据包可以在同一个TCP连接上使用不同的channel传输数据;同时,在数据的接收方,这部分数据会保存在另外一个buffer中。接受到URG数据包后,应用会收到信号:带有UGR标识的数据包来了。目前使用UGR的应用层协议中,最常见的就是FTP。URG数据包用于FTP服务在忙于传输数据时接收其他的FTP命令使用。 3) Can the RST packet have a payload? 可以,但没有实现(?) 4) When is the “flow” field in IPv6 used? 参考:https://tools.ietf.org/html/rfc6294#section-1.2 flow label 为实时流提供有别于尽力而为流的服务。 5) What does the IP_FREEBIND socket option … Continue reading "cloudflare 面试题答案"

Read More

javascript 解析 lisp 表达式

问题 项目中需要前端解析出 lisp 表达式中的内容后,渲染到页面上: 解决 同事离职前实现了一版,思路是使用正则表达式捕获住对应的内容,缺点也是显而易见的:不够灵活。我参考了 (How to Write a (Lisp) Interpreter (in Python)) 中的实现,完成了一版 javascript 的实现。 函数 tokenize 用于将字符串预处理成统一的形式: 函数 read_from_tokens 负责将字符串解析成对应的数据: 工具函数 atom 负责处理变量类型相关的工作: 看下效果,还不错:

Read More