Exemplo n.º 1
0
 public function onCall(CallbackEvent $event)
 {
     $callEvent = $event->getCallEvent();
     /** @var Call $call */
     $call = $callEvent->getCall();
     $account = $call->getAccount();
     if ($call->getDirection() != CallInterface::DIRECTION_INCOMING) {
         return;
     }
     $converter = new ObjectScalarConverter();
     if ($callEvent instanceof CallEventInterface) {
         if (!$call->getClient() instanceof ClientInterface) {
             return;
         }
         $client = $call->getClient();
         $managerIds = [];
         if ($call->getCalledUsers()->count()) {
             $managerIds = $converter->reverseConvertCollection($call->getCalledUsers());
         }
         $company = null;
         if ($client->getCompany() instanceof CompanyInterface) {
             $company = $client->getCompany()->getName();
         }
         $message = ['managerIds' => $managerIds, 'event' => 'incoming-call', 'data' => ['clientId' => $client->getId(), 'name' => $client->getFirstName() . ' ' . $client->getLastName(), 'company' => $company, 'position' => $client->getPosition()]];
         $this->redis->publish('events.' . $account->getDomain(), json_encode($message));
     }
 }
Exemplo n.º 2
0
/**
 * Collate Xenon traces and publish to Redis.
 *
 * To use ArcLamp, pass this function as the callback parameter to
 * register_shutdown_function:
 *
 * <code>
 * require_once('ArcLamp.php');
 * register_shutdown_function('ArcLamp\logXenonData', ['localhost', 6379]);
 * </code>
 *
 * @param Redis|array|string $redis A Redis instance, a Redis server name,
 *   or an array of arguments for Redis::connect.
 */
