PHPCI/Plugin/XMPP.php : Add XMPP plugin notification to send notification via XMPP Network to recipients list

This commit is contained in:
Alexandre Russo 2014-05-21 10:58:25 +02:00
parent 16b44220d5
commit 9deb00a096

193
PHPCI/Plugin/XMPP.php Normal file
View file

@ -0,0 +1,193 @@
<?php
/**
* PHPCI - Continuous Integration for PHP
*
* @copyright Copyright 2014, Block 8 Limited.
* @license https://github.com/Block8/PHPCI/blob/master/LICENSE.md
* @link https://www.phptesting.org/
*/
namespace PHPCI\Plugin;
use PHPCI\Builder;
use PHPCI\Model\Build;
/**
* XMPP Notification - Send notification for successful or failure build
* @author Alexandre Russo <dev.github@ange7.com>
* @package PHPCI
* @subpackage Plugins
*/
class XMPP implements \PHPCI\Plugin
{
protected $directory;
protected $args;
protected $phpci;
protected $build;
/**
* @var string, username of sender account xmpp
*/
protected $username;
/**
* @var string, alias server of sender account xmpp
*/
protected $server;
/**
* @var string, password of sender account xmpp
*/
protected $password;
/**
* @var string, alias for sender
*/
protected $alias;
/**
* @var string, use tls
*/
protected $tls;
/**
* @var array, list of recipients xmpp accounts
*/
protected $recipients
/**
*
* @param Builder $phpci
* @param Build $build
* @param array $options
*/
public function __construct(Builder $phpci, Build $build, array $options = array())
{
$this->phpci = $phpci;
$this->build = $build;
$this->username = '';
$this->password = '';
$this->server = '';
$this->alias = '';
$this->recipients= array();
$this->tls = false;
/*
* Set recipients list
*/
if(!empty($options['recipients'])) {
if(is_string($options['recipients'])) {
$this->recipients = array($options['recipients']);
} elseif(is_array($options['recipients'])) {
$this->recipients = $options['recipients'];
}
}
$this->setOptions($options);
}
/**
* Set options configuration for plugin
*
* @param array $options
*/
protected function setOptions($options)
{
foreach (array('username', 'password', 'alias', 'tls', 'server') as $key) {
if (array_key_exists($key, $options)) {
$this->{$key} = $options[$key];
}
}
}
/**
* Get config format for sendxmpp config file
*
* @return string
*/
protected function getConfigFormat()
{
$conf = $this->username;
if(!empty($this->server)) {
$conf .= ';'.$this->server;
}
$conf .= ' '.$this->password;
if(!empty($this->alias)) {
$conf .= ' '.$this->alias;
}
return $conf;
}
/**
* Find config file for sendxmpp binary (default is ~/.sendxmpp)
*/
public static function findConfigFile()
{
if (file_exists('~/.sendxmpp')) {
if( md5(file_get_contents('~/.sendxmpp')) !==
md5($this->getConfigFormat())) {
return null;
}
return true;
}
return null;
}
/**
* Send notification message.
*/
public function execute()
{
$sendxmpp = $this->phpci->findBinary('/usr/bin/sendxmpp');
if (!$sendxmpp) {
$this->phpci->logFailure('Could not find sendxmpp.');
return false;
}
/*
* Try to build conf file
*/
if(is_null(self::findConfigFile())) {
file_put_contents('~/.sendxmpp', $this->getConfigFormat());
chmod('~/.sendxmpp', 0600);
}
/*
* Enabled ssl for connection
*/
$tls = '';
if($this->tls) {
$tls = ' -t';
}
/*
* Build message from status build
*/
if($this->build->isSuccessful()) {
$message = "✔ [".$this->build->getProjectTitle()."] Build #".
$this->build->getId()." successful";
} else {
$message = "✘ [".$this->build->getProjectTitle()."] Build #".
$this->build->getId()." failure";
}
/*
* Send XMPP notification for all recipients
*/
$success = false;
foreach($this->recipients as $recipient) {
$success = $this->phpci->executeCommand('echo %s | ' . $sendxmpp .
' %s %s', $message, $tls, $recipients);
print $this->phpci->getLastOutput();
}
return $success;
}
}