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)); } }
/** * 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}"); } }
/** * 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(); } }
* 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;
<?php $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $channel = $argv[1]; // channel $msg = $argv[2]; // msg $redis->publish('channel' . $channel, $msg);
/** * @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}"); } } }); }
/** * 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; }
<?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(); }
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"; } }
/** * publish channel message * * @param $channel * @param $message * @return int */ public function publish($message, $channel = 'email') { return $this->_redis->publish($channel, $message); }