function logXenonData($redis = 'localhost')
{
    if (!extension_loaded('xenon')) {
        return;
    }
    $data = \HH\xenon_get_data();
    if (!is_array($data) || !count($data)) {
        return;
    }
    if ($redis instanceof \Redis) {
        $conn = $redis;
    } else {
        $conn = new \Redis();
        call_user_func_array(array($conn, 'connect'), (array) $redis);
    }
    if (!$conn) {
        return;
    }
    foreach (combineSamples($data) as $stack => $count) {
        $conn->publish('xenon', "{$stack} {$count}");
    }
}
Exemplo n.º 3
0
 /**
  * Start Import Product Queue action.
  *
  * @return void
  */
 public function importAction($param1 = null, $param2 = null)
 {
     $redis = new \Redis();
     $redis->connect('127.0.0.1', 6379);
     $queue = $this->getDI()->get('queue');
     $queue->watch('haraapp.import');
     $config = $this->getDI()->get('config');
     $filefive = $this->getDI()->get('filefive');
     while ($job = $queue->reserve()) {
         $message = $job->getBody();
         $data = $message[0];
         // Get offline product data from mysql db
         $myProductQueue = ProductQueue::findFirst(['pid = :haravanProductId: AND status = :status: AND sid = :storeId:', 'bind' => ['haravanProductId' => $data['haravanProductId'], 'status' => ProductQueue::STATUS_QUEUE, 'storeId' => $data['storeId']]]);
         if ($myProductQueue) {
             $pass = false;
             $myStore = Store::findFirstById($data['storeId']);
             // get content, image and import to five.vn db
             $product = json_decode($myProductQueue->pdata);
             $cleanData = strip_tags($product->body_html);
             // insert table ADS
             $myAds = new Ads();
             $myAds->assign(['uid' => $myStore->uid, 'udid' => "", 'rid' => $product->id, 'cid' => $myProductQueue->fcid, 'title' => $product->title, 'slug' => Utils::slug($product->title), 'description' => $cleanData, 'price' => $product->variants[0]->price, 'instock' => 1, 'cityid' => 0, 'districtid' => 0, 'status' => 1, 'isdeleted' => 0, 'seokeyword' => $product->tags, 'lastpostdate' => time()]);
             if ($myAds->create()) {
                 $pass = true;
                 if (isset($product->images)) {
                     // Insert table IMAGES
                     foreach ($product->images as $img) {
                         $response = \Requests::get($img->src);
                         if ($response->status_code == 200) {
                             // Download image to local
                             $filePart = explode('.', $img->filename);
                             $namePart = $filePart[0];
                             $extPart = $filePart[1];
                             $path = rtrim($config->global->product->directory, '/\\') . '/' . date('Y') . '/' . date('m') . DIRECTORY_SEPARATOR;
                             $fullPath = $config->global->staticFive . $path;
                             $uploadOK = $filefive->put($path . $namePart . '.' . $extPart, (string) $response->body);
                             // Resise image
                             $myResize = new PhImage($fullPath . $namePart . '.' . $extPart);
                             $orig_width = $myResize->getWidth();
                             $orig_height = $myResize->getHeight();
                             $height = $orig_height * 1200 / $orig_width;
                             $mediumHeight = $orig_height * 600 / $orig_width;
                             $smallHeight = $orig_height * 200 / $orig_width;
                             $myResize->resize(1200, $height)->crop(1200, $height)->save($fullPath . $namePart . '.' . $extPart);
                             $myResize->resize(600, $mediumHeight)->crop(600, $mediumHeight)->save($fullPath . $namePart . '-medium' . '.' . $extPart);
                             $myResize->resize(200, $smallHeight)->crop(200, $smallHeight)->save($fullPath . $namePart . '-small' . '.' . $extPart);
                             if ($uploadOK) {
                                 // Save to db
                                 $myImage = new Images();
                                 $myImage->assign(['aid' => $myAds->id, 'name' => $myAds->title, 'path' => $path . $namePart . '.' . $extPart, 'status' => Images::STATUS_ENABLE, 'orderNo' => $img->position]);
                                 if ($myImage->save()) {
                                     // Update first image to ads table
                                     if ($img->position == 1) {
                                         $myAds->image = $path . $namePart . '.' . $extPart;
                                         $myAds->update();
                                     }
                                 } else {
                                     echo "cannot save image!";
                                 }
                             } else {
                                 echo "cannot download image!";
                             }
                         } else {
                             echo "cannot get image url!";
                         }
                     }
                 }
                 $imageName = strlen($myAds->image) > 0 ? $myAds->image : "";
                 // Save to product_map table
                 $myProduct = new ProductMap();
                 $myProduct->assign(['sid' => $myStore->id, 'uid' => $myStore->uid, 'hid' => $data['haravanProductId'], 'aid' => $myAds->id, 'cid' => $myAds->cid, 'title' => $myAds->title, 'price' => $myAds->price, 'image' => $imageName, 'slug' => $myAds->slug, 'status' => $myAds->status]);
                 $myProduct->create();
                 // Delete queued data. (Production)
                 // $myProductQueue->delete();
             } else {
                 $pass = false;
             }
             if ($pass) {
                 $myProductLog = new ProductLog();
                 $myProductLog->assign(['sid' => $myStore->id, 'message' => 'Ads name ' . $myAds->title . ' has been created!', 'type' => ProductLog::TYPE_IMPORT, 'status' => ProductLog::STATUS_COMPLETED, 'class' => 'succcess']);
                 $myProductLog->create();
                 // update okie
                 $myCategoryMap = CategoryMap::findFirst(['hid = :haravanId: AND fid = :fid: AND sid = :storeId:', 'bind' => ['haravanId' => $data['haravanId'], 'fid' => $myProductQueue->fcid, 'storeId' => $data['storeId']]]);
                 $myCategoryMap->totalItemSync++;
                 $myCategoryMap->totalItemQueue--;
                 $myCategoryMap->update();
                 // generate total process, when import a product success
                 $totalItem = CategoryMap::sum(['column' => 'totalItem', 'conditions' => 'hid = ' . $data['haravanId'] . ' AND sid = ' . $data['storeId']]);
                 $totalItemSync = CategoryMap::sum(['column' => 'totalItemSync', 'conditions' => 'hid = ' . $data['haravanId'] . ' AND sid = ' . $data['storeId']]);
                 $process = $totalItemSync * 100 / $totalItem;
                 // Push process
                 $meta = ['shopName' => $myStore->name, 'record' => $process];
                 $redis->publish('notification', json_encode($meta));
                 // send message.
                 // When process all products in category map, update store mapped to OK
                 if ($process == 100) {
                     $myStore->mapped = Store::MAPPED;
                     $myStore->update();
                     $myProductLog = ProductLog::findFirst('status = ' . ProductLog::STATUS_CURRENT_PROCESSING . ' AND type = ' . ProductLog::TYPE_IMPORT . ' AND sid = ' . $myStore->id);
                     $myProductLog->status = ProductLog::STATUS_COMPLETED;
                     $myProductLog->update();
                 }
             }
         }
         $job->delete();
     }
 }
