Giter VIP home page Giter VIP logo

daemon's Introduction

Ustream_Daemon Build Status

Ustream_Daemon is a library for running php code as daemons. It works around php's limitations in this area and implements some sane default behaviors. The main goal is to provide a robust way of running php code continously while decoupling the business logic from the details of running a background task. We hate superflous boilerplate like everyone else so the daemons have a common entry point.

Download

Github: http://github.com/ustream/daemon/tree/master

Composer:

composer require ustream/daemon:~0.1.0

Versioning

We follow the guidelines on http://semver.org

Features

  • contexts
  • extensible via symfony event dispatcher

Usage

We recommend using the library with a single entry point per project. Creating this entry point is up to you, it should bootstrap your application as you need it, then call the daemon runner class:

require 'bootstrap.php';

$runner = new Ustream_Daemon_Runner();

$runner->runDaemon(
	__DIR__ . '/run', // run directory, pids are stored here
	'production',     // context it is used to suffix log filenames and pidfiles
	__DIR__ . '/ini', // ini directory, the configuration files are stored here
	array()           // event listeners
);

You can start a daemon by calling this entry point with the --id="daemon-name" parameter. The config file daemon-name.ini is used from the provided ini directory to configure the daemon.

Daemon configuration

The most important is to specify a factory method, which returns an object implementing the Ustream_Daemon_Task interface. The interface itself has only one method, doTask() - you should specify what the daemon should periodically do in this method. This is the only required element of the ini file, the others are optional.

  • factory : A string specifying a class and static factory method to get the task
  • sleep : An integer, specifying the period length of the doTask() runs. The daemon waits this many seconds (substracting the real execution length of the doTask() method, so it normally won't accumulate delay)
  • min-sleep : Another integer value in seconds, specifying the minimum break between two runs. This is useful if the task itself causes something (like system load for example) which needs a bit break even if there would be not enough time before the next run.
  • memory-limit : Specified as the php shorthand notation for bytes (see the manual ). This will be set as memory_limit via ini_set
  • memory-threshold : A value between 0 and 100. It specifies the part of the above memory-limit which is allowed to be used by the daemon, in percents. The runner checks the memory usage after each run and exits the process if it is exceeded.
  • log-dir : A path to a directory where the daemon should put its log file.
  • common-log : A path to a common log file where the daemon handler itself writes some logs (like when it starts or stops a child process). Typical use case for it is to have one file which is used by all daemons and logs their starts and stops.

An example configuration ini file:

factory=Ustream\EditorialMetrics\LogProcessor::create
sleep=0
min-sleep=0
memory-limit=256M
memory-threshold=70
log-dir=/var/log/custom_php/
common-log=/var/log/custom_php/daemon_util.log

Events

The daemon dispatches two events. One on startup, and one on each completion of its task. The event identifier constants are defined in the Ustream_Daemon_Event class. You can add listeners to these events via the addListeners() method. An example:

$daemon->addListeners(array(
			Ustream_Daemon_Event::START => array(
				array($onStartListener, 'onStart'),
			),
			Ustream_Daemon_Event::TASK_DONE => array(
				array($onTaskDoneListener, 'onTaskDone'),
			)
		);

The events are dispatched via symfony's event dispatcher, which basically means that the listener object's specified method will be called with an event object as parameter. More info about this in the symfony manual

Contributing

Please see CONTRIBUTING.md for details.

Credits

Ustream_Daemon is maintained by ustream.tv, inc

Authors:

License

Ustream_Daemon is Copyright © 2013 Ustream Inc. It is free software, and may be redistributed under the terms specified in the LICENSE file.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.