thunderwolf / sf-task-logger-plugin

该包已被废弃,不再维护。未建议替代包。

symfony 1.x 任务日志插件 - 允许您运行任务并将结果存储在数据库和/或日志文件中。

安装: 144

依赖: 1

建议者: 0

安全: 0

星标: 1

关注者: 3

分支: 0

开放问题: 0

类型:symfony1-plugin

1.0.5 2013-12-01 12:31 UTC

This package is not auto-updated.

Last update: 2022-02-16 23:38:46 UTC


README

sfTaskLoggerPlugin 允许您运行自定义任务并存储结果。结果存储在特定表中的数据库中,以及/或日志文件中。每个任务都有其自己的日志文件,根据其命名空间和名称存储在特定目录中。(/log/tasks/:TASK_NAMESPACE/:TASK_NAME)。它允许您记录所有由您的 symfony 项目执行的 CRON 任务干净的日志历史。

数据库记录存储以下信息

  • 任务名称
  • 任务参数列表
  • 任务选项列表
  • 处理记录数
  • 未处理记录数
  • 标志,表示任务是否正在运行
  • 无错误完全处理的最后一个记录 ID
  • 处理开始时间
  • 处理结束时间
  • 标志,表示任务是否无错误完成
  • 任务成功或失败的错误代码
  • 任务的完整控制台输出(可选)
  • 与任务关联的日志文件路径
  • 关于任务及其结果的额外管理员评论(可以通过管理员生成模块进行修改)

插件基本任务具有几个有用的选项

  • config:插件使用的 YAML 配置(在下一节中解释)
  • check-running:检查任务当前是否未运行
  • only-processed:只有在任务处理了一些东西时才记录到日志或数据库中
  • once-by-day:检查任务今天是否已经执行过一次

注意 该插件同时与 DoctrinePropel 兼容,如果您使用 Doctrine,将使用 /lib/config/doctrine/schema.yml,而使用 Propel 将使用 /lib/config/schema.yml。(抱歉,我没有使用最新的 1.4 包测试 Propel 版本,如果您使用它与 Propel 一起使用,请随时向我报告问题。管理员生成模块也不可用。)

