创建自定义计划作业监视器 ATG

Creating a custom Scheduled Job monitor ATG

我目前正在研究如何最终创建一个 Web 应用程序,该应用程序能够监控网站上 运行 的计划作业。它基于 ATG,我一直在研究很多 OOTB 组件,我认为我对它有所了解,但是我真的缺乏关于 ATG 的知识,因为我是一名实习生谁真的只认真看了 1/2 个月。

我目前的想法是通过扩展 SingletonSchedulableService 将我的自定义代码挂接到 performScheduledTask 但是所有当前的计划任务都在扩展 SingletonSchedulableService 并且进入每个 (30+) java 文件并更改它们听起来不是个好主意?我真的不确定。

以下代码是我希望使用预先存在的 performScheduledTask 将我自己的代码添加到其中的粗略想法。当 doScheduledTask 被调用时,我发送一条消息说它正在开始,当它结束时查看是否有错误并发送一条合适的消息。

public void performScheduledTask(Scheduler scheduler, ScheduledJob job) {
    boolean gotLock = false;

    try {
        gotLock = acquireLock();

        if (gotLock) {
            if (isLoggingDebug())

            try {
                startTime= getJobTime();
                sendToStart(name, description, id, startTime);
                doScheduledTask(scheduler, job);

            } catch (Exception e){ 
                errorMsg= e.getMessage();
            }

            if (mErrorMessage == null) {
                endTime= getJobTime();
                String msg= "This job completed successfully";
                sendToSuccess(name, description, id, endTime, msg);
            } else {
                endtime = getJobTime();
                sendToFail(name, description, id, endtime, msg);
            }

        } else if (isLoggingDebug())
            logDebug("sleeping until next scheduled wakeup.");

    } finally {
        if (gotLock) 
            releaseLock();
    }

}

我现在有点迷茫,因为我从来没有完全靠自己完成过一个网络应用程序,更不用说将它挂接到这些预定的工作中了,所以非常感谢任何帮助。如果您需要任何额外信息,请告诉我。

那么您是否考虑过使用 dyn/admin 来达到这个目的?有一个可以访问的页面 http://<your-host-name:<port>/dyn/admin/nucleus/atg/dynamo/service/Scheduler,其中有很多您要查找的信息。

此外,计划组件内置了性能监视器,其中实现了方法 startOperationendOperation。建议您查看使用这些而不是将您的代码挂钩到 performScheduledTask() 方法中。对于计划组件上的 属性,性能监视器可以是 enabled/disabled。

希望对您有所帮助。

大多数 Oracle Commerce 站点将使用某种形式的日志监控来监控和提醒问题,包括计划服务。 Splunk 是一个流行的工具。

识别对站点重要的错误并为它们设置操作可能需要一些迭代过程。

如果您想留在 ATG 框架内,您可以扩展日志系统,创建一个新的 LogEvent 接收器来侦听来自特定 Originator 的消息,然后执行一些操作,例如发送电子邮件。

这是关于日志框架的文档。

https://docs.oracle.com/cd/E41069_01/Platform.11-0/ATGPlatformProgGuide/html/s1102logevents01.html

另一种方法是扩展每个计划服务 classes 并将服务的 $class 属性设置为新的 class。通过这种方式,您可以 "intercept" 调用 performScheduledTask 并添加您的逻辑、捕获异常等。

performScheduledTask(..){

  try{
    super.performScheduledTask()
  }catch(SomeException ex){
     //Do something with it
  }

}

这样您就不会更改每个现有 classes 中的任何代码,您可以选择您要使用的服务 "monitoring"