1

我记得在某处看到一篇文章概述了一种巧妙的方法来包装 UniVerse 动词,例如SELECT,在自定义基本程序中以记录一些指标,例如经过的时间。如果您熟悉那篇文章,简单的答案是分享该链接。

否则,我很欣赏您可以分享的任何示例代码,这些示例代码举例说明了创建此类包装器的正确方法。

我想将一些数据写入文件,并捕获诸如用户、所涉及的文件、执行选择所用的时间以及语句中包含的任何短语之类的内容SELECT。我计划将此数据发送到另一个系统进行分析和报告,以便我们可以更好地可视化各种选择的执行情况。

感谢您抽出宝贵时间,我期待与您讨论解决方案!

更新!

看到 Van 的回答后,我必须澄清一下,我最感兴趣的是记录语句的处理时间,并收集其他一些纯粹用于记录目的的信息。我的目标是让它透明化,这样我就不会破坏一切或任何东西。

我的逻辑更像这样:

  • 语句被触发,包装程序记录当前时间。
  • 普通的香草句子由包装器执行。
  • 选择完成后,wrapper 再次记录当前时间并记录与开始时间的差异。
  • 当我们在这里时,使用各种SYSTEM(x)和/或@值来捕获用户名和记录数。
  • 使用一些逻辑来解析语句并记录其他有趣的花絮。
  • 将感兴趣的值写入一个日志文件,ID 递增。
  • 用户或 proc 没有注意到,并像往常一样以选择列表结束(不知何故......在这里插入魔法)
  • 其他一些解耦过程将每条记录以常规批次的形式提供给报告系统。

这更有意义吗?

4

2 回答 2

1

我会警告这一点,我会害怕在生产系统上尝试任何类似的东西,原因有 3 个。

  1. SELECT 在很多地方都使用,如果您有很多 Phantom 和用户同时运行一些东西,这可能很快成为 I/O 问题,这会导致...
  2. 根据您的系统所找到的文件数量,以一种不会引起锁定或覆盖问题的方式有意义地组织数据将是一个巨大的挑战。
  3. SELECT 具有选择样式用法和 SQL 样式用法,它们的行为不同。
  4. 所有人都出去了,这很骇人听闻。
  5. 数数是为懦夫准备的。

也就是说,您几乎可以替换 VOC 中的任何单词。您可以将 SELECT 的 VOC 条目复制到 SELECT.BASE 中,然后用您自己的目录 SELECT 替换它,您可以在其中捕获命令行参数。

SENTENCE       = @COMMAND
FILE.NAME      = FIELD(SENTENCE,' ',2)
CONDITIONS     = FIELD(SENTENCE,' ',3,999)
NEW.STMT       = "SELECT.BASE ":FILE.NAME:" ":CONDITIONS

然后,您将在 EXECUTE NEW.STMT 之前或之后进行任何类型的处理。

我不知道这会破坏什么,因此请自担风险尝试。

于 2016-02-10T00:35:45.323 回答
0

我前段时间遇到的示例程序位于 Rocket Software 的 GitHub 存储库之一multivalue-lab中。那里的程序叫做VERBTIMER.

但是,该程序也显示了我在自己的实验中发现的错误,即忽略任何以前的活动选择列表。

我在 GitHub 上打开了一个问题,如果找到解决方案,我会更新这篇文章。

于 2016-02-22T17:13:06.500 回答