用于在运行时检测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组织。springframework。jdbc。CannotGetJdbcConnectionException:无法获取JDBC连接;   java构造函数(int,int,string)未定义;在LWJGL中创建显示   java每当我调用一个函数时,静态函数是否会在类中自动被调用?   java如何为deck类toString方法编写函数   java分析堆使用JUnit JavaFx的内容   JavaJSF2+RichFaces在托管bean中设置变量时遇到问题   java Twitter API无法更新包含圆括号的状态   java Lucene LongField错误   Java正则表达式匹配零次或一次   通过linux中的java代码从windows共享使用数据的文件系统   java Android试图在不使用移动网络的情况下向自己发送虚假短信   Android ListView中的java增长堆   java CheckStyle检查未被忽略   数组java随机选取一个类/对象   java使用Jackson仅使用规范类型字符串反序列化JSON   使用两种编程语言生成的java UUID?   case equals方法中的java hashCode方法支持wildchar