Exemplo n.º 4
0
 * A simple PHP script to allow speech recongition of color selections.
 * Publishes selections on a Tropo channel through a persistent socket connection.
 * 
 */
// Redis settings
define("REDIS_HOST", "bass.redistogo.com");
define("REDIS_PORT", 9219);
define("REDIS_PASS", "1604d5037f6fd79b71f158019a1eff04");
$redis = new Redis(REDIS_HOST, REDIS_PORT);
$redis->connect();
$redis->auth(REDIS_PASS);
say("Welcome to the Redis and socket I O test.");
do {
    $result = ask("Say the color you want to see. When done, say stop.", array("choices" => "white, blue, green, yellow, stop"));
    _log("*** User selected: " . $result->value . " ***");
    $response = $redis->publish("tropo.color", $result->value);
} while ($result->value != 'stop');
$redis->disconnect();
say("Goodbye.");
hangup();
class Redis
{
    // Private class members.
    private $server;
    private $port;
    private $sock;
    private $auth;
    function __construct($host = 'localhost', $port = 6379)
    {
        $this->host = $host;
        $this->port = $port;
Exemplo n.º 5
0
<?php

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$channel = $argv[1];
// channel
$msg = $argv[2];
// msg
$redis->publish('channel' . $channel, $msg);
Exemplo n.º 6
0
 /**
  * @param string $channel
  * @param string $msg
  */
 public function publish($channel, $msg)
 {
     $this->_redis->publish($channel, $msg);
 }
                } else {
                    $func = $frame['function'];
                }
                if ($func !== end($stack)) {
                    $stack[] = $func;
                }
            }
            if (count($stack)) {
                // The last element is usually (but not always) the full file
                // path of the script name. We want things nice and consistent,
                // so we pop off the path if it is there, and push the basename
                // instead.
                if (strpos(end($stack), $entryPoint) !== false) {
                    array_pop($stack);
                }
                $stack[] = $entryPoint;
                $strStack = implode(';', array_reverse($stack));
                if (!isset($stacks[$strStack])) {
                    $stacks[$strStack] = 0;
                }
                $stacks[$strStack] += 1;
            }
        }
        $redis = new Redis();
        if ($redis->connect('fluorine.eqiad.wmnet', 6379, 0.1)) {
            foreach ($stacks as $stack => $count) {
                $redis->publish('xenon', "{$stack} {$count}");
            }
        }
    });
}
Exemplo n.º 8
0
 /**
  * push action.
  *
  * @Route("/push", methods={"GET", "POST"}, name="site-import-push")
  */
 public function pushAction()
 {
     $redis = new \Redis();
     $redis->connect('127.0.0.1', 6379);
     $meta = ['shopName' => $this->session->get('shop'), 'record' => 0];
     for ($i = 1; $i <= 100; $i++) {
         sleep(1);
         $meta['record'] = $i;
         $i += 10;
         $redis->publish('notification', json_encode($meta));
         // send message.
     }
     die;
 }
Exemplo n.º 9
0
<?php

