用于在运行时检测python代码的库。

diagnose的Python项目详细描述


诊断

用于在运行时检测python代码的库。

探头

结构化日志、度量和可观察性都很好,但几乎总是 要求您更改代码,这会在读取代码时中断流。 它通常还需要一个构建周期来改变;制作一张罚单没有任何乐趣, 进行检查,等待构建和部署,然后再次执行所有操作 以支持你的临时添加。做研究的时候这是双重事实, 在这里,您可以执行十几个小实验来测量您的实时代码。

这个库允许您在运行时动态添加探测。 探头为:

  • 可靠:错误永远不会影响生产代码
  • 短暂:为每种乐器设置一个“寿命”(分钟)
  • 全面:对目标函数的所有引用都已插入指令
  • 快速:通过快速的局部查找来测量大多数功能;使用hunter(在cython中)进行更具侵入性的内部探针。

通过调用attach_to(target)

>>> from path.to.module import myclass
>>> myclass().add13(arg=5)
18
>>> p = diagnose.probes.attach_to("path.to.module.myclass.add13")
>>> p.instruments["foo"] = diagnose.LogInstrument("foo", "arg")
>>> p.start()
>>> myclass().add13(arg=5)
Probe (foo) = 5
18

仪器不仅限于录音设备!使用探测器触发任何类型的事件处理程序。工具可以自由地维护自己的状态,或者从其他地方读取状态,以控制自己的行为,甚至实现反馈机制。一个真正邪恶的工具甚至可以动态地改变传递给函数的args/kwargs,或者调用任意的python代码来做任何疯狂的事情。因此,由您来控制哪些工具被添加到您的环境中。

经理

在正在运行的系统中,我们希望添加、删除、启动和停止探测器和仪器,而不必在交互提示下编写代码或重新启动系统;我们使用InstrumentManager来完成此操作。从配置全局诊断开始。管理器:

>>> diagnose.manager.instrument_classes = {
    "log": LogInstrument,
    "hist": MyHistogramInstrument,
    "incr": MyIncrementInstrument,
}
>>> diagnose.manager.global_namespace.update({"foo": foo})

稍后,您可以定义仪器:

>>> diagnose.manager.specs["instr-1"] = {
    "target": "myapp.module.file.class.method",
    "instrument": {
        "type": "log",
        "name": "myapp.method",
        "value": "result",
        "event": "return",
        "custom": {},
    },
    "lifespan": 10,
    "lastmodified": datetime.datetime.utcnow(),
    "applied": {},
}

然后在添加工具时调用diagnose.manager.apply(),如果存储在mongodb中,并且进程定义探测不是目标进程,则按计划调用diagnose.manager.apply()

applied字典将填充有关哪些进程的信息 已应用探测器,以及是否遇到任何错误。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JPA。Eclipselink没有为mySQL提供密码,但它应该提供   我的Servlet和@FormDataParam存在java问题   java将什么作为上下文参数传递到文件I/O方法中?   如果两个值相同,java无法找到其中一个单选按钮   java在变量和方法名中使用下划线   JavaSpringMVC单线程安全?   klazz类的java Arraylist(反射Api)   java如何在数字字符串中查找最频繁的数字?   JavaAPI设计:使数据更易于阅读与强制更多API调用   JavaHadoopMapReduceforGoogleWebGraph   java无法启动gauge API:Runner意外退出   java如何在bluemix上使用ibm工作负载调度器?   拉取一年中某一周特定日期的所有日期   java为什么是我的角节点。js应用程序将图像上传到S3� 邮递员正确上传时的符号?   在不使用任何第三方jar的情况下将文件从本地传输到linux系统(java代码)   java将现有文件夹复制到Eclipse工作区中新创建的项目中   Java中的regex RegExp帮助   当使用“系统”外观时,Java组合框setSelectedItem会出现故障   JavaASM:在类的方法中获取局部变量名和值