安装

  • 安装插件

     $ symfony plugin:install sfTaskLoggerPlugin
    

    (下载并解压到您的 /plugins 目录或使用 svn http://svn.symfony-project.com/plugins/sfTaskLoggerPlugin/tags/sfTaskLoggerPlugin_1_0_4/

  • 构建新的插件表和相关模型

     $ ./symfony doctrine:build --all-classes --db --and-load --env=dev
    

(或单独启动每个 "构建" 任务)

或者对于 Propel

    $ symfony propel:build-all-load

注意 在此阶段,您应该有

  • 在您的数据库中有一个名为 tl_tasks 的新表
  • lib/model/sfTaskLoggerPluginlib/model/doctrine/sfTaskLoggerPlugin 中的新模型类集
  • 清除您的缓存

     $ symfony cc
    

配置

插件附带一个名为 base 的任务类,其名称为 sfBaseTaskLoggerTask。因此,您的任务必须扩展此类。由于任务级别没有自动加载,必须手动包含它。

[php]
require_once(dirname(__FILE__). '/sfBaseTaskLoggerTask.class.php');

注意 当然,您需要根据任务的位置更改此路径。例如,如果它在项目的 /lib/task 文件夹中,请使用以下代码。

通常,您会希望使用自定义项目任务扩展所有任务,以便它们都能从中受益于其通用方法、参数或选项(因此,它必须保持抽象)。它看起来像这样

[php]
/**
 * This the base task for all tasks of myProject.
 *
 * @author COil
 * @since  01/09/2010
 */

require_once(dirname(__FILE__). '/../../plugins/sfTaskLoggerPlugin/lib/task/sfBaseTaskLoggerTask.class.php');

abstract class mySuperBaseTask extends sfBaseTaskLoggerTask
{
  /**
   * This function is callable by all the project tasks.
   */
  public function superFunction()
  {
  }
}

您的最终任务应继承此自定义任务,如下所示

[php]
/**
 * This a custom task
 *
 * @author Vernet Loïc aka COil <qrf_coil]at[yahoo[dot]fr>
 * @since  1.0.0 - 7 aug 2009
 */
class sfMyTask extends mySuperBaseTask
{
  // check the following section for functions to implement
}

此外,此插件附带一个 默认 YAML 配置文件,此文件允许您指定是否要记录到数据库、文件或两者都记录

  • /plugins/sfTaskLoggerPlugin/config/plugin_sftl.yml 复制到您的应用程序的 config 文件夹。然后此文件将被使用。

  • 现在,您可以添加自己的配置。(复制粘贴默认配置并重命名配置键)您应该保留 default 项,这是插件提供的基本配置。

  • 要为特定任务使用特定配置,请将 config 选项传递给任务。(--config=myConfig),其中 myConfig 是您的配置键。如果配置无效,将引发警报。

使用方法

在您的任务(如上面的 sfMyTask)中

  • 1 - 实现与标准任务相同的 configure() 方法:(不要忘记调用父方法以包含通用参数和选项)

    [php]
      /**
       * Main task configuration.
       */
      protected function configure()
      {
        parent::configure();
    
        $this->addArguments(array(
          new sfCommandArgument('arg_1', sfCommandArgument::OPTIONAL, 'Test argument 1', 'arg_1_value'),
          new sfCommandArgument('arg_2', sfCommandArgument::OPTIONAL, 'Test argument 2', 'arg_2_value'),
        ));
    
        $this->namespace = 'sf_task_logger';
        $this->name      = 'sample';
    
        $this->briefDescription = 'This is a sample task !';
    
        $this->detailedDescription = <<<EOF
    The task [sf_task_logger:sample|INFO] doesn't do that much.
    It logs itself in the database and in the file system:
    
      [./symfony sf_task_logger:sample --env=prod|INFO]
    EOF;
      }
    

现在有两个具体方法需要实现

  • 2 - checkParameters()(也不要忘记调用父方法)

    [php]
    /**
     * Advanced check of task parameters.
     */
    protected function checkParameters($arguments = array(), $options = array())
    {
      parent::checkParameters($arguments, $options);
    
      if ($this->args['arg_1'] != 'arg_1_value')
      {
        throw new InvalidArgumentException('The value for argument 1 is not valid ! Check the help of the task.');
      }
    
      return true;
    }
    

注意 此方法可用于对任务参数或参数进行高级控制。如果有至少一个无效参数,则引发 InvalidArgumentException。不要忘记首先调用父函数,以便在基本任务级别(或在您的项目基本任务级别)检查通用参数。(或您的项目基本任务级别)

  • 4 - doProcess()

    [php]
    /**
     * Main task process.
     */
    protected function doProcess($arguments = array(), $options = array())
    {
      try
      {
        $this->printAndLog(' - This is a log info !!');
        $this->task->setErrorCode(self::ERROR_CODE_SUCCESS);
        $this->setOk();
      }
      catch (Exception $e)
      {
        $this->task->setErrorCode(self::ERROR_CODE_FAILURE);
        $this->setNOk($e);
      }
    }
    

注意 这是您任务处理的主要方法。`$this->task` 是将要保存的数据库对象。如您所见,`setOk()` 和 `setNOk` 方法允许根据任务的成败自动设置状态标志。我们还设置了一个状态码,它将比成功或失败提供更多关于过程如何结束的详细信息。

如果您想从给定的 id 中恢复批处理过程,您可以使用 `last_id_processed` 字段来完成此操作。

最后,如果您想对任务过程有更多控制,也可以重新实现基类的 execute() 方法,该方法负责调用所有其他子函数

[php]
/**
 * Global process of the task.
 *
 * @see sfTask
 */
protected function execute($arguments = array(), $options = array())
{
  $this->createContext();

  $this->config = $this->checkAndGetConfig($options['config']);

  $this->checkConfig();

  $this->setParameters($arguments, $options);

  $this->initDatabaseManager();

  $this->checkParameters($arguments, $options);

  $this->initLogger();

  $this->logStart();

  $this->doProcess($arguments, $options);

  $this->logEnd();
}

管理生成模块

此插件附带一个方便的管理生成模块(Doctrine、symfony >= 1.2),以便管理主要的 tl_task 表。

将模块 tl_task 添加到您的应用程序 settings.yml 文件的启用模块列表中。

    enabled_modules:  [default, tl_task]

生成插件的所有模型文件后,编辑 /lib/model/doctrine/sfTaskLoggerPlugin/tlTaskTable.class.php 类,使其扩展类 PlugintlTaskTableExtended

[php]
/**
 * tlTaskTable
 *
 * This class has been auto-generated by the Doctrine ORM Framework
 */
class tlTaskTable extends PlugintlTaskTableExtended
{
    /**
     * Returns an instance of this class.
     *
     * @return object tlTaskTable
     */
    public static function getInstance()
    {
        return Doctrine_Core::getTable('tlTask');
    }
}

然后调用模块,you_backend.php/tl_task!就这样!;)

注意 此插件为此管理生成模块提供了一条路由 tl_task

注意

注意 此插件捆绑了一个示例任务:`/lib/task/sfTaskLoggerSampleTask.class.php`,可以使用以下命令运行(将 "frontend" 替换为项目有效的应用程序名称,将 "dev" 替换为有效的环境)

> ./symfony task-logger:sample --application="frontend" --env="dev"

还有一个任务:`/lib/task/sfTaskLoggerPurgeRunningTask.class.php`,用于清除以致命错误结束并保持运行标志为 "ON" 的任务

> ./symfony task-logger:purge --task="myProject:myTask" --application=backend --env="dev"

控制台输出

在运行计划任务时,您可能希望禁用控制台输出,例如,由于某些服务器相关配置的问题 - 在这种情况下,请将 --quiet 选项添加到您的命令行

 ./symfony task-logger:sample --application=frontend --env="prod" --quiet

待办事项

  • V1.1.0:高级功能以保持“已处理对象”的状态
  • V1.0.5:测试Propel版本

支持

请给我发送电子邮件或在symfony TRAC上报告错误,如果您在symfony邮件列表上提问,我也可以回答。

变更日志

(检查变更日志选项卡)

再见。 COil :)

本插件由 SQL Technologies 赞助

SQL Technologies