$update = false;
$redis = new Redis();
try {
    $redis->connect('127.0.0.1', 6379);
    if (isset($_GET['c']) && !empty($_GET['c'])) {
        $redis->set('cobbler:count', $_GET['c']);
        $update = true;
    }
    if (isset($_GET['s']) && !empty($_GET['s'])) {
        $redis->set('cobbler:speed', $_GET['s']);
        $update = true;
    }
    if ($update) {
        $redis->publish('cobbler', 'update');
        echo 'OK';
    } else {
        echo 'NO_UP';
    }
    $redis->close();
} catch (Exception $e) {
    echo 'ERROR ' . $e->getMessage();
}
Exemplo n.º 10
0
 public function feed()
 {
     /*
      *
      *
      *
      */
     $food = "";
     $errorMessage = "";
     if (!empty(file_get_contents("php://input"))) {
         $raw = file_get_contents("php://input");
         //some test data for filling
         if ($food = json_decode($raw, true)) {
         } else {
             header("HTTP/1.0 400 Error");
             echo "invalid JSON format";
         }
         if ($food != "") {
             // Validation block, to check if payLoad have endpoint, correct url provided and allowed method
             if (isset($food['endpoint'])) {
                 if (isset($food['data'])) {
                     if (!in_array(strtolower($food['endpoint']['method']), $this->params['allowedMethods'])) {
                         $errorMessage = "Wrong Method (" . $food['endpoint']['method'] . ")";
                     }
                     if (!preg_match("/\\b(?:(?:https?):\\/\\/|www\\.)[-a-z0-9+&@#\\/%?=~_|!:,.;]*[-a-z0-9+&@#\\/%=~_|]/i", $food['endpoint']['url'])) {
                         $errorMessage = "URL is invalid";
                     }
                 } else {
                     $errorMessage = "Missing Load";
                 }
             } else {
                 $errorMessage = "Missing Endpoint";
             }
             if ($errorMessage == "") {
                 //print_r($food);
                 $redis = new Redis();
                 if ($redis->connect('127.0.0.1', 6379)) {
                     $countCalls = 0;
                     if (strtolower($food['endpoint']['method']) == 'post') {
                         //if post, then all data will be submitted at onst filling
                         $recordUUI = sha1(microtime() . $raw . mt_rand());
                         $time = time();
                         $args = array('load' => $raw, 'time' => $time, 'count' => 0);
                         //saving data into redis, using multi to save roundtrips
                         $redis->multi()->hMset($recordUUI, $args)->zAdd('sQue', $time, $recordUUI)->incrBy('postCalls', 1)->incrBy('requestCount', 1)->incrBy('loadVolume', mb_strlen($raw, '8bit'))->exec();
                     }
                     if (strtolower($food['endpoint']['method']) == "get") {
                         //for GET compatibility sake break load into multiple calls
                         //$recordData[]='que';
                         $recordDataForSortedSet[] = 'sQue';
                         foreach ($food['data'] as $index => $data) {
                             $time = time();
                             $recordUUI = sha1(microtime() . $raw . mt_rand());
                             $recordData[] = $recordUUI;
                             $recordDataForSortedSet[] = $time;
                             $recordDataForSortedSet[] = $recordUUI;
                             $breaking['endpoint'] = $food['endpoint'];
                             $breaking['data'] = $data;
                             $args = array('load' => json_encode($breaking, JSON_UNESCAPED_SLASHES), 'time' => $time, 'count' => 0);
                             $redis->hMset($recordUUI, $args);
                             $countCalls++;
                         }
                         //saving data into redis, didn't find method to use multi for that
                         //call_user_func_array(array($redis, 'lpush'), $recordData);
                         call_user_func_array(array($redis, 'zAdd'), $recordDataForSortedSet);
                         //sorted list for process
                         $redis->multi()->incrBy('requestCount', 1)->incrBy('loadVolume', mb_strlen($raw, '8bit'))->incrBy('getCalls', $countCalls)->exec();
                         //print_r($err = $redis->getLastError());
                         //print_r($ind);
                     }
                     echo 'ok';
                     $redis->publish('queue', '1');
                 } else {
                     header("HTTP/1.0 400 Error");
                     echo 'Redis is offline';
                 }
             } else {
                 header("HTTP/1.0 400 Error");
                 echo $errorMessage;
             }
         }
     } else {
         header("HTTP/1.0 400 Error");
         echo "No Payload";
     }
 }
Exemplo n.º 11
0
 /**
  * publish channel message
  *
  * @param $channel
  * @param $message
  * @return int
  */
 public function publish($message, $channel = 'email')
 {
     return $this->_redis->publish($channel, $message);
 }